<?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>219759</bug_id>
          
          <creation_ts>2020-12-10 15:13:14 -0800</creation_ts>
          <short_desc>Enable Metal backend for ANGLE, add non-spirvX compiler path for GLSL to Metal translation</short_desc>
          <delta_ts>2021-01-06 14:52:48 -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>WebGL</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>
          <dependson>220129</dependson>
          <blocked>220076</blocked>
    
    <blocked>220137</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kyle Piddington">kpiddington</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>jdarpinian</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1713740</commentid>
    <comment_count>0</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2020-12-10 15:13:14 -0800</bug_when>
    <thetext>Enable Metal backend for ANGLE, add non-spirvX compiler path for GLSL to Metal translation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713742</commentid>
    <comment_count>1</comment_count>
      <attachid>415937</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2020-12-10 15:31:05 -0800</bug_when>
    <thetext>Created attachment 415937
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713744</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-12-10 15:32:36 -0800</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See https://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713746</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-10 15:34:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/72200222&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713797</commentid>
    <comment_count>4</comment_count>
      <attachid>415958</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2020-12-10 18:53:18 -0800</bug_when>
    <thetext>Created attachment 415958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713964</commentid>
    <comment_count>5</comment_count>
      <attachid>416012</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2020-12-11 10:46:19 -0800</bug_when>
    <thetext>Created attachment 416012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714086</commentid>
    <comment_count>6</comment_count>
      <attachid>416046</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2020-12-11 14:13:35 -0800</bug_when>
    <thetext>Created attachment 416046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714093</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-12-11 14:33:02 -0800</bug_when>
    <thetext>This is amazing work! A couple of comments:

- Does this really enable the Metal backend for ANGLE in WebKit by default? If so, could I suggest doing that in a separate patch? That way if it needs to be turned off due to any regressions, this large patch won&apos;t be reverted.

- While the ANGLE update instructions in WebKit say to update changes.diff, at this point that file is automatically regenerated when ANGLE is rolled into WebKit via the Tools/Scripts/update-angle script. Including the changes in changes.diff doubles the size of this already-large patch, and makes it harder to review, so would you consider skipping that step? (Assuming doing so is OK with the other teammates)

- Could you document in this bug description and in the ChangeLog more precisely what this patch implements? It looks like you&apos;ve implemented support for transform feedback (fantastic!) - it would be really great to document that.

- Would you consider uploading this patch upstream to the ANGLE project per https://github.com/google/angle/blob/master/doc/ContributingCode.md ? The ANGLE developers would love to work with you to get this work integrated upstream.

Will add more comments on the patch itself. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714136</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-11 15:54:20 -0800</bug_when>
    <thetext>We won&apos;t enable this by default yet. I&apos;ve already added an Internal setting for this, which means developers can toggle it (but not people using Safari Technology Preview).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714137</commentid>
    <comment_count>9</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-11 15:56:03 -0800</bug_when>
    <thetext>We&apos;ll also post this to ANGLE as soon as possible, which is where the official review will happen. Landing it here is our way of testing it on more systems as it is officially integrated into ANGLE, and then copied back to WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714138</commentid>
    <comment_count>10</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-12-11 15:57:53 -0800</bug_when>
    <thetext>Thanks Dean - all sounds great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714244</commentid>
    <comment_count>11</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-12 03:01:05 -0800</bug_when>
    <thetext>Seems like the patch is too big for the review tool. Here are some comments:

- don&apos;t include changes.diff (Ken mentioned this)
- We can probably leave the complete list of files out of the ChangeLog
- The GCC_PREPROCESSOR_DEFINITIONS should go in the .xcconfig files
- I don&apos;t think we should change ANGLE&apos;s ASSERT macro
- src/common/platform.h checks for iOS &lt; 13, but I don&apos;t believe we support that any more in WebKit
- src/common/utilities.cpp should probably keep the clang #pragma

I&apos;ll fix some of these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714245</commentid>
    <comment_count>12</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-12 03:19:59 -0800</bug_when>
    <thetext>This patch broke depth textures on iOS because it removed a bit of code that was intentionally not checking for some required depth formats (because iOS OpenGL doesn&apos;t support them). I expect this backend does support them, so we&apos;ll need to make this a runtime decision based on the backend. However, it should be ok to continue NOT checking :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714246</commentid>
    <comment_count>13</comment_count>
      <attachid>416046</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-12 03:35:17 -0800</bug_when>
    <thetext>Comment on attachment 416046
Patch

Before landing I:

- Fixed the depth texture and other failure
- removed changes.diff
- Put the ANGLE_ENABLE_METAL preprocessor definition in the configuration files
- Reverted the changes to ANGLE&apos;s ASSERT
- Reverted the change to the #pragma clang warning</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714247</commentid>
    <comment_count>14</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2020-12-12 03:45:26 -0800</bug_when>
    <thetext>Committed r270733: &lt;https://trac.webkit.org/changeset/270733&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415937</attachid>
            <date>2020-12-10 15:31:05 -0800</date>
            <delta_ts>2020-12-10 18:53:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219759-20201210153058.patch</filename>
            <type>text/plain</type>
            <size>1495934</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggNTM0MzA3Y2YxZTdhOGVjZGRjNDFkZTBjN2E2MjdlMThmMjRjZmI1YS4uYTMzOTA5MzI3ZjMy
ODJmNzYyNWJhMDRjYzg2YmEwYjEwMDY4MWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjAtMTItMTAgIEt5bGUgUGlkZGluZ3RvbiAgPGtwaWRk
aW5ndG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGRlZCBhIG5ldyBiYWNrZW5kIGZvciB0cmFu
c2xhdGluZyBHTFNMIGNvbnRlbnQgdG8gTVNMLiBBZGRlZCBmaXhlcywgdXBkYXRlcywgYW5kIHdv
cmthcm91bmRzIGluIHRoZSBvcGVuIHNvdXJjZQorICAgICAgICBtZXRhbCBiYWNrZW5kIGZvciBB
TkdMRS4KKyAgICAgICAKKwlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE5NzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworCVRoaXMgY2hh
bmdlbG9nIGluY2x1ZGVzIGEgV2ViR0wxIGNvbXBsaWFudCB0cmFuc3BpbGVyIGZvciBHTFNMIGNv
bnRlbnQuIFdpdGggdGhpcyBjaGFuZ2UsCisgICAgICAgIHdlIGNhbiBsZXZlcmFnZSB0aGUgYWxy
ZWFkeSBwcmVzZW50IG9wZW4gc291cmNlIHdvcmsgaW4gdGhlIEFOR0xFIHByb2plY3QgdG8gZW5h
YmxlIHdlYmdsIHRvIHJ1biBvbiB0b3Agb2YgTWV0YWwuIAorICAgICAgICBJbiBhZGRpdGlvbiwg
dGhpcyBwYXRjaCBjb250YWlucyBhIG51bWJlciBvZiBmaXhlcyB0byB0aGUgbWV0YWwgYmFja2Vu
ZC4gCisgICAgICAgIAorICAgICAgICBUZXN0OiBUZXN0cyB3ZXJlIHZhbGlkYXRlZCB3aXRoIHRo
ZSBkRVFQIHRlc3Qgc3VpdGUgd2l0aCBBTkdMRSwgaW4gYWRkaXRpb24gdG8gcnVubmluZyBzdGFu
ZGFyZCBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWc6
CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAgICAgICAgKiBpbmNs
dWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmg6CisgICAgICAgICogc3JjL2NvbW1vbi9Qb29sQWxs
b2MuY3BwOgorICAgICAgICAoYW5nbGU6OkFsbG9jYXRpb246OmNoZWNrQWxsb2NMaXN0IGNvbnN0
KToKKyAgICAgICAgKiBzcmMvY29tbW9uL1Bvb2xBbGxvYy5oOgorICAgICAgICAoYW5nbGU6OkFs
bG9jYXRpb246OmNoZWNrQWxsb2MgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21tb24vYXBwbGVf
cGxhdGZvcm1fdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvY29tbW9uL2RlYnVnLmg6CisgICAgICAg
ICogc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfaW9zLm1tOiBBZGRlZC4KKyAgICAgICAgKGFuZ2xl
OjpHZXRFeGVjdXRhYmxlUGF0aCk6CisgICAgICAgIChhbmdsZTo6R2V0RXhlY3V0YWJsZURpcmVj
dG9yeSk6CisgICAgICAgIChhbmdsZTo6R2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbik6CisgICAg
ICAgIChhbmdsZTo6R2V0Q3VycmVudFRpbWUpOgorICAgICAgICAqIHNyYy9jb21tb24vdXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKGdsOjpWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAg
KiBzcmMvY29tbW9uL3V0aWxpdGllcy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL0NvZGVHZW4uY3BwOgorICAgICAgICAoc2g6OkNvbnN0cnVjdENvbXBpbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHA6CisgICAgICAgIChzaDo6VENvbXBpbGVyOjpj
aGVja0FuZFNpbXBsaWZ5QVNUKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oOgorICAgICAgICAoc2g6OlRTaEhhbmRsZUJhc2U6OmdldEFzVHJhbnNsYXRvck1l
dGFsRGlyZWN0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVu
aW9uLmNwcDoKKyAgICAgICAgKHNoOjpUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24pOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaDoKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcDoKKyAgICAgICAgKHNo
OjpUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayk6CisgICAgICAgIChzaDo6VEludGVybURlY2xh
cmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24pOgorICAgICAgICAoc2g6OlRJbnRlcm1BZ2dyZWdh
dGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlSW50ZXJuYWwpOgorICAgICAgICAoc2g6OlRJbnRlcm1B
Z2dyZWdhdGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKToKKyAgICAgICAgKHNo
OjpUSW50ZXJtQWdncmVnYXRlQmFzZTo6aW5zZXJ0Q2hpbGROb2Rlcyk6CisgICAgICAgIChzaDo6
VEludGVybUFnZ3JlZ2F0ZTo6c2hhbGxvd0NvcHkgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9TeW1ib2wuY3BwOgorICAgICAgICAoc2g6OlRGdW5jdGlvbjo6YnVpbGRNYW5nbGVk
TmFtZSBjb25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmg6
CisgICAgICAgIChzaDo6VEZ1bmN0aW9uOjppc0RlZmluZWQgY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dlbi5jcHA6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcDoKKyAgICAg
ICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRF
bmFibGVkQ29uc3ROYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OnRyYW5zbGF0
ZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6Omlu
c2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6cmVwbGFjZUFsbE1haW5EaXNjYXJkVXNlcyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRv
ck1ldGFsOjpjcmVhdGVEaXNjYXJkV3JhcHBlckZ1bmMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6ZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNo
OjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCk6CisgICAgICAg
IChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3RO
YW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OkdldFJhc3Rlcml6YXRp
b25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFs
RGlyZWN0OjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKToKKyAgICAgICAgKHNoOjpU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbik6Cisg
ICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJl
Y3Q6OmdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJlZiBjb25zdCk6CisgICAgICAgIChzaDo6R2V0
TXNsS2V5d29yZHMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNs
YXRlSW1wbCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0Ojp0cmFuc2xhdGUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdt
YVN0ZGdsSW52YXJpYW50QWxsKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaDogQWRkZWQuCisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsUmVmbGVjdGlvbjo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6flRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgor
ICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZE9yaWdpbmFsTmFtZSk6
CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6YWRkU2FtcGxlckJpbmRp
bmcpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZFRleHR1cmVC
aW5kaW5nKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjphZGRVbmlm
b3JtQnVmZmVyQmluZGluZyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlv
bjo6Z2V0T3JpZ2luYWxOYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0
aW9uOjpnZXRTYW1wbGVyQmluZGluZ3MgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb246OmdldFRleHR1cmVCaW5kaW5ncyBjb25zdCk6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzIGNvbnN0
KToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpnZXRTYW1wbGVyQmlu
ZGluZyBjb25zdCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0
VGV4dHVyZUJpbmRpbmcgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxl
Y3Rpb246OmdldFVuaWZvcm1CdWZmZXJCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKHNoOjpUcmFu
c2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpyZXNldCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsRGlyZWN0OjplbmFibGVFbXVsYXRlZEluc3RhbmNlSUQpOgorICAgICAgICAoc2g6OlRyYW5z
bGF0b3JNZXRhbERpcmVjdDo6Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxp
Y2l0VHlwZUNhc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVy
KToKKyAgICAgICAgKHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNh
c3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6Vmlld0Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgKHNoOjpDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUpOgorICAg
ICAgICAoc2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUpOgorICAgICAgICAoQWNxdWlyZUZ1bmN0
aW9uRXh0cmFzKToKKyAgICAgICAgKHNoOjpDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZCk6CisgICAg
ICAgIChzaDo6QWRkUGFyYW1ldGVyc0Zyb20pOgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb24p
OgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0pOgorICAgICAgICAo
c2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMpOgorICAgICAgICAoc2g6OkNsb25lRnVu
Y3Rpb25BbmRDaGFuZ2VSZXR1cm5UeXBlKToKKyAgICAgICAgKHNoOjpHZXRBcmcpOgorICAgICAg
ICAoc2g6OlNldEFyZyk6CisgICAgICAgIChzaDo6R2V0RmllbGRJbmRleCk6CisgICAgICAgIChz
aDo6QWNjZXNzRmllbGQpOgorICAgICAgICAoc2g6OkFjY2Vzc0ZpZWxkQnlJbmRleCk6CisgICAg
ICAgIChzaDo6QWNjZXNzSW5kZXgpOgorICAgICAgICAoc2g6OlN1YlZlY3Rvcik6CisgICAgICAg
IChzaDo6SXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoc2g6OklzVmVjdG9yQmFzaWNUeXBl
KToKKyAgICAgICAgKHNoOjpIYXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoSW5pdFR5cGUp
OgorICAgICAgICAoc2g6OkNsb25lVHlwZSk6CisgICAgICAgIChzaDo6SW5uZXJtb3N0VHlwZSk6
CisgICAgICAgIChzaDo6RHJvcENvbHVtbnMpOgorICAgICAgICAoc2g6OkRyb3BPdXRlckRpbWVu
c2lvbik6CisgICAgICAgIChTZXRUeXBlRGltc0ltcGwpOgorICAgICAgICAoc2g6OlNldFZlY3Rv
ckRpbSk6CisgICAgICAgIChzaDo6U2V0TWF0cml4Um93RGltKToKKyAgICAgICAgKHNoOjpIYXNN
YXRyaXhGaWVsZCk6CisgICAgICAgIChzaDo6SGFzQXJyYXlGaWVsZCk6CisgICAgICAgIChzaDo6
Q29lcmNlU2ltcGxlKToKKyAgICAgICAgKHNoOjpBc1R5cGUpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmg6IEFk
ZGVkLgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpTdHJpbmdPYnNlcnZlcik6CisgICAg
ICAgIChzaDo6U3RyaW5nT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoc2g6OlN0cmluZ09i
c2VydmVyOjpnZXROZWVkbGUgY29uc3QpOgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpy
ZXNldCk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6RXNjYXBlZFNpbmsp
OgorICAgICAgICAoc2g6OkRlYnVnU2luazo6RXNjYXBlZFNpbms6On5Fc2NhcGVkU2luayk6Cisg
ICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6Z2V0KToKKyAgICAgICAgKHNoOjpE
ZWJ1Z1Npbms6OkVzY2FwZWRTaW5rOjpvcGVyYXRvciBUSW5mb1NpbmtCYXNlICYpOgorICAgICAg
ICAoc2g6OkRlYnVnU2luazo6RGVidWdTaW5rKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6Ondh
dGNoKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6OmVyYXNlKToKKyAgICAgICAgKHNoOjpEZWJ1
Z1Npbms6OnNpemUpOgorICAgICAgICAoc2g6OkRlYnVnU2luazo6c3RyIGNvbnN0KToKKyAgICAg
ICAgKHNoOjpEZWJ1Z1Npbms6OmNfc3RyIGNvbnN0KToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6
OmVzY2FwZSk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpvcGVyYXRvcjw8KToKKyAgICAgICAg
KHNoOjpEZWJ1Z1Npbms6Om9uV3JpdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OkRpc2NvdmVyZXI6OkRpc2NvdmVyZXIpOgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRl
cGVuZGVudEZ1bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlcjo6RGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcik6CisgICAgICAgIChEaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyOjpkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFs
LmNwcDogQWRkZWQuCisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVy
c2VyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEluZGVudGF0aW9uKToKKyAgICAgICAgKEdl
dE9wZXJhdG9yU3RyaW5nKToKKyAgICAgICAgKEdldE9wZXJhdG9yUHJlY2VkZW5jZSk6CisgICAg
ICAgIChHZXRBc3NvY2lhdGl2aXR5KToKKyAgICAgICAgKElzU3ltYm9saWNPcGVyYXRvcik6Cisg
ICAgICAgIChBc1NwZWNpZmljQmluYXJ5Tm9kZSk6CisgICAgICAgIChQYXJlbnRoZXNpemUpOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6Omdyb3VwZWRUcmF2ZXJzZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZpZXIpOgorICAgICAgICAoRW1pdE5hbWUp
OgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YpOgorICAgICAgICAoR2Vu
TWV0YWxUcmF2ZXJzZXI6OmVtaXRCYXJlVHlwZU5hbWUpOgorICAgICAgICAoR2VuTWV0YWxUcmF2
ZXJzZXI6OmVtaXRUeXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RmllbGRE
ZWNsYXJhdGlvbik6CisgICAgICAgIChCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXApOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFN0cnVjdERlY2xhcmF0aW9uKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0VmFyaWFibGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2wpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OmVtaXRTaW5nbGVDb25zdGFudCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdENvbnN0YW50VW5pb25BcnJheSk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdENvbnN0YW50VW5pb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
Q29uc3RhbnRVbmlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l6emxl
KToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZCk6CisgICAgICAg
IChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoSXNQb3N0Zml4KToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5KToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0SWZFbHNlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFN3aXRjaCk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRDYXNlKToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAoR2VuTWV0YWxU
cmF2ZXJzZXI6OmVtaXRGdW5jdGlvblJldHVybik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdEZ1bmN0aW9uUGFyYW1ldGVyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2
aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6QnVpbGRG
dW5jVG9OYW1lKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE9wZW5CcmFjZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdENsb3NlQnJhY2UpOgorICAgICAgICAoUmVxdWlyZXNTZW1p
Y29sb25UZXJtaW5hdG9yKToKKyAgICAgICAgKE5ld2xpbmVQYWQpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZp
c2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJz
ZXI6OnZpc2l0RGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
TG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGb3JMb29wKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFdoaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRh
bFRyYXZlcnNlcjo6dmlzaXREb1doaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OkVtaXRNZXRhbCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpyZWFkQm9v
bEVudlZhcik6CisgICAgICAgIChzaDo6cmVhZFN0cmluZ0VudlZhcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpSZXdyaXRlcjo6cmV3cml0ZSk6CisgICAgICAgIChzaDo6SG9pc3RDb25zdGFudHMpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9I
b2lzdENvbnN0YW50cy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKElkR2Vu
OjpJZEdlbik6CisgICAgICAgIChJZEdlbjo6Y3JlYXRlTmV3TmFtZSk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9MYXlvdXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFJvdW5kVXBUb011bHRpcGxlT2YpOgorICAg
ICAgICAoTGF5b3V0OjpyZXF1aXJlQWxpZ25tZW50KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChMYXlvdXQ6Om9wZXJhdG9yKz0pOgorICAgICAgICAoTGF5
b3V0OjpvcGVyYXRvcio9KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0b3IrIGNvbnN0KToKKyAg
ICAgICAgKExheW91dDo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFNjYWxhckxheW91dE9m
KToKKyAgICAgICAgKHNoOjpPdmVybGF5KToKKyAgICAgICAgKHNoOjpDYW5CZVBhY2tlZCk6Cisg
ICAgICAgIChzaDo6U2V0QmxvY2tTdG9yYWdlKToKKyAgICAgICAgKENvbW1vbkdsc2xTdHJ1Y3RM
YXlvdXRPZik6CisgICAgICAgIChDb21tb25HbHNsTGF5b3V0T2YpOgorICAgICAgICAoc2g6Okds
c2xMYXlvdXRPZik6CisgICAgICAgIChzaDo6R2xzbFN0cnVjdExheW91dE9mKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0Lmg6
IEFkZGVkLgorICAgICAgICAoc2g6OkxheW91dDo6SWRlbnRpdHkpOgorICAgICAgICAoc2g6Okxh
eW91dDo6SW52YWxpZCk6CisgICAgICAgIChzaDo6TGF5b3V0OjpCb3RoKToKKyAgICAgICAgKHNo
OjpNZXRhbExheW91dE9mKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5jcHA6IEFkZGVkLgor
ICAgICAgICAoTWFwcGVyOjpNYXBwZXIpOgorICAgICAgICAoc2g6Ok1hcEZ1bmN0aW9uc1RvRGVm
aW5pdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpNYXBTeW1ib2xzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcDog
QWRkZWQuCisgICAgICAgIChNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmF0IGNvbnN0KToKKyAgICAgICAg
KE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmZpbmQgY29uc3QpOgorICAgICAgICAoTW9kaWZp
ZWRTdHJ1Y3RNYWNoaW5lcmllczo6aW5zZXJ0KToKKyAgICAgICAgKHNoOjpUcnlDcmVhdGVNb2Rp
ZmllZFN0cnVjdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpNb2RpZnlT
dHJ1Y3RDb25maWc6OlByZWRpY2F0ZTo6RmFsc2UpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0cnVj
dENvbmZpZzo6UHJlZGljYXRlOjpUcnVlKToKKyAgICAgICAgKHNoOjpNb2RpZnlTdHJ1Y3RDb25m
aWc6OlNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGUpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0
cnVjdENvbmZpZzo6U2F0dXJhdGVWZWN0b3I6OkZ1bGx5U2F0dXJhdGUpOgorICAgICAgICAoc2g6
Ok1vZGlmeVN0cnVjdENvbmZpZzo6TW9kaWZ5U3RydWN0Q29uZmlnKToKKyAgICAgICAgKHNoOjpN
b2RpZmllZFN0cnVjdE1hY2hpbmVyeTo6Z2V0Q29udmVydGVyKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoR2V0TmFtZSk6CisgICAgICAgIChOYW1lOjpOYW1lKToKKyAgICAgICAgKE5hbWU6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoTmFtZTo6b3BlcmF0b3IhPSBjb25zdCk6Cisg
ICAgICAgIChOYW1lOjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoTmFtZTo6ZW1wdHkgY29u
c3QpOgorICAgICAgICAoTmFtZTo6YmVnaW5zV2l0aCBjb25zdCk6CisgICAgICAgIChOYW1lOjpl
bWl0IGNvbnN0KToKKyAgICAgICAgKHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5o
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpOYW1lOjpOYW1lKToKKyAgICAgICAgKHNoOjpOYW1lOjpy
YXdOYW1lIGNvbnN0KToKKyAgICAgICAgKHNoOjpOYW1lOjpzeW1ib2xUeXBlIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBpcGVsaW5lOjp1c2VzIGNvbnN0KToKKyAgICAg
ICAgKFBpcGVsaW5lOjpnZXRTdHJ1Y3RUeXBlTmFtZSBjb25zdCk6CisgICAgICAgIChQaXBlbGlu
ZTo6Z2V0U3RydWN0SW5zdGFuY2VOYW1lIGNvbnN0KToKKyAgICAgICAgKEFsbG93UGFja2luZyk6
CisgICAgICAgIChBbGxvd1BhZGRpbmcpOgorICAgICAgICAoQ29tcGFyZUJ5KToKKyAgICAgICAg
KFNhdHVyYXRlVmVjdG9yT2YpOgorICAgICAgICAoUGlwZWxpbmU6OmV4dGVybmFsU3RydWN0TW9k
aWZ5Q29uZmlnIGNvbnN0KToKKyAgICAgICAgKFBpcGVsaW5lOjphbHdheXNSZXF1aXJlc0xvY2Fs
VmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbiBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6aXNQ
aXBlbGluZU91dCBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6ZXh0ZXJuYWxBZGRyZXNzU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoUGlwZWxpbmVTdHJ1Y3RzOjptYXRjaGVzIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChzaDo6UGlwZWxpbmVTY29wZWQ6Om1hdGNoZXMgY29u
c3QpOgorICAgICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1RvdGFsbHlGdWxsIGNvbnN0KToK
KyAgICAgICAgKHNoOjpQaXBlbGluZVNjb3BlZDo6aXNUb3RhbGx5RW1wdHkgY29uc3QpOgorICAg
ICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1VuaWZvcm0gY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVk
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OlByb2dyYW1QcmVsdWRlOjpQcm9ncmFtUHJlbHVk
ZSk6CisgICAgICAgIChzaDo6UHJvZ3JhbVByZWx1ZGU6OmVtaXRHdWFyZCk6CisgICAgICAgIChB
TkdMRV9pc192ZWN0b3I6OlBST0dSQU1fUFJFTFVERV9ERUNMQVJFKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUu
aDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6
OlJlZHVjZXI6OlJlZHVjZXIpOgorICAgICAgICAoc2g6OlJlZHVjZUludGVyZmFjZUJsb2Nrcyk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJlbmNlLmg6IEFkZGVkLgorICAg
ICAgICAoc2g6OlJlZjo6UmVmKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChzaDo6UmVm
OjpvcGVyYXRvcjw9IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPj0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6
Om9wZXJhdG9yPiBjb25zdCk6CisgICAgICAgIChzaDo6UmVmOjpnZXQpOgorICAgICAgICAoc2g6
OlJlZjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgJik6CisgICAg
ICAgIChzaDo6UmVmOjpvcGVyYXRvciBUIGNvbnN0ICYgY29uc3QpOgorICAgICAgICAoc2g6OlJl
Zjo6b3BlcmF0b3IgVCAqKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgY29uc3QgKiBj
b25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlQ2FzZURlY2xhcmF0aW9u
cyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlm
aWVyRGVjbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpGaW5kRGVjbGFyZWRHbG9iYWxzOjpG
aW5kRGVjbGFyZWRHbG9iYWxzKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgor
ICAgICAgICAoc2g6OlJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxR
dWFsaWZpZXJEZWNscy5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpJbnZhcmlhbnRzOjppbnNlcnQp
OgorICAgICAgICAoc2g6OkludmFyaWFudHM6OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6Om1heWJlQ3JlYXRlTmV3TmFt
ZSk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OmNyZWF0ZVJlbmFtZWQpOgorICAgICAgICAoc2g6
OlJld3JpdGVyOjp0cnlHZXRSZW5hbWVkSW1wbCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OnRy
eUdldFJlbmFtZWQpOgorICAgICAgICAoc2g6OlJld3JpdGVyOjpnZXRSZW5hbWVkT3JPcmlnaW5h
bCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6Om5lZWRzUmVuYW1pbmdJbXBsIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjo6bmVlZHNSZW5hbWluZyBjb25zdCk6CisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6dmlzaXRTeW1ib2wp
OgorICAgICAgICAoc2g6OlJld3JpdGVyOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAg
ICAgKHNoOjpSZXdyaXRlS2V5d29yZHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaDogQWRkZWQuCisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVPdXRBcmdzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZCBj
b25zdCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6bXVsdGlwbGljaXR5IGNvbnN0KToK
KyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjppbnNlcnQpOgorICAgICAgICAoc2g6OlNtYWxs
TXVsdGlTZXQ6OmNsZWFyKToKKyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjplbXB0eSBjb25z
dCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6dW5pcXVlU2l6ZSBjb25zdCk6CisgICAg
ICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZE11dGFibGUpOgorICAgICAgICAoc2g6OkdldFZh
cmlhYmxlKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgorICAgICAgICAoc2g6
OlJld3JpdGVPdXRBcmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaDogQWRkZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGlu
ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpQaXBlbGluZVN0cnVjdEluZm86OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkV4ZWMpOgorICAg
ICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmV4ZWMpOgorICAgICAgICAo
c2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmNyZWF0ZUludGVybmFsUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkNyZWF0ZVBpcGVsaW5lTWFpbkxvY2FsVmFyKToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52OjpQaXBlbGluZUZ1bmN0aW9uRW52KToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52Ojppc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbiBjb25zdCk6
CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6aXNVcGRhdGVkUGlwZWxpbmVGdW5j
dGlvbiBjb25zdCk6CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6Z2V0VXBkYXRl
ZEZ1bmN0aW9uKToKKyAgICAgICAgKHNoOjpQaXBlbGluZUZ1bmN0aW9uRW52OjpjcmVhdGVVcGRh
dGVkRnVuY3Rpb25Qcm90b3R5cGUpOgorICAgICAgICAoc2g6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rp
b25zOjpUaHJlYWRQaXBlbGluZSk6CisgICAgICAgIChzaDo6VXBkYXRlUGlwZWxpbmVGdW5jdGlv
bnM6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKToKKyAgICAgICAgKHNoOjpVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9uczo6Z2V0SW50ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAgICAgICAgKHNoOjpV
cGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6Z2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAg
ICAgICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXROb25NYWluKToKKyAgICAg
ICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXRNYWluKToKKyAgICAgICAgKHNo
OjpVcGRhdGVQaXBlbGluZVN5bWJvbHMpOgorICAgICAgICAoc2g6OlJld3JpdGVQaXBlbGluZSk6
CisgICAgICAgIChzaDo6UmV3cml0ZVBpcGVsaW5lcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHA6IEFkZGVkLgorICAgICAgICAo
c2g6OklzT3V0UGFyYW0pOgorICAgICAgICAoc2g6OklzVmVjdG9yQWNjZXNzKToKKyAgICAgICAg
KHNoOjpJc0Fzc2lnbkVxdWFsc1NpZ24pOgorICAgICAgICAoc2g6OklzQ29tcG91bmRBc3NpZ24p
OgorICAgICAgICAoc2g6OlJldHVybnNSZWZlcmVuY2UpOgorICAgICAgICAoc2g6OkRlY29tcG9z
ZUNvbXBvdW5kQXNzaWdubWVudCk6CisgICAgICAgIChzaDo6UmV3cml0ZXIxOjpSZXdyaXRlcjEp
OgorICAgICAgICAoc2g6OlJld3JpdGVyMjo6cmVxdWlyZXNBZGRyZXNzaW5nIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjI6OlJld3JpdGVyMik6CisgICAgICAgIChzaDo6UmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmg6
IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHNoOjpJc0luZGV4KToKKyAgICAgICAgKHNoOjpWaWV3QmluYXJ5Q2hhaW4pOgorICAgICAgICAo
c2g6OlByZVBhc3M6OlByZVBhc3MpOgorICAgICAgICAoc2g6OlByZVBhc3M6OnJlYXNzb2NpYXRl
UmlnaHQpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6U2VwYXJhdG9yKToKKyAgICAgICAgKHNo
OjpTZXBhcmF0b3I6OnB1c2hTdG10KToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmlzVGVybWlu
YWxFeHByKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OnB1bGxNYXBwZWRFeHByKToKKyAgICAg
ICAgKHNoOjpTZXBhcmF0b3I6OmlzU3RhbmRhbG9uZUV4cHIpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaEJpbmRpbmcpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6cHVzaFN0YWNrcyk6
CisgICAgICAgIChzaDo6U2VwYXJhdG9yOjpwb3BTdGFja3MpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaFN0bXRzSW50b0Jsb2NrKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmJ1aWxk
QmxvY2tXaXRoVGFpbEFzc2lnbik6CisgICAgICAgIChzaDo6U2VwYXJhdGVDb21wb3VuZEV4cHJl
c3Npb25zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U2VwYXJh
dG9yOjpTZXBhcmF0b3IpOgorICAgICAgICAoc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9T
a2lwcGluZ1RyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNl
cjo6U2tpcHBpbmdUcmF2ZXJzZXIpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdFN3aXp6bGUpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoc2g6OlNr
aXBwaW5nVHJhdmVyc2VyOjp2aXNpdElmRWxzZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2
ZXJzZXI6OnZpc2l0U3dpdGNoKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlz
aXRDYXNlKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0
ZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKToKKyAgICAgICAgKHNo
OjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1Ry
YXZlcnNlcjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcDogQWRkZWQuCisg
ICAgICAgIChTdHJ1Y3RGaW5kZXI6OlN0cnVjdEZpbmRlcik6CisgICAgICAgIChTdHJ1Y3RGaW5k
ZXI6OkZpbmRTdHJ1Y3RzKToKKyAgICAgICAgKFRlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyk6Cisg
ICAgICAgIChUZW1wbGF0ZUFyZzo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChUZW1wbGF0
ZUFyZzo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1l
OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpv
cGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmVtcHR5
IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpjbGVhcik6CisgICAg
ICAgIChTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUgY29uc3QpOgorICAgICAgICAo
U3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmFzc2lnbik6CisgICAgICAgIChTeW1ib2xFbnY6OlN5
bWJvbEVudik6CisgICAgICAgIChTeW1ib2xFbnY6OnJlbWFwIGNvbnN0KToKKyAgICAgICAgKFN5
bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVybG9hZEltcGwpOgorICAgICAgICAoU3ltYm9sRW52Ojpn
ZXRGdW5jdGlvbk92ZXJsb2FkKToKKyAgICAgICAgKFN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3Zl
cmxvYWQpOgorICAgICAgICAoU3ltYm9sRW52OjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoU3lt
Ym9sRW52OjpnZXRUZXh0dXJlRW52KToKKyAgICAgICAgKFN5bWJvbEVudjo6Z2V0U2FtcGxlclN0
cnVjdCk6CisgICAgICAgIChTeW1ib2xFbnY6Om1hcmtTcGFjZSk6CisgICAgICAgIChTeW1ib2xF
bnY6OmlzU3BhY2UgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKToK
KyAgICAgICAgKFN5bWJvbEVudjo6bWFya0FzUmVmZXJlbmNlKToKKyAgICAgICAgKFN5bWJvbEVu
djo6aXNQb2ludGVyIGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6aXNSZWZlcmVuY2UgY29u
c3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQYWNrZWQpOgorICAgICAgICAoU3ltYm9s
RW52Ojppc1BhY2tlZCBjb25zdCk6CisgICAgICAgIChHZXRUZXh0dXJlQmFzaWNUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaDogQWRkZWQuCisgICAg
ICAgIChzaDo6VmFyRmllbGQ6OlZhckZpZWxkKToKKyAgICAgICAgKHNoOjpWYXJGaWVsZDo6dmFy
aWFibGUgY29uc3QpOgorICAgICAgICAoc2g6OlZhckZpZWxkOjpmaWVsZCBjb25zdCk6CisgICAg
ICAgIChzaDo6VmFyRmllbGQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoc3RkOjpoYXNo
PHNoOjpWYXJGaWVsZD46Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc2g6OlRlbXBsYXRl
QXJnOjpraW5kIGNvbnN0KToKKyAgICAgICAgKHNoOjpUZW1wbGF0ZUFyZzo6dmFsdWUgY29uc3Qp
OgorICAgICAgICAoc2g6OlN5bWJvbEVudjo6c3ltYm9sVGFibGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpCdWlsZEdyYXBoSW1wbCk6CisgICAgICAgIChzaDo6
VG9wb3NvcnQpOgorICAgICAgICAoc2g6OkNyZWF0ZVN0cnVjdEVxdWFsaXR5RnVuY3Rpb24pOgor
ICAgICAgICAoc2g6OkdldEFzRGVjbGFyZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoc2g6OkZpbmRT
dHJ1Y3RFcXVhbGl0eVVzZTo6RmluZFN0cnVjdEVxdWFsaXR5VXNlKToKKyAgICAgICAgKHNoOjpG
aW5kU3RydWN0RXF1YWxpdHlVc2U6OnVzZVN0cnVjdCk6CisgICAgICAgIChzaDo6VG9wb3NvcnRT
dHJ1Y3RzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OldyYXBwZXI6OldyYXBwZXIpOgorICAgICAgICAoc2g6OldyYXBwZXI6OnZp
c2l0TWFpbik6CisgICAgICAgIChzaDo6V3JhcE1haW4pOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OmdldEJhc2ljTWV0YWxTdHJpbmcpOgorICAgICAgICAoc2g6
OmdldEJ1aWx0SW5NZXRhbFR5cGVOYW1lU3RyaW5nKToKKyAgICAgICAgKHNoOjpHZXRNZXRhbFR5
cGVOYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxVdGlscy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yVnVsa2FuLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBl
cy5oOgorICAgICAgICAoc2g6OlRUeXBlOjppc1JhbmswIGNvbnN0KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHA6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5j
cHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dp
dGNoRmFsbFRocm91Z2guY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwOgorICAgICAgICAoc2g6OlNpbXBsaWZ5
TG9vcENvbmRpdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvQXNOb2RlLmg6IEFkZGVkLgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtTm9kZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50
ZXJtVHlwZWQ+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVN5bWJv
bD46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQ29uc3RhbnRVbmlv
bj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGU+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVByZXByb2Nl
c3NvckRpcmVjdGl2ZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
U3dpenpsZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQmluYXJ5
Pjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1VbmFyeT46OmV4ZWMp
OgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtVGVybmFyeT46OmV4ZWMpOgorICAg
ICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtSWZFbHNlPjo6ZXhlYyk6CisgICAgICAgIChz
aDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1Td2l0Y2g+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2
OjpBc05vZGU8VEludGVybUNhc2U+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtQWdncmVnYXRlPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2Rl
PFRJbnRlcm1CbG9jaz46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpB
c05vZGU8VEludGVybURlY2xhcmF0aW9uPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNO
b2RlPFRJbnRlcm1Mb29wPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRl
cm1CcmFuY2g+OjpleGVjKToKKyAgICAgICAgKHNoOjphc05vZGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3Bw
OgorICAgICAgICAoc2g6OkludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbCBj
b25zdCk6CisgICAgICAgIChzaDo6SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaCBjb25z
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5v
ZGVQYXR0ZXJuTWF0Y2hlci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoc2g6OkFsbEJpdHMpOgorICAgICAgICAoc2g6OkFueUJpdHMpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRHJvcCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OnNpbmdsZSBjb25zdCk6CisgICAgICAgIChzaDo6IGNvbnN0KToK
KyAgICAgICAgKHNoOjpQcmVSZXN1bHQ6OlByZVJlc3VsdCk6CisgICAgICAgIChzaDo6UHJlUmVz
dWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6OlBvc3RSZXN1bHQpOgor
ICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OlRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
flRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50
RnVuY3Rpb24gY29uc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnRO
b2RlIGNvbnN0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6cmVidWlsZFJvb3QpOgor
ICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZSk6CisgICAgICAgIChz
aDo6VEludGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlSW1wbCk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnJlYnVpbGQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2
ZXJzZUFueUFzKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdh
dGVCYXNlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2RlU3RhY2tH
dWFyZDo6Tm9kZVN0YWNrR3VhcmQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2Rl
U3RhY2tHdWFyZDo6fk5vZGVTdGFja0d1YXJkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dHJhdmVyc2VBbnkpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBy
ZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQ2hpbGRyZW4pOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCbG9ja0NoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VVbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1S
ZWJ1aWxkOjp0cmF2ZXJzZUlmRWxzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVi
dWlsZDo6dHJhdmVyc2VTd2l0Y2hDaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlQ2FzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbik6Cisg
ICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxkcmVuKToKKyAgICAg
ICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbik6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUHJlKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dmlzaXRGdW5jdGlvblByb3RvdHlwZVByZSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QmluYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRU
ZXJuYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l6emxlUHJl
KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRJZkVsc2VQcmUpOgorICAgICAg
ICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0Q2FzZVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OnZpc2l0TG9vcFByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QnJhbmNo
UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZSk6
CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUpOgorICAgICAgICAo
c2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSk6CisgICAg
ICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0Q29uc3RhbnRVbmlvblBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdCk6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0VW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRCaW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dmlzaXRUZXJuYXJ5UG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
U3dpenpsZVBvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFBvc3QpOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQb3N0KToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QnJhbmNoUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
RGVjbGFyYXRpb25Qb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9j
a1Bvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVBvc3Qp
OgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uUG9zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVJlYnVpbGQuaDogQWRkZWQuCisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OkJhc2VSZXN1bHQ6Ok11bHRpKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6UHJlUmVz
dWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OlBvc3RSZXN1bHQ6Ok11
bHRpKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9kZVR5
cGUuaDogQWRkZWQuCisgICAgICAgIChzaDo6R2V0Tm9kZVR5cGU6OkdldE5vZGVUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXROb2RlVHlwZTo6b3BlcmF0b3IoKSk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdXRpbC5jcHA6CisgICAgICAgIChzaDo6SXNPdXRwdXRNZXRhbERpcmVj
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oOgorICAgICAgICAq
IHNyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW06CisgICAgICAgIChhbmdsZTo6
R2V0U3lzdGVtSW5mbyk6CisgICAgICAgICogc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19p
b3MuY3BwOgorICAgICAgICAoYW5nbGU6OkdldFN5c3RlbUluZm9faW9zKToKKyAgICAgICAgKiBz
cmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29zLm1tOgorICAgICAgICAoYW5nbGU6Okdl
dFN5c3RlbUluZm9fbWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvQ2Fwcy5jcHA6CisgICAg
ICAgIChnbDo6R2V0Rm9ybWF0U3VwcG9ydEJhc2UpOgorICAgICAgICAoZ2w6OkRldGVybWluZUFT
VENMRFJUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChnbDo6RGV0ZXJtaW5lRGVwdGhUZXh0dXJl
QU5HTEVTdXBwb3J0KToKKyAgICAgICAgKGdsOjpEZXRlcm1pbmVEZXB0aFRleHR1cmVPRVNTdXBw
b3J0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2w6
OkRpc3BsYXk6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5o
OgorICAgICAgICAqIHNyYy9saWJBTkdMRS9Qcm9ncmFtLmg6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL1Byb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2RyaXZlcl91dGlscy5jcHA6CisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oOgorICAgICAgICAocng6Oklz
TWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5t
bTogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2RyaXZlcl91dGlsc19tYWMubW0uCisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMubW06CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNw
cDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5j
dGlvbnMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9E
aXNwbGF5Q0dMLm1tOgorICAgICAgICAocng6OkRpc3BsYXlDR0w6OmluaXRpYWxpemUpOgorICAg
ICAgICAocng6OkRpc3BsYXlDR0w6OmlzVmFsaWROYXRpdmVXaW5kb3cgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tOgorICAgICAg
ICAocng6OkRpc3BsYXlFQUdMOjppbml0aWFsaXplKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFH
TDo6dGVybWluYXRlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6aXNWYWxpZE5hdGl2ZVdp
bmRvdyBjb25zdCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmdlbmVyYXRlRXh0ZW5zaW9u
cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1
bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9FQUdMRnVuY3Rpb25zLm1tOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbToKKyAgICAgICAgKHJ4OjpJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6SU9TdXJmYWNlU3VyZmFjZUVBR0wpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VFQUdMOjpiaW5kVGV4SW1hZ2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VFQUdMOjpyZWxlYXNlVGV4SW1hZ2UpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcDoKKyAgICAgICAgKGFu
Z2xlOjpHZXRMb2FkRnVuY3Rpb25zTWFwKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQlVJTEQuZ246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0J1ZmZlck10bC5oOgorICAgICAgICAocng6OkJ1ZmZlck10bDo6Z2V0Q2xpZW50U2hhZG93Q29w
eURhdGEpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwu
bW06CisgICAgICAgIChyeDo6QnVmZmVyTXRsOjpzZXREYXRhKToKKyAgICAgICAgKHJ4OjpCdWZm
ZXJNdGw6Om1hcFJhbmdlKToKKyAgICAgICAgKHJ4OjpCdWZmZXJNdGw6OnNldERhdGFJbXBsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW06Cisg
ICAgICAgIChyeDo6Q29tcGlsZXJNdGw6OmdldFRyYW5zbGF0b3JPdXRwdXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oOgorICAg
ICAgICAocng6OkNvbnRleHRNdGw6OmdldFByb2dyYW0gY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OkNvbnRleHRNdGwpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmluaXRpYWxpemUp
OgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmVuc3VyZUluY29tcGxldGVUZXh0dXJlc0NyZWF0
ZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmRyYXdUcmlGYW5BcnJheXNXaXRoQmFzZVZl
cnRleCk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c0xlZ2FjeSk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0xpbmVMb29wQXJyYXlzKToKKyAgICAgICAg
KHJ4OjpDb250ZXh0TXRsOjpkcmF3QXJyYXlzSW1wbCk6CisgICAgICAgIChyeDo6Q29udGV4dE10
bDo6ZHJhd1RyaUZhbkVsZW1lbnRzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3TGlu
ZUxvb3BFbGVtZW50cyk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0VsZW1lbnRzU2lt
cGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
RWxlbWVudHNJbXBsKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNCYXNl
VmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5jZWRC
YXNlVmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5j
ZWRCYXNlVmVydGV4QmFzZUluc3RhbmNlKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmV4ZWNE
cmF3SW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Omluc2VydEV2ZW50TWFya2VyKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpwdXNoR3JvdXBNYXJrZXIpOgorICAgICAgICAocng6
OkNvbnRleHRNdGw6OmludmFsaWRhdGVDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6OnBvcHVsYXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJT
ZXQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uRW5kVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAg
ICAgIChyeDo6Q29udGV4dE10bDo6Z2V0TmF0aXZlRm9ybWF0Q2FwcyBjb25zdCk6CisgICAgICAg
IChyeDo6Q29udGV4dE10bDo6ZW5kUmVuZGVyRW5jb2RpbmcpOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OmZsdXNoQ29tbWFuZEJ1ZmVyKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpnZXRS
ZW5kZXJQYXNzQ29tbWFuZEVuY29kZXIpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmdldFRl
eHR1cmVSZW5kZXJDb21tYW5kRW5jb2Rlcik6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZW5z
dXJlQ29tbWFuZEJ1ZmZlclJlYWR5KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJhY2ti
dWZmZXJSZXNpemVkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5
QmVnYW4pOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlFbmRlZCk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeURlc3Ryb3llZCk6Cisg
ICAgICAgIChyeDo6Q29udGV4dE10bDo6c2V0dXBEcmF3KToKKyAgICAgICAgKHJ4OjpDb250ZXh0
TXRsOjpoYW5kbGVEaXJ0eUFjdGl2ZVRleHR1cmVzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRs
OjpoYW5kbGVEaXJ0eURlZmF1bHRBdHRyaWJzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpo
YW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5k
bGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzRW11bGF0aW9uKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKToKKyAgICAgICAgKiBz
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tOgorICAgICAgICAocng6OkdldERl
cHRoU2l6ZSk6CisgICAgICAgIChyeDo6R2V0U3RlbmNpbFNpemUpOgorICAgICAgICAocng6OkRp
c3BsYXlNdGw6OkRpc3BsYXlNdGwpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxp
emVJbXBsKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjp0ZXJtaW5hdGUpOgorICAgICAgICAo
cng6OkRpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKHJ4
OjpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyU3VyZmFjZSk6CisgICAgICAgIChyeDo6RGlzcGxh
eU10bDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIpOgorICAgICAgICAocng6OkRpc3Bs
YXlNdGw6OmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbiBjb25zdCk6CisgICAgICAgIChyeDo6RGlz
cGxheU10bDo6Y3JlYXRlU2hhcmVHcm91cCk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6Z2Vu
ZXJhdGVDb25maWdzKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjplbnN1cmVDYXBzSW5pdGlh
bGl6ZWQgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNp
b25zIGNvbnN0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplVGV4dHVyZUNh
cHMgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVMaW1pdGF0aW9u
cyk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6aW5pdGlhbGl6ZUZlYXR1cmVzKToKKyAgICAg
ICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVyTGlicmFyeSk6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmg6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmdldEF0dGFjaGVkQmFja2J1ZmZlciBjb25zdCk6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tOgorICAgICAg
ICAocng6OkZyYW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bCk6CisgICAgICAgIChyeDo6RnJh
bWVidWZmZXJNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJC
dWZmZXJmdik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KToK
KyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpnZXRJbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCBjb25zdCk6CisgICAgICAg
IChyeDo6RnJhbWVidWZmZXJNdGw6OnN5bmNTdGF0ZSk6CisgICAgICAgIChyeDo6RnJhbWVidWZm
ZXJNdGw6Om9uRnJhbWVFbmQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpnZXRSZWFk
YWJsZVZpZXdGb3JSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpw
cmVwYXJlUmVuZGVyUGFzcyk6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6Om92ZXJyaWRl
Q2xlYXJDb2xvcik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyV2l0aExvYWRP
cFJlbmRlclBhc3NOb3RTdGFydGVkKToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xl
YXJXaXRoTG9hZE9wUmVuZGVyUGFzc1N0YXJ0ZWQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpnZXRDb3JyZWN0RmxpcHBlZFJlYWRBcmVhIGNvbnN0KToKKyAgICAgICAgKHJ4OjpGcmFt
ZWJ1ZmZlck10bDo6cmVhZFBpeGVsc0ltcGwgY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpyZWFkUGl4ZWxzVG9QQk8gY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpyZWFkUGl4ZWxzVG9CdWZmZXIgY29uc3QpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmg6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLm1tOiBBZGRlZC4K
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKToK
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjp+SU9TdXJmYWNlU3VyZmFjZU10bCk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZGVzdHJveSk6CisgICAgICAgIChy
eDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChyeDo6SU9TdXJm
YWNlU3VyZmFjZU10bDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKHJ4OjpJ
T1N1cmZhY2VTdXJmYWNlTXRsOjptYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNl
U3VyZmFjZU10bDo6dW5NYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6c3dhcCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cG9zdFN1YkJ1
ZmZlcik6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cXVlcnlTdXJmYWNlUG9p
bnRlckFOR0xFKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpiaW5kVGV4SW1h
Z2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OnJlbGVhc2VUZXhJbWFnZSk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0U3luY1ZhbHVlcyk6CisgICAg
ICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0TXNjUmF0ZSk6CisgICAgICAgIChyeDo6
SU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0U3dhcEludGVydmFsKToKKyAgICAgICAgKHJ4OjpJT1N1
cmZhY2VTdXJmYWNlTXRsOjpzZXRGaXhlZFdpZHRoKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VT
dXJmYWNlTXRsOjpzZXRGaXhlZEhlaWdodCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6Z2V0V2lkdGggY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6
OmdldEhlaWdodCBjb25zdCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQ
b3N0U3ViQnVmZmVyU3VwcG9ydGVkIGNvbnN0KToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKToKKyAgICAgICAg
KHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNraW5nVGV4dHVyZSk6CisgICAgICAg
IChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAg
ICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFRleHR1cmUpOgorICAgICAgICAocng6OklP
U3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmg6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6
Z2V0WGZiTXNsU291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUHJvZ3JhbU10bC5tbToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpQcm9ncmFtTXRs
KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCk6CisgICAgICAgIChyeDo6
UHJvZ3JhbU10bDo6cmVzZXQpOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNhdmVUcmFuc2xh
dGVkU2hhZGVycyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bG9hZFRyYW5zbGF0ZWRTaGFk
ZXJzKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsb2FkKToKKyAgICAgICAgKHJ4OjpQcm9n
cmFtTXRsOjpzYXZlKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsaW5rKToKKyAgICAgICAg
KHJ4OjpQcm9ncmFtTXRsOjpsaW5rSW1wbFNwaXJ2KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRs
OjpsaW5rSW1wbERpcmVjdCk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bGlua0ltcGwpOgor
ICAgICAgICAocng6OlByb2dyYW1NdGw6OmxpbmtUcmFuc2xhdGVkU2hhZGVycyk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6aW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpyZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeSk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFkZXIpOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OmxvYWREZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1N
dGw6OmxvYWRTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNl
dHVwRHJhdyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6dXBkYXRlVGV4dHVyZXMpOgorICAg
ICAgICAocng6OlByb2dyYW1NdGw6OnVwZGF0ZVVuaWZvcm1CdWZmZXJzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpiaW5kVW5pZm9ybUJ1ZmZlcnNUb0Rpc2NyZXRlU2xvdHMpOgorICAgICAg
ICAocng6OlByb2dyYW1NdGw6OmVuY29kZVVuaWZvcm1CdWZmZXJzSW5mb0FyZ3VtZW50QnVmZmVy
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaDoKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW06CisgICAgICAg
IChyeDo6UXVlcnlNdGw6OlF1ZXJ5TXRsKToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6b25EZXN0
cm95KToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6YmVnaW4pOgorICAgICAgICAocng6OlF1ZXJ5
TXRsOjplbmQpOgorICAgICAgICAocng6OlF1ZXJ5TXRsOjp3YWl0QW5kR2V0UmVzdWx0KToKKyAg
ICAgICAgKHJ4OjpRdWVyeU10bDo6aXNSZXN1bHRBdmFpbGFibGUpOgorICAgICAgICAocng6OlF1
ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5kKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbToKKyAgICAgICAgKHJ4OjpSZW5kZXJi
dWZmZXJNdGw6OnJlbGVhc2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6
OnNldFN0b3JhZ2VJbXBsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6OmdldEF0dGFj
aG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9SZW5kZXJUYXJnZXRNdGwuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyVGFyZ2V0TXRsLm1tOgorICAgICAgICAocng6OlJlbmRlclRhcmdldE10bDo6UmVu
ZGVyVGFyZ2V0TXRsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldFdpdGhJbXBs
aWNpdE1TVGV4dHVyZSk6CisgICAgICAgIChyeDo6UmVuZGVyVGFyZ2V0TXRsOjpzZXRUZXh0dXJl
KToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0dXJlKToK
KyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpSZW5k
ZXJUYXJnZXRNdGw6OmdldFJlbmRlclNhbXBsZXMgY29uc3QpOgorICAgICAgICAocng6OlJlbmRl
clRhcmdldE10bDo6dG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MgY29uc3QpOgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaDoKKyAgICAgICAgKHJ4OjpT
aGFkZXJNdGw6OmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW06CisgICAgICAgIChyeDo6VHJhbnNs
YXRlVGFzazo6VHJhbnNsYXRlVGFzayk6CisgICAgICAgIChyeDo6VHJhbnNsYXRlVGFzazo6Z2V0
UmVzdWx0KToKKyAgICAgICAgKHJ4OjpUcmFuc2xhdGVUYXNrOjpnZXRIYW5kbGUpOgorICAgICAg
ICAocng6OlNoYWRlck10bDo6Y29tcGlsZUltcGxNdGwpOgorICAgICAgICAocng6OlNoYWRlck10
bDo6Y29tcGlsZSk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZh
Y2VNdGwuaDoKKyAgICAgICAgKHJ4OjpTdXJmYWNlTXRsUHJvdG9jb2w6OlN1cmZhY2VNdGxQcm90
b2NvbCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwu
bW06CisgICAgICAgIChyeDo6U3VyZmFjZU10bDo6U3VyZmFjZU10bCk6CisgICAgICAgIChyeDo6
V2luZG93U3VyZmFjZU10bDo6ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW06CisgICAgICAgIChyeDo6bXRsOjpT
eW5jOjpjbGllbnRXYWl0KToKKyAgICAgICAgKHJ4OjpGZW5jZU5WTXRsOjpvbkRlc3Ryb3kpOgor
ICAgICAgICAocng6OkVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmg6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW06CisgICAgICAgIChyeDo6
VGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAgICAocng6OlRleHR1cmVN
dGw6OmJpbmRUZXhJbWFnZSk6CisgICAgICAgIChyeDo6VGV4dHVyZU10bDo6cmVsZWFzZVRleElt
YWdlKToKKyAgICAgICAgKHJ4OjpUZXh0dXJlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJh
Y2tNdGwuaDoKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6IGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW06CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OlRyYW5zZm9ybUZlZWRiYWNr
TXRsKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6YmVnaW4pOgorICAgICAg
ICAocng6OlRyYW5zZm9ybUZlZWRiYWNrTXRsOjplbmQpOgorICAgICAgICAocng6OlRyYW5zZm9y
bUZlZWRiYWNrTXRsOjpwYXVzZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6
OnJlc3VtZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJpbmRJbmRleGVk
QnVmZmVyKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zm
c2V0cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLm1tOgorICAgICAgICAocng6OlZlcnRleEFycmF5TXRsOjpyZXNldCk6CisgICAg
ICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyk6CisgICAgICAgIChyeDo6VmVydGV4
QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhB
cnJheU10bDo6dXBkYXRlQ2xpZW50QXR0cmlicyk6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlN
dGw6OnN5bmNEaXJ0eUF0dHJpYik6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OmdldElu
ZGV4QnVmZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydEluZGV4QnVm
ZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6c3RyZWFtSW5kZXhCdWZmZXJGcm9t
Q2xpZW50KToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydFZlcnRleEJ1ZmZl
cik6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlw
X2Rpc3RhbmNlLm1kOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5f
bXRsX2Zvcm1hdF90YWJsZS5weToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2J1ZmZlcl9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9idWZmZXJfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6OkJ1ZmZlclBvb2w6OmNv
bW1pdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5k
X2J1ZmZlci5oOgorICAgICAgICAocng6Om10bDo6SW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbTo6
cHVzaCk6CisgICAgICAgIChyeDo6bXRsOjpJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtOjpwZWVr
KToKKyAgICAgICAgKHJ4OjptdGw6OkludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW06OmZldGNoKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVy
Lm1tOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6dmFsaWQgY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6c2V0V3JpdGVEZXBlbmRlbmN5KToKKyAgICAg
ICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNldFJlYWREZXBlbmRlbmN5KToKKyAgICAgICAg
KHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6Omluc2VydERlYnVnU2lnbik6CisgICAgICAgIChyeDo6
bXRsOjpDb21tYW5kQnVmZmVyOjpwdXNoRGVidWdHcm91cCk6CisgICAgICAgIChyeDo6bXRsOjpD
b21tYW5kQnVmZmVyOjpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRC
dWZmZXI6OnF1ZXVlRXZlbnRTaWduYWwpOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZl
cjo6c2VydmVyV2FpdEV2ZW50KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNl
dEFjdGl2ZUNvbW1hbmRFbmNvZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6
OnZhbGlkSW1wbCBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpDb21tYW5kQnVmZmVyOjpjb21t
aXRJbXBsKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1Np
Z24pOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbklt
cGwpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXJTdGF0ZXM6OnJlc2V0
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyOjpmaW5hbGl6ZUxvYWRT
dG9yZUFjdGlvbik6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5k
RW5jb2RpbmcpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVu
Y29kaW5nSW1wbCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5p
dFdyaXRlRGVwZW5kZW5jeSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6c2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2Rlcik6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmNvbW1vblNldEJ1ZmZlcik6CisgICAgICAgIChyeDo6bXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2Rlcjo6ZHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luc3RhbmNlZCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVu
Y29kZXI6OmRyYXdJbmRleGVkSW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNv
bW1hbmRFbmNvZGVyOjpkcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXgpOgorICAgICAgICAo
cng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbkltcGwpOgorICAg
ICAgICAocng6Om10bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpyZXN0YXJ0KToKKyAgICAgICAgKHJ4
OjptdGw6OkJsaXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmUpOgorICAgICAgICAocng6Om10
bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKToKKyAgICAgICAgKHJ4
OjptdGw6OkNvbXB1dGVDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaDoKKyAgICAgICAgKHJ4OjptdGw6Okdl
dEltcGwpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpDbGVhckNvbG9yVmFs
dWUpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpnZXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKHJ4OjptdGw6OkNsZWFyQ29sb3JWYWx1ZTo6Z2V0VmFsdWVCeXRlcyBjb25zdCk6
CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMuaDog
QWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRf
bWFwLmpzb246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3Jt
YXRfdGFibGVfYXV0b2dlbi5tbToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6aW5pdCk6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaDoK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5t
bToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6bmVlZENvbnZlcnNpb24gY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Rm9ybWF0VGFibGU6OmluaXRpYWxpemUpOgorICAgICAgICAocng6Om10
bDo6Rm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMpOgorICAgICAgICAocng6Om10bDo6Rm9ybWF0
VGFibGU6OmFkanVzdEZvcm1hdENhcHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6Rm9y
bWF0VGFibGU6OmluaXROYXRpdmVGb3JtYXRDYXBzKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW06IEFk
ZGVkLgorICAgICAgICAocng6Om10bDo6VHJhbnNsYXRlZFNoYWRlckluZm86OnJlc2V0KToKKyAg
ICAgICAgKHJ4OjptdGw6Ok1hcHBlZFNhbXBsZXJOYW1lTmVlZHNVc2VyRGVmaW5lZFByZWZpeCk6
CisgICAgICAgIChyeDo6bXRsOjpNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZSk6CisgICAgICAgIChy
eDo6bXRsOjpNU0xHZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAocng6Om10bDo6R2V0QXNzaWdu
ZWRTYW1wbGVyQmluZGluZ3MpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21T
aGFkZXIpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21Db21waWxlcik6Cisg
ICAgICAgIChyeDo6bXRsOjpHbHNsYW5nR2V0TVNMKToKKyAgICAgICAgKHJ4OjptdGw6Ok1zbEdl
dFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpHbHNs
YW5nR2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKHJ4OjptdGw6OlNwaXJ2Q29kZVRvTXNsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVy
eV9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2Ns
dXNpb25fcXVlcnlfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6Ok9jY2x1c2lvblF1ZXJ5UG9v
bDo6YWxsb2NhdGVRdWVyeU9mZnNldCk6CisgICAgICAgIChyeDo6bXRsOjpPY2NsdXNpb25RdWVy
eVBvb2w6OnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyk6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyk6
CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9t
RWxlbWVudHNBcnJheSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQ
cmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0
aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcik6CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVy
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0aWxzOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFj
a1BTTyk6CisgICAgICAgIChyeDo6bXRsOjpDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KToKKyAg
ICAgICAgKHJ4OjptdGw6OkNvbG9yQmxpdFV0aWxzOjpibGl0Q29sb3JXaXRoRHJhdyk6CisgICAg
ICAgIChyeDo6bXRsOjpEZXB0aFN0ZW5jaWxCbGl0VXRpbHM6OmJsaXREZXB0aFN0ZW5jaWxXaXRo
RHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2Vu
ZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUpOgor
ICAgICAgICAocng6Om10bDo6SW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0QnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2VuZXJhdG9yVXRpbHM6Omdl
bmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcik6CisgICAgICAgIChyeDo6bXRs
OjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZl
cik6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1p
dGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6
Om9uRGVzdHJveSk6CisgICAgICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlMkRNaXBH
ZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKToKKyAgICAgICAgKHJ4OjptdGw6Ok1pcG1hcFV0
aWxzOjplbnN1cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZCk6CisgICAg
ICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5l
SW5pdGlhbGl6ZWQpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6OmdlbmVyYXRlTWlw
bWFwQ1MpOgorICAgICAgICAocng6Om10bDo6Q29weVBpeGVsc1V0aWxzOjpnZXRQaXhlbHNDb3B5
UGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxz
OjpnZXRDb21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6
VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxzOjpnZXRGbG9hdENvbnZlcnN0aW9uQ29tcHV0ZVBp
cGVsaW5lKToKKyAgICAgICAgKHJ4OjptdGw6OlRyYW5zZm9ybUZlZWRiYWNrVXRpbHM6OmNyZWF0
ZU1zbFhmYkxpYnJhcnkpOgorICAgICAgICAocng6Om10bDo6VHJhbnNmb3JtRmVlZGJhY2tVdGls
czo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaDoKKyAgICAgICAgKiBzcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlRleHR1cmU6Ok1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRl
eHR1cmU6Ok1ha2VJT1N1cmZhY2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6
Ok1ha2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OlRleHR1cmUpOgorICAg
ICAgICAocng6Om10bDo6VGV4dHVyZTo6c3luY0NvbnRlbnQpOgorICAgICAgICAocng6Om10bDo6
VGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
Ojppc1NoYWRlclJlYWRhYmxlIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OmNy
ZWF0ZVZpZXdXaXRoQ29tcGF0aWJsZUZvcm1hdCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
OjpnZXRSZWFkYWJsZUNvcHkpOgorICAgICAgICAocng6Om10bDo6VGV4dHVyZTo6cmVsZWFzZVJl
YWRhYmxlQ29weSk6CisgICAgICAgIChyeDo6bXRsOjpCdWZmZXI6OnN5bmNDb250ZW50KToKKyAg
ICAgICAgKHJ4OjptdGw6OkJ1ZmZlcjo6bWFwV2l0aE9wdCk6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oOgorICAgICAgICAocng6Om10bDo6
UmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYzo6Z2V0VGV4dHVyZVJlZiBjb25z
dCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXRE
ZXNjOjpnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZiBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjOjpoYXNJbXBsaWNpdE1TVGV4dHVy
ZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVU
YXJnZXREZXNjOjpnZXRSZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBhc3NBdHRhY2htZW50RGVzYzo6dGV4dHVyZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRs
OjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OmltcGxpY2l0TVNUZXh0dXJlIGNvbnN0KToKKyAg
ICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6aGFzSW1wbGljaXRNU1Rl
eHR1cmUgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
OjpyZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRh
Y2htZW50RGVzYzo6bGV2ZWwgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjOjpzbGljZU9yRGVwdGggY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGFzc0F0dGFjaG1lbnREZXNjOjpibGVuZGFibGUgY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW06CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OnJlc2V0KToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6ZXF1YWxJZ25vcmVMb2FkU3RvcmVPcHRpb25zIGNv
bnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERl
c2MgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVu
ZGVyUGlwZWxpbmVPdXRwdXREZXNjIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBp
cGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBpcGVsaW5lQ2FjaGU6OnNldEZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBpcGVsaW5lQ2FjaGU6Omluc2VydFJlbmRlclBpcGVsaW5lU3RhdGUpOgorICAgICAg
ICAocng6Om10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChyeDo6bXRsOjpTdGF0ZUNhY2hlOjpTdGF0ZUNhY2hlKToKKyAgICAgICAg
KHJ4OjptdGw6OlN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpJbml0aWFs
aXplVGV4dHVyZUNvbnRlbnRzKToKKyAgICAgICAgKHJ4OjptdGw6OkluaXRpYWxpemVUZXh0dXJl
Q29udGVudHNHUFUpOgorICAgICAgICAocng6Om10bDo6SW5pdGlhbGl6ZURlcHRoU3RlbmNpbFRl
eHR1cmVDb250ZW50c0dQVSk6CisgICAgICAgIChyeDo6bXRsOjpHZXRIaWdoZXN0U3VwcG9ydGVk
TVNMVmVyc2lvbik6CisgICAgICAgIChyeDo6bXRsOjpDcmVhdGVTaGFkZXJMaWJyYXJ5KToKKyAg
ICAgICAgKHJ4OjptdGw6OkdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2spOgorICAgICAgICAocng6
Om10bDo6SXNGb3JtYXRFbXVsYXRlZCk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhSZW5kZXJU
YXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhOdW1i
ZXJPZlJlbmRlclRhcmdldHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6RGV2aWNlSGFz
TWF4aW11bVJlbmRlclRhcmdldFNpemUpOgorICAgICAgICAocng6Om10bDo6Z2V0TmV4dExvY2F0
aW9uRm9yRm9ybWF0KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbXB1dGVUb3RhbFNpemVVc2VkRm9y
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IpOgorICAgICAgICAocng6Om10bDo6Q29tcHV0ZVRvdGFs
U2l6ZVVzZWRGb3JNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0YWw6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29tbW9uLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0YWw6CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5k
aWNlcy5tZXRhbDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVy
cy9nZW5fbWlwbWFwLm1ldGFsOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL3Zpc2liaWxpdHkubWV0YWw6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9lbnRy
eV9wb2ludHNfZWdsLmNwcDoKKwogMjAyMC0xMi0wNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTW9yZSBGQUxMQkFDS19QTEFURk9STSBhZG9wdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNDU2ZTUxNzg4MzIwM2VkZGQ1NzcwNTJmNGZjZjA3MDE1ZDU5YTNlOS4uNmJl
MjZhYTAxYWM1NjliYWJmMjg4OGY3MWNmNWU3YzQxYmVhNWIzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMTgwLDYgKzExODAsMTQyIEBACiAJCUEzRDMyOTE1MjNDRkNCNzcwMDM3NTY1NyAvKiBSZXdy
aXRlUm93TWFqb3JNYXRyaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTNEMzI5MEYyM0NGQ0I3NjAwMzc1NjU3IC8qIFJld3JpdGVSb3dNYWpvck1h
dHJpY2VzLmggKi87IH07CiAJCUEzRDMyOTE4MjNDRkNCNzcwMDM3NTY1NyAvKiBSZW1vdmVJbmFj
dGl2ZUludGVyZmFjZVZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBM0QzMjkxMjIzQ0ZDQjc2MDAzNzU2NTcgLyogUmVtb3ZlSW5hY3Rp
dmVJbnRlcmZhY2VWYXJpYWJsZXMuY3BwICovOyB9OwogCQlBM0QzMjkxOTIzQ0ZDQjc3MDAzNzU2
NTcgLyogUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRDMyOTEzMjNDRkNCNzYwMDM3NTY1NyAv
KiBSZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oICovOyB9OworCQlGRjgxRkVEMDI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfdXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTgwMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZ2xzbGFuZ191dGlscy5oICovOyB9OworCQlGRjgxRkVEMTI1ODE4RDY4MDA4OTRFMjQgLyog
UHJvZ3JhbU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkY4MUZFODEyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwuaCAqLzsgfTsKKwkJRkY4
MUZFRDIyNTgxOEQ2ODAwODk0RTI0IC8qIERpc3BsYXlNdGxfYXBpLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4MjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bF9hcGkuaCAqLzsgfTsKKwkJRkY4MUZFRDMyNTgxOEQ2ODAwODk0RTI0IC8q
IFN5bmNNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRjgxRkU4MzI1ODE4RDY4MDA4OTRFMjQgLyogU3luY010bC5tbSAqLzsgfTsKKwkJRkY4MUZF
RDQyNTgxOEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4NDI1ODE4RDY4MDA4OTRFMjQgLyogUXVlcnlN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRDUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRp
bHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU4NTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5tbSAqLzsgfTsKKwkJRkY4
MUZFRDYyNTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTg2MjU4MThENjgwMDg5NEUy
NCAvKiBSZW5kZXJCdWZmZXJNdGwubW0gKi87IH07CisJCUZGODFGRUQ3MjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkU4ODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1vbi5oICovOyB9Owor
CQlGRjgxRkVEODI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2NvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFODkyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9jb25zdGFudHMuaCAqLzsgfTsKKwkJRkY4MUZFRDkyNTgxOEQ2OTAwODk0RTI0
IC8qIFNhbXBsZXJNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRThBMjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggKi87IH07CisJ
CUZGODFGRURBMjU4MThENjkwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4QjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bC5oICovOyB9OworCQlGRjgxRkVEQjI1ODE4RDY5MDA4OTRFMjQgLyogU3lu
Y010bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZFOEMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLzsgfTsKKwkJRkY4MUZFREMyNTgx
OEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEQyNTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1t
ICovOyB9OworCQlGRjgxRkVERDI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEUy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZFREUy
NTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEYyNTgxOEQ2ODAwODk0RTI0IC8qIFJl
bmRlckJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVERjI1ODE4RDY5MDA4OTRFMjQgLyogVHJh
bnNmb3JtRmVlZGJhY2tNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010
bC5oICovOyB9OworCQlGRjgxRkVFMDI1ODE4RDY5MDA4OTRFMjQgLyogQnVmZmVyTXRsLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTEyNTgx
OEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTEyNTgxOEQ2OTAw
ODk0RTI0IC8qIG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTkyMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0gKi87IH07CisJCUZGODFGRUUyMjU4MThENjkwMDg5
NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTkzMjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRTMyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5NDI1
ODE4RDY4MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTQyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9nbHNsYW5nX210bF91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTUyNTgxOEQ2ODAwODk0RTI0IC8qIG10
bF9nbHNsYW5nX210bF91dGlscy5oICovOyB9OworCQlGRjgxRkVFNTI1ODE4RDY5MDA4OTRFMjQg
LyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOTYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb21tYW5kX2J1
ZmZlci5tbSAqLzsgfTsKKwkJRkY4MUZFRTYyNTgxOEQ2OTAwODk0RTI0IC8qIFZlcnRleEFycmF5
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU5NzI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RTcyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTk4MjU4MThENjgwMDg5NEUyNCAvKiBTdXJm
YWNlTXRsLmggKi87IH07CisJCUZGODFGRUU4MjU4MThENjkwMDg5NEUyNCAvKiBSZW5kZXJUYXJn
ZXRNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkU5OTI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovOyB9OworCQlG
RjgxRkVFOTI1ODE4RDY5MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5QTI1ODE4RDY4MDA4OTRF
MjQgLyogVmVydGV4QXJyYXlNdGwubW0gKi87IH07CisJCUZGODFGRUVBMjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbWFuZF9idWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTlCMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9i
dWZmZXIuaCAqLzsgfTsKKwkJRkY4MUZFRUIyNTgxOEQ2OTAwODk0RTI0IC8qIEJ1ZmZlck10bC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOUMy
NTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVFQzI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAq
LzsgfTsKKwkJRkY4MUZFRUQyNTgxOEQ2OTAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5
RTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4
MUZFRUUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5RjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX3Jlc291cmNlcy5tbSAqLzsgfTsKKwkJRkY4MUZFRUYyNTgxOEQ2OTAwODk0RTI0IC8q
IG10bF9yZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRUEwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmggKi87IH07
CisJCUZGODFGRUYwMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBMTI1ODE4RDY4
MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tICovOyB9OworCQlGRjgxRkVGMjI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUEzMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVu
ZGVyX3V0aWxzLm1tICovOyB9OworCQlGRjgxRkVGMzI1ODE4RDY5MDA4OTRFMjQgLyogVHJhbnNm
b3JtRmVlZGJhY2tNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkVBNDI1ODE4RDY4MDA4OTRFMjQgLyogVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW0gKi87IH07CisJCUZGODFGRUY0MjU4MThENjkwMDg5NEUyNCAvKiBJT1N1cmZhY2VTdXJmYWNl
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVBNTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5oICovOyB9OworCQlG
RjgxRkVGNTI1ODE4RDY5MDA4OTRFMjQgLyogVGV4dHVyZU10bC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLm1tICovOyB9OworCQlGRjgxRkVGNjI1ODE4RDY5MDA4OTRFMjQgLyogVGV4
dHVyZU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZFQTcyNTgxOEQ2ODAwODk0RTI0IC8qIFRleHR1cmVNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RjcyNTgxOEQ2OTAwODk0RTI0IC8qIFNhbXBsZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBODI1ODE4RDY4MDA4OTRFMjQgLyogU2Ft
cGxlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRkEyNTgxOEQ2OTAwODk0RTI0IC8qIGNvbnN0YW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZF
QUMyNTgxOEQ2ODAwODk0RTI0IC8qIGNvbnN0YW50cy5oICovOyB9OworCQlGRjgxRkVGQjI1ODE4
RDY5MDA4OTRFMjQgLyogY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29tbW9uLmggKi87IH07
CisJCUZGODFGRUZDMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19h
dXRvZ2VuLmluYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZGODFGRUFFMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRv
Z2VuLmluYyAqLzsgfTsKKwkJRkY4MUZFRkUyNTgxOEQ2OTAwODk0RTI0IC8qIGZvcm1hdF9hdXRv
Z2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVCMDI1ODE4RDY4MDA4OTRFMjQgLyogZm9ybWF0X2F1dG9nZW4uaCAqLzsgfTsKKwkJRkY4MUZG
MDIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUJCMjU4MThENjgw
MDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gKi87IH07CisJCUZGODFGRjAz
MjU4MThENjkwMDg5NEUyNCAvKiBGcmFtZUJ1ZmZlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQkMyNTgxOEQ2ODAwODk0RTI0IC8qIEZy
YW1lQnVmZmVyTXRsLmggKi87IH07CisJCUZGODFGRjA0MjU4MThENjkwMDg5NEUyNCAvKiBDb21w
aWxlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZFQkQyNTgxOEQ2ODAwODk0RTI0IC8qIENvbXBpbGVyTXRsLmggKi87IH07CisJCUZGODFG
RjA1MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVCRTI1ODE4RDY4MDA4
OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tICovOyB9OworCQlGRjgxRkYwNjI1ODE4
RDY5MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUJGMjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRs
Lm1tICovOyB9OworCQlGRjgxRkYwNzI1ODE4RDY5MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDMDI1
ODE4RDY4MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwubW0gKi87IH07CisJCUZGODFGRjA4MjU4MThE
NjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUMxMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfYnVm
ZmVyX3Bvb2wuaCAqLzsgfTsKKwkJRkY4MUZGMDkyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF91dGls
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZF
QzIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5oICovOyB9OworCQlGRjgxRkYwQTI1ODE4
RDY5MDA4OTRFMjQgLyogQ29udGV4dE10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzQyNTgxOEQ2ODAwODk0RTI0IC8qIENvbnRleHRNdGwu
aCAqLzsgfTsKKwkJRkY4MUZGMEIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9idWZmZXJfcG9vbC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUM1
MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gKi87IH07CisJCUZGODFGRjBD
MjU4MThENkEwMDg5NEUyNCAvKiBtdGxfY29tbW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9j
b21tb24ubW0gKi87IH07CisJCUZGODFGRjBEMjU4MThENkEwMDg5NEUyNCAvKiBtdGxfcmVuZGVy
X3V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkVDNzI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5oICovOyB9OworCQlG
RjgxRkYwRTI1ODE4RDZBMDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDODI1ODE4RDY4MDA4OTRF
MjQgLyogbXRsX3N0YXRlX2NhY2hlLmggKi87IH07CisJCUZGODFGRjBGMjU4MThENkEwMDg5NEUy
NCAvKiBGcmFtZUJ1ZmZlck10bC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRUM5MjU4MThENjgwMDg5NEUyNCAvKiBGcmFtZUJ1ZmZlck10bC5t
bSAqLzsgfTsKKwkJRkY4MUZGMTAyNTgxOEQ2QTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZFQ0EyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oICov
OyB9OworCQlGRjgxRkYxMTI1ODE4RDZBMDA4OTRFMjQgLyogU2hhZGVyTXRsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDQjI1ODE4RDY4MDA4
OTRFMjQgLyogU2hhZGVyTXRsLmggKi87IH07CisJCUZGODFGRjEyMjU4MThENkEwMDg5NEUyNCAv
KiBTaGFkZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkVDQzI1ODE4RDY4MDA4OTRFMjQgLyogU2hhZGVyTXRsLm1tICovOyB9OworCQlG
RjgxRkYxMzI1ODE4RDZBMDA4OTRFMjQgLyogUHJvZ3JhbU10bC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUNEMjU4MThENjgwMDg5NEUyNCAv
KiBQcm9ncmFtTXRsLm1tICovOyB9OworCQlGRjgxRkYxNDI1ODE4RDZBMDA4OTRFMjQgLyogRGlz
cGxheU10bC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZGODFGRUNFMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLm1tICovOyB9OworCQlGRjgx
RkYxQjI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsRGlyZWN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYxNTI1ODE5MENBMDA4
OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsRGlyZWN0LmggKi87IH07CisJCUZGODFGRjFDMjU4MTkw
Q0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMTYyNTgxOTBDQTAwODk0RTI0IC8q
IFRyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgKi87IH07CisJCUZGODFGRjFEMjU4MTkwQ0EwMDg5
NEUyNCAvKiBTdGF0aWNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkYxNzI1ODE5MENBMDA4OTRFMjQgLyogU3RhdGljVHlwZS5oICovOyB9
OworCQlGRjgxRkYxRTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRpbHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMTky
NTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmNwcCAqLzsgfTsKKwkJRkY4
MUZGMUYyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYxQTI1ODE5MENBMDA4
OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZGNUIyNTgxOTE5
NzAwODk0RTI0IC8qIE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkY4MUZGMjEyNTgxOTE5NzAwODk0RTI0IC8qIE5hbWUuY3BwICovOyB9Owor
CQlGRjgxRkY1QzI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjIy
MjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oICovOyB9Owor
CQlGRjgxRkY1RDI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjIzMjU4MTkxOTcwMDg5NEUyNCAvKiBE
ZWJ1Zy5oICovOyB9OworCQlGRjgxRkY1RTI1ODE5MTk3MDA4OTRFMjQgLyogTmFtZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMjQyNTgxOTE5
NzAwODk0RTI0IC8qIE5hbWUuaCAqLzsgfTsKKwkJRkY4MUZGNUYyNTgxOTE5NzAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMjUyNTgxOTE5NzAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwICovOyB9OworCQlGRjgxRkY2
MDI1ODE5MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI2MjU4MTkxOTcwMDg5NEUyNCAvKiBN
b2RpZnlTdHJ1Y3QuY3BwICovOyB9OworCQlGRjgxRkY2MTI1ODE5MTk3MDA4OTRFMjQgLyogUmVk
dWNlSW50ZXJmYWNlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkYyNzI1ODE5MTk3MDA4OTRFMjQgLyogUmVkdWNlSW50ZXJmYWNlQmxv
Y2tzLmggKi87IH07CisJCUZGODFGRjYyMjU4MTkxOTcwMDg5NEUyNCAvKiBFbnZpcm9ubWVudFZh
cmlhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkYyODI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJsZS5oICovOyB9Owor
CQlGRjgxRkY2MzI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZG
MjkyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcCAqLzsg
fTsKKwkJRkY4MUZGNjQyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rp
b25UcmF2ZXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZGODFGRjJBMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
VHJhdmVyc2VyLmggKi87IH07CisJCUZGODFGRjY1MjU4MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Z1Np
bmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjJCMjU4MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Z1NpbmsuaCAqLzsgfTsKKwkJRkY4MUZGNjYyNTgx
OTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjJDMjU4MTkx
OTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggKi87IH07
CisJCUZGODFGRjY3MjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0YWwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMkQyNTgxOTE5NzAwODk0
RTI0IC8qIEVtaXRNZXRhbC5jcHAgKi87IH07CisJCUZGODFGRjY4MjU4MTkxOTgwMDg5NEUyNCAv
KiBSZXdyaXRlT3V0QXJncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkY4MUZGMkUyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVPdXRBcmdzLmggKi87
IH07CisJCUZGODFGRjY5MjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjJGMjU4MTkxOTcw
MDg5NEUyNCAvKiBNYXBTeW1ib2xzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNkEyNTgxOTE5ODAwODk0
RTI0IC8qIFN5bWJvbEVudi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkYzMDI1ODE5MTk3MDA4OTRFMjQgLyogU3ltYm9sRW52LmNwcCAqLzsg
fTsKKwkJRkY4MUZGNkIyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzEyNTgxOTE5
NzAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5oICovOyB9OworCQlGRjgxRkY2QzI1ODE5MTk4
MDA4OTRFMjQgLyogTGF5b3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRjMyMjU4MTkxOTcwMDg5NEUyNCAvKiBMYXlvdXQuY3BwICovOyB9
OworCQlGRjgxRkY2RDI1ODE5MTk4MDA4OTRFMjQgLyogVG9wb3NvcnRTdHJ1Y3RzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjMzMjU4MTkx
OTcwMDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuY3BwICovOyB9OworCQlGRjgxRkY2RTI1ODE5
MTk4MDA4OTRFMjQgLyogTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzQyNTgxOTE5NzAwODk0RTI0
IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCAqLzsgfTsKKwkJRkY4MUZGNkYyNTgxOTE5
ODAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzNTI1ODE5MTk3MDA4OTRFMjQgLyogU2tpcHBp
bmdUcmF2ZXJzZXIuaCAqLzsgfTsKKwkJRkY4MUZGNzAyNTgxOTE5ODAwODk0RTI0IC8qIFJld3Jp
dGVPdXRBcmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZGODFGRjM2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5jcHAgKi87IH07
CisJCUZGODFGRjcxMjU4MTkxOTgwMDg5NEUyNCAvKiBQaXBlbGluZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzNzI1ODE5MTk3MDA4OTRF
MjQgLyogUGlwZWxpbmUuY3BwICovOyB9OworCQlGRjgxRkY3MjI1ODE5MTk4MDA4OTRFMjQgLyog
SWRHZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjM4MjU4MTkxOTcwMDg5NEUyNCAvKiBJZEdlbi5oICovOyB9OworCQlGRjgxRkY3MzI1ODE5
MTk4MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzOTI1ODE5MTk3MDA4OTRF
MjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggKi87IH07CisJCUZGODFGRjc0MjU4
MTkxOTgwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzQTI1ODE5MTk3MDA4OTRFMjQg
LyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwICovOyB9OworCQlGRjgxRkY3NTI1ODE5MTk4MDA4
OTRFMjQgLyogTWFwU3ltYm9scy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkY4MUZGM0IyNTgxOTE5NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuaCAqLzsg
fTsKKwkJRkY4MUZGNzYyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGM0MyNTgx
OTE5NzAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMuY3BwICovOyB9OworCQlGRjgxRkY3NzI1
ODE5MTk4MDA4OTRFMjQgLyogUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjNEMjU4MTkxOTcwMDg5NEUy
NCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuY3BwICovOyB9OworCQlGRjgxRkY3ODI1ODE5MTk4
MDA4OTRFMjQgLyogQXN0SGVscGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzRTI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5j
cHAgKi87IH07CisJCUZGODFGRjc5MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNz
YWJsZVJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRjNGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJsZVJl
ZmVyZW5jZXMuaCAqLzsgfTsKKwkJRkY4MUZGN0EyNTgxOTE5ODAwODk0RTI0IC8qIExheW91dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNDAy
NTgxOTE5NzAwODk0RTI0IC8qIExheW91dC5oICovOyB9OworCQlGRjgxRkY3QjI1ODE5MTk4MDA4
OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0MTI1ODE5MTk3MDA4
OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgKi87IH07CisJ
CUZGODFGRjdDMjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNDIyNTgxOTE5NzAwODk0
RTI0IC8qIFByb2dyYW1QcmVsdWRlLmggKi87IH07CisJCUZGODFGRjdEMjU4MTkxOTgwMDg5NEUy
NCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQzMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCAqLzsgfTsKKwkJRkY4MUZGN0UyNTgxOTE5ODAwODk0
RTI0IC8qIFN5bWJvbEVudi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkY4MUZGNDQyNTgxOTE5NzAwODk0RTI0IC8qIFN5bWJvbEVudi5oICovOyB9Owor
CQlGRjgxRkY3RjI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjQ1MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwICov
OyB9OworCQlGRjgxRkY4MDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVS
ZWZlcmVuY2VzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZGODFGRjQ2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVy
ZW5jZXMuY3BwICovOyB9OworCQlGRjgxRkY4MTI1ODE5MTk4MDA4OTRFMjQgLyogQXN0SGVscGVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZG
NDcyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBlcnMuaCAqLzsgfTsKKwkJRkY4MUZGODIyNTgx
OTE5ODAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQ4MjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lz
dENvbnN0YW50cy5jcHAgKi87IH07CisJCUZGODFGRjgzMjU4MTkxOTgwMDg5NEUyNCAvKiBQaXBl
bGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGNDkyNTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5lLmggKi87IH07CisJCUZGODFGRjg0MjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0QTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3
cml0ZVBpcGVsaW5lcy5oICovOyB9OworCQlGRjgxRkY4NTI1ODE5MTk4MDA4OTRFMjQgLyogUmVm
ZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkY0QjI1ODE5MTk3MDA4OTRFMjQgLyogUmVmZXJlbmNlLmggKi87IH07CisJCUZGODFGRjg2
MjU4MTkxOTgwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEMyNTgxOTE5NzAwODk0RTI0IC8qIEhv
aXN0Q29uc3RhbnRzLmggKi87IH07CisJCUZGODFGRjg3MjU4MTkxOTgwMDg5NEUyNCAvKiBXcmFw
TWFpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkY0RDI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1haW4uY3BwICovOyB9OworCQlGRjgxRkY4
ODI1ODE5MTk4MDA4OTRFMjQgLyogQ29uc3RhbnROYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEUyNTgxOTE5NzAwODk0RTI0IC8qIENv
bnN0YW50TmFtZXMuaCAqLzsgfTsKKwkJRkY4MUZGODkyNTgxOTE5ODAwODk0RTI0IC8qIFJld3Jp
dGVLZXl3b3Jkcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkY0RjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUtleXdvcmRzLmNwcCAqLzsg
fTsKKwkJRkY4MUZGOEEyNTgxOTE5ODAwODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjUwMjU4MTkx
OTcwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5jcHAgKi87IH07CisJCUZGODFGRjhCMjU4MTkx
OTgwMDg5NEUyNCAvKiBJZEdlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkY1MTI1ODE5MTk3MDA4OTRFMjQgLyogSWRHZW4uY3BwICovOyB9
OworCQlGRjgxRkY4QzI1ODE5MTk4MDA4OTRFMjQgLyogRW1pdE1ldGFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY1MjI1ODE5MTk3MDA4OTRF
MjQgLyogRW1pdE1ldGFsLmggKi87IH07CisJCUZGODFGRjhEMjU4MTkxOTgwMDg5NEUyNCAvKiBX
cmFwTWFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZGNTMyNTgxOTE5NzAwODk0RTI0IC8qIFdyYXBNYWluLmggKi87IH07CisJCUZGODFGRjhF
MjU4MTkxOTgwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0cy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTQyNTgxOTE5NzAwODk0RTI0
IC8qIEFkZEV4cGxpY2l0VHlwZUNhc3RzLmggKi87IH07CisJCUZGODFGRjhGMjU4MTkxOTgwMDg5
NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTUyNTgxOTE5NzAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5jcHAgKi87IH07CisJCUZGODFGRjkwMjU4MTkx
OTgwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU2MjU4MTkxOTcwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1
Y3QuaCAqLzsgfTsKKwkJRkY4MUZGOTEyNTgxOTE5ODAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZG
NTcyNTgxOTE5NzAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5oICovOyB9OworCQlGRjgxRkY5
MjI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTgyNTgxOTE5NzAw
ODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCAqLzsgfTsKKwkJRkY4MUZGOTMy
NTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY1OTI1ODE5MTk3MDA4OTRF
MjQgLyogUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCAqLzsgfTsKKwkJRkY4MUZGOTQyNTgxOTE5
ODAwODk0RTI0IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNUEyNTgxOTE5NzAwODk0RTI0
IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwICovOyB9OworCQlGRjgxRkY5NjI1ODFB
Mzk3MDA4OTRFMjQgLyogTWV0YWwuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGOTUyNTgxQTM5NzAwODk0RTI0IC8qIE1ldGFs
LmZyYW1ld29yayAqLzsgfTsKKwkJRkY4MUZGOUIyNTgxQTNDMjAwODk0RTI0IC8qIE5vZGVUeXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY5
NzI1ODFBM0MxMDA4OTRFMjQgLyogTm9kZVR5cGUuaCAqLzsgfTsKKwkJRkY4MUZGOUMyNTgxQTND
MjAwODk0RTI0IC8qIEFzTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkY4MUZGOTgyNTgxQTNDMTAwODk0RTI0IC8qIEFzTm9kZS5oICovOyB9Owor
CQlGRjgxRkY5RDI1ODFBM0MyMDA4OTRFMjQgLyogSW50ZXJtUmVidWlsZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY5OTI1ODFBM0MxMDA4
OTRFMjQgLyogSW50ZXJtUmVidWlsZC5jcHAgKi87IH07CisJCUZGODFGRjlFMjU4MUEzQzIwMDg5
NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkY5QTI1ODFBM0MyMDA4OTRFMjQgLyogSW50ZXJtUmVidWlsZC5o
ICovOyB9OworCQlGRjgxRkY5RjI1ODFBRDA0MDA4OTRFMjQgLyogYmxpdC5tZXRhbCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUFBMjU4MThENjgw
MDg5NEUyNCAvKiBibGl0Lm1ldGFsICovOyB9OworCQlGRjgxRkZBMDI1ODFBRDA0MDA4OTRFMjQg
LyogdmlzaWJpbGl0eS5tZXRhbCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRUFCMjU4MThENjgwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFsICov
OyB9OworCQlGRjgxRkZBMTI1ODFBRDA0MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBRjI1ODE4
RDY4MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgKi87IH07CisJCUZGODFGRkEyMjU4MUFE
MDQwMDg5NEUyNCAvKiBjbGVhci5tZXRhbCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRUIxMjU4MThENjgwMDg5NEUyNCAvKiBjbGVhci5tZXRhbCAq
LzsgfTsKKwkJRkY4MUZGQTMyNTgxQUQwNDAwODk0RTI0IC8qIGdlbl9taXBtYXAubWV0YWwgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVCMjI1ODE4
RDY4MDA4OTRFMjQgLyogZ2VuX21pcG1hcC5tZXRhbCAqLzsgfTsKKwkJRkY4MUZGQTQyNTgxQUQw
NDAwODk0RTI0IC8qIGdlbl9pbmRpY2VzLm1ldGFsIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQjMyNTgxOEQ2ODAwODk0RTI0IC8qIGdlbl9pbmRp
Y2VzLm1ldGFsICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJl
Z2luIFBCWEJ1aWxkUnVsZSBzZWN0aW9uICovCkBAIC0yMDMwLDYgKzIxNjYsMTQzIEBACiAJCUEz
RDMyOTEzMjNDRkNCNzYwMDM3NTY1NyAvKiBSZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdmVJbmFjdGl2ZUludGVy
ZmFjZVZhcmlhYmxlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDBEMTEy
MDBGMEUzMDAwODhFNjkgLyogbGliQU5HTEUuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRo
ID0gbGliQU5HTEUuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJRkIz
OUQyQkYxMjAwRjNFNjAwMDg4RTY5IC8qIFNoYWRlckxhbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29k
aW5nID0gNDsgcGF0aCA9IFNoYWRlckxhbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFODAyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9nbHNsYW5nX3V0aWxzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9nbHNsYW5nX3V0aWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTgxMjU4MThENjgwMDg5NEUyNCAvKiBQcm9ncmFt
TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2dyYW1NdGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODIyNTgxOEQ2ODAwODk0RTI0IC8qIERp
c3BsYXlNdGxfYXBpLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlN
dGxfYXBpLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTgzMjU4MThENjgw
MDg5NEUyNCAvKiBTeW5jTXRsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gU3luY010bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODQy
NTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFF1ZXJ5TXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTg1
MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZm9ybWF0X3V0aWxzLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX2Zvcm1hdF91dGlscy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODYyNTgxOEQ2ODAwODk0RTI0IC8qIFJlbmRlckJ1ZmZl
ck10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbmRlckJ1
ZmZlck10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODgyNTgxOEQ2
ODAwODk0RTI0IC8qIG10bF9jb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gbXRsX2NvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4OTI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBtdGxfY29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZGODFGRThBMjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsZXJNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOEIyNTgxOEQ2ODAwODk0RTI0IC8qIERpc3BsYXlNdGwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheU10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkU4QzI1ODE4RDY4MDA4OTRFMjQgLyogU3luY010bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW5jTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRThEMjU4MThENjgwMDg5NEUyNCAvKiBRdWVyeU10bC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFF1ZXJ5TXRsLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4RTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1h
dF91dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBtdGxfZm9ybWF0X3V0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRThGMjU4MThENjgwMDg5
NEUyNCAvKiBSZW5kZXJCdWZmZXJNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyQnVmZmVyTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010bC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2Zvcm1GZWVkYmFja010bC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5MTI1ODE4RDY4MDA4OTRFMjQgLyogQnVmZmVyTXRs
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQnVmZmVyTXRsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5MjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2Zvcm1hdF90YWJsZV9hdXRvZ2VuLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gbXRsX2Zvcm1hdF90YWJsZV9hdXRvZ2VuLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkU5MzI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0
TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRhcmdldE10bC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5NDI1ODE4RDY4MDA4OTRFMjQg
LyogU3VyZmFjZU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFN1cmZhY2VNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTk1MjU4
MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRTk2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9i
dWZmZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtdGxfY29t
bWFuZF9idWZmZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTk3MjU4
MThENjgwMDg5NEUyNCAvKiBWZXJ0ZXhBcnJheU10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWZXJ0ZXhBcnJheU10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkU5ODI1ODE4RDY4MDA4OTRFMjQgLyogU3VyZmFjZU10bC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdXJmYWNlTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRTk5MjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW5kZXJUYXJnZXRNdGwubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTlBMjU4MThENjgwMDg5NEUyNCAv
KiBWZXJ0ZXhBcnJheU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFZlcnRleEFycmF5TXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkU5QjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRfYnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9jb21tYW5kX2J1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkU5QzI1ODE4RDY4MDA4OTRFMjQgLyogQnVmZmVyTXRsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1ZmZlck10bC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5RDI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3V0aWxz
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX3V0aWxzLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5RTI1ODE4RDY4MDA4OTRFMjQg
LyogSU9TdXJmYWNlU3VyZmFjZU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IElPU3VyZmFjZVN1cmZhY2VNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRTlGMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX3Jlc291cmNlcy5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTAyNTgxOEQ2ODAwODk0RTI0IC8qIG10
bF9yZXNvdXJjZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRsX3Jlc291
cmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVBMTI1ODE4RDY4MDA4
OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gbXRsX3N0YXRlX2NhY2hlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkVBMzI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF9yZW5kZXJfdXRpbHMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUE0MjU4MThENjgwMDg5NEUyNCAv
KiBUcmFuc2Zvcm1GZWVkYmFja010bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFRyYW5zZm9ybUZlZWRiYWNrTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkVBNTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJT1N1cmZhY2VTdXJmYWNlTXRsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
VGV4dHVyZU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTcyNTgx
OEQ2ODAwODk0RTI0IC8qIFRleHR1cmVNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGV4dHVyZU10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVB
ODI1ODE4RDY4MDA4OTRFMjQgLyogU2FtcGxlck10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFNhbXBsZXJNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRUFBMjU4MThENjgwMDg5NEUyNCAvKiBibGl0Lm1ldGFsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5tZXRhbDsgcGF0aCA9IGJsaXQubWV0YWw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRUFCMjU4MThENjgwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5tZXRhbDsgcGF0aCA9IHZpc2liaWxpdHkubWV0YWw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUFDMjU4MThENjgwMDg5NEUyNCAvKiBjb25z
dGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29uc3RhbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUFEMjU4MThENjgwMDg5NEUyNCAvKiBj
b21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tbW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUFFMjU4MThENjgwMDg5NEUyNCAvKiBtdGxf
ZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUucGFz
Y2FsOyBwYXRoID0gbXRsX2RlZmF1bHRfc2hhZGVyc19zcmNfYXV0b2dlbi5pbmM7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUFGMjU4MThENjgwMDg5NEUyNCAvKiBjb3B5X2J1
ZmZlci5tZXRhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWV0YWw7IHBhdGggPSBjb3B5X2J1ZmZl
ci5tZXRhbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQjAyNTgxOEQ2ODAw
ODk0RTI0IC8qIGZvcm1hdF9hdXRvZ2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IGZvcm1hdF9hdXRvZ2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RUIxMjU4MThENjgwMDg5NEUyNCAvKiBjbGVhci5tZXRhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
bWV0YWw7IHBhdGggPSBjbGVhci5tZXRhbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZFQjIyNTgxOEQ2ODAwODk0RTI0IC8qIGdlbl9taXBtYXAubWV0YWwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLm1ldGFsOyBwYXRoID0gZ2VuX21pcG1hcC5tZXRhbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQjMyNTgxOEQ2ODAwODk0RTI0IC8qIGdlbl9pbmRpY2VzLm1l
dGFsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5tZXRhbDsgcGF0aCA9IGdlbl9pbmRpY2VzLm1ldGFs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVCQjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkVCQzI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJN
dGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnJhbWVCdWZmZXJNdGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQkQyNTgxOEQ2ODAwODk0RTI0IC8q
IENvbXBpbGVyTXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGVy
TXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUJFMjU4MThENjgwMDg5
NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRUJGMjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29udGV4dE10bC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQzAyNTgxOEQ2ODAwODk0RTI0IC8q
IENvbXBpbGVyTXRsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q29tcGlsZXJNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUMxMjU4
MThENjgwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gbXRsX2J1ZmZlcl9wb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRUMyMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfdXRpbHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gbXRsX3V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRUM0MjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHRNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkY4MUZFQzUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9idWZmZXJfcG9vbC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF9idWZmZXJfcG9v
bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQzYyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9jb21tb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBtdGxfY29tbW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVD
NzI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBtdGxfcmVuZGVyX3V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRUM4MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRsX3N0YXRlX2NhY2hlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUM5MjU4MThENjgwMDg5NEUyNCAvKiBGcmFt
ZUJ1ZmZlck10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZy
YW1lQnVmZmVyTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDQTI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDQjI1ODE4RDY4MDA4OTRFMjQgLyogU2hhZGVy
TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRlck10bC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDQzI1ODE4RDY4MDA4OTRFMjQgLyogU2hh
ZGVyTXRsLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2hhZGVy
TXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDRDI1ODE4RDY4MDA4
OTRFMjQgLyogUHJvZ3JhbU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFByb2dyYW1NdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RUNFMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRGlzcGxheU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMTUyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFuc2xhdG9yTWV0YWxEaXJl
Y3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMTYyNTgxOTBDQTAwODk0
RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRjgxRkYxNzI1ODE5MENBMDA4OTRFMjQgLyogU3RhdGljVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGF0aWNUeXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjE4MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9y
TWV0YWxEaXJlY3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVHJhbnNsYXRvck1ldGFsRGlyZWN0
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYxOTI1ODE5MENBMDA4OTRFMjQg
LyogVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkYxQTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRpbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvck1ldGFsVXRpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMjEyNTgxOTE5NzAwODk0RTI0
IC8qIE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmFtZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjIyMjU4MTkxOTcwMDg5NEUy
NCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRjgxRkYyMzI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMjQyNTgxOTE5NzAwODk0RTI0IC8qIE5hbWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkYyNTI1ODE5MTk3MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xh
cmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXBhcmF0
ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZGMjYyNTgxOTE5NzAwODk0RTI0IC8qIE1vZGlmeVN0cnVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb2RpZnlTdHJ1Y3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyNzI1ODE5MTk3MDA4OTRFMjQgLyogUmVkdWNl
SW50ZXJmYWNlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZHVj
ZUludGVyZmFjZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYy
ODI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFbnZpcm9ubWVudFZhcmlhYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRjI5MjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckRlcGVu
ZGVudEZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBE
aXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRjJBMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
VHJhdmVyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc2NvdmVyRW5j
bG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZGMkIyNTgxOTE5NzAwODk0RTI0IC8qIERlYnVnU2luay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEZWJ1Z1NpbmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZGMkMyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VwYXJhdGVDb21w
b3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RjgxRkYyRDI1ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVtaXRNZXRhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRjJFMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXdyaXRlT3V0QXJncy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyRjI1ODE5MTk3MDA4OTRFMjQgLyogTWFwU3lt
Ym9scy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBTeW1ib2xz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzAyNTgxOTE5NzAwODk0
RTI0IC8qIFN5bWJvbEVudi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTeW1ib2xFbnYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzMTI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUtleXdvcmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJld3JpdGVLZXl3b3Jkcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkYzMjI1ODE5MTk3MDA4OTRFMjQgLyogTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRjMzMjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVG9wb3NvcnRTdHJ1Y3RzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzQyNTgxOTE5NzAwODk0RTI0
IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkYzNTI1ODE5MTk3MDA4OTRFMjQgLyogU2tpcHBpbmdUcmF2ZXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2tpcHBpbmdUcmF2ZXJzZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzYyNTgxOTE5NzAwODk0RTI0IC8q
IFJld3JpdGVPdXRBcmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJld3JpdGVPdXRBcmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZG
MzcyNTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFBpcGVsaW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZGMzgyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IElkR2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZG
ODFGRjM5MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Np
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjNBMjU4MTkxOTcwMDg5
NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZGODFGRjNCMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcFN5bWJvbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGM0MyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVQaXBl
bGluZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmV3cml0ZVBp
cGVsaW5lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjNEMjU4MTkx
OTcwMDg5NEUyNCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGM0UyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBl
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXN0SGVscGVycy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjNGMjU4MTkxOTcwMDg5NEUy
NCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQwMjU4MTkxOTcwMDg5NEUyNCAvKiBMYXlvdXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQxMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVu
Y2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY0MjI1ODE5MTk3MDA4OTRFMjQgLyogUHJvZ3Jh
bVByZWx1ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvZ3JhbVByZWx1
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNDMyNTgxOTE5NzAwODk0
RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNDQyNTgxOTE5NzAwODk0RTI0IC8qIFN5bWJvbEVudi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2xFbnYuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNDUyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVH
bG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkY0NjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2Fi
bGVSZWZlcmVuY2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
d3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRjQ3MjU4MTkxOTcwMDg5NEUyNCAvKiBBc3RIZWxwZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzdEhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkY4MUZGNDgyNTgxOTE5NzAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhvaXN0Q29uc3RhbnRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNDkyNTgxOTE5NzAwODk0RTI0
IC8qIFBpcGVsaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBpcGVsaW5l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRBMjU4MTkxOTcwMDg5NEUy
NCAvKiBSZXdyaXRlUGlwZWxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJld3JpdGVQaXBlbGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZG
NEIyNTgxOTE5NzAwODk0RTI0IC8qIFJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZGNEMyNTgxOTE5NzAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhvaXN0Q29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRjREMjU4MTkxOTcwMDg5NEUyNCAvKiBXcmFwTWFpbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXcmFwTWFpbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRFMjU4MTkxOTcwMDg5NEUyNCAvKiBDb25zdGFudE5h
bWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnN0YW50TmFtZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNEYyNTgxOTE5NzAwODk0RTI0IC8q
IFJld3JpdGVLZXl3b3Jkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZXdyaXRlS2V5d29yZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkY1MDI1ODE5MTk3MDA4OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvZ3JhbVByZWx1ZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkY1MTI1ODE5MTk3MDA4OTRFMjQgLyogSWRHZW4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSWRHZW4uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY1MjI1ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVtaXRNZXRhbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY1MzI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1h
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JhcE1haW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTQyNTgxOTE5NzAwODk0RTI0IC8qIEFkZEV4
cGxpY2l0VHlwZUNhc3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFkZEV4
cGxpY2l0VHlwZUNhc3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU1
MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Np
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTYyNTgxOTE5NzAw
ODk0RTI0IC8qIE1vZGlmeVN0cnVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2RpZnlTdHJ1Y3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTcy
NTgxOTE5NzAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBUb3Bvc29ydFN0cnVjdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZGNTgyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25z
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJld3JpdGVDYXNlRGVj
bGFyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTkyNTgx
OTE5NzAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjVBMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY5NTI1ODFBMzk3MDA4OTRFMjQgLyogTWV0YWwuZnJhbWV3b3JrICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdv
cms7IG5hbWUgPSBNZXRhbC5mcmFtZXdvcms7IHBhdGggPSBTeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL01ldGFsLmZyYW1ld29yazsgc291cmNlVHJlZSA9IFNES1JPT1Q7IH07CisJCUZGODFGRjk3
MjU4MUEzQzEwMDg5NEUyNCAvKiBOb2RlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOb2RlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY5
ODI1ODFBM0MxMDA4OTRFMjQgLyogQXNOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFzTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY5OTI1
ODFBM0MxMDA4OTRFMjQgLyogSW50ZXJtUmVidWlsZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbnRlcm1SZWJ1aWxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGOUEyNTgxQTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJtUmVidWlsZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC0yMDQ1LDYgKzIz
MTgsNyBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAog
CQkJCTVDQjMwNDk0MURFNDE1NzIwMEQyQzQwNSAvKiBDb3JlR3JhcGhpY3MuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8sCisJCQkJRkY4MUZGOTYyNTgxQTM5NzAwODk0RTI0IC8qIE1ldGFsLmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJCTVDQjMwNDkzMURFNDE1NkIwMEQyQzQwNSAv
KiBRdWFydHpDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMjA1NSw2ICsyMzI5LDggQEAK
IAkJMzEwMTJEOUYxOEI5N0I5QjAwMzkwNjJGIC8qIHRyYW5zbGF0b3IgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZGODFGRjIwMjU4MTkxOTcwMDg5NEUy
NCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QgKi8sCisJCQkJRkY4MUZGMTgyNTgxOTBDQTAwODk0
RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdCAqLywKIAkJCQk1Q0JENTk2OTIyODI2QTAwMDAy
QjIyQUEgLyogdHJlZW9wcyAqLywKIAkJCQk1QzU1RDZFQTIyODI2Qzk4MDBCNUJBMkMgLyogdHJl
ZXV0aWwgKi8sCiAJCQkJNUMxREJCRkIxQjA0Mzc1RjAwMjM1NTUyIC8qIEFTVE1ldGFkYXRhSExT
TC5jcHAgKi8sCkBAIC0yMTQ0LDYgKzI0MjAsNyBAQAogCQkJCTMxQTMzMUQxMUVBNUVEREEwMEZE
MjIwMyAvKiBTZXZlcml0eS5oICovLAogCQkJCTMxMDEyREYyMThCOTdCOUIwMDM5MDYyRiAvKiBT
aGFkZXJMYW5nLmNwcCAqLywKIAkJCQk1QzFEQkMxQTFCMDQzNzVGMDAyMzU1NTIgLyogU2hhZGVy
VmFycy5jcHAgKi8sCisJCQkJRkY4MUZGMTcyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUu
aCAqLywKIAkJCQkzMTVFQkQ0NzFGQ0U0NDI4MDBBQzdBODkgLyogU3RydWN0dXJlSExTTC5jcHAg
Ki8sCiAJCQkJMzE1RUJENzMxRkNFNDQzNDAwQUM3QTg5IC8qIFN0cnVjdHVyZUhMU0wuaCAqLywK
IAkJCQk1QzU1RDZEOTIyODI2Qzc4MDBCNUJBMkMgLyogU3ltYm9sLmNwcCAqLywKQEAgLTIxNjAs
NiArMjQzNywxMCBAQAogCQkJCTMxMDEyREZDMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9y
RVNTTC5oICovLAogCQkJCTMxMDEyREZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xT
TC5jcHAgKi8sCiAJCQkJMzEwMTJERkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNM
LmggKi8sCisJCQkJRkY4MUZGMTYyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERp
cmVjdC5jcHAgKi8sCisJCQkJRkY4MUZGMTUyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JN
ZXRhbERpcmVjdC5oICovLAorCQkJCUZGODFGRjE5MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xh
dG9yTWV0YWxVdGlscy5jcHAgKi8sCisJCQkJRkY4MUZGMUEyNTgxOTBDQTAwODk0RTI0IC8qIFRy
YW5zbGF0b3JNZXRhbFV0aWxzLmggKi8sCiAJCQkJMzE1RUJENDAxRkNFNDQyNjAwQUM3QTg5IC8q
IFRyYW5zbGF0b3JWdWxrYW4uY3BwICovLAogCQkJCTMxNUVCRDY2MUZDRTQ0MzEwMEFDN0E4OSAv
KiBUcmFuc2xhdG9yVnVsa2FuLmggKi8sCiAJCQkJNUMxREJDMUQxQjA0Mzc1RjAwMjM1NTUyIC8q
IFR5cGVzLmNwcCAqLywKQEAgLTI1MjIsNiArMjgwMyw3IEBACiAJCTVDNTVENkVBMjI4MjZDOTgw
MEI1QkEyQyAvKiB0cmVldXRpbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJRkY4MUZGOTgyNTgxQTNDMTAwODk0RTI0IC8qIEFzTm9kZS5oICovLAogCQkJ
CUEzMDMwNkZFMjMwNUY2MzYwMDJEQTk3MiAvKiBGaW5kRnVuY3Rpb24uY3BwICovLAogCQkJCUEz
MDMwNkZGMjMwNUY2MzYwMDJEQTk3MiAvKiBGaW5kRnVuY3Rpb24uaCAqLywKIAkJCQk1QzU1RDZF
RDIyODI2Q0IyMDBCNUJBMkMgLyogRmluZE1haW4uY3BwICovLApAQCAtMjUzMiw5ICsyODE0LDEy
IEBACiAJCQkJNUM1NUQ2RUUyMjgyNkNCMjAwQjVCQTJDIC8qIEludGVybU5vZGVfdXRpbC5oICov
LAogCQkJCTVDNTVENkY0MjI4MjZDQjIwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXIuY3BwICovLAogCQkJCTVDNTVENkY4MjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXIuaCAqLywKKwkJCQlGRjgxRkY5OTI1ODFBM0MxMDA4OTRFMjQgLyogSW50ZXJt
UmVidWlsZC5jcHAgKi8sCisJCQkJRkY4MUZGOUEyNTgxQTNDMjAwODk0RTI0IC8qIEludGVybVJl
YnVpbGQuaCAqLywKIAkJCQk1QzU1RDZGMjIyODI2Q0IyMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVy
c2UuY3BwICovLAogCQkJCTVDNTVENkYxMjI4MjZDQjIwMEI1QkEyQyAvKiBJbnRlcm1UcmF2ZXJz
ZS5oICovLAogCQkJCTVDNTVENkY3MjI4MjZDQjMwMEI1QkEyQyAvKiBOb2RlU2VhcmNoLmggKi8s
CisJCQkJRkY4MUZGOTcyNTgxQTNDMTAwODk0RTI0IC8qIE5vZGVUeXBlLmggKi8sCiAJCQkJQTND
M0ZFMTIyNTVEREQ5MjAwQjczMDE4IC8qIFJlcGxhY2VBcnJheU9mTWF0cml4VmFyeWluZy5jcHAg
Ki8sCiAJCQkJQTNDM0ZFMTEyNTVEREQ5MjAwQjczMDE4IC8qIFJlcGxhY2VBcnJheU9mTWF0cml4
VmFyeWluZy5oICovLAogCQkJCTZFQjAxQzFGMjQ3NzI3QTkwMEU1MEIzNSAvKiBSZXBsYWNlQ2xp
cERpc3RhbmNlVmFyaWFibGUuY3BwICovLApAQCAtMjU5MCw2ICsyODc1LDcgQEAKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNUNCMzAwREYxREUzOUYwMzAwRDJDNDA1
IC8qIGdsICovLAorCQkJCUZGODFGRTdGMjU4MThENjgwMDg5NEUyNCAvKiBtZXRhbCAqLywKIAkJ
CQk2RTMzRThFNzI0RDBEMTk2MDAyMzA5QUMgLyogQnVmZmVySW1wbC5jcHAgKi8sCiAJCQkJNUNC
MzA0QUExREU0MTY0ODAwRDJDNDA1IC8qIEJ1ZmZlckltcGwuaCAqLywKIAkJCQk1Q0IzMDRBQjFE
RTQxNjQ4MDBEMkM0MDUgLyogQ29tcGlsZXJJbXBsLmggKi8sCkBAIC0yNzQ1LDYgKzMwMzEsNyBA
QAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1Q0IzMDQ4QjFERTQx
NDM1MDBEMkM0MDUgLyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayAqLywKKwkJCQlGRjgxRkY5NTI1
ODFBMzk3MDA4OTRFMjQgLyogTWV0YWwuZnJhbWV3b3JrICovLAogCQkJCTVDQjMwNDhEMURFNDE0
NDQwMEQyQzQwNSAvKiBPcGVuR0wuZnJhbWV3b3JrICovLAogCQkJCTVDQjMwNDhGMURFNDE0NTUw
MEQyQzQwNSAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLywKIAkJCSk7CkBAIC0zMTg3LDYgKzM0
NzQsMTU0IEBACiAJCQlwYXRoID0gaW5jbHVkZS9HTFNMQU5HOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJRkY4MUZFN0YyNTgxOEQ2ODAwODk0RTI0IC8qIG1ldGFsICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlGRjgxRkVBOTI1ODE4
RDY4MDA4OTRFMjQgLyogc2hhZGVycyAqLywKKwkJCQlGRjgxRkU5QzI1ODE4RDY4MDA4OTRFMjQg
LyogQnVmZmVyTXRsLmggKi8sCisJCQkJRkY4MUZFOTEyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZl
ck10bC5tbSAqLywKKwkJCQlGRjgxRkVCRDI1ODE4RDY4MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwu
aCAqLywKKwkJCQlGRjgxRkVDMDI1ODE4RDY4MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwubW0gKi8s
CisJCQkJRkY4MUZFQzQyNTgxOEQ2ODAwODk0RTI0IC8qIENvbnRleHRNdGwuaCAqLywKKwkJCQlG
RjgxRkVCRjI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSAqLywKKwkJCQlGRjgxRkU4
QjI1ODE4RDY4MDA4OTRFMjQgLyogRGlzcGxheU10bC5oICovLAorCQkJCUZGODFGRUNFMjU4MThE
NjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLm1tICovLAorCQkJCUZGODFGRTgyMjU4MThENjgwMDg5
NEUyNCAvKiBEaXNwbGF5TXRsX2FwaS5oICovLAorCQkJCUZGODFGRUJDMjU4MThENjgwMDg5NEUy
NCAvKiBGcmFtZUJ1ZmZlck10bC5oICovLAorCQkJCUZGODFGRUM5MjU4MThENjgwMDg5NEUyNCAv
KiBGcmFtZUJ1ZmZlck10bC5tbSAqLywKKwkJCQlGRjgxRkVBNTI1ODE4RDY4MDA4OTRFMjQgLyog
SU9TdXJmYWNlU3VyZmFjZU10bC5oICovLAorCQkJCUZGODFGRTlFMjU4MThENjgwMDg5NEUyNCAv
KiBJT1N1cmZhY2VTdXJmYWNlTXRsLm1tICovLAorCQkJCUZGODFGRUMxMjU4MThENjgwMDg5NEUy
NCAvKiBtdGxfYnVmZmVyX3Bvb2wuaCAqLywKKwkJCQlGRjgxRkVDNTI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2J1ZmZlcl9wb29sLm1tICovLAorCQkJCUZGODFGRTlCMjU4MThENjgwMDg5NEUyNCAv
KiBtdGxfY29tbWFuZF9idWZmZXIuaCAqLywKKwkJCQlGRjgxRkU5NjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tICovLAorCQkJCUZGODFGRTg4MjU4MThENjgwMDg5NEUy
NCAvKiBtdGxfY29tbW9uLmggKi8sCisJCQkJRkY4MUZFQzYyNTgxOEQ2ODAwODk0RTI0IC8qIG10
bF9jb21tb24ubW0gKi8sCisJCQkJRkY4MUZFODkyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb25z
dGFudHMuaCAqLywKKwkJCQlGRjgxRkU5MjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF90
YWJsZV9hdXRvZ2VuLm1tICovLAorCQkJCUZGODFGRThFMjU4MThENjgwMDg5NEUyNCAvKiBtdGxf
Zm9ybWF0X3V0aWxzLmggKi8sCisJCQkJRkY4MUZFODUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9m
b3JtYXRfdXRpbHMubW0gKi8sCisJCQkJRkY4MUZFOTUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9n
bHNsYW5nX210bF91dGlscy5oICovLAorCQkJCUZGODFGRUJFMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gKi8sCisJCQkJRkY4MUZFODAyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9nbHNsYW5nX3V0aWxzLmggKi8sCisJCQkJRkY4MUZFQ0EyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oICovLAorCQkJCUZGODFGRUJCMjU4MThENjgw
MDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gKi8sCisJCQkJRkY4MUZFQzcy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMuaCAqLywKKwkJCQlGRjgxRkVBMzI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5tbSAqLywKKwkJCQlGRjgxRkVBMDI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX3Jlc291cmNlcy5oICovLAorCQkJCUZGODFGRTlGMjU4MThE
NjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLm1tICovLAorCQkJCUZGODFGRUM4MjU4MThENjgw
MDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUuaCAqLywKKwkJCQlGRjgxRkVBMTI1ODE4RDY4MDA4
OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tICovLAorCQkJCUZGODFGRUMyMjU4MThENjgwMDg5
NEUyNCAvKiBtdGxfdXRpbHMuaCAqLywKKwkJCQlGRjgxRkU5RDI1ODE4RDY4MDA4OTRFMjQgLyog
bXRsX3V0aWxzLm1tICovLAorCQkJCUZGODFGRTgxMjU4MThENjgwMDg5NEUyNCAvKiBQcm9ncmFt
TXRsLmggKi8sCisJCQkJRkY4MUZFQ0QyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwubW0g
Ki8sCisJCQkJRkY4MUZFODQyNTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLmggKi8sCisJCQkJ
RkY4MUZFOEQyNTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tICovLAorCQkJCUZGODFGRThG
MjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJCdWZmZXJNdGwuaCAqLywKKwkJCQlGRjgxRkU4NjI1
ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyQnVmZmVyTXRsLm1tICovLAorCQkJCUZGODFGRTkzMjU4
MThENjgwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwuaCAqLywKKwkJCQlGRjgxRkU5OTI1ODE4
RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovLAorCQkJCUZGODFGRThBMjU4MThE
NjgwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggKi8sCisJCQkJRkY4MUZFQTgyNTgxOEQ2ODAwODk0
RTI0IC8qIFNhbXBsZXJNdGwubW0gKi8sCisJCQkJRkY4MUZFQ0IyNTgxOEQ2ODAwODk0RTI0IC8q
IFNoYWRlck10bC5oICovLAorCQkJCUZGODFGRUNDMjU4MThENjgwMDg5NEUyNCAvKiBTaGFkZXJN
dGwubW0gKi8sCisJCQkJRkY4MUZFOTgyNTgxOEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCAq
LywKKwkJCQlGRjgxRkU5NDI1ODE4RDY4MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSAqLywKKwkJ
CQlGRjgxRkU4QzI1ODE4RDY4MDA4OTRFMjQgLyogU3luY010bC5oICovLAorCQkJCUZGODFGRTgz
MjU4MThENjgwMDg5NEUyNCAvKiBTeW5jTXRsLm1tICovLAorCQkJCUZGODFGRUE3MjU4MThENjgw
MDg5NEUyNCAvKiBUZXh0dXJlTXRsLmggKi8sCisJCQkJRkY4MUZFQTYyNTgxOEQ2ODAwODk0RTI0
IC8qIFRleHR1cmVNdGwubW0gKi8sCisJCQkJRkY4MUZFOTAyNTgxOEQ2ODAwODk0RTI0IC8qIFRy
YW5zZm9ybUZlZWRiYWNrTXRsLmggKi8sCisJCQkJRkY4MUZFQTQyNTgxOEQ2ODAwODk0RTI0IC8q
IFRyYW5zZm9ybUZlZWRiYWNrTXRsLm1tICovLAorCQkJCUZGODFGRTk3MjU4MThENjgwMDg5NEUy
NCAvKiBWZXJ0ZXhBcnJheU10bC5oICovLAorCQkJCUZGODFGRTlBMjU4MThENjgwMDg5NEUyNCAv
KiBWZXJ0ZXhBcnJheU10bC5tbSAqLywKKwkJCSk7CisJCQlwYXRoID0gbWV0YWw7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlGRjgxRkVBOTI1ODE4RDY4MDA4OTRFMjQgLyog
c2hhZGVycyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
RkY4MUZFQUEyNTgxOEQ2ODAwODk0RTI0IC8qIGJsaXQubWV0YWwgKi8sCisJCQkJRkY4MUZFQjEy
NTgxOEQ2ODAwODk0RTI0IC8qIGNsZWFyLm1ldGFsICovLAorCQkJCUZGODFGRUFEMjU4MThENjgw
MDg5NEUyNCAvKiBjb21tb24uaCAqLywKKwkJCQlGRjgxRkVBQzI1ODE4RDY4MDA4OTRFMjQgLyog
Y29uc3RhbnRzLmggKi8sCisJCQkJRkY4MUZFQUYyNTgxOEQ2ODAwODk0RTI0IC8qIGNvcHlfYnVm
ZmVyLm1ldGFsICovLAorCQkJCUZGODFGRUIwMjU4MThENjgwMDg5NEUyNCAvKiBmb3JtYXRfYXV0
b2dlbi5oICovLAorCQkJCUZGODFGRUIzMjU4MThENjgwMDg5NEUyNCAvKiBnZW5faW5kaWNlcy5t
ZXRhbCAqLywKKwkJCQlGRjgxRkVCMjI1ODE4RDY4MDA4OTRFMjQgLyogZ2VuX21pcG1hcC5tZXRh
bCAqLywKKwkJCQlGRjgxRkVBRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2RlZmF1bHRfc2hhZGVy
c19zcmNfYXV0b2dlbi5pbmMgKi8sCisJCQkJRkY4MUZFQUIyNTgxOEQ2ODAwODk0RTI0IC8qIHZp
c2liaWxpdHkubWV0YWwgKi8sCisJCQkpOworCQkJcGF0aCA9IHNoYWRlcnM7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OworCQlGRjgxRkYyMDI1ODE5MTk3MDA4OTRFMjQgLyogVHJh
bnNsYXRvck1ldGFsRGlyZWN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlGRjgxRkYzQTI1ODE5MTk3MDA4OTRFMjQgLyogQWRkRXhwbGljaXRUeXBlQ2Fz
dHMuY3BwICovLAorCQkJCUZGODFGRjU0MjU4MTkxOTcwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5
cGVDYXN0cy5oICovLAorCQkJCUZGODFGRjNFMjU4MTkxOTcwMDg5NEUyNCAvKiBBc3RIZWxwZXJz
LmNwcCAqLywKKwkJCQlGRjgxRkY0NzI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5oICov
LAorCQkJCUZGODFGRjRFMjU4MTkxOTcwMDg5NEUyNCAvKiBDb25zdGFudE5hbWVzLmggKi8sCisJ
CQkJRkY4MUZGMjMyNTgxOTE5NzAwODk0RTI0IC8qIERlYnVnLmggKi8sCisJCQkJRkY4MUZGMkIy
NTgxOTE5NzAwODk0RTI0IC8qIERlYnVnU2luay5oICovLAorCQkJCUZGODFGRjI5MjU4MTkxOTcw
MDg5NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJRkY4MUZG
MjIyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmggKi8sCisJ
CQkJRkY4MUZGNDEyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXIuY3BwICovLAorCQkJCUZGODFGRjJBMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3Zl
ckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmggKi8sCisJCQkJRkY4MUZGMkQyNTgxOTE5NzAw
ODk0RTI0IC8qIEVtaXRNZXRhbC5jcHAgKi8sCisJCQkJRkY4MUZGNTIyNTgxOTE5NzAwODk0RTI0
IC8qIEVtaXRNZXRhbC5oICovLAorCQkJCUZGODFGRjI4MjU4MTkxOTcwMDg5NEUyNCAvKiBFbnZp
cm9ubWVudFZhcmlhYmxlLmggKi8sCisJCQkJRkY4MUZGNDgyNTgxOTE5NzAwODk0RTI0IC8qIEhv
aXN0Q29uc3RhbnRzLmNwcCAqLywKKwkJCQlGRjgxRkY0QzI1ODE5MTk3MDA4OTRFMjQgLyogSG9p
c3RDb25zdGFudHMuaCAqLywKKwkJCQlGRjgxRkY1MTI1ODE5MTk3MDA4OTRFMjQgLyogSWRHZW4u
Y3BwICovLAorCQkJCUZGODFGRjM4MjU4MTkxOTcwMDg5NEUyNCAvKiBJZEdlbi5oICovLAorCQkJ
CUZGODFGRjMyMjU4MTkxOTcwMDg5NEUyNCAvKiBMYXlvdXQuY3BwICovLAorCQkJCUZGODFGRjQw
MjU4MTkxOTcwMDg5NEUyNCAvKiBMYXlvdXQuaCAqLywKKwkJCQlGRjgxRkY1QTI1ODE5MTk3MDA4
OTRFMjQgLyogTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5jcHAgKi8sCisJCQkJRkY4MUZGMzQy
NTgxOTE5NzAwODk0RTI0IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCAqLywKKwkJCQlG
RjgxRkYyRjI1ODE5MTk3MDA4OTRFMjQgLyogTWFwU3ltYm9scy5jcHAgKi8sCisJCQkJRkY4MUZG
M0IyNTgxOTE5NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuaCAqLywKKwkJCQlGRjgxRkYyNjI1ODE5
MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNwcCAqLywKKwkJCQlGRjgxRkY1NjI1ODE5MTk3
MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmggKi8sCisJCQkJRkY4MUZGMjEyNTgxOTE5NzAwODk0
RTI0IC8qIE5hbWUuY3BwICovLAorCQkJCUZGODFGRjI0MjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1l
LmggKi8sCisJCQkJRkY4MUZGMzcyNTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5lLmNwcCAqLywK
KwkJCQlGRjgxRkY0OTI1ODE5MTk3MDA4OTRFMjQgLyogUGlwZWxpbmUuaCAqLywKKwkJCQlGRjgx
RkY1MDI1ODE5MTk3MDA4OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuY3BwICovLAorCQkJCUZGODFG
RjQyMjU4MTkxOTcwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5oICovLAorCQkJCUZGODFGRjNE
MjU4MTkxOTcwMDg5NEUyNCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuY3BwICovLAorCQkJCUZG
ODFGRjI3MjU4MTkxOTcwMDg5NEUyNCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCAqLywKKwkJ
CQlGRjgxRkY0QjI1ODE5MTk3MDA4OTRFMjQgLyogUmVmZXJlbmNlLmggKi8sCisJCQkJRkY4MUZG
NTgyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCAqLywKKwkJ
CQlGRjgxRkY1OTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCAq
LywKKwkJCQlGRjgxRkY0NTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmll
ckRlY2xzLmNwcCAqLywKKwkJCQlGRjgxRkY0MzI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUds
b2JhbFF1YWxpZmllckRlY2xzLmggKi8sCisJCQkJRkY4MUZGNEYyNTgxOTE5NzAwODk0RTI0IC8q
IFJld3JpdGVLZXl3b3Jkcy5jcHAgKi8sCisJCQkJRkY4MUZGMzEyNTgxOTE5NzAwODk0RTI0IC8q
IFJld3JpdGVLZXl3b3Jkcy5oICovLAorCQkJCUZGODFGRjM2MjU4MTkxOTcwMDg5NEUyNCAvKiBS
ZXdyaXRlT3V0QXJncy5jcHAgKi8sCisJCQkJRkY4MUZGMkUyNTgxOTE5NzAwODk0RTI0IC8qIFJl
d3JpdGVPdXRBcmdzLmggKi8sCisJCQkJRkY4MUZGM0MyNTgxOTE5NzAwODk0RTI0IC8qIFJld3Jp
dGVQaXBlbGluZXMuY3BwICovLAorCQkJCUZGODFGRjRBMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlUGlwZWxpbmVzLmggKi8sCisJCQkJRkY4MUZGNDYyNTgxOTE5NzAwODk0RTI0IC8qIFJld3Jp
dGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAgKi8sCisJCQkJRkY4MUZGM0YyNTgxOTE5NzAw
ODk0RTI0IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oICovLAorCQkJCUZGODFG
RjU1MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwICov
LAorCQkJCUZGODFGRjM5MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVz
c2lvbnMuaCAqLywKKwkJCQlGRjgxRkYyNTI1ODE5MTk3MDA4OTRFMjQgLyogU2VwYXJhdGVDb21w
b3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAgKi8sCisJCQkJRkY4MUZGMkMyNTgxOTE5NzAwODk0
RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCAqLywKKwkJCQlGRjgx
RkYzNTI1ODE5MTk3MDA4OTRFMjQgLyogU2tpcHBpbmdUcmF2ZXJzZXIuaCAqLywKKwkJCQlGRjgx
RkYzMDI1ODE5MTk3MDA4OTRFMjQgLyogU3ltYm9sRW52LmNwcCAqLywKKwkJCQlGRjgxRkY0NDI1
ODE5MTk3MDA4OTRFMjQgLyogU3ltYm9sRW52LmggKi8sCisJCQkJRkY4MUZGMzMyNTgxOTE5NzAw
ODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5jcHAgKi8sCisJCQkJRkY4MUZGNTcyNTgxOTE5NzAw
ODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5oICovLAorCQkJCUZGODFGRjREMjU4MTkxOTcwMDg5
NEUyNCAvKiBXcmFwTWFpbi5jcHAgKi8sCisJCQkJRkY4MUZGNTMyNTgxOTE5NzAwODk0RTI0IC8q
IFdyYXBNYWluLmggKi8sCisJCQkpOworCQkJcGF0aCA9IFRyYW5zbGF0b3JNZXRhbERpcmVjdDsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlv
biAqLwogCiAvKiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC0zNjEx
LDYgKzQwNDYsNyBAQAogCQkJZmlsZXMgPSAoCiAJCQkJQTNDNDlDMTUyNTVERjg2NTAwNUU4REY3
IC8qIEFkZEFuZFRydWVUb0xvb3BDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVE
Njk3MjI4MjZCOUYwMEI1QkEyQyAvKiBBZGREZWZhdWx0UmV0dXJuU3RhdGVtZW50cy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkY4MUZGOEUyNTgxOTE5ODAwODk0RTI0IC8qIEFkZEV4cGxpY2l0VHlw
ZUNhc3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDcyNDIyODI3NDc3MDBCNUJBMkMgLyog
YWxpZ25lZF9tZW1vcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwN0ExMjMwNjI1QzYwMDJE
QTk3MiAvKiBhbmRyb2lkX3V0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzk5MjMwNjAy
NTMwMDJEQTk3MiAvKiBhbmdsZV9nbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjE4LDYgKzQwNTQs
OCBAQAogCQkJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBMDhDM0NERDE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFt
cGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY4QTIyODI2QjlGMDBCNUJBMkMgLyogQXJy
YXlSZXR1cm5WYWx1ZVRvT3V0UGFyYW1ldGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY5
QzI1ODFBM0MyMDA4OTRFMjQgLyogQXNOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY4
MTI1ODE5MTk4MDA4OTRFMjQgLyogQXN0SGVscGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMx
REJDMjMxQjA0Mzc1RjAwMjM1NTUyIC8qIEFTVE1ldGFkYXRhSExTTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUMxREJERDYxQjA0MzhEMzAwMjM1NTUyIC8qIEF0dHJpYnV0ZU1hcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFMTIxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNjMxLDYgKzQwNjksNyBAQAogCQkJCTVDMURCREQ5MUIwNDM4RDMwMDIz
NTU1MiAvKiBCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTE5MURFMzlGMUEwMEQy
QzQwNSAvKiBCdWZmZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0REIxREU0MTY0ODAw
RDJDNDA1IC8qIEJ1ZmZlckltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUVCMjU4MThE
NjkwMDg5NEUyNCAvKiBCdWZmZXJNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTE0MThC
OTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUMxREJDMjkxQjA0Mzc1RjAwMjM1NTUyIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9y
R0xTTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEN0QxRkNFNDQzNjAwQUM3QTg5IC8qIEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9ySExTTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjQzLDEzICs0
MDgyLDE3IEBACiAJCQkJMzE1RUJEOUExRkNFNDQzNjAwQUM3QTg5IC8qIENvbGxlY3RWYXJpYWJs
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MThFMURCRkVBMTAwMDYwNjZCOCAvKiBDb2xv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMTYxOEI5N0I5QjAwMzkwNjJGIC8qIENvbW1v
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRkIyNTgxOEQ2OTAwODk0RTI0IC8qIGNvbW1v
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJEREQxQjA0MzhEMzAwMjM1NTUyIC8qIENvbXBp
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkMyQzFCMDQzNzVGMDAyMzU1NTIgLyogQ29t
cGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFCMURFMzlGMUEwMEQyQzQwNSAvKiBD
b21waWxlckdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDREQzFERTQxNjQ4MDBEMkM0MDUg
LyogQ29tcGlsZXJJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwNDI1ODE4RDY5MDA4
OTRFMjQgLyogQ29tcGlsZXJNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzQzQ5QkYzMjU1REY2
OTcwMDVFOERGNyAvKiBjb21wcmVzc2lvbl91dGlsc19wb3J0YWJsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUMxREJERTAxQjA0MzhEMzAwMjM1NTUyIC8qIENvbmZpZy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGODgyNTgxOTE5ODAwODk0RTI0IC8qIENvbnN0YW50TmFtZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDMURCREUxMUIwNDM4RDMwMDIzNTU1MiAvKiBDb25zdGFudHMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRUZBMjU4MThENjkwMDg5NEUyNCAvKiBjb25zdGFudHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxMDEyRTFBMThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVu
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkRFMzFCMDQzOEQzMDAyMzU1NTIgLyogQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA3MjcyMzA1RjdDNDAwMkRBOTcyIC8qIENv
bnRleHQuaW5sLmggaW4gSGVhZGVycyAqLywKQEAgLTM2NTcsOSArNDEwMCwxMiBAQAogCQkJCTMx
M0JDRTVGMjM2MTEzM0EwMEZDMzlFNSAvKiBDb250ZXh0RUFHTC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNCMzAxMUQxREUzOUYxQTAwRDJDNDA1IC8qIENvbnRleHRHTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUNCMzA0REUxREU0MTY0ODAwRDJDNDA1IC8qIENvbnRleHRJbXBsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRjgxRkYwQTI1ODE4RDY5MDA4OTRFMjQgLyogQ29udGV4dE10bC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUNDRDU5OEUyMjg0RkM0MDAwMThGMkQ4IC8qIGNvcHlpbWFnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUNDRDgxNzMxREJGRTk5OTAwNjA2NkI4IC8qIERlYnVnLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0M3RDQ2RjE5MTAyNjIxMDAwQjhDMUYgLyogZGVidWcuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRjVEMjU4MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Zy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkY4MUZGNjUyNTgxOTE5NzAwODk0RTI0IC8qIERlYnVnU2luay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MzQyMjgyNzRERTAwQjVCQTJDIC8qIERlY2xhcmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjVFMjI4MjZCOUYwMEI1QkEyQyAvKiBEZWNsYXJl
QW5kSW5pdEJ1aWx0aW5zRm9ySW5zdGFuY2VkTXVsdGl2aWV3LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1QzU1RDY4OTIyODI2QjlGMDBCNUJBMkMgLyogRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuaCBp
biBIZWFkZXJzICovLApAQCAtMzY3Miw2ICs0MTE4LDggQEAKIAkJCQkzMTAxMkUyOTE4Qjk3QjlC
MDAzOTA2MkYgLyogRGlyZWN0aXZlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4
QUYxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMjY0RjhCMTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4g
SGVhZGVycyAqLywKKwkJCQlGRjgxRkY1QzI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJEZXBl
bmRlbnRGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjY0MjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMTVFQkRCQzFGQ0U0NEJGMDBBQzdBODkgLyogRGlzcGF0Y2hUYWJsZUdMX2F1dG9n
ZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREU5MUIwNDM4RDMwMDIzNTU1MiAvKiBEaXNw
bGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0OUMxRTI1NURGODhFMDA1RThERjcgLyogRGlz
cGxheUFwcGxlX2FwaS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjc5LDYgKzQxMjcsOCBAQAogCQkJ
CTMxM0JDRTU0MjM2MTEzM0EwMEZDMzlFNSAvKiBEaXNwbGF5RUFHTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNUNCMzAxMUYxREUzOUYxQTAwRDJDNDA1IC8qIERpc3BsYXlHTC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUNCMzA0RTIxREU0MTY0ODAwRDJDNDA1IC8qIERpc3BsYXlJbXBsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlGRjgxRkVEQTI1ODE4RDY5MDA4OTRFMjQgLyogRGlzcGxheU10bC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRDIyNTgxOEQ2ODAwODk0RTI0IC8qIERpc3BsYXlNdGxf
YXBpLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRDOTFGQ0U0NEU0MDBBQzdBODkgLyogZHJp
dmVyX3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUIwMUMxRDI0NzcyNzlBMDBFNTBCMzUg
LyogRWFybHlGcmFnbWVudFRlc3RzT3B0aW1pemF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MURCNzk1ODI0OTFDODQ1MDA5ODI4NzggLyogZWdsLmggaW4gSGVhZGVycyAqLywKQEAgLTM2ODks
NiArNDEzOSw3IEBACiAJCQkJQTNDNDlCRjkyNTVERjZFNTAwNUU4REY3IC8qIEVHTFJldXNhYmxl
U3luYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5NjcyMjg0Rjc5NjAwMThGMkQ4IC8qIEVH
TFN5bmMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzQzQ5QkZBMjU1REY2RTUwMDVFOERGNyAvKiBF
R0xTeW5jSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGOEMyNTgxOTE5ODAwODk0RTI0
IC8qIEVtaXRNZXRhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2NkEyMjgyNkI5RjAwQjVC
QTJDIC8qIEVtdWxhdGVHTEZyYWdDb2xvckJyb2FkY2FzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTMwMzA2RjcyMzA1RjVFRTAwMkRBOTcyIC8qIEVtdWxhdGVNdWx0aURyYXdTaGFkZXJCdWlsdGlu
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2QTMyMjgyNkI5RjAwQjVCQTJDIC8qIEVtdWxh
dGVQcmVjaXNpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMzcwMSw2ICs0MTUyLDcgQEAKIAkJCQlB
MzBCNTgyQjIzOERGODI2MDA3OUZEREMgLyogZW50cnlfcG9pbnRzX2dsZXNfM18yX2F1dG9nZW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCTMxREI3OTZDMjQ5MUM4RjUwMDk4Mjg3OCAvKiBlbnRyeV9w
b2ludHNfZ2xlc19leHRfYXV0b2dlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA3MjUyMzA1
RjdDNDAwMkRBOTcyIC8qIGVudHJ5X3BvaW50c191dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkY4MUZGNjIyNTgxOTE5NzAwODk0RTI0IC8qIEVudmlyb25tZW50VmFyaWFibGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDMURCREVCMUIwNDM4RDMwMDIzNTU1MiAvKiBFcnJvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE1RUJERTkxRkNFNDUyRDAwQUM3QTg5IC8qIEVycm9yU3RyaW5ncy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUNDN0Q0NzExOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzIyLDYgKzQxNzQsNyBAQAogCQkJCTVDOUZGRjRGMTkx
MDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUM1NUQ2QTQyMjgyNkI5RjAwQjVCQTJDIC8qIEZvbGRFeHByZXNzaW9ucy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUNCMzA0RTgxREU0MTY0ODAwRDJDNDA1IC8qIEZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZFRkUyNTgxOEQ2OTAwODk0RTI0IC8qIGZvcm1hdF9hdXRvZ2VuLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QzFEQkRGMjFCMDQzOEQzMDAyMzU1NTIgLyogZm9ybWF0dXRpbHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTI2MURFMzlGMUEwMEQyQzQwNSAvKiBmb3JtYXR1
dGlsc2dsLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTMzRThFRTI0RDBEMjA5MDAyMzA5QUMgLyog
ZnJhbWVfY2FwdHVyZV91dGlscy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNzMxLDYgKzQxODQsNyBA
QAogCQkJCTVDQjMwMTI4MURFMzlGMUEwMEQyQzQwNSAvKiBGcmFtZWJ1ZmZlckdMLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1Q0IzMDRFQjFERTQxNjQ4MDBEMkM0MDUgLyogRnJhbWVidWZmZXJJbXBs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRFQTFERTQxNjQ4MDBEMkM0MDUgLyogRnJhbWVi
dWZmZXJJbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjAzMjU4MThENjkwMDg5
NEUyNCAvKiBGcmFtZUJ1ZmZlck10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2RTkyMjgy
NkM3OTAwQjVCQTJDIC8qIEZ1bmN0aW9uTG9va3VwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0
OUMwMDI1NURGNzExMDA1RThERjcgLyogRnVuY3Rpb25zQ0dMLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBM0M0OUMwNTI1NURGNzM1MDA1RThERjcgLyogRnVuY3Rpb25zRUFHTC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNzYwLDYgKzQyMTQsOCBAQAogCQkJCTVDNTVENzJDMjI4Mjc0NzcwMEI1QkEyQyAv
KiBoYXNoX3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzMzE4Qjk3QjlCMDAzOTA2
MkYgLyogSGFzaE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkRGQTFCMDQzOEQzMDAy
MzU1NTIgLyogaGlzdG9ncmFtX21hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGODYy
NTgxOTE5ODAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RjgxRkY3MjI1ODE5MTk4MDA4OTRFMjQgLyogSWRHZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
Q0Q4MTc3MURCRkU5OTkwMDYwNjZCOCAvKiBJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUND
RDU5OTMyMjg0RkM0MDAwMThGMkQ4IC8qIGltYWdlZm9ybWF0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE1RUJEOTYxRkNFNDQzNjAwQUM3QTg5IC8qIEltYWdlRnVuY3Rpb25ITFNMLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM3ODAsMTEgKzQyMzYsMTQgQEAKIAkJCQk1QzFEQkMzMTFCMDQzNzVGMDAy
MzU1NTIgLyogSW50ZXJtTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2RkUyMjgyNkNC
MzAwQjVCQTJDIC8qIEludGVybU5vZGVfdXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3
MDgyMjgyNkNCMzAwQjVCQTJDIC8qIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZGOUUyNTgxQTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDNTVENzAxMjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1UcmF2
ZXJzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5NzcyMjg0RkE4MzAwMThGMkQ4IC8qIElP
U3VyZmFjZVN1cmZhY2VDR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxM0JDRTU1MjM2MTEzM0Ew
MEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZFRjQyNTgxOEQ2OTAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxNUVCRDhFMUZDRTQ0MzYwMEFDN0E4OSAvKiBJc0FTVERlcHRoQmVsb3dMaW1p
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQjc5NjYyNDkxQzg4MjAwOTgyODc4IC8qIGtocnBs
YXRmb3JtLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY3QTI1ODE5MTk4MDA4OTRFMjQgLyog
TGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkMzMjFCMDQzNzVGMDAyMzU1NTIgLyog
bGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjcxNjk3NERFRDAwNkZB
QTVBIC8qIExleGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGMDFERTQxNjQ4MDBEMkM0
MDUgLyogbG9hZF9mdW5jdGlvbnNfdGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzc5Miw2ICs0
MjUxLDggQEAKIAkJCQkzMTVFQkRGMTFGQ0U0NTJEMDBBQzdBODkgLyogTG9nZ2luZ0Fubm90YXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjkxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3Jv
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9F
eHBhbmRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNkUyNTgxOTE5ODAwODk0RTI0IC8q
IE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjc1
MjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0M3
RDQ3MzE5MTAyNjIxMDAwQjhDMUYgLyogbWF0aHV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
Q0Q4MTkwMURCRkVBMTAwMDYwNjZCOCAvKiBtYXRyaXhfdXRpbHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDMURCQkYyMUIwNDM2RUMwMDIzNTU1MiAvKiBNZW1vcnlCdWZmZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzc5OSw5ICs0MjYwLDI0IEBACiAJCQkJQTMwMzA3OEMyMzA1RjhGMDAwMkRBOTcy
IC8qIE1lbW9yeU9iamVjdEdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NENTk4MjIyODRGQjkw
MDAxOEYyRDggLyogTWVtb3J5T2JqZWN0SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJE
RUQxRkNFNDUyRDAwQUM3QTg5IC8qIE1lbW9yeVByb2dyYW1DYWNoZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGOTAyNTgxOTE5ODAwODk0RTI0IC8qIE1vZGlmeVN0cnVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZGMDgyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9idWZmZXJfcG9vbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRUEyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9jb21t
YW5kX2J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRDcyNTgxOEQ2OTAwODk0RTI0
IC8qIG10bF9jb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUQ4MjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfY29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVERDI1ODE4
RDY5MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZFRTQyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9nbHNsYW5nX210bF91dGlscy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZFRDAyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9nbHNsYW5nX3V0aWxz
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYxMDI1ODE4RDZBMDA4OTRFMjQgLyogbXRsX29j
Y2x1c2lvbl9xdWVyeV9wb29sLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwRDI1ODE4RDZB
MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZF
RUYyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZGODFGRjBFMjU4MThENkEwMDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZGODFGRjA5MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfdXRpbHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUZGODFGRjVFMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzU1RDY2OTIyODI2QjlGMDBCNUJBMkMgLyogTmFtZUVtYmVkZGVkVW5pZm9y
bVN0cnVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzBCMjMwNUY2QjUwMDJEQTk3MiAv
KiBub19kZXN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDcwNzIyODI2Q0IzMDBC
NUJBMkMgLyogTm9kZVNlYXJjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGOUIyNTgxQTND
MjAwODk0RTI0IC8qIE5vZGVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRDMjFGQ0U0
NEJGMDBBQzdBODkgLyogbnVsbF9mdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRG
OEJDMTY5NzRERUQwMDZGQUE1QSAvKiBudW1lcmljX2xleC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUNDRDU5NjYyMjg0Rjc5NjAwMThGMkQ4IC8qIE9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTM4MjEsNiArNDI5Nyw3IEBACiAJCQkJMzEwMTJFNTUxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNl
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxNTExREUzOUY0NzAwRDJDNDA1IC8q
IFBidWZmZXJTdXJmYWNlQ0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1RDIzNjExMzNB
MDBGQzM5RTUgLyogUGJ1ZmZlclN1cmZhY2VFQUdMLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgx
RkY4MzI1ODE5MTk4MDA4OTRFMjQgLyogUGlwZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
MURCQkY1MUIwNDM2RUMwMDIzNTU1MiAvKiBwbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzE1RUJFMjkxRkNGODA4QzAwQUM3QTg5IC8qIFBNdXJIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1QzU1RDcyNzIyODI3NDc3MDBCNUJBMkMgLyogUG9vbEFsbG9jLmggaW4gSGVhZGVycyAqLywK
QEAgLTM4MzQsOSArNDMxMSwxMSBAQAogCQkJCTVDQjMwNEYzMURFNDE2NDgwMEQyQzQwNSAvKiBQ
cm9ncmFtSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjIxREU0MTY0ODAwRDJDNDA1
IC8qIFByb2dyYW1JbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREU2MUZDRTQ1
MkQwMEFDN0E4OSAvKiBQcm9ncmFtTGlua2VkUmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRjgxRkVEMTI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE1RUJERUUxRkNFNDUyRDAwQUM3QTg5IC8qIFByb2dyYW1QaXBlbGluZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzE1RUJEQkIxRkNFNDRCRjAwQUM3QTg5IC8qIFByb2dyYW1QaXBlbGlu
ZUdMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRDODFGQ0U0NEU0MDBBQzdBODkgLyogUHJv
Z3JhbVBpcGVsaW5lSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGN0MyNTgxOTE5ODAw
ODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY3NzIy
ODI2QjlGMDBCNUJBMkMgLyogUHJ1bmVFbXB0eUNhc2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzU1RDZBNTIyODI2QjlGMDBCNUJBMkMgLyogUHJ1bmVOb09wcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNDRDgxQjYxREJGRUE1QzAwNjA2NkI4IC8qIFF1YWxpZmllclR5cGVzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTM4NDQsMTAgKzQzMjMsMTMgQEAKIAkJCQk1QzFEQkUwNDFCMDQzOEQzMDAyMzU1
NTIgLyogcXVlcnljb252ZXJzaW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxMzIxREUz
OUYxQTAwRDJDNDA1IC8qIFF1ZXJ5R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEY0MURF
NDE2NDgwMEQyQzQwNSAvKiBRdWVyeUltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUQ0
MjU4MThENjkwMDg5NEUyNCAvKiBRdWVyeU10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDgx
N0QxREJGRTk5OTAwNjA2NkI4IC8qIHF1ZXJ5dXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
NTVENjdDMjI4MjZCOUYwMEI1QkEyQyAvKiBSZWNvcmRDb25zdGFudFByZWNpc2lvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTNDNDlDMTMyNTVERjg2NTAwNUU4REY3IC8qIFJlY29yZFVuaWZvcm1C
bG9ja3NUcmFuc2xhdGVkVG9TdHJ1Y3R1cmVkQnVmZmVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkY4MUZGNjEyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nrcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMxREJFMDYxQjA0MzhEMzAwMjM1NTUyIC8qIFJlZkNvdW50T2JqZWN0
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY4NTI1ODE5MTk4MDA4OTRFMjQgLyogUmVmZXJl
bmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY1QzIyODI2QjlGMDBCNUJBMkMgLyogUmVn
ZW5lcmF0ZVN0cnVjdE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY5QTIyODI2QjlG
MDBCNUJBMkMgLyogUmVtb3ZlQXJyYXlMZW5ndGhNZXRob2QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTZFRDdCREYxMjQzMkNDQzQwMEUwMTUwMyAvKiBSZW1vdmVBdG9taWNDb3VudGVyQnVpbHRpbnMu
aCBpbiBIZWFkZXJzICovLApAQCAtMzg2MSwxMSArNDM0MywxMyBAQAogCQkJCTVDQjMwMTM0MURF
MzlGMUEwMEQyQzQwNSAvKiBSZW5kZXJidWZmZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNC
MzA0RjYxREU0MTY0ODAwRDJDNDA1IC8qIFJlbmRlcmJ1ZmZlckltcGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTVDQjMwNEY1MURFNDE2NDgwMEQyQzQwNSAvKiBSZW5kZXJidWZmZXJJbXBsX21vY2su
aCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRURFMjU4MThENjkwMDg5NEUyNCAvKiBSZW5kZXJC
dWZmZXJNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEY4MURFNDE2NDgwMEQyQzQwNSAv
KiByZW5kZXJlcl91dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5N0MyMjg0RkE4MzAw
MThGMkQ4IC8qIFJlbmRlcmVyQ0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1NzIzNjEx
MzNBMDBGQzM5RTUgLyogUmVuZGVyZXJFQUdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDEz
ODFERTM5RjFBMDBEMkM0MDUgLyogUmVuZGVyZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNC
MzAxMzYxREUzOUYxQTAwRDJDNDA1IC8qIHJlbmRlcmVyZ2xfdXRpbHMuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZGODFGRUUyMjU4MThENjkwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEzQzQ5QzFBMjU1REY4NkYwMDVFOERGNyAvKiBSZXBsYWNlQXJyYXlP
Zk1hdHJpeFZhcnlpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTZFQjAxQzIyMjQ3NzI3QTkwMEU1
MEIzNSAvKiBSZXBsYWNlQ2xpcERpc3RhbmNlVmFyaWFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUEzMDMwNzA3MjMwNUY2MzYwMDJEQTk3MiAvKiBSZXBsYWNlU2hhZG93aW5nVmFyaWFibGVzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM4NzYsMTYgKzQzNjAsMjIgQEAKIAkJCQkzMTVFQkRGOTFGQ0U0
NTJEMDBBQzdBODkgLyogUmVzb3VyY2VNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNkY2
MjMwNUY1RUUwMDJEQTk3MiAvKiBSZXdyaXRlQXRvbWljQ291bnRlcnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTVDNTVENjU3MjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlQXRvbWljRnVuY3Rpb25F
eHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGOTMyNTgxOTE5ODAwODk0RTI0
IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDZG
OTIzMDVGNUVFMDAyREE5NzIgLyogUmV3cml0ZUN1YmVNYXBTYW1wbGVyc0FzMkRBcnJheS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA2RjgyMzA1RjVFRTAwMkRBOTcyIC8qIFJld3JpdGVEZmR5
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY0RTIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0
ZURvV2hpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjkxMjI4MjZCOUYwMEI1QkEyQyAv
KiBSZXdyaXRlRWxzZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OUUyMjgyNkI5
RjAwQjVCQTJDIC8qIFJld3JpdGVFeHByZXNzaW9uc1dpdGhTaGFkZXJTdG9yYWdlQmxvY2suaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRjdEMjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlR2xv
YmFsUXVhbGlmaWVyRGVjbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzQzQ5QzE0MjU1REY4NjUw
MDVFOERGNyAvKiBSZXdyaXRlSW50ZXJwb2xhdGVBdE9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkY4MUZGNkIyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZGNjgyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVPdXRBcmdzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY4NDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZVBp
cGVsaW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2NjgyMjgyNkI5RjAwQjVCQTJDIC8q
IFJld3JpdGVSZXBlYXRlZEFzc2lnblRvU3dpenpsZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEz
RDMyOTE1MjNDRkNCNzcwMDM3NTY1NyAvKiBSZXdyaXRlUm93TWFqb3JNYXRyaWNlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUM1NUQ2NEYyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3JpdGVTdHJ1Y3RT
YW1wbGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2ODcyMjgyNkI5RjAwQjVCQTJDIC8q
IFJld3JpdGVUZXhlbEZldGNoT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY3OTI1
ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1QzU1RDY4NDIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0ZVVuYXJ5TWlu
dXNPcGVyYXRvckZsb2F0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY4NTIyODI2QjlGMDBC
NUJBMkMgLyogUmV3cml0ZVVuYXJ5TWludXNPcGVyYXRvckludC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUM1NUQ3MEEyMjgyNkNCMzAwQjVCQTJDIC8qIFJ1bkF0VGhlRW5kT2ZTaGFkZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzg5NiwxMiArNDM4NiwxNSBAQAogCQkJCTVDMURCRjI4MUIwNDM4RDMw
MDIzNTU1MiAvKiBTYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDEzQTFERTM5RjFB
MDBEMkM0MDUgLyogU2FtcGxlckdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGOTFERTQx
NjQ4MDBEMkM0MDUgLyogU2FtcGxlckltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUQ5
MjU4MThENjkwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1
RDY4RTIyODI2QjlGMDBCNUJBMkMgLyogU2NhbGFyaXplVmVjQW5kTWF0Q29uc3RydWN0b3JBcmdz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDcyOTIzMDVGN0M0MDAyREE5NzIgLyogU2VtYXBo
b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDc4RDIzMDVGOEYwMDAyREE5NzIgLyogU2Vt
YXBob3JlR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzJCMjMwNUY4MDAwMDJEQTk3MiAv
KiBTZW1hcGhvcmVJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY3RDIyODI2QjlGMDBC
NUJBMkMgLyogU2VwYXJhdGVBcnJheUNvbnN0cnVjdG9yU3RhdGVtZW50cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUM1NUQ2OTYyMjgyNkI5RjAwQjVCQTJDIC8qIFNlcGFyYXRlQXJyYXlJbml0aWFs
aXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNzMyNTgxOTE5ODAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZG
NjYyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjcwMjI4MjZCOUYwMEI1QkEyQyAvKiBTZXBhcmF0
ZURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2NEMyMjgyNkI5RjAwQjVC
QTJDIC8qIFNlcGFyYXRlRXhwcmVzc2lvbnNSZXR1cm5pbmdBcnJheXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUEzRDMyOTAzMjNDRkM1QTMwMDM3NTY1NyAvKiBzZXJpYWxfdXRpbHMuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzkxMCwxNCArNDQwMywxNyBAQAogCQkJCTVDQjMwMTNDMURFMzlGMUEwMEQy
QzQwNSAvKiBTaGFkZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RkExREU0MTY0ODAw
RDJDNDA1IC8qIFNoYWRlckltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREI3OTY0MjQ5MUM4
NzYwMDk4Mjg3OCAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYxMTI1
ODE4RDZBMDA4OTRFMjQgLyogU2hhZGVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMURCNzk2
NTI0OTFDODc2MDA5ODI4NzggLyogU2hhZGVyVmFycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2NjEyMjgyNkI5RjAwQjVCQTJDIC8qIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxNUVCREYwMUZDRTQ1MkQwMEFDN0E4OSAvKiBTaXplZE1SVUNhY2hlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY2RjI1ODE5MTk4MDA4OTRFMjQgLyogU2tpcHBpbmdU
cmF2ZXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzQzQ5QzAzMjU1REY3MTkwMDVFOERGNyAv
KiBTb2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QzAxNjk3NERFRDAwNkZB
QTVBIC8qIFNvdXJjZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY5QjIyODI2
QjlGMDBCNUJBMkMgLyogU3BsaXRTZXF1ZW5jZU9wZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1QzFEQkYyQzFCMDQzOEQzMDAyMzU1NTIgLyogU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDQjMwMTNFMURFMzlGMUEwMEQyQzQwNSAvKiBTdGF0ZU1hbmFnZXJHTC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZGMUQyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQ0Q4MTgxMURCRkU5OTkwMDYwNjZCOCAvKiBTdHJlYW0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQjMwNEZCMURFNDE2NDgwMEQyQzQwNSAvKiBTdHJlYW1Qcm9kdWNlcklt
cGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MTkyMURCRkVBMTAwMDYwNjZCOCAvKiBzdHJp
bmdfdXRpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzkyNSwxMiArNDQyMSwxNSBAQAogCQkJCTVD
MURCRjJGMUIwNDM4RDMwMDIzNTU1MiAvKiBTdXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0IzMDE0MDFERTM5RjFBMDBEMkM0MDUgLyogU3VyZmFjZUdMLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1Q0IzMDRGRDFERTQxNjQ4MDBEMkM0MDUgLyogU3VyZmFjZUltcGwuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZGODFGRUU3MjU4MThENjkwMDg5NEUyNCAvKiBTdXJmYWNlTXRsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzU1RDZFNjIyODI2Qzc5MDBCNUJBMkMgLyogU3ltYm9sLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlGRjgxRkY3RTI1ODE5MTk4MDA4OTRFMjQgLyogU3ltYm9sRW52LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkU2NTE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDNTVENzBEMjI4Mjc0MTQwMEI1QkEyQyAvKiBTeW1ib2xUYWJs
ZV9hdXRvZ2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkQ4NTFGQ0U0NDM2MDBBQzdBODkg
LyogU3ltYm9sVW5pcXVlSWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREI5MUZDRTQ0QkYw
MEFDN0E4OSAvKiBTeW5jR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRENCMUZDRTQ0RTQw
MEFDN0E4OSAvKiBTeW5jSW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFREIyNTgxOEQ2
OTAwODk0RTI0IC8qIFN5bmNNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxQTMzMUM3MUVBNUVE
NUYwMEZEMjIwMyAvKiBzeXN0ZW1fdXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTlD
MjI4NEZDNzUwMDE4RjJEOCAvKiBTeXN0ZW1JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUIx
NTcyMjIzNkI4MDMzMDBDQUE0RkQgLyogU3lzdGVtSW5mb19pbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zOTM5LDE4ICs0NDM4LDIzIEBACiAJCQkJNUNCMzAxNDIxREUzOUYxQTAwRDJDNDA1
IC8qIFRleHR1cmVHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA1MDAxREU0MTY0ODAwRDJD
NDA1IC8qIFRleHR1cmVJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGRTFERTQxNjQ4
MDBEMkM0MDUgLyogVGV4dHVyZUltcGxfbW9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZF
RjYyNTgxOEQ2OTAwODk0RTI0IC8qIFRleHR1cmVNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
NUVCREY0MUZDRTQ1MkQwMEFDN0E4OSAvKiBUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
MURCQkY3MUIwNDM2RUMwMDIzNTU1MiAvKiB0bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRG
OEMyMTY5NzRERUQwMDZGQUE1QSAvKiBUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4
QzQxNjk3NERFRDAwNkZBQTVBIC8qIFRva2VuaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZGOTEyNTgxOTE5ODAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTMwMzA3MjAyMzA1RjdDNDAwMkRBOTcyIC8qIHRyYWNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMUEzMzFFMjFFQTVFRkI4MDBGRDIyMDMgLyogdHJhY2VfZXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDMURCRjM0MUIwNDM4RDMwMDIzNTU1MiAvKiBUcmFuc2Zvcm1GZWVkYmFjay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxNDQxREUzOUYxQTAwRDJDNDA1IC8qIFRyYW5zZm9y
bUZlZWRiYWNrR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNTAyMURFNDE2NDgwMEQyQzQw
NSAvKiBUcmFuc2Zvcm1GZWVkYmFja0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNTAx
MURFNDE2NDgwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0ltcGxfbW9jay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZFREYyNTgxOEQ2OTAwODk0RTI0IC8qIFRyYW5zZm9ybUZlZWRiYWNr
TXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU2QjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJh
bnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTZEMThCOTdCOUIwMDM5MDYy
RiAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMUIyNTgxOTBD
QTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkY4MUZGMUYyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTVFQkQ5RDFGQ0U0NDM2MDBBQzdBODkgLyogVHJhbnNsYXRvclZ1bGth
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzAxOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY4NjIyODI2QjlGMDBCNUJBMkMgLyogVW5mb2xk
U2hvcnRDaXJjdWl0QVNULmggaW4gSGVhZGVycyAqLywKQEAgLTQwMTAsMTEgKzQ1MTQsMTMgQEAK
IAkJCQk1QzFEQkY0MDFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXJyYXkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDQjMwMTQ2MURFMzlGMUEwMEQyQzQwNSAvKiBWZXJ0ZXhBcnJheUdMLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0IzMDUwMzFERTQxNjQ4MDBEMkM0MDUgLyogVmVydGV4QXJyYXlJ
bXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVFNjI1ODE4RDY5MDA4OTRFMjQgLyogVmVy
dGV4QXJyYXlNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCRjQyMUIwNDM4RDMwMDIzNTU1
MiAvKiBWZXJ0ZXhBdHRyaWJ1dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzAwMjI4MjZD
QjMwMEI1QkEyQyAvKiBWaXNpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMxQjYxODMyMzBCNzQ3
RjAwMTYxMEQ3IC8qIFdpbmRvd1N1cmZhY2VDR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxM0JD
RTVFMjM2MTEzM0EwMEZDMzlFNSAvKiBXaW5kb3dTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE1RUJERkExRkNFNDUyRDAwQUM3QTg5IC8qIFdvcmtlclRocmVhZC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZGOEQyNTgxOTE5ODAwODk0RTI0IC8qIFdyYXBNYWluLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1QzU1RDY3NTIyODI2QjlGMDBCNUJBMkMgLyogV3JhcFN3aXRjaFN0YXRl
bWVudHNJbkJsb2Nrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5NTEyMjg0RUNEMTAwMThG
MkQ4IC8qIHh4aGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwpAQCAtNDEzNywxNCArNDY0Mywx
NyBAQAogCQkJZmlsZXMgPSAoCiAJCQkJQTNDNDlDMEUyNTVERjg1RjAwNUU4REY3IC8qIEFkZEFu
ZFRydWVUb0xvb3BDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QTkyMjgy
NkJDODAwQjVCQTJDIC8qIEFkZERlZmF1bHRSZXR1cm5TdGF0ZW1lbnRzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZGODFGRjc0MjU4MTkxOTgwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDcyMTIyODI3NDc3MDBCNUJBMkMgLyogYWxp
Z25lZF9tZW1vcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA3QTAyMzA2MjVDNjAwMkRB
OTcyIC8qIGFuZHJvaWRfdXRpbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkREMzFCMDQz
OEQzMDAyMzU1NTIgLyogYW5nbGV0eXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkJG
MDFCMDQzNkVDMDAyMzU1NTIgLyogYW5nbGV1dGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
MDhDM0NEQzE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNTVENkFBMjI4MjZCQzgwMEI1QkEyQyAvKiBBcnJheVJldHVyblZhbHVl
VG9PdXRQYXJhbWV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzgyNTgxOTE5ODAw
ODk0RTI0IC8qIEFzdEhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJDMjIxQjA0
Mzc1RjAwMjM1NTUyIC8qIEFTVE1ldGFkYXRhSExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzFEQkRENTFCMDQzOEQzMDAyMzU1NTIgLyogQXR0cmlidXRlTWFwLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUZGODFGRjlGMjU4MUFEMDQwMDg5NEUyNCAvKiBibGl0Lm1ldGFsIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUNCMzAxMTYxREUzOUYxQTAwRDJDNDA1IC8qIEJsaXRHTC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1Q0NENTk2MTIyODRGNzk2MDAxOEYyRDggLyogQmxvYkNhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDMURCQzI0MUIwNDM3NUYwMDIzNTU1MiAvKiBibG9ja2xheW91dC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTQxNTMsNiArNDY2Miw3IEBACiAJCQkJNUMxREJERDgxQjA0
MzhEMzAwMjM1NTUyIC8qIEJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDExODFE
RTM5RjFBMDBEMkM0MDUgLyogQnVmZmVyR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkUzM0U4
RTgyNEQwRDFFQjAwMjMwOUFDIC8qIEJ1ZmZlckltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZFRTAyNTgxOEQ2OTAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTEzMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkMyODFCMDQzNzVGMDAyMzU1NTIgLyogQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3JHTFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCRDg0MUZD
RTQ0MzYwMEFDN0E4OSAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvckhMU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC00MTYxLDEyICs0NjcxLDE0IEBACiAJCQkJNUMxREJEREExQjA0MzhEMzAwMjM1
NTUyIC8qIENhcHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QUMyMjgyNkJDODAwQjVC
QTJDIC8qIENsYW1wRnJhZ0RlcHRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkFEMjI4
MjZCQzgwMEI1QkEyQyAvKiBDbGFtcFBvaW50U2l6ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkZBMjI1ODFBRDA0MDA4OTRFMjQgLyogY2xlYXIubWV0YWwgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTVFQkRCRDFGQ0U0NEJGMDBBQzdBODkgLyogQ2xlYXJNdWx0aXZpZXdHTC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMTAxMkUxNTE4Qjk3QjlCMDAzOTA2MkYgLyogQ29kZUdlbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTVFQkQ4QzFGQ0U0NDM2MDBBQzdBODkgLyogQ29sbGVjdFZhcmlh
Ymxlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxNzE4Qjk3QjlCMDAzOTA2MkYgLyog
Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJEREMxQjA0MzhEMzAwMjM1NTUy
IC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTFBMURFMzlGMUEwMEQy
QzQwNSAvKiBDb21waWxlckdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjA3MjU4MThE
NjkwMDg5NEUyNCAvKiBDb21waWxlck10bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QkYy
MjU1REY2OTcwMDVFOERGNyAvKiBjb21wcmVzc2lvbl91dGlsc19wb3J0YWJsZS5jYyBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDMURCRERGMUIwNDM4RDMwMDIzNTU1MiAvKiBDb25maWcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUNDRDgxQjAxREJGRUE1QzAwNjA2NkI4IC8qIENvbnN0YW50VW5pb24u
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTc3LDYgKzQ2ODksOCBAQAogCQkJCTMxM0JDRTU4MjM2
MTEzM0EwMEZDMzlFNSAvKiBDb250ZXh0RUFHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0Iz
MDExQzFERTM5RjFBMDBEMkM0MDUgLyogQ29udGV4dEdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwNEREMURFNDE2NDgwMEQyQzQwNSAvKiBDb250ZXh0SW1wbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGRjgxRkYwNjI1ODE4RDY5MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCUZGODFGRkExMjU4MUFEMDQwMDg5NEUyNCAvKiBjb3B5X2J1ZmZlci5tZXRh
bCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OThGMjI4NEZDNDAwMDE4RjJEOCAvKiBjb3B5aW1h
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDgxNzIxREJGRTk5OTAwNjA2NkI4IC8qIERl
YnVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQzdENDZFMTkxMDI2MjEwMDBCOEMxRiAvKiBk
ZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQxOTIsNiArNDcwNiw4IEBACiAJCQkJMzEwMTJF
MjgxOEI5N0I5QjAwMzkwNjJGIC8qIERpcmVjdGl2ZUhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTI2NEY4QUUxNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZUhhbmRsZXJCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEIwMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3Rp
dmVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNjMyNTgxOTE5NzAwODk0RTI0
IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZG
ODFGRjdCMjU4MTkxOTgwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVy
c2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCREJFMUZDRTQ0QkYwMEFDN0E4OSAvKiBE
aXNwYXRjaFRhYmxlR0xfYXV0b2dlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkRFODFC
MDQzOEQzMDAyMzU1NTIgLyogRGlzcGxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUMx
QzI1NURGODg5MDA1RThERjcgLyogRGlzcGxheUFwcGxlX2FwaS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTQxOTksMTIgKzQ3MTUsMTQgQEAKIAkJCQkzMTNCQ0U2MTIzNjExMzNBMDBGQzM5RTUgLyog
RGlzcGxheUVBR0wubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDExRTFERTM5RjFBMDBEMkM0
MDUgLyogRGlzcGxheUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwNEUxMURFNDE2NDgw
MEQyQzQwNSAvKiBEaXNwbGF5SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYxNDI1
ODE4RDZBMDA4OTRFMjQgLyogRGlzcGxheU10bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVC
RENDMUZDRTQ0RTQwMEFDN0E4OSAvKiBkcml2ZXJfdXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTMwMzA3OUQyMzA2MjU2NTAwMkRBOTcyIC8qIGRyaXZlcl91dGlsc19tYWMubW0gaW4gU291
cmNlcyAqLywKIAkJCQk2RUIwMUMxRTI0NzcyNzlBMDBFNTBCMzUgLyogRWFybHlGcmFnbWVudFRl
c3RzT3B0aW1pemF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QkY3MjU1REY2REYw
MDVFOERGNyAvKiBFR0xSZXVzYWJsZVN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5
NkEyMjg0Rjc5NjAwMThGMkQ4IC8qIEVHTFN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTND
NDlCRjgyNTVERjZFMTAwNUU4REY3IC8qIEVHTFN5bmNJbXBsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCUZGODFGRjY3MjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0YWwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzE1RUJEOTcxRkNFNDQzNjAwQUM3QTg5IC8qIGVtdWxhdGVkX2J1aWx0aW5fZnVu
Y3Rpb25zX2hsc2xfYXV0b2dlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZCMTIyODI2
QkM4MDBCNUJBMkMgLyogRW11bGF0ZUdMRnJhZ0NvbG9yQnJvYWRjYXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUEzMDMwNkZDMjMwNUY1RUUwMDJEQTk3MiAvKiBFbXVsYXRlTXVsdGlEcmF3U2hh
ZGVyQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MjQyLDExICs0NzYwLDE0IEBACiAJ
CQkJNUMxREJERjMxQjA0MzhEMzAwMjM1NTUyIC8qIEZyYW1lYnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDMURCREY1MUIwNDM4RDMwMDIzNTU1MiAvKiBGcmFtZWJ1ZmZlckF0dGFjaG1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMjcxREUzOUYxQTAwRDJDNDA1IC8qIEZy
YW1lYnVmZmVyR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGMEYyNTgxOEQ2QTAwODk0
RTI0IC8qIEZyYW1lQnVmZmVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNkVBMEQ2OTMyMzUx
NUE1QzAwQjg2NTFGIC8qIEZyYW1lQ2FwdHVyZV9tb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNTVENkU0MjI4MjZDNzkwMEI1QkEyQyAvKiBGdW5jdGlvbkxvb2t1cC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBM0M0OUMwMjI1NURGNzE0MDA1RThERjcgLyogRnVuY3Rpb25zQ0dMLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUEzQzQ5QzA3MjU1REY3MzkwMDVFOERGNyAvKiBGdW5jdGlvbnNF
QUdMLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMkIxREUzOUYxQTAwRDJDNDA1IC8qIEZ1
bmN0aW9uc0dMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRkE0MjU4MUFEMDQwMDg5NEUy
NCAvKiBnZW5faW5kaWNlcy5tZXRhbCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRkEzMjU4MUFE
MDQwMDg5NEUyNCAvKiBnZW5fbWlwbWFwLm1ldGFsIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5
NkIyMjg0Rjc5NjAwMThGMkQ4IC8qIEdMRVMxUmVuZGVyZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUNDRDU5NjMyMjg0Rjc5NjAwMThGMkQ4IC8qIEdMRVMxU3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUMxQkFBQjExREZCNkYzMzAwMjkwNkJCIC8qIGdsb2JhbF9zdGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTQyNTQsNiArNDc3NSw4IEBACiAJCQkJQTNEMzI5MEIyM0NGQ0I0RDAw
Mzc1NjU3IC8qIGdsc2xhbmdfdGFiX2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMx
REJERjgxQjA0MzhEMzAwMjM1NTUyIC8qIEhhbmRsZUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzMTVFQkQ4NjFGQ0U0NDM2MDBBQzdBODkgLyogSGFzaE5hbWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUZGODFGRjgyMjU4MTkxOTgwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY4QjI1ODE5MTk4MDA4OTRFMjQgLyogSWRHZW4u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDgxNzYxREJGRTk5OTAwNjA2NkI4IC8qIEltYWdl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTkxMjI4NEZDNDAwMDE4RjJEOCAvKiBpbWFn
ZWZvcm1hdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEODMxRkNFNDQzNjAwQUM3QTg5
IC8qIEltYWdlRnVuY3Rpb25ITFNMLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDI3MCwxMCArNDc5
MywxMyBAQAogCQkJCTVDMURCQzMwMUIwNDM3NUYwMDIzNTU1MiAvKiBJbnRlcm1Ob2RlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDNTVENzA5MjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1Ob2Rl
X3V0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MDQyMjgyNkNCMzAwQjVCQTJDIC8q
IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY5
RDI1ODFBM0MyMDA4OTRFMjQgLyogSW50ZXJtUmVidWlsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzU1RDcwMjIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUNDRDU5NzkyMjg0RkE4MzAwMThGMkQ4IC8qIElPU3VyZmFjZVN1cmZhY2VD
R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEzQkNFNUMyMzYxMTMzQTAwRkMzOUU1IC8qIElP
U3VyZmFjZVN1cmZhY2VFQUdMLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRUQyNTgxOEQ2
OTAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkz
MTVFQkQ5QzFGQ0U0NDM2MDBBQzdBODkgLyogSXNBU1REZXB0aEJlbG93TGltaXQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZGNkMyNTgxOTE5ODAwODk0RTI0IC8qIExheW91dC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMjY0RjhCNjE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUNCMzA0RUYxREU0MTY0ODAwRDJDNDA1IC8qIGxvYWRfZnVuY3Rp
b25zX3RhYmxlX2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5OTUyMjg0RkM0
MDAwMThGMkQ4IC8qIGxvYWRpbWFnZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyODEsMTIgKzQ4
MDcsMjggQEAKIAkJCQkzMTVFQkRFODFGQ0U0NTJEMDBBQzdBODkgLyogTG9nZ2luZ0Fubm90YXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCODE2OTc0REVEMDA2RkFBNUEgLyogTWFj
cm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QkExNjk3NERFRDAwNkZBQTVBIC8qIE1h
Y3JvRXhwYW5kZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOTQyNTgxOTE5ODAwODk0
RTI0IC8qIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZGNjkyNTgxOTE5ODAwODk0RTI0IC8qIE1hcFN5bWJvbHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDNTVENzI1MjI4Mjc0NzcwMEI1QkEyQyAvKiBtYXRyaXhfdXRpbHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUMxREJCRjExQjA0MzZFQzAwMjM1NTUyIC8qIE1lbW9yeUJ1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk2NDIyODRGNzk2MDAxOEYyRDggLyogTWVt
b3J5T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNzhCMjMwNUY4RjAwMDJEQTk3
MiAvKiBNZW1vcnlPYmplY3RHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRGMzFGQ0U0
NTJEMDBBQzdBODkgLyogTWVtb3J5UHJvZ3JhbUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZGODFGRjYwMjU4MTkxOTcwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkY4MUZGMEIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9idWZmZXJfcG9vbC5tbSBp
biBTb3VyY2VzICovLAorCQkJCUZGODFGRUU1MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfY29tbWFu
ZF9idWZmZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYwQzI1ODE4RDZBMDA4OTRFMjQg
LyogbXRsX2NvbW1vbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUZDMjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyBpbiBTb3VyY2VzICov
LAorCQkJCUZGODFGRUUxMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfZm9ybWF0X3RhYmxlX2F1dG9n
ZW4ubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVENTI1ODE4RDY5MDA4OTRFMjQgLyogbXRs
X2Zvcm1hdF91dGlscy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjA1MjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkYwMjI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZFRjIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRp
bHMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFRTI1ODE4RDY5MDA4OTRFMjQgLyogbXRs
X3Jlc291cmNlcy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUYwMjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfc3RhdGVfY2FjaGUubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFQzI1ODE4
RDY5MDA4OTRFMjQgLyogbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNUIy
NTgxOTE5NzAwODk0RTI0IC8qIE5hbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QjYy
MjgyNkJDODAwQjVCQTJDIC8qIE5hbWVFbWJlZGRlZFVuaWZvcm1TdHJ1Y3RzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxNUVCREJGMUZDRTQ0QkYwMEFDN0E4OSAvKiBudWxsX2Z1bmN0aW9ucy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk2OTIyODRGNzk2MDAxOEYyRDggLyogT2JzZXJ2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MzA2LDYgKzQ4NDgsNyBAQAogCQkJCTMxMDEyRTU0
MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NUNDRDU5NkYyMjg0Rjk1NTAwMThGMkQ4IC8qIFBidWZmZXJTdXJmYWNlQ0dMLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxM0JDRTU2MjM2MTEzM0EwMEZDMzlFNSAvKiBQYnVmZmVyU3VyZmFjZUVB
R0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzEyNTgxOTE5ODAwODk0RTI0IC8qIFBp
cGVsaW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCREZFMUIwNDM4RDMwMDIzNTU1MiAv
KiBQbGF0Zm9ybS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkUyODFGQ0Y4MDhDMDBBQzdB
ODkgLyogUE11ckhhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTYxOEI5N0I5QjAw
MzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzMTgsOSArNDg2MSwx
MSBAQAogCQkJCTZFRDdCREY2MjQzMkNENjIwMEUwMTUwMyAvKiBQcm9ncmFtRXhlY3V0YWJsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEyRjFERTM5RjFBMDBEMkM0MDUgLyogUHJvZ3Jh
bUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCREVDMUZDRTQ1MkQwMEFDN0E4OSAvKiBQ
cm9ncmFtTGlua2VkUmVzb3VyY2VzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjEzMjU4
MThENkEwMDg5NEUyNCAvKiBQcm9ncmFtTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJE
RTUxRkNFNDUyRDAwQUM3QTg5IC8qIFByb2dyYW1QaXBlbGluZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkzMTVFQkRCQTFGQ0U0NEJGMDBBQzdBODkgLyogUHJvZ3JhbVBpcGVsaW5lR0wuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNkVCMDFDMjQyNDc3MjdDMjAwRTUwQjM1IC8qIFByb2dyYW1QaXBl
bGluZUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOEEyNTgxOTE5ODAwODk0RTI0
IC8qIFByb2dyYW1QcmVsdWRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkI3MjI4MjZC
QzgwMEI1QkEyQyAvKiBQcnVuZUVtcHR5Q2FzZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1
NUQ2QjgyMjgyNkJDODAwQjVCQTJDIC8qIFBydW5lTm9PcHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUNDRDgxQjUxREJGRUE1QzAwNjA2NkI4IC8qIFF1YWxpZmllclR5cGVzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNDMyOCw5ICs0ODczLDExIEBACiAJCQkJNUMxREJFMDMxQjA0MzhEMzAwMjM1
NTUyIC8qIHF1ZXJ5Y29udmVyc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMzEx
REUzOUYxQTAwRDJDNDA1IC8qIFF1ZXJ5R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5
ODAyMjg0RkI5MDAwMThGMkQ4IC8qIFF1ZXJ5SW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkVEQzI1ODE4RDY5MDA4OTRFMjQgLyogUXVlcnlNdGwubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk1Q0NEODE3QzFEQkZFOTk5MDA2MDY2QjggLyogcXVlcnl1dGlscy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1QzU1RDZCOTIyODI2QkM4MDBCNUJBMkMgLyogUmVjb3JkQ29uc3RhbnRQcmVjaXNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTNDNDlDMEMyNTVERjg1RjAwNUU4REY3IC8qIFJl
Y29yZFVuaWZvcm1CbG9ja3NUcmFuc2xhdGVkVG9TdHJ1Y3R1cmVkQnVmZmVycy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlGRjgxRkY3NzI1ODE5MTk4MDA4OTRFMjQgLyogUmVkdWNlSW50ZXJmYWNl
QmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkJBMjI4MjZCQzgwMEI1QkEyQyAv
KiBSZWdlbmVyYXRlU3RydWN0TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QkIy
MjgyNkJDODAwQjVCQTJDIC8qIFJlbW92ZUFycmF5TGVuZ3RoTWV0aG9kLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTZFRDdCREYwMjQzMkNDQzQwMEUwMTUwMyAvKiBSZW1vdmVBdG9taWNDb3VudGVy
QnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MzQyLDExICs0ODg5LDEzIEBACiAJCQkJ
NUM1NUQ2QzAyMjgyNkJDODAwQjVCQTJDIC8qIFJlbW92ZVVucmVmZXJlbmNlZFZhcmlhYmxlcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkUwNzFCMDQzOEQzMDAyMzU1NTIgLyogUmVuZGVy
YnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTMzMURFMzlGMUEwMEQyQzQwNSAv
KiBSZW5kZXJidWZmZXJHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVENjI1ODE4RDY5
MDA4OTRFMjQgLyogUmVuZGVyQnVmZmVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzA0
RjcxREU0MTY0ODAwRDJDNDA1IC8qIHJlbmRlcmVyX3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDQ0Q1OTdBMjI4NEZBODMwMDE4RjJEOCAvKiBSZW5kZXJlckNHTC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMTNCQ0U1OTIzNjExMzNBMDBGQzM5RTUgLyogUmVuZGVyZXJFQUdMLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDQjMwMTM3MURFMzlGMUEwMEQyQzQwNSAvKiBSZW5kZXJlckdM
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTM1MURFMzlGMUEwMEQyQzQwNSAvKiByZW5k
ZXJlcmdsX3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUU4MjU4MThENjkwMDg5
NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUMxOTI1
NURGODZDMDA1RThERjcgLyogUmVwbGFjZUFycmF5T2ZNYXRyaXhWYXJ5aW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTZFQjAxQzIxMjQ3NzI3QTkwMEU1MEIzNSAvKiBSZXBsYWNlQ2xpcERpc3Rh
bmNlVmFyaWFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA3MDUyMzA1RjYzNjAwMkRB
OTcyIC8qIFJlcGxhY2VTaGFkb3dpbmdWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
MzU0LDI3ICs0OTAzLDM2IEBACiAJCQkJNUMxREJGMjUxQjA0MzhEMzAwMjM1NTUyIC8qIFJlc291
cmNlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMzAzMDZGQjIzMDVGNUVFMDAyREE5
NzIgLyogUmV3cml0ZUF0b21pY0NvdW50ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVE
NkMxMjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlQXRvbWljRnVuY3Rpb25FeHByZXNzaW9ucy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY5MjI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0
ZUNhc2VEZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA2RkQyMzA1RjVF
RTAwMkRBOTcyIC8qIFJld3JpdGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTMwMzA2RkEyMzA1RjVFRTAwMkRBOTcyIC8qIFJld3JpdGVEZmR5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDNTVENkMyMjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlRG9X
aGlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDMzIyODI2QkM4MDBCNUJBMkMgLyog
UmV3cml0ZUVsc2VCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzQyMjgyNkJD
ODAwQjVCQTJDIC8qIFJld3JpdGVFeHByZXNzaW9uc1dpdGhTaGFkZXJTdG9yYWdlQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGN0YyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVH
bG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUMwRDI1NURG
ODVGMDA1RThERjcgLyogUmV3cml0ZUludGVycG9sYXRlQXRPZmZzZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkY4MUZGODkyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY3MDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZU91
dEFyZ3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzYyNTgxOTE5ODAwODk0RTI0IC8q
IFJld3JpdGVQaXBlbGluZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzUyMjgyNkJD
ODAwQjVCQTJDIC8qIFJld3JpdGVSZXBlYXRlZEFzc2lnblRvU3dpenpsZWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTNEMzI5MTQyM0NGQ0I3NzAwMzc1NjU3IC8qIFJld3JpdGVSb3dNYWpvck1h
dHJpY2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkM2MjI4MjZCQzgwMEI1QkEyQyAv
KiBSZXdyaXRlU3RydWN0U2FtcGxlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFDRDAwQ0My
NDkxOTZBNTAwNDg2RjI3IC8qIFJld3JpdGVTdHJ1Y3RTYW1wbGVyc09sZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1QzU1RDZDNzIyODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZVRleGVsRmV0Y2hP
ZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGODAyNTgxOTE5ODAwODk0RTI0IC8q
IFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzU1RDZDODIyODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZVVuYXJ5TWludXNPcGVyYXRvckZsb2F0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkM5MjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdy
aXRlVW5hcnlNaW51c09wZXJhdG9ySW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkZD
MjI4MjZDQjMwMEI1QkEyQyAvKiBSdW5BdFRoZUVuZE9mU2hhZGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDMURCRjI3MUIwNDM4RDMwMDIzNTU1MiAvKiBTYW1wbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQjMwMTM5MURFMzlGMUEwMEQyQzQwNSAvKiBTYW1wbGVyR0wuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZFRjcyNTgxOEQ2OTAwODk0RTI0IC8qIFNhbXBsZXJNdGwubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDQTIyODI2QkM4MDBCNUJBMkMgLyogU2NhbGFyaXpl
VmVjQW5kTWF0Q29uc3RydWN0b3JBcmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNzI4
MjMwNUY3QzQwMDJEQTk3MiAvKiBTZW1hcGhvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMw
MzA3OEEyMzA1RjhGMDAwMkRBOTcyIC8qIFNlbWFwaG9yZUdMLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDNTVENkNCMjI4MjZCQzgwMEI1QkEyQyAvKiBTZXBhcmF0ZUFycmF5Q29uc3RydWN0b3JT
dGF0ZW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkNDMjI4MjZCQzgwMEI1QkEy
QyAvKiBTZXBhcmF0ZUFycmF5SW5pdGlhbGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZGOEYyNTgxOTE5ODAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY1RjI1ODE5MTk3MDA4OTRFMjQgLyogU2VwYXJh
dGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1
RDZDRDIyODI2QkM4MDBCNUJBMkMgLyogU2VwYXJhdGVEZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUM1NUQ2Q0UyMjgyNkJDODAwQjVCQTJDIC8qIFNlcGFyYXRlRXhwcmVzc2lv
bnNSZXR1cm5pbmdBcnJheXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5ODQyMjg0RkJF
NzAwMThGMkQ4IC8qIHNoYTEuY2MgaW4gU291cmNlcyAqLywKQEAgLTQzODIsNiArNDk0MCw3IEBA
CiAJCQkJNUNCMzAxM0IxREUzOUYxQTAwRDJDNDA1IC8qIFNoYWRlckdMLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQ0Q1OTgxMjI4NEZCOTAwMDE4RjJEOCAvKiBTaGFkZXJJbXBsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMxMDEyRTYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjEyMjU4MThENkEwMDg5NEUyNCAvKiBTaGFkZXJN
dGwubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkM0MTFCMDQzNzVGMDAyMzU1NTIgLyogU2hh
ZGVyVmFycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDRjIyODI2QkM4MDBCNUJBMkMg
LyogU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZE
MDIyODI2QkM4MDBCNUJBMkMgLyogU3BsaXRTZXF1ZW5jZU9wZXJhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNDM5MywxMSArNDk1MiwxNCBAQAogCQkJCTVDMURCRjJFMUIwNDM4RDMwMDIzNTU1
MiAvKiBTdXJmYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTNGMURFMzlGMUEwMEQy
QzQwNSAvKiBTdXJmYWNlR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzA0RkMxREU0MTY0
ODAwRDJDNDA1IC8qIFN1cmZhY2VJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUUz
MjU4MThENjkwMDg5NEUyNCAvKiBTdXJmYWNlTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1
NUQ2RTMyMjgyNkM3OTAwQjVCQTJDIC8qIFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkY2QTI1ODE5MTk4MDA4OTRFMjQgLyogU3ltYm9sRW52LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTY0MThCOTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1QzU1RDcwRTIyODI3NDE0MDBCNUJBMkMgLyogU3ltYm9sVGFibGVfYXV0b2dl
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRBRTFGQ0U0NDM2MDBBQzdBODkgLyogU3lt
Ym9sVW5pcXVlSWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQzAxRkNFNDRCRjAwQUM3
QTg5IC8qIFN5bmNHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVEMzI1ODE4RDY4MDA4
OTRFMjQgLyogU3luY010bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QzIxMjU1REY5NzMw
MDVFOERGNyAvKiBzeXN0ZW1fdXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFBMzMxQzYx
RUE1RUQ1RjAwRkQyMjAzIC8qIHN5c3RlbV91dGlsc19tYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNUM1NUQ3MzAyMjgyNzQ3NzAwQjVCQTJDIC8qIHN5c3RlbV91dGlsc19wb3NpeC5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTQ0MDksMTMgKzQ5NzEsMTggQEAKIAkJCQkzMTVFQkQ5OTFGQ0U0NDM2
MDBBQzdBODkgLyogVGV4dHVyZUZ1bmN0aW9uSExTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
Q0IzMDE0MTFERTM5RjFBMDBEMkM0MDUgLyogVGV4dHVyZUdMLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDQjMwNEZGMURFNDE2NDgwMEQyQzQwNSAvKiBUZXh0dXJlSW1wbC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGRjgxRkVGNTI1ODE4RDY5MDA4OTRFMjQgLyogVGV4dHVyZU10bC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTMxNUVCREYyMUZDRTQ1MkQwMEFDN0E4OSAvKiBUaHJlYWQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUMxREJCRjYxQjA0MzZFQzAwMjM1NTUyIC8qIHRscy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMjY0RjhDMTE2OTc0REVEMDA2RkFBNUEgLyogVG9rZW4uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNkQyNTgxOTE5ODAwODk0RTI0IC8qIFRvcG9zb3J0U3Ry
dWN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkYzMzFCMDQzOEQzMDAyMzU1NTIgLyog
VHJhbnNmb3JtRmVlZGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxNDMxREUzOUYx
QTAwRDJDNDA1IC8qIFRyYW5zZm9ybUZlZWRiYWNrR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZFRjMyNTgxOEQ2OTAwODk0RTI0IC8qIFRyYW5zZm9ybUZlZWRiYWNrTXRsLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFNkExOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NM
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTZDMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFu
c2xhdG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYxQzI1ODE5MENBMDA4OTRF
MjQgLyogVHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFG
RjFFMjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMTVFQkQ3ODFGQ0U0NDM2MDBBQzdBODkgLyogVHJhbnNsYXRvclZ1bGthbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkM0NDFCMDQzNzVGMDAyMzU1NTIgLyogVHlwZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2RDEyMjgyNkJDODAwQjVCQTJDIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0NjYsMTAgKzUwMzMsMTMg
QEAKIAkJCQkzMTAxMkU3RjE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUMxREJGM0YxQjA0MzhEMzAwMjM1NTUyIC8qIFZlcnRleEFycmF5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMwMTQ1MURFMzlGMUEwMEQyQzQwNSAvKiBWZXJ0ZXhB
cnJheUdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUU5MjU4MThENjkwMDg5NEUyNCAv
KiBWZXJ0ZXhBcnJheU10bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCRjQxMUIwNDM4RDMw
MDIzNTU1MiAvKiBWZXJ0ZXhBdHRyaWJ1dGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZG
QTAyNTgxQUQwNDAwODk0RTI0IC8qIHZpc2liaWxpdHkubWV0YWwgaW4gU291cmNlcyAqLywKIAkJ
CQlBMzFCNjE4NDIzMEI3NDdGMDAxNjEwRDcgLyogV2luZG93U3VyZmFjZUNHTC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxQjE1NzIzMjM2QjgyQkIwMENBQTRGRCAvKiBXaW5kb3dTdXJmYWNlRUFH
TC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVCREU3MUZDRTQ1MkQwMEFDN0E4OSAvKiBXb3Jr
ZXJUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGODcyNTgxOTE5ODAwODk0RTI0
IC8qIFdyYXBNYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkQ1MjI4MjZCQzgwMEI1
QkEyQyAvKiBXcmFwU3dpdGNoU3RhdGVtZW50c0luQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDQ0Q1OTUwMjI4NEVDRDEwMDE4RjJEOCAvKiB4eGhhc2guYyBpbiBTb3VyY2VzICovLAog
CQkJKTsKQEAgLTQ1NTIsNiArNTEyMiwxNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRp
b247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDMxQ0RGREVGMjQ5MTdGODkwMDQ4
NkYyNyAvKiBBTkdMRS1zdGF0aWMueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0gewor
CQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSIkKERFQlVHX0RFRklO
RVMpIiwKKwkJCQkJTElCR0xFU1YyX0lNUExFTUVOVEFUSU9OLAorCQkJCQlMSUJBTkdMRV9JTVBM
RU1FTlRBVElPTiwKKwkJCQkJQU5HTEVfRU5BQkxFX09QRU5HTCwKKwkJCQkJQU5HTEVfRU5BQkxF
X0dMU0wsCisJCQkJCUFOR0xFX0VOQUJMRV9FU1NMLAorCQkJCQlHTF9TSUxFTkNFX0RFUFJFQ0FU
SU9OLAorCQkJCQlHTEVTX1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUFOR0xFX0VOQUJMRV9N
RVRBTCwKKwkJCQkpOwogCQkJfTsKIAkJCW5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OwpAQCAtNDU3
NCw2ICs1MTU1LDE3IEBACiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gMzFDREZERUYyNDkxN0Y4OTAwNDg2RjI3IC8qIEFOR0xF
LXN0YXRpYy54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJR0NDX1BSRVBS
T0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKKwkJCQkJIiQoREVCVUdfREVGSU5FUykiLAorCQkJCQlM
SUJHTEVTVjJfSU1QTEVNRU5UQVRJT04sCisJCQkJCUxJQkFOR0xFX0lNUExFTUVOVEFUSU9OLAor
CQkJCQlBTkdMRV9FTkFCTEVfT1BFTkdMLAorCQkJCQlBTkdMRV9FTkFCTEVfR0xTTCwKKwkJCQkJ
QU5HTEVfRU5BQkxFX0VTU0wsCisJCQkJCUdMX1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUdM
RVNfU0lMRU5DRV9ERVBSRUNBVElPTiwKKwkJCQkJQU5HTEVfRU5BQkxFX01FVEFMLAorCQkJCSk7
CiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwogCQl9OwpAQCAtNDU4MSw2ICs1MTczLDE3IEBACiAJ
CQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJl
bmNlID0gMzFDREZERUYyNDkxN0Y4OTAwNDg2RjI3IC8qIEFOR0xFLXN0YXRpYy54Y2NvbmZpZyAq
LzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9O
UyA9ICgKKwkJCQkJIiQoREVCVUdfREVGSU5FUykiLAorCQkJCQlMSUJHTEVTVjJfSU1QTEVNRU5U
QVRJT04sCisJCQkJCUxJQkFOR0xFX0lNUExFTUVOVEFUSU9OLAorCQkJCQlBTkdMRV9FTkFCTEVf
T1BFTkdMLAorCQkJCQlBTkdMRV9FTkFCTEVfR0xTTCwKKwkJCQkJQU5HTEVfRU5BQkxFX0VTU0ws
CisJCQkJCUdMX1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUdMRVNfU0lMRU5DRV9ERVBSRUNB
VElPTiwKKwkJCQkJQU5HTEVfRU5BQkxFX01FVEFMLAorCQkJCSk7CiAJCQl9OwogCQkJbmFtZSA9
IFJlbGVhc2U7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9Db25m
aWd1cmF0aW9ucy9BTkdMRS1keW5hbWljLnhjY29uZmlnIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQ29uZmlndXJhdGlvbnMvQU5HTEUtZHluYW1pYy54Y2NvbmZpZwppbmRleCA2Y2JiZTE3YmVm
MTlhODU4NWNkZTFiOWM0ZWNiYjA2OTg2NGU1MWQ0Li5jNTRkMjczYTAyODI4YTFiNmM1ZDc5ODc5
NjMyMjEzZTIwZWZlOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9Db25m
aWd1cmF0aW9ucy9BTkdMRS1keW5hbWljLnhjY29uZmlnCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL0NvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWcKQEAgLTQsNyArNCw3
IEBACiBQUk9EVUNUX05BTUUgPSBBTkdMRS1zaGFyZWQ7CiBFWEVDVVRBQkxFX1BSRUZJWCA9IGxp
YjsKIAotQU5HTEVfT1RIRVJfTERGTEFHUyA9IC1hbGxvd2FibGVfY2xpZW50IFdlYkNvcmUgLWFs
bG93YWJsZV9jbGllbnQgV2ViQ29yZVRlc3RTdXBwb3J0IC1mcmFtZXdvcmsgUXVhcnR6Q29yZSAt
ZnJhbWV3b3JrIENvcmVHcmFwaGljcyAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBJ
T1N1cmZhY2UgJChBTkdMRV9PVEhFUl9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpICQoQU5H
TEVfU1RBVElDX0xJQl9PVEhFUl9MREZMQUdTKTsKK0FOR0xFX09USEVSX0xERkxBR1MgPSAtYWxs
b3dhYmxlX2NsaWVudCBXZWJDb3JlIC1hbGxvd2FibGVfY2xpZW50IFdlYkNvcmVUZXN0U3VwcG9y
dCAtZnJhbWV3b3JrIFF1YXJ0ekNvcmUgLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29y
ayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgSU9TdXJmYWNlIC1mcmFtZXdvcmsgTWV0YWwgJChBTkdM
RV9PVEhFUl9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpICQoQU5HTEVfU1RBVElDX0xJQl9P
VEhFUl9MREZMQUdTKTsKIEFOR0xFX09USEVSX0xERkxBR1NfaXBob25lb3MgPSAtbHo7CiBBTkdM
RV9PVEhFUl9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoQU5HTEVfT1RIRVJfTERGTEFHU19p
cGhvbmVvcyk7CiBBTkdMRV9PVEhFUl9MREZMQUdTX3dhdGNob3MgPSAkKEFOR0xFX09USEVSX0xE
RkxBR1NfaXBob25lb3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKaW5kZXggZTEwZDExMmM4NTVlMDNmNjVjYjI0M2ZmMTZj
M2Q5YjJlYzA5ZjY4MS4uNmY2YTcyYjlhYjZkZDcyMjg3ZDgyZDZjZmIyMDgxMTIyN2Y2YTc0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hh
ZGVyTGFuZy5oCkBAIC03Myw2ICs3Myw5IEBAIGVudW0gU2hTaGFkZXJPdXRwdXQKICAgICAvLyBP
dXRwdXQgc3BlY2lhbGl6ZWQgR0xTTCB0byBiZSBmZWQgdG8gZ2xzbGFuZyBmb3IgVnVsa2FuIFNQ
SVIgdG8gYmUgY3Jvc3MgY29tcGlsZWQgdG8gTWV0YWwKICAgICAvLyBsYXRlci4KICAgICBTSF9H
TFNMX01FVEFMX09VVFBVVCA9IDB4OEI0QywKKworICAgIC8vIE91dHB1dCBmb3IgTVNMCisgICAg
U0hfTVNMX01FVEFMX09VVFBVVCA9IDB4OEI0RCwKIH07CiAKIC8vIENvbXBpbGUgb3B0aW9ucy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvcGxhdGZvcm0vRmVh
dHVyZXNNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvcGxhdGZvcm0vRmVh
dHVyZXNNdGwuaAppbmRleCBmZTVlOGFiZGYwNjA0MWQ2YzEzYjgwM2ZiYmZhMzg4ZDI4Y2NmNWEz
Li45YTBiZWUwMzdhODlmMzFjOGQ4NTcxYTVjMDEzMmNmN2YwOWZiMWE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9wbGF0Zm9ybS9GZWF0dXJlc010bC5o
CkBAIC0yNyw3ICsyNyw3IEBAIHN0cnVjdCBGZWF0dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAg
ICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZGVwdGggdGV4dHVyZSdzIGZpbHRlcmluZyBv
dGhlciB0aGFuIG5lYXJlc3QiLCAmbWVtYmVyc307CiAKICAgICAvLyBTdXBwb3J0IGV4cGxpY2l0
IG1lbW9yeSBiYXJyaWVyCi0gICAgRmVhdHVyZSBoYXNFeHBsaWNpdE1lbUJhcnJpZXIgPSB7Imhh
c19leHBsaWNpdF9tZW1fYmFycmllcl9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVy
ZXMsCisgICAgRmVhdHVyZSBoYXNFeHBsaWNpdE1lbUJhcnJpZXIgPSB7Imhhc19leHBsaWNpdF9t
ZW1fYmFycmllciIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIGV4cGxpY2l0
IG1lbW9yeSBiYXJyaWVyIiwgJm1lbWJlcnN9OwogCiAgICAgLy8gU29tZSByZW5kZXJlciBjYW4g
YnJlYWsgcmVuZGVyIHBhc3MgY2hlYXBseSwgaS5lLiBkZXNrdG9wIGNsYXNzIEdQVXMuCkBAIC00
MCw3ICs0MCw3IEBAIHN0cnVjdCBGZWF0dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAgICAgICAg
ICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgbm9uIHVuaWZvcm0gY29tcHV0ZSBzaGFkZXIgZGlzcGF0
Y2gncyBncm91cCBzaXplIiwgJm1lbWJlcnN9OwogCiAgICAgLy8gZnJhZ21lbnQgc3RlbmNpbCBv
dXRwdXQgc3VwcG9ydAotICAgIEZlYXR1cmUgaGFzU3RlbmNpbE91dHB1dCA9IHsiaGFzX3NoYWRl
cl9zdGVuY2lsX291dHB1dCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICBG
ZWF0dXJlIGhhc1N0ZW5jaWxPdXRwdXQgPSB7Imhhc19zdGVuY2lsX291dHB1dCIsIEZlYXR1cmVD
YXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlRoZSByZW5kZXJlciBzdXBwb3J0cyBzdGVuY2lsIG91dHB1dCBmcm9tIGZyYWdtZW50IHNoYWRl
ciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJzfTsKIApAQCAtNTks
NiArNTksMTAgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKICAgICBGZWF0
dXJlIGhhc0V2ZW50cyA9IHsiaGFzX210bF9ldmVudHMiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFs
RmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0
cyBNVEwoU2hhcmVkKUV2ZW50IiwgJm1lbWJlcnN9OwogCisgICAgRmVhdHVyZSBhbGxvd0lubGlu
ZUNvbnN0VmVydGV4RGF0YSA9IHsKKyAgICAgICAgImFsbG93X2lubGluZV9jb25zdF92ZXJ0ZXhf
ZGF0YSIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgIlRoZSByZW5k
ZXJlciBzdXBwb3J0cyB1c2luZyBpbmxpbmUgY29uc3RhbnQgZGF0YSBmb3Igc21hbGwgY2xpZW50
IHZlcnRleCBkYXRhIiwgJm1lbWJlcnN9OworCiAgICAgLy8gT24gbWFjb3MsIHNlcGFyYXRlIGRl
cHRoICYgc3RlbmNpbCBidWZmZXJzIGFyZSBub3Qgc3VwcHJvdGVkLiBIb3dldmVyLCBvbiBpT1Mg
ZGV2aWNlcywKICAgICAvLyB0aGV5IGFyZSBzdXBwcm90ZWQ6CiAgICAgRmVhdHVyZSBhbGxvd1Nl
cGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMgPSB7CkBAIC02Nyw2ICs3MSwyMSBAQCBzdHJ1Y3Qg
RmVhdHVyZXNNdGwgOiBGZWF0dXJlU2V0QmFzZQogICAgICAgICAid2hlcmVhcyBvdGhlcnMgc3Vj
aCBhcyBtYWNPUyBkb24ndCIsCiAgICAgICAgICZtZW1iZXJzfTsKIAorICAgIEZlYXR1cmUgYWxs
b3dSdW50aW1lU2FtcGxlckNvbXBhcmVNb2RlID0geworICAgICAgICAiYWxsb3dfcnVudGltZV9z
YW1wbGVyX2NvbXBhcmVfbW9kZSIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAg
ICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBjaGFuZ2luZyBzYW1wbGVyJ3MgY29tcGFyZSBt
b2RlIG91dHNpZGUgc2hhZGVycyIsICZtZW1iZXJzfTsKKworICAgIEZlYXR1cmUgYWxsb3dTYW1w
bGVyQ29tcGFyZUdyYWRpZW50ID0geworICAgICAgICAiYWxsb3dfc2FtcGxlcl9jb21wYXJlX2dy
YWRpZW50IiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAgICAiVGhlIHJl
bmRlcmVyIHN1cHBvcnRzIHNhbXBsZV9jb21wYXJlIHdpdGggZ3JhZGllbnRzIiwgJm1lbWJlcnN9
OworCisgICAgRmVhdHVyZSBhbGxvd1NhbXBsZXJDb21wYXJlTG9kID0geyJhbGxvd19zYW1wbGVy
X2NvbXBhcmVfbG9kIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHNhbXBs
ZV9jb21wYXJlIHdpdGggbG9kIiwgJm1lbWJlcnN9OworCisgICAgRmVhdHVyZSBhbGxvd0J1ZmZl
clJlYWRXcml0ZSA9IHsiYWxsb3dfYnVmZmVyX3JlYWRfd3JpdGUiLCBGZWF0dXJlQ2F0ZWdvcnk6
Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhl
IHJlbmRlcmVyIHN1cHBvcnRzIGJ1ZmZlciByZWFkICYgd3JpdGUgaW4gdGhlIHNhbWUgc2hhZGVy
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJzfTsKKwogICAg
IEZlYXR1cmUgYWxsb3dNdWx0aXNhbXBsZVN0b3JlQW5kUmVzb2x2ZSA9IHsKICAgICAgICAgImFs
bG93X21zYWFfc3RvcmVfYW5kX3Jlc29sdmUiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVy
ZXMsCiAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgTVNBQSBzdG9yZSBhbmQgcmVzb2x2
ZSBpbiB0aGUgc2FtZSBwYXNzIiwgJm1lbWJlcnN9OwpAQCAtNzUsMTQgKzk0LDI3IEBAIHN0cnVj
dCBGZWF0dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAgICAgICAgICJnZW5fbXVsdGlwbGVfbWlw
c19wZXJfcGFzcyIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKICAgICAgICAgIlRo
ZSByZW5kZXJlciBzdXBwb3J0cyBnZW5lcmF0aW5nIG11bHRpcGxlIG1pcG1hcHMgcGVyIHBhc3Mi
LCAmbWVtYmVyc307CiAKKyAgICBGZWF0dXJlIGZvcmNlRDI0UzhBc1Vuc3VwcG9ydGVkID0geyJm
b3JjZV9kMjRzOF9hc191bnN1cHBvcnRlZCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGb3JjZSBEZXB0aDI0
U3RlbmNpbDggZm9ybWF0IGFzIHVuc3VwcG9ydGVkLiIsICZtZW1iZXJzfTsKKworICAgIEZlYXR1
cmUgYnJlYWtSZW5kZXJQYXNzSXNDaGVhcCA9IHsiYnJlYWtfcmVuZGVyX3Bhc3NfaXNfY2hlYXAi
LCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJCcmVha2luZyByZW5kZXIgcGFzcyBpcyBhIGNoZWFwIG9wZXJhdGlv
biIsICZtZW1iZXJzfTsKKwogICAgIEZlYXR1cmUgZm9yY2VCdWZmZXJHUFVTdG9yYWdlID0gewot
ICAgICAgICAiZm9yY2VfYnVmZmVyX2dwdV9zdG9yYWdlX210bCIsIEZlYXR1cmVDYXRlZ29yeTo6
TWV0YWxGZWF0dXJlcywKLSAgICAgICAgIk9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGJvdGggYnVm
ZmVyJ3MgbWVtb3J5IGFsbG9jYXRpb24gb24gR1BVIGFuZCBzaGFyZWQgbWVtb3J5IChzdWNoIGFz
ICIKLSAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9yeSBhbGxvY2F0aW9uIGZv
ciBidWZmZXJzLiIsCisgICAgICAgICJmb3JjZV9idWZmZXJfZ3B1X3N0b3JhZ2UiLCBGZWF0dXJl
Q2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICJPbiBzeXN0ZW1zIHRoYXQgc3VwcG9y
dCBib3RoIGJ1ZmZlcicgbWVtb3J5IGFsbG9jYXRpb24gb24gR1BVIGFuZCBzaGFyZWQgbWVtb3J5
IChzdWNoIGFzICIKKyAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9yeSBhbGxv
Y2F0aW9uIGZvciBidWZmZXJzIGV2ZXJ5dGltZSBvciBub3QuIiwKICAgICAgICAgJm1lbWJlcnN9
OwogCi0gICAgRmVhdHVyZSBmb3JjZUQyNFM4QXNVbnN1cHBvcnRlZCA9IHsiZm9yY2VfZDI0czhf
YXNfdW5zdXBwb3J0ZWQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm9yY2UgRGVwdGgyNFN0ZW5jaWw4IGZv
cm1hdCBhcyB1bnN1cHBvcnRlZC4iLCAmbWVtYmVyc307CisgICAgRmVhdHVyZSBmb3JjZU5vbkNT
QmFzZU1pcG1hcEdlbmVyYXRpb24gPSB7CisgICAgICAgICJmb3JjZV9ub25fY3NfbWlwbWFwX2dl
biIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgIlR1cm4gdGhpcyBm
ZWF0dXJlIG9uIHRvIGRpc2FsbG93IENvbXB1dGUgU2hhZGVyIGJhc2VkIG1pcG1hcCBnZW5lcmF0
aW9uLiBDb21wdXRlIFNoYWRlciAiCisgICAgICAgICJiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbiBt
aWdodCBjYXVzZSBHUFUgaGFuZyBvbiBzb21lIG9sZGVyIGlPUyBkZXZpY2VzLiIsCisgICAgICAg
ICZtZW1iZXJzfTsKKworICAgIEZlYXR1cmUgZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrID0gewor
ICAgICAgICAiZW11bGF0ZV90cmFuc2Zvcm1fZmVlZGJhY2siLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1l
dGFsRmVhdHVyZXMsCisgICAgICAgICJUdXJuIHRoaXMgb24gdG8gYWxsb3cgdHJhbnNmb3JtIGZl
ZWRiYWNrIGluIE1ldGFsIHVzaW5nIGEgMi1wYXNzIFZTIGZvciBHTEVTMy4iLCAmbWVtYmVyc307
CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgYW5nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmNwcAppbmRleCAyN2RkOTMwNWE4YjYzNGUzMzk5Mzc4
MzA3OTM1ZjhhMmI5ZDc2MmJmLi4zYmRjYzMwMGExZDZlNjc3NWMxZDI4YzIxODcyOTcwZmFlZjY5
NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xB
bGxvYy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29sQWxs
b2MuY3BwCkBAIC0zMzUsNyArMzM1LDcgQEAgdm9pZCBQb29sQWxsb2NhdG9yOjp1bmxvY2soKQog
dm9pZCBBbGxvY2F0aW9uOjpjaGVja0FsbG9jTGlzdCgpIGNvbnN0CiB7CiAgICAgZm9yIChjb25z
dCBBbGxvY2F0aW9uICphbGxvYyA9IHRoaXM7IGFsbG9jICE9IDA7IGFsbG9jID0gYWxsb2MtPm1Q
cmV2QWxsb2MpCi0gICAgICAgIGFsbG9jLT5jaGVjaygpOworICAgICAgICBhbGxvYy0+Y2hlY2tB
bGxvYygpOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgYW5nbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xBbGxvYy5oCmluZGV4IDY5Mjk5MmM0MzQzZDhjYTAyM2Ji
MGU3NDNlNWI0ODlmNjNiYzFjNzguLmNkMjY2YTAzYmM1NjIxYjg3MjI5YzVhZTdkN2RhMGI2Mjlm
OWI2NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9v
bEFsbG9jLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29sQWxs
b2MuaApAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBBbGxvY2F0aW9uCiAjZW5kaWYKICAgICB9CiAK
LSAgICB2b2lkIGNoZWNrKCkgY29uc3QKKyAgICB2b2lkIGNoZWNrQWxsb2MoKSBjb25zdAogICAg
IHsKICAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHByZUd1YXJkKCksIGtHdWFyZEJsb2NrQmVnaW5W
YWwsICJiZWZvcmUiKTsKICAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHBvc3RHdWFyZCgpLCBrR3Vh
cmRCbG9ja0VuZFZhbCwgImFmdGVyIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2FwcGxlX3BsYXRmb3JtX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2FwcGxlX3BsYXRmb3JtX3V0aWxzLmgKaW5kZXggNTVlYmI3YThh
ZTU3OWIyY2ZhOGQzYzVjZjFiZTc5OGRlNWI4MjAyZS4uODNhYjUzMjZjNTUwZGZkNmRkZGEzYmQy
Yjg5NGE1M2U2YmMzMzJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9hcHBsZV9wbGF0Zm9ybV91dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vYXBwbGVfcGxhdGZvcm1fdXRpbHMuaApAQCAtMTUsMjQgKzE1LDMyIEBA
CiAKIC8vIFRBUkdFVF9PU19NQUNDQVRBTFlTVCBvbmx5IGF2YWlsYWJsZSBpbiBNYWNTREsgMTAu
MTUKIAorI2lmIFRBUkdFVF9PU19NQUNDQVRBTFlTVAogLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxF
X1hDSTogY2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAzIHBsYXRmb3JtcyAoT1NYL0NhdGFseXN0L2lP
UykgbWluIHZlcmlvbnMgaXMKIC8vIGF2YWlsYWJsZToKLSNpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZ
U1QKICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0kobWFjVmVyLCBtYWNDYXRh
bHlzdFZlciwgaU9TVmVyKSBcCiAgICAgICAgIEBhdmFpbGFibGUobWFjT1MgbWFjVmVyLCBtYWND
YXRhbHlzdCBtYWNDYXRhbHlzdFZlciwgaU9TIGlPU1ZlciwgKikKIC8vIEFOR0xFX0FQUExFX0FW
QUlMQUJMRV9YQzogY2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoT1NYL0NhdGFs
eXN0KSBtaW4gdmVyaW9ucyBpcwogLy8gYXZhaWxhYmxlOgogIyAgICBkZWZpbmUgQU5HTEVfQVBQ
TEVfQVZBSUxBQkxFX1hDKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIpIFwKICAgICAgICAgQGF2YWls
YWJsZShtYWNPUyBtYWNWZXIsIG1hY0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCAqKQorLy8gQU5H
TEVfQVBQTEVfQVZBSUxBQkxFX0NJOiBjaGVjayBpZiBlaXRoZXIgb2YgdGhlIDIgcGxhdGZvcm1z
IChDYXRhbHlzdC9pT1MpIG1pbiB2ZXJpb25zIGlzCisvLyBhdmFpbGFibGU6CisjICAgIGRlZmlu
ZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorICAg
ICAgICBAYXZhaWxhYmxlKG1hY0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCBpT1MgaU9TVmVyLCAq
KQogI2Vsc2UKICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0kobWFjVmVyLCBt
YWNDYXRhbHlzdFZlciwgaU9TVmVyKSBcCiAgICAgICAgIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9Y
SShtYWNWZXIsIGlPU1ZlcikKLS8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQzogY2hlY2sgaWYg
ZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoT1NYL0NhdGFseXN0KSBtaW4gdmVyaW9ucyBpcwot
Ly8gYXZhaWxhYmxlOgorCiAjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEMobWFj
VmVyLCBtYWNDYXRhbHlzdFZlcikgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsICopCisjICAgIGRl
ZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgQGF2
YWlsYWJsZShpT1MgaU9TVmVyLCB0dk9TIGlPU1ZlciwgKikKICNlbmRpZgogCiAvLyBBTkdMRV9B
UFBMRV9BVkFJTEFCTEVfWEk6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUgMiBwbGF0Zm9ybXMgKE9T
WC9pT1MpIG1pbiB2ZXJpb25zIGlzIGF2YWlsYWJsZToKLSNkZWZpbmUgQU5HTEVfQVBQTEVfQVZB
SUxBQkxFX1hJKG1hY1ZlciwgaU9TVmVyKSBAYXZhaWxhYmxlKG1hY09TIG1hY1ZlciwgaU9TIGlP
U1ZlciwgKikKKyNkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hJKG1hY1ZlciwgaU9TVmVy
KSBcCisgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIsIHR2T1MgaU9TVmVy
LCAqKQorCisvLyBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfSTogY2hlY2sgaWYgYSBwYXJ0aWN1bGFy
IGlPUyB2ZXJzaW9uIGlzIGF2YWlsYWJsZQorI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVf
SShpT1NWZXIpIEBhdmFpbGFibGUoaU9TIGlPU1ZlciwgdHZPUyBpT1NWZXIsICopCiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5o
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCmluZGV4IGUwMDM3
YTRlMmNiODZiODU3MzM3Yjc1YWYzZWRmN2U3ZTQ3M2U2MzIuLjI4MTcwYTVkNzdlNjY2NWI5NmVi
ODNmZjZkYmNjMmJiZTM0YjA3YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZGVidWcuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2RlYnVnLmgKQEAgLTMxMywxMCArMzEzLDE2IEBAIHN0ZDo6b3N0cmVhbSAmRm10SGV4KHN0
ZDo6b3N0cmVhbSAmb3MsIFQgdmFsdWUpCiAKIC8vIEEgbWFjcm8gYXNzZXJ0aW5nIGEgY29uZGl0
aW9uIGFuZCBvdXRwdXR0aW5nIGZhaWx1cmVzIHRvIHRoZSBkZWJ1ZyBsb2cKICNpZiBkZWZpbmVk
KEFOR0xFX0VOQUJMRV9BU1NFUlRTKQotIyAgICBkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24pICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgKGV4cHJlc3Npb24gPyBzdGF0aWNfY2FzdDx2b2lkPigwKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg
ICAgICAgICAgIDogKEZBVEFMKCkgPDwgIlx0ISBBc3NlcnQgZmFpbGVkIGluICIgPDwgX19GVU5D
VElPTl9fIDw8ICIgKCIgPDwgX19GSUxFX18gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8ICI6IiA8PCBfX0xJTkVfXyA8PCAiKTogIiA8PCAjZXhwcmVzc2lvbikpCisjICAgIGRl
ZmluZSBBU1NFUlQoZXhwcmVzc2lvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIShleHByZXNzaW9uKSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgIF9fYnVpbHRpbl9kZWJ1Z3RyYXAoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGludCB4ID0gMDsgLyogVGhpcyBmb3JjZXMgc2FuZSBicmVha3BvaW50
IGxvY2F0aW9uIGF0IGNhbGwgc2l0ZS4gKi8gXAorICAgICAgICAgICAgKHZvaWQpeDsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIH0gd2hpbGUgKGZhbHNlKQogI2Vsc2UKICMgICAgZGVmaW5lIEFTU0VSVChjb25kaXRp
b24pIEFOR0xFX0VBVF9TVFJFQU1fUEFSQU1FVEVSUyA8PCAhKGNvbmRpdGlvbikKICNlbmRpZiAg
Ly8gZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbSBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
MzZiZWE0MjUxM2MyZGQyODVjZDg4MmFkYjhjMGViNjE0NDI0M2VmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfaW9zLm1t
CkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAxNSBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHN5c3RlbV91dGlsc19pb3MubW06IElt
cGxlbWVudGF0aW9uIG9mIGlPUy1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIE9TWAorCisjaW5jbHVk
ZSAic3lzdGVtX3V0aWxzLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPENv
cmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyNpbmNsdWRlIDxtYWNoLW8vZHlsZC5oPgorI2lu
Y2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CisjaW5jbHVk
ZSA8YXJyYXk+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKKyNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1lc3BhY2UgYW5nbGUKK3sKK3N0ZDo6
c3RyaW5nIEdldEV4ZWN1dGFibGVQYXRoKCkKK3sKKworICAgIE5TU3RyaW5nICpleGVjdXRhYmxl
U3RyaW5nID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBleGVjdXRhYmxlUGF0aF07CisgICAgc3Rk
OjpzdHJpbmcgcmVzdWx0KFtleGVjdXRhYmxlU3RyaW5nIFVURjhTdHJpbmddKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGQ6OnN0cmluZyBHZXRFeGVjdXRhYmxlRGlyZWN0b3J5KCkKK3sK
KyAgICBzdGQ6OnN0cmluZyBleGVjdXRhYmxlUGF0aCA9IEdldEV4ZWN1dGFibGVQYXRoKCk7Cisg
ICAgc2l6ZV90IGxhc3RQYXRoU2VwTG9jICAgICAgPSBleGVjdXRhYmxlUGF0aC5maW5kX2xhc3Rf
b2YoIi8iKTsKKyAgICByZXR1cm4gKGxhc3RQYXRoU2VwTG9jICE9IHN0ZDo6c3RyaW5nOjpucG9z
KSA/IGV4ZWN1dGFibGVQYXRoLnN1YnN0cigwLCBsYXN0UGF0aFNlcExvYykgOiAiIjsKK30KKwor
Y29uc3QgY2hhciAqR2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbigpCit7CisgICAgcmV0dXJuICJk
eWxpYiI7Cit9CisKK2RvdWJsZSBHZXRDdXJyZW50VGltZSgpCit7CisgICAgbWFjaF90aW1lYmFz
ZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUluZm87CisgICAgbWFjaF90aW1lYmFzZV9pbmZvKCZ0aW1l
YmFzZUluZm8pOworCisgICAgZG91YmxlIHNlY29uZENvZWZmID0gdGltZWJhc2VJbmZvLm51bWVy
ICogMWUtOSAvIHRpbWViYXNlSW5mby5kZW5vbTsKKyAgICByZXR1cm4gc2Vjb25kQ29lZmYgKiBt
YWNoX2Fic29sdXRlX3RpbWUoKTsKK30KK30gIC8vIG5hbWVzcGFjZSBhbmdsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCmluZGV4IDYzYjNh
NTljZGY5MWI5MGEwZDA4MjNlN2RjMmRhZTI3YjY4ODRjYjMuLmQwOWUyNzAwODI5ODk3ZmZkYjI0
YWQ1Y2E1YjhiOWQzODU5ZTVlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL3V0aWxpdGllcy5jcHAKQEAgLTYsMTEgKzYsNiBAQAogCiAvLyB1dGlsaXRpZXMu
Y3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcy4KIAot
Ly8gT2xkZXIgY2xhbmcgdmVyc2lvbnMgaGF2ZSBhIGZhbHNlIHBvc2l0aXZlIG9uIHRoaXMgd2Fy
bmluZyBoZXJlLgotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZ2xvYmFsLWNvbnN0cnVjdG9ycyIKLSNlbmRpZgotCiAjaW5jbHVkZSAi
Y29tbW9uL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdMRVMzL2dsMy5oIgogI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgpAQCAtNDc2LDYgKzQ3MSw1MCBAQCBpbnQgVmFyaWFibGVDb2x1bW5D
b3VudChHTGVudW0gdHlwZSkKIAogICAgIHJldHVybiAwOwogfQorLyoqCitEZXRlcm1pbmUgdGhl
IG51bWJlciBvZiBhdHRyaWJ1dGUgc2xvdHMgdXNlZCBieSBhIHZhcmlhYmxlIHR5cGUKKyovCitp
bnQgVmFyaWFibGVBdHRyaWJ1dGVDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpCisgICAgeworICAgICAgICBjYXNlIEdMX05PTkU6CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICBj
YXNlIEdMX0lOVDoKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMyOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICAgIGNhc2Ug
R0xfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICAg
IGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6Cisg
ICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Cisg
ICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZF
QzQ6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgor
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
eDQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgor
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
eDQ6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0Ogor
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0
eDM6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CiAKIGJvb2wgSXNTYW1w
bGVyVHlwZShHTGVudW0gdHlwZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL3V0aWxpdGllcy5oCmluZGV4IDBjN2Q4MTFhNDZlZGU4YzY2NzA1NzBkMzJjMjczNDZi
Y2IxMThjMWEuLmJhNjkzYTI3YWExM2U1YTJmYzM2NDZmMzU0YTkyNTNlMjk0YjYzOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaApAQCAtMzcs
NiArMzcsNyBAQCBzaXplX3QgVmFyaWFibGVJbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwogc2l6
ZV90IFZhcmlhYmxlRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKIGludCBWYXJpYWJsZVJvd0Nv
dW50KEdMZW51bSB0eXBlKTsKIGludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0eXBlKTsK
K2ludCBWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KEdMZW51bSB0eXBlKTsKIGJvb2wgSXNTYW1wbGVy
VHlwZShHTGVudW0gdHlwZSk7CiBib29sIElzU2FtcGxlckN1YmVUeXBlKEdMZW51bSB0eXBlKTsK
IGJvb2wgSXNJbWFnZVR5cGUoR0xlbnVtIHR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAppbmRl
eCBhNDQ0NDk5NjVjMDVhZWQ5YzI1NDJhNDA4MWNiMDU3MWYwYWJmNTBhLi5jYWM5ZjQ5OTRiNzE5
ZjgyMWY5MDA1ZDdmZTFkOTYyODAyYzZlZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcApAQCAt
MjEsOCArMjEsMTEgQEAKICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX1ZVTEtBTgogCiAjaWZkZWYg
QU5HTEVfRU5BQkxFX01FVEFMCi0jICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsLmgiCisjICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0LmgiCiAjZW5kaWYgIC8vIEFOR0xFX0VOQUJMRV9NRVRBTAorI2lmZGVm
IEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorIyAgICBpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJ
UlYKIAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgogCkBAIC02NCwxMSAr
NjcsMTcgQEAgVENvbXBpbGVyICpDb25zdHJ1Y3RDb21waWxlcihzaDo6R0xlbnVtIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dAogICAgIH0KICNlbmRpZiAgLy8gQU5HTEVf
RU5BQkxFX1ZVTEtBTgogCi0jaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisjaWZkZWYgQU5HTEVf
RU5BQkxFX01FVEFMX1NQSVJWCiAgICAgaWYgKElzT3V0cHV0TWV0YWwob3V0cHV0KSkKICAgICB7
CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvck1ldGFsKHR5cGUsIHNwZWMpOwogICAgIH0K
KyNlbmRpZgorI2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTAorICAgIGlmIChJc091dHB1dE1ldGFs
RGlyZWN0KG91dHB1dCkpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JNZXRh
bERpcmVjdCh0eXBlLCBzcGVjLCBvdXRwdXQpOworICAgIH0KICNlbmRpZiAgLy8gQU5HTEVfRU5B
QkxFX01FVEFMCiAKICAgICAvLyBVbnN1cHBvcnRlZCBjb21waWxlciBvciB1bmtub3duIGZvcm1h
dC4gUmV0dXJuIG51bGxwdHIgcGVyIHRoZSBzaDo6Q29uc3RydWN0Q29tcGlsZXIgQVBJLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Db21tb24uaAppbmRleCA4MzVjOTBhMzU3MmMxMzU4MmFmNTI0YWY5NjlkYWFlMTBjOWUxODBm
Li4xYzA5Y2RhYTgyMTJjM2UxNzc4MDM5MDhmNDdmYTQwMmZjNjkzNzAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21t
b24uaApAQCAtMzEsNiArMzEsOCBAQCBzdHJ1Y3QgVFNvdXJjZUxvYwogICAgIGludCBsYXN0X2xp
bmU7CiB9OwogCitjb25zdGV4cHIgVFNvdXJjZUxvYyBrTm9Tb3VyY2VMb2N7LTEsIC0xLCAtMSwg
LTF9OworCiAvLwogLy8gUHV0IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUgaW4gYmFzZSBjbGFz
c2VzIHRvIG1ha2UgdGhlbSB1c2UgdGhpcyBzY2hlbWUuCiAvLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIu
Y3BwCmluZGV4IDM0ZDhlMTIxYjZiN2M0YTlmMDEwNGJiYzdkZGVlNDgwNmU0NGYyODIuLjkzMTZl
MmU1MWE3ZTY3MjA4MmQ1MDMxMDgzMjhmMGM1MWJmNGE2MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxl
ci5jcHAKQEAgLTcyMiw5ICs3MjIsOSBAQCBib29sIFRDb21waWxlcjo6Y2hlY2tBbmRTaW1wbGlm
eUFTVChUSW50ZXJtQmxvY2sgKnJvb3QsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQgc2lt
cGxpZnlTY2FsYXJpemVkID0gKGNvbXBpbGVPcHRpb25zICYgU0hfU0NBTEFSSVpFX1ZFQ19BTkRf
TUFUX0NPTlNUUlVDVE9SX0FSR1MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/
IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6a1NjYWxhcml6ZWRWZWNPck1hdENvbnN0cnVjdG9y
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgICAgdW5zaWduZWQgaW50
IHNpbXBsaWZ5U2NhbGFyaXplZCA9IChjb21waWxlT3B0aW9ucyAmIFNIX1NDQUxBUklaRV9WRUNf
QU5EX01BVF9DT05TVFJVQ1RPUl9BUkdTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6OmtTY2FsYXJpemVkVmVjT3JN
YXRDb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAwOwogCiAgICAgLy8gU3BsaXQgbXVsdGkgZGVjbGFyYXRpb25zIGFuZCByZW1vdmUgY2FsbHMg
dG8gYXJyYXkgbGVuZ3RoKCkuCiAgICAgLy8gTm90ZSB0aGF0IFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnMgbmVlZHMgdG8gYmUgcnVuIGJlZm9yZSBhbnkgb3RoZXIgQVNUIHRyYW5zZm9ybWF0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgKaW5kZXggZDBiMjRiYWEzZTc3NjU5MzdhMjQxN2NkMzlkZGFlNTIw
ODk4NjlkMC4uMDQzZGRkNWFkY2NlODFkMDM5NTBjNGI0MzFmYzA2NjA1OTZhMTY5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29t
cGlsZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5oCkBAIC0zNSw2ICszNSw5IEBAIGNsYXNzIFRQYXJzZUNvbnRleHQ7CiAj
aWZkZWYgQU5HTEVfRU5BQkxFX0hMU0wKIGNsYXNzIFRyYW5zbGF0b3JITFNMOwogI2VuZGlmICAv
LyBBTkdMRV9FTkFCTEVfSExTTAorI2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTAorY2xhc3MgVHJh
bnNsYXRvck1ldGFsRGlyZWN0OworI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUwKIAogLy8K
IC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc2hhZGVyIHR5cGUgaXMgR0xTTC4K
QEAgLTYzLDYgKzY2LDkgQEAgY2xhc3MgVFNoSGFuZGxlQmFzZQogI2lmZGVmIEFOR0xFX0VOQUJM
RV9ITFNMCiAgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0QXNUcmFuc2xhdG9ySExTTCgp
IHsgcmV0dXJuIDA7IH0KICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX0hMU0wKKyNpZmRlZiBBTkdM
RV9FTkFCTEVfTUVUQUwKKyAgICB2aXJ0dWFsIFRyYW5zbGF0b3JNZXRhbERpcmVjdCAqZ2V0QXNU
cmFuc2xhdG9yTWV0YWxEaXJlY3QoKSB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYgIC8vIEFO
R0xFX0VOQUJMRV9NRVRBTAogCiAgIHByb3RlY3RlZDoKICAgICAvLyBNZW1vcnkgYWxsb2NhdG9y
LiBBbGxvY2F0ZXMgYW5kIHRyYWNrcyBtZW1vcnkgcmVxdWlyZWQgYnkgdGhlIGNvbXBpbGVyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29uc3RhbnRVbmlvbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAppbmRleCAwMzM1MTcxNTAxZjY2YTdjZWEw
NmE3NWY3MWRkZjJhMDUxNDdiMjQ2Li4xMDRhZmZiYWViNzNlMTZhODhkNjBkZGQyMjQxNDM4Yzcz
MTM5YjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcApAQCAtNjcsMTEgKzY3
LDE1IEBAIGJvb2wgSXNWYWxpZFNoaWZ0T2Zmc2V0KGNvbnN0IFRDb25zdGFudFVuaW9uICZyaHMp
CiAKIH0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotVENvbnN0YW50VW5pb246OlRDb25zdGFu
dFVuaW9uKCkKLXsKLSAgICBpQ29uc3QgPSAwOwotICAgIHR5cGUgICA9IEVidFZvaWQ7Ci19CitU
Q29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oKSA6IGlDb25zdCgwKSwgdHlwZShFYnRWb2lk
KSB7fQorCitUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oaW50IGkpIDogaUNvbnN0KGkp
LCB0eXBlKEVidEludCkge30KKworVENvbnN0YW50VW5pb246OlRDb25zdGFudFVuaW9uKHVuc2ln
bmVkIGludCB1KSA6IHVDb25zdCh1KSwgdHlwZShFYnRVSW50KSB7fQorCitUQ29uc3RhbnRVbmlv
bjo6VENvbnN0YW50VW5pb24oZmxvYXQgZikgOiBmQ29uc3QoZiksIHR5cGUoRWJ0RmxvYXQpIHt9
CisKK1RDb25zdGFudFVuaW9uOjpUQ29uc3RhbnRVbmlvbihib29sIGIpIDogYkNvbnN0KGIpLCB0
eXBlKEVidEJvb2wpIHt9CiAKIGludCBUQ29uc3RhbnRVbmlvbjo6Z2V0SUNvbnN0KCkgY29uc3QK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0NvbnN0YW50VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAppbmRleCBhNjIzZDY1ZmIxZDU0NTdhMjlk
NzgyZTNkMTNiMDgxODQ4YjJiMGFkLi5kZjUzODU3ZGQzYmY0YjQ4ZmJhYjY1ZWI0ZmViMWUwNDU4
NjEzNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCkBAIC0yMCw2ICsyMCwxMCBA
QCBjbGFzcyBUQ29uc3RhbnRVbmlvbgogICBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVX
X0RFTEVURQogICAgIFRDb25zdGFudFVuaW9uKCk7CisgICAgVENvbnN0YW50VW5pb24oaW50IGkp
OworICAgIFRDb25zdGFudFVuaW9uKHVuc2lnbmVkIGludCB1KTsKKyAgICBUQ29uc3RhbnRVbmlv
bihmbG9hdCBmKTsKKyAgICBUQ29uc3RhbnRVbmlvbihib29sIGIpOwogCiAgICAgYm9vbCBjYXN0
KFRCYXNpY1R5cGUgbmV3VHlwZSwgY29uc3QgVENvbnN0YW50VW5pb24gJmNvbnN0YW50KTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvSW50ZXJtTm9kZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcAppbmRleCBiYmRmODY2M2IwNzAxMGVlNjA0MWVlMDkz
ODljOTkxYzZmMTU0MDQ1Li41MTM2ZDIwNjhmNzU0MTdkYTFhMTlmYzNjMTk2MGE1MjczOGE3YzNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9JbnRlcm1Ob2RlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBUUHJlY2lz
aW9uIEdldEhpZ2hlclByZWNpc2lvbihUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQp
CiBUQ29uc3RhbnRVbmlvbiAqVmVjdG9yaXplKGNvbnN0IFRDb25zdGFudFVuaW9uICZjb25zdGFu
dCwgc2l6ZV90IHNpemUpCiB7CiAgICAgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24gPSBuZXcg
VENvbnN0YW50VW5pb25bc2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBz
aXplOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAgICAgICAg
IGNvbnN0VW5pb25baV0gPSBjb25zdGFudDsKIAogICAgIHJldHVybiBjb25zdFVuaW9uOwpAQCAt
NDE1LDYgKzQxNSwxNCBAQCBUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhjb25zdCBUSW50ZXJt
QmxvY2sgJm5vZGUpCiAgICAgfQogfQogCitUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8VEludGVybU5vZGUgKj4gc3RtdHMpCit7CisgICAgZm9yIChUSW50
ZXJtTm9kZSAqc3RtdCA6IHN0bXRzKQorICAgIHsKKyAgICAgICAgYXBwZW5kU3RhdGVtZW50KHN0
bXQpOworICAgIH0KK30KKwogc2l6ZV90IFRJbnRlcm1CbG9jazo6Z2V0Q2hpbGRDb3VudCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1TdGF0ZW1lbnRzLnNpemUoKTsKQEAgLTQ0Niw2ICs0NTQsMzcg
QEAgYm9vbCBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGU6OnJlcGxhY2VDaGlsZE5vZGUoVEludGVy
bU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1RJbnRl
cm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBU
SW50ZXJtVHlwZWQgKmluaXRFeHByKQoreworICAgIGlmIChpbml0RXhwcikKKyAgICB7CisgICAg
ICAgIGFwcGVuZERlY2xhcmF0b3IoCisgICAgICAgICAgICBuZXcgVEludGVybUJpbmFyeShUT3Bl
cmF0b3I6OkVPcEluaXRpYWxpemUsIG5ldyBUSW50ZXJtU3ltYm9sKHZhciksIGluaXRFeHByKSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJ
bnRlcm1TeW1ib2wodmFyKSk7CisgICAgfQorfQorCitUSW50ZXJtRGVjbGFyYXRpb246OlRJbnRl
cm1EZWNsYXJhdGlvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgVFZhcmlhYmxlICo+IGRl
Y2xhcmF0b3JzKQorICAgIDogVEludGVybURlY2xhcmF0aW9uKCkKK3sKKyAgICBmb3IgKGF1dG8g
KmQgOiBkZWNsYXJhdG9ycykKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJ
bnRlcm1TeW1ib2woZCkpOworICAgIH0KK30KKworVEludGVybURlY2xhcmF0aW9uOjpUSW50ZXJt
RGVjbGFyYXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PFRJbnRlcm1UeXBlZCAqPiBkZWNsYXJh
dG9ycykKKyAgICA6IFRJbnRlcm1EZWNsYXJhdGlvbigpCit7CisgICAgZm9yIChhdXRvICpkIDog
ZGVjbGFyYXRvcnMpCisgICAgeworICAgICAgICBhcHBlbmREZWNsYXJhdG9yKGQpOworICAgIH0K
K30KKwogc2l6ZV90IFRJbnRlcm1EZWNsYXJhdGlvbjo6Z2V0Q2hpbGRDb3VudCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1EZWNsYXJhdG9ycy5zaXplKCk7CkBAIC00NjMsOSArNTAyLDEwIEBAIGJv
b2wgVEludGVybURlY2xhcmF0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2RlICpvcmln
aW5hbCwgVEludGVybU5vZGUgKnJlCiAKIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxh
Y2VDaGlsZE5vZGVJbnRlcm5hbChUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpy
ZXBsYWNlbWVudCkKIHsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgZ2V0U2VxdWVuY2Uo
KS0+c2l6ZSgpOyArK2lpKQorICAgIGF1dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworICAgIGZv
ciAoYXV0byAqJm5vZGUgOiBzZXEpCiAgICAgewotICAgICAgICBSRVBMQUNFX0lGX0lTKCgqZ2V0
U2VxdWVuY2UoKSlbaWldLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAg
ICAgICAgUkVQTEFDRV9JRl9JUyhub2RlLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2Vt
ZW50KTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDczLDEyICs1MTMsMTMgQEAg
Ym9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxkTm9kZUludGVybmFsKFRJbnRl
cm1Ob2RlICpvcmlnaW5hbCwgVEludGUKIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxh
Y2VDaGlsZE5vZGVXaXRoTXVsdGlwbGUoVEludGVybU5vZGUgKm9yaWdpbmFsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSW50
ZXJtU2VxdWVuY2UgJnJlcGxhY2VtZW50cykKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBnZXRTZXF1
ZW5jZSgpLT5iZWdpbigpOyBpdCA8IGdldFNlcXVlbmNlKCktPmVuZCgpOyArK2l0KQorICAgIGF1
dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworICAgIGZvciAoYXV0byBpdCA9IHNlcS5iZWdpbigp
OyBpdCA8IHNlcS5lbmQoKTsgKytpdCkKICAgICB7CiAgICAgICAgIGlmICgqaXQgPT0gb3JpZ2lu
YWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGl0ID0gZ2V0U2VxdWVuY2UoKS0+ZXJhc2UoaXQp
OwotICAgICAgICAgICAgZ2V0U2VxdWVuY2UoKS0+aW5zZXJ0KGl0LCByZXBsYWNlbWVudHMuYmVn
aW4oKSwgcmVwbGFjZW1lbnRzLmVuZCgpKTsKKyAgICAgICAgICAgIGl0ID0gc2VxLmVyYXNlKGl0
KTsKKyAgICAgICAgICAgIHNlcS5pbnNlcnQoaXQsIHJlcGxhY2VtZW50cy5iZWdpbigpLCByZXBs
YWNlbWVudHMuZW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CkBAIC00ODgsMTIgKzUyOSwxMyBAQCBib29sIFRJbnRlcm1BZ2dyZWdhdGVCYXNlOjpyZXBs
YWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwKIGJvb2wgVElu
dGVybUFnZ3JlZ2F0ZUJhc2U6Omluc2VydENoaWxkTm9kZXMoVEludGVybVNlcXVlbmNlOjpzaXpl
X3R5cGUgcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmaW5zZXJ0aW9ucykKIHsKLSAgICBpZiAocG9zaXRp
b24gPiBnZXRTZXF1ZW5jZSgpLT5zaXplKCkpCisgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNl
KCk7CisgICAgaWYgKHBvc2l0aW9uID4gc2VxLnNpemUoKSkKICAgICB7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgYXV0byBpdCA9IGdldFNlcXVlbmNlKCktPmJlZ2luKCkgKyBw
b3NpdGlvbjsKLSAgICBnZXRTZXF1ZW5jZSgpLT5pbnNlcnQoaXQsIGluc2VydGlvbnMuYmVnaW4o
KSwgaW5zZXJ0aW9ucy5lbmQoKSk7CisgICAgYXV0byBpdCA9IHNlcS5iZWdpbigpICsgcG9zaXRp
b247CisgICAgc2VxLmluc2VydChpdCwgaW5zZXJ0aW9ucy5iZWdpbigpLCBpbnNlcnRpb25zLmVu
ZCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA0MCw4ICsxMDgyLDggQEAgVEludGVy
bUFnZ3JlZ2F0ZTo6VEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRlICZub2Rl
KQogCiBUSW50ZXJtQWdncmVnYXRlICpUSW50ZXJtQWdncmVnYXRlOjpzaGFsbG93Q29weSgpIGNv
bnN0CiB7Ci0gICAgVEludGVybVNlcXVlbmNlICpjb3B5U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5j
ZSgpOwotICAgIGNvcHlTZXEtPmluc2VydChjb3B5U2VxLT5iZWdpbigpLCBnZXRTZXF1ZW5jZSgp
LT5iZWdpbigpLCBnZXRTZXF1ZW5jZSgpLT5lbmQoKSk7CisgICAgYXV0byAmc2VxICAgICAgICAg
ICAgICAgICAgPSAqZ2V0U2VxdWVuY2UoKTsKKyAgICBUSW50ZXJtU2VxdWVuY2UgKmNvcHlTZXEg
ICA9IG5ldyBUSW50ZXJtU2VxdWVuY2Uoc2VxLmJlZ2luKCksIHNlcS5lbmQoKSk7CiAgICAgVElu
dGVybUFnZ3JlZ2F0ZSAqY29weU5vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShtRnVuY3Rpb24s
IG1UeXBlLCBtT3AsIGNvcHlTZXEpOwogICAgIGNvcHlOb2RlLT5zZXRMaW5lKG1MaW5lKTsKICAg
ICByZXR1cm4gY29weU5vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmgKaW5kZXggMzY0Mzg0N2Y2
OGFhZWE2NTBiZGViZjI2ZjNkZDdkMjg3MmI0MDFhMC4uM2I2Zjg3MmMyM2ZmNjVkNmEyNGFhZWVh
MzQyNmVlZmU1Y2UxYThkNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaApAQCAtNjc0LDYgKzY3
NCw3IEBAIGNsYXNzIFRJbnRlcm1CbG9jayA6IHB1YmxpYyBUSW50ZXJtTm9kZSwgcHVibGljIFRJ
bnRlcm1BZ2dyZWdhdGVCYXNlCiB7CiAgIHB1YmxpYzoKICAgICBUSW50ZXJtQmxvY2soKSA6IFRJ
bnRlcm1Ob2RlKCkge30KKyAgICBUSW50ZXJtQmxvY2soc3RkOjppbml0aWFsaXplcl9saXN0PFRJ
bnRlcm1Ob2RlICo+IHN0bXRzKTsKICAgICB+VEludGVybUJsb2NrKCkgb3ZlcnJpZGUge30KIAog
ICAgIFRJbnRlcm1CbG9jayAqZ2V0QXNCbG9jaygpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0K
QEAgLTc3Niw2ICs3NzcsOSBAQCBjbGFzcyBUSW50ZXJtRGVjbGFyYXRpb24gOiBwdWJsaWMgVElu
dGVybU5vZGUsIHB1YmxpYyBUSW50ZXJtQWdncmVnYXRlQmFzZQogewogICBwdWJsaWM6CiAgICAg
VEludGVybURlY2xhcmF0aW9uKCkgOiBUSW50ZXJtTm9kZSgpIHt9CisgICAgVEludGVybURlY2xh
cmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHByKTsKKyAg
ICBUSW50ZXJtRGVjbGFyYXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IFRWYXJpYWJs
ZSAqPiBkZWNsYXJhdG9ycyk7CisgICAgVEludGVybURlY2xhcmF0aW9uKHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxUSW50ZXJtVHlwZWQgKj4gZGVjbGFyYXRvcnMpOwogICAgIH5USW50ZXJtRGVjbGFy
YXRpb24oKSBvdmVycmlkZSB7fQogCiAgICAgVEludGVybURlY2xhcmF0aW9uICpnZXRBc0RlY2xh
cmF0aW9uTm9kZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuY3Bw
CmluZGV4IGQwMzg5YWY0M2Y1ZjFhMTRmMjRjZTVmM2FmOWRhOTZmYjhiN2I4YWMuLmZlMmUxOWI5
MTQwNzM4MmNhNmE2ODA4YmMzZjZmZWI5OTVmZWU1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmNwcApA
QCAtMTk2LDcgKzE5Niw4IEBAIHZvaWQgVEZ1bmN0aW9uOjpzaGFyZVBhcmFtZXRlcnMoY29uc3Qg
VEZ1bmN0aW9uICZwYXJhbWV0ZXJzU291cmNlKQogCiBJbW11dGFibGVTdHJpbmcgVEZ1bmN0aW9u
OjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKIHsKLSAgICBzdGQ6OnN0cmluZyBuZXdOYW1lKG5h
bWUoKS5kYXRhKCksIG5hbWUoKS5sZW5ndGgoKSk7CisgICAgSW1tdXRhYmxlU3RyaW5nIG5hbWUg
PSB0aGlzLT5uYW1lKCk7CisgICAgc3RkOjpzdHJpbmcgbmV3TmFtZShuYW1lLmRhdGEoKSwgbmFt
ZS5sZW5ndGgoKSk7CiAgICAgbmV3TmFtZSArPSBrRnVuY3Rpb25NYW5nbGVkTmFtZVNlcGFyYXRv
cjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwdTsgaSA8IG1QYXJhbUNvdW50OyArK2kpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9T
eW1ib2wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbC5oCmluZGV4IGI5Y2Y5MDg5NGU2ZThlM2FiMmM2MjZiMzU5NDE2YzM2YTk2ZmM0MmYu
LjBhYmIxZDQxMTAxMzMyOThkZWEyYmJkM2IyMGUwMDE0MmZlZTg1MjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bC5oCkBAIC0yMjIsNyArMjIyLDcgQEAgY2xhc3MgVEZ1bmN0aW9uIDogcHVibGljIFRTeW1ib2wK
ICAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gbU9wOyB9CiAKICAg
ICB2b2lkIHNldERlZmluZWQoKSB7IGRlZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBpc0RlZmlu
ZWQoKSB7IHJldHVybiBkZWZpbmVkOyB9CisgICAgYm9vbCBpc0RlZmluZWQoKSBjb25zdCB7IHJl
dHVybiBkZWZpbmVkOyB9CiAgICAgdm9pZCBzZXRIYXNQcm90b3R5cGVEZWNsYXJhdGlvbigpIHsg
bUhhc1Byb3RvdHlwZURlY2xhcmF0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgaGFzUHJvdG90eXBl
RGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtSGFzUHJvdG90eXBlRGVjbGFyYXRpb247IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvU3ltYm9sVGFibGVfRVNTTF9hdXRvZ2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dlbi5jcHAK
aW5kZXggN2U4NDU4ZWM5OTlhMTAyZmJiZTdhYWE4NzEyYzNhMTA2M2FlYmQxYy4uZTlkMWI3MzJl
NDU5ZGEzYjE4YjM4MzM1NzY0NDljNDk4MTZmNWVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGVfRVNTTF9hdXRv
Z2VuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2xUYWJsZV9FU1NMX2F1dG9nZW4uY3BwCkBAIC0zNTY4LDcgKzM1NjgsNyBAQCBj
b25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMTBGMTBGMTBGWzNdID0geyZCdWlsdEluVmFyaWFi
bGU6OmtwdDEwRiwgJkJ1aWx0SW5WYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEZ9OwogY29uc3RleHByIGNvbnN0IFRW
YXJpYWJsZSAqcDIwQjAwQjAwQlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWls
dEluVmFyaWFibGU6OmtwdDAwQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBCfTsKLWNvbnN0ZXhwciBjb25zdCBUVmFy
aWFibGUgKnAyMEIwMERbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBCLCAmQnVpbHRJ
blZhcmlhYmxlOjprcHQwMER9OworY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDIwQjAwRFsy
XSAgICAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWlsdEluVmFyaWFibGU6Omtw
dDAwRH07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMjBCMDBIWzJdICAgID0geyZCdWls
dEluVmFyaWFibGU6OmtwdDIwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBIfTsKIGNvbnN0ZXhw
ciBjb25zdCBUVmFyaWFibGUgKnAyMEIxMEJbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0
MjBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEJ9OwogY29uc3RleHByIGNvbnN0IFRWYXJpYWJs
ZSAqcDIwQjIwQjAwQlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWlsdEluVmFy
aWFibGU6OmtwdDIwQiwKQEAgLTM2MDksNyArMzYwOSw3IEBAIGNvbnN0ZXhwciBjb25zdCBUVmFy
aWFibGUgKnAyMEYyMEYyMEZbM10gPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBGLCAmQnVpbHRJ
blZhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCdWlsdElu
VmFyaWFibGU6OmtwdDIwRn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMDBCMDBC
WzNdID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBC
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQnVpbHRJblZh
cmlhYmxlOjprcHQwMEJ9OwotY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDMwQjAwRFsyXSAg
ICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIsICZCdWlsdEluVmFyaWFibGU6OmtwdDAwRH07
Citjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMDBEWzJdICAgICAgID0geyZCdWlsdElu
VmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBEfTsKIGNvbnN0ZXhwciBj
b25zdCBUVmFyaWFibGUgKnAzMEIxMEJbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MzBC
LCAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEJ9OwogY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAq
cDMwQjIwQlsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIsICZCdWlsdEluVmFyaWFi
bGU6OmtwdDIwQn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMzBCMDBCWzNdID0g
eyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MzBCLApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5jcHAKaW5kZXggYTFmY2Y4YzlmMTU1ZTFjZGRj
Nzg5NmQ4Yjk0MTczNmEzOTZhODRlNi4uZWE1NjZiMTUzNmIwY2YyNTVhYTE5MjJlNTE4YTk2M2Uw
ZWIyNmMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwCkBAIC00MSw4
ICs0MSwxNCBAQCBjb25zdCBjaGFyIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWVb
XSA9ICJBTkdMRVJhc3Rlcml6ZXJEaXNhYmxlZCI7CiBuYW1lc3BhY2UKIHsKIAorY29uc3RleHBy
IEltbXV0YWJsZVN0cmluZyBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lID0K
KyAgICBJbW11dGFibGVTdHJpbmcoIkFOR0xFUmFzdGVyaXphdGlvbkRpc2FibGVkIik7Citjb25z
dGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lID0KKyAg
ICBJbW11dGFibGVTdHJpbmcoIkFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZCIpOwogY29uc3RleHBy
IEltbXV0YWJsZVN0cmluZyBrQ292ZXJhZ2VNYXNrRmllbGQgICAgICAgPSBJbW11dGFibGVTdHJp
bmcoImNvdmVyYWdlTWFzayIpOworY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRW11SW5zdGFu
Y2VJREZpZWxkICAgICAgPSBJbW11dGFibGVTdHJpbmcoImVtdWxhdGVkSW5zdGFuY2VJRCIpOwog
Y29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrU2FtcGxlTWFza1dyaXRlRnVuY05hbWUgPSBJbW11
dGFibGVTdHJpbmcoIkFOR0xFV3JpdGVTYW1wbGVNYXNrIik7Citjb25zdGV4cHIgSW1tdXRhYmxl
U3RyaW5nIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVE
aXNjYXJkV3JhcHBlciIpOwogCiBUSW50ZXJtQmluYXJ5ICpDcmVhdGVEcml2ZXJVbmlmb3JtUmVm
KGNvbnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5pZm9ybXMsIGNvbnN0IGNoYXIgKmZpZWxkTmFtZSkK
IHsKQEAgLTg2LDYgKzkyLDIxIEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhT
aGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAqY29tCiAgICAgcmV0dXJu
IFJ1bkF0VGhlRW5kT2ZTaGFkZXIoY29tcGlsZXIsIHJvb3QsIGFzc2lnbm1lbnQsIHN5bWJvbFRh
YmxlKTsKIH0KIAorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtdWxhdGVJbnN0YW5jZUlEKFRDb21w
aWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICpkcml2ZXJVbmlmb3JtcykKK3sKKyAgICAv
LyBlbXVJbnN0YW5jZUlECisgICAgVEludGVybUJpbmFyeSAqZW11SW5zdGFuY2VJRCA9CisgICAg
ICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtFbXVJbnN0YW5jZUlE
RmllbGQuZGF0YSgpKTsKKworICAgIC8vIENyZWF0ZSBhIHN5bWJvbCByZWZlcmVuY2UgdG8gImds
X0luc3RhbmNlSW5kZXgiCisgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlEID0gQnVpbHRJ
blZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisKKyAgICByZXR1cm4gUmVwbGFjZVZhcmlh
YmxlV2l0aFR5cGVkKGNvbXBpbGVyLCByb290LCBpbnN0YW5jZUlELCBlbXVJbnN0YW5jZUlEKTsK
K30KKwogLy8gSW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRzLgogQU5HTEVfTk9fRElT
Q0FSRCBib29sIEluaXRpYWxpemVVbnVzZWRPdXRwdXRzKFRJbnRlcm1CbG9jayAqcm9vdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUg
KnN5bWJvbFRhYmxlLApAQCAtMTIzLDYgKzE0NCwxOCBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wg
SW5pdGlhbGl6ZVVudXNlZE91dHB1dHMoVEludGVybUJsb2NrICpyb290LAogCiB9ICAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCiAKKy8qKiBzdGF0aWMgKi8KK2NvbnN0IGNoYXIgKlRyYW5zbGF0b3JN
ZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpCit7CisgICAgcmV0dXJuIGtD
b3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lLmRhdGEoKTsKK30KKworLyoqIHN0YXRpYyAqLwor
Y29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFsOjpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJs
ZWRDb25zdE5hbWUoKQoreworICAgIHJldHVybiBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVk
Q29uc3ROYW1lLmRhdGEoKTsKK30KKwogVHJhbnNsYXRvck1ldGFsOjpUcmFuc2xhdG9yTWV0YWwo
c2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykgOiBUcmFuc2xhdG9yVnVsa2FuKHR5
cGUsIHNwZWMpCiB7fQogCkBAIC0xNTMsMjAgKzE4Niw1OCBAQCBib29sIFRyYW5zbGF0b3JNZXRh
bDo6dHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICB7CiAgICAgICAgIGF1dG8gbmVn
RmxpcFkgPSBnZXREcml2ZXJVbmlmb3JtTmVnRmxpcFlSZWYoZHJpdmVyVW5pZm9ybXMpOwogCisg
ICAgICAgIGlmIChtRW11bGF0ZWRJbnN0YW5jZUlEKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBFbXVsYXRlIGdsX0luc3RhbmNlSUQKKyAgICAgICAgICAgIGlmICghRW11bGF0ZUluc3RhbmNl
SUQodGhpcywgcm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIGRyaXZlclVuaWZvcm1zKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKwogICAgICAgICAvLyBBcHBlbmQgZ2xfUG9zaXRpb24ueSBjb3JyZWN0aW9uIHRv
IG1haW4KICAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9u
VG9NYWluKHRoaXMsIHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBuZWdGbGlwWSkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIElu
c2VydCByYXN0ZXJpemVyIGRpc2NhcmQgbG9naWMKLSAgICAgICAgaWYgKCFpbnNlcnRSYXN0ZXJp
emVyRGlzY2FyZExvZ2ljKHJvb3QpKQorICAgICAgICAvLyBJbnNlcnQgcmFzdGVyaXphdGlvbiBk
aXNjYXJkIGxvZ2ljCisgICAgICAgIGlmICghaW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dp
Yyhyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gSW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRzIHRvIGF2
b2lkIHNwaXJ2LWNyb3NzIGRlYWQtY29kZSByZW1vdmluZyB0aGVtIGluIGxhdGVyCisgICAgLy8g
c3RhZ2UuIE9ubHkgZG8gdGhpcyBpZiBTSF9JTklUX09VVFBVVF9WQVJJQUJMRVMgaXMgbm90IHNw
ZWNpZmllZC4KKyAgICBpZiAoKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSIHx8
IGdldFNoYWRlclR5cGUoKSA9PSBHTF9HRU9NRVRSWV9TSEFERVJfRVhUKSAmJgorICAgICAgICAh
KGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9PVVRQVVRfVkFSSUFCTEVTKSkKKyAgICB7CisgICAg
ICAgIEluaXRWYXJpYWJsZUxpc3QgbGlzdDsKKyAgICAgICAgZm9yIChjb25zdCBzaDo6U2hhZGVy
VmFyaWFibGUgJnZhciA6IG1PdXRwdXRWYXJ5aW5ncykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCF2YXIuYWN0aXZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxpc3QucHVz
aF9iYWNrKHZhcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIUlu
aXRpYWxpemVVbnVzZWRPdXRwdXRzKHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBsaXN0KSkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogICAg
IGVsc2UgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewor
ICAgICAgICAvLyBGb3Igbm9uIHZvaWQgTVNMIGZyYWdtZW50IGZ1bmN0aW9ucyByZXBsYWNlIGRp
c2NhcmQKKyAgICAgICAgLy8gd2l0aCBBTkdMRURpc2NhcmRXcmFwcGVyKCkKKyAgICAgICAgaWYg
KG1PdXRwdXRWYXJpYWJsZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFyZXBsYWNlQWxsTWFpbkRpc2NhcmRVc2VzKHJvb3QpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAg
ICBpZiAoIWluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMocm9vdCwgZHJpdmVyVW5pZm9ybXMp
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzUsNiArMzA2LDEz
IEBAIHZvaWQgVHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhpY3NEcml2ZXJV
bmlmb3JtRmllbGRzKHN0ZDo6dmVjdG9yPFRGCiAgICAgVEZpZWxkICpjb3ZlcmFnZU1hc2tGaWVs
ZCA9CiAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKEVidFVJbnQpLCBrQ292ZXJhZ2VNYXNr
RmllbGQsIFRTb3VyY2VMb2MoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CiAgICAgZmll
bGRzT3V0LT5wdXNoX2JhY2soY292ZXJhZ2VNYXNrRmllbGQpOworCisgICAgaWYgKG1FbXVsYXRl
ZEluc3RhbmNlSUQpCisgICAgeworICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURGaWVsZCA9
IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU291cmNlTG9jKCks
IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworICAgICAgICBmaWVsZHNPdXQtPnB1c2hfYmFj
ayhlbXVJbnN0YW5jZUlERmllbGQpOworICAgIH0KIH0KIAogLy8gQWRkIHNhbXBsZV9tYXNrIHdy
aXRpbmcgdG8gbWFpbiwgZ3VhcmRlZCBieSB0aGUgc3BlY2lhbGl6YXRpb24gY29uc3RhbnQKQEAg
LTI5MywyNCArMzcxLDI0IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6
Omluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMoVEludGVybUJsb2NrCiAgICAgcmV0dXJuIFJ1
bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgcm9vdCwgaWZDYWxsLCBzeW1ib2xUYWJsZSk7CiB9CiAK
LUFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6Omluc2VydFJhc3Rlcml6ZXJE
aXNjYXJkTG9naWMoVEludGVybUJsb2NrICpyb290KQorQU5HTEVfTk9fRElTQ0FSRCBib29sIFRy
YW5zbGF0b3JNZXRhbDo6aW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dpYyhUSW50ZXJtQmxv
Y2sgKnJvb3QpCiB7CiAgICAgVEluZm9TaW5rQmFzZSAmc2luayAgICAgICA9IGdldEluZm9TaW5r
KCkub2JqOwogICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSAmZ2V0U3ltYm9sVGFibGUo
KTsKIAogICAgIC8vIEluc2VydCByYXN0ZXJpemF0aW9uRGlzYWJsZWQgc3BlY2lhbGl6YXRpb24g
Y29uc3RhbnQuCi0gICAgc2luayA8PCAibGF5b3V0IChjb25zdGFudF9pZD0wKSBjb25zdCBib29s
ICIgPDwgbXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lOworICAgIHNpbmsg
PDwgImxheW91dCAoY29uc3RhbnRfaWQ9MCkgY29uc3QgYm9vbCAiIDw8IGtSYXN0ZXJpemF0aW9u
RGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CiAgICAgc2luayA8PCAiID0gZmFsc2U7XG4iOwogCi0g
ICAgLy8gQ3JlYXRlIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUgdmFyaWFibGUg
cmVmZXJlbmNlLgorICAgIC8vIENyZWF0ZSBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29u
c3ROYW1lIGFuZCBrUmFzdGVyaXphdGlvbkRpc2NhcmRGdW5jTmFtZSB2YXJpYWJsZQorICAgIC8v
IHJlZmVyZW5jZXMuCiAgICAgVFR5cGUgKmJvb2xUeXBlID0gbmV3IFRUeXBlKEVidEJvb2wpOwog
ICAgIGJvb2xUeXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwotICAgIFRWYXJpYWJsZSAqZGlz
Y2FyZEVuYWJsZWRWYXIgPQotICAgICAgICBuZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxlLCBJbW11
dGFibGVTdHJpbmcobXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKSwKLSAg
ICAgICAgICAgICAgICAgICAgICBib29sVHlwZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9IG5ldyBUVmFyaWFibGUoc3ltYm9s
VGFibGUsIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbFR5cGUsIFN5bWJvbFR5
cGU6OkFuZ2xlSW50ZXJuYWwpOwogCiAgICAgLy8gSW5zZXJ0IHRoaXMgY29kZSB0byB0aGUgZW5k
IG9mIG1haW4oKQotICAgIC8vIGlmIChBTkdMRVJhc3Rlcml6ZXJEaXNhYmxlZCkKKyAgICAvLyBp
ZiAoQU5HTEVSYXN0ZXJpemF0aW9uRGlzYWJsZWQpCiAgICAgLy8gewogICAgIC8vICAgICAgZ2xf
UG9zaXRpb24gPSB2ZWM0KC0zLjAsIC0zLjAsIC0zLjAsIDEuMCk7CiAgICAgLy8gfQpAQCAtMzQx
LDQgKzQxOSw3OSBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNl
cnRSYXN0ZXJpemVyRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jawogICAgIHJldHVybiBSdW5BdFRo
ZUVuZE9mU2hhZGVyKHRoaXMsIHJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOwogfQogCisvLyBJ
ZiB0aGUgTVNMIGZyYWdtZW50IHNoYWRlciBpcyBub24tdm9pZCwgd2UgbmVlZCB0byBlbnN1cmUK
Ky8vIHRoYXQgdGhlcmUgaXMgYSByZXR1cm4gYXQgdGhlIGVuZC4gVGhlIE1TTCBjb21waWxlcgor
Ly8gd2lsbCBlcnJvciBvdXQgaWYgdGhlcmUncyBubyByZXR1cm4gYXQgdGhlIGVuZCwgZXZlbiBp
ZiBhbGwKKy8vIHBhdGhzIGxlYWQgdG8gZGlzY2FyZF9mcmFnbWVudCgpLiBTbyB3cmFwIGRpc2Nh
cmQgaW4gYSB3cmFwcGVyIGZ1bmN0aW9uLgorLy8gRml4ZXMgZEVRUC1HTEVTMy5mdW5jdGlvbmFs
LnNoYWRlcnMuZGlzY2FyZC5iYXNpY19hbHdheXMKK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFu
c2xhdG9yTWV0YWw6OnJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMoVEludGVybUJsb2NrICpyb290
KQoreworICAgIC8vIGJlZm9yZQorICAgIC8vIHZvaWQgbWFpbiAodm9pZCkKKyAgICAvLyB7Cisg
ICAgLy8gICAgIG9fY29sb3IgPSB2X2NvbG9yOworICAgIC8vICAgICBkaXNjYXJkOworICAgIC8v
IH0KKworICAgIC8vIGFmdGVyCisgICAgLy8gdm9pZCBBTkdMRURpc2NhcmRXcmFwcGVyKCkKKyAg
ICAvLyB7CisgICAgLy8gICAgZGlzY2FyZDsKKyAgICAvLyB9CisgICAgLy8gdm9pZCBtYWluICh2
b2lkKQorICAgIC8vIHsKKyAgICAvLyAgICAgb19jb2xvciA9IHZfY29sb3I7CisgICAgLy8gICAg
IEFOR0xFRGlzY2FyZFdyYXBwZXIoKTsKKyAgICAvLyB9CisKKyAgICBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICptYWluICAgPSBGaW5kTWFpbihyb290KTsKKyAgICBUSW50ZXJtQmxvY2sgKm1h
aW5Cb2R5ICAgICAgICAgICAgPSBtYWluLT5nZXRCb2R5KCk7CisgICAgVEludGVybVNlcXVlbmNl
ICpmdW5jdGlvblNlcXVlbmNlID0gbWFpbkJvZHktPmdldFNlcXVlbmNlKCk7CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSAqZGlzY2FyZEZ1bmMgICAgID0gbnVsbHB0cjsKKyAgICAvLyBJdGVyYXRlIG92
ZXIgYWxsIGJyYW5jaGVzIGluIG1haW4gZnVuY3Rpb24sIGFuZCByZXBsYWNlIGFsbCB1c2VzCisg
ICAgLy8gb2YgZGlzY2FyZCB3aXRoIEFOR0xFRGlzY2FyZFdyYXBwZXIoKS4KKyAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgZnVuY3Rpb25TZXF1ZW5jZS0+c2l6ZSgpOyArK2luZGV4
KQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUgKmZ1bmN0aW9uTm9kZSA9ICgqZnVuY3Rpb25T
ZXF1ZW5jZSlbaW5kZXhdOworICAgICAgICBUSW50ZXJtQnJhbmNoICpicmFuY2hOb2RlID0gZnVu
Y3Rpb25Ob2RlLT5nZXRBc0JyYW5jaE5vZGUoKTsKKyAgICAgICAgaWYgKGJyYW5jaE5vZGUgIT0g
bnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJyYW5jaE5vZGUtPmdldEZsb3dP
cCgpID09IEVPcEtpbGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGRpc2Nh
cmRGdW5jID09IG51bGxwdHIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBkaXNjYXJkRnVuYyA9IGNyZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhyb290KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlZCA9IG1haW5Cb2R5LT5yZXBs
YWNlQ2hpbGROb2RlKGJyYW5jaE5vZGUsIGRpc2NhcmRGdW5jKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXJlcGxhY2VkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVBU1Qocm9vdCk7Cit9CisKKy8vIENyZWF0ZSBkaXNj
YXJkX3dyYXBwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgU1BJUlYtQ3Jvc3Mgd2lsbCBhbHdh
eXMgaGF2ZSBhIHJldHVybiBhdCB0aGUgZW5kCisvLyBvZiBmcmFnbWVudCBzaGFkZXJzCitBTkdM
RV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKlRyYW5zbGF0b3JNZXRhbDo6Y3JlYXRlRGlz
Y2FyZFdyYXBwZXJGdW5jKFRJbnRlcm1CbG9jayAqcm9vdCkKK3sKKyAgICBUSW5mb1NpbmtCYXNl
ICZzaW5rICAgICAgID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgVFN5bWJvbFRhYmxlICpzeW1i
b2xUYWJsZSA9ICZnZXRTeW1ib2xUYWJsZSgpOworCisgICAgc2luayA8PCAidm9pZCAiIDw8IGtE
aXNjYXJkV3JhcHBlckZ1bmNOYW1lIDw8ICIoKVxuIjsKKyAgICBzaW5rIDw8ICJ7XG4iOworICAg
IHNpbmsgPDwgIiAgIGRpc2NhcmQ7XG4iOworICAgIHNpbmsgPDwgIn1cbiI7CisKKyAgICBURnVu
Y3Rpb24gKmRpc2NhcmRXcmFwcGVyRnVuYyA9CisgICAgICAgIG5ldyBURnVuY3Rpb24oc3ltYm9s
VGFibGUsIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFs
LAorICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY1R5cGU6OkdldEJhc2ljPEVidFZvaWQ+KCks
IHRydWUpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAqY2FsbERpc2NhcmRXcmFwcGVyRnVuYyA9
CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgqZGlzY2FyZFdy
YXBwZXJGdW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpOworICAgIHJldHVybiBjYWxsRGlzY2Fy
ZFdyYXBwZXJGdW5jOworfQorCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsLmgKaW5kZXggMGY0ZjFjY2UyOWEzNTU3YWVkMDE4OGM4ZjYxNzg3NjRlYjAw
MmI0ZC4uYmNjMzE4NzFhNzFkMTQ4YzU2NWQ4Mjc2NTcxYTEzNjMwYTM4NGMyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgKQEAgLTI1LDYgKzI1LDExIEBAIGNsYXNzIFRyYW5z
bGF0b3JNZXRhbCA6IHB1YmxpYyBUcmFuc2xhdG9yVnVsa2FuCiAgIHB1YmxpYzoKICAgICBUcmFu
c2xhdG9yTWV0YWwoc2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CiAKKyAgICBz
dGF0aWMgY29uc3QgY2hhciAqR2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpOworICAg
IHN0YXRpYyBjb25zdCBjaGFyICpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5h
bWUoKTsKKworICAgIHZvaWQgZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKGJvb2wgZSkgeyBtRW11
bGF0ZWRJbnN0YW5jZUlEID0gZTsgfQorCiAgIHByb3RlY3RlZDoKICAgICBBTkdMRV9OT19ESVND
QVJEIGJvb2wgdHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCkBAIC0z
Nyw3ICs0MiwxMyBAQCBjbGFzcyBUcmFuc2xhdG9yTWV0YWwgOiBwdWJsaWMgVHJhbnNsYXRvclZ1
bGthbgogCiAgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFNhbXBsZU1hc2tXcml0aW5n
TG9naWMoVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5pZm9ybXMp
OwotICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBpbnNlcnRSYXN0ZXJpemVyRGlzY2FyZExvZ2lj
KFRJbnRlcm1CbG9jayAqcm9vdCk7CisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFJh
c3Rlcml6YXRpb25EaXNjYXJkTG9naWMoVEludGVybUJsb2NrICpyb290KTsKKworICAgIEFOR0xF
X05PX0RJU0NBUkQgYm9vbCByZXBsYWNlQWxsTWFpbkRpc2NhcmRVc2VzKFRJbnRlcm1CbG9jayAq
cm9vdCk7CisKKyAgICBBTkdMRV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKmNyZWF0ZURp
c2NhcmRXcmFwcGVyRnVuYyhUSW50ZXJtQmxvY2sgKnJvb3QpOworCisgICAgYm9vbCBtRW11bGF0
ZWRJbnN0YW5jZUlEID0gZmFsc2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlMTAy
MjgyZWUzYWFhZGY2ZjBiNDI1NmY2N2Y1Mzk4YmFlMGU1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QuY3BwCkBAIC0wLDAgKzEsMTQzOSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisKKyNpbmNsdWRl
ICJhbmdsZV9nbC5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0J1aWx0aW5zV29ya2Fyb3VuZEdMU0wuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJsZVN0cmluZ0J1aWxkZXIuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL091dHB1dFZ1bGthbkdMU0wuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1N0YXRpY1R5cGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Db25z
dGFudE5hbWVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRW1pdE1ldGFsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25zdGFudHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRl
S2V5d29yZHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9SZXdyaXRlT3V0QXJncy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJs
ZVJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3Ry
dWN0RGVjbGFyYXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9Jbml0aWFsaXplVmFyaWFibGVzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9OYW1lRW1iZWRkZWRVbmlmb3Jt
U3RydWN0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3Zl
QXRvbWljQ291bnRlckJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX29wcy9SZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZUF0b21pY0NvdW50ZXJzLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlQ3ViZU1hcFNhbXBsZXJz
QXMyREFycmF5LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdy
aXRlRGZkeS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0
ZVN0cnVjdFNhbXBsZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvQnVpbHRJbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0Zp
bmRGdW5jdGlvbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0Zp
bmRNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvRmluZFN5
bWJvbE5vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1Ob2RlX3V0aWwuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9S
ZXBsYWNlQ2xpcERpc3RhbmNlVmFyaWFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL3RyZWVfdXRpbC9SZXBsYWNlVmFyaWFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9SdW5BdFRoZUVuZE9mU2hhZGVyLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci91dGlsLmgiCisKK25hbWVzcGFjZSBzaAoreworCituYW1lc3BhY2UKK3sK
KworY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0ZpZWxkKCJjb3ZlcmFnZU1hc2siLCBTeW1i
b2xUeXBlOjpVc2VyRGVmaW5lZCk7Citjb25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJREZpZWxk
KCJlbXVsYXRlZEluc3RhbmNlSUQiLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisjaWYgMAor
Y29uc3RleHByIE5hbWUga1NhbXBsZU1hc2tXcml0ZUZ1bmNOYW1lKCJXcml0ZVNhbXBsZU1hc2si
KTsKK2NvbnN0ZXhwciBOYW1lIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lKCJEaXNjYXJkV3JhcHBl
ciIpOworI2VuZGlmCitjb25zdGV4cHIgTmFtZSBrRW11bGF0ZWREZXB0aFJhbmdlUGFyYW1zKCJE
ZXB0aFJhbmdlUGFyYW1zIik7Citjb25zdGV4cHIgTmFtZSBrVW5pZm9ybXNCbG9ja05hbWUoIkFu
Z2xlVW5pZm9ybXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtVbmlmb3Jtc1Zhck5hbWUoImFuZ2xlVW5p
Zm9ybXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZsaXBwZWRQ
b2ludENvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworY29uc3RleHByIE5hbWUga0Zs
aXBwZWRGcmFnQ29vcmROYW1lKCJmbGlwcGVkRnJhZ0Nvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQpOworCitjb25zdGV4cHIgY29uc3QgY2hhciBrVmlld3BvcnRbXSAgICAgICAgICAgICA9
ICJ2aWV3cG9ydCI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrSGFsZlJlbmRlckFyZWFbXSAgICAg
ICA9ICJoYWxmUmVuZGVyQXJlYSI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrRmxpcFhZW10gICAg
ICAgICAgICAgICA9ICJmbGlwWFkiOworY29uc3RleHByIGNvbnN0IGNoYXIga05lZ0ZsaXBYWVtd
ICAgICAgICAgICAgPSAibmVnRmxpcFhZIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtDbGlwRGlz
dGFuY2VzRW5hYmxlZFtdID0gImNsaXBEaXN0YW5jZXNFbmFibGVkIjsKK2NvbnN0ZXhwciBjb25z
dCBjaGFyIGtYZmJBY3RpdmVVbnBhdXNlZFtdICAgID0gInhmYkFjdGl2ZVVucGF1c2VkIjsKK2Nv
bnN0ZXhwciBjb25zdCBjaGFyIGtYZmJWZXJ0aWNlc1BlckRyYXdbXSAgID0gInhmYlZlcnRpY2Vz
UGVyRHJhdyI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrWGZiQnVmZmVyT2Zmc2V0c1tdICAgICA9
ICJ4ZmJCdWZmZXJPZmZzZXRzIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtBY2JCdWZmZXJPZmZz
ZXRzW10gICAgID0gImFjYkJ1ZmZlck9mZnNldHMiOworY29uc3RleHByIGNvbnN0IGNoYXIga0Rl
cHRoUmFuZ2VbXSAgICAgICAgICAgPSAiZGVwdGhSYW5nZSI7Citjb25zdGV4cHIgY29uc3QgY2hh
ciBrUHJlUm90YXRpb25bXSAgICAgICAgICA9ICJwcmVSb3RhdGlvbiI7Citjb25zdGV4cHIgY29u
c3QgY2hhciBrRnJhZ1JvdGF0aW9uW10gICAgICAgICA9ICJmcmFnUm90YXRpb24iOworCitjb25z
dGV4cHIgY29uc3QgVFZhcmlhYmxlIGtnbF9WZXJ0ZXhJbmRleE1ldGFsKAorICAgIEJ1aWx0SW5J
ZDo6Z2xfVmVydGV4SW5kZXgsCisgICAgSW1tdXRhYmxlU3RyaW5nKCJnbF9WZXJ0ZXhJbmRleCIp
LAorICAgIFN5bWJvbFR5cGU6OkJ1aWx0SW4sCisgICAgVEV4dGVuc2lvbjo6VU5ERUZJTkVELAor
ICAgIFN0YXRpY1R5cGU6OkdldDxFYnRVSW50LCBFYnBIaWdoLCBFdnFWZXJ0ZXhJRCwgMSwgMT4o
KSk7CisKK2NvbnN0ZXhwciBzaXplX3Qga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEyOworY29uc3RleHBy
IHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3Jtcz4ga0dy
YXBoaWNzRHJpdmVyVW5pZm9ybU5hbWVzID0geworICAgIHtrVmlld3BvcnQsIGtIYWxmUmVuZGVy
QXJlYSwga0ZsaXBYWSwga05lZ0ZsaXBYWSwga0NsaXBEaXN0YW5jZXNFbmFibGVkLCBrWGZiQWN0
aXZlVW5wYXVzZWQsCisgICAgIGtYZmJWZXJ0aWNlc1BlckRyYXcsIGtYZmJCdWZmZXJPZmZzZXRz
LCBrQWNiQnVmZmVyT2Zmc2V0cywga0RlcHRoUmFuZ2UsIGtQcmVSb3RhdGlvbiwKKyAgICAga0Zy
YWdSb3RhdGlvbn19OworCitjb25zdGV4cHIgc2l6ZV90IGtOdW1Db21wdXRlRHJpdmVyVW5pZm9y
bXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKK2Nv
bnN0ZXhwciBzdGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwga051bUNvbXB1dGVEcml2ZXJVbmlmb3Jt
cz4ga0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFtZXMgPSB7CisgICAge2tBY2JCdWZmZXJPZmZzZXRz
fX07CisKK2NsYXNzIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBEZWNsYXJlU3RydWN0VHlwZXNU
cmF2ZXJzZXIoVE91dHB1dE1TTCAqb3V0cHV0TVNMKQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJz
ZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwgbU91dHB1dE1TTChvdXRwdXRNU0wpCisgICAge30KKwor
ICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCB2aXNpdCwgVEludGVybURlY2xhcmF0aW9u
ICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZpc2l0ID09IFByZVZpc2l0
KTsKKyAgICAgICAgaWYgKCFtSW5HbG9iYWxTY29wZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNl
ICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIFRJbnRlcm1UeXBl
ZCAqZGVjbGFyYXRvciAgICAgICAgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7Cisg
ICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICAgPSBkZWNsYXJhdG9yLT5nZXRU
eXBlKCk7CisKKyAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1
Y3QoKTsKKworICAgICAgICAgICAgLy8gRW1iZWRkZWQgc3RydWN0cyBzaG91bGQgYmUgcGFyc2Vk
IGF3YXkgYnkgbm93LgorICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+c3ltYm9sVHlwZSgp
ICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICAgICAgICAgIC8vIG91dHB1dE1TTC0+d3JpdGVT
dHJ1Y3RUeXBlKHN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJv
bE5vZGUgPSBkZWNsYXJhdG9yLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChz
eW1ib2xOb2RlICYmIHN5bWJvbE5vZGUtPnZhcmlhYmxlKCkuc3ltYm9sVHlwZSgpID09IFN5bWJv
bFR5cGU6OkVtcHR5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0
aGUgc3RydWN0IHNwZWNpZmllciBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0IGlzbid0
IHBhcnNlZCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgZW1wdHlSZXBs
YWNlbWVudDsKKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMuZW1wbGFjZV9iYWNr
KGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpLCBub2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogUkVNT1ZFLCB1c2VkIHRvIHJlbW92
ZSAndW5zdWVkJyB3YXJuaW5nCisgICAgICAgIG1PdXRwdXRNU0wgPSBudWxscHRyOworCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBUT3V0cHV0TVNMICpt
T3V0cHV0TVNMOworfTsKKworY2xhc3MgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNlciA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBEZWNsYXJlRGVmYXVs
dFVuaWZvcm1zVHJhdmVyc2VyKFRJbmZvU2lua0Jhc2UgKnNpbmssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAgKm5hbWVNYXApCisgICAgICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKKyAgICAgICAgICBtU2luayhz
aW5rKSwKKyAgICAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCisgICAgICAgICAg
bU5hbWVNYXAobmFtZU1hcCksCisgICAgICAgICAgbUluRGVmYXVsdFVuaWZvcm0oZmFsc2UpCisg
ICAge30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCB2aXNpdCwgVEludGVybURl
Y2xhcmF0aW9uICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEludGVybVNl
cXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisKKyAgICAgICAgLy8g
VE9ETyhqbWFkaWxsKTogQ29tcG91bmQgZGVjbGFyYXRpb25zLgorICAgICAgICBBU1NFUlQoc2Vx
dWVuY2Uuc2l6ZSgpID09IDEpOworCisgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFibGUgPSBz
ZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBl
ICAgICAgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpOworICAgICAgICBib29sIGlzVW5pZm9ybSAgICAg
ICAgID0gdHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtICYmICF0eXBlLmlzSW50ZXJm
YWNlQmxvY2soKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICFJc09wYXF1ZVR5cGUodHlw
ZS5nZXRCYXNpY1R5cGUoKSk7CisKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaXNVbmlmb3JtKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICgqbVNpbmspIDw8ICIgICAgIiA8PCBHZXRUeXBlTmFtZSh0eXBlLCBtSGFzaEZ1
bmN0aW9uLCBtTmFtZU1hcCkgPDwgIiAiOworICAgICAgICAgICAgICAgIG1JbkRlZmF1bHRVbmlm
b3JtID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2
aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9y
bSA9IGlzVW5pZm9ybTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBQb3N0
VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc1VuaWZvcm0pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgKCptU2luaykgPDwgIjtcbiI7CisKKyAgICAgICAgICAgICAg
ICAvLyBSZW1vdmUgdGhlIHVuaWZvcm0gZGVjbGFyYXRpb24gZnJvbSB0aGUgdHJlZSBzbyBpdCBp
c24ndCBwYXJzZWQgYWdhaW4uCisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIGVtcHR5
UmVwbGFjZW1lbnQ7CisgICAgICAgICAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLmVtcGxhY2Vf
YmFjayhnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKSwgbm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5UmVwbGFjZW1lbnQpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgdmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCAqc3ltYm9sKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1J
bkRlZmF1bHRVbmlmb3JtKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBJbW11dGFibGVT
dHJpbmcgJm5hbWUgPSBzeW1ib2wtPnZhcmlhYmxlKCkubmFtZSgpOworICAgICAgICAgICAgQVNT
RVJUKCFuYW1lLmJlZ2luc1dpdGgoImdsXyIpKTsKKyAgICAgICAgICAgICgqbVNpbmspIDw8IEhh
c2hOYW1lKCZzeW1ib2wtPnZhcmlhYmxlKCksIG1IYXNoRnVuY3Rpb24sIG1OYW1lTWFwKQorICAg
ICAgICAgICAgICAgICAgICAgPDwgQXJyYXlTdHJpbmcoc3ltYm9sLT5nZXRUeXBlKCkpOworICAg
ICAgICB9CisgICAgfQorCisgIHByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSAqbVNpbms7Cisg
ICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOworICAgIE5hbWVNYXAgKm1OYW1lTWFw
OworICAgIGJvb2wgbUluRGVmYXVsdFVuaWZvcm07Cit9OworCitUSW50ZXJtQmluYXJ5ICpDcmVh
dGVEcml2ZXJVbmlmb3JtUmVmKGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMsIGNvbnN0
IGNoYXIgKmZpZWxkTmFtZSkKK3sKKyAgICBzaXplX3QgZmllbGRJbmRleCA9IEZpbmRGaWVsZElu
ZGV4KGRyaXZlclVuaWZvcm1zLmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCksIGZpZWxk
TmFtZSk7CisKKyAgICBUSW50ZXJtU3ltYm9sICphbmdsZVVuaWZvcm1zUmVmID0gbmV3IFRJbnRl
cm1TeW1ib2woJmRyaXZlclVuaWZvcm1zKTsKKyAgICBUQ29uc3RhbnRVbmlvbiAqdW5pZm9ybUlu
ZGV4ICAgID0gbmV3IFRDb25zdGFudFVuaW9uOworICAgIHVuaWZvcm1JbmRleC0+c2V0SUNvbnN0
KHN0YXRpY19jYXN0PGludD4oZmllbGRJbmRleCkpOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
ICppbmRleFJlZiA9CisgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih1bmlmb3JtSW5k
ZXgsICpTdGF0aWNUeXBlOjpHZXRCYXNpYzxFYnRJbnQ+KCkpOworICAgIHJldHVybiBuZXcgVElu
dGVybUJpbmFyeShFT3BJbmRleERpcmVjdFN0cnVjdCwgYW5nbGVVbmlmb3Jtc1JlZiwgaW5kZXhS
ZWYpOworfQorCisjaWYgMAorLy8gVW5saWtlIFZ1bGthbiBoYXZpbmcgYXV0byB2aWV3cG9ydCBm
bGlwcGluZyBleHRlbnNpb24sIGluIE1ldGFsIHdlIGhhdmUgdG8gZmxpcCBnbF9Qb3NpdGlvbi55
CisvLyBtYW51YWxseS4KKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIGZsaXBwaW5nIHRoZSBn
bF9Qb3NpdGlvbi55IHVzaW5nIHRoaXMgZXhwcmVzc2lvbjoKKy8vIGdsX1Bvc2l0aW9uLnkgPSBn
bF9Qb3NpdGlvbi55ICogbmVnVmlld3BvcnRTY2FsZVkKK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBB
cHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAmY29t
cGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU3dp
enpsZSAmbmVnRmxpcFkpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBp
bGVyLmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNl
IHRvICJnbF9Qb3NpdGlvbiIKKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0
SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKyAgICBUSW50ZXJtU3ltYm9sICpwb3NpdGlvblJl
ZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHBvc2l0aW9uKTsKKworICAgIC8vIENyZWF0ZSBhIHN3aXp6
bGUgdG8gImdsX1Bvc2l0aW9uLnkiCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRZOwor
ICAgIHN3aXp6bGVPZmZzZXRZLnB1c2hfYmFjaygxKTsKKyAgICBUSW50ZXJtU3dpenpsZSAqcG9z
aXRpb25ZID0gbmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zmc2V0WSk7
CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0aW9uLnkgKiBuZWdGbGlw
WSIKKyAgICBUSW50ZXJtQmluYXJ5ICppbnZlcnNlWSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE11
bCwgcG9zaXRpb25ZLT5kZWVwQ29weSgpLCAmbmVnRmxpcFkpOworCisgICAgLy8gQ3JlYXRlIHRo
ZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0
U2NhbGVZCisgICAgVEludGVybVR5cGVkICpwb3NpdGlvbllMSFMgPSBwb3NpdGlvblktPmRlZXBD
b3B5KCk7CisgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVybUJpbmFy
eShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25ZTEhTLCBpbnZlcnNlWSk7CisKKyAgICAv
LyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUg
c2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3Qs
IGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisjZW5kaWYKKworI2lmIDAKKy8vIEluaXRp
YWxpemUgdW51c2VkIHZhcnlpbmcgb3V0cHV0cy4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBJbml0
aWFsaXplVW51c2VkT3V0cHV0cyhUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbml0
VmFyaWFibGVMaXN0ICZ1bnVzZWRWYXJzKQoreworICAgIGlmICh1bnVzZWRWYXJzLmVtcHR5KCkp
CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBUSW50ZXJtU2VxdWVu
Y2UgKmluc2VydFNlcXVlbmNlID0gbmV3IFRJbnRlcm1TZXF1ZW5jZTsKKworICAgIGZvciAoY29u
c3Qgc2g6OlNoYWRlclZhcmlhYmxlICZ2YXIgOiB1bnVzZWRWYXJzKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCF2YXIuYWN0aXZlKTsKKyAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCAqc3ltYm9s
ID0gRmluZFN5bWJvbE5vZGUoJnJvb3QsIHZhci5uYW1lKTsKKyAgICAgICAgQVNTRVJUKHN5bWJv
bCk7CisKKyAgICAgICAgVEludGVybVNlcXVlbmNlICppbml0Q29kZSA9IENyZWF0ZUluaXRDb2Rl
KHN5bWJvbCwgZmFsc2UsIGZhbHNlLCAmc3ltYm9sVGFibGUpOworCisgICAgICAgIGluc2VydFNl
cXVlbmNlLT5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UtPmVuZCgpLCBpbml0Q29kZS0+YmVnaW4oKSwg
aW5pdENvZGUtPmVuZCgpKTsKKyAgICB9CisKKyAgICBpZiAoaW5zZXJ0U2VxdWVuY2UpCisgICAg
eworICAgICAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICptYWluID0gRmluZE1haW4oJnJv
b3QpOworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgKm1haW5TZXF1ZW5jZSAgID0gbWFpbi0+Z2V0
Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgIC8vIEluc2VydCBpbml0IGNvZGUgYXQg
dGhlIHN0YXJ0IG9mIG1haW4oKQorICAgICAgICBtYWluU2VxdWVuY2UtPmluc2VydChtYWluU2Vx
dWVuY2UtPmJlZ2luKCksIGluc2VydFNlcXVlbmNlLT5iZWdpbigpLCBpbnNlcnRTZXF1ZW5jZS0+
ZW5kKCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2NvbnN0IFRW
YXJpYWJsZSAqQWRkQ29tcHV0ZURyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJsb2NrICZy
b290LCBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIC8vIFRoaXMgZmllbGQgbGlz
dCBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgQ29tcHV0ZURyaXZlclVuaWZvcm1zIGluIENvbnRl
eHRWay5jcHAuCisgICAgVEZpZWxkTGlzdCAqZHJpdmVyRmllbGRMaXN0ID0gbmV3IFRGaWVsZExp
c3Q7CisKKyAgICBjb25zdCBzdGQ6OmFycmF5PFRUeXBlICosIGtOdW1Db21wdXRlRHJpdmVyVW5p
Zm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7eworICAgICAgICBuZXcgVFR5cGUoRWJ0VUlu
dCwgNCksCisgICAgfX07CisKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlm
b3JtSW5kZXggPCBrTnVtQ29tcHV0ZURyaXZlclVuaWZvcm1zOyArK3VuaWZvcm1JbmRleCkKKyAg
ICB7CisgICAgICAgIFRGaWVsZCAqZHJpdmVyVW5pZm9ybUZpZWxkID0KKyAgICAgICAgICAgIG5l
dyBURmllbGQoa0RyaXZlclVuaWZvcm1UeXBlc1t1bmlmb3JtSW5kZXhdLAorICAgICAgICAgICAg
ICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoa0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFtZXNbdW5p
Zm9ybUluZGV4XSksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIGRyaXZlckZpZWxkTGlzdC0+cHVzaF9iYWNr
KGRyaXZlclVuaWZvcm1GaWVsZCk7CisgICAgfQorCisgICAgcmV0dXJuIERlY2xhcmVTdHJ1Y3R1
cmUoJnJvb3QsICZzeW1ib2xUYWJsZSwgZHJpdmVyRmllbGRMaXN0LCBFdnFVbmlmb3JtLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLCBr
VW5pZm9ybXNCbG9ja05hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKyAgICAgICAgLnNlY29uZDsKK30KKworLy8g
VGhlIEFkZCpEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyIG9wZXJhdGlvbiBhZGRzIGFuIGludGVybmFs
IHVuaWZvcm0gYmxvY2sgdG8gYSBzaGFkZXIuIFRoZSBkcml2ZXIKKy8vIGJsb2NrIGlzIHVzZWQg
dG8gaW1wbGVtZW50IFZ1bGthbi1zcGVjaWZpYyBmZWF0dXJlcyBhbmQgd29ya2Fyb3VuZHMuIFJl
dHVybnMgdGhlIGRyaXZlciB1bmlmb3JtcworLy8gdmFyaWFibGUuCisvLworLy8gVGhlcmUgYXJl
IEdyYXBoaWNzIGFuZCBDb21wdXRlIHZhcmlhdGlvbnMgYXMgdGhleSByZXF1aXJlIGRpZmZlcmVu
dCB1bmlmb3Jtcy4KK2NvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJVbmlmb3Jtc1Rv
U2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxURmllbGQgKj4gJmFkZGl0aW9uYWxGaWVsZHMpCit7CisgICAgLy8gSW5pdCB0aGUgZGVw
dGggcmFuZ2UgdHlwZS4KKyAgICBURmllbGRMaXN0ICpkZXB0aFJhbmdlUGFyYW1zRmllbGRzID0g
bmV3IFRGaWVsZExpc3QoKTsKKyAgICBkZXB0aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNoX2JhY2so
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSwgMSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tdXRh
YmxlU3RyaW5nKCJuZWFyIiksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7Cisg
ICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygiZmFyIiksIGtO
b1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisgICAgZGVwdGhSYW5nZVBhcmFtc0Zp
ZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBF
dnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEltbXV0YWJsZVN0cmluZygiZGlmZiIpLCBrTm9Tb3VyY2VMb2MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5n
bGVJbnRlcm5hbCkpOworICAgIC8vIFRoaXMgYWRkaXRpb25hbCBmaWVsZCBtaWdodCBiZSB1c2Vk
IGJ5IHN1YmNsYXNzIHN1Y2ggYXMgVHJhbnNsYXRvck1ldGFsLgorICAgIGRlcHRoUmFuZ2VQYXJh
bXNGaWVsZHMtPnB1c2hfYmFjayhuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwSGln
aCwgRXZxR2xvYmFsLCAxLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoInJlc2VydmVkIiksIGtOb1NvdXJjZUxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xU
eXBlOjpBbmdsZUludGVybmFsKSk7CisKKyAgICBjb25zdCBUU3RydWN0dXJlICplbXVsYXRlZERl
cHRoUmFuZ2VQYXJhbXMgPQorICAgICAgICBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9s
VGFibGUsIGRlcHRoUmFuZ2VQYXJhbXNGaWVsZHMsIEV2cUdsb2JhbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBUTWVtb3J5UXVhbGlmaWVyOjpDcmVhdGUoKSwgMCwga0VtdWxhdGVkRGVwdGhS
YW5nZVBhcmFtcy5yYXdOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0cikK
KyAgICAgICAgICAgIC5maXJzdC0+Z2V0VHlwZSgpCisgICAgICAgICAgICAuZ2V0U3RydWN0KCk7
CisKKyAgICAvLyBUaGlzIGZpZWxkIGxpc3QgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9mIEdyYXBo
aWNzRHJpdmVyVW5pZm9ybXMgaW4gQ29udGV4dFZrLmNwcC4KKyAgICBURmllbGRMaXN0ICpkcml2
ZXJGaWVsZExpc3QgPSBuZXcgVEZpZWxkTGlzdDsKKworICAgIGNvbnN0IHN0ZDo6YXJyYXk8VFR5
cGUgKiwga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7
eworICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0
RmxvYXQsIDIpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorICAgICAgICBuZXcg
VFR5cGUoRWJ0RmxvYXQsIDIpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0VUludCksICAvLyB1aW50
IGNsaXBEaXN0YW5jZXNFbmFibGVkOyAgLy8gMzIgYml0cyBmb3IgMzIgY2xpcCBkaXN0YW5jZXMg
bWF4CisgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwKKyAgICAgICAgbmV3IFRUeXBlKEVidFVJ
bnQpLAorICAgICAgICAvLyBOT1RFOiBUaGVyZSdzIGEgdmVjMyBnYXAgaGVyZSB0aGF0IGNhbiBi
ZSB1c2VkIGluIHRoZSBmdXR1cmUKKyAgICAgICAgbmV3IFRUeXBlKEVidEludCwgNCksCisgICAg
ICAgIG5ldyBUVHlwZShFYnRVSW50LCA0KSwKKyAgICAgICAgbmV3IFRUeXBlKGVtdWxhdGVkRGVw
dGhSYW5nZVBhcmFtcywgZmFsc2UpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQp
LAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQpLAorICAgIH19OworCisgICAgZm9y
IChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwga051bUdyYXBoaWNzRHJp
dmVyVW5pZm9ybXM7ICsrdW5pZm9ybUluZGV4KQorICAgIHsKKyAgICAgICAgVEZpZWxkICpkcml2
ZXJVbmlmb3JtRmllbGQgPQorICAgICAgICAgICAgbmV3IFRGaWVsZChrRHJpdmVyVW5pZm9ybVR5
cGVzW3VuaWZvcm1JbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmlu
ZyhrR3JhcGhpY3NEcml2ZXJVbmlmb3JtTmFtZXNbdW5pZm9ybUluZGV4XSksIGtOb1NvdXJjZUxv
YywKKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cisg
ICAgICAgIGRyaXZlckZpZWxkTGlzdC0+cHVzaF9iYWNrKGRyaXZlclVuaWZvcm1GaWVsZCk7Cisg
ICAgfQorCisgICAgLy8gQmFjay1lbmQgc3BlY2lmaWMgZmllbGRzCisgICAgZHJpdmVyRmllbGRM
aXN0LT5pbnNlcnQoZHJpdmVyRmllbGRMaXN0LT5lbmQoKSwgYWRkaXRpb25hbEZpZWxkcy5iZWdp
bigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMuZW5kKCkp
OworCisgICAgLy8gRGVmaW5lIGEgZHJpdmVyIHVuaWZvcm0gYmxvY2sgIkFOR0xFVW5pZm9ybUJs
b2NrIiB3aXRoIGluc3RhbmNlIG5hbWUgIkFOR0xFVW5pZm9ybXMiLgorICAgIHJldHVybiBEZWNs
YXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwgRXZxVW5p
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTWVtb3J5UXVhbGlmaWVyOjpDcmVh
dGUoKSwgMCwga1VuaWZvcm1zQmxvY2tOYW1lLnJhd05hbWUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAma1VuaWZvcm1zVmFyTmFtZS5yYXdOYW1lKCkpCisgICAgICAgIC5zZWNvbmQ7
Cit9CisKKy8vIERlY2xhcmVzIGEgbmV3IHZhcmlhYmxlIHRvIHJlcGxhY2UgZ2xfRGVwdGhSYW5n
ZSwgaXRzIHZhbHVlcyBhcmUgZmVkIGZyb20gYSBkcml2ZXIgdW5pZm9ybS4KK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBSZXBsYWNlR0xEZXB0aFJhbmdlV2l0aERyaXZlclVuaWZvcm0oVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRy
aXZlclVuaWZvcm1zKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxl
ci5nZXRTeW1ib2xUYWJsZSgpOworCisgICAgLy8gQ3JlYXRlIGEgc3ltYm9sIHJlZmVyZW5jZSB0
byAiZ2xfRGVwdGhSYW5nZSIKKyAgICBjb25zdCBUVmFyaWFibGUgKmRlcHRoUmFuZ2VWYXIgPSBz
dGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUgKj4oCisgICAgICAgIHN5bWJvbFRhYmxlLmZpbmRC
dWlsdEluKEltbXV0YWJsZVN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCAwKSk7CisKKyAgICAvLyBB
TkdMRVVuaWZvcm1zLmRlcHRoUmFuZ2UKKyAgICBUSW50ZXJtQmluYXJ5ICphbmdsZUVtdWxhdGVk
RGVwdGhSYW5nZVJlZiA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtE
ZXB0aFJhbmdlKTsKKworICAgIC8vIFVzZSB0aGlzIHZhcmlhYmxlIGluc3RlYWQgb2YgZ2xfRGVw
dGhSYW5nZSBldmVyeXdoZXJlLgorICAgIHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRoVHlwZWQo
JmNvbXBpbGVyLCAmcm9vdCwgZGVwdGhSYW5nZVZhciwgYW5nbGVFbXVsYXRlZERlcHRoUmFuZ2VS
ZWYpOworfQorCitUSW50ZXJtU2VxdWVuY2UgKkdldE1haW5TZXF1ZW5jZShUSW50ZXJtQmxvY2sg
JnJvb3QpCit7CisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqbWFpbiA9IEZpbmRNYWlu
KCZyb290KTsKKyAgICByZXR1cm4gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworfQor
CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyVHJhbnNmb3JtRmVlZGJh
Y2tPdXRwdXRUb01haW4oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
QmxvY2sgJnJvb3QpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVy
LmdldFN5bWJvbFRhYmxlKCk7CisgICAgVFZhcmlhYmxlICp4ZmJQbGFjZWhvbGRlciA9IG5ldyBU
VmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoIkBAIFhGQi1PVVQgQEAiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFR5cGUo
KSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisKKyAgICAvLyBBcHBlbmQgdGhlIGFzc2ln
bm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhZGVyLgorICAgIHJldHVy
biBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIG5ldyBUSW50ZXJtU3ltYm9s
KHhmYlBsYWNlaG9sZGVyKSwgJnN5bWJvbFRhYmxlKTsKK30KKworLy8gVGhpcyBvcGVyYXRpb24g
cGVyZm9ybXMgdGhlIHZpZXdwb3J0IGRlcHRoIHRyYW5zbGF0aW9uIG5lZWRlZCBieSBWdWxrYW4u
IEluIEdMIHRoZSB2aWV3cG9ydAorLy8gdHJhbnNmb3JtYXRpb24gaXMgc2xpZ2h0bHkgZGlmZmVy
ZW50IC0gc2VlIHRoZSBHTCAyLjAgc3BlYyBzZWN0aW9uICIyLjEyLjEgQ29udHJvbGxpbmcgdGhl
CisvLyBWaWV3cG9ydCIuIEluIFZ1bGthbiB0aGUgY29ycmVzcG9uZGluZyBzcGVjIHNlY3Rpb24g
aXMgY3VycmVudGx5ICIyMy40LiBDb29yZGluYXRlCisvLyBUcmFuc2Zvcm1hdGlvbnMiLgorLy8g
VGhlIGVxdWF0aW9ucyByZWR1Y2UgdG8gYW4gZXhwcmVzc2lvbjoKKy8vCisvLyAgICAgel92ayA9
IDAuNSAqICh3X2dsICsgel9nbCkKKy8vCisvLyB3aGVyZSB6X3ZrIGlzIHRoZSBkZXB0aCBvdXRw
dXQgb2YgYSBWdWxrYW4gdmVydGV4IHNoYWRlciBhbmQgel9nbCBpcyB0aGUgc2FtZSBmb3IgR0wu
CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyRGVwdGhDb3JyZWN0aW9u
VG9NYWluKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCkKK3sK
KyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0gY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUo
KTsKKworICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJblZhcmlhYmxlOjpn
bF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJbnRl
cm1TeW1ib2wocG9zaXRpb24pOworCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRaID0g
ezJ9OworICAgIFRJbnRlcm1Td2l6emxlICpwb3NpdGlvblogICA9IG5ldyBUSW50ZXJtU3dpenps
ZShwb3NpdGlvblJlZiwgc3dpenpsZU9mZnNldFopOworCisgICAgVEludGVybUNvbnN0YW50VW5p
b24gKm9uZUhhbGYgPSBDcmVhdGVGbG9hdE5vZGUoMC41Zik7CisKKyAgICBUVmVjdG9yPGludD4g
c3dpenpsZU9mZnNldFcgPSB7M307CisgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uVyAgID0g
bmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0
Vyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi56ICsgZ2xf
UG9zaXRpb24udykgKiAwLjUiLgorICAgIFRJbnRlcm1CaW5hcnkgKnpQbHVzVyA9IG5ldyBUSW50
ZXJtQmluYXJ5KEVPcEFkZCwgcG9zaXRpb25aLT5kZWVwQ29weSgpLCBwb3NpdGlvblctPmRlZXBD
b3B5KCkpOworICAgIFRJbnRlcm1CaW5hcnkgKmhhbGZaUGx1c1cgPSBuZXcgVEludGVybUJpbmFy
eShFT3BNdWwsIHpQbHVzVywgb25lSGFsZi0+ZGVlcENvcHkoKSk7CisKKyAgICAvLyBDcmVhdGUg
dGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0
aW9uLncpICogMC41IgorICAgIFRJbnRlcm1UeXBlZCAqcG9zaXRpb25aTEhTID0gcG9zaXRpb25a
LT5kZWVwQ29weSgpOworICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgID0gbmV3IFRJbnRl
cm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWkxIUywgaGFsZlpQbHVzVyk7
CisKKyAgICAvLyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVu
ZCBvZiB0aGUgc2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxl
ciwgJnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisKKy8vIFRoaXMgb3BlcmF0
aW9uIHBlcmZvcm1zIEFuZHJvaWQgcHJlLXJvdGF0aW9uIGFuZCB5LWZsaXAuICBGb3IgQW5kcm9p
ZCAoYW5kIHBvdGVudGlhbGx5IG90aGVyCisvLyBwbGF0Zm9ybXMpLCB0aGUgZGV2aWNlIG1heSBy
b3RhdGUsIHN1Y2ggdGhhdCB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uIGlzIHJv
dGF0ZWQKKy8vIHJlbGF0aXZlIHRvIHRoZSBuYXRpdmUgb3JpZW50YXRpb24gb2YgdGhlIGRldmlj
ZS4gIFRoaXMgaXMgY29ycmVjdGVkIGluIHBhcnQgYnkgbXVsdGlwbHlpbmcKKy8vIGdsX1Bvc2l0
aW9uIGJ5IGEgbWF0Mi4KKy8vIFRoZSBlcXVhdGlvbnMgcmVkdWNlIHRvIGFuIGV4cHJlc3Npb246
CisvLworLy8gICAgIGdsX1Bvc2l0aW9uLnh5ID0gZ2xfUG9zaXRpb24ueHkgKiBwcmVSb3RhdGlv
bgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEFwcGVuZFByZVJvdGF0aW9uKFRDb21waWxlciAmY29t
cGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xU
YWJsZSAgICAgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworICAgIFRJbnRlcm1CaW5hcnkg
KnByZVJvdGF0aW9uUmVmID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywg
a1ByZVJvdGF0aW9uKTsKKyAgICBUSW50ZXJtU3ltYm9sICpnbFBvcyAgICAgICAgICA9IG5ldyBU
SW50ZXJtU3ltYm9sKEJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKSk7CisgICAgVFZlY3Rv
cjxpbnQ+IHN3aXp6bGVPZmZzZXRYWSAgPSB7MCwgMX07CisgICAgVEludGVybVN3aXp6bGUgKmds
UG9zWFkgICAgICAgPSBuZXcgVEludGVybVN3aXp6bGUoZ2xQb3MsIHN3aXp6bGVPZmZzZXRYWSk7
CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi54eSAqIHByZVJv
dGF0aW9uKSIKKyAgICBUSW50ZXJtQmluYXJ5ICp6Um90YXRlZCA9CisgICAgICAgIG5ldyBUSW50
ZXJtQmluYXJ5KEVPcE1hdHJpeFRpbWVzVmVjdG9yLCBwcmVSb3RhdGlvblJlZi0+ZGVlcENvcHko
KSwgZ2xQb3NYWS0+ZGVlcENvcHkoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQg
ImdsX1Bvc2l0aW9uLnh5ID0gKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24pIgorICAgIFRJ
bnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgPQorICAgICAgICBuZXcgVEludGVybUJpbmFyeShUT3Bl
cmF0b3I6OkVPcEFzc2lnbiwgZ2xQb3NYWS0+ZGVlcENvcHkoKSwgelJvdGF0ZWQpOworCisgICAg
Ly8gQXBwZW5kIHRoZSBhc3NpZ25tZW50IGFzIGEgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgdGhl
IHNoYWRlci4KKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcigmY29tcGlsZXIsICZyb290
LCBhc3NpZ25tZW50LCAmc3ltYm9sVGFibGUpOworfQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wg
Um90YXRlQW5kRmxpcEJ1aWx0aW5WYXJpYWJsZShUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2Nr
ICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybVNlcXVlbmNlICZpbnNlcnRTZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZmxpcFhZLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZh
cmlhYmxlICZidWlsdGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTmFtZSAmZmxpcHBlZFZhcmlhYmxlTmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmcGl2
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQgKmZyYWdSb3RhdGlvbikKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRh
YmxlID0gY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIC8vIENyZWF0ZSBhIHN5bWJv
bCByZWZlcmVuY2UgdG8gJ2J1aWx0aW4nLgorICAgIFRJbnRlcm1TeW1ib2wgKmJ1aWx0aW5SZWYg
PSBuZXcgVEludGVybVN5bWJvbCgmYnVpbHRpbik7CisKKyAgICAvLyBDcmVhdGUgYSBzd2l6emxl
IHRvICJidWlsdGluLnh5IgorICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WFkgPSB7MCwg
MX07CisgICAgVEludGVybVN3aXp6bGUgKmJ1aWx0aW5YWSAgICA9IG5ldyBUSW50ZXJtU3dpenps
ZShidWlsdGluUmVmLCBzd2l6emxlT2Zmc2V0WFkpOworCisgICAgLy8gQ3JlYXRlIGEgc3ltYm9s
IHJlZmVyZW5jZSB0byBvdXIgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBob2xkIHRoZSBtb2RpZmll
ZCBidWlsdGluLgorICAgIGNvbnN0IFRUeXBlICp0eXBlID0gU3RhdGljVHlwZTo6R2V0Rm9yVmVj
PEVidEZsb2F0PigKKyAgICAgICAgRXZxR2xvYmFsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PihidWlsdGluLmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgVFZhcmlhYmxlICpy
ZXBsYWNlbWVudFZhciA9IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBmbGlwcGVkVmFyaWFi
bGVOYW1lLnJhd05hbWUoKSwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbGlwcGVkVmFyaWFibGVOYW1lLnN5bWJvbFR5cGUoKSk7CisgICAgRGVj
bGFyZUdsb2JhbFZhcmlhYmxlKCZyb290LCByZXBsYWNlbWVudFZhcik7CisgICAgVEludGVybVN5
bWJvbCAqZmxpcHBlZEJ1aWx0aW5SZWYgPSBuZXcgVEludGVybVN5bWJvbChyZXBsYWNlbWVudFZh
cik7CisKKyAgICAvLyBVc2UgdGhpcyBuZXcgdmFyaWFibGUgaW5zdGVhZCBvZiAnYnVpbHRpbicg
ZXZlcnl3aGVyZS4KKyAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmY29tcGlsZXIsICZyb290LCAm
YnVpbHRpbiwgcmVwbGFjZW1lbnRWYXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGJ1aWx0aW4ueHkgKiBmcmFn
Um90YXRpb24pIgorICAgIFRJbnRlcm1UeXBlZCAqcm90YXRlZFhZOworICAgIGlmIChmcmFnUm90
YXRpb24pCisgICAgeworICAgICAgICByb3RhdGVkWFkgPSBuZXcgVEludGVybUJpbmFyeShFT3BN
YXRyaXhUaW1lc1ZlY3RvciwgZnJhZ1JvdGF0aW9uLT5kZWVwQ29weSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGluWFktPmRlZXBDb3B5KCkpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBObyByb3RhdGlvbiBhcHBsaWVkLCB1c2Ugb3Jp
Z2luYWwgdmFyaWFibGUuCisgICAgICAgIHJvdGF0ZWRYWSA9IGJ1aWx0aW5YWS0+ZGVlcENvcHko
KTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihidWlsdGluLnh5IC0g
cGl2b3QpICogZmxpcFhZICsgcGl2b3QKKyAgICBUSW50ZXJtQmluYXJ5ICpyZW1vdmVQaXZvdCA9
IG5ldyBUSW50ZXJtQmluYXJ5KEVPcFN1Yiwgcm90YXRlZFhZLCAmcGl2b3QpOworICAgIFRJbnRl
cm1CaW5hcnkgKmludmVyc2VYWSAgID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wTXVsLCByZW1vdmVQ
aXZvdCwgJmZsaXBYWSk7CisgICAgVEludGVybUJpbmFyeSAqcGx1c1Bpdm90ICAgPSBuZXcgVElu
dGVybUJpbmFyeShFT3BBZGQsIGludmVyc2VYWSwgcGl2b3QuZGVlcENvcHkoKSk7CisKKyAgICAv
LyBDcmVhdGUgdGhlIGNvcnJlY3RlZCB2YXJpYWJsZSBhbmQgY29weSB0aGUgdmFsdWUgb2YgdGhl
IG9yaWdpbmFsIGJ1aWx0aW4uCisgICAgVEludGVybVNlcXVlbmNlICpzZXF1ZW5jZSA9IG5ldyBU
SW50ZXJtU2VxdWVuY2UoKTsKKyAgICBzZXF1ZW5jZS0+cHVzaF9iYWNrKGJ1aWx0aW5SZWYtPmRl
ZXBDb3B5KCkpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IFRJbnRlcm1BZ2dy
ZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKGJ1aWx0aW4uZ2V0VHlwZSgpLCBzZXF1ZW5jZSk7Cisg
ICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wSW5p
dGlhbGl6ZSwgZmxpcHBlZEJ1aWx0aW5SZWYsIGFnZ3JlZ2F0ZSk7CisKKyAgICAvLyBDcmVhdGUg
YW4gYXNzaWdubWVudCB0byB0aGUgcmVwbGFjZWQgdmFyaWFibGUncyAueHkuCisgICAgVEludGVy
bVN3aXp6bGUgKmNvcnJlY3RlZFhZID0KKyAgICAgICAgbmV3IFRJbnRlcm1Td2l6emxlKGZsaXBw
ZWRCdWlsdGluUmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0WFkpOworICAgIFRJbnRlcm1C
aW5hcnkgKmFzc2lnblRvWSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEFzc2lnbiwgY29ycmVjdGVk
WFksIHBsdXNQaXZvdCk7CisKKyAgICAvLyBBZGQgdGhpcyBhc3NpZ21lbnQgYXQgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgbWFpbiBmdW5jdGlvbgorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAq
bm9kZXNbXSA9IHthc3NpZ25tZW50LCBhc3NpZ25Ub1l9OworICAgICAgICBpbnNlcnRTZXF1ZW5j
ZS5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UuYmVnaW4oKSwgc3RkOjpiZWdpbihub2RlcyksIHN0ZDo6
ZW5kKG5vZGVzKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbXBpbGVyLnZhbGlkYXRlQVNUKCZy
b290KTsKK30KKworQU5HTEVfTk9fRElTQ0FSRCBib29sIEluc2VydEZyYWdDb29yZENvcnJlY3Rp
b24oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJv
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtU2VxdWVuY2UgJmluc2VydFNlcXVlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3JtcykKK3sK
KyAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJl
Zihkcml2ZXJVbmlmb3Jtcywga0ZsaXBYWSk7CisgICAgVEludGVybUJpbmFyeSAmcGl2b3QgICAg
ICAgID0gKkNyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtIYWxmUmVuZGVy
QXJlYSk7CisgICAgVEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0gKGNvbXBpbGVPcHRpb25z
ICYgU0hfQUREX1BSRV9ST1RBVElPTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRnJhZ1JvdGF0
aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxwdHI7Cisg
ICAgcmV0dXJuIFJvdGF0ZUFuZEZsaXBCdWlsdGluVmFyaWFibGUoY29tcGlsZXIsIHJvb3QsIGlu
c2VydFNlcXVlbmNlLCBmbGlwWFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0Nvb3JkKCksIGtGbGlwcGVkRnJhZ0Nvb3Jk
TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXZvdCwgZnJh
Z1JvdGF0aW9uKTsKK30KKworVEludGVybUJpbmFyeSAqR2V0RHJpdmVyVW5pZm9ybURlcHRoUmFu
Z2VSZXNlcnZlZEZpZWxkUmVmKGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpCit7Cisg
ICAgVEludGVybUJpbmFyeSAqZGVwdGhSYW5nZSA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJp
dmVyVW5pZm9ybXMsIGtEZXB0aFJhbmdlKTsKKworICAgIHJldHVybiBuZXcgVEludGVybUJpbmFy
eShFT3BJbmRleERpcmVjdFN0cnVjdCwgZGVwdGhSYW5nZSwgQ3JlYXRlSW5kZXhOb2RlKDMpKTsK
K30KKwordm9pZCBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKFRJbnRlcm1CbG9jayAmcm9vdCwgY29u
c3QgVFZhcmlhYmxlICZ2YXIpCit7CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWlu
SW5kZXgoJnJvb3QpLCB7bmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmdmFyfX0pOworfQorCit2b2lk
IEFkZEZyYWdDb2xvckRlY2xhcmF0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJvbFRhYmxl
ICZzeW1ib2xUYWJsZSkKK3sKKyAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmluZE1haW5JbmRl
eCgmcm9vdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZXtuZXcg
VEludGVybURlY2xhcmF0aW9ue0J1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0NvbG9yKCl9fSk7Cit9
CisKK3ZvaWQgQWRkRnJhZ0RlcHRoRGVjbGFyYXRpb24oVEludGVybUJsb2NrICZyb290LCBUU3lt
Ym9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5k
TWFpbkluZGV4KCZyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVNlcXVl
bmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxlOjpnbF9GcmFnRGVwdGgo
KX19KTsKK30KKworQU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEZyYWdEYXRhRGVjbGFyYXRpb24o
VENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworICAgIGNvbnN0
IGludCBtYXhEcmF3QnVmZmVycyAgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5NYXhEcmF3QnVm
ZmVyczsKKyAgICBUVHlwZSAqZ2xfRnJhZ0RhdGFUeXBlICAgID0gbmV3IFRUeXBlKEVidEZsb2F0
LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCAxKTsKKyAgICBzdGQ6OnZlY3Rvcjxjb25zdCBU
VmFyaWFibGUgKj4gZ2xGcmFnRGF0YVNsb3RzOworICAgIFRJbnRlcm1TZXF1ZW5jZSBkZWNsYXJl
R0xGcmFnZGF0YVNlcXVlbmNlOworCisgICAgLy8gQ3JlYXRlIGdsX0ZyYWdEYXRhXzAsMSwyLDMK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heERyYXdCdWZmZXJzOyBpKyspCisgICAgeworICAg
ICAgICBJbW11dGFibGVTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoc3RybGVuKCJnbF9GcmFnRGF0YV8i
KSArIDIpOworICAgICAgICBidWlsZGVyIDw8ICJnbF9GcmFnRGF0YV8iOworICAgICAgICBidWls
ZGVyLmFwcGVuZERlY2ltYWwoaSk7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xGcmFnRGF0
YSA9CisgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgYnVpbGRlciwgZ2xf
RnJhZ0RhdGFUeXBlLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBURXh0ZW5zaW9uOjpVTkRFRklORUQpOworICAgICAgICBnbEZyYWdEYXRhU2xv
dHMucHVzaF9iYWNrKGdsRnJhZ0RhdGEpOworICAgICAgICBkZWNsYXJlR0xGcmFnZGF0YVNlcXVl
bmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue2dsRnJhZ0RhdGF9KTsKKyAgICB9
CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgoJnJvb3QpLCBkZWNsYXJl
R0xGcmFnZGF0YVNlcXVlbmNlKTsKKworICAgIC8vIENyZWF0ZSBhbiBpbnRlcm5hbCBnbF9GcmFn
RGF0YSBhcnJheSB0eXBlLCBjb21wYXRpYmxlIHdpdGggaW5kZXhpbmcgc3ludGF4LgorICAgIFRU
eXBlICpnbF9GcmFnRGF0YVR5cGVBcnJheSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVt
LCBFdnFHbG9iYWwsIDQsIDEpOworICAgIGdsX0ZyYWdEYXRhVHlwZUFycmF5LT5tYWtlQXJyYXko
bWF4RHJhd0J1ZmZlcnMpOworICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xGcmFnRGF0YUdsb2JhbCA9
IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRh
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbF9GcmFnRGF0YVR5cGVBcnJheSwgU3ltYm9sVHlwZTo6QnVpbHRJbik7CisKKyAgICBEZWNs
YXJlR2xvYmFsVmFyaWFibGUoJnJvb3QsIGdsRnJhZ0RhdGFHbG9iYWwpOworICAgIGNvbnN0IFRJ
bnRlcm1TeW1ib2wgKm9yaWdpbmFsR0xGcmFnRGF0YSA9IEZpbmRTeW1ib2xOb2RlKCZyb290LCBJ
bW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRhIikpOworICAgIEFTU0VSVChvcmlnaW5hbEdMRnJh
Z0RhdGEpOworCisgICAgLy8gUmVwbGFjZSBnbF9GcmFnRGF0YSgpIHdpdGggb3VyIGdsb2JhbGx5
IGRlZmluZWQgZnJhZ2RhdGEKKyAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmY29tcGlsZXIsICZy
b290LCAmKG9yaWdpbmFsR0xGcmFnRGF0YS0+dmFyaWFibGUoKSksIGdsRnJhZ0RhdGFHbG9iYWwp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEFzc2lnbiBl
YWNoIGFycmF5IGF0dHJpYnV0ZSB0byBhbiBvdXRwdXQKKyAgICBUSW50ZXJtQmxvY2sgKmluc2Vy
dFNlcXVlbmNlID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bWF4RHJhd0J1ZmZlcnM7IGkrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZ2xGcmFn
RGF0YVNsb3QgICAgICAgICA9IG5ldyBUSW50ZXJtU3ltYm9sKGdsRnJhZ0RhdGFTbG90c1tpXSk7
CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCA9IG5ldyBUSW50
ZXJtU3ltYm9sKGdsRnJhZ0RhdGFHbG9iYWwpOworICAgICAgICBhdXRvICZhY2Nlc3MgICAgICAg
ICAgICAgICAgICAgICAgICAgPSBBY2Nlc3NJbmRleCgqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCwg
aSk7CisgICAgICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgPQorICAgICAgICAgICAgbmV3
IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIGdsRnJhZ0RhdGFTbG90LCAmYWNj
ZXNzKTsKKyAgICAgICAgaW5zZXJ0U2VxdWVuY2UtPmFwcGVuZFN0YXRlbWVudChhc3NpZ25tZW50
KTsKKyAgICB9CisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAmcm9v
dCwgaW5zZXJ0U2VxdWVuY2UsICZzeW1ib2xUYWJsZSk7Cit9CisKK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBFbXVsYXRlSW5zdGFuY2VJRChUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVu
aWZvcm1zKQoreworICAgIFRJbnRlcm1CaW5hcnkgKmVtdUluc3RhbmNlSUQgPQorICAgICAgICBD
cmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRW11SW5zdGFuY2VJREZpZWxk
LnJhd05hbWUoKS5kYXRhKCkpOworICAgIGNvbnN0IFRWYXJpYWJsZSAqaW5zdGFuY2VJRCA9IEJ1
aWx0SW5WYXJpYWJsZTo6Z2xfSW5zdGFuY2VJbmRleCgpOworICAgIHJldHVybiBSZXBsYWNlVmFy
aWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgaW5zdGFuY2VJRCwgZW11SW5zdGFuY2VJ
RCk7Cit9CisKKy8vIFVubGlrZSBWdWxrYW4gaGF2aW5nIGF1dG8gdmlld3BvcnQgZmxpcHBpbmcg
ZXh0ZW5zaW9uLCBpbiBNZXRhbCB3ZSBoYXZlIHRvIGZsaXAgZ2xfUG9zaXRpb24ueQorLy8gbWFu
dWFsbHkuCisvLyBUaGlzIG9wZXJhdGlvbiBwZXJmb3JtcyBmbGlwcGluZyB0aGUgZ2xfUG9zaXRp
b24ueSB1c2luZyB0aGlzIGV4cHJlc3Npb246CisvLyBnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRp
b24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVy
dGV4U2hhZGVyUG9zaXRpb25ZQ29ycmVjdGlvblRvTWFpbihUQ29tcGlsZXIgJmNvbXBpbGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVN3aXp6bGUgJm5l
Z0ZsaXBZKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRT
eW1ib2xUYWJsZSgpOworCisgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdElu
VmFyaWFibGU6OmdsX1Bvc2l0aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYg
PSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4gc3dpenps
ZU9mZnNldFk7CisgICAgc3dpenpsZU9mZnNldFkucHVzaF9iYWNrKDEpOworICAgIFRJbnRlcm1T
d2l6emxlICpwb3NpdGlvblkgPSBuZXcgVEludGVybVN3aXp6bGUocG9zaXRpb25SZWYsIHN3aXp6
bGVPZmZzZXRZKTsKKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9zaXRpb24u
eSAqIG5lZ0ZsaXBZIgorICAgIFRJbnRlcm1CaW5hcnkgKmludmVyc2VZID0gbmV3IFRJbnRlcm1C
aW5hcnkoRU9wTXVsLCBwb3NpdGlvblktPmRlZXBDb3B5KCksICZuZWdGbGlwWSk7CisKKyAgICAv
LyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnkgPSBnbF9Qb3NpdGlvbi55ICog
bmVnVmlld3BvcnRTY2FsZVkKKyAgICBUSW50ZXJtVHlwZWQgKnBvc2l0aW9uWUxIUyA9IHBvc2l0
aW9uWS0+ZGVlcENvcHkoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICA9IG5ldyBU
SW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBwb3NpdGlvbllMSFMsIGludmVyc2VZ
KTsKKworICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUg
ZW5kIG9mIHRoZSBzaGFkZXIuCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBp
bGVyLCAmcm9vdCwgYXNzaWdubWVudCwgJnN5bWJvbFRhYmxlKTsKK30KKworfSAgLy8gbmFtZXNw
YWNlCisKK1RyYW5zbGF0b3JNZXRhbERpcmVjdDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0KHNoOjpH
TGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNoU2hhZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQorICAgIDogVENvbXBpbGVyKHR5cGUsIHNw
ZWMsIG91dHB1dCkKK3t9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFs
RGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCkKK3sKKyAgICByZXR1cm4g
Y29uc3RhbnRfbmFtZXM6OmtDb3ZlcmFnZU1hc2tFbmFibGVkLnJhd05hbWUoKS5kYXRhKCk7Cit9
CisKKy8vIHN0YXRpYworY29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFsRGlyZWN0OjpHZXRSYXN0
ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUoKQoreworICAgIHJldHVybiBjb25zdGFu
dF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCkuZGF0YSgpOwor
fQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsRGlyZWN0OjppbnNlcnRS
YXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBUU3lt
Ym9sVGFibGUgKnN5bWJvbFRhYmxlID0gJmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICBUVHlwZSAq
Ym9vbFR5cGUgPSBuZXcgVFR5cGUoRWJ0Qm9vbCk7CisgICAgYm9vbFR5cGUtPnNldFF1YWxpZmll
cihFdnFDb25zdCk7CisgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9CisgICAgICAg
IG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGNvbnN0YW50X25hbWVzOjprUmFzdGVyaXphdGlv
bkRpc2NhcmRFbmFibGVkLnJhd05hbWUoKSwgYm9vbFR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWQuc3ltYm9sVHlw
ZSgpKTsKKworICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJblZhcmlhYmxl
OjpnbF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJ
bnRlcm1TeW1ib2wocG9zaXRpb24pOworCisgICAgLy8gQ3JlYXRlIHZlYzQoLTMsIC0zLCAtMywg
MSk6CisgICAgYXV0byB2ZWM0VHlwZSAgICAgICAgICAgICA9IG5ldyBUVHlwZShFYnRGbG9hdCwg
NCk7CisgICAgVEludGVybVNlcXVlbmNlICp2ZWM0QXJncyA9IG5ldyBUSW50ZXJtU2VxdWVuY2Uo
KTsKKyAgICB2ZWM0QXJncy0+cHVzaF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgtMy4wZikpOworICAg
IHZlYzRBcmdzLT5wdXNoX2JhY2soQ3JlYXRlRmxvYXROb2RlKC0zLjBmKSk7CisgICAgdmVjNEFy
Z3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKyAgICB2ZWM0QXJncy0+cHVz
aF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgxLjBmKSk7CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqY29u
c3RWYXJDb25zdHJ1Y3RvciA9CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0
cnVjdG9yKCp2ZWM0VHlwZSwgdmVjNEFyZ3MpOworCisgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25t
ZW50ICJnbF9Qb3NpdGlvbiA9IHZlYzQoLTMsIC0zLCAtMywgMSkiCisgICAgVEludGVybUJpbmFy
eSAqYXNzaWdubWVudCA9CisgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9w
QXNzaWduLCBwb3NpdGlvblJlZi0+ZGVlcENvcHkoKSwgY29uc3RWYXJDb25zdHJ1Y3Rvcik7CisK
KyAgICBUSW50ZXJtQmxvY2sgKmRpc2NhcmRCbG9jayA9IG5ldyBUSW50ZXJtQmxvY2s7CisgICAg
ZGlzY2FyZEJsb2NrLT5hcHBlbmRTdGF0ZW1lbnQoYXNzaWdubWVudCk7CisKKyAgICBUSW50ZXJt
U3ltYm9sICpkaXNjYXJkRW5hYmxlZCA9IG5ldyBUSW50ZXJtU3ltYm9sKGRpc2NhcmRFbmFibGVk
VmFyKTsKKyAgICBUSW50ZXJtSWZFbHNlICppZkNhbGwgICAgICAgICA9IG5ldyBUSW50ZXJtSWZF
bHNlKGRpc2NhcmRFbmFibGVkLCBkaXNjYXJkQmxvY2ssIG51bGxwdHIpOworCisgICAgcmV0dXJu
IFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgJnJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOwor
fQorCisvLyBNZXRhbCBuZWVkcyB0byBpbnZlcnNlIHRoZSBkZXB0aCBpZiBkZXB0aFJhbmdlIGlz
IGlzIHJldmVyc2Ugb3JkZXIsIGkuZS4gZGVwdGggbmVhciA+IGRlcHRoIGZhcgorLy8gVGhpcyBp
cyBhY2hpZXZlZCBieSBtdWx0aXBseSB0aGUgZGVwdGggdmFsdWUgd2l0aCBzY2FsZSB2YWx1ZSBz
dG9yZWQgaW4KKy8vIGRyaXZlciB1bmlmb3JtJ3MgZGVwdGhSYW5nZS5yZXNlcnZlZAorYm9vbCBU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbihUSW50
ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpCit7Cisg
ICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0
aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYgPSBuZXcgVEludGVybVN5bWJv
bChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFogPSB7Mn07Cisg
ICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWiAgID0gbmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0
aW9uUmVmLCBzd2l6emxlT2Zmc2V0Wik7CisKKyAgICBUSW50ZXJtQmluYXJ5ICp2aWV3cG9ydFpT
Y2FsZSA9IEdldERyaXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihkcml2ZXJV
bmlmb3Jtcyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0aW9uLnog
KiBkZXB0aFJhbmdlLnJlc2VydmVkIi4KKyAgICBUSW50ZXJtQmluYXJ5ICp6U2NhbGUgPSBuZXcg
VEludGVybUJpbmFyeShFT3BNdWwsIHBvc2l0aW9uWi0+ZGVlcENvcHkoKSwgdmlld3BvcnRaU2Nh
bGUpOworCisgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi56ID0gZ2xf
UG9zaXRpb24ueiAqIGRlcHRoUmFuZ2UucmVzZXJ2ZWQiCisgICAgVEludGVybVR5cGVkICpwb3Np
dGlvblpMSFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisgICAgVEludGVybUJpbmFyeSAqYXNz
aWdubWVudCAgPSBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRp
b25aTEhTLCB6U2NhbGUpOworCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywg
JnJvb3QsIGFzc2lnbm1lbnQsICZnZXRTeW1ib2xUYWJsZSgpKTsKK30KKwordm9pZCBUcmFuc2xh
dG9yTWV0YWxEaXJlY3Q6OmNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1GaWVs
ZHMoCisgICAgc3RkOjp2ZWN0b3I8VEZpZWxkICo+ICZmaWVsZHNPdXQpCit7CisgICAgLy8gQWRk
IGNvdmVyYWdlIG1hc2sgdG8gZHJpdmVyIHVuaWZvcm0uIE1ldGFsIGRvZXNuJ3QgaGF2ZSBidWls
dC1pbiBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUKKyAgICAvLyBlcXVpdmFsZW50IGZ1bmN0aW9u
YWxpdHksIG5lZWRzIHRvIGVtdWxhdGUgaXQgdXNpbmcgZnJhZ21lbnQgc2hhZGVyJ3MgW1tzYW1w
bGVfbWFza11dIG91dHB1dAorICAgIC8vIHZhbHVlLgorICAgIFRGaWVsZCAqY292ZXJhZ2VNYXNr
RmllbGQgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRVSW50KSwga0NvdmVyYWdlTWFza0ZpZWxk
LnJhd05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
Tm9Tb3VyY2VMb2MsIGtDb3ZlcmFnZU1hc2tGaWVsZC5zeW1ib2xUeXBlKCkpOworICAgIGZpZWxk
c091dC5wdXNoX2JhY2soY292ZXJhZ2VNYXNrRmllbGQpOworCisgICAgaWYgKG1FbXVsYXRlZElu
c3RhbmNlSUQpCisgICAgeworICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURGaWVsZCA9IG5l
dyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQucmF3TmFtZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga05vU291
cmNlTG9jLCBrRW11SW5zdGFuY2VJREZpZWxkLnN5bWJvbFR5cGUoKSk7CisgICAgICAgIGZpZWxk
c091dC5wdXNoX2JhY2soZW11SW5zdGFuY2VJREZpZWxkKTsKKyAgICB9Cit9CisKK1RJbnRlcm1T
d2l6emxlICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJl
ZigKKyAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKSBjb25zdAoreworICAgIC8v
IENyZWF0ZSBhIHN3aXp6bGUgdG8gIm5lZ0ZsaXBYWS55IgorICAgIFRJbnRlcm1CaW5hcnkgKm5l
Z0ZsaXBYWSAgICA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtOZWdG
bGlwWFkpOworICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WSA9IHsxfTsKKyAgICBUSW50
ZXJtU3dpenpsZSAqbmVnRmxpcFkgICAgPSBuZXcgVEludGVybVN3aXp6bGUobmVnRmxpcFhZLCBz
d2l6emxlT2Zmc2V0WSk7CisgICAgcmV0dXJuIG5lZ0ZsaXBZOworfQorCitzdGF0aWMgc3RkOjpz
ZXQ8SW1tdXRhYmxlU3RyaW5nPiBHZXRNc2xLZXl3b3JkcygpCit7CisgICAgc3RkOjpzZXQ8SW1t
dXRhYmxlU3RyaW5nPiBrZXl3b3JkczsKKworICAgIGtleXdvcmRzLmVtcGxhY2UoImFsaWduYXMi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJhbGlnbm9mIik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgiYXNfdHlwZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImF1dG8iKTsKKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJjYXRjaCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNoYXIiKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJjbGFzcyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNvbnN0X2Nh
c3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjb25zdGFudCIpOworICAgIGtleXdvcmRzLmVt
cGxhY2UoImNvbnN0ZXhwciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImRlY2x0eXBlIik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgiZGVsZXRlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZGV2
aWNlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZHluYW1pY19jYXN0Iik7CisgICAga2V5d29y
ZHMuZW1wbGFjZSgiZW51bSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImV4cGxpY2l0Iik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgiZXhwb3J0Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZXh0
ZXJuIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZnJhZ21lbnQiKTsKKyAgICBrZXl3b3Jkcy5l
bXBsYWNlKCJmcmllbmQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJnb3RvIik7CisgICAga2V5
d29yZHMuZW1wbGFjZSgiaGFsZiIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImlubGluZSIpOwor
ICAgIGtleXdvcmRzLmVtcGxhY2UoImludDE2X3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJp
bnQzMl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiaW50NjRfdCIpOworICAgIGtleXdvcmRz
LmVtcGxhY2UoImludDhfdCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImtlcm5lbCIpOworICAg
IGtleXdvcmRzLmVtcGxhY2UoImxvbmciKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJtYWluMCIp
OworICAgIGtleXdvcmRzLmVtcGxhY2UoIm1ldGFsIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgi
bXV0YWJsZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm5hbWVzcGFjZSIpOworICAgIGtleXdv
cmRzLmVtcGxhY2UoIm5ldyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm5vZXhjZXB0Iik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgibnVsbHB0cl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgi
bnVsbHB0ciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm9wZXJhdG9yIik7CisgICAga2V5d29y
ZHMuZW1wbGFjZSgib3ZlcnJpZGUiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJwcml2YXRlIik7
CisgICAga2V5d29yZHMuZW1wbGFjZSgicHJvdGVjdGVkIik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgicHRyZGlmZl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgicHVibGljIik7CisgICAga2V5
d29yZHMuZW1wbGFjZSgicmF5X2RhdGEiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJyZWdpc3Rl
ciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInNob3J0Iik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgic2lnbmVkIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic2l6ZV90Iik7CisgICAga2V5d29y
ZHMuZW1wbGFjZSgic2l6ZW9mIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic3RhZ2VfaW4iKTsK
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWNfYXNzZXJ0Iik7CisgICAga2V5d29yZHMuZW1w
bGFjZSgic3RhdGljX2Nhc3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWMiKTsKKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJ0ZW1wbGF0ZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInRo
aXMiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRfbG9jYWwiKTsKKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJ0aHJlYWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRncm91cF9p
bWFnZWJsb2NrIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkZ3JvdXAiKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJ0aHJvdyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInRyeSIpOwor
ICAgIGtleXdvcmRzLmVtcGxhY2UoInR5cGVkZWYiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0
eXBlaWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0eXBlbmFtZSIpOworICAgIGtleXdvcmRz
LmVtcGxhY2UoInVjaGFyIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidWludDE2X3QiKTsKKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJ1aW50MzJfdCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInVp
bnQ2NF90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidWludDhfdCIpOworICAgIGtleXdvcmRz
LmVtcGxhY2UoInVuaW9uIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidW5zaWduZWQiKTsKKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJ1c2hvcnQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1c2lu
ZyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInZlcnRleCIpOworICAgIGtleXdvcmRzLmVtcGxh
Y2UoInZpcnR1YWwiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2b2xhdGlsZSIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoIndjaGFyX3QiKTsKKworICAgIHJldHVybiBrZXl3b3JkczsKK30KKwor
Ym9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zbGF0ZUltcGwoVEludGVybUJsb2NrICZy
b290LCBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKQoreworICAgIFRTeW1ib2xUYWJs
ZSAmc3ltYm9sVGFibGUgPSBnZXRTeW1ib2xUYWJsZSgpOworICAgIElkR2VuIGlkR2VuOworICAg
IFByb2dyYW1QcmVsdWRlQ29uZmlnIHBwYzsKKworICAgIGlmICghV3JhcE1haW4oKnRoaXMsIGlk
R2VuLCByb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBU
SW5mb1NpbmtCYXNlICZzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisjaWYgMAorICAgIGlmIChn
ZXRTaGFkZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAgIGlmICgh
U2hhZGVyQnVpbHRpbnNXb3JrYXJvdW5kKHRoaXMsICZyb290LCAmc3ltYm9sVGFibGUsIGNvbXBp
bGVPcHRpb25zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBTdHJpcCBhbnkgaW5hY3RpdmUgdmFyaWFibGVz
IGZyb20gdGhlIHByb2dyYW0uCisgICAgaWYgKCFSZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlh
Ymxlcyh0aGlzLCAmcm9vdCwgZ2V0QXR0cmlidXRlcygpLCBnZXRJbnB1dFZhcnlpbmdzKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXRwdXRWYXJpYWJs
ZXMoKSwgZ2V0VW5pZm9ybXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldEludGVyZmFjZUJsb2NrcygpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSBvdXQgZGVmYXVsdCB1bmlmb3JtcyBpbnRvIGEgdW5p
Zm9ybSBibG9jayBhc3NpZ25lZCB0byBhIHNwZWNpZmljIHNldC9iaW5kaW5nLgorICAgIGludCBk
ZWZhdWx0VW5pZm9ybUNvdW50ICAgICAgICAgICA9IDA7CisgICAgaW50IGFnZ3JlZ2F0ZVR5cGVz
VXNlZEZvclVuaWZvcm1zID0gMDsKKyAgICBpbnQgYXRvbWljQ291bnRlckNvdW50ICAgICAgICAg
ICAgPSAwOworICAgIGZvciAoY29uc3QgYXV0byAmdW5pZm9ybSA6IGdldFVuaWZvcm1zKCkpCisg
ICAgeworICAgICAgICBpZiAoIXVuaWZvcm0uaXNCdWlsdEluKCkgJiYgdW5pZm9ybS5hY3RpdmUg
JiYgIWdsOjpJc09wYXF1ZVR5cGUodW5pZm9ybS50eXBlKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgKytkZWZhdWx0VW5pZm9ybUNvdW50OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVuaWZv
cm0uaXNTdHJ1Y3QoKSB8fCB1bmlmb3JtLmlzQXJyYXlPZkFycmF5cygpKQorICAgICAgICB7Cisg
ICAgICAgICAgICArK2FnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHVuaWZvcm0uYWN0aXZlICYmIGdsOjpJc0F0b21pY0NvdW50ZXJUeXBlKHVu
aWZvcm0udHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrYXRvbWljQ291bnRlckNvdW50
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZv
cm1zID4gMCkKKyAgICB7CisgICAgICAgIGlmICghTmFtZUVtYmVkZGVkU3RydWN0VW5pZm9ybXMo
dGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmV3cml0ZVN0cnVjdFNhbXBsZXJz
UmVzdWx0OworICAgICAgICBpbnQgcmVtb3ZlZFVuaWZvcm1zQ291bnQ7CisKKyAgICAgICAgaWYg
KGNvbXBpbGVPcHRpb25zICYgU0hfVVNFX09MRF9SRVdSSVRFX1NUUlVDVF9TQU1QTEVSUykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0KKyAgICAg
ICAgICAgICAgICBSZXdyaXRlU3RydWN0U2FtcGxlcnNPbGQodGhpcywgJnJvb3QsICZzeW1ib2xU
YWJsZSwgJnJlbW92ZWRVbmlmb3Jtc0NvdW50KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCA9CisgICAg
ICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzKHRoaXMsICZyb290LCAmc3ltYm9sVGFi
bGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJl
d3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHRVbmlmb3JtQ291bnQgLT0gcmVtb3Zl
ZFVuaWZvcm1zQ291bnQ7CisKKyNpZiAwCisgICAgICAgIC8vIFdlIG11c3QgZGVjbGFyZSB0aGUg
c3RydWN0IHR5cGVzIGJlZm9yZSB1c2luZyB0aGVtLgorICAgICAgICBEZWNsYXJlU3RydWN0VHlw
ZXNUcmF2ZXJzZXIgc3RydWN0VHlwZXNUcmF2ZXJzZXIob3V0cHV0TVNMKTsKKyAgICAgICAgcm9v
dC0+dHJhdmVyc2UoJnN0cnVjdFR5cGVzVHJhdmVyc2VyKTsKKyAgICAgICAgaWYgKCFzdHJ1Y3RU
eXBlc1RyYXZlcnNlci51cGRhdGVUcmVlKHRoaXMsIHJvb3QpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChj
b21waWxlT3B0aW9ucyAmIFNIX0VNVUxBVEVfU0VBTUZVTF9DVUJFX01BUF9TQU1QTElORykKKyAg
ICB7CisgICAgICAgIGlmICghUmV3cml0ZUN1YmVNYXBTYW1wbGVyc0FzMkRBcnJheSh0aGlzLCAm
cm9vdCwgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIDAK
KyAgICAvLyBXcml0ZSBkZWZhdWx0IHVuaWZvcm0gYmxvY2sKKyAgICBpZiAoZGVmYXVsdFVuaWZv
cm1Db3VudCA+IDApCisgICAgeworICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlID0g
Z2w6OkZyb21HTGVudW08Z2w6OlNoYWRlclR5cGU+KGdldFNoYWRlclR5cGUoKSk7CisgICAgICAg
IHNpbmsgPDwgIlxuc3RydWN0ICIgPDwga0RlZmF1bHRVbmlmb3JtTmFtZXNbc2hhZGVyVHlwZV0g
PDwgIlxue1xuIjsKKyAgICAgICAgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNlciBkZWZh
dWx0VHJhdmVyc2VyKCZzaW5rLCBnZXRIYXNoRnVuY3Rpb24oKSwgJmdldE5hbWVNYXAoKSk7Cisg
ICAgICAgIHJvb3QtPnRyYXZlcnNlKCZkZWZhdWx0VHJhdmVyc2VyKTsKKyAgICAgICAgaWYgKCFk
ZWZhdWx0VHJhdmVyc2VyLnVwZGF0ZVRyZWUodGhpcywgcm9vdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHNpbmsgPDwgIn07XG4i
OworICAgIH0KKyNlbmRpZgorCisgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3JtcyA9
ICpbJl0oKSB7CisgICAgICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfQ09NUFVURV9TSEFE
RVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBBZGRDb21wdXRlRHJpdmVyVW5pZm9y
bXNUb1NoYWRlcihyb290LCBzeW1ib2xUYWJsZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxURmllbGQgKj4gYWRkaXRpb25hbEZp
ZWxkczsKKyAgICAgICAgICAgIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1G
aWVsZHMoYWRkaXRpb25hbEZpZWxkcyk7CisgICAgICAgICAgICByZXR1cm4gQWRkR3JhcGhpY3NE
cml2ZXJVbmlmb3Jtc1RvU2hhZGVyKHJvb3QsIHN5bWJvbFRhYmxlLCBhZGRpdGlvbmFsRmllbGRz
KTsKKyAgICAgICAgfQorICAgIH0oKTsKKworICAgIGlmIChhdG9taWNDb3VudGVyQ291bnQgPiAw
KQorICAgIHsKKyAgICAgICAgLy8gQU5HTEVVbmlmb3Jtcy5hY2JCdWZmZXJPZmZzZXRzCisgICAg
ICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkgKmFjYkJ1ZmZlck9mZnNldHMgPQorICAgICAgICAgICAg
Q3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0FjYkJ1ZmZlck9mZnNldHMp
OworCisgICAgICAgIGlmICghUmV3cml0ZUF0b21pY0NvdW50ZXJzKHRoaXMsICZyb290LCAmc3lt
Ym9sVGFibGUsIGFjYkJ1ZmZlck9mZnNldHMpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZ2V0U2hhZGVyVmVyc2lv
bigpID49IDMxMCkKKyAgICB7CisgICAgICAgIC8vIFZ1bGthbiBkb2Vzbid0IHN1cHBvcnQgQXRv
bWljIFN0b3JhZ2UgYXMgYSBTdG9yYWdlIENsYXNzLCBidXQgd2UndmUgc2VlbgorICAgICAgICAv
LyBjYXNlcyB3aGVyZSBidWlsdGlucyBhcmUgdXNpbmcgaXQgZXZlbiB3aXRoIG5vIGFjdGl2ZSBh
dG9taWMgY291bnRlcnMuCisgICAgICAgIC8vIFRoaXMgcGFzcyBzaW1wbHkgcmVtb3ZlcyB0aG9z
ZSBidWlsdGlucyBpbiB0aGF0IHNjZW5hcmlvLgorICAgICAgICBpZiAoIVJlbW92ZUF0b21pY0Nv
dW50ZXJCdWlsdGlucyh0aGlzLCAmcm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgIT0g
R0xfQ09NUFVURV9TSEFERVIpCisgICAgeworICAgICAgICBpZiAoIVJlcGxhY2VHTERlcHRoUmFu
Z2VXaXRoRHJpdmVyVW5pZm9ybSgqdGhpcywgcm9vdCwgZHJpdmVyVW5pZm9ybXMpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAg
ICAgLy8gQWRkIHNwZWNpYWxpemF0aW9uIGNvbnN0YW50IGRlY2xhcmF0aW9ucy4gIFRoZSBkZWZh
dWx0IHZhbHVlIG9mIHRoZSBzcGVjaWFsaXphdGlvbgorICAgICAgICAvLyBjb25zdGFudCBpcyBp
cnJlbGV2YW50LCBhcyBpdCB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIHRoZSBwaXBlbGluZS4K
KyAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RF
Ul9FTVVMQVRJT04pCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpbmsgPDwgImxheW91dChjb25z
dGFudF9pZD0iCisgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90Pih2azo6
U3BlY2lhbGl6YXRpb25Db25zdGFudElkOjpMaW5lUmFzdGVyRW11bGF0aW9uKQorICAgICAgICAg
ICAgICAgICA8PCAiKSBjb25zdCBib29sICIgPDwga0xpbmVSYXN0ZXJFbXVsYXRpb25TcGVjQ29u
c3RWYXJOYW1lIDw8ICIgPSBmYWxzZTtcblxuIjsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQor
CisgICAgeworICAgICAgICBib29sIHVzZXNJbnN0YW5jZUlkID0gZmFsc2U7CisgICAgICAgIGZv
ciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJnZhciA6IG1BdHRyaWJ1dGVzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAodmFyLmlzQnVpbHRJbigpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmICh2YXIubmFtZSA9PSAiZ2xfSW5zdGFuY2VJRCIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB1c2VzSW5zdGFuY2VJZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNJbnN0
YW5jZUlkKQorICAgICAgICB7CisgICAgICAgICAgICByb290Lmluc2VydENoaWxkTm9kZXMoCisg
ICAgICAgICAgICAgICAgRmluZE1haW5JbmRleCgmcm9vdCksCisgICAgICAgICAgICAgICAgVElu
dGVybVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxlOjpnbF9J
bnN0YW5jZUlEKCl9fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZWNsYXJlIGdsX0Zy
YWdDb2xvciBhbmQgZ2xGcmFnRGF0YSBhcyB3ZWJnbF9GcmFnQ29sb3IgYW5kIHdlYmdsX0ZyYWdE
YXRhCisgICAgLy8gaWYgaXQncyBjb3JlIHByb2ZpbGUgc2hhZGVycyBhbmQgdGhleSBhcmUgdXNl
ZC4KKyAgICBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7
CisgICAgICAgIGJvb2wgdXNlc1BvaW50Q29vcmQgID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNl
c0ZyYWdDb29yZCAgID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNlc0Zyb250RmFjaW5nID0gZmFs
c2U7CisgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJmlucHV0VmFyeWluZyA6IG1J
bnB1dFZhcnlpbmdzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5wdXRWYXJ5aW5nLmlz
QnVpbHRJbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhcnlp
bmcubmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB1c2VzUG9pbnRDb29yZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnQ29vcmQi
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb29yZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0
VmFyeWluZy5uYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB1c2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdXNlc0ZyYWdDb2xv
ciA9IGZhbHNlOworICAgICAgICBib29sIHVzZXNGcmFnRGF0YSAgPSBmYWxzZTsKKyAgICAgICAg
Ym9vbCB1c2VzRnJhZ0RlcHRoID0gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFy
aWFibGUgJm91dHB1dFZhcnlpbmcgOiBtT3V0cHV0VmFyaWFibGVzKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5pc0J1aWx0SW4oKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnQ29sb3IiKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb2xvciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dHB1dFZh
cnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0RhdGEiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgdXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnRGVwdGgi
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdEZXB0aCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlc0ZyYWdD
b2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgQWRkRnJhZ0NvbG9yRGVjbGFyYXRpb24ocm9v
dCwgc3ltYm9sVGFibGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNGcmFnRGF0YSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFBZGRGcmFnRGF0YURlY2xhcmF0aW9uKCp0aGlz
LCByb290KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlc0ZyYWdEZXB0aCkKKyAg
ICAgICAgeworICAgICAgICAgICAgQWRkRnJhZ0RlcHRoRGVjbGFyYXRpb24ocm9vdCwgc3ltYm9s
VGFibGUpOworICAgICAgICB9CisKKyNpZiAwCisgICAgICAgIGlmIChjb21waWxlT3B0aW9ucyAm
IFNIX0FERF9CUkVTRU5IQU1fTElORV9SQVNURVJfRU1VTEFUSU9OKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIUFkZEJyZXNlbmhhbUVtdWxhdGlvbkZTKHRoaXMsIGNvbXBpbGVPcHRpb25z
LCBzaW5rLCByb290LCAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRyaXZlclVuaWZvcm1zLCB1c2VzRnJhZ0Nvb3JkKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlUHJlUm90YXRpb24gPSBjb21waWxlT3B0aW9u
cyAmIFNIX0FERF9QUkVfUk9UQVRJT047CisKKyAgICAgICAgaWYgKHVzZXNQb2ludENvb3JkKQor
ICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3Jl
YXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga05lZ0ZsaXBYWSk7CisgICAgICAg
ICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAmcGl2b3QgPSAqQ3JlYXRlRmxvYXROb2RlKDAuNWYp
OworICAgICAgICAgICAgVEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0KKyAgICAgICAgICAg
ICAgICB1c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9y
bXMsIGtGcmFnUm90YXRpb24pIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGlmICghUm90YXRlQW5k
RmxpcEJ1aWx0aW5WYXJpYWJsZSgqdGhpcywgcm9vdCwgKkdldE1haW5TZXF1ZW5jZShyb290KSwg
ZmxpcFhZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpC
dWlsdEluVmFyaWFibGU6OmdsX1BvaW50Q29vcmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrRmxpcHBlZFBvaW50Q29vcmROYW1lLCBwaXZvdCwgZnJh
Z1JvdGF0aW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3Qs
ICpCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50Q29vcmQoKSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFJbnNlcnRG
cmFnQ29vcmRDb3JyZWN0aW9uKCp0aGlzLCBjb21waWxlT3B0aW9ucywgcm9vdCwgKkdldE1haW5T
ZXF1ZW5jZShyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFp
bihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9GcmFnQ29vcmQoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmbGlwWFkgPSBDcmVhdGVEcml2
ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRmxpcFhZKTsKKyAgICAgICAgICAgIFRJbnRl
cm1CaW5hcnkgKmZyYWdSb3RhdGlvbiA9CisgICAgICAgICAgICAgICAgdXNlUHJlUm90YXRpb24g
PyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRnJhZ1JvdGF0aW9uKSA6
IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoIVJld3JpdGVEZmR5KHRoaXMsICZyb290LCBzeW1i
b2xUYWJsZSwgZ2V0U2hhZGVyVmVyc2lvbigpLCBmbGlwWFksIGZyYWdSb3RhdGlvbikpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNGcm9udEZhY2luZykKKyAgICAgICAgeworICAg
ICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpn
bF9Gcm9udEZhY2luZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIEVtaXRFYXJseUZyYWdtZW50
VGVzdHNHTFNMKCp0aGlzLCBzaW5rKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZ2V0U2hhZGVyVHlw
ZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgeworICAgICAgICBEZWNsYXJlUmlnaHRCZWZv
cmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCkpOworCisgICAgICAg
IGlmIChGaW5kU3ltYm9sTm9kZSgmcm9vdCwgQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2ludFNpemUo
KS0+bmFtZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFp
bihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2ludFNpemUoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoRmluZFN5bWJvbE5vZGUoJnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6Z2xfVmVy
dGV4SW5kZXgoKS0+bmFtZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFSZXBsYWNl
VmFyaWFibGUodGhpcywgJnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6Z2xfVmVydGV4SW5kZXgoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZ2xfVmVydGV4SW5kZXhNZXRhbCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCBrZ2xfVmVydGV4
SW5kZXhNZXRhbCk7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAgICAgaWYgKGNvbXBpbGVPcHRp
b25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RFUl9FTVVMQVRJT04pCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICghQWRkQnJlc2VuaGFtRW11bGF0aW9uVlModGhpcywgcm9vdCwgJnN5
bWJvbFRhYmxlLCBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
QWRkIGEgbWFjcm8gdG8gZGVjbGFyZSB0cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVycy4KKyAgICAg
ICAgc2luayA8PCAiQEAgWEZCLURFQ0wgQEBcblxuIjsKKyNlbmRpZgorCisgICAgICAgIC8vIEFw
cGVuZCBhIG1hY3JvIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgc3Vic3RpdHV0aW9uIHByaW9yIHRv
IG1vZGlmeWluZyBkZXB0aC4KKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJUcmFuc2Zv
cm1GZWVkYmFja091dHB1dFRvTWFpbigqdGhpcywgcm9vdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlYXJjaCBmb3IgdGhl
IGdsX0NsaXBEaXN0YW5jZSB1c2FnZSwgaWYgaXRzIHVzZWQsIHdlIG5lZWQgdG8gZG8gc29tZSBy
ZXBsYWNlbWVudHMuCisgICAgICAgIGJvb2wgdXNlQ2xpcERpc3RhbmNlID0gZmFsc2U7CisgICAg
ICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcnlpbmcgOiBtT3V0cHV0VmFy
eWluZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvdXRwdXRWYXJ5aW5nLm5hbWUgPT0g
ImdsX0NsaXBEaXN0YW5jZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXNlQ2xp
cERpc3RhbmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VDbGlwRGlzdGFuY2UgJiYgIVJlcGxhY2VDbGlw
RGlzdGFuY2VBc3NpZ25tZW50cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0NsaXBEaXN0YW5j
ZXNFbmFibGVkKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKHJvb3Qs
IGRyaXZlclVuaWZvcm1zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJEZXB0aENvcnJlY3Rp
b25Ub01haW4oKnRoaXMsIHJvb3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGNvbXBpbGVPcHRpb25zICYgU0hfQUREX1BS
RV9ST1RBVElPTikgIT0gMCAmJgorICAgICAgICAgICAgIUFwcGVuZFByZVJvdGF0aW9uKCp0aGlz
LCByb290LCBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0g
R0xfR0VPTUVUUllfU0hBREVSKQorICAgIHsKKyAgICAgICAgV3JpdGVHZW9tZXRyeVNoYWRlckxh
eW91dFF1YWxpZmllcnMoCisgICAgICAgICAgICBzaW5rLCBnZXRHZW9tZXRyeVNoYWRlcklucHV0
UHJpbWl0aXZlVHlwZSgpLCBnZXRHZW9tZXRyeVNoYWRlckludm9jYXRpb25zKCksCisgICAgICAg
ICAgICBnZXRHZW9tZXRyeVNoYWRlck91dHB1dFByaW1pdGl2ZVR5cGUoKSwgZ2V0R2VvbWV0cnlT
aGFkZXJNYXhWZXJ0aWNlcygpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NIQURFUik7CisgICAgICAgIEVtaXRX
b3JrR3JvdXBTaXplR0xTTCgqdGhpcywgc2luayk7CisgICAgfQorCisgICAgaWYgKGdldFNoYWRl
clR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgYXV0byAmbmVnRmxp
cFkgPSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKGRyaXZlclVuaWZvcm1zKTsKKworICAg
ICAgICBpZiAobUVtdWxhdGVkSW5zdGFuY2VJRCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFFbXVsYXRlSW5zdGFuY2VJRCgqdGhpcywgcm9vdCwgZHJpdmVyVW5pZm9ybXMpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghQXBwZW5kVmVydGV4U2hhZGVyUG9zaXRpb25ZQ29ycmVj
dGlvblRvTWFpbigqdGhpcywgcm9vdCwgbmVnRmxpcFkpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWluc2VydFJhc3Rlcml6
YXRpb25EaXNjYXJkTG9naWMocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghdmFsaWRhdGVBU1QoJnJvb3QpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghUmV3cml0ZUtl
eXdvcmRzKCp0aGlzLCByb290LCBpZEdlbiwgR2V0TXNsS2V5d29yZHMoKSkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZWR1Y2VJbnRlcmZhY2VCbG9j
a3MoKnRoaXMsIHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0
aGUgbGFyZ2VzdCBzaXplIHJlcXVpcmVkIHRvIHBhc3MgYWxsIHRoZSB0ZXN0cyBpbgorICAgIC8v
IChkRVFQLUdMRVMzLmZ1bmN0aW9uYWwuc2hhZGVycy5sYXJnZV9jb25zdGFudF9hcnJheXMpCisg
ICAgLy8gVGhpcyB2YWx1ZSBjb3VsZCBpbiBwcmluY2lwbGUgYmUgc21hbGxlci4KKyAgICBjb25z
dCBzaXplX3QgaG9pc3RUaHJlc2hvbGRTaXplID0gMjU2OworICAgIGlmICghSG9pc3RDb25zdGFu
dHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBob2lzdFRocmVzaG9sZFNpemUpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEludmFyaWFudHMgaW52YXJpYW50czsKKyAg
ICBpZiAoIVJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscygqdGhpcywgcm9vdCwgaW52YXJpYW50
cykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3ltYm9sRW52
IHN5bWJvbEVudigqdGhpcywgcm9vdCk7CisKKyAgICBpZiAoIUFkZEV4cGxpY2l0VHlwZUNhc3Rz
KCp0aGlzLCByb290LCBzeW1ib2xFbnYpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIFBpcGVsaW5lU3RydWN0cyBwaXBlbGluZVN0cnVjdHM7CisgICAgaWYgKCFS
ZXdyaXRlUGlwZWxpbmVzKCp0aGlzLCByb290LCBpZEdlbiwgZHJpdmVyVW5pZm9ybXMsIHN5bWJv
bEVudiwgaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVTdHJ1
Y3RzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVNl
cGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucygqdGhpcywgc3ltYm9sRW52LCBpZEdlbiwgcm9vdCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZXdyaXRl
Q2FzZURlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMoKnRo
aXMsIHJvb3QsIHN5bWJvbEVudikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCFSZXdyaXRlT3V0QXJncygqdGhpcywgcm9vdCwgc3ltYm9sRW52KSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVRvcG9zb3J0U3Ry
dWN0cygqdGhpcywgc3ltYm9sRW52LCByb290LCBwcGMpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmICghRW1pdE1ldGFsKCp0aGlzLCByb290LCBpZEdlbiwg
cGlwZWxpbmVTdHJ1Y3RzLCBpbnZhcmlhbnRzLCBzeW1ib2xFbnYsIHBwYykpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKHZhbGlkYXRlQVNUKCZyb290
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6
OnRyYW5zbGF0ZShUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlRGlhZ25vc3RpY3MgKnBlcmZE
aWFnbm9zdGljcykKK3sKKyAgICBpZiAoIXJvb3QpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5rKCkub2Jq
OworCisgICAgYm9vbCBwcmVjaXNpb25FbXVsYXRpb24gPSBmYWxzZTsKKyAgICBpZiAoIWVtdWxh
dGVQcmVjaXNpb25JZk5lZWRlZChyb290LCBzaW5rLCAmcHJlY2lzaW9uRW11bGF0aW9uLCBTSF9H
TFNMX1ZVTEtBTl9PVVRQVVQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworI2lmIDAKKyAgICBib29sIGVuYWJsZVByZWNpc2lvbiA9ICgoY29tcGlsZU9wdGlvbnMgJiBT
SF9JR05PUkVfUFJFQ0lTSU9OX1FVQUxJRklFUlMpID09IDApOworCisgICAgVE91dHB1dE1TTCBv
dXRwdXRNU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1
bmN0aW9uKCksIGdldE5hbWVNYXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmZ2V0U3lt
Ym9sVGFibGUoKSwgZ2V0U2hhZGVyVHlwZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCksIGdldE91dHB1
dFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb25FbXVsYXRpb24sIGVu
YWJsZVByZWNpc2lvbiwgY29tcGlsZU9wdGlvbnMpOworI2VuZGlmCisKKyAgICBpZiAoIXRyYW5z
bGF0ZUltcGwoKnJvb3QsIGNvbXBpbGVPcHRpb25zKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyNpZiAwCisgICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCisg
ICAgcm9vdC0+dHJhdmVyc2Uob3V0cHV0TVNMKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7
Cit9Citib29sIFRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdtYVN0ZGds
SW52YXJpYW50QWxsKCkKK3sKKyAgICAvLyBOb3QgbmVjY2VzYXJ5IGZvciBNU0wgdHJhbnNmb3Jt
YXRpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWZjYjMw
NjcxOTc3YmY1ODFiNmFjMjU3MzIxYzdkMTZmNjZmYzU2ZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC5oCkBAIC0wLDAgKzEsMTMyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworY2xhc3MgVE91dHB1
dE1TTDsKKwordHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8c2l6ZV90LCBzdGQ6OnN0cmluZz4g
b3JpZ2luYWxOYW1lc01hcDsKK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCBzaXplX3Q+IHNhbXBsZXJCaW5kaW5nTWFwOwordHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8
c3RkOjpzdHJpbmcsIHNpemVfdD4gdGV4dHVyZUJpbmRpbmdNYXA7Cit0eXBlZGVmIHN0ZDo6dW5v
cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc2l6ZV90PiB1bmlmb3JtQnVmZmVyQmluZGluZ01hcDsK
KworY2xhc3MgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbgoreworICBwdWJsaWM6CisgICAgVHJh
bnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHt9CisgICAgflRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rp
b24oKSB7fQorCisgICAgdm9pZCBhZGRPcmlnaW5hbE5hbWUoY29uc3Qgc2l6ZV90IGlkLCBjb25z
dCBzdGQ6OnN0cmluZyAmbmFtZSkKKyAgICB7CisgICAgICAgIG9yaWdpbmFsTmFtZXMuaW5zZXJ0
KHtpZCwgbmFtZX0pOworICAgIH0KKyAgICB2b2lkIGFkZFNhbXBsZXJCaW5kaW5nKGNvbnN0IHN0
ZDo6c3RyaW5nICZuYW1lLCBzaXplX3Qgc2FtcGxlckJpbmRpbmcpCisgICAgeworICAgICAgICBz
YW1wbGVyQmluZGluZ3MuaW5zZXJ0KHtuYW1lLCBzYW1wbGVyQmluZGluZ30pOworICAgIH0KKyAg
ICB2b2lkIGFkZFRleHR1cmVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3Qg
dGV4dHVyZUJpbmRpbmcpCisgICAgeworICAgICAgICB0ZXh0dXJlQmluZGluZ3MuaW5zZXJ0KHtu
YW1lLCB0ZXh0dXJlQmluZGluZ30pOworICAgIH0KKyAgICB2b2lkIGFkZFVuaWZvcm1CdWZmZXJC
aW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3QgdW5pZm9ybUJ1ZmZlckJpbmRp
bmcpCisgICAgeworICAgICAgICB1bmlmb3JtQnVmZmVyQmluZGluZ3MuaW5zZXJ0KHtuYW1lLCB1
bmlmb3JtQnVmZmVyQmluZGluZ30pOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBnZXRPcmlnaW5h
bE5hbWUoY29uc3Qgc2l6ZV90IGlkKSB7IHJldHVybiBvcmlnaW5hbE5hbWVzLmF0KGlkKTsgfQor
ICAgIHNhbXBsZXJCaW5kaW5nTWFwIGdldFNhbXBsZXJCaW5kaW5ncygpIGNvbnN0IHsgcmV0dXJu
IHNhbXBsZXJCaW5kaW5nczsgfQorICAgIHRleHR1cmVCaW5kaW5nTWFwIGdldFRleHR1cmVCaW5k
aW5ncygpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmVCaW5kaW5nczsgfQorICAgIHVuaWZvcm1CdWZm
ZXJCaW5kaW5nTWFwIGdldFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpIGNvbnN0IHsgcmV0dXJuIHVu
aWZvcm1CdWZmZXJCaW5kaW5nczsgfQorICAgIHNpemVfdCBnZXRTYW1wbGVyQmluZGluZyhjb25z
dCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQgPSBzYW1w
bGVyQmluZGluZ3MuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ICE9IHNhbXBsZXJCaW5kaW5n
cy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKDApOworICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKTsKKyAgICB9CisgICAgc2l6ZV90IGdldFRleHR1cmVCaW5kaW5n
KGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byBpdCA9
IHRleHR1cmVCaW5kaW5ncy5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXQgIT0gdGV4dHVyZUJp
bmRpbmdzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPHNpemVfdD46Om1heCgpOworICAgIH0KKyAgICBzaXplX3QgZ2V0VW5pZm9ybUJ1
ZmZlckJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0CisgICAgeworICAgICAg
ICBhdXRvIGl0ID0gdW5pZm9ybUJ1ZmZlckJpbmRpbmdzLmZpbmQobmFtZSk7CisgICAgICAgIGlm
IChpdCAhPSB1bmlmb3JtQnVmZmVyQmluZGluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgwKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7CisgICAgfQor
ICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgb3JpZ2luYWxOYW1lcy5jbGVhcigpOwor
ICAgICAgICBzYW1wbGVyQmluZGluZ3MuY2xlYXIoKTsKKyAgICAgICAgdGV4dHVyZUJpbmRpbmdz
LmNsZWFyKCk7CisgICAgICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5ncy5jbGVhcigpOworICAgIH0K
KworICBwcml2YXRlOgorICAgIG9yaWdpbmFsTmFtZXNNYXAgb3JpZ2luYWxOYW1lczsKKyAgICBz
YW1wbGVyQmluZGluZ01hcCBzYW1wbGVyQmluZGluZ3M7CisgICAgdGV4dHVyZUJpbmRpbmdNYXAg
dGV4dHVyZUJpbmRpbmdzOworICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwIHVuaWZvcm1CdWZm
ZXJCaW5kaW5nczsKK307CisKK2NsYXNzIFRyYW5zbGF0b3JNZXRhbERpcmVjdCA6IHB1YmxpYyBU
Q29tcGlsZXIKK3sKKyAgcHVibGljOgorICAgIFRyYW5zbGF0b3JNZXRhbERpcmVjdChzaDo6R0xl
bnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOworCisj
aWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisgICAgVHJhbnNsYXRvck1ldGFsRGlyZWN0ICpnZXRB
c1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKyNlbmRp
ZgorCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5h
bWUoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqR2V0UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFi
bGVkQ29uc3ROYW1lKCk7CisKKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5zdGFuY2VJRChib29s
IGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKyAgICBUcmFuc2xhdG9yTWV0YWxSZWZs
ZWN0aW9uICpnZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCkgeyByZXR1cm4gJnRyYW5zbGF0
b3JNZXRhbFJlZmxlY3Rpb247IH0KKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB0cmFuc2xhdGUo
VEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMg
Y29tcGlsZU9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VEaWFnbm9zdGlj
cyAqcGVyZkRpYWdub3N0aWNzKSBvdmVycmlkZTsKKworICAgIEFOR0xFX05PX0RJU0NBUkQgYm9v
bCB0cmFuc2xhdGVJbXBsKFRJbnRlcm1CbG9jayAmcm9vdCwgU2hDb21waWxlT3B0aW9ucyBjb21w
aWxlT3B0aW9ucyk7CisKKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgc2hvdWxkRmxhdHRlblBy
YWdtYVN0ZGdsSW52YXJpYW50QWxsKCkgb3ZlcnJpZGU7CisKKyAgICBBTkdMRV9OT19ESVNDQVJE
IGJvb2wgdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpOworICAgIEFOR0xFX05PX0RJU0NBUkQg
Ym9vbCBpbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCk7
CisKKyAgICB2b2lkIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1GaWVsZHMo
c3RkOjp2ZWN0b3I8VEZpZWxkICo+ICZmaWVsZHNPdXQpOworCisgICAgQU5HTEVfTk9fRElTQ0FS
RCBUSW50ZXJtU3dpenpsZSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKAorICAgICAgICBj
b25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKSBjb25zdDsKKworICAgIGJvb2wgbUVtdWxh
dGVkSW5zdGFuY2VJRCA9IGZhbHNlOworCisgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiB0
cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uID0ge307Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugc2gK
KworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9I
XwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM0MTE4MGE5
MDA0NDIxZWJiNTMyZmYxOGMzMzRkODZhNmU2Y2RjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKQEAgLTAsMCArMSw5NSBAQAorLy8KKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNo
OworCituYW1lc3BhY2UKK3sKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJlYnVp
bGQKK3sKKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisKKyAgcHVibGljOgorICAgIFJld3Jp
dGVyKFRDb21waWxlciAmY29tcGlsZXIsIFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAgICAgICA6
IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksIG1TeW1ib2xFbnYoc3ltYm9s
RW52KQorICAgIHt9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJt
QWdncmVnYXRlICZjYWxsTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IHNpemVf
dCBhcmdDb3VudCA9IGNhbGxOb2RlLmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgY29uc3QgVFR5
cGUgJnJldFR5cGUgID0gY2FsbE5vZGUuZ2V0VHlwZSgpOworCisgICAgICAgIGlmIChjYWxsTm9k
ZS5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc1NjYWxhckJh
c2ljVHlwZShyZXRUeXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJn
Q291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCAmYXJnICAgPSBHZXRBcmcoY2FsbE5vZGUsIDApOworICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUVHlwZSBhcmdUeXBlID0gYXJnLmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZ1R5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZXJjZVNpbXBsZShyZXRUeXBlLCBTdWJWZWN0b3Io
YXJnLCAwLCAxKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmlzVmVjdG9yKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID09IDEpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmFyZyAgID0gR2V0
QXJnKGNhbGxOb2RlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgYXJnVHlw
ZSA9IGFyZy5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlLmlzVmVj
dG9yKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBDb2VyY2VTaW1wbGUocmV0VHlwZSwgU3ViVmVjdG9yKGFyZywgMCwgcmV0VHlwZS5nZXRO
b21pbmFsU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZhcmcg
PSBHZXRBcmcoY2FsbE5vZGUsIGkpOworICAgICAgICAgICAgICAgICAgICBTZXRBcmcoY2FsbE5v
ZGUsIGksIENvZXJjZVNpbXBsZShyZXRUeXBlLmdldEJhc2ljVHlwZSgpLCBhcmcpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBl
LmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50
ID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFR5cGUgYXJnVHlwZSA9IGFyZy5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChhcmdUeXBlLmlzTWF0cml4KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZXRUeXBlLmdldENvbHMoKSAhPSBhcmdUeXBlLmdldENvbHMoKSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFR5cGUuZ2V0Um93cygpICE9IGFyZ1R5
cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRlbXBsYXRlQXJnIHRlbXBsYXRlQXJnc1tdID0ge3JldFR5cGUuZ2V0Q29s
cygpLCByZXRUeXBlLmdldFJvd3MoKX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5hbWUoImNhc3QiKSwgcmV0VHlwZSwgKm5ldyBUSW50ZXJtU2VxdWVuY2V7
JmFyZ30sIDIsIHRlbXBsYXRlQXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gY2FsbE5vZGU7CisgICAgfQorfTsKKworfSAgLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCitib29sIHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyhUQ29tcGls
ZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3ltYm9sRW52KQor
eworICAgIFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzeW1ib2xFbnYpOworICAgIGlmICgh
cmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fk
ZEV4cGxpY2l0VHlwZUNhc3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi41MDM0Mjg4OWE2ZjJlNmVjYzcxNWE1Mjc1NzM4MTJjMjFlYzkyZTdkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgKQEAg
LTAsMCArMSwyNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBMSUNJVFRZUEVDQVNUU19IXworI2RlZmluZSBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBMSUNJVFRZUEVDQVNU
U19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVs
dWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBBZGRzIGV4cGxpY2l0IHR5
cGUgY2FzdHMgaW50byB0aGUgQVNUIHdoZXJlIGNhc3RpbmcgaXMgZG9uZSBpbXBsaWNpdGx5Lgor
QU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEV4cGxpY2l0VHlwZUNhc3RzKFRDb21waWxlciAmY29t
cGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQURERVhQTElDSVRU
WVBFQ0FTVFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmE0ZWM3N2RlYmRjZmI3MWY1
MDUzMTYzZDZhZGJiMWRhOGE0YjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fz
dEhlbHBlcnMuY3BwCkBAIC0wLDAgKzEsNDc0IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y3N0
cmluZz4KKyNpbmNsdWRlIDxudW1lcmljPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5j
bHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOwor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitEZWNsYXJhdGlvbiBzaDo6Vmlld0RlY2xhcmF0
aW9uKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5vZGUpCit7CisgICAgQVNTRVJUKGRlY2xOb2Rl
LmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICBUSW50ZXJtTm9kZSAqY2hpbGROb2RlID0gZGVj
bE5vZGUuZ2V0Q2hpbGROb2RlKDApOworICAgIEFTU0VSVChjaGlsZE5vZGUpOworICAgIFRJbnRl
cm1TeW1ib2wgKnN5bWJvbE5vZGU7CisgICAgaWYgKChzeW1ib2xOb2RlID0gY2hpbGROb2RlLT5n
ZXRBc1N5bWJvbE5vZGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4geypzeW1ib2xOb2RlLCBu
dWxscHRyfTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVEludGVybUJpbmFyeSAq
aW5pdE5vZGUgPSBjaGlsZE5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICBBU1NFUlQo
aW5pdE5vZGUpOworICAgICAgICBBU1NFUlQoaW5pdE5vZGUtPmdldE9wKCkgPT0gVE9wZXJhdG9y
OjpFT3BJbml0aWFsaXplKTsKKyAgICAgICAgc3ltYm9sTm9kZSA9IGluaXROb2RlLT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSk7CisgICAg
ICAgIHJldHVybiB7KnN5bWJvbE5vZGUsIGluaXROb2RlLT5nZXRSaWdodCgpfTsKKyAgICB9Cit9
CisKK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0ZVN0cnVjdFR5cGVWYXJpYWJsZShUU3ltYm9s
VGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKK3sKKyAgICBhdXRvICp0eXBl
ID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIHRydWUpOworICAgIGF1dG8gKnZhciAgPSBuZXcgVFZh
cmlhYmxlKCZzeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCIiKSwgdHlwZSwgU3ltYm9sVHlw
ZTo6RW1wdHkpOworICAgIHJldHVybiAqdmFyOworfQorCitjb25zdCBUVmFyaWFibGUgJnNoOjpD
cmVhdGVJbnN0YW5jZVZhcmlhYmxlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0
cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5U2l6ZXMp
Cit7CisgICAgYXV0byAqdHlwZSA9IG5ldyBUVHlwZSgmc3RydWN0dXJlLCBmYWxzZSk7CisgICAg
dHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisgICAgaWYgKGFycmF5U2l6ZXMpCisgICAg
eworICAgICAgICB0eXBlLT5tYWtlQXJyYXlzKCphcnJheVNpemVzKTsKKyAgICB9CisgICAgYXV0
byAqdmFyID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCB0eXBl
LCBuYW1lLnN5bWJvbFR5cGUoKSk7CisgICAgcmV0dXJuICp2YXI7Cit9CisKK3N0YXRpYyB2b2lk
IEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAm
c3JjKQoreworICAgIGlmIChzcmMuaXNEZWZpbmVkKCkpCisgICAgeworICAgICAgICBkZXN0LnNl
dERlZmluZWQoKTsKKyAgICB9CisKKyAgICBpZiAoc3JjLmhhc1Byb3RvdHlwZURlY2xhcmF0aW9u
KCkpCisgICAgeworICAgICAgICBkZXN0LnNldEhhc1Byb3RvdHlwZURlY2xhcmF0aW9uKCk7Cisg
ICAgfQorfQorCitUSW50ZXJtU2VxdWVuY2UgJnNoOjpDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZChj
b25zdCBUSW50ZXJtU2VxdWVuY2UgJnNlcSwgVEludGVybU5vZGUgJm5vZGUpCit7CisgICAgYXV0
byAqbmV3U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5jZSgpOworICAgIG5ld1NlcS0+cHVzaF9iYWNr
KCZub2RlKTsKKworICAgIGZvciAoVEludGVybU5vZGUgKm9sZE5vZGUgOiBzZXEpCisgICAgewor
ICAgICAgICBuZXdTZXEtPnB1c2hfYmFjayhvbGROb2RlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Km5ld1NlcTsKK30KKwordm9pZCBzaDo6QWRkUGFyYW1ldGVyc0Zyb20oVEZ1bmN0aW9uICZkZXN0
LCBjb25zdCBURnVuY3Rpb24gJnNyYykKK3sKKyAgICBjb25zdCBzaXplX3QgcGFyYW1Db3VudCA9
IHNyYy5nZXRQYXJhbUNvdW50KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbUNv
dW50OyArK2kpCisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhciA9IHNyYy5nZXRQ
YXJhbShpKTsKKyAgICAgICAgZGVzdC5hZGRQYXJhbWV0ZXIodmFyKTsKKyAgICB9Cit9CisKK2Nv
bnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb24oVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMp
Cit7CisgICAgQVNTRVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJE
ZWZpbmVkKTsKKworICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoTmFtZShv
bGRGdW5jKSk7CisKKyAgICBhdXRvICZuZXdGdW5jID0gKm5ldyBURnVuY3Rpb24oJnN5bWJvbFRh
YmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xUeXBlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRGdW5jLmdldFJldHVyblR5cGUoKSwgb2xkRnVu
Yy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7CisKKyAgICBBY3F1aXJlRnVuY3Rpb25F
eHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywg
b2xkRnVuYyk7CisKKyAgICByZXR1cm4gbmV3RnVuYzsKK30KKworY29uc3QgVEZ1bmN0aW9uICZz
aDo6Q2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdl
biAqaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZuZXdQYXJhbSkKK3sKKyAg
ICBBU1NFUlQob2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6VXNlckRlZmluZWQg
fHwKKyAgICAgICAgICAgb2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJ
bnRlcm5hbCk7CisKKyAgICBOYW1lIG5ld05hbWUgPSBpZEdlbiA/IGlkR2VuLT5jcmVhdGVOZXdO
YW1lKE5hbWUob2xkRnVuYykpIDogTmFtZShvbGRGdW5jKTsKKworICAgIGF1dG8gJm5ld0Z1bmMg
PSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBuZXdOYW1l
LnN5bWJvbFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9sZEZ1
bmMuZ2V0UmV0dXJuVHlwZSgpLCBvbGRGdW5jLmlzS25vd25Ub05vdEhhdmVTaWRlRWZmZWN0cygp
KTsKKworICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsKKyAgICBu
ZXdGdW5jLmFkZFBhcmFtZXRlcigmbmV3UGFyYW0pOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5l
d0Z1bmMsIG9sZEZ1bmMpOworCisgICAgcmV0dXJuIG5ld0Z1bmM7Cit9CisKK2NvbnN0IFRGdW5j
dGlvbiAmc2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMoVFN5bWJvbFRhYmxlICZzeW1i
b2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSWRHZW4gKmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNvbnN0IFRW
YXJpYWJsZSAqPiAmbmV3UGFyYW1zKQoreworICAgIEFTU0VSVChvbGRGdW5jLnN5bWJvbFR5cGUo
KSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCB8fAorICAgICAgICAgICBvbGRGdW5jLnN5bWJv
bFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworICAgIE5hbWUgbmV3TmFt
ZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSkgOiBOYW1lKG9s
ZEZ1bmMpOworCisgICAgYXV0byAmbmV3RnVuYyA9ICpuZXcgVEZ1bmN0aW9uKCZzeW1ib2xUYWJs
ZSwgbmV3TmFtZS5yYXdOYW1lKCksIG5ld05hbWUuc3ltYm9sVHlwZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmb2xkRnVuYy5nZXRSZXR1cm5UeXBlKCksIG9sZEZ1bmMu
aXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworCisgICAgQWNxdWlyZUZ1bmN0aW9uRXh0
cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5ld0Z1bmMsIG9s
ZEZ1bmMpOworICAgIGZvciAoYXV0byAqcGFyYW0gOiBuZXdQYXJhbXMpCisgICAgeworICAgICAg
ICBuZXdGdW5jLmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgfQorCisgICAgcmV0dXJuIG5ld0Z1
bmM7Cit9CisKK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb25BbmRDaGFuZ2VSZXR1
cm5UeXBlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rp
b24gJm9sZEZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZuZXdSZXR1cm4pCit7CisgICAgQVNTRVJUKG9s
ZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKworICAgIE5h
bWUgbmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSkg
OiBOYW1lKG9sZEZ1bmMpOworCisgICAgYXV0byAqbmV3UmV0dXJuVHlwZSA9IG5ldyBUVHlwZSgm
bmV3UmV0dXJuLCB0cnVlKTsKKyAgICBhdXRvICZuZXdGdW5jICAgICAgID0gKm5ldyBURnVuY3Rp
b24oJnN5bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xUeXBlKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JldHVyblR5cGUsIG9sZEZ1
bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworCisgICAgQWNxdWlyZUZ1bmN0aW9u
RXh0cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5ld0Z1bmMs
IG9sZEZ1bmMpOworCisgICAgcmV0dXJuIG5ld0Z1bmM7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6
OkdldEFyZyhjb25zdCBUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgpCit7Cisg
ICAgQVNTRVJUKGluZGV4IDwgY2FsbC5nZXRDaGlsZENvdW50KCkpOworICAgIGF1dG8gKmFyZyA9
IGNhbGwuZ2V0Q2hpbGROb2RlKGluZGV4KTsKKyAgICBBU1NFUlQoYXJnKTsKKyAgICBhdXRvICp0
YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisgICAgQVNTRVJUKHRhcmcpOworICAgIHJldHVybiAq
dGFyZzsKK30KKwordm9pZCBzaDo6U2V0QXJnKFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVf
dCBpbmRleCwgVEludGVybVR5cGVkICZhcmcpCit7CisgICAgQVNTRVJUKGluZGV4IDwgY2FsbC5n
ZXRDaGlsZENvdW50KCkpOworICAgICgqY2FsbC5nZXRTZXF1ZW5jZSgpKVtpbmRleF0gPSAmYXJn
OworfQorCitpbnQgc2g6OkdldEZpZWxkSW5kZXgoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
LCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSkKK3sKKyAgICBjb25zdCBURmllbGRM
aXN0ICZmaWVsZExpc3QgPSBzdHJ1Y3R1cmUuZmllbGRzKCk7CisKKyAgICBpbnQgaSA9IDA7Cisg
ICAgZm9yIChURmllbGQgKmZpZWxkIDogZmllbGRMaXN0KQorICAgIHsKKyAgICAgICAgaWYgKGZp
ZWxkLT5uYW1lKCkgPT0gZmllbGROYW1lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aTsKKyAgICAgICAgfQorICAgICAgICArK2k7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQor
CitUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoY29uc3QgVFZhcmlhYmxlICZzdHJ1Y3RJ
bnN0YW5jZVZhciwgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZmaWVsZE5hbWUpCit7CisgICAgcmV0
dXJuIEFjY2Vzc0ZpZWxkKCpuZXcgVEludGVybVN5bWJvbCgmc3RydWN0SW5zdGFuY2VWYXIpLCBm
aWVsZE5hbWUpOworfQorCitUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoVEludGVybVR5
cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKQoreworICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IG9iamVjdC5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7
CisgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisKKyAgICBjb25zdCBpbnQgaW5kZXggPSBHZXRGaWVs
ZEluZGV4KCpzdHJ1Y3R1cmUsIGZpZWxkTmFtZSk7CisgICAgQVNTRVJUKGluZGV4ID49IDApOwor
ICAgIHJldHVybiBBY2Nlc3NGaWVsZEJ5SW5kZXgob2JqZWN0LCBpbmRleCk7Cit9CisKK1RJbnRl
cm1CaW5hcnkgJnNoOjpBY2Nlc3NGaWVsZEJ5SW5kZXgoVEludGVybVR5cGVkICZvYmplY3QsIGlu
dCBpbmRleCkKK3sKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICAgIGNvbnN0
IFRUeXBlICZ0eXBlID0gb2JqZWN0LmdldFR5cGUoKTsKKyAgICBBU1NFUlQoIXR5cGUuaXNBcnJh
eSgpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgp
OworICAgIEFTU0VSVChzdHJ1Y3R1cmUpOworICAgIEFTU0VSVCgwIDw9IGluZGV4KTsKKyAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBzdHJ1Y3R1cmUtPmZpZWxkcygpLnNp
emUoKSk7CisjZW5kaWYKKworICAgIHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoCisgICAgICAg
IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICZvYmplY3QsCisgICAgICAgIG5ldyBU
SW50ZXJtQ29uc3RhbnRVbmlvbihuZXcgVENvbnN0YW50VW5pb24oaW5kZXgpLCAqbmV3IFRUeXBl
KFRCYXNpY1R5cGU6OkVidEludCkpKTsKK30KKworVEludGVybUJpbmFyeSAmc2g6OkFjY2Vzc0lu
ZGV4KFRJbnRlcm1UeXBlZCAmaW5kZXhhYmxlTm9kZSwgaW50IGluZGV4KQoreworI2lmIGRlZmlu
ZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBpbmRleGFi
bGVOb2RlLmdldFR5cGUoKTsKKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkgfHwgdHlwZS5pc1Zl
Y3RvcigpIHx8IHR5cGUuaXNNYXRyaXgoKSk7CisjZW5kaWYKKworICAgIGF1dG8gKmFjY2Vzc05v
ZGUgPSBuZXcgVEludGVybUJpbmFyeSgKKyAgICAgICAgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVj
dCwgJmluZGV4YWJsZU5vZGUsCisgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbihuZXcg
VENvbnN0YW50VW5pb24oaW5kZXgpLCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkpKTsK
KyAgICByZXR1cm4gKmFjY2Vzc05vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OkFjY2Vzc0lu
ZGV4KFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCkKK3sKKyAgICBpZiAoaW5k
ZXgpCisgICAgeworICAgICAgICByZXR1cm4gQWNjZXNzSW5kZXgobm9kZSwgKmluZGV4KTsKKyAg
ICB9CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OlN1YlZlY3RvcihU
SW50ZXJtVHlwZWQgJnZlY3Rvck5vZGUsIGludCBiZWdpbiwgaW50IGVuZCkKK3sKKyAgICBBU1NF
UlQodmVjdG9yTm9kZS5nZXRUeXBlKCkuaXNWZWN0b3IoKSk7CisgICAgQVNTRVJUKDAgPD0gYmVn
aW4pOworICAgIEFTU0VSVChlbmQgPD0gNCk7CisgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7Cisg
ICAgaWYgKGJlZ2luID09IDAgJiYgZW5kID09IHZlY3Rvck5vZGUuZ2V0VHlwZSgpLmdldE5vbWlu
YWxTaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gdmVjdG9yTm9kZTsKKyAgICB9CisgICAg
VFZlY3RvcjxpbnQ+IG9mZnNldHMoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbmQgLSBiZWdpbikpOwor
ICAgIHN0ZDo6aW90YShvZmZzZXRzLmJlZ2luKCksIG9mZnNldHMuZW5kKCksIGJlZ2luKTsKKyAg
ICBhdXRvICpzd2l6emxlID0gbmV3IFRJbnRlcm1Td2l6emxlKCZ2ZWN0b3JOb2RlLCBvZmZzZXRz
KTsKKyAgICByZXR1cm4gKnN3aXp6bGU7Cit9CisKK2Jvb2wgc2g6OklzU2NhbGFyQmFzaWNUeXBl
KGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc1NjYWxhcigpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gSGFzU2NhbGFyQmFzaWNU
eXBlKHR5cGUpOworfQorCitib29sIHNoOjpJc1ZlY3RvckJhc2ljVHlwZShjb25zdCBUVHlwZSAm
dHlwZSkKK3sKKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKTsKK30K
KworYm9vbCBzaDo6SGFzU2NhbGFyQmFzaWNUeXBlKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0Ogor
ICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidERvdWJsZToKKyAgICAgICAgY2FzZSBUQmFzaWNU
eXBlOjpFYnRJbnQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDoKKyAgICAgICAg
Y2FzZSBUQmFzaWNUeXBlOjpFYnRCb29sOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgc2g6Okhhc1NjYWxhckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICByZXR1
cm4gSGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCkpOworfQorCitzdGF0aWMg
dm9pZCBJbml0VHlwZShUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5pc0FycmF5KCkpCisg
ICAgeworICAgICAgICBhdXRvIHNpemVzID0gdHlwZS5nZXRBcnJheVNpemVzKCk7CisgICAgICAg
IHR5cGUudG9BcnJheUJhc2VUeXBlKCk7CisgICAgICAgIHR5cGUubWFrZUFycmF5cyhzaXplcyk7
CisgICAgfQorfQorCitUVHlwZSAmc2g6OkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKK3sK
KyAgICBhdXRvICZjbG9uZSA9ICpuZXcgVFR5cGUodHlwZSk7CisgICAgSW5pdFR5cGUoY2xvbmUp
OworICAgIHJldHVybiBjbG9uZTsKK30KKworVFR5cGUgJnNoOjpJbm5lcm1vc3RUeXBlKGNvbnN0
IFRUeXBlICZ0eXBlKQoreworICAgIGF1dG8gJmlubmVyID0gKm5ldyBUVHlwZSh0eXBlKTsKKyAg
ICBpbm5lci50b0FycmF5QmFzZVR5cGUoKTsKKyAgICBJbml0VHlwZShpbm5lcik7CisgICAgcmV0
dXJuIGlubmVyOworfQorCitUVHlwZSAmc2g6OkRyb3BDb2x1bW5zKGNvbnN0IFRUeXBlICZtYXRy
aXhUeXBlKQoreworICAgIEFTU0VSVChtYXRyaXhUeXBlLmlzTWF0cml4KCkpOworICAgIEFTU0VS
VChIYXNTY2FsYXJCYXNpY1R5cGUobWF0cml4VHlwZSkpOworICAgIGNvbnN0IGNoYXIgKm1hbmds
ZWROYW1lID0gbnVsbHB0cjsKKworICAgIGF1dG8gJnZlY3RvclR5cGUgPQorICAgICAgICAqbmV3
IFRUeXBlKG1hdHJpeFR5cGUuZ2V0QmFzaWNUeXBlKCksIG1hdHJpeFR5cGUuZ2V0UHJlY2lzaW9u
KCksIG1hdHJpeFR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAgbWF0cml4
VHlwZS5nZXRSb3dzKCksIDEsIG1hdHJpeFR5cGUuZ2V0QXJyYXlTaXplcygpLCBtYW5nbGVkTmFt
ZSk7CisgICAgSW5pdFR5cGUodmVjdG9yVHlwZSk7CisgICAgcmV0dXJuIHZlY3RvclR5cGU7Cit9
CisKK1RUeXBlICZzaDo6RHJvcE91dGVyRGltZW5zaW9uKGNvbnN0IFRUeXBlICZhcnJheVR5cGUp
Cit7CisgICAgQVNTRVJUKGFycmF5VHlwZS5pc0FycmF5KCkpOworICAgIGNvbnN0IGNoYXIgKm1h
bmdsZWROYW1lID0gbnVsbHB0cjsKKyAgICBjb25zdCBhdXRvICZhcnJheVNpemVzICA9IGFycmF5
VHlwZS5nZXRBcnJheVNpemVzKCk7CisKKyAgICBhdXRvICZpbm5lclR5cGUgPQorICAgICAgICAq
bmV3IFRUeXBlKGFycmF5VHlwZS5nZXRCYXNpY1R5cGUoKSwgYXJyYXlUeXBlLmdldFByZWNpc2lv
bigpLCBhcnJheVR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAgYXJyYXlU
eXBlLmdldE5vbWluYWxTaXplKCksIGFycmF5VHlwZS5nZXRTZWNvbmRhcnlTaXplKCksCisgICAg
ICAgICAgICAgICAgICAgYXJyYXlTaXplcy5zdWJzcGFuKDAsIGFycmF5U2l6ZXMuc2l6ZSgpIC0g
MSksIG1hbmdsZWROYW1lKTsKKyAgICBJbml0VHlwZShpbm5lclR5cGUpOworICAgIHJldHVybiBp
bm5lclR5cGU7Cit9CisKK3N0YXRpYyBUVHlwZSAmU2V0VHlwZURpbXNJbXBsKGNvbnN0IFRUeXBl
ICZ0eXBlLCBpbnQgcHJpbWFyeSwgaW50IHNlY29uZGFyeSkKK3sKKyAgICBBU1NFUlQoMSA8IHBy
aW1hcnkgJiYgcHJpbWFyeSA8PSA0KTsKKyAgICBBU1NFUlQoMSA8PSBzZWNvbmRhcnkgJiYgc2Vj
b25kYXJ5IDw9IDQpOworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodHlwZSkpOworICAg
IGNvbnN0IGNoYXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKworICAgIGF1dG8gJm5ld1R5cGUg
PSAqbmV3IFRUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCksIHR5cGUuZ2V0UHJlY2lzaW9uKCksIHR5
cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFy
eSwgc2Vjb25kYXJ5LCB0eXBlLmdldEFycmF5U2l6ZXMoKSwgbWFuZ2xlZE5hbWUpOworICAgIElu
aXRUeXBlKG5ld1R5cGUpOworICAgIHJldHVybiBuZXdUeXBlOworfQorCitUVHlwZSAmc2g6OlNl
dFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlwZSwgaW50IG5ld0RpbSkKK3sKKyAgICBBU1NFUlQo
dHlwZS5pc1JhbmswKCkgfHwgdHlwZS5pc1ZlY3RvcigpKTsKKyAgICByZXR1cm4gU2V0VHlwZURp
bXNJbXBsKHR5cGUsIG5ld0RpbSwgMSk7Cit9CisKK1RUeXBlICZzaDo6U2V0TWF0cml4Um93RGlt
KGNvbnN0IFRUeXBlICZtYXRyaXhUeXBlLCBpbnQgbmV3RGltKQoreworICAgIEFTU0VSVChtYXRy
aXhUeXBlLmlzTWF0cml4KCkpOworICAgIEFTU0VSVCgxIDwgbmV3RGltICYmIG5ld0RpbSA8PSA0
KTsKKyAgICByZXR1cm4gU2V0VHlwZURpbXNJbXBsKG1hdHJpeFR5cGUsIG1hdHJpeFR5cGUuZ2V0
Q29scygpLCBuZXdEaW0pOworfQorCitib29sIHNoOjpIYXNNYXRyaXhGaWVsZChjb25zdCBUU3Ry
dWN0dXJlICZzdHJ1Y3R1cmUpCit7CisgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogc3Ry
dWN0dXJlLmZpZWxkcygpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmll
bGQtPnR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIHNoOjpIYXNBcnJheUZpZWxkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVy
ZSkKK3sKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBzdHJ1Y3R1cmUuZmllbGRzKCkp
CisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOworICAg
ICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworVEludGVybVR5
cGVkICZzaDo6Q29lcmNlU2ltcGxlKFRCYXNpY1R5cGUgdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZy
b21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlwZSA9IGZyb21Ob2RlLmdldFR5cGUo
KTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9UeXBlKSk7CisgICAgQVNTRVJU
KEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAgIEFTU0VSVCghZnJvbVR5cGUuaXNB
cnJheSgpKTsKKworICAgIGlmICh0b1R5cGUgIT0gZnJvbVR5cGUuZ2V0QmFzaWNUeXBlKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9y
KAorICAgICAgICAgICAgKm5ldyBUVHlwZSh0b1R5cGUsIGZyb21UeXBlLmdldE5vbWluYWxTaXpl
KCksIGZyb21UeXBlLmdldFNlY29uZGFyeVNpemUoKSksCisgICAgICAgICAgICBuZXcgVEludGVy
bVNlcXVlbmNleyZmcm9tTm9kZX0pOworICAgIH0KKyAgICByZXR1cm4gZnJvbU5vZGU7Cit9CisK
K1RJbnRlcm1UeXBlZCAmc2g6OkNvZXJjZVNpbXBsZShjb25zdCBUVHlwZSAmdG9UeXBlLCBUSW50
ZXJtVHlwZWQgJmZyb21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlwZSA9IGZyb21O
b2RlLmdldFR5cGUoKTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9UeXBlKSk7
CisgICAgQVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAgIEFTU0VSVCh0
b1R5cGUuZ2V0Tm9taW5hbFNpemUoKSA9PSBmcm9tVHlwZS5nZXROb21pbmFsU2l6ZSgpKTsKKyAg
ICBBU1NFUlQodG9UeXBlLmdldFNlY29uZGFyeVNpemUoKSA9PSBmcm9tVHlwZS5nZXRTZWNvbmRh
cnlTaXplKCkpOworICAgIEFTU0VSVCghdG9UeXBlLmlzQXJyYXkoKSk7CisgICAgQVNTRVJUKCFm
cm9tVHlwZS5pc0FycmF5KCkpOworCisgICAgaWYgKHRvVHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBm
cm9tVHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAqVEludGVybUFn
Z3JlZ2F0ZTo6Q3JlYXRlQ29uc3RydWN0b3IodG9UeXBlLCBuZXcgVEludGVybVNlcXVlbmNleyZm
cm9tTm9kZX0pOworICAgIH0KKyAgICByZXR1cm4gZnJvbU5vZGU7Cit9CisKK1RJbnRlcm1UeXBl
ZCAmc2g6OkFzVHlwZShTeW1ib2xFbnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwg
VEludGVybVR5cGVkICZmcm9tTm9kZSkKK3sKKyAgICBjb25zdCBUVHlwZSAmZnJvbVR5cGUgPSBm
cm9tTm9kZS5nZXRUeXBlKCk7CisKKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKHRvVHlw
ZSkpOworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUoZnJvbVR5cGUpKTsKKyAgICBBU1NF
UlQoIXRvVHlwZS5pc0FycmF5KCkpOworICAgIEFTU0VSVCghZnJvbVR5cGUuaXNBcnJheSgpKTsK
KworICAgIGlmICh0b1R5cGUgPT0gZnJvbVR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gZnJv
bU5vZGU7CisgICAgfQorICAgIFRlbXBsYXRlQXJnIHRhcmcodG9UeXBlKTsKKyAgICByZXR1cm4g
c3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoImFzX3R5cGUiLCBTeW1ib2xUeXBl
OjpCdWlsdEluKSwgdG9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKm5ldyBUSW50ZXJtU2VxdWVuY2V7JmZyb21Ob2RlfSwgMSwgJnRhcmcpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxw
ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDllODlmZWIwNzMyOTBhZTYxYTE2ZmUwNTIwNjQwNmMwNzUxOGM1
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgKQEAgLTAsMCAr
MSwxNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfQVNUSEVMUEVSU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BU1RIRUxQRVJTX0hfCisKKyNpbmNsdWRlIDxjc3RyaW5n
PgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2Vu
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TmFtZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBjb252ZW5pZW5jZSB2
aWV3IG9mIGEgVEludGVybURlY2xhcmF0aW9uIG5vZGUncyBjaGlsZHJlbi4KK3N0cnVjdCBEZWNs
YXJhdGlvbgoreworICAgIFRJbnRlcm1TeW1ib2wgJnN5bWJvbDsKKyAgICBUSW50ZXJtVHlwZWQg
KmluaXRFeHByOyAgLy8gTm9uLW51bGwgaWZmIGRlY2xhcmF0aW9uIGlzIGluaXRpYWxpemVkLgor
fTsKKworLy8gUmV0dXJucyBhIGBEZWNsYXJhdGlvbmAgdmlldyBvZiB0aGUgZ2l2ZW4gbm9kZS4K
K0RlY2xhcmF0aW9uIFZpZXdEZWNsYXJhdGlvbihUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2Rl
KTsKKworLy8gQ3JlYXRlcyBhIHZhcmlhYmxlIGZvciBhIHN0cnVjdCB0eXBlLgorY29uc3QgVFZh
cmlhYmxlICZDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSwgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKworLy8gQ3JlYXRlcyBhIHZhcmlhYmxl
IGZvciBhIHN0cnVjdCBpbnN0YW5jZS4KK2NvbnN0IFRWYXJpYWJsZSAmQ3JlYXRlSW5zdGFuY2VW
YXJpYWJsZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOYW1lICZuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0g
VFF1YWxpZmllcjo6RXZxVGVtcG9yYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5U2l6ZXMgPSBu
dWxscHRyKTsKKworLy8gVGhlIGlucHV0IHNlcXVlbmNlIHNob3VsZCBiZSBkaXNjYXJkZWQgZnJv
bSBBU1QgYWZ0ZXIgdGhpcyBpcyBjYWxsZWQuCitUSW50ZXJtU2VxdWVuY2UgJkNsb25lU2VxdWVu
Y2VBbmRQcmVwZW5kKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmc2VxLCBUSW50ZXJtTm9kZSAmbm9k
ZSk7CisKKy8vIEFwcGVuZHMgcGFyYW1ldGVycyBmcm9tIGBzcmNgIGZ1bmN0aW9uIHRvIGBkZXN0
YCBmdW5jdGlvbi4KK3ZvaWQgQWRkUGFyYW1ldGVyc0Zyb20oVEZ1bmN0aW9uICZkZXN0LCBjb25z
dCBURnVuY3Rpb24gJnNyYyk7CisKKy8vIENsb25lcyBhIGZ1bmN0aW9uLgorY29uc3QgVEZ1bmN0
aW9uICZDbG9uZUZ1bmN0aW9uKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsIElkR2VuICZpZEdl
biwgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5jKTsKKworLy8gQ2xvbmVzIGEgZnVuY3Rpb24gYW5k
IHByZXBlbmRzIHRoZSBwcm92aWRlZCBleHRyIHBhcmFtZXRlci4KKy8vIElmIGBpZEdlbmAgaXMg
bnVsbCwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG11c3QgYmUgZGlzY2FyZGVkIGZyb20gdGhlIEFT
VC4KK2NvbnN0IFRGdW5jdGlvbiAmQ2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShUU3ltYm9s
VGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElkR2VuICppZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZuZXdQYXJhbSk7
CisKKy8vIENsb25lcyBhIGZ1bmN0aW9uIGFuZCBhcHBlbmRzIHRoZSBwcm92aWRlZCBleHRyYSBw
YXJhbWV0ZXJzLgorLy8gSWYgYGlkR2VuYCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24g
bXVzdCBiZSBkaXNjYXJkZWQgZnJvbSB0aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1
bmN0aW9uQW5kQXBwZW5kUGFyYW1zKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCBUVmFyaWFibGUgKj4gJm5ld1BhcmFtKTsKKworLy8g
Q2xvbmVzIGEgZnVuY3Rpb24gYW5kIGNoYW5nZXMgaXRzIHJldHVybiB0eXBlLgorLy8gSWYgYGlk
R2VuYCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbXVzdCBiZSBkaXNjYXJkZWQgZnJv
bSB0aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uQW5kQ2hhbmdlUmV0dXJu
VHlwZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVu
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFN0cnVjdHVyZSAmbmV3UmV0dXJuKTsKKworLy8gR2V0cyB0aGUgYXJndW1lbnQgb2YgYSBm
dW5jdGlvbiBjYWxsIGF0IHRoZSBnaXZlbiBpbmRleC4KK1RJbnRlcm1UeXBlZCAmR2V0QXJnKGNv
bnN0IFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCk7CisKKy8vIFNldHMgdGhl
IGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24gY2FsbCBhdCB0aGUgZ2l2ZW4gaW5kZXguCit2b2lkIFNl
dEFyZyhUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgsIFRJbnRlcm1UeXBlZCAm
YXJnKTsKKworLy8gUmV0dXJucyB0aGUgZmllbGQgaW5kZXggd2l0aGluIHRoZSBnaXZlbiBzdHJ1
Y3QgZm9yIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorLy8gUmV0dXJucyAtMSBpZiB0aGUgc3RydWN0
IGhhcyBubyBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgoraW50IEdldEZpZWxkSW5kZXgoY29u
c3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFt
ZSk7CisKKy8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiB2YXJpYWJsZSB3aXRoIHRo
ZSBnaXZlbiBmaWVsZCBuYW1lLgorLy8gVGhlIHZhcmlhYmxlIG11c3QgYmUgYSBzdHJ1Y3QgaW5z
dGFuY2UuCitUSW50ZXJtQmluYXJ5ICZBY2Nlc3NGaWVsZChjb25zdCBUVmFyaWFibGUgJnN0cnVj
dEluc3RhbmNlVmFyLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSk7CisKKy8vIEFj
Y2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiBub2RlIHdpdGggdGhlIGdpdmVuIGZpZWxkIG5h
bWUuCisvLyBUaGUgbm9kZSBtdXN0IGJlIGEgc3RydWN0IGluc3RhbmNlLgorVEludGVybUJpbmFy
eSAmQWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJsZVN0cmlu
ZyAmZmllbGROYW1lKTsKKworLy8gQWNjZXNzZXMgYSBmaWVsZCBmb3IgdGhlIGdpdmVuIG5vZGUg
YnkgaXRzIGZpZWxkIGluZGV4LgorLy8gVGhlIG5vZGUgbXVzdCBiZSBhIHN0cnVjdCBpbnN0YW5j
ZS4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0ZpZWxkQnlJbmRleChUSW50ZXJtVHlwZWQgJm9iamVj
dCwgaW50IGluZGV4KTsKKworLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRleCBmb3IgdGhl
IGdpdmVuIG5vZGUuCisvLyBUaGUgbm9kZSBtdXN0IGJlIGFuIGFycmF5LCB2ZWN0b3IsIG9yIG1h
dHJpeC4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmaW5kZXhhYmxl
Tm9kZSwgaW50IGluZGV4KTsKKworLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRleCBmb3Ig
dGhlIGdpdmVuIG5vZGUgaWYgYGluZGV4YCBpcyBub24tbnVsbC4KKy8vIFJldHVybnMgdGhlIG9y
aWdpbmFsIG5vZGUgaWYgYGluZGV4YCBpcyBudWxsLgorLy8gVGhlIG5vZGUgbXVzdCBiZSBhbiBh
cnJheSwgdmVjdG9yLCBvciBtYXRyaXggaWYgYGluZGV4YCBpcyBub24tbnVsbC4KK1RJbnRlcm1U
eXBlZCAmQWNjZXNzSW5kZXgoVEludGVybVR5cGVkICZub2RlLCBjb25zdCBpbnQgKmluZGV4KTsK
KworLy8gUmV0dXJucyBhIHN1YnZlY3RvciBiYXNlZCBvbiB0aGUgaW5wdXQgc2xpY2UgcmFuZ2Uu
CisvLyBUaGlzIHJldHVybnMgdGhlIG9yaWdpbmFsIG5vZGUgaWYgdGhlIHNsaWNlIGlzIGFuIGlk
ZW50aXR5IGZvciB0aGUgbm9kZS4KK1RJbnRlcm1UeXBlZCAmU3ViVmVjdG9yKFRJbnRlcm1UeXBl
ZCAmdmVjdG9yTm9kZSwgaW50IGJlZ2luLCBpbnQgZW5kKTsKKworLy8gTWF0Y2hlcyBzY2FsYXIg
Ym9vbCwgaW50LCB1aW50LCBmbG9hdCwgZG91YmxlLgorYm9vbCBJc1NjYWxhckJhc2ljVHlwZShj
b25zdCBUVHlwZSAmdHlwZSk7CisKKy8vIE1hdGNoZXMgdmVjdG9yIGJvb2wsIGludCwgdWludCwg
ZmxvYXQsIGRvdWJsZS4KK2Jvb2wgSXNWZWN0b3JCYXNpY1R5cGUoY29uc3QgVFR5cGUgJnR5cGUp
OworCisvLyBNYXRjaGVzIGJvb2wsIGludCwgdWludCwgZmxvYXQsIGRvdWJsZS4KKy8vIFR5cGUg
ZG9lcyBub3QgbmVlZCB0byBiZSBhIHNjYWxhci4KK2Jvb2wgSGFzU2NhbGFyQmFzaWNUeXBlKGNv
bnN0IFRUeXBlICZ0eXBlKTsKKworLy8gTWF0Y2hlcyBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBk
b3VibGUuCitib29sIEhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpOworCisvLyBD
bG9uZXMgYSB0eXBlLgorVFR5cGUgJkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisKKy8v
IENsb25lcyBhIHR5cGUgYW5kIGRyb3BzIGFsbCBhcnJheSBkaW1lbnNpb25zLgorVFR5cGUgJklu
bmVybW9zdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBDcmVhdGVzIGEgdmVjdG9yIHR5
cGUgYnkgZHJvcHBpbmcgdGhlIGNvbHVtbnMgb2ZmIG9mIGEgbWF0cml4IHR5cGUuCitUVHlwZSAm
RHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpOworCisvLyBDcmVhdGVzIGEgdHlw
ZSBieSBkcm9wcGluZyB0aGUgb3V0ZXIgZGltZW5zaW9uIG9mZiBvZiBhbiBhcnJheSB0eXBlLgor
VFR5cGUgJkRyb3BPdXRlckRpbWVuc2lvbihjb25zdCBUVHlwZSAmYXJyYXlUeXBlKTsKKworLy8g
Q3JlYXRlcyBhIHNjYWxhciBvciB2ZWN0b3IgdHlwZSBieSBjaGFuZ2luZyB0aGUgZGltZW5zaW9u
cyBvZiBhIHZlY3RvciB0eXBlLgorVFR5cGUgJlNldFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlw
ZSwgaW50IG5ld0RpbSk7CisKKy8vIENyZWF0ZXMgYSBtYXRyaXggdHlwZSBieSBjaGFuZ2luZyB0
aGUgcm93IGRpbWVuc2lvbnMgb2YgYSBtYXRyaXggdHlwZS4KK1RUeXBlICZTZXRNYXRyaXhSb3dE
aW0oY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUsIGludCBuZXdEaW0pOworCisvLyBSZXR1cm5zIHRy
dWUgaWZmIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgY29udGFpbnMgYSBmaWVsZCB3aXRoIG1hdHJp
eCB0eXBlLgorYm9vbCBIYXNNYXRyaXhGaWVsZChjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUp
OworCisvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgY29udGFpbnMg
YSBmaWVsZCB3aXRoIGFycmF5IHR5cGUuCitib29sIEhhc0FycmF5RmllbGQoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlKTsKKworLy8gQ29lcmNlcyBgZnJvbU5vZGVgIHRvIGB0b1R5cGVgIGJ5
IGEgY29uc3RydWN0b3IgY2FsbCBvZiBgdG9UeXBlYCBpZiB0aGVpciB0eXBlcyBkaWZmZXIuCisv
LyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZC4KKy8vIEFycmF5IHR5
cGVzIGFyZSBub3QgYWxsb3dlZC4KK1RJbnRlcm1UeXBlZCAmQ29lcmNlU2ltcGxlKFRCYXNpY1R5
cGUgdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKTsKKworLy8gQ29lcmNlcyBgZnJvbU5v
ZGVgIHRvIGB0b1R5cGVgIGJ5IGEgY29uc3RydWN0b3IgY2FsbCBvZiBgdG9UeXBlYCBpZiB0aGVp
ciB0eXBlcyBkaWZmZXIuCisvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIG11c3QgY29p
bmNpZGUgYmV0d2VlbiB0byBhbmQgZnJvbS4KKy8vIEFycmF5IHR5cGVzIGFyZSBub3QgYWxsb3dl
ZC4KK1RJbnRlcm1UeXBlZCAmQ29lcmNlU2ltcGxlKGNvbnN0IFRUeXBlICZ0b1R5cGUsIFRJbnRl
cm1UeXBlZCAmZnJvbU5vZGUpOworCitUSW50ZXJtVHlwZWQgJkFzVHlwZShTeW1ib2xFbnYgJnN5
bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwgVEludGVybVR5cGVkICZmcm9tTm9kZSk7CisK
K30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmZkZGQ4NjVjN2NjNmQ1OWQ2ZmViNjU1MDQxYzdiNDkzZWVhN2Q3MmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8v
CisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfQ09OU1RBTlRfTkFNRVNfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKworbmFtZXNwYWNlIHNoCit7
CisKK25hbWVzcGFjZSBjb25zdGFudF9uYW1lcworeworCitjb25zdGV4cHIgTmFtZSBrQ292ZXJh
Z2VNYXNrRW5hYmxlZCgiQU5HTEVfQ292ZXJhZ2VNYXNrRW5hYmxlZCIsIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpOworY29uc3RleHByIE5hbWUga1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxl
ZCgiQU5HTEVfUmFzdGVyaXphdGlvbkRpc2NhcmQiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworfSAgLy8g
bmFtZXNwYWNlIGNvbnN0YW50X25hbWVzCisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYg
IC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0NPTlNUQU5UX05B
TUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9E
ZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU4NWU5YTY2ZDU4YjkxODc2M2Y2NWMwZTQ0NjhiYzIyYTYwZGU2
MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaApAQCAtMCwwICsxLDE2
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0RFQlVHX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX0RFQlVHX0hfCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworI2Rl
ZmluZSBUT0RPKCkgQVNTRVJUKGZhbHNlKQorCisjZGVmaW5lIExPR0lDX0VSUk9SKCkgQVNTRVJU
KGZhbHNlKQorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX0RFQlVHX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvRGVidWdTaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcyYWRkNzcxNDIyMGI0MTk4YTU3
MzYzMzE1OWVjNTY4N2UwMzJiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1
Z1NpbmsuaApAQCAtMCwwICsxLDE1OSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGlvc3RyZWFt
PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorCituYW1lc3Bh
Y2Ugc2gKK3sKKworY2xhc3MgU3RyaW5nT2JzZXJ2ZXIKK3sKKyAgcHVibGljOgorICAgIFN0cmlu
Z09ic2VydmVyKGNvbnN0IHN0ZDo6c3RyaW5nICZuZWVkbGUpIDogbmVlZGxlKG5lZWRsZSkgeyBB
U1NFUlQoIW5lZWRsZS5lbXB0eSgpKTsgfQorCisgICAgYm9vbCBvYnNlcnZlKGNoYXIgYykKKyAg
ICB7CisgICAgICAgIGlmIChuZWVkbGVbY3VyclBvc10gPT0gYykKKyAgICAgICAgeworICAgICAg
ICAgICAgKytjdXJyUG9zOworICAgICAgICAgICAgaWYgKGN1cnJQb3MgPT0gbmVlZGxlLnNpemUo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXNldCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldE5lZWRsZSgpIGNv
bnN0IHsgcmV0dXJuIG5lZWRsZTsgfQorCisgICAgdm9pZCByZXNldCgpIHsgY3VyclBvcyA9IDA7
IH0KKworICBwcml2YXRlOgorICAgIHN0ZDo6c3RyaW5nIG5lZWRsZTsKKyAgICBzaXplX3QgY3Vy
clBvcyA9IDA7Cit9OworCitjbGFzcyBEZWJ1Z1NpbmsgOiBhbmdsZTo6Tm9uQ29weWFibGUKK3sK
KyAgcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBFc2NhcGVkU2luazsKKyAgICBjbGFzcyBFc2Nh
cGVkU2luayA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgIHsKKyAgICAgICAgZnJpZW5kIGNsYXNz
IERlYnVnU2luazsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRXNjYXBlZFNpbmsoRGVidWdT
aW5rICZvd25lcikgOiBtT3duZXIob3duZXIpLCBtQmVnaW4ob3duZXIuc2l6ZSgpKSB7fQorCisg
ICAgICBwdWJsaWM6CisgICAgICAgIEVzY2FwZWRTaW5rKEVzY2FwZWRTaW5rICYmb3RoZXIpIDog
bU93bmVyKG90aGVyLm1Pd25lciksIG1CZWdpbihvdGhlci5tQmVnaW4pIHt9CisKKyAgICAgICAg
fkVzY2FwZWRTaW5rKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IG1P
d25lci5jX3N0cigpOworICAgICAgICAgICAgY29uc3QgaW50IGVuZCA9IG1Pd25lci5zaXplKCk7
CisgICAgICAgICAgICBtT3duZXIub25Xcml0ZShwICsgbUJlZ2luLCBwICsgZW5kKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJmdldCgpIHsgcmV0dXJuIG1Pd25lci5tUGFy
ZW50OyB9CisKKyAgICAgICAgb3BlcmF0b3IgVEluZm9TaW5rQmFzZSAmKCkgeyByZXR1cm4gZ2V0
KCk7IH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRGVidWdTaW5rICZtT3duZXI7CisgICAg
ICAgIGNvbnN0IGludCBtQmVnaW47CisgICAgfTsKKworICBwdWJsaWM6CisgICAgRGVidWdTaW5r
KFRJbmZvU2lua0Jhc2UgJnBhcmVudCwgYm9vbCBhbHNvTG9nVG9TdGRvdXQpCisgICAgICAgIDog
bVBhcmVudChwYXJlbnQpLCBtQWxzb0xvZ1RvU3Rkb3V0KGFsc29Mb2dUb1N0ZG91dCkKKyAgICB7
fQorCisgICAgdm9pZCB3YXRjaChzdGQ6OnN0cmluZyBjb25zdCAmbmVlZGxlKQorICAgIHsKKyAg
ICAgICAgaWYgKCFuZWVkbGUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbU9ic2Vy
dmVycy5lbXBsYWNlX2JhY2sobmVlZGxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
ZXJhc2UoKQorICAgIHsKKyAgICAgICAgbVBhcmVudC5lcmFzZSgpOworICAgICAgICBmb3IgKFN0
cmluZ09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNlcnZlcnMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG9ic2VydmVyLnJlc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgc2l6ZSgp
IHsgcmV0dXJuIG1QYXJlbnQuc2l6ZSgpOyB9CisKKyAgICBjb25zdCBUUGVyc2lzdFN0cmluZyAm
c3RyKCkgY29uc3QgeyByZXR1cm4gbVBhcmVudC5zdHIoKTsgfQorCisgICAgY29uc3QgY2hhciAq
Y19zdHIoKSBjb25zdCB7IHJldHVybiBtUGFyZW50LmNfc3RyKCk7IH0KKworICAgIEVzY2FwZWRT
aW5rIGVzY2FwZSgpIHsgcmV0dXJuIEVzY2FwZWRTaW5rKCp0aGlzKTsgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisgICAgRGVidWdTaW5rICZvcGVyYXRvcjw8KGNvbnN0IFQgJnZhbHVl
KQorICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJlZ2luID0gbVBhcmVudC5zaXplKCk7Cisg
ICAgICAgIG1QYXJlbnQgPDwgdmFsdWU7CisgICAgICAgIGNvbnN0IHNpemVfdCBlbmQgPSBtUGFy
ZW50LnNpemUoKTsKKworICAgICAgICBjb25zdCBjaGFyICpwID0gbVBhcmVudC5jX3N0cigpOwor
ICAgICAgICBvbldyaXRlKHAgKyBiZWdpbiwgcCArIGVuZCk7CisKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKworICBwcml2YXRlOgorICAgIHZvaWQgb25Xcml0ZShjb25zdCBjaGFyICpi
ZWdpbiwgY2hhciBjb25zdCAqZW5kKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqcCA9IGJl
Z2luOworICAgICAgICB3aGlsZSAocCAhPSBlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtQWxzb0xvZ1RvU3Rkb3V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6
Y291dCA8PCAqcDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChTdHJpbmdPYnNl
cnZlciAmb2JzZXJ2ZXIgOiBtT2JzZXJ2ZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChvYnNlcnZlci5vYnNlcnZlKCpwKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbmVlZGxl
ID0gb2JzZXJ2ZXIuZ2V0TmVlZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICh2b2lkKW5lZWRs
ZTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRydWUpOyAgLy8gcGxhY2UgeW91ciBicmVh
a3BvaW50IGhlcmUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICsrcDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorICAg
ICAgICB7CisgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKyAgICAgICAgfQorICAgIH0K
KworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UgJm1QYXJlbnQ7CisgICAgc3RkOjp2ZWN0
b3I8U3RyaW5nT2JzZXJ2ZXI+IG1PYnNlcnZlcnM7CisgICAgYm9vbCBtQWxzb0xvZ1RvU3Rkb3V0
OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlz
Y292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5k
ZW50RnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmRmNDMwZTFhYjQxZTFiMTdlMjRkN2Q2MjFi
ZjU1YzEyZWI5ZDFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVw
ZW5kZW50RnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDEzMSBAQAorLy8KKy8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVy
ZWRfc2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
VHJhdmVyc2VyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oIgorCit1c2luZyBuYW1lc3BhY2Ug
c2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBE
aXNjb3ZlcmVyIDogcHVibGljIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIKK3sK
KyAgcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxl
ICYpPiAmbVZhcnM7CisgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmluaXRpb24gJm1GdW5jVG9EZWY7
CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBtTm9uRGVwRnVuY3Rp
b25zOworCisgIHB1YmxpYzoKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9u
ICo+IG1EZXBGdW5jdGlvbnM7CisKKyAgcHVibGljOgorICAgIERpc2NvdmVyZXIoY29uc3Qgc3Rk
OjpmdW5jdGlvbjxib29sKGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMsCisgICAgICAgICAgICAg
ICBjb25zdCBGdW5jdGlvblRvRGVmaW5pdGlvbiAmZnVuY1RvRGVmKQorICAgICAgICA6IERpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIHRydWUpLCBtVmFycyh2
YXJzKSwgbUZ1bmNUb0RlZihmdW5jVG9EZWYpCisgICAge30KKworICAgIHZvaWQgdmlzaXRTeW1i
b2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNv
bnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAgICAgaWYg
KCFtVmFycyh2YXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvd25lciA9IGRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rp
b24oc3ltYm9sTm9kZSk7CisgICAgICAgIEFTU0VSVChvd25lcik7CisgICAgICAgIG1EZXBGdW5j
dGlvbnMuaW5zZXJ0KG93bmVyKTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKHZpc2l0ICE9IFZpc2l0OjpQcmVWaXNpdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFnZ3JlZ2F0
ZU5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1
bmN0aW9uICpmdW5jID0gYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKworICAgICAgICAg
ICAgaWYgKG1Ob25EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVwRnVuY3Rpb25zLmVu
ZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpID09IG1E
ZXBGdW5jdGlvbnMuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBp
dCA9IG1GdW5jVG9EZWYuZmluZChmdW5jKTsKKyAgICAgICAgICAgICAgICBpZiAoaXQgPT0gbUZ1
bmNUb0RlZi5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFJlY3Vy
c2lvbiBpcyBiYW5uZWQgaW4gR0xTTCwgc28gSSBiZWxpZXZlIEFuZ2xlSVIgaGFzIHRoaXMgcHJv
cGVydHkgdG9vLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1l
cyAoZGlyZWN0IGFuZCBtdXR1YWwpIHJlY3Vyc2lvbiBpcyBwcm9oaWJpdGVkLgorICAgICAgICAg
ICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlID0gKml0LT5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgZnVuY0RlZk5vZGUudHJhdmVyc2UodGhpcyk7CisgICAgICAg
ICAgICAgICAgaWYgKG1Ob25EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVwRnVuY3Rp
b25zLmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChtRGVwRnVu
Y3Rpb25zLmZpbmQoZnVuYykgIT0gbURlcEZ1bmN0aW9ucy5lbmQoKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqb3duZXIgPSBkaXNjb3ZlckVuY2xvc2lu
Z0Z1bmN0aW9uKGFnZ3JlZ2F0ZU5vZGUpOworICAgICAgICAgICAgQVNTRVJUKG93bmVyKTsKKyAg
ICAgICAgICAgIG1EZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gZnVuY0RlZk5v
ZGUtPmdldEZ1bmN0aW9uKCk7CisKKyAgICAgICAgaWYgKHZpc2l0ICE9IFZpc2l0OjpQb3N0Vmlz
aXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykg
IT0gbURlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtTm9uRGVwRnVu
Y3Rpb25zLmZpbmQoZnVuYykgIT0gbU5vbkRlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1EZXBGdW5jdGlv
bnMuZmluZChmdW5jKSA9PSBtRGVwRnVuY3Rpb25zLmVuZCgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtTm9uRGVwRnVuY3Rpb25zLmluc2VydChmdW5jKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitzdGQ6OnVub3Jk
ZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IHNoOjpEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9u
cygKKyAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29s
KGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMpCit7CisgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmlu
aXRpb24gZnVuY1RvRGVmID0gTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhyb290KTsKKyAgICBE
aXNjb3ZlcmVyIGRpc2NvdmVyZXIodmFycywgZnVuY1RvRGVmKTsKKyAgICByb290LnRyYXZlcnNl
KCZkaXNjb3ZlcmVyKTsKKyAgICByZXR1cm4gc3RkOjptb3ZlKGRpc2NvdmVyZXIubURlcEZ1bmN0
aW9ucyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5j
dGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVkMWJmMjdjOTBjYWIwNmMzYzE4YWUxNDBhZGM4Mzc1ZTJkZGMxNWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaApAQCAt
MCwwICsxLDI1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVSREVQRU5ERU5URlVOQ1RJT05TX0hfCisjZGVmaW5l
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVSREVQRU5E
RU5URlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSAi
Y29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBp
bGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBGaW5kcyBhbmQgcmV0dXJucyBhbGwgZnVu
Y3Rpb25zIHRoYXQgY29udGFpbiB0aGUgcHJvdmlkZWQgdmFyaWFibGVzLgorQU5HTEVfTk9fRElT
Q0FSRCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IERpc2NvdmVyRGVwZW5k
ZW50RnVuY3Rpb25zKAorICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICBjb25zdCBzdGQ6OmZ1
bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycyk7CisKK30gIC8vIG5hbWVzcGFj
ZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX0RJU0NPVkVSREVQRU5ERU5URlVOQ1RJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjJkMzkw
ZTc5NWRiMWI3ZjMzY2JkODQ1YWY3NjEyNTdlN2UwZTBmMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcApAQCAtMCww
ICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJz
ZXI6OkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIoYm9vbCBwcmVWaXNpdF8sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaW5WaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcG9zdFZpc2l0
XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKKyAgICA6IFRJbnRl
cm1UcmF2ZXJzZXIocHJlVmlzaXRfLCBpblZpc2l0XywgcG9zdFZpc2l0Xywgc3ltYm9sVGFibGUp
Cit7fQorCitjb25zdCBURnVuY3Rpb24gKkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJz
ZXI6OmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpCit7CisgICAg
QVNTRVJUKCFub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKworICAgIHVuc2lnbmVk
IGhlaWdodCA9IDA7CisgICAgd2hpbGUgKFRJbnRlcm1Ob2RlICphbmNlc3RvciA9IGdldEFuY2Vz
dG9yTm9kZShoZWlnaHQpKQorICAgIHsKKyAgICAgICAgaWYgKFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gKmZ1bmNEZWZOb2RlID0gYW5jZXN0b3ItPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24o
KTsKKyAgICAgICAgfQorICAgICAgICArK2hlaWdodDsKKyAgICB9CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0
aW9uVHJhdmVyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRy
YXZlcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5Y2IyYWEwMDE0YTAwNDkzODZlMmE3ZjZkNzkzMmQ5YjI3
M2M0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdG
dW5jdGlvblRyYXZlcnNlci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJFTkNMT1NJ
TkdGVU5DVElPTlRSQVZFUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5o
IgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBUSW50ZXJtVHJhdmVyc2VyIHRoYXQgc3VwcG9y
dHMgZGlzY292ZXJ5IG9mIHRoZSBmdW5jdGlvbiBhIG5vZGUgYmVsb25ncyB0by4KK2NsYXNzIERp
c2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgoreworICBwdWJsaWM6CisgICAgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcihi
b29sIHByZVZpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpblZpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
b3N0VmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9s
VGFibGUgKnN5bWJvbFRhYmxlID0gbnVsbHB0cik7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBmdW5j
dGlvbiBhIG5vZGUgYmVsb25ncyBpbnNpZGUuCisgICAgLy8gUmV0dXJucyBudWxsIGlmIHRoZSBu
b2RlIGRvZXMgbm90IGJlbG9uZyBpbnNpZGUgYSBmdW5jdGlvbi4KKyAgICBjb25zdCBURnVuY3Rp
b24gKmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpOworfTsKKwor
fSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJFTkNMT1NJTkdGVU5DVElPTlRSQVZFUlNFUl9IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1p
dE1ldGFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmJkZDNmY2QzN2E3YWMzZDBlNjEzNjAwYjVlOWNhODA4
ZTMwNTI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAKQEAg
LTAsMCArMSwyNDU1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorI2luY2x1ZGUg
PG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nQnVp
bGRlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0RlYnVnU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJv
Z3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMp
Cit1c2luZyBTaW5rID0gRGVidWdTaW5rOworI2Vsc2UKK3VzaW5nIFNpbmsgPSBUSW5mb1NpbmtC
YXNlOworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQorewor
CitzdHJ1Y3QgVmFyRGVjbAoreworICAgIGV4cGxpY2l0IFZhckRlY2woY29uc3QgVFZhcmlhYmxl
ICZ2YXIpIDogbVZhcmlhYmxlKCZ2YXIpLCBtSXNGaWVsZChmYWxzZSkge30KKyAgICBleHBsaWNp
dCBWYXJEZWNsKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCksIG1Jc0ZpZWxk
KHRydWUpIHt9CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJsZSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYXJpYWJsZSgpKTsKKyAgICAgICAgcmV0
dXJuICptVmFyaWFibGU7CisgICAgfQorCisgICAgQU5HTEVfSU5MSU5FIGNvbnN0IFRGaWVsZCAm
ZmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRmllbGQoKSk7CisgICAgICAg
IHJldHVybiAqbUZpZWxkOworICAgIH0KKworICAgIEFOR0xFX0lOTElORSBib29sIGlzVmFyaWFi
bGUoKSBjb25zdCB7IHJldHVybiAhbUlzRmllbGQ7IH0KKworICAgIEFOR0xFX0lOTElORSBib29s
IGlzRmllbGQoKSBjb25zdCB7IHJldHVybiBtSXNGaWVsZDsgfQorCisgICAgY29uc3QgVFR5cGUg
JnR5cGUoKSBjb25zdCB7IHJldHVybiBpc0ZpZWxkKCkgPyAqZmllbGQoKS50eXBlKCkgOiB2YXJp
YWJsZSgpLmdldFR5cGUoKTsgfQorCisgICAgU3ltYm9sVHlwZSBzeW1ib2xUeXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0ZpZWxkKCkgPyBmaWVsZCgpLnN5bWJvbFR5cGUoKSA6
IHZhcmlhYmxlKCkuc3ltYm9sVHlwZSgpOworICAgIH0KKworICBwcml2YXRlOgorICAgIHVuaW9u
CisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgKm1WYXJpYWJsZTsKKyAgICAgICAgY29u
c3QgVEZpZWxkICptRmllbGQ7CisgICAgfTsKKyAgICBib29sIG1Jc0ZpZWxkOworfTsKKworY2xh
c3MgR2VuTWV0YWxUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJs
aWM6CisgICAgfkdlbk1ldGFsVHJhdmVyc2VyKCkgb3ZlcnJpZGU7CisKKyAgICBHZW5NZXRhbFRy
YXZlcnNlcihjb25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAg
IFNpbmsgJm91dCwKKyAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAg
ICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudik7CisKKyAgICB2b2lkIHZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wgKikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdENvbnN0YW50
VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdFN3
aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdFRlcm5h
cnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRJZkVs
c2UoVmlzaXQsIFRJbnRlcm1JZkVsc2UgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdFN3aXRj
aChWaXNpdCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0Q2FzZShW
aXNpdCwgVEludGVybUNhc2UgKikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uUHJv
dG90eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZTsKKyAgICBib29sIHZp
c2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICop
IG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sg
Kikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKFZp
c2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikgb3ZlcnJpZGU7CisgICAg
Ym9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJp
ZGU7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIG92ZXJyaWRlOwor
ICAgIGJvb2wgdmlzaXRGb3JMb29wKFRJbnRlcm1Mb29wICopOworICAgIGJvb2wgdmlzaXRXaGls
ZUxvb3AoVEludGVybUxvb3AgKik7CisgICAgYm9vbCB2aXNpdERvV2hpbGVMb29wKFRJbnRlcm1M
b29wICopOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2ggKikgb3Zl
cnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICB1c2luZyBGdW5jVG9OYW1lID0gc3RkOjptYXA8SW1t
dXRhYmxlU3RyaW5nLCBOYW1lPjsKKyAgICBzdGF0aWMgRnVuY1RvTmFtZSBCdWlsZEZ1bmNUb05h
bWUoKTsKKworICAgIHN0cnVjdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZworICAgIHsK
KyAgICAgICAgYm9vbCBpc1BhcmFtZXRlciAgICAgICAgICAgICAgICA9IGZhbHNlOworICAgICAg
ICBib29sIGlzTWFpblBhcmFtZXRlciAgICAgICAgICAgID0gZmFsc2U7CisgICAgICAgIGJvb2wg
ZW1pdFBvc3RRdWFsaWZpZXIgICAgICAgICAgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1BhY2tl
ZCAgICAgICAgICAgICAgICAgICA9IGZhbHNlOworICAgICAgICBib29sIGRpc2FibGVTdHJ1Y3RT
cGVjaWZpZXIgICAgID0gZmFsc2U7CisgICAgICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQb2lu
dGVyICAgPSBudWxscHRyOworICAgICAgICBjb25zdCBBZGRyZXNzU3BhY2UgKmlzUmVmZXJlbmNl
ID0gbnVsbHB0cjsKKyAgICB9OworCisgICAgc3RydWN0IEVtaXRUeXBlQ29uZmlnCisgICAgewor
ICAgICAgICBjb25zdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyAqZXZkQ29uZmlnID0g
bnVsbHB0cjsKKyAgICB9OworCisgICAgdm9pZCBlbWl0SW5kZW50YXRpb24oKTsKKyAgICB2b2lk
IGVtaXRGdW5jdGlvblNpZ25hdHVyZShjb25zdCBURnVuY3Rpb24gJmZ1bmMpOworICAgIHZvaWQg
ZW1pdEZ1bmN0aW9uUmV0dXJuKGNvbnN0IFRGdW5jdGlvbiAmZnVuYyk7CisgICAgdm9pZCBlbWl0
RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUg
JnBhcmFtKTsKKworICAgIHZvaWQgZW1pdE5hbWVPZihjb25zdCBURmllbGQgJm9iamVjdCk7Cisg
ICAgdm9pZCBlbWl0TmFtZU9mKGNvbnN0IFRTeW1ib2wgJm9iamVjdCk7CisgICAgdm9pZCBlbWl0
TmFtZU9mKGNvbnN0IFZhckRlY2wgJm9iamVjdCk7CisKKyAgICB2b2lkIGVtaXRCYXJlVHlwZU5h
bWUoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZpZyk7Cisg
ICAgdm9pZCBlbWl0VHlwZShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVDb25maWcg
JmV0Q29uZmlnKTsKKyAgICB2b2lkIGVtaXRQb3N0UXVhbGlmaWVyKGNvbnN0IEVtaXRWYXJpYWJs
ZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBWYXJEZWNsICZkZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFF1YWxpZmllciBxdWFsaWZpZXIpOworCisgICAgc3RydWN0IEZpZWxkQW5ub3RhdGlvbkluZGlj
ZXMKKyAgICB7CisgICAgICAgIHNpemVfdCBhdHRyaWJ1dGUgPSAwOworICAgICAgICBzaXplX3Qg
Y29sb3IgICAgID0gMDsKKyAgICB9OworCisgICAgdm9pZCBlbWl0RmllbGREZWNsYXJhdGlvbihj
b25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cnVjdHVyZSAmcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGRB
bm5vdGF0aW9uSW5kaWNlcyAmYW5ub3RhdGlvbkluZGljZXMpOworICAgIHZvaWQgZW1pdEF0dHJp
YnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsIEZpZWxkQW5ub3RhdGlvbkluZGlj
ZXMgJmFubm90YXRpb25JbmRpY2VzKTsKKyAgICB2b2lkIGVtaXRTdHJ1Y3REZWNsYXJhdGlvbihj
b25zdCBUVHlwZSAmdHlwZSk7CisgICAgdm9pZCBlbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0
aW9uKGNvbnN0IFZhckRlY2wgJmRlY2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcp
OworICAgIHZvaWQgZW1pdFZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3QgVmFyRGVjbCAmZGVjbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xh
cmF0aW9uQ29uZmlnICZldmRDb25maWcpOworCisgICAgdm9pZCBlbWl0T3BlbkJyYWNlKCk7Cisg
ICAgdm9pZCBlbWl0Q2xvc2VCcmFjZSgpOworCisgICAgdm9pZCBncm91cGVkVHJhdmVyc2UoVElu
dGVybU5vZGUgJm5vZGUpOworCisgICAgY29uc3QgVEZpZWxkICZnZXREaXJlY3RGaWVsZChjb25z
dCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRzTm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICZpbmRleCk7CisgICAgY29uc3QgVEZp
ZWxkICZnZXREaXJlY3RGaWVsZChjb25zdCBUSW50ZXJtVHlwZWQgJmZpZWxkc05vZGUsIFRJbnRl
cm1UeXBlZCAmaW5kZXhOb2RlKTsKKworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICplbWl0Q29u
c3RhbnRVbmlvbkFycmF5KGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVuaW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNp
emVfdCBzaXplKTsKKworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICplbWl0Q29uc3RhbnRVbmlv
bihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24pOwor
CisgICAgdm9pZCBlbWl0U2luZ2xlQ29uc3RhbnQoY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0
IGNvbnN0VW5pb24pOworCisgIHByaXZhdGU6CisgICAgU2luayAmbU91dDsKKyAgICBjb25zdCBU
Q29tcGlsZXIgJm1Db21waWxlcjsKKyAgICBjb25zdCBQaXBlbGluZVN0cnVjdHMgJm1QaXBlbGlu
ZVN0cnVjdHM7CisgICAgY29uc3QgSW52YXJpYW50cyAmbUludmFyaWFudHM7CisgICAgU3ltYm9s
RW52ICZtU3ltYm9sRW52OworICAgIElkR2VuICZtSWRHZW47CisgICAgaW50IG1JbmRlbnRMZXZl
bCAgICAgICAgPSAtMTsKKyAgICBpbnQgbUxhc3RJbmRlbnRhdGlvblBvcyA9IC0xOworICAgIGJv
b2wgbVBhcmVudElzU3dpdGNoICAgID0gZmFsc2U7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNv
bnN0IFRTeW1ib2wgKiwgTmFtZT4gbVJlbmFtZWRTeW1ib2xzOworICAgIGNvbnN0IEZ1bmNUb05h
bWUgbUZ1bmNUb05hbWUgICA9IEJ1aWxkRnVuY1RvTmFtZSgpOworICAgIHNpemVfdCBtTWFpblRl
eHR1cmVJbmRleCAgICAgICA9IDA7CisgICAgc2l6ZV90IG1NYWluU2FtcGxlckluZGV4ICAgICAg
ID0gMDsKKyAgICBzaXplX3QgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggPSByeDo6bXRsOjprRGVm
YXVsdFVuaWZvcm1zQmluZGluZ0luZGV4OworfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCitHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVyc2VyKCkKK3sKKyAgICBBU1NF
UlQobUluZGVudExldmVsID09IC0xKTsKKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRjaCk7Cit9
CisKK0dlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcihjb25zdCBUQ29tcGlsZXIg
JmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmsgJm91
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3Rz
ICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKyAgICAgIG1PdXQob3V0KSwKKyAgICAgIG1Db21waWxlcihj
b21waWxlciksCisgICAgICBtUGlwZWxpbmVTdHJ1Y3RzKHBpcGVsaW5lU3RydWN0cyksCisgICAg
ICBtSW52YXJpYW50cyhpbnZhcmlhbnRzKSwKKyAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwK
KyAgICAgIG1JZEdlbihpZEdlbikKK3t9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRJ
bmRlbnRhdGlvbigpCit7CisgICAgQVNTRVJUKG1JbmRlbnRMZXZlbCA+PSAwKTsKKworICAgIGlm
IChtTGFzdEluZGVudGF0aW9uUG9zID09IG1PdXQuc2l6ZSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOyAgLy8gTGluZSBpcyBhbHJlYWR5IGluZGVudGVkLgorICAgIH0KKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbUluZGVudExldmVsOyArK2kpCisgICAgeworICAgICAgICBtT3V0IDw8ICIg
ICI7CisgICAgfQorCisgICAgbUxhc3RJbmRlbnRhdGlvblBvcyA9IG1PdXQuc2l6ZSgpOworfQor
CitzdGF0aWMgY29uc3QgY2hhciAqR2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIG9wLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdU
eXBlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAq
YXJnVHlwZTEgPSBudWxscHRyKQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6CisgICAgICAgICAgICByZXR1cm4gIiwiOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICI9IjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemU6CisgICAgICAgICAgICByZXR1cm4g
Ij0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICAgICAg
cmV0dXJuICIrPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisgICAg
ICAgICAgICByZXR1cm4gIi09IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2ln
bjoKKyAgICAgICAgICAgIHJldHVybiAiKj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
RGl2QXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIvPSI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIlPSI7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgICAgICByZXR1cm4g
Ijw8PSI7ICAvLyBUT0RPOiBDaGVjayBsb2dpY2FsIHZzIGFyaXRobWV0aWMgc2hpZnRpbmcuCisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICAg
ICAgcmV0dXJuICI+Pj0iOyAgLy8gVE9ETzogQ2hlY2sgbG9naWNhbCB2cyBhcml0aG1ldGljIHNo
aWZ0aW5nLgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKyAg
ICAgICAgICAgIHJldHVybiAiJj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lz
ZVhvckFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiXj0iOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICJ8PSI7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgICAgICByZXR1cm4gIisiOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViOgorICAgICAgICAgICAgcmV0dXJuICItIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgICAgICByZXR1cm4gIi8iOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDoKKyAgICAgICAgICAgIHJldHVybiAiJSI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgICAgICBy
ZXR1cm4gIjw8IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlmdGlu
Zy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ6CisgICAgICAgICAg
ICByZXR1cm4gIj4+IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlm
dGluZy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmQ6CisgICAgICAgICAg
ICByZXR1cm4gIiYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvcjoKKyAg
ICAgICAgICAgIHJldHVybiAiXiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNl
T3I6CisgICAgICAgICAgICByZXR1cm4gInwiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TGVzc1RoYW46CisgICAgICAgICAgICByZXR1cm4gIjwiOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICByZXR1cm4gIj4iOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgIHJldHVybiAiPD0iOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAg
IHJldHVybiAiPj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5Db21wb25l
bnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI8IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcExlc3NUaGFuRXF1YWxDb21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI8PSI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkVxdWFsQ29tcG9uZW50V2lz
ZToKKyAgICAgICAgICAgIHJldHVybiAiPj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
R3JlYXRlclRoYW5Db21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI+IjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgIHJldHVybiAifHwi
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKyAgICAgICAgICAgIHJl
dHVybiAiIT0vKnhvciovIjsgIC8vIFhYWDogVGhpcyBtaWdodCBuZWVkIHRvIGJlIGhhbmRsZWQg
ZGlmZmVyZW50bHkgZm9yIHNvbWUgb2J0dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB1c2UgY2FzZS4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQ6
CisgICAgICAgICAgICByZXR1cm4gIiYmIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5l
Z2F0aXZlOgorICAgICAgICAgICAgcmV0dXJuICItIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFBvc2l0aXZlOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiAiKyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2Fs
Tm90OgorICAgICAgICAgICAgcmV0dXJuICIhIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZ2ljYWxOb3RDb21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICIhIjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisgICAgICAgICAgICByZXR1cm4gIn4i
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAgICAg
IHJldHVybiAiKysiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoK
KyAgICAgICAgICAgIHJldHVybiAiLS0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJl
SW5jcmVtZW50OgorICAgICAgICAgICAgcmV0dXJuICIrKyI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gIi0tIjsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICAgICAg
cmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJp
eEFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiKj0iOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgICAgICByZXR1cm4gIio9IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorICAg
ICAgICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JU
aW1lc1NjYWxhcjoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgICAgIHJl
dHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhcjoK
KyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BFcXVhbENvbXBvbmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4gIj09IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAg
ICAgICAgIHJldHVybiAiIT0iOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoK
KyAgICAgICAgICAgIGlmICgoYXJnVHlwZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEtPmlzVmVj
dG9yKCkpIHx8CisgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5nZXRTdHJ1Y3QoKSAmJiBhcmdU
eXBlMS0+Z2V0U3RydWN0KCkpIHx8CisgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5pc0FycmF5
KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXkoKSkpCisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIkFOR0xFX2VxdWFsIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuICI9PSI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsOgorICAg
ICAgICAgICAgaWYgKChhcmdUeXBlMC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3Io
KSkgfHwKKyAgICAgICAgICAgICAgICAoYXJnVHlwZTAtPmlzQXJyYXkoKSAmJiBhcmdUeXBlMS0+
aXNBcnJheSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIkFOR0xF
X25vdEVxdWFsIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1R5cGUw
LT5nZXRTdHJ1Y3QoKSAmJiBhcmdUeXBlMS0+Z2V0U3RydWN0KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9ub3RFcXVhbFN0cnVjdCI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gIiE9IjsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wS2lsbDoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiAia2lsbCI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZXR1cm46CisgICAgICAgICAgICByZXR1cm4g
InJldHVybiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCcmVhazoKKyAgICAgICAgICAg
IHJldHVybiAiYnJlYWsiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29udGludWU6Cisg
ICAgICAgICAgICByZXR1cm4gImNvbnRpbnVlIjsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wUmFkaWFuczoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfcmFkaWFucyI7CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BEZWdyZWVzOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9k
ZWdyZWVzIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW46CisgICAgICAgICAgICBy
ZXR1cm4gIkFOR0xFX2F0YW4iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9kOgorICAg
ICAgICAgICAgcmV0dXJuICJBTkdMRV9tb2QiOyAgLy8gZGlmZmVycyBmcm9tIG1ldGFsOjptb2QK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZnJhY3Q6CisgICAgICAgICAgICByZXR1cm4g
IkFOR0xFX3JlZnJhY3QiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGlzdGFuY2U6Cisg
ICAgICAgICAgICByZXR1cm4gIkFOR0xFX2Rpc3RhbmNlIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcExlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbGVuZ3RoIjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcERvdDoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfZG90
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vcm1hbGl6ZToKKyAgICAgICAgICAgIHJl
dHVybiAiQU5HTEVfbm9ybWFsaXplIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZhY2Vm
b3J3YXJkOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9mYWNlZm9yd2FyZCI7CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BSZWZsZWN0OgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9y
ZWZsZWN0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bE1hdHJpeENvbXBvbmVudFdp
c2U6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2NvbXBvbmVudFdpc2VNdWx0aXBseSI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BPdXRlclByb2R1Y3Q6CisgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX291dGVyUHJvZHVjdCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaWdu
OgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9zaWduIjsKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQWJzOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWJzIjsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEFsbDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFsbCI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBbnk6CisgICAgICAgICAgICByZXR1cm4gIm1l
dGFsOjphbnkiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luOgorICAgICAgICAgICAg
cmV0dXJuICJtZXRhbDo6c2luIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvczoKKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvcyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BUYW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp0YW4iOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQXNpbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFzaW4iOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWNvczoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OmFjb3MiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luaDoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OnNpbmgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zaDoKKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvc2giOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wVGFuaDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnRhbmgiOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQXNpbmg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjphc2luaCI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBY29zaDoKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OmFjb3NoIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW5oOgorICAgICAg
ICAgICAgcmV0dXJuICJtZXRhbDo6YXRhbmgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Rm1hOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Zm1hIjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFBvdzoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBvdyI7CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BFeHA6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpleHAi
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwMjoKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OmV4cDIiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9nOgorICAgICAgICAg
ICAgcmV0dXJuICJtZXRhbDo6bG9nIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZzI6
CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpsb2cyIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFNxcnQ6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpzcXJ0IjsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEZsb29yOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Zmxv
b3IiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVHJ1bmM6CisgICAgICAgICAgICByZXR1
cm4gIm1ldGFsOjp0cnVuYyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDZWlsOgorICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y2VpbCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BGcmFjdDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZyYWN0IjsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcE1pbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6Om1pbiI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFs
OjptYXgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmQ6CisgICAgICAgICAgICBy
ZXR1cm4gIm1ldGFsOjpyb3VuZCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZEV2
ZW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyaW50IjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcENsYW1wOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y2xhbXAiOyAgLy8g
VE9ETyBmYXN0IHZzIHByZWNpc2UgbmFtZXNwYWNlCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNaXg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjptaXgiOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wU3RlcDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnN0ZXAiOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU21vb3Roc3RlcDoKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OnNtb290aHN0ZXAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9kZjoKKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6Om1vZGYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSXNuYW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjppc25hbiI7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJc2luZjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmlzaW5m
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExkZXhwOgorICAgICAgICAgICAgcmV0dXJu
ICJtZXRhbDo6bGRleHAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRnJleHA6CisgICAg
ICAgICAgICByZXR1cm4gIm1ldGFsOjpmcmV4cCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BJbnZlcnNlc3FydDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnJzcXJ0IjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
Y3Jvc3MiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeDoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmRmZHgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeToKKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmRmZHkiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wRndpZHRoOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZndpZHRoIjsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFRyYW5zcG9zZToKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OnRyYW5zcG9zZSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFudDoKKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmRldGVybWluYW50IjsKKworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW52ZXJzZToKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfaW52ZXJzZSI7
CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9VaW50OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVaW50Qml0
c1RvRmxvYXQ6CisgICAgICAgIHsKKyNkZWZpbmUgUkVUVVJOX0FTX1RZUEUocG9zdCkgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBzd2l0Y2ggKHJlc3VsdFR5cGUuZ2V0QmFzaWNUeXBlKCkpICAg
ICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDogICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIHJldHVybiAiYXNfdHlwZTxpbnQiIHBvc3QgIj4iOyAgIFwKKyAgICAgICAg
ICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDogICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgcmV0dXJuICJhc190eXBlPHVpbnQiIHBvc3QgIj4iOyAgXAorICAgICAgICAgICAgY2FzZSBU
QmFzaWNUeXBlOjpFYnRGbG9hdDogICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4g
ImFzX3R5cGU8ZmxvYXQiIHBvc3QgIj4iOyBcCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRPRE8oKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRPcGVyYXRvcl9UT0RP
IjsgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIHdoaWxlIChmYWxzZSkKKworICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUu
aXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQ
RSgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRUeXBlLmlz
VmVjdG9yKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChyZXN1bHRU
eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiMiIp
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fQVNfVFlQRSgiMyIpOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiNCIpOworICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBUT0RPKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICJUT3BlcmF0b3JfVE9ETyI7Cisg
ICAgICAgICAgICB9CisKKyN1bmRlZiBSRVRVUk5fQVNfVFlQRQorICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tVbm9ybTJ4MTY6CisgICAgICAgICAgICByZXR1cm4g
Im1ldGFsOjpwYWNrX2Zsb2F0X3RvX3Vub3JtMngxNiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BQYWNrU25vcm0yeDE2OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cGFja19mbG9h
dF90b19zbm9ybTJ4MTYiOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrVW5vcm00
eDg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpwYWNrX2Zsb2F0X3RvX3Vub3JtNHg4IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tTbm9ybTR4ODoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm00eDgiOworCisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp1
bnBhY2tfdW5vcm0yeDE2X3RvX2Zsb2F0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVu
cGFja1Nub3JtMngxNjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja19zbm9ybTJ4
MTZfdG9fZmxvYXQiOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTR4
ODoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja191bm9ybTR4OF90b19mbG9hdCI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTR4ODoKKyAgICAgICAgICAg
IHJldHVybiAibWV0YWw6OnVucGFja19zbm9ybTR4OF90b19mbG9hdCI7CisKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFBhY2tIYWxmMngxNjoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVf
cGFja19oYWxmXzJ4MTYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4
MTY6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3VucGFja19oYWxmXzJ4MTYiOworCisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZEV4dHJhY3Q6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRmaWVsZEluc2VydDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dGZpZWxkUmV2ZXJzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdENvdW50OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmluZExTQjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEZpbmRNU0I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVYWRkQ2Fycnk6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wVW11bEV4dGVuZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW11bEV4dGVu
ZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BN
ZW1vcnlCYXJyaWVyQXRvbWljQ291bnRlcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1l
bW9yeUJhcnJpZXJCdWZmZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJy
aWVySW1hZ2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVyU2hhcmVk
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQWRkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQXRvbWljTWluOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQW5kOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQXRvbWljT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNYb3I6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNFeGNoYW5nZToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEF0b21pY0NvbXBTd2FwOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
RW1pdFZlcnRleDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVuZFByaW1pdGl2ZToKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZUcmFuc2Zvcm06CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFj
a0RvdWJsZTJ4MzI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBcnJheUxlbmd0aDoKKyAg
ICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RPRE8iOwor
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQ29uc3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1bmN0aW9u
SW5BU1Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdGdW5jdGlv
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxCdWlsdEluRnVuY3Rpb246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERp
cmVjdFN0cnVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJm
YWNlQmxvY2s6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorfQorCisjaWYgMAorc3RhdGljIGludCBHZXRPcGVyYXRvclByZWNl
ZGVuY2UoVE9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6IHsKKyAgICAgICAgICAgIHJldHVybiAxNzsKKyAgICAg
ICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcERpdkFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2RBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEJpdHdpc2VYb3JBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlT3JB
c3NpZ246IHsKKyAgICAgICAgICAgIHJldHVybiAxNjsKKyAgICAgICAgfSBicmVhazsKKworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOiB7CisgICAgICAgICAgICByZXR1cm4g
MTU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2lj
YWxBbmQ6IHsKKyAgICAgICAgICAgIHJldHVybiAxNDsKKyAgICAgICAgfSBicmVhazsKKworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOiB7CisgICAgICAgICAgICByZXR1cm4g
MTM7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdp
c2VYb3I6IHsKKyAgICAgICAgICAgIHJldHVybiAxMjsKKyAgICAgICAgfSBicmVhazsKKworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDogeworICAgICAgICAgICAgcmV0dXJu
IDExOworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dp
Y2FsWG9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWw6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BOb3RFcXVhbDogeworICAgICAgICAgICAgcmV0dXJuIDEwOworICAgICAg
ICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJU
aGFuRXF1YWw6IHsKKyAgICAgICAgICAgIHJldHVybiA5OworICAgICAgICB9IGJyZWFrOworCisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0OiB7CisgICAgICAgICAgICByZXR1cm4gNzsKKyAgICAg
ICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3ViOiB7CisgICAgICAgICAgICByZXR1cm4gNjsKKyAgICAgICAg
fSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wRGl2OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDogewor
ICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE5lZ2F0aXZlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zaXRp
dmU6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90OgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZU5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBy
ZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDogewor
ICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQ
b3N0RGVjcmVtZW50OiB7CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICBy
ZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK25hbWVzcGFjZQoreworCitlbnVtIGNs
YXNzIEFzc29jaWF0aXZpdHkKK3sKKyAgICBOb25lLAorICAgIExlZnQsCisgICAgUmlnaHQsCit9
OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworc3RhdGljIEFzc29jaWF0aXZpdHkgR2V0
QXNzb2NpYXRpdml0eShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BTdWI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWw6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BEaXY6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0U2hpZnRSaWdodDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VB
bmQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1
YWw6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcExlc3NUaGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRl
clRoYW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcExvZ2ljYWxPcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxY
b3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQ29tbWE6IHsKKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lhdGl2aXR5
OjpMZWZ0OworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
U3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEJpdHdpc2VPckFzc2lnbjogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6
OlJpZ2h0OworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BO
ZWdhdGl2ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc2l0aXZlOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEJpdHdpc2VOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5jcmVtZW50Ogor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBy
ZURlY3JlbWVudDogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6Ok5vbmU7Cisg
ICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgVE9ETygp
OworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6Ok5vbmU7CisgICAgICAgIH0KKyAg
ICB9Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgSXNTeW1ib2xpY09wZXJhdG9yKFRPcGVyYXRv
ciBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmcmVzdWx0
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlw
ZTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmFyZ1R5cGUx
ID0gbnVsbHB0cikKK3sKKyAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1
bmN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
IXN0ZDo6aXNhbG51bShHZXRPcGVyYXRvclN0cmluZyhvcCwgcmVzdWx0VHlwZSwgYXJnVHlwZTAs
IGFyZ1R5cGUxKVswXSk7Cit9CisKK3N0YXRpYyBUSW50ZXJtQmluYXJ5ICpBc1NwZWNpZmljQmlu
YXJ5Tm9kZShUSW50ZXJtTm9kZSAmbm9kZSwgVE9wZXJhdG9yIG9wKQoreworICAgIFRJbnRlcm1C
aW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpOworICAgIGlmIChiaW5h
cnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpbmFyeU5vZGUtPmdldE9wKCkgPT0gb3Ag
PyBiaW5hcnlOb2RlIDogbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3N0YXRpYyBib29sIFBhcmVudGhlc2l6ZShUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAgICBpZiAo
bm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKG5vZGUuZ2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzQWdncmVnYXRlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzU3dpenps
ZU5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
VEludGVybVVuYXJ5ICp1bmFyeU5vZGUgPSBub2RlLmdldEFzVW5hcnlOb2RlKCkpCisgICAgewor
ICAgICAgICAvLyBUT0RPOiBVc2UgYSBwcmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5IHJ1bGVz
IGluc3RlYWQgb2YgdGhpcyBhZC1ob2MgaW1wbC4KKyAgICAgICAgY29uc3QgVFR5cGUgJnJlc3Vs
dFR5cGUgPSB1bmFyeU5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5
cGUgICAgPSB1bmFyeU5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpOworICAgICAgICByZXR1
cm4gSXNTeW1ib2xpY09wZXJhdG9yKHVuYXJ5Tm9kZS0+Z2V0T3AoKSwgcmVzdWx0VHlwZSwgJmFy
Z1R5cGUpOworICAgIH0KKworICAgIGlmIChUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlID0gbm9k
ZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7CisgICAgICAgIC8vIFRPRE86IFVzZSBhIHByZWNl
ZGVuY2UgYW5kIGFzc29jaWF0aXZpdHkgcnVsZXMgaW5zdGVhZCBvZiB0aGlzIGFkLWhvYyBpbXBs
LgorICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBiaW5hcnlOb2RlLT5nZXRPcCgpOworICAg
ICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bmRleERpcmVjdDoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0
OgorICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnRoZXNpemUoKmJpbmFyeU5vZGUtPmdldExl
ZnQoKSk7CisKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gQXNTcGVjaWZpY0JpbmFyeU5vZGUoKmJpbmFyeU5vZGUtPmdldFJpZ2h0KCksIFRPcGVyYXRv
cjo6RU9wQ29tbWEpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlID0gYmluYXJ5Tm9kZS0+Z2V0VHlw
ZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gYmluYXJ5Tm9k
ZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJp
Z2h0VHlwZSAgPSBiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIElzU3ltYm9saWNPcGVyYXRvcihiaW5hcnlOb2RlLT5nZXRPcCgpLCByZXN1
bHRUeXBlLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6
Omdyb3VwZWRUcmF2ZXJzZShUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAgICBjb25zdCBib29sIGVt
aXRQYXJlbnMgPSBQYXJlbnRoZXNpemUobm9kZSk7CisKKyAgICBpZiAoZW1pdFBhcmVucykKKyAg
ICB7CisgICAgICAgIG1PdXQgPDwgIigiOworICAgIH0KKworICAgIG5vZGUudHJhdmVyc2UodGhp
cyk7CisKKyAgICBpZiAoZW1pdFBhcmVucykKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIikiOwor
ICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZpZXIoY29u
c3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhckRlY2wgJmRlY2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUUXVhbGlmaWVyIHF1
YWxpZmllcikKK3sKKyAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICB7CisgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJh
Z0Nvb3JkOgorICAgICAgICAgICAgbU91dCA8PCAiIFtbcG9zaXRpb25dXSI7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVBvaW50U2l6ZToKKyAgICAg
ICAgICAgIG1PdXQgPDwgIiBbW3BvaW50X3NpemVdXSI7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElEOgorICAgICAgICAgICAgaWYgKGV2
ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bU91dCA8PCAiIFtbdmVydGV4X2lkXV0iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFQb2ludENvb3JkOgorICAgICAgICAg
ICAgaWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbU91dCA8PCAiIFtbcG9pbnRfY29vcmRdXSI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyb250RmFjaW5n
OgorICAgICAgICAgICAgaWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZnJvbnRfZmFjaW5nXV0iOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNvbnN0IGJvb2wgaXNJbnZhcmlhbnQgPQorICAgICAg
ICBkZWNsLmlzRmllbGQoKSA/IG1JbnZhcmlhbnRzLmNvbnRhaW5zKGRlY2wuZmllbGQoKSkgOiBt
SW52YXJpYW50cy5jb250YWlucyhkZWNsLnZhcmlhYmxlKCkpOworCisgICAgaWYgKGlzSW52YXJp
YW50KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiIFtbaW52YXJpYW50XV0iOworICAgIH0KK30K
Kworc3RhdGljIHZvaWQgRW1pdE5hbWUoU2luayAmb3V0LCBjb25zdCBOYW1lICZuYW1lKQorewor
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgRGVidWdTaW5rOjpFc2NhcGVk
U2luayBlc2NhcGVkT3V0KG91dC5lc2NhcGUoKSk7CisjZWxzZQorICAgIFRJbmZvU2lua0Jhc2Ug
JmVzY2FwZWRPdXQgPSBvdXQ7CisjZW5kaWYKKyAgICBuYW1lLmVtaXQoZXNjYXBlZE91dCk7Cit9
CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YoY29uc3QgVEZpZWxkICZvYmpl
Y3QpCit7CisgICAgRW1pdE5hbWUobU91dCwgTmFtZShvYmplY3QpKTsKK30KKwordm9pZCBHZW5N
ZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBUU3ltYm9sICZvYmplY3QpCit7CisgICAg
YXV0byBpdCA9IG1SZW5hbWVkU3ltYm9scy5maW5kKCZvYmplY3QpOworICAgIGlmIChpdCA9PSBt
UmVuYW1lZFN5bWJvbHMuZW5kKCkpCisgICAgeworICAgICAgICBFbWl0TmFtZShtT3V0LCBOYW1l
KG9iamVjdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFbWl0TmFtZShtT3V0
LCBpdC0+c2Vjb25kKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRO
YW1lT2YoY29uc3QgVmFyRGVjbCAmb2JqZWN0KQoreworICAgIGlmIChvYmplY3QuaXNGaWVsZCgp
KQorICAgIHsKKyAgICAgICAgZW1pdE5hbWVPZihvYmplY3QuZmllbGQoKSk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGVtaXROYW1lT2Yob2JqZWN0LnZhcmlhYmxlKCkpOworICAg
IH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEJhcmVUeXBlTmFtZShjb25zdCBU
VHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVDb25maWcgJmV0Q29uZmlnKQoreworICAgIGNvbnN0
IFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKworICAgIHN3aXRj
aCAoYmFzaWNUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRWb2lkOgor
ICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEJvb2w6CisgICAgICAgIGNhc2UgVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorICAgICAgICBj
YXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwg
dHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0U3RydWN0OgorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAg
ICAgIGVtaXROYW1lT2Yoc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludGVyZmFjZUJsb2NrOgorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrID0gKnR5cGUu
Z2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICAgICAgICAgIGVtaXROYW1lT2YoaW50ZXJmYWNlQmxv
Y2spOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIoYmFzaWNUeXBlKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnICYmIGV0Q29uZmlnLmV2
ZENvbmZpZy0+aXNNYWluUGFyYW1ldGVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgRW1pdE5hbWUobU91dCwgR2V0VGV4dHVyZVR5cGVOYW1lKGJhc2ljVHlwZSkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZlbnYgPSBtU3ltYm9sRW52
LmdldFRleHR1cmVFbnYoYmFzaWNUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgZW1pdE5hbWVP
ZihlbnYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRUeXBl
KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBFbWl0VHlwZUNvbmZpZyAmZXRDb25maWcpCit7Cisg
ICAgaWYgKGV0Q29uZmlnLmV2ZENvbmZpZykKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8gJmV2
ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25maWc7CisgICAgICAgIGlmIChldmRDb25maWcuaXNQ
b2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8IHRvU3RyaW5nKCpldmRDb25m
aWcuaXNQb2ludGVyKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGV2ZENvbmZpZy5pc1JlZmVyZW5jZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbU91dCA8PCB0b1N0cmluZygqZXZkQ29uZmlnLmlzUmVmZXJlbmNlKTsKKyAgICAgICAgICAg
IG1PdXQgPDwgIiAiOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNBcnJheSgp
KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiQU5HTEVfdGVuc29yPCI7CisgICAgfQorCisgICAg
aWYgKHR5cGUuaXNWZWN0b3IoKSB8fCB0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAgICAgICBt
T3V0IDw8ICJtZXRhbDo6IjsKKyAgICB9CisKKyAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnICYm
IGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNQYWNrZWQpCisgICAgeworICAgICAgICBtT3V0IDw8ICJw
YWNrZWRfIjsKKyAgICB9CisKKyAgICBlbWl0QmFyZVR5cGVOYW1lKHR5cGUsIGV0Q29uZmlnKTsK
KworICAgIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgeworICAgICAgICBtT3V0IDw8IHR5cGUu
Z2V0Tm9taW5hbFNpemUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQor
ICAgIHsKKyAgICAgICAgbU91dCA8PCB0eXBlLmdldENvbHMoKSA8PCAieCIgPDwgdHlwZS5nZXRS
b3dzKCk7CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAg
Zm9yIChhdXRvIHNpemUgOiB0eXBlLmdldEFycmF5U2l6ZXMoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbU91dCA8PCAiLCAiIDw8IHNpemU7CisgICAgICAgIH0KKyAgICAgICAgbU91dCA8PCAi
PiI7CisgICAgfQorCisgICAgaWYgKGV0Q29uZmlnLmV2ZENvbmZpZykKKyAgICB7CisgICAgICAg
IGNvbnN0IGF1dG8gJmV2ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25maWc7CisgICAgICAgIGlm
IChldmRDb25maWcuaXNQb2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIg
KiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZkQ29uZmlnLmlzUmVmZXJlbmNlKQor
ICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIgJiI7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRGaWVsZERlY2xhcmF0aW9uKGNvbnN0IFRG
aWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUU3RydWN0dXJlICZwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGaWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNl
cykKK3sKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgID0gKmZpZWxkLnR5cGUoKTsKKyAgICBj
b25zdCBUQmFzaWNUeXBlIGJhc2ljID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKworICAgIEVtaXRW
YXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKyAgICBldmRDb25maWcuZW1pdFBv
c3RRdWFsaWZpZXIgICAgICA9IHRydWU7CisgICAgZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVj
aWZpZXIgPSB0cnVlOworICAgIGV2ZENvbmZpZy5pc1BhY2tlZCAgICAgICAgICAgICAgID0gbVN5
bWJvbEVudi5pc1BhY2tlZChmaWVsZCk7CisgICAgZXZkQ29uZmlnLmlzUG9pbnRlciAgICAgICAg
ICAgICAgPSBtU3ltYm9sRW52LmlzUG9pbnRlcihmaWVsZCk7CisgICAgZXZkQ29uZmlnLmlzUmVm
ZXJlbmNlICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUmVmZXJlbmNlKGZpZWxkKTsKKyAgICBl
bWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKGZpZWxkKSwgZXZkQ29uZmlnKTsKKworICAg
IGNvbnN0IFRRdWFsaWZpZXIgcXVhbCA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgc3dpdGNo
IChxdWFsKQorICAgIHsKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0SW46CisgICAg
ICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLmV4dGVybmFsID09ICZwYXJl
bnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZmxhdF1dIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVFF1YWxp
Zmllcjo6RXZxRnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0Rh
dGE6CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5leHRlcm5h
bCA9PSAmcGFyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgodHlwZS5p
c1ZlY3RvcigpICYmCisgICAgICAgICAgICAgICAgICAgICAoYmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0SW50IHx8IGJhc2ljID09IFRCYXNpY1R5cGU6OkVidFVJbnQgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICBiYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgIHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ0RhdGEpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOgorICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIG5vdCBjb3JyZWN0IGluIGdlbmVyYWwgYW5kIG5lZWRzIGEgcmVpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gR0xTTCAzLjAsIFdlIGNhbid0IGFsd2F5
cyBhc3N1bWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIHNhZmUgaW5kZXguCisgICAgICAgICAgICAg
ICAgICAgIC8vIFNlZSA0LjMuOC4yCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3
Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5HTC9zcGVjcy9lcy8zLjAvR0xTTF9FU19TcGVjaWZp
Y2F0aW9uXzMuMDAucGRmCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9IGFubm90
YXRpb25JbmRpY2VzLmNvbG9yKys7CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwgIiBbW2Nv
bG9yKCIgPDwgaW5kZXggPDwgIildXSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFn
RGVwdGg6CisgICAgICAgICAgICBtT3V0IDw8ICIgW1tkZXB0aChhbnkpXV0iOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHN0ZDo6bWFwPE5hbWUsIHNpemVfdD4gQnVpbGRFeHRlcm5hbEF0dHJpYnV0
ZUluZGV4TWFwKAorICAgIGNvbnN0IFRDb21waWxlciAmY29tcGlsZXIsCisgICAgY29uc3QgUGlw
ZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJnN0cnVjdHVyZSkKK3sKKyAgICBBU1NFUlQoc3RydWN0
dXJlLmlzVG90YWxseUZ1bGwoKSk7CisKKyAgICBjb25zdCBhdXRvICZzaGFkZXJWYXJzICAgICA9
IGNvbXBpbGVyLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBjb25zdCBzaXplX3Qgc2hhZGVyVmFyU2l6
ZSA9IHNoYWRlclZhcnMuc2l6ZSgpOworICAgIHNpemVfdCBzaGFkZXJWYXJJbmRleCAgICAgID0g
MDsKKworICAgIGNvbnN0IGF1dG8gJmV4dGVybmFsRmllbGRzID0gc3RydWN0dXJlLmV4dGVybmFs
LT5maWVsZHMoKTsKKyAgICBjb25zdCBzaXplX3QgZXh0ZXJuYWxTaXplICA9IGV4dGVybmFsRmll
bGRzLnNpemUoKTsKKyAgICBzaXplX3QgZXh0ZXJuYWxJbmRleCAgICAgICA9IDA7CisKKyAgICBj
b25zdCBhdXRvICZpbnRlcm5hbEZpZWxkcyA9IHN0cnVjdHVyZS5pbnRlcm5hbC0+ZmllbGRzKCk7
CisgICAgY29uc3Qgc2l6ZV90IGludGVybmFsU2l6ZSAgPSBpbnRlcm5hbEZpZWxkcy5zaXplKCk7
CisgICAgc2l6ZV90IGludGVybmFsSW5kZXggICAgICAgPSAwOworCisgICAgLy8gSW50ZXJuYWwg
ZmllbGRzIGFyZSBuZXZlciBzcGxpdC4gRXh0ZXJuYWwgZmllbGRzIGFyZSBzb21ldGltZXMgc3Bs
aXQuCisgICAgQVNTRVJUKGV4dGVybmFsU2l6ZSA+PSBpbnRlcm5hbFNpemUpOworCisgICAgLy8g
U3RydWN0dXJlcyBkbyBub3QgY29udGFpbiBhbnkgaW5hY3RpdmUgZmllbGRzLgorICAgIEFTU0VS
VChzaGFkZXJWYXJTaXplID49IGludGVybmFsU2l6ZSk7CisKKyAgICBzdGQ6Om1hcDxOYW1lLCBz
aXplX3Q+IGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXg7CisgICAgc2l6ZV90IGF0dHJpYnV0
ZUluZGV4ID0gMDsKKworICAgIHdoaWxlIChpbnRlcm5hbEluZGV4IDwgaW50ZXJuYWxTaXplKQor
ICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZpbnRlcm5hbEZpZWxkID0gKmludGVybmFsRmll
bGRzW2ludGVybmFsSW5kZXhdOworICAgICAgICBjb25zdCBOYW1lIGludGVybmFsTmFtZSAgICAg
PSBOYW1lKGludGVybmFsRmllbGQpOworICAgICAgICBjb25zdCBUVHlwZSAmaW50ZXJuYWxUeXBl
ICAgPSAqaW50ZXJuYWxGaWVsZC50eXBlKCk7CisgICAgICAgIHdoaWxlIChpbnRlcm5hbE5hbWUu
cmF3TmFtZSgpICE9IHNoYWRlclZhcnNbc2hhZGVyVmFySW5kZXhdLm5hbWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFRoaXMgY2FzZSByZXByZXNlbnRzIGFuIGluYWN0aXZlIGZpZWxkLgor
CisgICAgICAgICAgICArK3NoYWRlclZhckluZGV4OworICAgICAgICAgICAgQVNTRVJUKHNoYWRl
clZhckluZGV4IDwgc2hhZGVyVmFyU2l6ZSk7CisKKyAgICAgICAgICAgICsrYXR0cmlidXRlSW5k
ZXg7ICAvLyBUT0RPOiBNaWdodCBuZWVkIHRvIGluY3JlbWVudCBtb3JlIGlmIHNoYWRlciB2YXIg
dHlwZSBpcyBhIG1hdHJpeC4KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHNpemVfdCBjb2xz
ID0gaW50ZXJuYWxUeXBlLmlzTWF0cml4KCkgPyBpbnRlcm5hbFR5cGUuZ2V0Q29scygpIDogMTsK
KworICAgICAgICBmb3IgKHNpemVfdCBjID0gMDsgYyA8IGNvbHM7ICsrYykKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgVEZpZWxkICZleHRlcm5hbEZpZWxkID0gKmV4dGVybmFsRmllbGRz
W2V4dGVybmFsSW5kZXhdOworICAgICAgICAgICAgY29uc3QgTmFtZSBleHRlcm5hbE5hbWUgICAg
ID0gTmFtZShleHRlcm5hbEZpZWxkKTsKKyAgICAgICAgICAgIEFTU0VSVCghZXh0ZXJuYWxGaWVs
ZC50eXBlKCktPmlzTWF0cml4KCkpOworCisgICAgICAgICAgICBleHRlcm5hbE5hbWVUb0F0dHJp
YnV0ZUluZGV4W2V4dGVybmFsTmFtZV0gPSBhdHRyaWJ1dGVJbmRleDsKKworICAgICAgICAgICAg
KytleHRlcm5hbEluZGV4OworICAgICAgICAgICAgKythdHRyaWJ1dGVJbmRleDsKKyAgICAgICAg
fQorCisgICAgICAgICsrc2hhZGVyVmFySW5kZXg7CisgICAgICAgICsraW50ZXJuYWxJbmRleDsK
KyAgICB9CisKKyAgICBBU1NFUlQoc2hhZGVyVmFySW5kZXggPD0gc2hhZGVyVmFyU2l6ZSk7Cisg
ICAgQVNTRVJUKGV4dGVybmFsSW5kZXggPD0gZXh0ZXJuYWxTaXplKTsgIC8vIGxlc3MgdGhhbiBp
ZiBwYWRkaW5nIHdhcyBpbnRyb2R1Y2VkCisgICAgQVNTRVJUKGludGVybmFsSW5kZXggPT0gaW50
ZXJuYWxTaXplKTsKKworICAgIHJldHVybiBleHRlcm5hbE5hbWVUb0F0dHJpYnV0ZUluZGV4Owor
fQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0QXR0cmlidXRlRGVjbGFyYXRpb24oY29u
c3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGaWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNlcykKK3sK
KyAgICBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyBldmRDb25maWc7CisgICAgZXZkQ29u
ZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIgPSB0cnVlOworICAgIGVtaXRWYXJpYWJsZURlY2xh
cmF0aW9uKFZhckRlY2woZmllbGQpLCBldmRDb25maWcpOworICAgIG1PdXQgPDwgIiBbW2F0dHJp
YnV0ZSgiIDw8IGFubm90YXRpb25JbmRpY2VzLmF0dHJpYnV0ZSsrIDw8ICIpXV0iOworfQorCit2
b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0U3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFR5cGUg
JnR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6
RWJ0U3RydWN0KTsKKyAgICBBU1NFUlQodHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKTsKKworICAg
IG1PdXQgPDwgInN0cnVjdCAiOworICAgIGVtaXRCYXJlVHlwZU5hbWUodHlwZSwge30pOworCisg
ICAgbU91dCA8PCAiXG4iOworICAgIGVtaXRPcGVuQnJhY2UoKTsKKworICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworICAgIHN0ZDo6bWFwPE5hbWUs
IHNpemVfdD4gZmllbGRUb0F0dHJpYnV0ZUluZGV4OworICAgIGNvbnN0IGJvb2wgaGFzQXR0cmli
dXRlSW5kaWNlcyAgICAgICAgICAgPSBtUGlwZWxpbmVTdHJ1Y3RzLnZlcnRleEluLmV4dGVybmFs
ID09ICZzdHJ1Y3R1cmU7CisgICAgY29uc3QgYm9vbCByZWNsYWltVW51c2VkQXR0cmlidXRlSW5k
aWNlcyA9IG1Db21waWxlci5nZXRTaGFkZXJWZXJzaW9uKCkgPCAzMDA7CisKKyAgICBpZiAoaGFz
QXR0cmlidXRlSW5kaWNlcykKKyAgICB7CisgICAgICAgIGZpZWxkVG9BdHRyaWJ1dGVJbmRleCA9
CisgICAgICAgICAgICBCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXAobUNvbXBpbGVyLCBt
UGlwZWxpbmVTdHJ1Y3RzLnZlcnRleEluKTsKKyAgICB9CisKKyAgICBGaWVsZEFubm90YXRpb25J
bmRpY2VzIGFubm90YXRpb25JbmRpY2VzOworCisgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxk
IDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgIHsKKyAgICAgICAgZW1pdEluZGVudGF0aW9uKCk7
CisgICAgICAgIGlmIChoYXNBdHRyaWJ1dGVJbmRpY2VzKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBhdXRvIGl0ID0gZmllbGRUb0F0dHJpYnV0ZUluZGV4LmZpbmQoTmFtZSgqZmllbGQp
KTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBmaWVsZFRvQXR0cmlidXRlSW5kZXguZW5kKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZpZWxkLT5zeW1ib2xUeXBlKCkg
PT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZp
ZWxkLT5uYW1lKCkuYmVnaW5zV2l0aCgiXyIpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYW5n
bGU6OkVuZHNXaXRoKGZpZWxkLT5uYW1lKCkuZGF0YSgpLCAiX3BhZCIpKTsKKyAgICAgICAgICAg
ICAgICBlbWl0RmllbGREZWNsYXJhdGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3RhdGlvbklu
ZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChmaWVsZC0+c3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6
OkFuZ2xlSW50ZXJuYWwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIWZpZWxkLT5uYW1lKCku
YmVnaW5zV2l0aCgiXyIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICFhbmdsZTo6RW5kc1dp
dGgoZmllbGQtPm5hbWUoKS5kYXRhKCksICJfcGFkIikpOworICAgICAgICAgICAgICAgIGlmICgh
cmVjbGFpbVVudXNlZEF0dHJpYnV0ZUluZGljZXMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUgPSBpdC0+c2Vjb25kOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbWl0QXR0cmlidXRlRGVjbGFyYXRp
b24oKmZpZWxkLCBhbm5vdGF0aW9uSW5kaWNlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0RmllbGREZWNsYXJhdGlv
bigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3RhdGlvbkluZGljZXMpOworICAgICAgICB9CisgICAg
ICAgIG1PdXQgPDwgIjtcbiI7CisgICAgfQorCisgICAgaWYgKCFtUGlwZWxpbmVTdHJ1Y3RzLm1h
dGNoZXMoc3RydWN0dXJlLCB0cnVlLCB0cnVlKSkKKyAgICB7CisgICAgICAgIE1ldGFsTGF5b3V0
T2ZDb25maWcgbGF5b3V0Q29uZmlnOworICAgICAgICBsYXlvdXRDb25maWcudHJlYXRTYW1wbGVy
c0FzVGV4dHVyZUVudiA9IHRydWU7CisgICAgICAgIExheW91dCBsYXlvdXQgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gTWV0YWxMYXlvdXRPZih0eXBlLCBsYXlvdXRDb25maWcpOworICAgICAg
ICBzaXplX3QgcGFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxheW91dC5zaXplT2Yg
JSAxNjsKKyAgICAgICAgaWYgKHBhZCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0
SW5kZW50YXRpb24oKTsKKyAgICAgICAgICAgIG1PdXQgPDwgImNoYXIgIjsKKyAgICAgICAgICAg
IEVtaXROYW1lKG1PdXQsIG1JZEdlbi5jcmVhdGVOZXdOYW1lKCJwYWQiKSk7CisgICAgICAgICAg
ICBtT3V0IDw8ICJbIiA8PCBwYWQgPDwgIl07XG4iOworICAgICAgICB9CisgICAgfQorCisgICAg
ZW1pdENsb3NlQnJhY2UoKTsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE9yZGlu
YXJ5VmFyaWFibGVEZWNsYXJhdGlvbigKKyAgICBjb25zdCBWYXJEZWNsICZkZWNsLAorICAgIGNv
bnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcpCit7CisgICAgRW1p
dFR5cGVDb25maWcgZXRDb25maWc7CisgICAgZXRDb25maWcuZXZkQ29uZmlnID0gJmV2ZENvbmZp
ZzsKKworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVjbC50eXBlKCk7CisgICAgZW1pdFR5cGUo
dHlwZSwgZXRDb25maWcpOworCisgICAgaWYgKGRlY2wuc3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5
cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgIGVtaXROYW1l
T2YoZGVjbCk7CisgICAgfQorfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0VmFyaWFi
bGVEZWNsYXJhdGlvbihjb25zdCBWYXJEZWNsICZkZWNsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25D
b25maWcgJmV2ZENvbmZpZykKK3sKKyAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUgPSBk
ZWNsLnN5bWJvbFR5cGUoKTsKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSBkZWNs
LnR5cGUoKTsKKyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2ljVHlwZSAgPSB0eXBlLmdldEJhc2lj
VHlwZSgpOworCisgICAgc3dpdGNoIChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBjYXNlIFRC
YXNpY1R5cGU6OkVidFN0cnVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGUuaXNT
dHJ1Y3RTcGVjaWZpZXIoKSAmJiAhZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFldmRDb25maWcuaXNQYXJhbWV0
ZXIpOworICAgICAgICAgICAgICAgIGVtaXRTdHJ1Y3REZWNsYXJhdGlvbih0eXBlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc3ltYm9sVHlwZSAhPSBTeW1ib2xUeXBlOjpFbXB0eSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICAgICAg
ICAgICAgICBlbWl0TmFtZU9mKGRlY2wpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbWl0
T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2wsIGV2ZENvbmZpZyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFR5cGUgIT0gU3ltYm9sVHlwZTo6RW1wdHkg
fHwgZXZkQ29uZmlnLmlzUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGVtaXRPcmRpbmFyeVZhcmlh
YmxlRGVjbGFyYXRpb24oZGVjbCwgZXZkQ29uZmlnKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChldmRDb25maWcuZW1pdFBvc3RRdWFsaWZpZXIpCisgICAgeworICAgICAgICBlbWl0UG9z
dFF1YWxpZmllcihldmRDb25maWcsIGRlY2wsIHR5cGUuZ2V0UXVhbGlmaWVyKCkpOworICAgIH0K
K30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAq
c3ltYm9sTm9kZSkKK3sKKyAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZh
cmlhYmxlKCk7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgpOworCisg
ICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgIT0gU3ltYm9sVHlwZTo6RW1wdHkpOworCisgICAg
aWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0Vm9pZCkKKyAgICB7Cisg
ICAgICAgIG1PdXQgPDwgIi8qIjsKKyAgICAgICAgZW1pdE5hbWVPZih2YXIpOworICAgICAgICBt
T3V0IDw8ICIqLyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVtaXROYW1lT2Yo
dmFyKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRTaW5nbGVDb25z
dGFudChjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3QgY29uc3RVbmlvbikKK3sKKyAgICBzd2l0
Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUoKSkKKyAgICB7CisgICAgICAgIGNhc2UgVEJhc2ljVHlw
ZTo6RWJ0Qm9vbDoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAoY29uc3RVbmlvbi0+
Z2V0QkNvbnN0KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OgorICAgICAgICB7CisgICAg
ICAgICAgICBtT3V0IDw8IGNvbnN0VW5pb24tPmdldEZDb25zdCgpIDw8ICJmIjsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDoKKyAg
ICAgICAgeworICAgICAgICAgICAgbU91dCA8PCBjb25zdFVuaW9uLT5nZXRJQ29uc3QoKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJ
bnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgY29uc3RVbmlvbi0+Z2V0VUNvbnN0
KCkgPDwgInUiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
Y29uc3QgVENvbnN0YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3RhbnRVbmlv
bkFycmF5KAorICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVuaW9uLAorICAg
IGNvbnN0IHNpemVfdCBzaXplKQoreworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdFVu
aW9uSXRlcmF0ZWQgPSBjb25zdFVuaW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrLCBjb25zdFVuaW9uSXRlcmF0ZWQrKykKKyAgICB7CisgICAgICAgIGVtaXRTaW5nbGVD
b25zdGFudChjb25zdFVuaW9uSXRlcmF0ZWQpOworCisgICAgICAgIGlmIChpICE9IHNpemUgLSAx
KQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGNvbnN0VW5pb25JdGVyYXRlZDsKK30KKworY29uc3QgVENvbnN0YW50VW5p
b24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb25CZWdpbikKK3sKKyAgICBjb25z
dCBUQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbkN1cnIgPSBjb25zdFVuaW9uQmVnaW47CisgICAg
Y29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlICAgICAgICAgID0gdHlwZS5nZXRTdHJ1Y3QoKTsK
KyAgICBpZiAoc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRW1pdFR5cGVDb25maWcgY29uZmln
ID0gRW1pdFR5cGVDb25maWd7bnVsbHB0cn07CisgICAgICAgIGVtaXRUeXBlKHR5cGUsIGNvbmZp
Zyk7CisgICAgICAgIG1PdXQgPDwgInsiOworICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVs
ZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpZWxkcy5zaXplKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmZpZWxkVHlwZSA9IGZpZWxkc1tpXS0+dHlwZSgpOworICAgICAgICAgICAgY29uc3RVbmlvbkN1
cnIgICAgICAgICA9IGVtaXRDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIGNvbnN0VW5pb25DdXJy
KTsKKyAgICAgICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkgLSAxKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBtT3V0IDw8ICJ9IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
c2l6ZV90IHNpemUgICAgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgYm9vbCB3cml0
ZVR5cGUgPSBzaXplID4gMTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRW1pdFR5cGVDb25maWcgY29uZmlnID0gRW1pdFR5cGVDb25maWd7bnVsbHB0cn07
CisgICAgICAgICAgICBlbWl0VHlwZSh0eXBlLCBjb25maWcpOworICAgICAgICAgICAgbU91dCA8
PCAiKCI7CisgICAgICAgIH0KKyAgICAgICAgY29uc3RVbmlvbkN1cnIgPSBlbWl0Q29uc3RhbnRV
bmlvbkFycmF5KGNvbnN0VW5pb25DdXJyLCBzaXplKTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkK
KyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAiKSI7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIGNvbnN0VW5pb25DdXJyOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjp2
aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0VmFsdWVOb2RlKQor
eworICAgIGVtaXRDb25zdGFudFVuaW9uKGNvbnN0VmFsdWVOb2RlLT5nZXRUeXBlKCksIGNvbnN0
VmFsdWVOb2RlLT5nZXRDb25zdGFudFZhbHVlKCkpOworfQorCitib29sIEdlbk1ldGFsVHJhdmVy
c2VyOjp2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICpzd2l6emxlTm9kZSkKK3sK
KyAgICBncm91cGVkVHJhdmVyc2UoKnN3aXp6bGVOb2RlLT5nZXRPcGVyYW5kKCkpOworICAgIG1P
dXQgPDwgIi4iOworCisgICAgeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisg
ICAgICAgIERlYnVnU2luazo6RXNjYXBlZFNpbmsgZXNjYXBlZE91dChtT3V0LmVzY2FwZSgpKTsK
KyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gZXNjYXBlZE91dC5nZXQoKTsKKyNlbHNlCisg
ICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dCAgICAgICAgPSBtT3V0OworI2VuZGlmCisgICAgICAg
IHN3aXp6bGVOb2RlLT53cml0ZU9mZnNldHNBc1hZWlcoJm91dCk7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitjb25zdCBURmllbGQgJkdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJl
Y3RGaWVsZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRMaXN0Q29sbGVjdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRD
b25zdGFudFVuaW9uICZpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXguZ2V0VHlwZSgpID09IFRC
YXNpY1R5cGU6OkVidEludCk7CisKKyAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZExpc3QgPSBm
aWVsZExpc3RDb2xsZWN0aW9uLmZpZWxkcygpOworICAgIGNvbnN0IGludCBpbmRleFZhbCAgICAg
ICAgICA9IGluZGV4LmdldElDb25zdCgpOworICAgIGNvbnN0IFRGaWVsZCAmZmllbGQgICAgICAg
ICA9ICpmaWVsZExpc3RbaW5kZXhWYWxdOworCisgICAgcmV0dXJuIGZpZWxkOworfQorCitjb25z
dCBURmllbGQgJkdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZChjb25zdCBUSW50ZXJt
VHlwZWQgJmZpZWxkc05vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmluZGV4Tm9kZSkKK3sKKyAgICBjb25zdCBUVHlwZSAm
ZmllbGRzVHlwZSA9IGZpZWxkc05vZGUuZ2V0VHlwZSgpOworCisgICAgY29uc3QgVEZpZWxkTGlz
dENvbGxlY3Rpb24gKmZpZWxkTGlzdENvbGxlY3Rpb24gPSBmaWVsZHNUeXBlLmdldFN0cnVjdCgp
OworICAgIGlmIChmaWVsZExpc3RDb2xsZWN0aW9uID09IG51bGxwdHIpCisgICAgeworICAgICAg
ICBmaWVsZExpc3RDb2xsZWN0aW9uID0gZmllbGRzVHlwZS5nZXRJbnRlcmZhY2VCbG9jaygpOwor
ICAgIH0KKyAgICBBU1NFUlQoZmllbGRMaXN0Q29sbGVjdGlvbik7CisKKyAgICBjb25zdCBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqaW5kZXhOb2RlXyA9IGluZGV4Tm9kZS5nZXRBc0NvbnN0YW50VW5p
b24oKTsKKyAgICBBU1NFUlQoaW5kZXhOb2RlXyk7CisgICAgY29uc3QgVENvbnN0YW50VW5pb24g
JmluZGV4ID0gKmluZGV4Tm9kZV8tPmdldENvbnN0YW50VmFsdWUoKTsKKworICAgIHJldHVybiBn
ZXREaXJlY3RGaWVsZCgqZmllbGRMaXN0Q29sbGVjdGlvbiwgaW5kZXgpOworfQorCitib29sIEdl
bk1ldGFsVHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqYmluYXJ5
Tm9kZSkKK3sKKyAgICBjb25zdCBUT3BlcmF0b3Igb3AgICAgICA9IGJpbmFyeU5vZGUtPmdldE9w
KCk7CisgICAgVEludGVybVR5cGVkICZsZWZ0Tm9kZSAgPSAqYmluYXJ5Tm9kZS0+Z2V0TGVmdCgp
OworICAgIFRJbnRlcm1UeXBlZCAmcmlnaHROb2RlID0gKmJpbmFyeU5vZGUtPmdldFJpZ2h0KCk7
CisKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElu
ZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJ
bnRlcmZhY2VCbG9jazoKKyAgICAgICAgeworICAgICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxl
ZnROb2RlKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIi4iOworICAgICAgICAgICAgZW1pdE5hbWVP
ZihnZXREaXJlY3RGaWVsZChsZWZ0Tm9kZSwgcmlnaHROb2RlKSk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKyAgICAgICAgeworICAgICAg
ICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIlsi
OworICAgICAgICAgICAgcmlnaHROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgbU91
dCA8PCAiXSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJlc3VsdFR5cGUgPSBiaW5hcnlO
b2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmbGVmdFR5cGUgICA9IGxl
ZnROb2RlLmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5cGUgID0g
cmlnaHROb2RlLmdldFR5cGUoKTsKKworICAgICAgICAgICAgaWYgKElzU3ltYm9saWNPcGVyYXRv
cihvcCwgcmVzdWx0VHlwZSwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2UobGVmdE5vZGUpOworICAgICAgICAgICAg
ICAgIGlmIChvcCAhPSBUT3BlcmF0b3I6OkVPcENvbW1hKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsICZsZWZ0
VHlwZSwgJnJpZ2h0VHlwZSkgPDwgIiAiOworICAgICAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJz
ZShyaWdodE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3Vs
dFR5cGUsICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSkgPDwgIigiOworICAgICAgICAgICAgICAgIGxl
ZnROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAg
ICAgICAgICAgICAgICByaWdodE5vZGUudHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAg
bU91dCA8PCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIElzUG9zdGZpeChUT3BlcmF0b3Igb3ApCit7Cisg
ICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5j
cmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KFZpc2l0LCBUSW50ZXJtVW5hcnkgKnVuYXJ5Tm9kZSkKK3sKKyAgICBjb25zdCBUT3BlcmF0b3Ig
b3AgICAgICA9IHVuYXJ5Tm9kZS0+Z2V0T3AoKTsKKyAgICBjb25zdCBUVHlwZSAmcmVzdWx0VHlw
ZSA9IHVuYXJ5Tm9kZS0+Z2V0VHlwZSgpOworCisgICAgVEludGVybVR5cGVkICZhcmcgICAgPSAq
dW5hcnlOb2RlLT5nZXRPcGVyYW5kKCk7CisgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUgPSBhcmcu
Z2V0VHlwZSgpOworCisgICAgY29uc3QgY2hhciAqbmFtZSA9IEdldE9wZXJhdG9yU3RyaW5nKG9w
LCByZXN1bHRUeXBlLCAmYXJnVHlwZSk7CisKKyAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9w
LCByZXN1bHRUeXBlLCAmYXJnVHlwZSkpCisgICAgeworICAgICAgICBjb25zdCBib29sIHBvc3Rm
aXggPSBJc1Bvc3RmaXgob3ApOworICAgICAgICBpZiAoIXBvc3RmaXgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1PdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBncm91cGVkVHJhdmVy
c2UoYXJnKTsKKyAgICAgICAgaWYgKHBvc3RmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1P
dXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBt
T3V0IDw8IG5hbWUgPDwgIigiOworICAgICAgICBhcmcudHJhdmVyc2UodGhpcyk7CisgICAgICAg
IG1PdXQgPDwgIikiOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFyeSAqY29uZGl0
aW9uYWxOb2RlKQoreworICAgIGdyb3VwZWRUcmF2ZXJzZSgqY29uZGl0aW9uYWxOb2RlLT5nZXRD
b25kaXRpb24oKSk7CisgICAgbU91dCA8PCAiID8gIjsKKyAgICBncm91cGVkVHJhdmVyc2UoKmNv
bmRpdGlvbmFsTm9kZS0+Z2V0VHJ1ZUV4cHJlc3Npb24oKSk7CisgICAgbU91dCA8PCAiIDogIjsK
KyAgICBncm91cGVkVHJhdmVyc2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0RmFsc2VFeHByZXNzaW9u
KCkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2
aXNpdElmRWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqaWZUaGVuRWxzZU5vZGUpCit7CisgICAg
VEludGVybVR5cGVkICZjb25kTm9kZSA9ICppZlRoZW5FbHNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7
CisgICAgVEludGVybUJsb2NrICp0aGVuTm9kZSA9IGlmVGhlbkVsc2VOb2RlLT5nZXRUcnVlQmxv
Y2soKTsKKyAgICBUSW50ZXJtQmxvY2sgKmVsc2VOb2RlID0gaWZUaGVuRWxzZU5vZGUtPmdldEZh
bHNlQmxvY2soKTsKKworICAgIGVtaXRJbmRlbnRhdGlvbigpOworICAgIG1PdXQgPDwgImlmICgi
OworICAgIGNvbmROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgIG1PdXQgPDwgIikiOworCisgICAg
aWYgKHRoZW5Ob2RlKQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiXG4iOworICAgICAgICB0aGVu
Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1P
dXQgPDwgIiB7fSI7CisgICAgfQorCisgICAgaWYgKGVsc2VOb2RlKQorICAgIHsKKyAgICAgICAg
bU91dCA8PCAiXG4iOworICAgICAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICAgICAgbU91dCA8
PCAiZWxzZVxuIjsKKyAgICAgICAgZWxzZU5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICAvLyBBbHdheXMgZW1pdCAiZWxzZSIgZXZlbiB3aGVuIGVt
cHR5IGJsb2NrIHRvIGF2b2lkIG5lc3RlZCBpZi1zdG10IGlzc3Vlcy4KKyAgICAgICAgbU91dCA8
PCAiIGVsc2Uge30iOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKnN3aXRjaE5v
ZGUpCit7CisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91dCA8PCAic3dpdGNoICgiOwor
ICAgIHN3aXRjaE5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgbU91dCA8PCAi
KVxuIjsKKworICAgIEFTU0VSVCghbVBhcmVudElzU3dpdGNoKTsKKyAgICBtUGFyZW50SXNTd2l0
Y2ggPSB0cnVlOworICAgIHN3aXRjaE5vZGUtPmdldFN0YXRlbWVudExpc3QoKS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgbVBhcmVudElzU3dpdGNoID0gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q2FzZShWaXNpdCwgVEludGVybUNh
c2UgKmNhc2VOb2RlKQoreworICAgIGVtaXRJbmRlbnRhdGlvbigpOworCisgICAgaWYgKGNhc2VO
b2RlLT5oYXNDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZEV4
cHIgPSBjYXNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisgICAgICAgIG1PdXQgPDwgImNhc2UgIjsK
KyAgICAgICAgY29uZEV4cHItPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtT3V0IDw8ICI6IjsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiZGVmYXVsdDpcbiI7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjpl
bWl0RnVuY3Rpb25TaWduYXR1cmUoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQoreworICAgIGNvbnN0
IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGVtaXRGdW5jdGlvblJldHVybihm
dW5jKTsKKworICAgIG1PdXQgPDwgIiAiOworICAgIGVtaXROYW1lT2YoZnVuYyk7CisgICAgaWYg
KGlzTWFpbikKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIjAiOworICAgIH0KKyAgICBtT3V0IDw8
ICIoIjsKKworICAgIGJvb2wgZW1pdENvbW1hICAgICAgICAgID0gZmFsc2U7CisgICAgY29uc3Qg
c2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jLmdldFBhcmFtQ291bnQoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChlbWl0Q29t
bWEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAgfQorICAg
ICAgICBlbWl0Q29tbWEgPSB0cnVlOworCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0g
PSAqZnVuYy5nZXRQYXJhbShpKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUGFyYW1ldGVyKGZ1bmMs
IHBhcmFtKTsKKyAgICB9CisKKyAgICBtT3V0IDw8ICIpIjsKK30KKwordm9pZCBHZW5NZXRhbFRy
YXZlcnNlcjo6ZW1pdEZ1bmN0aW9uUmV0dXJuKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykKK3sKKyAg
ICBjb25zdCBib29sIGlzTWFpbiA9IGZ1bmMuaXNNYWluKCk7CisKKyAgICBjb25zdCBUVHlwZSAm
cmV0dXJuVHlwZSA9IGZ1bmMuZ2V0UmV0dXJuVHlwZSgpOworICAgIGlmIChpc01haW4pCisgICAg
eworICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSByZXR1cm5UeXBlLmdldFN0
cnVjdCgpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IG51bGxwdHIpOworICAgICAgICBp
ZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5tYXRjaGVzKCpzdHJ1Y3R1cmUpKQorICAg
ICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICJmcmFnbWVudCAiOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMudmVydGV4T3V0Lm1hdGNoZXMoKnN0cnVjdHVy
ZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgInZlcnRleCAiOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVE9ETygpOworICAgICAgICB9
CisgICAgfQorICAgIGVtaXRUeXBlKHJldHVyblR5cGUsIEVtaXRUeXBlQ29uZmlnKCkpOworfQor
Cit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1
bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKQoreworICAgIGNvbnN0IGJvb2wg
aXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAg
ICA9IHBhcmFtLmdldFR5cGUoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0
eXBlLmdldFN0cnVjdCgpOworCisgICAgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgZXZk
Q29uZmlnOworICAgIGV2ZENvbmZpZy5pc1BhcmFtZXRlciAgICAgICA9IHRydWU7CisgICAgZXZk
Q29uZmlnLmlzTWFpblBhcmFtZXRlciAgID0gaXNNYWluOworICAgIGV2ZENvbmZpZy5lbWl0UG9z
dFF1YWxpZmllciA9IGlzTWFpbjsKKyAgICBldmRDb25maWcuaXNQb2ludGVyICAgICAgICAgPSBt
U3ltYm9sRW52LmlzUG9pbnRlcihwYXJhbSk7CisgICAgZXZkQ29uZmlnLmlzUmVmZXJlbmNlICAg
ICAgID0gbVN5bWJvbEVudi5pc1JlZmVyZW5jZShwYXJhbSk7CisgICAgZW1pdFZhcmlhYmxlRGVj
bGFyYXRpb24oVmFyRGVjbChwYXJhbSksIGV2ZENvbmZpZyk7CisKKyAgICBpZiAoaXNNYWluKQor
ICAgIHsKKyAgICAgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlvbiA9Cisg
ICAgICAgICAgICAoKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3QgKikmbUNvbXBpbGVyKS0+Z2V0
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpOworICAgICAgICBpZiAoc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLm1hdGNo
ZXMoKnN0cnVjdHVyZSkgfHwKKyAgICAgICAgICAgICAgICBtUGlwZWxpbmVTdHJ1Y3RzLnZlcnRl
eEluLm1hdGNoZXMoKnN0cnVjdHVyZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bU91dCA8PCAiIFtbc3RhZ2VfaW5dXSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmFuZ2xlVW5pZm9ybXMubWF0Y2hlcygqc3RydWN0dXJlKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIgW1tidWZmZXIoIiA8PCBy
eDo6bXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggPDwgIildXSI7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLnVzZXJVbmlmb3Jtcy5t
YXRjaGVzKCpzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXQg
PDwgIiBbW2J1ZmZlcigiIDw8IG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4IDw8ICIpXV0iOworICAg
ICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFVuaWZvcm1CdWZmZXJCaW5kaW5nKHBhcmFtLm5h
bWUoKS5kYXRhKCksIG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAgICAgICBt
TWFpblVuaWZvcm1CdWZmZXJJbmRleCArPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cnVjdHVyZS0+bmFtZSgpID09ICJt
ZXRhbDo6c2FtcGxlciIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAi
IFtbc2FtcGxlcigiIDw8IChtTWFpblNhbXBsZXJJbmRleCkgPDwgIildXSI7CisgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgb3JpZ2luYWxOYW1lID0KKyAgICAgICAgICAgICAgICAg
ICAgcmVmbGVjdGlvbi0+Z2V0T3JpZ2luYWxOYW1lKHBhcmFtLnVuaXF1ZUlkKCkuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFNhbXBsZXJCaW5kaW5nKG9yaWdpbmFsTmFt
ZSwgbU1haW5TYW1wbGVySW5kZXgpOworICAgICAgICAgICAgICAgIG1NYWluU2FtcGxlckluZGV4
ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbU91dCA8PCAiIFtbdGV4dHVyZSgiIDw8IChtTWFpblRleHR1cmVJ
bmRleCkgPDwgIildXSI7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvcmlnaW5hbE5h
bWUgPSByZWZsZWN0aW9uLT5nZXRPcmlnaW5hbE5hbWUocGFyYW0udW5pcXVlSWQoKS5nZXQoKSk7
CisgICAgICAgICAgICByZWZsZWN0aW9uLT5hZGRUZXh0dXJlQmluZGluZyhvcmlnaW5hbE5hbWUs
IG1NYWluU2FtcGxlckluZGV4KTsKKyAgICAgICAgICAgIG1NYWluVGV4dHVyZUluZGV4ICs9IHR5
cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKE5h
bWUocGFyYW0pID09IFBpcGVsaW5le1BpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkLCBudWxscHRy
fS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQaXBlbGluZTo6VmFyaWFudDo6TW9kaWZpZWQpKQorICAgICAgICB7CisgICAgICAgICAg
ICBtT3V0IDw8ICIgW1tpbnN0YW5jZV9pZF1dIjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rp
b25Qcm90b3R5cGUgKmZ1bmNQcm90b05vZGUpCit7CisgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5j
ID0gKmZ1bmNQcm90b05vZGUtPmdldEZ1bmN0aW9uKCk7CisKKyAgICBlbWl0SW5kZW50YXRpb24o
KTsKKyAgICBlbWl0RnVuY3Rpb25TaWduYXR1cmUoZnVuYyk7Cit9CisKK2Jvb2wgR2VuTWV0YWxU
cmF2ZXJzZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICpmdW5jRGVmTm9kZSkKK3sKKyAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAq
ZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgVEludGVybUJsb2NrICZib2R5ICAgID0g
KmZ1bmNEZWZOb2RlLT5nZXRCb2R5KCk7CisKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBl
bWl0RnVuY3Rpb25TaWduYXR1cmUoZnVuYyk7CisgICAgbU91dCA8PCAiXG4iOworICAgIGJvZHku
dHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dlbk1ldGFsVHJhdmVy
c2VyOjpGdW5jVG9OYW1lIEdlbk1ldGFsVHJhdmVyc2VyOjpCdWlsZEZ1bmNUb05hbWUoKQorewor
ICAgIEZ1bmNUb05hbWUgbWFwOworCisgICAgYXV0byBwdXRBbmdsZSA9IFsmXShjb25zdCBjaGFy
ICpuYW1lU3RyKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyBuYW1lKG5hbWVTdHIp
OworICAgICAgICBBU1NFUlQobWFwLmZpbmQobmFtZSkgPT0gbWFwLmVuZCgpKTsKKyAgICAgICAg
bWFwW25hbWVdID0gTmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAg
ICB9OworCisgICAgcHV0QW5nbGUoInRleGVsRmV0Y2giKTsKKyAgICBwdXRBbmdsZSgidGV4ZWxG
ZXRjaE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlIik7CisgICAgcHV0QW5nbGUoInRl
eHR1cmUxRCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMURMb2QiKTsKKyAgICBwdXRBbmdsZSgi
dGV4dHVyZTFEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMkQiKTsKKyAgICBwdXRB
bmdsZSgidGV4dHVyZTJETG9kIik7CisgICAgcHV0QW5nbGUoInRleHR1cmUyRFByb2oiKTsKKyAg
ICBwdXRBbmdsZSgidGV4dHVyZTJEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlM0Qi
KTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZTNETG9kIik7CisgICAgcHV0QW5nbGUoInRleHR1cmUz
RFByb2pMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmUiKTsKKyAgICBwdXRBbmdsZSgi
dGV4dHVyZUN1YmVMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmVQcm9qTG9kIik7Cisg
ICAgcHV0QW5nbGUoInRleHR1cmVHcmFkIik7CisgICAgcHV0QW5nbGUoInRleHR1cmVHcmFkT2Zm
c2V0Iik7CisgICAgcHV0QW5nbGUoInRleHR1cmVMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVy
ZUxvZE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlT2Zmc2V0Iik7CisgICAgcHV0QW5n
bGUoInRleHR1cmVQcm9qIik7CisgICAgcHV0QW5nbGUoInRleHR1cmVQcm9qR3JhZCIpOworICAg
IHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVy
ZVByb2pMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pMb2RPZmZzZXQiKTsKKyAgICBw
dXRBbmdsZSgidGV4dHVyZVByb2pPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZVNpemUi
KTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKQoreworICAg
IGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmYXJncyA9ICphZ2dyZWdhdGVOb2RlLT5nZXRTZXF1ZW5j
ZSgpOworCisgICAgYXV0byBlbWl0QXJnTGlzdCA9IFsmXShjb25zdCBjaGFyICpvcGVuLCBjb25z
dCBjaGFyICpjbG9zZSkgeworICAgICAgICBtT3V0IDw8IG9wZW47CisKKyAgICAgICAgYm9vbCBl
bWl0Q29tbWEgPSBmYWxzZTsKKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJncykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVtaXRDb21tYSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bWl0Q29tbWEgPSB0cnVlOworICAgICAgICAgICAgYXJnLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1PdXQgPDwgY2xvc2U7CisgICAgfTsKKworICAgIGNvbnN0IFRUeXBl
ICZyZXRUeXBlID0gYWdncmVnYXRlTm9kZS0+Z2V0VHlwZSgpOworCisgICAgaWYgKGFnZ3JlZ2F0
ZU5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IGJvb2wgaXNTdGFu
ZGFsb25lID0gZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Jsb2NrKCk7CisgICAgICAgIGlmIChpc1N0
YW5kYWxvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFByZXZlbnQgY29uc3RydWN0b3Ig
ZnJvbSBiZWluZyBpbnRlcnByZXRlZCBhcyBhIGRlY2xhcmF0aW9uIGJ5IHdyYXBwaW5nIGluIHBh
cmVucy4KKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiBnaXZlbiBzb21ldGhpbmcg
bGlrZToKKyAgICAgICAgICAgIC8vICAgICAgaW50KHN5bWJvbCk7IC8vIDwtIFRoaXMgd2lsbCBi
ZSB0cmVhdGVkIGxpa2UgYGludCBzeW1ib2w7YC4uLiBkb24ndCB3YW50IHRoYXQuCisgICAgICAg
ICAgICAvLyBTbyBpbnN0ZWFkIGVtaXQ6CisgICAgICAgICAgICAvLyAgICAgIChpbnQoc3ltYm9s
KSk7CisgICAgICAgICAgICBtT3V0IDw8ICIoIjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworCisgICAgICAgIGlmIChyZXRUeXBlLmlzQXJyYXko
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdFR5cGUocmV0VHlwZSwgZXRDb25maWcpOwor
ICAgICAgICAgICAgZW1pdEFyZ0xpc3QoInsiLCAifSIpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHJldFR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRU
eXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKyAgICAgICAgICAgIGVtaXRBcmdMaXN0KCJ7IiwgIn0i
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRU
eXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKyAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIiki
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0YW5kYWxvbmUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1PdXQgPDwgIikiOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBh
Z2dyZWdhdGVOb2RlLT5nZXRPcCgpOworICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1bmN0aW9uSW5BU1Q6CisgICAgICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEludGVybmFsUmF3RnVuY3Rpb246CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0
ZU5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgZW1pdE5hbWVPZihmdW5jKTsK
KyAgICAgICAgICAgICAgICBlbWl0QXJnTGlzdCgiKCIsICIpIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsK
KyAgICAgICAgICAgICAgICBhdXRvIGl0ICAgICAgICAgICAgICAgPSBtRnVuY1RvTmFtZS5maW5k
KGZ1bmMubmFtZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbUZ1bmNUb05hbWUu
ZW5kKCkpOworICAgICAgICAgICAgICAgIEVtaXROYW1lKG1PdXQsIGl0LT5zZWNvbmQpOworICAg
ICAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBnZXRBcmdUeXBlID0gWyZdKHNpemVfdCBpbmRl
eCkgLT4gY29uc3QgVFR5cGUgKiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGFy
Z3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaW5kZXhdLT5nZXRBc1R5cGVkKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAmYXJnLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgICAgIEFTU0VSVCghYXJncy5lbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlw
ZSAqYXJnVHlwZTAgPSBnZXRBcmdUeXBlKDApOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICphcmdUeXBlMSA9IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGFyZ1R5
cGUwKTsKKworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wTmFtZSA9IEdldE9wZXJhdG9y
U3RyaW5nKG9wLCByZXRUeXBlLCBhcmdUeXBlMCwgYXJnVHlwZTEpOworCisgICAgICAgICAgICAg
ICAgaWYgKElzU3ltYm9saWNPcGVyYXRvcihvcCwgcmV0VHlwZSwgYXJnVHlwZTAsIGFyZ1R5cGUx
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJncy5z
aXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtTm9kZSAmb3BlcmFuZE5vZGUgPSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGRO
b2RlKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1Bvc3RmaXgob3ApKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbU91dCA8PCBvcE5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdy
b3VwZWRUcmF2ZXJzZShvcGVyYW5kTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKG9wZXJhbmRO
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU91dCA8PCBvcE5hbWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1Ob2RlICZsZWZ0Tm9kZSAgPSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGROb2RlKDApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZyaWdodE5vZGUgPSAqYWdn
cmVnYXRlTm9kZS0+Z2V0Q2hpbGROb2RlKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdyb3VwZWRUcmF2ZXJzZShsZWZ0Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bU91dCA8PCAiICIgPDwgb3BOYW1lIDw8ICIgIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncm91cGVkVHJhdmVyc2UocmlnaHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEFyZ0xpc3QoIigiLCAiKSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3BlbkJyYWNlKCkKK3sKKyAgICBBU1NFUlQobUlu
ZGVudExldmVsID49IDApOworCisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91dCA8PCAi
e1xuIjsKKyAgICArK21JbmRlbnRMZXZlbDsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6
ZW1pdENsb3NlQnJhY2UoKQoreworICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPj0gMSk7CisKKyAg
ICAtLW1JbmRlbnRMZXZlbDsKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0IDw8ICJ9
IjsKK30KKworc3RhdGljIGJvb2wgUmVxdWlyZXNTZW1pY29sb25UZXJtaW5hdG9yKFRJbnRlcm1O
b2RlICZub2RlKQoreworICAgIGlmIChub2RlLmdldEFzQmxvY2soKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNMb29wTm9kZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobm9kZS5nZXRBc1N3aXRj
aE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG5v
ZGUuZ2V0QXNJZkVsc2VOb2RlKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzQ2FzZU5vZGUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBib29sIE5ld2xpbmVQYWQoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAgaWYgKG5v
ZGUuZ2V0QXNGdW5jdGlvbkRlZmluaXRpb24oKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBpZiAoVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSA9IG5vZGUuZ2V0
QXNEZWNsYXJhdGlvbk5vZGUoKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChkZWNsTm9kZS0+Z2V0
Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBUSW50ZXJtTm9kZSAmY2hpbGROb2RlID0gKmRl
Y2xOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisgICAgICAgIGlmIChUSW50ZXJtU3ltYm9sICpzeW1i
b2xOb2RlID0gY2hpbGROb2RlLmdldEFzU3ltYm9sTm9kZSgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7CisgICAg
ICAgICAgICByZXR1cm4gdmFyLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sg
KmJsb2NrTm9kZSkKK3sKKyAgICBBU1NFUlQobUluZGVudExldmVsID49IC0xKTsKKyAgICBjb25z
dCBib29sIGlzR2xvYmFsU2NvcGUgID0gbUluZGVudExldmVsID09IC0xOworICAgIGNvbnN0IGJv
b2wgcGFyZW50SXNTd2l0Y2ggPSBtUGFyZW50SXNTd2l0Y2g7CisgICAgbVBhcmVudElzU3dpdGNo
ICAgICAgICAgICA9IGZhbHNlOworCisgICAgaWYgKGlzR2xvYmFsU2NvcGUpCisgICAgeworICAg
ICAgICArK21JbmRlbnRMZXZlbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZW1p
dE9wZW5CcmFjZSgpOworICAgICAgICBpZiAocGFyZW50SXNTd2l0Y2gpCisgICAgICAgIHsKKyAg
ICAgICAgICAgICsrbUluZGVudExldmVsOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVy
bU5vZGUgKnByZXZTdG10Tm9kZSA9IG51bGxwdHI7CisKKyAgICBjb25zdCBzaXplX3Qgc3RtdENv
dW50ID0gYmxvY2tOb2RlLT5nZXRDaGlsZENvdW50KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdG10Q291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlICZzdG10Tm9k
ZSA9ICpibG9ja05vZGUtPmdldENoaWxkTm9kZShpKTsKKworICAgICAgICBpZiAoaXNHbG9iYWxT
Y29wZSAmJiBwcmV2U3RtdE5vZGUgJiYgKE5ld2xpbmVQYWQoKnByZXZTdG10Tm9kZSkgfHwgTmV3
bGluZVBhZChzdG10Tm9kZSkpKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICJcbiI7
CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgYm9vbCBpc0Nhc2UgPSBzdG10Tm9kZS5nZXRBc0Nh
c2VOb2RlKCk7CisgICAgICAgIG1JbmRlbnRMZXZlbCAtPSBpc0Nhc2U7CisgICAgICAgIGVtaXRJ
bmRlbnRhdGlvbigpOworICAgICAgICBtSW5kZW50TGV2ZWwgKz0gaXNDYXNlOworICAgICAgICBz
dG10Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFJlcXVpcmVzU2VtaWNvbG9uVGVy
bWluYXRvcihzdG10Tm9kZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgIjsiOwor
ICAgICAgICB9CisgICAgICAgIG1PdXQgPDwgIlxuIjsKKworICAgICAgICBwcmV2U3RtdE5vZGUg
PSAmc3RtdE5vZGU7CisgICAgfQorCisgICAgaWYgKGlzR2xvYmFsU2NvcGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobUluZGVudExldmVsID09IDApOworICAgICAgICAtLW1JbmRlbnRMZXZlbDsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHBhcmVudElzU3dpdGNoKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQobUluZGVudExldmVsID49IDEpOworICAgICAgICAg
ICAgLS1tSW5kZW50TGV2ZWw7CisgICAgICAgIH0KKyAgICAgICAgZW1pdENsb3NlQnJhY2UoKTsK
KyAgICAgICAgbVBhcmVudElzU3dpdGNoID0gcGFyZW50SXNTd2l0Y2g7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEdsb2JhbFF1
YWxpZmllckRlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24gKikKK3sKKyAgICBMT0dJQ19FUlJPUigpOyAgLy8gUmV3cml0ZUdsb2JhbFF1YWxpZmllckRl
Y2xzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB0aGlzLgorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXREZWNsYXJhdGlvbihWaXNpdCwg
VEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSkKK3sKKyAgICBBU1NFUlQoZGVjbE5vZGUtPmdl
dENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICBUSW50ZXJtTm9kZSAmbm9kZSA9ICpkZWNsTm9kZS0+
Z2V0Q2hpbGROb2RlKDApOworCisgICAgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgZXZk
Q29uZmlnOworCisgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLmdldEFz
U3ltYm9sTm9kZSgpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1i
b2xOb2RlLT52YXJpYWJsZSgpOworICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJE
ZWNsKHZhciksIGV2ZENvbmZpZyk7CisgICAgfQorICAgIGVsc2UgaWYgKFRJbnRlcm1CaW5hcnkg
KmluaXROb2RlID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChpbml0Tm9kZS0+Z2V0T3AoKSA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUpOworICAgICAg
ICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gaW5pdE5vZGUtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFsdWVOb2RlICAgPSBpbml0Tm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSAm
JiB2YWx1ZU5vZGUpOworCisgICAgICAgIGlmIChnZXRSb290Tm9kZSgpID09IGdldFBhcmVudEJs
b2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERlZmVyR2xvYmFsSW5pdGlhbGl6ZXJz
IHNob3VsZCBoYXZlIHR1cm5lZCBub24tY29uc3QgZ2xvYmFsIGluaXRpYWxpemVycyBpbnRvCisg
ICAgICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplcnMuIE5vdGUgdGhhdCB2YXJpYWJsZXMg
bWFya2VkIGFzIEV2cUdsb2JhbCBjYW4gYmUgdHJlYXRlZCBhcworICAgICAgICAgICAgLy8gRXZx
Q29uc3QgaW4gc29tZSBBTkdMRSBjb2RlIGJ1dCBub3QgYWN0dWFsbHkgaGF2ZSB0aGVpciBxdWFs
aWZpZXIgYWN0dWFsbHkgY2hhbmdlZCB0bworICAgICAgICAgICAgLy8gRXZxQ29uc3QuIFRodXMg
anVzdCBhc3N1bWUgYWxsIEV2cUdsb2JhbCBhcmUgYWN0dWFsbHkgRXZxQ29uc3QgZm9yIGFsbCBj
b2RlIHJ1biBhZnRlcgorICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuCisg
ICAgICAgICAgICBtT3V0IDw8ICJjb25zdGFudCAiOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworICAgICAgICBjb25z
dCBOYW1lIHZhck5hbWUodmFyKTsKKworICAgICAgICBpZiAoRXhwcmVzc2lvbkNvbnRhaW5zTmFt
ZSh2YXJOYW1lLCAqdmFsdWVOb2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmFtZWRT
eW1ib2xzWyZ2YXJdID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUodmFyTmFtZSk7CisgICAgICAgIH0K
KworICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKHZhciksIGV2ZENvbmZp
Zyk7CisgICAgICAgIG1PdXQgPDwgIiA9ICI7CisgICAgICAgIGdyb3VwZWRUcmF2ZXJzZSgqdmFs
dWVOb2RlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIGNvbnN0IFRM
b29wVHlwZSBsb29wVHlwZSA9IGxvb3BOb2RlLT5nZXRUeXBlKCk7CisKKyAgICBzd2l0Y2ggKGxv
b3BUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0Rm9yTG9vcChsb29wTm9kZSk7CisgICAgICAgIGNhc2UgVExvb3BU
eXBlOjpFTG9vcFdoaWxlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0V2hpbGVMb29wKGxvb3BO
b2RlKTsKKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZToKKyAgICAgICAgICAg
IHJldHVybiB2aXNpdERvV2hpbGVMb29wKGxvb3BOb2RlKTsKKyAgICB9Cit9CisKK2Jvb2wgR2Vu
TWV0YWxUcmF2ZXJzZXI6OnZpc2l0Rm9yTG9vcChUSW50ZXJtTG9vcCAqbG9vcE5vZGUpCit7Cisg
ICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkgPT0gVExvb3BUeXBlOjpFTG9vcEZvcik7CisK
KyAgICBUSW50ZXJtTm9kZSAqaW5pdE5vZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBU
SW50ZXJtVHlwZWQgKmNvbmROb2RlID0gbG9vcE5vZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJ
bnRlcm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJ
bnRlcm1CbG9jayAqYm9keU5vZGUgPSBsb29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChi
b2R5Tm9kZSk7CisKKyAgICBtT3V0IDw8ICJmb3IgKCI7CisKKyAgICBpZiAoaW5pdE5vZGUpCisg
ICAgeworICAgICAgICBpbml0Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1PdXQgPDwgIiAiOworICAgIH0KKworICAgIG1PdXQgPDwgIjsgIjsK
KworICAgIGlmIChjb25kTm9kZSkKKyAgICB7CisgICAgICAgIGNvbmROb2RlLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICB9CisKKyAgICBtT3V0IDw8ICI7ICI7CisKKyAgICBpZiAoZXhwck5vZGUpCisg
ICAgeworICAgICAgICBleHByTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisgICAgbU91
dCA8PCAiKVxuIjsKKworICAgIGJvZHlOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRXaGlsZUxvb3AoVElu
dGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIEFTU0VSVChsb29wTm9kZS0+Z2V0VHlwZSgpID09
IFRMb29wVHlwZTo6RUxvb3BXaGlsZSk7CisKKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5vZGUgID0g
bG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmNvbmROb2RlID0gbG9vcE5v
ZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBsb29wTm9k
ZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChjb25kTm9kZSAmJiBib2R5Tm9kZSk7CisgICAgQVNT
RVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOworCisgICAgZW1pdEluZGVudGF0aW9uKCk7Cisg
ICAgbU91dCA8PCAid2hpbGUgKCI7CisgICAgY29uZE5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAg
IG1PdXQgPDwgIilcbiI7CisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdERvV2hpbGVMb29w
KFRJbnRlcm1Mb29wICpsb29wTm9kZSkKK3sKKyAgICBBU1NFUlQobG9vcE5vZGUtPmdldFR5cGUo
KSA9PSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZSk7CisKKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5v
ZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmNvbmROb2RlID0g
bG9vcE5vZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBs
b29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBs
b29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChjb25kTm9kZSAmJiBib2R5Tm9kZSk7Cisg
ICAgQVNTRVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOworCisgICAgZW1pdEluZGVudGF0aW9u
KCk7CisgICAgbU91dCA8PCAiZG9cbiI7CisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOwor
ICAgIG1PdXQgPDwgIlxuIjsKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0IDw8ICJ3
aGlsZSAoIjsKKyAgICBjb25kTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgbU91dCA8PCAiKTsi
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCAqYnJhbmNoTm9kZSkKK3sKKyAgICBjb25zdCBU
T3BlcmF0b3IgZmxvd09wID0gYnJhbmNoTm9kZS0+Z2V0Rmxvd09wKCk7CisgICAgVEludGVybVR5
cGVkICpleHByTm9kZSA9IGJyYW5jaE5vZGUtPmdldEV4cHJlc3Npb24oKTsKKworICAgIGVtaXRJ
bmRlbnRhdGlvbigpOworCisgICAgc3dpdGNoIChmbG93T3ApCisgICAgeworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wS2lsbDoKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGV4cHJO
b2RlID09IG51bGxwdHIpOworICAgICAgICAgICAgbU91dCA8PCAibWV0YWw6OmRpc2NhcmRfZnJh
Z21lbnQoKSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFJldHVybjoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAicmV0dXJu
IjsKKyAgICAgICAgICAgIGlmIChleHByTm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtT3V0IDw8ICIgIjsKKyAgICAgICAgICAgICAgICBleHByTm9kZS0+dHJhdmVyc2UodGhp
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEJyZWFrOgorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
ZXhwck5vZGUgPT0gbnVsbHB0cik7CisgICAgICAgICAgICBtT3V0IDw8ICJicmVhayI7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbnRp
bnVlOgorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoZXhwck5vZGUgPT0gbnVsbHB0cik7
CisgICAgICAgICAgICBtT3V0IDw8ICJjb250aW51ZSI7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgTE9HSUNfRVJS
T1IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGlj
IHNpemVfdCBlbWl0TWV0YWxDYWxsQ291bnQgPSAwOworCitib29sIHNoOjpFbWl0TWV0YWwoVENv
bXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3Qs
CisgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorICAgICAgICAgICAgICAgICAgIGNv
bnN0IFBpcGVsaW5lU3RydWN0cyAmcGlwZWxpbmVTdHJ1Y3RzLAorICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgU3ltYm9s
RW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVByZWx1ZGVD
b25maWcgJnBwYykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBjb21waWxlci5nZXRJbmZv
U2luaygpLm9iajsKKworICAgIHsKKyAgICAgICAgKytlbWl0TWV0YWxDYWxsQ291bnQ7CisgICAg
ICAgIGF1dG8gZmlsZW5hbWVQcm90byA9IHJlYWRTdHJpbmdFbnZWYXIoIkdNRF9GSVhFRF9FTUlU
Iik7CisgICAgICAgIGlmICghZmlsZW5hbWVQcm90by5lbXB0eSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoZmlsZW5hbWVQcm90byAhPSAiL2Rldi9udWxsIikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHRyeU9wZW4gPSBbJl0oY2hhciBjb25zdCAqZXh0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlbmFtZVByb3RvOworICAgICAg
ICAgICAgICAgICAgICBmaWxlbmFtZSArPSBzdGQ6OnRvX3N0cmluZyhlbWl0TWV0YWxDYWxsQ291
bnQpOworICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSArPSAiLiI7CisgICAgICAgICAgICAg
ICAgICAgIGZpbGVuYW1lICs9IGV4dDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcGVu
KGZpbGVuYW1lLmNfc3RyKCksICJyYiIpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgRklMRSAqZmlsZSA9IHRyeU9wZW4oIm1ldGFsIik7CisgICAgICAgICAgICAgICAgaWYg
KCFmaWxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsZSA9IHRy
eU9wZW4oImNwcCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQo
ZmlsZSk7CisKKyAgICAgICAgICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7CisgICAg
ICAgICAgICAgICAgc2l6ZV90IGZpbGVTaXplID0gZnRlbGwoZmlsZSk7CisgICAgICAgICAgICAg
ICAgZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQpOworCisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8Y2hhcj4gYnVmZjsKKyAgICAgICAgICAgICAgICBidWZmLnJlc2l6ZShmaWxlU2l6ZSArIDEp
OworICAgICAgICAgICAgICAgIGZyZWFkKGJ1ZmYuZGF0YSgpLCBmaWxlU2l6ZSwgMSwgZmlsZSk7
CisgICAgICAgICAgICAgICAgYnVmZi5iYWNrKCkgPSAnXDAnOworCisgICAgICAgICAgICAgICAg
ZmNsb3NlKGZpbGUpOworCisgICAgICAgICAgICAgICAgb3V0IDw8IGJ1ZmYuZGF0YSgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIG91dCA8PCAiXG5cbiI7CisKKyAgICBpZiAoIUVtaXRQcm9ncmFtUHJlbHVkZShyb290
LCBvdXQsIHBwYykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
eworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgICAgIERlYnVnU2luayBv
dXRXcmFwcGVyKG91dCwgcmVhZEJvb2xFbnZWYXIoIkdNRF9TVERPVVQiKSk7CisgICAgICAgIG91
dFdyYXBwZXIud2F0Y2gocmVhZFN0cmluZ0VudlZhcigiR01EX1dBVENIX1NUUklORyIpKTsKKyNl
bHNlCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dFdyYXBwZXIgPSBvdXQ7CisjZW5kaWYKKyAg
ICAgICAgR2VuTWV0YWxUcmF2ZXJzZXIgZ2VuKGNvbXBpbGVyLCBvdXRXcmFwcGVyLCBpZEdlbiwg
cGlwZWxpbmVTdHJ1Y3RzLCBpbnZhcmlhbnRzLCBzeW1ib2xFbnYpOworICAgICAgICByb290LnRy
YXZlcnNlKCZnZW4pOworICAgIH0KKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRW1pdE1ldGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ4YWY5YTFjODdkNTczY2FiNTI3Mjc1YjRkMjMy
Y2NmMjRhNDFmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0YWwuaApA
QCAtMCwwICsxLDMyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX0VNSVRNRVRBTF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KKworI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxl
ci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlw
ZWxpbmVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBXYWxrcyB0aGUgQVNU
IGFuZCBlbWl0cyBNZXRhbCBjb2RlLgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtaXRNZXRhbChU
Q29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZp
ZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1
Y3RzICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKTsKKworfSAgLy8gbmFtZXNwYWNlIHNo
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
RU1JVE1FVEFMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJs
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODIz
ZmM3MjgyMGNmZmRkZjMyNDBkYzI0NjU5YTVlZGNmZGI5ZDI3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaApAQCAtMCwwICsxLDQ1IEBACisvLwor
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X0VOVklST05NRU5UVkFSSUFCTEVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfRU5WSVJPTk1FTlRWQVJJQUJMRV9IXworCisjaW5jbHVkZSA8Y3N0
ZGxpYj4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKwor
bmFtZXNwYWNlIHNoCit7CisKK2lubGluZSBib29sIHJlYWRCb29sRW52VmFyKGNvbnN0IGNoYXIg
KnZhcikKK3sKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdGQ6OmdldGVudih2YXIpOworICAgIGlm
IChzdHIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKHN0cmNtcChzdHIsICIwIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgQVNTRVJUKHN0cmNtcChzdHIsICIxIikgPT0gMCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSBzdGQ6OnN0cmluZyByZWFkU3RyaW5nRW52VmFyKGNvbnN0IGNo
YXIgKnZhcikKK3sKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdGQ6OmdldGVudih2YXIpOworICAg
IGlmIChzdHIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cisg
ICAgcmV0dXJuIHN0cjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRU5WSVJPTk1FTlRWQVJJQUJM
RV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2U5YzAzZWI1ZDM1ZTg5ZmVi
MTZkNjc0ZDk2MTcwYzI3MjY5NmE4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9I
b2lzdENvbnN0YW50cy5jcHAKQEAgLTAsMCArMSw5NiBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
QXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0xheW91dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ZpbmRGdW5jdGlvbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVJlYnVpbGQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9SZXBsYWNlVmFyaWFibGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworY2xhc3MgUmV3cml0ZXIgOiBwcml2
YXRlIFRJbnRlcm1SZWJ1aWxkCit7CisgIHByaXZhdGU6CisgICAgY29uc3Qgc2l6ZV90IG1NaW5S
ZXF1aXJlZFNpemU7CisgICAgVEludGVybVNlcXVlbmNlIG1Ib2lzdGVkRGVjbE5vZGVzOworCisg
IHB1YmxpYzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBzaXplX3QgbWluUmVx
dWlyZWRTaXplKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCBmYWxz
ZSksIG1NaW5SZXF1aXJlZFNpemUobWluUmVxdWlyZWRTaXplKQorICAgIHt9CisKKyAgICBQcmVS
ZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGdldFBhcmVudEZ1bmN0aW9uKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKGRlY2xO
b2RlKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVjbC5zeW1ib2wuZ2V0VHlw
ZSgpOworICAgICAgICAgICAgaWYgKHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxpZmllcjo6
RXZxQ29uc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdEV4
cHIgJiYgZGVjbC5pbml0RXhwci0+aGFzQ29uc3RhbnRWYWx1ZSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBNZXRhbExheW91dE9m
KHR5cGUpLnNpemVPZjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbU1pblJlcXVp
cmVkU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
bUhvaXN0ZWREZWNsTm9kZXMucHVzaF9iYWNrKCZkZWNsTm9kZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4ge2RlY2xO
b2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAgIGJvb2wgcmV3cml0ZShUSW50
ZXJtQmxvY2sgJnJvb3QsIElkR2VuICZpZEdlbikKKyAgICB7CisgICAgICAgIGlmICghcmVidWls
ZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtSG9pc3RlZERlY2xOb2Rlcy5lbXB0eSgpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJvb3QuaW5z
ZXJ0Q2hpbGROb2RlcyhGaW5kRmlyc3RGdW5jdGlvbkRlZmluaXRpb25JbmRleCgmcm9vdCksIG1I
b2lzdGVkRGVjbE5vZGVzKTsKKworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpvcGFxdWVEZWNs
Tm9kZSA6IG1Ib2lzdGVkRGVjbE5vZGVzKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJt
RGVjbGFyYXRpb24gKmRlY2xOb2RlID0gb3BhcXVlRGVjbE5vZGUtPmdldEFzRGVjbGFyYXRpb25O
b2RlKCk7CisgICAgICAgICAgICBBU1NFUlQoZGVjbE5vZGUpOworICAgICAgICAgICAgY29uc3Qg
VFZhcmlhYmxlICZvbGRWYXIgPSBWaWV3RGVjbGFyYXRpb24oKmRlY2xOb2RlKS5zeW1ib2wudmFy
aWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmV3TmFtZSAgICAgID0gaWRHZW4uY3Jl
YXRlTmV3TmFtZShvbGRWYXIubmFtZSgpKTsKKyAgICAgICAgICAgIGF1dG8gKm5ld1ZhciA9IG5l
dyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgbmV3TmFtZS5yYXdOYW1lKCksICZvbGRWYXIuZ2V0
VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOYW1l
LnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmbUNvbXBp
bGVyLCAmcm9vdCwgJm9sZFZhciwgbmV3VmFyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OkhvaXN0Q29uc3RhbnRzKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgbWluUmVxdWlyZWRTaXplKQoreworICAgIHJldHVybiBSZXdyaXRlcihj
b21waWxlciwgbWluUmVxdWlyZWRTaXplKS5yZXdyaXRlKHJvb3QsIGlkR2VuKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0
Q29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDMwNmE1ZTQ3M2M4YmVjNWNjZmE0OGRkNGYxZWJmYzNh
NDk0NTA1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5o
CkBAIC0wLDAgKzEsMjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNfSF8KKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNfSF8KKwor
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0lkR2VuLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBIb2lzdHMgZnVu
Y3Rpb24tbG9jYWwgY29uc3RhbnRzIHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgdGhlaXIgTWV0YWwg
c2l6ZW9mIG1lZXRzCisvLyBgbWluUmVxdWlyZWRTaXplYC4KK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBIb2lzdENvbnN0YW50cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IG1pblJlcXVpcmVkU2l6ZSk7CisKK30gIC8vIG5hbWVzcGFj
ZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX0hPSVNUQ09OU1RBTlRTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0lkR2VuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGFlZDZiOWI4ZTYzOTY0ZjE1
MTNiODM2ZmI5ODg5MDIzMjAyMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lk
R2VuLmNwcApAQCAtMCwwICsxLDk3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHVub3JkZXJl
ZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5oIgorCit1c2lu
ZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0lkR2VuOjpJZEdl
bigpIHt9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcsIHR5cGVuYW1lIFN0cmluZ1RvSW1t
dXRhYmxlPgorTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzaXplX3QgY291bnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmdUb0ltbXV0YWJsZSAmdG9JbW11dGFibGUpCit7Cisg
ICAgY29uc3QgdW5zaWduZWQgaWQgPSBtTmV4dCsrOworICAgIGNoYXIgaWRCdWZmZXJbc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46OmRpZ2l0czEwICsgMV07CisgICAgc3ByaW50ZihpZEJ1
ZmZlciwgIiV1IiwgaWQpOworCisgICAgbU5ld05hbWVCdWZmZXIuY2xlYXIoKTsKKyAgICBtTmV3
TmFtZUJ1ZmZlciArPSAnXyc7CisgICAgbU5ld05hbWVCdWZmZXIgKz0gaWRCdWZmZXI7CisKKyAg
ICAvLyBOb3RlOgorICAgIC8vIERvdWJsZSB1bmRlcnNjb3JlcyBhcmUgb25seSBhbGxvd2VkIGlu
IEMrKyAoYW5kIHRodXMgTWV0YWwpIHZlbmRvciBpZGVudGlmaWVycywgc28gaGVyZSB3ZQorICAg
IC8vIHRha2UgY2FyZSBub3QgdG8gaW50cm9kdWNlIGFueS4KKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmlu
ZyBiYXNlTmFtZSA9IHRvSW1tdXRhYmxlKGJhc2VOYW1lc1tpXSk7CisgICAgICAgIGlmICghYmFz
ZU5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAqYmFzZSA9
IGJhc2VOYW1lLmRhdGEoKTsKKyAgICAgICAgICAgIGlmIChiYXNlTmFtZS5iZWdpbnNXaXRoKGtB
bmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiYXNl
ICs9IHNpemVvZihrQW5nbGVJbnRlcm5hbFByZWZpeCkgLSAxOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCpiYXNlID09ICdfJykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICArK2Jhc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoKmJhc2UgIT0gJ18n
KTsKKworICAgICAgICAgICAgaWYgKG1OZXdOYW1lQnVmZmVyLmJhY2soKSAhPSAnXycpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbU5ld05hbWVCdWZmZXIgKz0gJ18nOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBtTmV3TmFtZUJ1ZmZlciArPSBiYXNlOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIE5hbWUoSW1tdXRhYmxlU3RyaW5nKG1OZXdOYW1lQnVmZmVy
KSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cit9CisKK05hbWUgSWRHZW46OmNyZWF0ZU5l
d05hbWUoY29uc3QgSW1tdXRhYmxlU3RyaW5nICZiYXNlTmFtZSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlTmV3TmFtZSh7YmFzZU5hbWV9KTsKK30KKworTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShj
b25zdCBOYW1lICZiYXNlTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFt
ZS5yYXdOYW1lKCkpOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKGNvbnN0IGNoYXIg
KmJhc2VOYW1lKQoreworICAgIHJldHVybiBjcmVhdGVOZXdOYW1lKEltbXV0YWJsZVN0cmluZyhi
YXNlTmFtZSkpOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxJbW11dGFibGVTdHJpbmc+IGJhc2VOYW1lcykKK3sKKyAgICByZXR1cm4gY3JlYXRl
TmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFtZXMuYmVnaW4oKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBbXShjb25zdCBJbW11dGFibGVTdHJpbmcgJnMpIHsgcmV0dXJuIHM7IH0p
OworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxO
YW1lPiBiYXNlTmFtZXMpCit7CisgICAgcmV0dXJuIGNyZWF0ZU5ld05hbWUoYmFzZU5hbWVzLnNp
emUoKSwgYmFzZU5hbWVzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgW10oY29u
c3QgTmFtZSAmcykgeyByZXR1cm4gcy5yYXdOYW1lKCk7IH0pOworfQorCitOYW1lIElkR2VuOjpj
cmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyICo+IGJhc2VOYW1l
cykKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFt
ZXMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBjaGFyICpzKSB7
IHJldHVybiBJbW11dGFibGVTdHJpbmcocyk7IH0pOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0lkR2VuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODIwODlmNDMy
ZTE4OWQwZjc5MWUwZTdhMjEzY2NlY2Q0NDJiNzJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0lkR2VuLmgKQEAgLTAsMCArMSw0MSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworI2RlZmluZSBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworCisjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBG
b3IgY3JlYXRpbmcgbmV3IGZyZXNoIG5hbWVzLgorLy8gQWxsIG5hbWVzIGNyZWF0ZWQgYXJlIG1h
cmtlZCBhcyBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLgorY2xhc3MgSWRHZW4gOiBhbmdsZTo6
Tm9uQ29weWFibGUKK3sKKyAgcHVibGljOgorICAgIElkR2VuKCk7CisKKyAgICBOYW1lIGNyZWF0
ZU5ld05hbWUoY29uc3QgSW1tdXRhYmxlU3RyaW5nICZiYXNlTmFtZSk7CisgICAgTmFtZSBjcmVh
dGVOZXdOYW1lKGNvbnN0IE5hbWUgJmJhc2VOYW1lKTsKKyAgICBOYW1lIGNyZWF0ZU5ld05hbWUo
Y29uc3QgY2hhciAqYmFzZU5hbWUpOworICAgIE5hbWUgY3JlYXRlTmV3TmFtZShzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8SW1tdXRhYmxlU3RyaW5nPiBiYXNlTmFtZXMpOworICAgIE5hbWUgY3JlYXRl
TmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TmFtZT4gYmFzZU5hbWVzKTsKKyAgICBOYW1l
IGNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIgKj4gYmFzZU5h
bWVzKTsKKworICBwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcsIHR5cGVu
YW1lIFN0cmluZ1RvSW1tdXRhYmxlPgorICAgIE5hbWUgY3JlYXRlTmV3TmFtZShzaXplX3QgY291
bnQsIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLCBjb25zdCBTdHJpbmdUb0ltbXV0YWJsZSAmdG9J
bW11dGFibGUpOworCisgIHByaXZhdGU6CisgICAgdW5zaWduZWQgbU5leHQgPSAwOyAgICAgICAg
ICAvLyBgdW5zaWduZWRgIGJlY2F1c2Ugb2YgIiV1IiB1c2UgaW4gc3ByaW50ZgorICAgIHN0ZDo6
c3RyaW5nIG1OZXdOYW1lQnVmZmVyOyAgLy8gcmV1c2FibGUgYnVmZmVyIHRvIGF2b2lkIHRvbnMg
b2YgcmVhbGxvY2F0aW9ucworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8g
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSURHRU5fSF8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTM0NmY2ZjgxNDI4MmMxMmFmNjc5MTRkMmEzMDQyMzQxNjBmYTJlYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwCkBAIC0wLDAgKzEsNDAxIEBA
CisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNjdHlwZT4KKyNp
bmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRf
bWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1N5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworZW51bSBjbGFzcyBMYW5ndWFnZQoreworICAgIE1ldGFs
LAorICAgIEdMU0wsCit9OworCitzdGF0aWMgc2l6ZV90IFJvdW5kVXBUb011bHRpcGxlT2Yoc2l6
ZV90IHgsIHNpemVfdCBtdWx0aXBsZSkKK3sKKyAgICBjb25zdCBzaXplX3QgcmVtID0geCAlIG11
bHRpcGxlOworICAgIHJldHVybiByZW0gPT0gMCA/IHggOiB4ICsgKG11bHRpcGxlIC0gcmVtKTsK
K30KKwordm9pZCBMYXlvdXQ6OnJlcXVpcmVBbGlnbm1lbnQoc2l6ZV90IGFsaWduLCBib29sIHBh
ZCkKK3sKKyAgICBhbGlnbk9mID0gc3RkOjptYXgoYWxpZ25PZiwgYWxpZ24pOworICAgIGlmIChw
YWQpCisgICAgeworICAgICAgICBzaXplT2YgPSBSb3VuZFVwVG9NdWx0aXBsZU9mKHNpemVPZiwg
YWxpZ24pOworICAgIH0KK30KKworYm9vbCBMYXlvdXQ6Om9wZXJhdG9yPT0oY29uc3QgTGF5b3V0
ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZU9mID09IG90aGVyLnNpemVPZiAmJiBh
bGlnbk9mID09IG90aGVyLmFsaWduT2Y7Cit9CisKK3ZvaWQgTGF5b3V0OjpvcGVyYXRvcis9KGNv
bnN0IExheW91dCAmb3RoZXIpCit7CisgICAgcmVxdWlyZUFsaWdubWVudChvdGhlci5hbGlnbk9m
LCB0cnVlKTsKKyAgICBzaXplT2YgKz0gb3RoZXIuc2l6ZU9mOworfQorCit2b2lkIExheW91dDo6
b3BlcmF0b3IqPShzaXplX3Qgc2NhbGUpCit7CisgICAgc2l6ZU9mICo9IHNjYWxlOworfQorCitM
YXlvdXQgTGF5b3V0OjpvcGVyYXRvcisoY29uc3QgTGF5b3V0ICZvdGhlcikgY29uc3QKK3sKKyAg
ICBhdXRvIHNlbGYgPSAqdGhpczsKKyAgICBzZWxmICs9IG90aGVyOworICAgIHJldHVybiBzZWxm
OworfQorCitMYXlvdXQgTGF5b3V0OjpvcGVyYXRvciooc2l6ZV90IHNjYWxlKSBjb25zdAorewor
ICAgIGF1dG8gc2VsZiA9ICp0aGlzOworICAgIHNlbGYgKj0gc2NhbGU7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKK3N0YXRpYyBMYXlvdXQgU2NhbGFyTGF5b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUs
IExhbmd1YWdlIGxhbmd1YWdlKQoreworICAgIGNvbnN0IFRCYXNpY1R5cGUgYmFzaWNUeXBlID0g
dHlwZS5nZXRCYXNpY1R5cGUoKTsKKyAgICBzd2l0Y2ggKGJhc2ljVHlwZSkKKyAgICB7CisgICAg
ICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Qm9vbDoKKyAgICAgICAgICAgIHJldHVybiB7MSwgMX07
CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorICAgICAgICBjYXNlIFRCYXNpY1R5
cGU6OkVidFVJbnQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6CisgICAgICAg
ICAgICByZXR1cm4gezQsIDR9OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKElz
U2FtcGxlcihiYXNpY1R5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRj
aCAobGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNl
IExhbmd1YWdlOjpNZXRhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7OCwgOH07
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTGFuZ3VhZ2U6OkdMU0w6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gezQsIDR9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXQ6OkludmFs
aWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBzaXplX3QgaW5uZXJTY2FsZXNQYWNrZWRb
XSAgID0gezAsIDEsIDIsIDMsIDR9Oworc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1Vu
cGFja2VkW10gPSB7MCwgMSwgMiwgNCwgNH07CisKK0xheW91dCBzaDo6TWV0YWxMYXlvdXRPZihj
b25zdCBUVHlwZSAmdHlwZSwgTWV0YWxMYXlvdXRPZkNvbmZpZyBjb25maWcpCit7CisgICAgQVNT
RVJUKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSA8PSA0KTsKKyAgICBBU1NFUlQodHlwZS5nZXRTZWNv
bmRhcnlTaXplKCkgPD0gNCk7CisKKyAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3Jh
Z2UgPSB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2NrU3RvcmFnZTsKKworICAgIGNvbnN0
IGJvb2wgaXNQYWNrZWQgPSAhY29uZmlnLmRpc2FibGVQYWNraW5nICYmIChzdG9yYWdlID09IFRM
YXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID09IFRMYXlvdXRCbG9ja1N0b3Jh
Z2U6OkVic1NoYXJlZCk7CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIWNvbmZpZy5tYXNr
QXJyYXkpCisgICAgeworICAgICAgICBjb25maWcubWFza0FycmF5ICAgID0gdHJ1ZTsKKyAgICAg
ICAgY29uc3QgTGF5b3V0IGxheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgY29uZmlnKTsKKyAg
ICAgICAgY29uZmlnLm1hc2tBcnJheSAgICA9IGZhbHNlOworICAgICAgICBjb25zdCBzaXplX3Qg
dm9sICAgID0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisgICAgICAgIHJldHVybiBsYXlv
dXQgKiB2b2w7CisgICAgfQorCisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5nZXROb21pbmFs
U2l6ZSgpID09IDEpOworICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPT0g
MSk7CisgICAgICAgIGF1dG8gY29uZmlnMiAgICAgICAgICAgICA9IGNvbmZpZzsKKyAgICAgICAg
Y29uZmlnMi5tYXNrQXJyYXkgICAgICAgID0gZmFsc2U7CisgICAgICAgIGF1dG8gbGF5b3V0ICAg
ICAgICAgICAgICA9IExheW91dDo6SWRlbnRpdHkoKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlz
dCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKyAgICAgICAgZm9yIChjb25zdCBURmll
bGQgKmZpZWxkIDogZmllbGRzKQorICAgICAgICB7CisgICAgICAgICAgICBsYXlvdXQgKz0gTWV0
YWxMYXlvdXRPZigqZmllbGQtPnR5cGUoKSwgY29uZmlnMik7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGNvbmZpZy5hc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgc2l6ZV90IHBhZCA9IGxheW91dC5zaXplT2YgJSAxNjsKKyAgICAgICAgICAgIGxheW91
dC5zaXplT2YgKz0gcGFkOworICAgICAgICB9CisgICAgICAgIGxheW91dC5zaXplT2YgPSBSb3Vu
ZFVwVG9NdWx0aXBsZU9mKGxheW91dC5zaXplT2YsIGxheW91dC5hbGlnbk9mKTsKKyAgICAgICAg
cmV0dXJuIGxheW91dDsKKyAgICB9CisKKyAgICBpZiAoY29uZmlnLnRyZWF0U2FtcGxlcnNBc1Rl
eHR1cmVFbnYgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHsxNiwgOH07ICAvLyBwb2ludGVyezgsOH0gYW5kIG1ldGFsOjpzYW1wbGVyezgs
OH0KKyAgICB9CisKKyAgICBjb25zdCBMYXlvdXQgc2NhbGFyTGF5b3V0ID0gU2NhbGFyTGF5b3V0
T2YodHlwZSwgTGFuZ3VhZ2U6Ok1ldGFsKTsKKworICAgIGlmICh0eXBlLmlzUmFuazAoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5
cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpc1BhY2tlZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1BhY2tlZFt0
eXBlLmdldE5vbWluYWxTaXplKCldOworICAgICAgICAgICAgYXV0byBsYXlvdXQgPSBMYXlvdXR7
c2NhbGFyTGF5b3V0LnNpemVPZiAqIGlubmVyU2NhbGUsIHNjYWxhckxheW91dC5hbGlnbk9mfTsK
KyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVyU2NhbGVz
VW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKyAgICAgICAgICAgIGF1dG8gbGF5b3V0
ICAgICAgICAgICAgID0gTGF5b3V0OjpCb3RoKHNjYWxhckxheW91dC5zaXplT2YgKiBpbm5lclNj
YWxlKTsKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUuaXNNYXRyaXgoKSk7CisgICAgICAgIEFT
U0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IFRCYXNpY1R5cGU6OkVidEZsb2F0KTsKKyAgICAg
ICAgLy8gdHlwZUN4UiA8PT4gdHlwZVJbQ10KKyAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2Nh
bGUgPSBpbm5lclNjYWxlc1VucGFja2VkW3R5cGUuZ2V0Um93cygpXTsKKyAgICAgICAgY29uc3Qg
c2l6ZV90IG91dGVyU2NhbGUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29scygpKTsK
KyAgICAgICAgY29uc3Qgc2l6ZV90IG4gICAgICAgICAgPSBzY2FsYXJMYXlvdXQuc2l6ZU9mICog
aW5uZXJTY2FsZTsKKyAgICAgICAgcmV0dXJuIHtuICogb3V0ZXJTY2FsZSwgbn07CisgICAgfQor
fQorCitUTGF5b3V0QmxvY2tTdG9yYWdlIHNoOjpPdmVybGF5KFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
b2xkU3RvcmFnZSwgY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgY29uc3QgVExheW91dEJsb2Nr
U3RvcmFnZSBuZXdTdG9yYWdlID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5ibG9ja1N0b3Jh
Z2U7CisgICAgc3dpdGNoIChuZXdTdG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIHJldHVybiBvbGRTdG9y
YWdlID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkID8ga0RlZmF1bHRMYXlv
dXRCbG9ja1N0b3JhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkU3RvcmFnZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBuZXdTdG9yYWdlOworICAgIH0KK30KKworVExheW91dE1h
dHJpeFBhY2tpbmcgc2g6Ok92ZXJsYXkoVExheW91dE1hdHJpeFBhY2tpbmcgb2xkUGFja2luZywg
Y29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgbmV3
UGFja2luZyA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkubWF0cml4UGFja2luZzsKKyAgICBz
d2l0Y2ggKG5ld1BhY2tpbmcpCisgICAgeworICAgICAgICBjYXNlIFRMYXlvdXRNYXRyaXhQYWNr
aW5nOjpFbXBVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIHJldHVybiBvbGRQYWNraW5nID09IFRM
YXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZCA/IGtEZWZhdWx0TGF5b3V0TWF0cml4
UGFja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogb2xkUGFja2luZzsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBuZXdQYWNraW5nOworICAgIH0KK30KKworYm9vbCBzaDo6Q2FuQmVQ
YWNrZWQoVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlKQoreworICAgIHN3aXRjaCAoc3RvcmFn
ZSkKKyAgICB7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzUGFja2VkOgor
ICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0ZDE0
MDoKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJz
VW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBzaDo6Q2FuQmVQYWNrZWQoVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXIpCit7CisgICAgcmV0dXJuIENhbkJlUGFja2VkKGxheW91dFF1
YWxpZmllci5ibG9ja1N0b3JhZ2UpOworfQorCitib29sIHNoOjpDYW5CZVBhY2tlZChjb25zdCBU
VHlwZSAmdHlwZSkKK3sKKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIENhbkJlUGFja2VkKHR5cGUuZ2V0TGF5
b3V0UXVhbGlmaWVyKCkpOworfQorCit2b2lkIHNoOjpTZXRCbG9ja1N0b3JhZ2UoVFR5cGUgJnR5
cGUsIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSkKK3sKKyAgICBhdXRvIHF1YWwgICAgICAg
ICA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCk7CisgICAgcXVhbC5ibG9ja1N0b3JhZ2UgPSBz
dG9yYWdlOworICAgIHR5cGUuc2V0TGF5b3V0UXVhbGlmaWVyKHF1YWwpOworfQorCitzdGF0aWMg
TGF5b3V0IENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihURmllbGQgY29uc3QgKmNvbnN0ICpiZWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZCBjb25zdCAq
Y29uc3QgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG1hc2tBcnJh
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBi
YXNlQWxpZ25tZW50KQoreworICAgIGNvbnN0IGJvb2wgaXNQYWNrZWQgPQorICAgICAgICBzdG9y
YWdlID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fCBzdG9yYWdlID09IFRMYXlv
dXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDsKKworICAgIGF1dG8gbGF5b3V0ID0gTGF5b3V0OjpJ
ZGVudGl0eSgpOworICAgIGZvciAoYXV0byBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpCisgICAgeworICAgICAgICBsYXlvdXQgKz0gR2xzbExheW91dE9mKCooKml0ZXIpLT50eXBl
KCksIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIGZhbHNlKTsKKyAgICB9CisgICAgaWYgKCFpc1Bh
Y2tlZCkgIC8vIFhYWDogQ29ycmVjdD8KKyAgICB7CisgICAgICAgIGxheW91dC5zaXplT2YgPSBS
b3VuZFVwVG9NdWx0aXBsZU9mKGxheW91dC5zaXplT2YsIGxheW91dC5hbGlnbk9mKTsKKyAgICB9
CisgICAgbGF5b3V0LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAg
cmV0dXJuIGxheW91dDsKK30KKworc3RhdGljIExheW91dCBDb21tb25HbHNsTGF5b3V0T2YoY29u
c3QgVFR5cGUgJnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
TGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBtYXNrQXJyYXksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYmFzZUFsaWdubWVudCkKK3sKKyAg
ICBBU1NFUlQoc3RvcmFnZSAhPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZCk7
CisKKyAgICBjb25zdCBib29sIGlzUGFja2VkID0KKyAgICAgICAgc3RvcmFnZSA9PSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQgfHwgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9yYWdl
OjpFYnNTaGFyZWQ7CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIXR5cGUuaXNNYXRyaXgo
KSAmJiAhbWFza0FycmF5KQorICAgIHsKKyAgICAgICAgYXV0byBsYXlvdXQgPSBHbHNsTGF5b3V0
T2YodHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgdHJ1ZSk7CisgICAgICAgIGxheW91dCAq
PSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAgICAgICAgbGF5b3V0LnJlcXVpcmVBbGln
bm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAg
fQorCisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0
KCkpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpID09IDEpOwor
ICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPT0gMSk7CisgICAgICAgIGNv
bnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisgICAgICAgIHJl
dHVybiBDb21tb25HbHNsU3RydWN0TGF5b3V0T2YoZmllbGRzLmRhdGEoKSwgZmllbGRzLmRhdGEo
KSArIGZpZWxkcy5zaXplKCksIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbWF0cml4UGFja2luZywgbWFza0FycmF5LCBiYXNlQWxpZ25tZW50KTsKKyAg
ICB9CisKKyAgICBjb25zdCBhdXRvIHNjYWxhckxheW91dCA9IFNjYWxhckxheW91dE9mKHR5cGUs
IExhbmd1YWdlOjpHTFNMKTsKKworICAgIGlmICh0eXBlLmlzUmFuazAoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuaXNWZWN0
b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpc1BhY2tlZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3Qgc2l6ZV90IHNpemVTY2FsZSAgPSBpbm5lclNjYWxlc1BhY2tlZFt0eXBlLmdldE5v
bWluYWxTaXplKCldOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFsaWduU2NhbGUgPSBpbm5l
clNjYWxlc1VucGFja2VkW3R5cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICBhdXRv
IGxheW91dCA9CisgICAgICAgICAgICAgICAgTGF5b3V0e3NjYWxhckxheW91dC5zaXplT2YgKiBz
aXplU2NhbGUsIHNjYWxhckxheW91dC5hbGlnbk9mICogYWxpZ25TY2FsZX07CisgICAgICAgICAg
ICByZXR1cm4gbGF5b3V0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1VucGFja2VkW3R5
cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICBhdXRvIGxheW91dCAgICAgICAgICAg
ICA9IExheW91dDo6Qm90aChzY2FsYXJMYXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZSk7CisgICAg
ICAgICAgICByZXR1cm4gbGF5b3V0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIEFTU0VSVCh0eXBlLmlzTWF0cml4KCkpOworCisgICAgICAgIHNpemVfdCBpbm5l
ckRpbTsKKyAgICAgICAgc2l6ZV90IG91dGVyRGltOworCisgICAgICAgIHN3aXRjaCAobWF0cml4
UGFja2luZykKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4UGFja2lu
Zzo6RW1wQ29sdW1uTWFqb3I6CisgICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHR5cGUuZ2V0Um93cygpKTsKKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0
YXRpY19jYXN0PHNpemVfdD4odHlwZS5nZXRDb2xzKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wUm93TWFqb3I6Cisg
ICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29s
cygpKTsKKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlw
ZS5nZXRSb3dzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
TGF5b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAgICAgTE9H
SUNfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IDA7CisgICAgICAgICAgICAg
ICAgb3V0ZXJEaW0gPSAwOworICAgICAgICB9CisKKyAgICAgICAgb3V0ZXJEaW0gKj0gdHlwZS5n
ZXRBcnJheVNpemVQcm9kdWN0KCk7CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUg
PSBpbm5lclNjYWxlc1VucGFja2VkW2lubmVyRGltXTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IG4g
ICAgICAgICAgPSBpbm5lclNjYWxlICogc2NhbGFyTGF5b3V0LnNpemVPZjsKKyAgICAgICAgTGF5
b3V0IGxheW91dCAgICAgICAgICAgPSB7b3V0ZXJEaW0gKiBuLCBufTsKKyAgICAgICAgbGF5b3V0
LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBs
YXlvdXQ7CisgICAgfQorfQorCitMYXlvdXQgc2g6Okdsc2xMYXlvdXRPZihjb25zdCBUVHlwZSAm
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBh
Y2tpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1hc2tBcnJheSkKK3sKKyAgICBB
U1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpIDw9IDQpOworICAgIEFTU0VSVCh0eXBlLmdldFNl
Y29uZGFyeVNpemUoKSA8PSA0KTsKKworICAgIHN0b3JhZ2UgICAgICAgPSBPdmVybGF5KHN0b3Jh
Z2UsIHR5cGUpOworICAgIG1hdHJpeFBhY2tpbmcgPSBPdmVybGF5KG1hdHJpeFBhY2tpbmcsIHR5
cGUpOworCisgICAgc3dpdGNoIChzdG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQ6CisgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExh
eW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7CisgICAg
ICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAgICAgICAgcmV0
dXJuIENvbW1vbkdsc2xMYXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNr
QXJyYXksIDE2KTsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6
CisgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1h
dHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1N0ZDQzMDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsTGF5b3V0T2Yo
dHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKyAgICAgICAgY2Fz
ZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIExPR0lD
X0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7CisgICAgfQor
fQorCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBzaDo6R2xzbFN0cnVjdExheW91dE9mKFRGaWVs
ZCBjb25zdCAqY29uc3QgKmJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBURmllbGQgY29uc3QgKmNvbnN0ICplbmQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFn
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExheW91
dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXNrQXJyYXkpCit7CisgICAgQVNTRVJUKHN0b3Jh
Z2UgIT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQpOworICAgIEFTU0VSVCht
YXRyaXhQYWNraW5nICE9IFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZCk7CisK
KyAgICBzd2l0Y2ggKHN0b3JhZ2UpCisgICAgeworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1BhY2tlZDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5
b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsK
KyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFyZWQ6CisgICAgICAgICAg
ICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBlbmQsIHN0b3JhZ2UsIG1h
dHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1N0ZDE0MDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5
b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxNik7
CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorICAgICAgICAg
ICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihiZWdpbiwgZW5kLCBzdG9yYWdlLCBt
YXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIDEpOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1Vuc3BlY2lmaWVkOgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAg
ICAgICAgIHJldHVybiBMYXlvdXQ6OkludmFsaWQoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvTGF5b3V0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTQxM2VkZjQ5ZmVmMjdjMDBhZDYxNjZhZWFjZmU1MjZhYTk0ZjFkNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaApAQCAtMCwwICsxLDg4IEBACisvLworLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0xBWU9VVF9I
XworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlP
VVRfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY29uc3RleHByIGNv
bnN0IGF1dG8ga0RlZmF1bHRMYXlvdXRCbG9ja1N0b3JhZ2UgID0gVExheW91dEJsb2NrU3RvcmFn
ZTo6RWJzU2hhcmVkOworY29uc3RleHByIGNvbnN0IGF1dG8ga0RlZmF1bHRMYXlvdXRNYXRyaXhQ
YWNraW5nID0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcENvbHVtbk1ham9yOworCisvLyBSZXR1
cm5zIGBvbGRTdG9yYWdlYCBpZiBgdHlwZWAgaGFzIHVuc3BlY2lmaWVkIGJsb2NrIHN0b3JhZ2Uu
CisvLyBPdGhlcndpc2UgcmV0dXJucyBibG9jayBzdG9yYWdlIG9mIGB0eXBlYC4KK1RMYXlvdXRC
bG9ja1N0b3JhZ2UgT3ZlcmxheShUTGF5b3V0QmxvY2tTdG9yYWdlIG9sZFN0b3JhZ2UsIGNvbnN0
IFRUeXBlICZ0eXBlKTsKKworLy8gUmV0dXJucyBgb2xkUGFja2luZ2AgaWYgYHR5cGVgIGhhcyB1
bnNwZWNpZmllZCBtYXRyaXggcGFja2luZy4KKy8vIE90aGVyd2lzZSByZXR1cm5zIG1hdHJpeCBw
YWNraW5nIG9mIGB0eXBlYC4KK1RMYXlvdXRNYXRyaXhQYWNraW5nIE92ZXJsYXkoVExheW91dE1h
dHJpeFBhY2tpbmcgb2xkUGFja2luZywgY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBSZXR1cm5z
IHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZvciB0aGUgYmxvY2sgc3RvcmFnZSB0
byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCitib29sIENhbkJlUGFja2VkKFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSk7CisKKy8vIFJldHVybnMgd2hldGhlciBvciBub3QgaXQgaXMg
cGVybWlzc2FibGUgZm9yIHRoZSBsYXlvdXQgcXVhbGlmaWVyIHRvIHVzZSBhIHBhY2tlZCByZXBy
ZXNlbnRhdGlvbi4KK2Jvb2wgQ2FuQmVQYWNrZWQoVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFs
aWZpZXIpOworCisvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZv
ciB0aGUgdHlwZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCitib29sIENhbkJlUGFj
a2VkKGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gU2V0cyB0aGUgYmxvY2sgc3RvcmFnZSBmb3Ig
YSB0eXBlLgordm9pZCBTZXRCbG9ja1N0b3JhZ2UoVFR5cGUgJnR5cGUsIFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSk7CisKKy8vIENvbnRhaW5zIGBzaXplb2ZgIGFuZCBgYWxpZ25vZmAgaW5m
b3JtYXRpb24uCitzdHJ1Y3QgTGF5b3V0Cit7CisgICAgc2l6ZV90IHNpemVPZjsKKyAgICBzaXpl
X3QgYWxpZ25PZjsKKworICAgIHN0YXRpYyBMYXlvdXQgSWRlbnRpdHkoKSB7IHJldHVybiB7MCwg
MX07IH0KKyAgICBzdGF0aWMgTGF5b3V0IEludmFsaWQoKSB7IHJldHVybiB7MCwgMH07IH0KKyAg
ICBzdGF0aWMgTGF5b3V0IEJvdGgoc2l6ZV90IG4pIHsgcmV0dXJuIHtuLCBufTsgfQorCisgICAg
dm9pZCByZXF1aXJlQWxpZ25tZW50KHNpemVfdCBhbGlnbiwgYm9vbCBwYWQpOworCisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworCisgICAgdm9pZCBvcGVy
YXRvcis9KGNvbnN0IExheW91dCAmb3RoZXIpOworICAgIHZvaWQgb3BlcmF0b3IqPShzaXplX3Qg
c2NhbGUpOworCisgICAgTGF5b3V0IG9wZXJhdG9yKyhjb25zdCBMYXlvdXQgJm90aGVyKSBjb25z
dDsKKyAgICBMYXlvdXQgb3BlcmF0b3IqKHNpemVfdCBzY2FsZSkgY29uc3Q7Cit9OworCitzdHJ1
Y3QgTWV0YWxMYXlvdXRPZkNvbmZpZworeworICAgIGJvb2wgZGlzYWJsZVBhY2tpbmcgICAgICAg
ICAgICAgPSBmYWxzZTsKKyAgICBib29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAgID0gZmFs
c2U7CisgICAgYm9vbCB0cmVhdFNhbXBsZXJzQXNUZXh0dXJlRW52ICA9IGZhbHNlOworICAgIGJv
b2wgYXNzdW1lU3RydWN0c0FyZVRhaWxQYWRkZWQgPSBmYWxzZTsgIC8vIFBhZCB0byBtdWx0aXBs
ZSBvZiAxNgorfTsKKworLy8gUmV0dXJucyB0aGUgbGF5b3V0IG9mIGEgdHlwZSBpZiBpdCB3ZXJl
IHRvIGJlIHJlcHJlc2VudGVkIGluIGEgTWV0YWwgcHJvZ3JhbS4KKy8vIFRoaXMgZGVsaWJlcmF0
ZWx5IGlnbm9yZXMgdGhlIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYW5kIFRMYXlvdXRNYXRyaXhQYWNr
aW5nIG9mIGFueSB0eXBlLgorQU5HTEVfTk9fRElTQ0FSRCBMYXlvdXQgTWV0YWxMYXlvdXRPZihj
b25zdCBUVHlwZSAmdHlwZSwgTWV0YWxMYXlvdXRPZkNvbmZpZyBjb25maWcgPSB7fSk7CisKKy8v
IFJldHVybnMgdGhlIGxheW91dCBvZiBhIHR5cGUgaWYgaXQgd2VyZSB0byBiZSByZXByZXNlbnRl
ZCBpbiBhIEdMU0wgcHJvZ3JhbS4KK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0CitHbHNsTGF5b3V0
T2YoY29uc3QgVFR5cGUgJnR5cGUsCisgICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBz
dG9yYWdlICAgICAgICA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkLAorICAg
ICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcgPSBUTGF5b3V0TWF0
cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQsCisgICAgICAgICAgICAgYm9vbCBtYXNrQXJyYXkg
ICAgICAgICAgICAgICAgICAgICA9IGZhbHNlKTsKKworLy8gUmV0dXJucyB0aGUgbGF5b3V0IG9m
IGEgc3RydWN0dXJlIGlmIGl0IHdlcmUgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYSBHTFNMIHByb2dy
YW0uCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBHbHNsU3RydWN0TGF5b3V0T2YoVEZpZWxkIGNv
bnN0ICpjb25zdCAqYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEZpZWxkIGNvbnN0ICpjb25zdCAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTGF5b3V0TWF0cml4UGFja2luZyBt
YXRyaXhQYWNraW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbWFza0FycmF5ID0gZmFsc2UpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlm
ICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlPVVRfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
ZTMwZGFlNmUyZDdiNmU2OTgyZmYwMDI5Mzc0ZTNmYWY0MjNjNWFjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwCkBAIC0wLDAgKzEs
MzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCitjbGFz
cyBNYXBwZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgRnVu
Y3Rpb25Ub0RlZmluaXRpb24gbUZ1bmNUb0RlZjsKKworICBwdWJsaWM6CisgICAgTWFwcGVyKCkg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkge30KKworICAgIGJvb2wgdmlz
aXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1
bmNEZWZOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5j
ID0gZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVChmdW5jLT5nZXRC
dWlsdEluT3AoKSA9PSBUT3BlcmF0b3I6OkVPcE51bGwpOworICAgICAgICBtRnVuY1RvRGVmW2Z1
bmNdID0gZnVuY0RlZk5vZGU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCitG
dW5jdGlvblRvRGVmaW5pdGlvbiBzaDo6TWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhUSW50ZXJt
QmxvY2sgJnJvb3QpCit7CisgICAgTWFwcGVyIG1hcHBlcjsKKyAgICByb290LnRyYXZlcnNlKCZt
YXBwZXIpOworICAgIHJldHVybiBzdGQ6Om1vdmUobWFwcGVyLm1GdW5jVG9EZWYpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU1NmRkZWU0
ZDkwNTBhNzAyMzc1ZWM1OThiZWY4MmI0NWVmMzg1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKQEAgLTAsMCArMSwyNSBAQAorLy8K
Ky8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9NQVBGVU5DVElPTlNUT0RFRklOSVRJT05TX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNfSF8KKwor
I2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBt
YXAgZnJvbSBmdW5jdGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkZWZpbml0aW9ucy4KK3Vz
aW5nIEZ1bmN0aW9uVG9EZWZpbml0aW9uID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRGdW5j
dGlvbiAqLCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICo+OworCisvLyBNYXBzIGZ1bmN0aW9u
cyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGRlZmluaXRpb25zLgorQU5HTEVfTk9fRElTQ0FSRCBG
dW5jdGlvblRvRGVmaW5pdGlvbiBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKFRJbnRlcm1CbG9j
ayAmcm9vdCk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNf
SF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9NYXBTeW1ib2xzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzVjOTMwNDY5NWQxZWRmZTBmYmVkNTIxZDZm
YjEwNGNmZGM2NjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMu
Y3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1l
c3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitj
bGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICBwcml2YXRlOgorICAg
IHN0ZDo6ZnVuY3Rpb248VEludGVybU5vZGUgJihjb25zdCBURnVuY3Rpb24gKiwgVEludGVybVN5
bWJvbCAmKT4gbU1hcDsKKworICBwdWJsaWM6CisgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21w
aWxlciwKKyAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2RlICYoY29uc3QgVEZ1
bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKyAgICAgICAgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgZmFsc2UsIHRydWUpLCBtTWFwKG1hcCkKKyAgICB7fQorCisgICAgUG9zdFJl
c3VsdCB2aXNpdFN5bWJvbFBvc3QoVEludGVybVN5bWJvbCAmc3ltYm9sTm9kZSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIHJldHVybiBtTWFwKGdldFBhcmVudEZ1bmN0aW9uKCksIHN5bWJvbE5v
ZGUpOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitib29sIHNoOjpNYXBTeW1ib2xz
KFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJtTm9kZSAmKGNv
bnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXApCit7CisgICAgUmV3cml0ZXIg
cmV3cml0ZXIoY29tcGlsZXIsIHN0ZDo6bW92ZShtYXApKTsKKyAgICBpZiAoIXJld3JpdGVyLnJl
YnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1Njg5MGExNWNhMWVjYTU5
MDFiMTJhYThjMzkxNmMxNTZmY2JjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TWFwU3ltYm9scy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJB
Q0NFU1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJBQ0NFU1NfSF8KKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIE1hcHMgVEludGVy
bVN5bWJvbCBub2RlcyB0byBUSW50ZXJtTm9kZSBub2Rlcy4KKy8vIFRoZSBwYXJlbnQgZnVuY3Rp
b24gb2YgYSBzeW1ib2wgaXMgcHJvdmlkZWQgdG8gdGhlIG1hcHBpbmcgd2hlbiBhcHBsaWNhYmxl
LgorQU5HTEVfTk9fRElTQ0FSRCBib29sIE1hcFN5bWJvbHMoCisgICAgVENvbXBpbGVyICZjb21w
aWxlciwKKyAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJt
Tm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXApOworCit9ICAv
LyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9NQVBWQVJJQUJMRVNUT01FTUJFUkFDQ0VTU19IXwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45Nzc4ZDM0Y2MzMWM1MDliMDk2MzllMDZlYjM4NjUwZjgwZjEyYjBj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAKQEAgLTAs
MCArMSwxMDAxIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
PGNzdHJpbmc+CisjaW5jbHVkZSA8bnVtZXJpYz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgor
I2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworc2l6ZV90IE1vZGlm
aWVkU3RydWN0TWFjaGluZXJpZXM6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBvcmRlcmlu
Zy5zaXplKCk7Cit9CisKK2NvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZNb2RpZmllZFN0
cnVjdE1hY2hpbmVyaWVzOjphdChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlu
ZGV4IDwgc2l6ZSgpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzICAgICAgICAgICAgICA9IG9y
ZGVyaW5nW2luZGV4XTsKKyAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAqbSA9IGZp
bmQoKnMpOworICAgIEFTU0VSVChtKTsKKyAgICByZXR1cm4gKm07Cit9CisKK2NvbnN0IE1vZGlm
aWVkU3RydWN0TWFjaGluZXJ5ICpNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpmaW5kKGNvbnN0
IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0Cit7CisgICAgYXV0byBpdGVyID0gb3JpZ2luYWxUb01hY2hp
bmVyeS5maW5kKCZzKTsKKyAgICBpZiAoaXRlciA9PSBvcmlnaW5hbFRvTWFjaGluZXJ5LmVuZCgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAmaXRl
ci0+c2Vjb25kOworfQorCit2b2lkIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6Omluc2VydChj
b25zdCBUU3RydWN0dXJlICZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJm1hY2hpbmVyeSkKK3sKKyAgICBBU1NF
UlQoIWZpbmQocykpOworICAgIG9yaWdpbmFsVG9NYWNoaW5lcnlbJnNdID0gbWFjaGluZXJ5Owor
ICAgIG9yZGVyaW5nLnB1c2hfYmFjaygmcyk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK25hbWVzcGFjZQoreworCitUSW50ZXJtVHlwZWQgJkZsYXR0ZW4oU3ltYm9sRW52ICZzeW1i
b2xFbnYsIFRJbnRlcm1UeXBlZCAmbm9kZSkKK3sKKyAgICBhdXRvICZ0eXBlID0gbm9kZS5nZXRU
eXBlKCk7CisgICAgQVNTRVJUKHR5cGUuaXNBcnJheSgpKTsKKworICAgIGF1dG8gJnJldFR5cGUg
PSBJbm5lcm1vc3RUeXBlKHR5cGUpOworICAgIHJldFR5cGUubWFrZUFycmF5KDEpOworCisgICAg
cmV0dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJmbGF0dGVuIiksIHJl
dFR5cGUsICpuZXcgVEludGVybVNlcXVlbmNleyZub2RlfSk7Cit9CisKK3N0cnVjdCBGbGF0dGVu
QXJyYXkKK3t9OworCitzdHJ1Y3QgUGF0aEl0ZW0KK3sKKyAgICBlbnVtIGNsYXNzIFR5cGUKKyAg
ICB7CisgICAgICAgIEZpZWxkLCAgICAgICAgIC8vIFN0cnVjdCBmaWVsZCBpbmRleGluZy4KKyAg
ICAgICAgSW5kZXgsICAgICAgICAgLy8gQXJyYXksIHZlY3Rvciwgb3IgbWF0cml4IGluZGV4aW5n
LgorICAgICAgICBGbGF0dGVuQXJyYXksICAvLyBBcnJheSBvZiBhbnkgcmFuayAtPiBwb2ludGVy
IG9mIGlubmVybW9zdCB0eXBlLgorICAgIH07CisKKyAgICBQYXRoSXRlbShjb25zdCBURmllbGQg
JmZpZWxkKSA6IGZpZWxkKCZmaWVsZCksIHR5cGUoVHlwZTo6RmllbGQpIHt9CisgICAgUGF0aEl0
ZW0oaW50IGluZGV4KSA6IGluZGV4KGluZGV4KSwgdHlwZShUeXBlOjpJbmRleCkge30KKyAgICBQ
YXRoSXRlbSh1bnNpZ25lZCBpbmRleCkgOiBQYXRoSXRlbShzdGF0aWNfY2FzdDxpbnQ+KGluZGV4
KSkge30KKyAgICBQYXRoSXRlbShGbGF0dGVuQXJyYXkgZmxhdHRlbikgOiB0eXBlKFR5cGU6OkZs
YXR0ZW5BcnJheSkge30KKworICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCBURmllbGQg
KmZpZWxkOworICAgICAgICBpbnQgaW5kZXg7CisgICAgfTsKKyAgICBUeXBlIHR5cGU7Cit9Owor
CitUSW50ZXJtVHlwZWQgJkJ1aWxkUGF0aEFjY2VzcyhTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGF0aEl0ZW0+ICZwYXRo
KQoreworICAgIFRJbnRlcm1UeXBlZCAqY3VyciA9IG5ldyBUSW50ZXJtU3ltYm9sKCZ2YXIpOwor
ICAgIGZvciAoY29uc3QgUGF0aEl0ZW0gJml0ZW0gOiBwYXRoKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChpdGVtLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5
cGU6OkZpZWxkOgorICAgICAgICAgICAgICAgIGN1cnIgPSAmQWNjZXNzRmllbGQoKmN1cnIsIGl0
ZW0uZmllbGQtPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFBhdGhJdGVtOjpUeXBlOjpJbmRleDoKKyAgICAgICAgICAgICAgICBjdXJyID0gJkFjY2Vz
c0luZGV4KCpjdXJyLCBpdGVtLmluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5cGU6OkZsYXR0ZW5BcnJheToKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBjdXJyID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqY3Vycik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gKmN1cnI7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIE9yaWdpbmFs
UGFyYW0gPSBjb25zdCBUVmFyaWFibGUgJjsKK3VzaW5nIE1vZGlmaWVkUGFyYW0gPSBjb25zdCBU
VmFyaWFibGUgJjsKKwordXNpbmcgT3JpZ2luYWxBY2Nlc3MgPSBUSW50ZXJtVHlwZWQ7Cit1c2lu
ZyBNb2RpZmllZEFjY2VzcyA9IFRJbnRlcm1UeXBlZDsKKworc3RydWN0IEFjY2VzcworeworICAg
IE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbDsKKyAgICBNb2RpZmllZEFjY2VzcyAmbW9kaWZpZWQ7
CisKKyAgICBzdHJ1Y3QgRW52CisgICAgeworICAgICAgICBjb25zdCBDb252ZXJ0VHlwZSB0eXBl
OworICAgIH07Cit9OworCit1c2luZyBDb252ZXJzaW9uRnVuYyA9IHN0ZDo6ZnVuY3Rpb248QWNj
ZXNzKEFjY2Vzczo6RW52ICYsIE9yaWdpbmFsQWNjZXNzICYsIE1vZGlmaWVkQWNjZXNzICYpPjsK
KworY2xhc3MgQ29udmVydFN0cnVjdFN0YXRlIDogYW5nbGU6Ok5vbkNvcHlhYmxlCit7CisgIHBy
aXZhdGU6CisgICAgc3RydWN0IENvbnZlcnNpb25JbmZvCisgICAgeworICAgICAgICBDb252ZXJz
aW9uRnVuYyBzdGRGdW5jOworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmFzdEZ1bmM7CisgICAg
ICAgIHN0ZDo6dmVjdG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisgICAgICAgIEltbXV0YWJsZVN0
cmluZyBwYXRoTmFtZTsKKyAgICB9OworCisgIHB1YmxpYzoKKyAgICBDb252ZXJ0U3RydWN0U3Rh
dGUoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZp
ZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kaWZ5U3RydWN0Q29uZmlnICZj
b25maWcsCisgICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMg
Jm91dE1hY2hpbmVyaWVzKQorICAgICAgICA6IGNvbmZpZyhjb25maWcpLAorICAgICAgICAgIHN5
bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAgICAgIG1vZGlmaWVkRmllbGRzKCpuZXcgVEZpZWxk
TGlzdCgpKSwKKyAgICAgICAgICBzeW1ib2xUYWJsZShzeW1ib2xFbnYuc3ltYm9sVGFibGUoKSks
CisgICAgICAgICAgaWRHZW4oaWRHZW4pLAorICAgICAgICAgIG91dE1hY2hpbmVyaWVzKG91dE1h
Y2hpbmVyaWVzKQorICAgIHt9CisKKyAgICB+Q29udmVydFN0cnVjdFN0YXRlKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChuYW1lUGF0aC5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG5hbWVQYXRo
U2l6ZXMuZW1wdHkoKSk7CisgICAgfQorCisgICAgdm9pZCBwdWJsaXNoKGNvbnN0IFRTdHJ1Y3R1
cmUgJm9yaWdpbmFsU3RydWN0LCBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUpCisgICAg
eworICAgICAgICBjb25zdCBib29sIGlzT3JpZ2luYWxUb01vZGlmaWVkID0gY29uZmlnLmNvbnZl
cnRUeXBlID09IENvbnZlcnRUeXBlOjpPcmlnaW5hbFRvTW9kaWZpZWQ7CisKKyAgICAgICAgYXV0
byAmbW9kaWZpZWRTdHJ1Y3QgPSAqbmV3IFRTdHJ1Y3R1cmUoJnN5bWJvbFRhYmxlLCBtb2RpZmll
ZFN0cnVjdE5hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbW9kaWZpZWRGaWVsZHMsIG1vZGlmaWVkU3RydWN0TmFtZS5zeW1ib2xU
eXBlKCkpOworCisgICAgICAgIGF1dG8gJmZ1bmMgPSAqbmV3IFRGdW5jdGlvbigKKyAgICAgICAg
ICAgICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgIGlkR2VuLmNyZWF0ZU5ld05hbWUoaXNPcmln
aW5hbFRvTW9kaWZpZWQgPyAib3JpZ2luYWxUb01vZGlmaWVkIiA6ICJtb2RpZmllZFRvT3JpZ2lu
YWwiKQorICAgICAgICAgICAgICAgIC5yYXdOYW1lKCksCisgICAgICAgICAgICBTeW1ib2xUeXBl
OjpBbmdsZUludGVybmFsLCBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0Vm9pZCksIGZhbHNlKTsK
KworICAgICAgICBPcmlnaW5hbFBhcmFtIG9yaWdpbmFsUGFyYW0gPQorICAgICAgICAgICAgQ3Jl
YXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgb3JpZ2luYWxTdHJ1Y3QsIE5hbWUoIm9y
aWdpbmFsIikpOworICAgICAgICBNb2RpZmllZFBhcmFtIG1vZGlmaWVkUGFyYW0gPQorICAgICAg
ICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgbW9kaWZpZWRTdHJ1Y3Qs
IE5hbWUoIm1vZGlmaWVkIikpOworICAgICAgICBzeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKG9y
aWdpbmFsUGFyYW0sIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKyAgICAgICAgc3ltYm9sRW52Lm1h
cmtBc1JlZmVyZW5jZShtb2RpZmllZFBhcmFtLCBjb25maWcuZXh0ZXJuYWxBZGRyZXNzU3BhY2Up
OworICAgICAgICBpZiAoaXNPcmlnaW5hbFRvTW9kaWZpZWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZvcmlnaW5hbFBhcmFtKTsKKyAgICAgICAgICAgIGZ1bmMu
YWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFtKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFtKTsK
KyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZvcmlnaW5hbFBhcmFtKTsKKyAgICAgICAg
fQorCisgICAgICAgIFRJbnRlcm1CbG9jayAmYm9keSA9ICpuZXcgVEludGVybUJsb2NrKCk7CisK
KyAgICAgICAgQWNjZXNzOjpFbnYgZW52e2NvbmZpZy5jb252ZXJ0VHlwZX07CisKKyAgICAgICAg
Zm9yIChDb252ZXJzaW9uSW5mbyAmaW5mbyA6IGNvbnZlcnNpb25JbmZvcykKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ID0gWyZdKE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbCwg
TW9kaWZpZWRBY2Nlc3MgJm1vZGlmaWVkKSB7CisgICAgICAgICAgICAgICAgaWYgKGluZm8uYXN0
RnVuYykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5m
by5zdGRGdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZzcmMgID0gaXNP
cmlnaW5hbFRvTW9kaWZpZWQgPyBtb2RpZmllZCA6IG9yaWdpbmFsOworICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQgJmRlc3QgPSBpc09yaWdpbmFsVG9Nb2RpZmllZCA/IG9yaWdpbmFs
IDogbW9kaWZpZWQ7CisgICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KFRJ
bnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICppbmZvLmFzdEZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2V7JmRlc3QsICZzcmN9KSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvLnN0ZEZ1bmMpOworICAgICAgICAgICAg
ICAgICAgICBBY2Nlc3MgYWNjZXNzICAgICAgPSBpbmZvLnN0ZEZ1bmMoZW52LCBvcmlnaW5hbCwg
bW9kaWZpZWQpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnNyYyAgPSBpc09y
aWdpbmFsVG9Nb2RpZmllZCA/IGFjY2Vzcy5vcmlnaW5hbCA6IGFjY2Vzcy5tb2RpZmllZDsKKyAg
ICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZkZXN0ID0gaXNPcmlnaW5hbFRvTW9kaWZp
ZWQgPyBhY2Nlc3MubW9kaWZpZWQgOiBhY2Nlc3Mub3JpZ2luYWw7CisgICAgICAgICAgICAgICAg
ICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9w
QXNzaWduLCAmZGVzdCwgJnNyYykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICpvcmlnaW5hbCA9ICZCdWlsZFBhdGhBY2Nl
c3Moc3ltYm9sRW52LCBvcmlnaW5hbFBhcmFtLCBpbmZvLnBhdGhJdGVtcyk7CisgICAgICAgICAg
ICBNb2RpZmllZEFjY2VzcyAqbW9kaWZpZWQgPSAmQWNjZXNzRmllbGQobW9kaWZpZWRQYXJhbSwg
aW5mby5wYXRoTmFtZSk7CisKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG90ID0gb3JpZ2luYWwt
PmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG10ID0gbW9kaWZpZWQtPmdldFR5
cGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChvdC5pc0FycmF5KCkgPT0gbXQuaXNBcnJheSgpKTsK
KworICAgICAgICAgICAgaWYgKG90LmlzQXJyYXkoKSAmJiBvdCAhPSBtdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3QuZ2V0QXJyYXlTaXplcygpID09IG10LmdldEFy
cmF5U2l6ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKG90LmlzQXJyYXlPZkFycmF5cygpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgPSAmRmxhdHRl
bihzeW1ib2xFbnYsICpvcmlnaW5hbCk7CisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0g
JkZsYXR0ZW4oc3ltYm9sRW52LCAqbW9kaWZpZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgdm9sdW1lID0gc3RhdGljX2Nhc3Q8aW50PihvdC5nZXRBcnJh
eVNpemVQcm9kdWN0KCkpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdm9s
dW1lOyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSAh
PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcmln
aW5hbCA9IG9yaWdpbmFsLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbW9k
aWZpZWQgPSBtb2RpZmllZC0+ZGVlcENvcHkoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBPcmlnaW5hbEFjY2VzcyAmbyA9IEFjY2Vzc0luZGV4KCpvcmlnaW5h
bCwgaSk7CisgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICZtID0gQWNjZXNzSW5k
ZXgoKm1vZGlmaWVkLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udmVydChvLCBtKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29udmVydCgqb3JpZ2luYWwsICptb2RpZmllZCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRvICpmdW5jUHJvdG8gPSBuZXcg
VEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZmdW5jKTsKKyAgICAgICAgYXV0byAqZnVuY0RlZiAg
ID0gbmV3IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24oZnVuY1Byb3RvLCAmYm9keSk7CisKKyAg
ICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgbWFjaGluZXJ5OworICAgICAgICBtYWNoaW5l
cnkubW9kaWZpZWRTdHJ1Y3QgICAgICAgICAgICAgICAgICAgPSAmbW9kaWZpZWRTdHJ1Y3Q7Cisg
ICAgICAgIG1hY2hpbmVyeS5nZXRDb252ZXJ0ZXIoY29uZmlnLmNvbnZlcnRUeXBlKSA9IGZ1bmNE
ZWY7CisKKyAgICAgICAgb3V0TWFjaGluZXJpZXMuaW5zZXJ0KG9yaWdpbmFsU3RydWN0LCBtYWNo
aW5lcnkpOworICAgIH0KKworICAgIHZvaWQgcHVzaFBhdGgoUGF0aEl0ZW0gY29uc3QgJml0ZW0p
CisgICAgeworICAgICAgICBwYXRoSXRlbXMucHVzaF9iYWNrKGl0ZW0pOworCisgICAgICAgIHN3
aXRjaCAoaXRlbS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFBhdGhJdGVtOjpU
eXBlOjpGaWVsZDoKKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgoaXRlbS5maWVsZC0+bmFt
ZSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Ug
UGF0aEl0ZW06OlR5cGU6OkluZGV4OgorICAgICAgICAgICAgICAgIHB1c2hOYW1lUGF0aChpdGVt
LmluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBQYXRo
SXRlbTo6VHlwZTo6RmxhdHRlbkFycmF5OgorICAgICAgICAgICAgICAgIG5hbWVQYXRoU2l6ZXMu
cHVzaF9iYWNrKG5hbWVQYXRoLnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHBvcFBhdGgoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFuYW1lUGF0aC5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFuYW1lUGF0aFNpemVzLmVtcHR5
KCkpOworICAgICAgICBuYW1lUGF0aC5yZXNpemUobmFtZVBhdGhTaXplcy5iYWNrKCkpOworICAg
ICAgICBuYW1lUGF0aFNpemVzLnBvcF9iYWNrKCk7CisKKyAgICAgICAgQVNTRVJUKCFwYXRoSXRl
bXMuZW1wdHkoKSk7CisgICAgICAgIHBhdGhJdGVtcy5wb3BfYmFjaygpOworICAgIH0KKworICAg
IHZvaWQgZmluYWxpemUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFmaW5hbGl6ZWQpOworICAg
ICAgICBmaW5hbGl6ZWQgPSB0cnVlOworICAgICAgICBpbnRyb2R1Y2VQYWNraW5nKCk7CisgICAg
ICAgIEFTU0VSVChtZXRhbExheW91dFRvdGFsID09IExheW91dDo6SWRlbnRpdHkoKSk7CisgICAg
ICAgIGludHJvZHVjZVBhZGRpbmcoKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE1vZGlmaWVkRmll
bGQoY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVFR5cGUg
Jm5ld1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dE1hdHJpeFBhY2tpbmcg
cGFja2luZykKKyAgICB7CisgICAgICAgIFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVy
ID0gbmV3VHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVy
LmJsb2NrU3RvcmFnZSAgICAgPSBzdG9yYWdlOworICAgICAgICBsYXlvdXRRdWFsaWZpZXIubWF0
cml4UGFja2luZyAgICA9IHBhY2tpbmc7CisgICAgICAgIG5ld1R5cGUuc2V0TGF5b3V0UXVhbGlm
aWVyKGxheW91dFF1YWxpZmllcik7CisKKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHBh
dGhOYW1lKG5hbWVQYXRoKTsKKyAgICAgICAgbW9kaWZpZWRGaWVsZHMucHVzaF9iYWNrKG5ldyBU
RmllbGQoJm5ld1R5cGUsIHBhdGhOYW1lLCBmaWVsZC5saW5lKCksIGZpZWxkLnN5bWJvbFR5cGUo
KSkpOworICAgIH0KKworICAgIHZvaWQgYWRkQ29udmVyc2lvbihjb25zdCBDb252ZXJzaW9uRnVu
YyAmZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbW9kaWZpZWRGaWVsZHMuZW1wdHkoKSk7
CisgICAgICAgIGNvbnZlcnNpb25JbmZvcy5wdXNoX2JhY2soe2Z1bmMsIG51bGxwdHIsIHBhdGhJ
dGVtcywgbW9kaWZpZWRGaWVsZHMuYmFjaygpLT5uYW1lKCl9KTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZENvbnZlcnNpb24oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtb2RpZmllZEZpZWxkcy5lbXB0eSgpKTsKKyAgICAgICAgY29udmVyc2lvbkluZm9zLnB1
c2hfYmFjayh7e30sICZmdW5jLCBwYXRoSXRlbXMsIG1vZGlmaWVkRmllbGRzLmJhY2soKS0+bmFt
ZSgpfSk7CisgICAgfQorCisgICAgYm9vbCBoYXNQYWNraW5nKCkgY29uc3QgeyByZXR1cm4gY29u
dGFpbnNQYWNrZWQ7IH0KKworICAgIGJvb2wgaGFzUGFkZGluZygpIGNvbnN0IHsgcmV0dXJuIHBh
ZEZpZWxkQ291bnQgPiAwOyB9CisKKyAgICBib29sIHJlY3Vyc2UoY29uc3QgVFN0cnVjdHVyZSAm
c3RydWN0dXJlLCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmb3V0TWFjaGluZXJ5KQorICAgIHsK
KyAgICAgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgKm0gPSBvdXRNYWNoaW5lcmll
cy5maW5kKHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChtID09IG51bGxwdHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoc3RydWN0
dXJlLm5hbWUoKS5kYXRhKCkpOworICAgICAgICAgICAgaWYgKCFUcnlDcmVhdGVNb2RpZmllZFN0
cnVjdChzeW1ib2xFbnYsIGlkR2VuLCBjb25maWcsIHN0cnVjdHVyZSwgbmFtZSwgb3V0TWFjaGlu
ZXJpZXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG0gPSBvdXRNYWNoaW5lcmllcy5maW5kKHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICBBU1NFUlQobSk7CisgICAgICAgIH0KKyAgICAgICAgb3V0TWFjaGlu
ZXJ5ID0gKm07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAg
IHZvaWQgYWRkUGFkZGluZyhzaXplX3QgcGFkQW1vdW50LCBib29sIHVwZGF0ZUxheW91dCkKKyAg
ICB7CisgICAgICAgIGlmIChwYWRBbW91bnQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJlZ2luID0gbW9kaWZp
ZWRGaWVsZHMuc2l6ZSgpOworCisgICAgICAgIC8vIEl0ZXJhdGl2ZWx5IGFkZGluZyBpbiBzY2Fs
YXIgb3IgdmVjdG9yIHBhZGRpbmcgYmVjYXVzZSBzb21lIHN0cnVjdCB0eXBlcyB3aWxsIG5vdAor
ICAgICAgICAvLyBhbGxvdyBtYXRyaXggb3IgYXJyYXkgbWVtYmVycy4KKyAgICAgICAgd2hpbGUg
KHBhZEFtb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlICpwYWRUeXBlOwor
ICAgICAgICAgICAgaWYgKHBhZEFtb3VudCA+PSAxNikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBwYWRBbW91bnQgLT0gMTY7CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBU
VHlwZShUQmFzaWNUeXBlOjpFYnRGbG9hdCwgNCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChwYWRBbW91bnQgPj0gOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBwYWRBbW91bnQgLT0gODsKKyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRUeXBlKFRC
YXNpY1R5cGU6OkVidEZsb2F0LCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKHBhZEFtb3VudCA+PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhZEFt
b3VudCAtPSA0OworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFkQW1v
dW50ID49IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFkQW1vdW50IC09IDI7
CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRCb29s
LCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQocGFkQW1vdW50ID09IDEpOworICAgICAgICAgICAgICAgIHBh
ZEFtb3VudCAtPSAxOworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJhc2lj
VHlwZTo6RWJ0Qm9vbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1cGRhdGVM
YXlvdXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWV0YWxMYXlvdXRUb3RhbCAr
PSBNZXRhbExheW91dE9mKCpwYWRUeXBlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29uc3QgTmFtZSBuYW1lID0gaWRHZW4uY3JlYXRlTmV3TmFtZSgicGFkIik7CisgICAgICAgICAg
ICBtb2RpZmllZEZpZWxkcy5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgbmV3IFRGaWVsZChw
YWRUeXBlLCBuYW1lLnJhd05hbWUoKSwga05vU291cmNlTG9jLCBuYW1lLnN5bWJvbFR5cGUoKSkp
OworICAgICAgICAgICAgKytwYWRGaWVsZENvdW50OworICAgICAgICB9CisKKyAgICAgICAgc3Rk
OjpyZXZlcnNlKG1vZGlmaWVkRmllbGRzLmJlZ2luKCkgKyBiZWdpbiwgbW9kaWZpZWRGaWVsZHMu
ZW5kKCkpOworICAgIH0KKworICAgIHZvaWQgaW50cm9kdWNlUGFja2luZygpCisgICAgeworICAg
ICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc2V0VW5wYWNrZWRTdG9yYWdlID0gW10o
VFR5cGUgJnR5cGUpIHsKKyAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSA9
IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworICAgICAgICAgICAgc3dp
dGNoIChzdG9yYWdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVExheW91
dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0g
VExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkMTQwOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoK
KyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0
ZDQzMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6CisgICAgICAgICAgICAgICAgY2FzZSBUTGF5
b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisgICAgICAgICAgICAgICAgY2FzZSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTZXRCbG9ja1N0b3JhZ2UodHlwZSwgc3RvcmFn
ZSk7CisgICAgICAgIH07CisKKyAgICAgICAgTGF5b3V0IGdsc2xMYXlvdXRUb3RhbCA9IExheW91
dDo6SWRlbnRpdHkoKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgICAgICA9IG1vZGlmaWVk
RmllbGRzLnNpemUoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkICZjdXJyICAgICAgICAgICA9ICptb2Rp
ZmllZEZpZWxkc1tpXTsKKyAgICAgICAgICAgIFRUeXBlICZjdXJyVHlwZSAgICAgICAgPSAqY3Vy
ci50eXBlKCk7CisgICAgICAgICAgICBjb25zdCBib29sIGNhbkJlUGFja2VkID0gQ2FuQmVQYWNr
ZWQoY3VyclR5cGUpOworCisgICAgICAgICAgICBhdXRvIGRvbnRQYWNrID0gWyZdKCkgeworICAg
ICAgICAgICAgICAgIGlmIChjYW5CZVBhY2tlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGdsc2xMYXlvdXRUb3RhbCArPSBHbHNsTGF5b3V0T2YoY3Vy
clR5cGUpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCFDYW5CZVBhY2tlZChj
dXJyVHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG9udFBhY2soKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
c3QgTGF5b3V0IHBhY2tlZEdsc2xMYXlvdXQgICAgICAgICAgID0gR2xzbExheW91dE9mKGN1cnJU
eXBlKTsKKyAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgcGFja2VkU3RvcmFn
ZSA9IGN1cnJUeXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2NrU3RvcmFnZTsKKyAgICAgICAg
ICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisgICAgICAgICAgICBjb25zdCBMYXlv
dXQgdW5wYWNrZWRHbHNsTGF5b3V0ID0gR2xzbExheW91dE9mKGN1cnJUeXBlKTsKKyAgICAgICAg
ICAgIFNldEJsb2NrU3RvcmFnZShjdXJyVHlwZSwgcGFja2VkU3RvcmFnZSk7CisKKyAgICAgICAg
ICAgIEFTU0VSVChwYWNrZWRHbHNsTGF5b3V0LnNpemVPZiA8PSB1bnBhY2tlZEdsc2xMYXlvdXQu
c2l6ZU9mKTsKKyAgICAgICAgICAgIGlmIChwYWNrZWRHbHNsTGF5b3V0LnNpemVPZiA9PSB1bnBh
Y2tlZEdsc2xMYXlvdXQuc2l6ZU9mKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRv
bnRQYWNrKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGNvbnN0IHNpemVfdCBqID0gaSArIDE7CisgICAgICAgICAgICBpZiAoaiA9PSBz
aXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbnRQYWNrKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBwYWQgICAgICAgICAgICA9IHVucGFja2VkR2xzbExheW91dC5zaXplT2YgLSBwYWNrZWRHbHNs
TGF5b3V0LnNpemVPZjsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmbmV4dCAgICAgICAgICA9
ICptb2RpZmllZEZpZWxkc1tqXTsKKyAgICAgICAgICAgIGNvbnN0IExheW91dCBuZXh0R2xzbExh
eW91dCA9IEdsc2xMYXlvdXRPZigqbmV4dC50eXBlKCkpOworCisgICAgICAgICAgICBpZiAocGFk
IDwgbmV4dEdsc2xMYXlvdXQuc2l6ZU9mKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGRvbnRQYWNrKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHN5bWJvbEVudi5tYXJrQXNQYWNrZWQoY3Vycik7CisgICAgICAgICAgICBn
bHNsTGF5b3V0VG90YWwgKz0gcGFja2VkR2xzbExheW91dDsKKyAgICAgICAgICAgIGNvbnRhaW5z
UGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaW50cm9kdWNlUGFk
ZGluZygpCisgICAgeworICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhZGRpbmcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE1ldGFsTGF5b3V0
T2ZDb25maWcgbGF5b3V0Q29uZmlnOworICAgICAgICBsYXlvdXRDb25maWcuZGlzYWJsZVBhY2tp
bmcgICAgICAgICAgICAgPSAhY29uZmlnLmFsbG93UGFja2luZzsKKyAgICAgICAgbGF5b3V0Q29u
ZmlnLmFzc3VtZVN0cnVjdHNBcmVUYWlsUGFkZGVkID0gdHJ1ZTsKKworICAgICAgICBURmllbGRM
aXN0IGZpZWxkcyA9IHN0ZDo6bW92ZShtb2RpZmllZEZpZWxkcyk7CisgICAgICAgIEFTU0VSVCgh
ZmllbGRzLmVtcHR5KCkpOyAgLy8gR0xTTCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWVtYmVyLgor
CisgICAgICAgIGNvbnN0IFRGaWVsZCAqY29uc3QgZmlyc3QgPSBmaWVsZHMuZnJvbnQoKTsKKwor
ICAgICAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBlKCk7CisKKyAgICAgICAgICAgIGNv
bnN0IExheW91dCBnbHNsTGF5b3V0ICA9IEdsc2xMYXlvdXRPZih0eXBlKTsKKyAgICAgICAgICAg
IGNvbnN0IExheW91dCBtZXRhbExheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgbGF5b3V0Q29u
ZmlnKTsKKworICAgICAgICAgICAgc2l6ZV90IHByZVBhZEFtb3VudCA9IDA7CisgICAgICAgICAg
ICBpZiAoZ2xzbExheW91dC5hbGlnbk9mID4gbWV0YWxMYXlvdXQuYWxpZ25PZiAmJiBmaWVsZCAh
PSBmaXJzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgcHJl
UGFkZGVkU2l6ZSA9IG1ldGFsTGF5b3V0VG90YWwuc2l6ZU9mOworICAgICAgICAgICAgICAgIG1l
dGFsTGF5b3V0VG90YWwucmVxdWlyZUFsaWdubWVudChnbHNsTGF5b3V0LmFsaWduT2YsIHRydWUp
OworICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYWRkZWRTaXplID0gbWV0YWxMYXlvdXRU
b3RhbC5zaXplT2Y7CisgICAgICAgICAgICAgICAgcHJlUGFkQW1vdW50ICAgICAgICAgICAgPSBw
YWRkZWRTaXplIC0gcHJlUGFkZGVkU2l6ZTsKKyAgICAgICAgICAgICAgICBtZXRhbExheW91dFRv
dGFsICs9IG1ldGFsTGF5b3V0OworICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocHJlUGFkQW1v
dW50LCBmYWxzZSk7ICAvLyBOb3RlOiByZXF1aXJlQWxpZ25tZW50KCkgYWxyZWFkeSB1cGRhdGVk
IGxheW91dAorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1ldGFsTGF5b3V0VG90YWwgKz0gbWV0YWxMYXlvdXQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG1vZGlmaWVkRmllbGRzLnB1c2hfYmFjayhmaWVsZCk7CisK
KyAgICAgICAgICAgIGlmIChnbHNsTGF5b3V0LnNpemVPZiA+IG1ldGFsTGF5b3V0LnNpemVPZiAm
JiBmaWVsZCAhPSBmaWVsZHMuYmFjaygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnN0IGJvb2wgdXBkYXRlTGF5b3V0ID0gdHJ1ZTsgIC8vIFhYWDogQ29ycmVjdD8KKyAgICAg
ICAgICAgICAgICBjb25zdCBzaXplX3QgcGFkQW1vdW50ICA9IGdsc2xMYXlvdXQuc2l6ZU9mIC0g
bWV0YWxMYXlvdXQuc2l6ZU9mOworICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocGFkQW1vdW50
LCB1cGRhdGVMYXlvdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCBwdXNoTmFtZVBhdGgoY29uc3QgY2hhciAqZXh0cmEpCisgICAgeworICAgICAgICBBU1NF
UlQoZXh0cmEgJiYgKmV4dHJhICE9ICdcMCcpOworICAgICAgICBuYW1lUGF0aFNpemVzLnB1c2hf
YmFjayhuYW1lUGF0aC5zaXplKCkpOworICAgICAgICBjb25zdCBjaGFyICpwID0gZXh0cmE7Cisg
ICAgICAgIGlmIChuYW1lUGF0aC5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBuYW1l
UGF0aCA9IHA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUg
KCpwID09ICdfJykKKyAgICAgICAgeworICAgICAgICAgICAgKytwOworICAgICAgICB9CisgICAg
ICAgIGlmICgqcCA9PSAnXDAnKQorICAgICAgICB7CisgICAgICAgICAgICBwID0gIngiOworICAg
ICAgICB9CisgICAgICAgIGlmIChuYW1lUGF0aC5iYWNrKCkgIT0gJ18nKQorICAgICAgICB7Cisg
ICAgICAgICAgICBuYW1lUGF0aCArPSAnXyc7CisgICAgICAgIH0KKyAgICAgICAgbmFtZVBhdGgg
Kz0gcDsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hOYW1lUGF0aCh1bnNpZ25lZCBleHRyYSkKKyAg
ICB7CisgICAgICAgIGNoYXIgYnVmZmVyW3N0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpk
aWdpdHMxMCArIDFdOworICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgZXh0cmEpOworICAg
ICAgICBwdXNoTmFtZVBhdGgoYnVmZmVyKTsKKyAgICB9CisKKyAgcHVibGljOgorICAgIGNvbnN0
IE1vZGlmeVN0cnVjdENvbmZpZyAmY29uZmlnOworICAgIFN5bWJvbEVudiAmc3ltYm9sRW52Owor
CisgIHByaXZhdGU6CisgICAgVEZpZWxkTGlzdCAmbW9kaWZpZWRGaWVsZHM7CisgICAgTGF5b3V0
IG1ldGFsTGF5b3V0VG90YWwgPSBMYXlvdXQ6OklkZW50aXR5KCk7CisgICAgc2l6ZV90IHBhZEZp
ZWxkQ291bnQgICAgPSAwOworICAgIGJvb2wgY29udGFpbnNQYWNrZWQgICAgID0gZmFsc2U7Cisg
ICAgYm9vbCBmaW5hbGl6ZWQgICAgICAgICAgPSBmYWxzZTsKKworICAgIHN0ZDo6dmVjdG9yPFBh
dGhJdGVtPiBwYXRoSXRlbXM7CisKKyAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IG5hbWVQYXRoU2l6
ZXM7CisgICAgc3RkOjpzdHJpbmcgbmFtZVBhdGg7CisKKyAgICBzdGQ6OnZlY3RvcjxDb252ZXJz
aW9uSW5mbz4gY29udmVyc2lvbkluZm9zOworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGU7
CisgICAgSWRHZW4gJmlkR2VuOworICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMgJm91dE1h
Y2hpbmVyaWVzOworfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcgTW9kaWZ5
RnVuYyA9IGJvb2wgKCopKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7CisKK2Jv
b2wgTW9kaWZ5UmVjdXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7CisKK2Jvb2wgSWRlbnRpdHlNb2RpZnko
Q29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZp
ZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFn
ZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2lu
ZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLnR5cGUoKTsKKyAg
ICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBDbG9uZVR5cGUodHlwZSksIHN0b3JhZ2Us
IHBhY2tpbmcpOworICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9y
aWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICByZXR1cm4gQWNj
ZXNze28sIG19OworICAgIH0pOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJbmxpbmVT
dHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0
IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9y
YWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2lu
ZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICA9ICpmaWVs
ZC50eXBlKCk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0gc3RhdGUuc3lt
Ym9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworICAgIGlmICghc3Vic3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodHlwZS5pc0FycmF5
KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUu
Y29uZmlnLmlubGluZVN0cnVjdChmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgY29uc3QgVEZpZWxkTGlzdCAmc3ViZmllbGRzID0gc3Vic3RydWN0dXJl
LT5maWVsZHMoKTsKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmllbGQgOiBzdWJmaWVsZHMp
CisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmc3VidHlwZSAgICAgICAgICAgICAgICAgID0g
KnN1YmZpZWxkLT50eXBlKCk7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Vi
c3RvcmFnZSAgPSBPdmVybGF5KHN0b3JhZ2UsIHN1YnR5cGUpOworICAgICAgICBjb25zdCBUTGF5
b3V0TWF0cml4UGFja2luZyBzdWJwYWNraW5nID0gT3ZlcmxheShwYWNraW5nLCBzdWJ0eXBlKTsK
KyAgICAgICAgTW9kaWZ5UmVjdXJzaXZlKHN0YXRlLCAqc3ViZmllbGQsIHN1YnN0b3JhZ2UsIHN1
YnBhY2tpbmcpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlY3Vyc2VT
dHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICBjb25z
dCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFj
a2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICA9ICpm
aWVsZC50eXBlKCk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0gc3RhdGUu
c3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworICAgIGlmICghc3Vic3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0YXRlLmNv
bmZpZy5yZWN1cnNlU3RydWN0KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSBtYWNoaW5lcnk7CisgICAgaWYg
KCFzdGF0ZS5yZWN1cnNlKCpzdWJzdHJ1Y3R1cmUsIG1hY2hpbmVyeSkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFR5cGUgJm5ld1R5cGUgPSAqbmV3IFRUeXBl
KG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCwgZmFsc2UpOworICAgIGlmICh0eXBlLmlzQXJyYXko
KSkKKyAgICB7CisgICAgICAgIG5ld1R5cGUubWFrZUFycmF5cyh0eXBlLmdldEFycmF5U2l6ZXMo
KSk7CisgICAgfQorCisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqY29udmVydGVyID0g
bWFjaGluZXJ5LmdldENvbnZlcnRlcihzdGF0ZS5jb25maWcuY29udmVydFR5cGUpOworICAgIEFT
U0VSVChjb252ZXJ0ZXIpOworCisgICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgbmV3
VHlwZSwgc3RvcmFnZSwgcGFja2luZyk7CisgICAgc3RhdGUuYWRkQ29udmVyc2lvbigqY29udmVy
dGVyLT5nZXRGdW5jdGlvbigpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNwbGl0
TWF0cml4Q29sdW1ucyhDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0YXRlLmNvbmZpZy5zcGxp
dE1hdHJpeENvbHVtbnMoZmllbGQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRDb2xzKCk7CisgICAgVFR5cGUgJnJv
d1R5cGUgPSBEcm9wQ29sdW1ucyh0eXBlKTsKKworICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29s
czsgKytjKQorICAgIHsKKyAgICAgICAgc3RhdGUucHVzaFBhdGgoYyk7CisKKyAgICAgICAgc3Rh
dGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgcm93VHlwZSwgc3RvcmFnZSwgcGFja2luZyk7Cisg
ICAgICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9yaWdpbmFsQWNj
ZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tv
LCBtfTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNhdHVyYXRlTWF0cml4Um93cyhDb252ZXJ0U3Ry
dWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNr
aW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmllbGQudHlwZSgpOwor
ICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBjb25zdCBpbnQgcm93cyAgICAgICA9IHR5cGUuZ2V0Um93cygpOworICAgIGNv
bnN0IGludCBzYXR1cmF0aW9uID0gc3RhdGUuY29uZmlnLnNhdHVyYXRlTWF0cml4Um93cyhmaWVs
ZCk7CisgICAgaWYgKHNhdHVyYXRpb24gPD0gcm93cykKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgY29scyA9IHR5cGUuZ2V0Q29scygpOworICAg
IFRUeXBlICZzYXRUeXBlID0gU2V0TWF0cml4Um93RGltKHR5cGUsIHNhdHVyYXRpb24pOworICAg
IHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHNhdFR5cGUsIHN0b3JhZ2UsIHBhY2tpbmcp
OworCisgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyArK2MpCisgICAgeworICAgICAgICBm
b3IgKGludCByID0gMDsgciA8IHJvd3M7ICsrcikKKyAgICAgICAgeworICAgICAgICAgICAgc3Rh
dGUuYWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1v
ZGlmaWVkQWNjZXNzICZtKSB7CisgICAgICAgICAgICAgICAgYXV0byAmb18gPSBBY2Nlc3NJbmRl
eChBY2Nlc3NJbmRleChvLCBjKSwgcik7CisgICAgICAgICAgICAgICAgYXV0byAmbV8gPSBBY2Nl
c3NJbmRleChBY2Nlc3NJbmRleChtLCBjKSwgcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFj
Y2Vzc3tvXywgbV99OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXN0Qm9vbFRvVWludChDb252ZXJ0U3RydWN0U3RhdGUg
JnN0YXRlLCBjb25zdCBURmllbGQgJmZpZWxkKQoreworICAgIGlmIChmaWVsZC50eXBlKCktPmdl
dEJhc2ljVHlwZSgpICE9IFRCYXNpY1R5cGU6OkVidEJvb2wpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmlnLnByb21vdGVCb29sVG9VaW50
KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0FjY2VzcyBDb252ZXJ0Qm9vbFRvVWludChDb252ZXJ0VHlwZSBjb252ZXJ0
VHlwZSwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVkQWNjZXNzICZtKQoreworICAgIGF1dG8g
Y29lcmNlID0gW10oVEludGVybVR5cGVkICZ0bywgVEludGVybVR5cGVkICZmcm9tKSAtPiBUSW50
ZXJtVHlwZWQgJiB7CisgICAgICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlQ29u
c3RydWN0b3IodG8uZ2V0VHlwZSgpLCBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tfSk7CisgICAg
fTsKKyAgICBzd2l0Y2ggKGNvbnZlcnRUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBDb252ZXJ0
VHlwZTo6T3JpZ2luYWxUb01vZGlmaWVkOgorICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tjb2Vy
Y2UobSwgbyksIG19OworICAgICAgICBjYXNlIENvbnZlcnRUeXBlOjpNb2RpZmllZFRvT3JpZ2lu
YWw6CisgICAgICAgICAgICByZXR1cm4gQWNjZXNze28sIGNvZXJjZShvLCBtKX07CisgICAgfQor
fQorCitib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JDb21tb24oQ29udmVydFN0cnVjdFN0YXRl
ICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQg
JmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXJyYXkpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUg
PSAqZmllbGQudHlwZSgpOworICAgIGlmICh0eXBlLmlzQXJyYXkoKSAhPSBhcnJheSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCEoKHR5cGUuaXNSYW5rMCgp
ICYmIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKSkgfHwgdHlwZS5pc1ZlY3RvcigpKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29uc3QgYXV0byBzYXR1cmF0b3Ig
PQorICAgICAgICBhcnJheSA/IHN0YXRlLmNvbmZpZy5zYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJy
YXlzIDogc3RhdGUuY29uZmlnLnNhdHVyYXRlU2NhbGFyT3JWZWN0b3I7CisgICAgY29uc3QgaW50
IGRpbSAgICAgICAgPSB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgY29uc3QgaW50IHNhdHVy
YXRpb24gPSBzYXR1cmF0b3IoZmllbGQpOworICAgIGlmIChzYXR1cmF0aW9uIDw9IGRpbSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVHlwZSAmc2F0VHlwZSAg
ICAgICAgPSBTZXRWZWN0b3JEaW0odHlwZSwgc2F0dXJhdGlvbik7CisgICAgY29uc3QgYm9vbCBi
b29sVG9VaW50ID0gVGVzdEJvb2xUb1VpbnQoc3RhdGUsIGZpZWxkKTsKKyAgICBpZiAoYm9vbFRv
VWludCkKKyAgICB7CisgICAgICAgIHNhdFR5cGUuc2V0QmFzaWNUeXBlKFRCYXNpY1R5cGU6OkVi
dFVJbnQpOworICAgIH0KKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBzYXRUeXBl
LCBzdG9yYWdlLCBwYWNraW5nKTsKKworICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2Qp
CisgICAgeworICAgICAgICBzdGF0ZS5hZGRDb252ZXJzaW9uKFs9XShBY2Nlc3M6OkVudiAmZW52
LCBPcmlnaW5hbEFjY2VzcyAmbywgTW9kaWZpZWRBY2Nlc3MgJm0pIHsKKyAgICAgICAgICAgIGF1
dG8gJm9fID0gZGltID4gMSA/IEFjY2Vzc0luZGV4KG8sIGQpIDogbzsKKyAgICAgICAgICAgIGF1
dG8gJm1fID0gQWNjZXNzSW5kZXgobSwgZCk7CisgICAgICAgICAgICBpZiAoYm9vbFRvVWludCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29udmVydEJvb2xUb1VpbnQo
ZW52LnR5cGUsIG9fLCBtXyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tvXywgbV99OworICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9y
YWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExh
eW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICByZXR1cm4gU2F0dXJhdGVTY2FsYXJP
clZlY3RvckNvbW1vbihzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcsIHRydWUpOworfQor
Citib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3IoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBw
YWNraW5nKQoreworICAgIHJldHVybiBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQ29tbW9uKHN0YXRl
LCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZywgZmFsc2UpOworfQorCitib29sIFByb21vdGVCb29s
VG9VaW50KENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlv
dXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExh
eW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBpZiAoIVRlc3RCb29sVG9VaW50KHN0
YXRlLCBmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
YXV0byAmcHJvbW90ZWRUeXBlID0gQ2xvbmVUeXBlKCpmaWVsZC50eXBlKCkpOworICAgIHByb21v
dGVkVHlwZS5zZXRCYXNpY1R5cGUoVEJhc2ljVHlwZTo6RWJ0VUludCk7CisgICAgc3RhdGUuYWRk
TW9kaWZpZWRGaWVsZChmaWVsZCwgcHJvbW90ZWRUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsKKwor
ICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICZlbnYsIE9yaWdpbmFsQWNj
ZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICByZXR1cm4gQ29udmVydEJvb2xU
b1VpbnQoZW52LnR5cGUsIG8sIG0pOworICAgIH0pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgTW9kaWZ5Q29tbW9uKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAg
ICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgY29uc3QgVExh
eW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBNb2RpZnlGdW5jIGZ1bmNzW10gPSB7Cisg
ICAgICAgIElubGluZVN0cnVjdCwgICAgICAgICAgICAgICAgICAvLworICAgICAgICBSZWN1cnNl
U3RydWN0LCAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgU3BsaXRNYXRyaXhDb2x1bW5zLCAg
ICAgICAgICAgIC8vCisgICAgICAgIFNhdHVyYXRlTWF0cml4Um93cywgICAgICAgICAgICAvLwor
ICAgICAgICBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzLCAgLy8KKyAgICAgICAgU2F0dXJh
dGVTY2FsYXJPclZlY3RvciwgICAgICAgIC8vCisgICAgICAgIFByb21vdGVCb29sVG9VaW50LCAg
ICAgICAgICAgICAvLworICAgIH07CisKKyAgICBmb3IgKE1vZGlmeUZ1bmMgZnVuYyA6IGZ1bmNz
KQorICAgIHsKKyAgICAgICAgaWYgKGZ1bmMoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5n
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gSWRlbnRpdHlNb2RpZnkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNr
aW5nKTsKK30KKworYm9vbCBJbmxpbmVBcnJheShDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAor
ICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICBj
b25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgIGNvbnN0
IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUg
PSAqZmllbGQudHlwZSgpOworICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmlnLmlubGluZUFycmF5
KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25z
dCB1bnNpZ25lZCB2b2x1bWUgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAgICBjb25z
dCBib29sIGlzTXVsdGlEaW0gPSB0eXBlLmlzQXJyYXlPZkFycmF5cygpOworCisgICAgYXV0byAm
aW5uZXJtb3N0VHlwZSA9IElubmVybW9zdFR5cGUodHlwZSk7CisgICAgY29uc3QgVEZpZWxkIGlu
bmVybW9zdEZpZWxkKCZpbm5lcm1vc3RUeXBlLCBmaWVsZC5uYW1lKCksIGZpZWxkLmxpbmUoKSwg
ZmllbGQuc3ltYm9sVHlwZSgpKTsKKworICAgIGlmIChpc011bHRpRGltKQorICAgIHsKKyAgICAg
ICAgc3RhdGUucHVzaFBhdGgoRmxhdHRlbkFycmF5KCkpOworICAgIH0KKworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB2b2x1bWU7ICsraSkKKyAgICB7CisgICAgICAgIHN0YXRlLnB1c2hQ
YXRoKGkpOworICAgICAgICBNb2RpZnlDb21tb24oc3RhdGUsIGlubmVybW9zdEZpZWxkLCBzdG9y
YWdlLCBwYWNraW5nKTsKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAgIH0KKworICAgIGlm
IChpc011bHRpRGltKQorICAgIHsKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZGlmeVJlY3Vyc2l2ZShDb252ZXJ0U3RydWN0
U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwK
KyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwK
KyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcp
Cit7CisgICAgc3RhdGUucHVzaFBhdGgoZmllbGQpOworCisgICAgYm9vbCBtb2RpZmllZDsKKyAg
ICBpZiAoSW5saW5lQXJyYXkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nKSkKKyAgICB7
CisgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgbW9kaWZpZWQgPSBNb2RpZnlDb21tb24oc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5n
KTsKKyAgICB9CisKKyAgICBzdGF0ZS5wb3BQYXRoKCk7CisKKyAgICByZXR1cm4gbW9kaWZpZWQ7
Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKworYm9vbCBzaDo6VHJ5Q3JlYXRlTW9kaWZpZWRTdHJ1Y3QoU3ltYm9sRW52ICZzeW1ib2xF
bnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25maWcgJmNv
bmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
Jm9yaWdpbmFsU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TmFtZSAmbW9kaWZpZWRTdHJ1Y3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpCit7CisgICAgQ29u
dmVydFN0cnVjdFN0YXRlIHN0YXRlKHN5bWJvbEVudiwgaWRHZW4sIGNvbmZpZywgb3V0TWFjaGlu
ZXJpZXMpOworICAgIHNpemVfdCBpZGVudGljYWxGaWVsZENvdW50ID0gMDsKKworICAgIGNvbnN0
IFRGaWVsZExpc3QgJm9yaWdpbmFsRmllbGRzID0gb3JpZ2luYWxTdHJ1Y3QuZmllbGRzKCk7Cisg
ICAgZm9yIChURmllbGQgKm9yaWdpbmFsRmllbGQgOiBvcmlnaW5hbEZpZWxkcykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFRUeXBlICZvcmlnaW5hbFR5cGUgICAgICAgICAgPSAqb3JpZ2luYWxGaWVs
ZC0+dHlwZSgpOworICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UgID0g
T3ZlcmxheShjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSwgb3JpZ2luYWxUeXBlKTsKKyAgICAg
ICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyA9IE92ZXJsYXkoY29uZmlnLmlu
aXRpYWxNYXRyaXhQYWNraW5nLCBvcmlnaW5hbFR5cGUpOworICAgICAgICBpZiAoIU1vZGlmeVJl
Y3Vyc2l2ZShzdGF0ZSwgKm9yaWdpbmFsRmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcpKQorICAgICAg
ICB7CisgICAgICAgICAgICArK2lkZW50aWNhbEZpZWxkQ291bnQ7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzdGF0ZS5maW5hbGl6ZSgpOworCisgICAgaWYgKGlkZW50aWNhbEZpZWxkQ291bnQg
PT0gb3JpZ2luYWxGaWVsZHMuc2l6ZSgpICYmICFzdGF0ZS5oYXNQYWNraW5nKCkgJiYgIXN0YXRl
Lmhhc1BhZGRpbmcoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzdGF0ZS5wdWJsaXNoKG9yaWdpbmFsU3RydWN0LCBtb2RpZmllZFN0cnVjdE5hbWUpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI4Y2ZjNTUwNDY4
MjQzOGQyYWI3YjEyMzBhOTQ5YzY5OGZkYWU5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Nb2RpZnlTdHJ1Y3QuaApAQCAtMCwwICsxLDEzNSBAQAorLy8KKy8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRl
ZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NT0RJRllTVFJVQ1Rf
SF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTU9E
SUZZU1RSVUNUX0hfCisKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9t
YXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCitlbnVtIGNsYXNzIENvbnZlcnRUeXBl
Cit7CisgICAgT3JpZ2luYWxUb01vZGlmaWVkLAorICAgIE1vZGlmaWVkVG9PcmlnaW5hbCwKK307
CisKKy8vIENvbmZpZ3VyZXMgaG93IHN0cnVjdCBtb2RpZmljYXRpb24gaXMgcGVyZm9ybWVkLgor
Y2xhc3MgTW9kaWZ5U3RydWN0Q29uZmlnCit7CisgIHB1YmxpYzoKKyAgICBzdHJ1Y3QgUHJlZGlj
YXRlCisgICAgeworICAgICAgICB1c2luZyBGdW5jID0gYm9vbCAoKikoY29uc3QgVEZpZWxkICYp
OworICAgICAgICBzdGF0aWMgYm9vbCBGYWxzZShjb25zdCBURmllbGQgJikgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgVHJ1ZShjb25zdCBURmllbGQgJikgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgU2F0dXJhdGVWZWN0b3IKKyAgICB7CisgICAg
ICAgIC8vIFZhbGlkIHJldHVybiB2YWx1ZXMgYXJlIFswLCAxLCAyLCAzLCA0XS4KKyAgICAgICAg
Ly8gSWYgb3JpZ2luYWwgZGltID49IHJldHVybiB2YWx1ZSwgdGhlIGZpZWxkIHJlbWFpbnMgdW50
b3VjaGVkLgorICAgICAgICB1c2luZyBGdW5jID0gaW50ICgqKShjb25zdCBURmllbGQgJik7Cisg
ICAgICAgIHN0YXRpYyBpbnQgRG9udFNhdHVyYXRlKGNvbnN0IFRGaWVsZCAmKSB7IHJldHVybiAw
OyB9CisgICAgICAgIHN0YXRpYyBpbnQgRnVsbHlTYXR1cmF0ZShjb25zdCBURmllbGQgJikgeyBy
ZXR1cm4gNDsgfQorICAgIH07CisKKyAgcHVibGljOgorICAgIE1vZGlmeVN0cnVjdENvbmZpZyhD
b252ZXJ0VHlwZSBjb252ZXJ0VHlwZSwgYm9vbCBhbGxvd1BhY2tpbmcsIGJvb2wgYWxsb3dQYWRk
aW5nKQorICAgICAgICA6IGNvbnZlcnRUeXBlKGNvbnZlcnRUeXBlKSwgYWxsb3dQYWNraW5nKGFs
bG93UGFja2luZyksIGFsbG93UGFkZGluZyhhbGxvd1BhZGRpbmcpCisgICAge30KKworICAgIC8v
IE1hdHJpeCBmaWVsZCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIGZpZWxkcyBvZiByb3cgdmVjdG9y
cy4KKyAgICBQcmVkaWNhdGU6OkZ1bmMgc3BsaXRNYXRyaXhDb2x1bW5zID0gUHJlZGljYXRlOjpG
YWxzZTsKKworICAgIC8vIEFycmF5IGZpZWxkcyBhcmUgc3BsaXQgaW50byBtdWx0aXBsZSBmaWVs
ZHMgb2YgZWxlbWVudCB0eXBlLgorICAgIFByZWRpY2F0ZTo6RnVuYyBpbmxpbmVBcnJheSA9IFBy
ZWRpY2F0ZTo6RmFsc2U7CisKKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGhhdmUgdGhlaXIgc3ViZmll
bGRzIGlubGluZWQgZGlyZWN0bHkuCisgICAgUHJlZGljYXRlOjpGdW5jIGlubGluZVN0cnVjdCA9
IFByZWRpY2F0ZTo6RmFsc2U7CisKKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGFyZSBtb2RpZmllZC4K
KyAgICBQcmVkaWNhdGU6OkZ1bmMgcmVjdXJzZVN0cnVjdCA9IFByZWRpY2F0ZTo6RmFsc2U7CisK
KyAgICAvLyBWZWN0b3IgYW5kIHNjYWxhciBib29sIGZpZWxkcyBhcmUgcHJvbW90ZWQgdG8gdWlu
dCBmaWVsZHMuCisgICAgUHJlZGljYXRlOjpGdW5jIHByb21vdGVCb29sVG9VaW50ID0gUHJlZGlj
YXRlOjpGYWxzZTsKKworICAgIC8vIENyZWF0ZXMgYSBuZXcgc3RydWN0dXJlIHdoZXJlIHNjYWxh
ciBvciB2ZWN0b3IgZmllbGRzIGFyZSBzYXR1cmF0ZWQgdmVjdG9ycy4KKyAgICAvLyBlLmcuIGBm
bG9hdCAtPiBmbG9hdDRgLgorICAgIC8vIGUuZy4gYGZsb2F0MiAtPiBmbG9hdDRgLgorICAgIFNh
dHVyYXRlVmVjdG9yOjpGdW5jIHNhdHVyYXRlU2NhbGFyT3JWZWN0b3IgPSBTYXR1cmF0ZVZlY3Rv
cjo6RG9udFNhdHVyYXRlOworCisgICAgLy8gQ3JlYXRlcyBhIG5ldyBzdHJ1Y3R1cmUgd2hlcmUg
c2NhbGFyIG9yIHZlY3RvciBhcnJheSBmaWVsZHMgYXJlIHNhdHVyYXRlZC4KKyAgICAvLyBlLmcu
IGBmbG9hdFsxMF0gLT4gZmxvYXQ0WzEwXWAKKyAgICAvLyBlLmcuIGBmbG9hdDJbMTBdIC0+IGZs
b2F0NFsxMF1gCisgICAgU2F0dXJhdGVWZWN0b3I6OkZ1bmMgc2F0dXJhdGVTY2FsYXJPclZlY3Rv
ckFycmF5cyA9IFNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGU7CisKKyAgICAvLyBDcmVhdGVz
IGEgbmV3IHN0cnVjdHVyZSB3aGVyZSBtYXRyaXggZmllbGRzIGFyZSByb3ctc2F0dXJhdGVkLgor
ICAgIC8vIGUuZy4gYGZsb2F0MngyIC0+IGZsb2F0Mng0YC4KKyAgICBTYXR1cmF0ZVZlY3Rvcjo6
RnVuYyBzYXR1cmF0ZU1hdHJpeFJvd3MgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOwor
CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBpbml0aWFsQmxvY2tTdG9yYWdlICAgPSBrRGVmYXVs
dExheW91dEJsb2NrU3RvcmFnZTsKKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBpbml0aWFsTWF0
cml4UGFja2luZyA9IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZzsKKyAgICBDb252ZXJ0VHlw
ZSBjb252ZXJ0VHlwZTsKKyAgICBib29sIGFsbG93UGFja2luZzsKKyAgICBib29sIGFsbG93UGFk
ZGluZzsKKyAgICBBZGRyZXNzU3BhY2UgZXh0ZXJuYWxBZGRyZXNzU3BhY2U7Cit9OworCitzdHJ1
Y3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkKK3sKKyAgICBjb25zdCBUU3RydWN0dXJlICptb2Rp
ZmllZFN0cnVjdCAgICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKKyAgICBUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKyAgICBUSW50
ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsID0gbnVsbHB0cjsK
KworICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKiZnZXRDb252ZXJ0ZXIoQ29udmVydFR5
cGUgY29udmVydFR5cGUpCisgICAgeworICAgICAgICBpZiAoY29udmVydFR5cGUgPT0gQ29udmVy
dFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZnVuY01vZGlmaWVkVG9PcmlnaW5hbDsKKyAgICAgICAg
fQorICAgIH0KK307CisKKy8vIEluZGV4ZWQgYnkgdG9wb2xvZ2ljYWwgb3JkZXIuCitjbGFzcyBN
b2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzCit7CisgIHB1YmxpYzoKKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0OworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZhdChzaXplX3QgaW5k
ZXgpIGNvbnN0OworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICpmaW5kKGNvbnN0
IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0OworICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFRTdHJ1Y3R1cmUg
JnMsIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkpOworCisgIHByaXZh
dGU6CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTdHJ1Y3R1cmUgKiwgTW9kaWZpZWRT
dHJ1Y3RNYWNoaW5lcnk+IG9yaWdpbmFsVG9NYWNoaW5lcnk7CisgICAgc3RkOjp2ZWN0b3I8Y29u
c3QgVFN0cnVjdHVyZSAqPiBvcmRlcmluZzsKK307CisKKy8vIFJldHVybnMgdHJ1ZSBhbmQgYG91
dE1hY2hpbmVyeWAgcG9wdWxhdGVkIGlmIG1vZGlmaWNhdGlvbnMgd2VyZSBwZXJmb3JtZWQuCisv
LyBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4KK2Jvb2wgVHJ5Q3JlYXRlTW9kaWZpZWRTdHJ1Y3Qo
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2Vu
ICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kaWZ5U3RydWN0
Q29uZmlnICZjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJm9yaWdpbmFsU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMgJm91dE1hY2hpbmVyaWVzKTsKKworfSAgLy8gbmFt
ZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfTU9ESUZZU1RSVUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdjNWQxODVlNmZhZDM3NTY5
ZWZjYmQ4NTVmMmFlNDAxZTY0M2M4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9O
YW1lLmNwcApAQCAtMCwwICsxLDIyMCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRlICJjb21t
b24vZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybVRyYXZlcnNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgSW1tdXRhYmxlU3Ry
aW5nIEdldE5hbWUoVCBjb25zdCAmb2JqZWN0KQoreworICAgIGlmIChvYmplY3Quc3ltYm9sVHlw
ZSgpID09IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtFbXB0eUlt
bXV0YWJsZVN0cmluZzsKKyAgICB9CisgICAgcmV0dXJuIG9iamVjdC5uYW1lKCk7Cit9CisKK05h
bWU6Ok5hbWUoY29uc3QgVEZpZWxkICZmaWVsZCkgOiBOYW1lKEdldE5hbWUoZmllbGQpLCBmaWVs
ZC5zeW1ib2xUeXBlKCkpIHt9CisKK05hbWU6Ok5hbWUoY29uc3QgVFN5bWJvbCAmc3ltYm9sKSA6
IE5hbWUoR2V0TmFtZShzeW1ib2wpLCBzeW1ib2wuc3ltYm9sVHlwZSgpKSB7fQorCitib29sIE5h
bWU6Om9wZXJhdG9yPT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1S
YXdOYW1lID09IG90aGVyLm1SYXdOYW1lICYmIG1TeW1ib2xUeXBlID09IG90aGVyLm1TeW1ib2xU
eXBlOworfQorCitib29sIE5hbWU6Om9wZXJhdG9yIT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCitib29sIE5hbWU6Om9wZXJh
dG9yPChjb25zdCBOYW1lICZvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobVJhd05hbWUgPCBvdGhl
ci5tUmF3TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAo
b3RoZXIubVJhd05hbWUgPCBtUmF3TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgcmV0dXJuIG1TeW1ib2xUeXBlIDwgb3RoZXIubVN5bWJvbFR5cGU7Cit9CisK
K2Jvb2wgTmFtZTo6ZW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtU3ltYm9sVHlwZSA9PSBT
eW1ib2xUeXBlOjpFbXB0eTsKK30KKworYm9vbCBOYW1lOjpiZWdpbnNXaXRoKGNvbnN0IE5hbWUg
JnByZWZpeCkgY29uc3QKK3sKKyAgICBpZiAobVN5bWJvbFR5cGUgIT0gcHJlZml4Lm1TeW1ib2xU
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gbVJh
d05hbWUuYmVnaW5zV2l0aChwcmVmaXgubVJhd05hbWUpOworfQorCit2b2lkIE5hbWU6OmVtaXQo
VEluZm9TaW5rQmFzZSAmb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobVN5bWJvbFR5cGUpCisg
ICAgeworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkJ1aWx0SW46CisgICAgICAgIGNhc2UgU3lt
Ym9sVHlwZTo6VXNlckRlZmluZWQ6CisgICAgICAgICAgICBBU1NFUlQoIW1SYXdOYW1lLmVtcHR5
KCkpOworICAgICAgICAgICAgb3V0IDw8IG1SYXdOYW1lOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsOgorICAgICAgICAgICAgQVNT
RVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKKyAgICAgICAgICAgIGlmIChtUmF3TmFtZS5iZWdpbnNX
aXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICht
UmF3TmFtZVswXSAhPSAnXycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
IGtBbmdsZUludGVybmFsUHJlZml4IDw8ICdfJyA8PCBtUmF3TmFtZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
a0FuZ2xlSW50ZXJuYWxQcmVmaXggPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorICAgICAgICAg
ICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKKy8vIE5PVEU6IFRoaXMgbWF0Y2hl
cyBtb3JlIHRoaW5ncyB0aGFuIEZpbmRTeW1ib2xOb2RlLgorY2xhc3MgRXhwcmVzc2lvbkNvbnRh
aW5zTmFtZVZpc2l0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICAgIE5hbWUgbU5h
bWU7CisgICAgYm9vbCBtRm91bmROYW1lID0gZmFsc2U7CisKKyAgcHVibGljOgorICAgIEV4cHJl
c3Npb25Db250YWluc05hbWVWaXNpdG9yKGNvbnN0IE5hbWUgJm5hbWUpCisgICAgICAgIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpLCBtTmFtZShuYW1lKQorICAgIHt9CisK
KyAgICBib29sIGZvdW5kTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZE5hbWU7IH0KKworICAg
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChOYW1lKG5vZGUtPnZhcmlhYmxlKCkpID09IG1OYW1lKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtRm91bmROYW1lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgdmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dpenpsZSAqKSBvdmVycmlkZSB7IHJldHVy
biAhbUZvdW5kTmFtZTsgfQorCisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVElu
dGVybUJpbmFyeSAqbm9kZSkgb3ZlcnJpZGUgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0KKworICAg
IGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlk
ZSAgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0KKworICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVGVybmFyeSAqbm9kZSkgb3ZlcnJpZGUgeyByZXR1cm4gIW1Gb3VuZE5h
bWU7IH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUgKm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobm9kZS0+aXNDb25zdHJ1
Y3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAg
ICAgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1
Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSAmJiBO
YW1lKCpzdHJ1Y3R1cmUpID09IG1OYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1Gb3VuZE5hbWUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gbm9kZS0+
Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChmdW5jICYmIE5hbWUoKmZ1bmMpID09IG1O
YW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Gb3VuZE5hbWUgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAhbUZvdW5kTmFtZTsKKyAg
ICB9CisKKyAgICBib29sIHZpc2l0SWZFbHNlKFZpc2l0IHZpc2l0LCBUSW50ZXJtSWZFbHNlICpu
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1T
d2l0Y2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgYm9vbCB2aXNpdENhc2UoVmlzaXQsIFRJbnRlcm1D
YXNlICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlKFRJ
bnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZSB7IExPR0lDX0VSUk9SKCk7IH0KKwor
ICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRl
ZmluaXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QmxvY2soVmlzaXQsIFRJ
bnRlcm1CbG9jayAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZp
ZXJEZWNsYXJhdGlvbihWaXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICop
IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJt
RGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwg
VEludGVybUxvb3AgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0
LCBUSW50ZXJtQnJhbmNoICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdFByZXByb2Nl
c3NvckRpcmVjdGl2ZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICopIG92ZXJyaWRlIHsg
TE9HSUNfRVJST1IoKTsgfQorfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29s
IHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKGNvbnN0IE5hbWUgJm5hbWUsIFRJbnRlcm1UeXBl
ZCAmbm9kZSkKK3sKKyAgICBFeHByZXNzaW9uQ29udGFpbnNOYW1lVmlzaXRvciB2aXNpdG9yKG5h
bWUpOworICAgIG5vZGUudHJhdmVyc2UoJnZpc2l0b3IpOworICAgIHJldHVybiB2aXNpdG9yLmZv
dW5kTmFtZSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9OYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZlYWVhOGI0N2JhZjk0MjFlZDU0MDczMDExZjljYjVi
NTA4NTA2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgKQEAgLTAsMCAr
MSw2OCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9OQU1FX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
SW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2lu
ay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY29uc3RleHByIGNoYXIga0Fu
Z2xlSW50ZXJuYWxQcmVmaXhbXSA9ICJBTkdMRSI7CisKKy8vIFJlcHJlc2VudHMgdGhlIG5hbWUg
b2YgYSBzeW1ib2wuCitjbGFzcyBOYW1lCit7CisgIHB1YmxpYzoKKyAgICBjb25zdGV4cHIgTmFt
ZShjb25zdCBOYW1lICYpID0gZGVmYXVsdDsKKworICAgIGNvbnN0ZXhwciBOYW1lKCkgOiBOYW1l
KGtFbXB0eUltbXV0YWJsZVN0cmluZywgU3ltYm9sVHlwZTo6RW1wdHkpIHt9CisKKyAgICBleHBs
aWNpdCBjb25zdGV4cHIgTmFtZShJbW11dGFibGVTdHJpbmcgcmF3TmFtZSwgU3ltYm9sVHlwZSBz
eW1ib2xUeXBlKQorICAgICAgICA6IG1SYXdOYW1lKHJhd05hbWUpLCBtU3ltYm9sVHlwZShzeW1i
b2xUeXBlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhd05hbWUuZW1wdHkoKSA9PSAoc3ltYm9s
VHlwZSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkpOworICAgIH0KKworICAgIGV4cGxpY2l0IGNvbnN0
ZXhwciBOYW1lKGNvbnN0IGNoYXIgKnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IFN5
bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpCisgICAgICAgIDogTmFtZShJbW11dGFibGVTdHJpbmco
cmF3TmFtZSksIHN5bWJvbFR5cGUpCisgICAge30KKworICAgIGV4cGxpY2l0IE5hbWUoY29uc3Qg
c3RkOjpzdHJpbmcgJnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSkKKyAgICAgICAgOiBO
YW1lKEltbXV0YWJsZVN0cmluZyhyYXdOYW1lKSwgc3ltYm9sVHlwZSkKKyAgICB7fQorCisgICAg
ZXhwbGljaXQgTmFtZShjb25zdCBURmllbGQgJmZpZWxkKTsKKyAgICBleHBsaWNpdCBOYW1lKGNv
bnN0IFRTeW1ib2wgJnN5bWJvbCk7CisKKyAgICBOYW1lICZvcGVyYXRvcj0oY29uc3QgTmFtZSAm
KSA9IGRlZmF1bHQ7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5hbWUgJm90aGVyKSBjb25z
dDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0OworICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKworICAgIGNvbnN0ZXhwciBj
b25zdCBJbW11dGFibGVTdHJpbmcgJnJhd05hbWUoKSBjb25zdCB7IHJldHVybiBtUmF3TmFtZTsg
fQorICAgIGNvbnN0ZXhwciBTeW1ib2xUeXBlIHN5bWJvbFR5cGUoKSBjb25zdCB7IHJldHVybiBt
U3ltYm9sVHlwZTsgfQorCisgICAgYm9vbCBlbXB0eSgpIGNvbnN0OworICAgIGJvb2wgYmVnaW5z
V2l0aChjb25zdCBOYW1lICZwcmVmaXgpIGNvbnN0OworCisgICAgdm9pZCBlbWl0KFRJbmZvU2lu
a0Jhc2UgJm91dCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBJbW11dGFibGVTdHJpbmcgbVJh
d05hbWU7CisgICAgU3ltYm9sVHlwZSBtU3ltYm9sVHlwZTsKK307CisKK0FOR0xFX05PX0RJU0NB
UkQgYm9vbCBFeHByZXNzaW9uQ29udGFpbnNOYW1lKGNvbnN0IE5hbWUgJm5hbWUsIFRJbnRlcm1U
eXBlZCAmbm9kZSk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9QaXBlbGluZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjU0YzM3OGExYzk1MDU5ZmQyYjY5NjhlYTYwNDQ3OGJiOWY0OGM4N2YKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEsNDc2IEBACisv
LworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUGlwZWxpbmUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0J1aWx0SW4uaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCisjZGVmaW5lIFZBUklBTlRfTkFNRSh2YXJpYW50LCBiYXNlKSAodmFyaWFu
dCA9PSBWYXJpYW50OjpNb2RpZmllZCA/IGJhc2UgIk1vZCIgOiBiYXNlKQorCitib29sIFBpcGVs
aW5lOjp1c2VzKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdAoreworICAgIGlmICh2YXIuc3lt
Ym9sVHlwZSgpID09IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChnbG9iYWxJbnN0YW5jZVZhcikKKyAgICB7CisgICAgICAg
IHJldHVybiAmdmFyID09IGdsb2JhbEluc3RhbmNlVmFyOworICAgIH0KKworICAgIGNvbnN0IFRU
eXBlICZub2RlVHlwZSAgICAgID0gdmFyLmdldFR5cGUoKTsKKyAgICBjb25zdCBUUXVhbGlmaWVy
IHF1YWxpZmllciA9IG5vZGVUeXBlLmdldFF1YWxpZmllcigpOworCisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAgIHN3aXRj
aCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxp
Zmllcjo6RXZxQXR0cmlidXRlOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
VmVydGV4SW46CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIHN3aXRj
aCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxp
Zmllcjo6RXZxVmVydGV4T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
UG9zaXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0T3V0Ogor
ICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRTaXplOgorICAgICAgICAg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxU21vb3RoT3V0OgorICAgICAgICAgICAgICAgIGNh
c2UgVFF1YWxpZmllcjo6RXZxQ2VudHJvaWRPdXQ6CisgICAgICAgICAgICAgICAgY2FzZSBUUXVh
bGlmaWVyOjpFdnFOb1BlcnNwZWN0aXZlT3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxp
Zmllcjo6RXZxVmFyeWluZ091dDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoKKyAgICAg
ICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ21lbnRJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRR
dWFsaWZpZXI6OkV2cUZsYXRJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2
cVNtb290aEluOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2VudHJvaWRJ
bjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU5vUGVyc3BlY3RpdmVJbjoK
KyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZhcnlpbmdJbjoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNh
c2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdtZW50
T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0NvbG9yOgorICAg
ICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0RhdGE6CisgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnRGVwdGg6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJV
bmlmb3JtczoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVW5pZm9ybToKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2Ug
VHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFHbG9i
YWw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICAg
ICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhJRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZy
YWdtZW50R2xvYmFsczoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0Nvb3JkOgorICAg
ICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRDb29yZDoKKyAgICAgICAgICAg
ICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyb250RmFjaW5nOgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUeXBlOjpB
bmdsZVVuaWZvcm1zOgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgIC8vIGdsb2JhbEluc3Rh
bmNlVmFyIHNob3VsZCBiZSBub24tbnVsbCBhbmQgdGh1cyBuZXZlciByZWFjaCBoZXJlLgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAg
ICAgICAgICAgIHJldHVybiBJc1NhbXBsZXIobm9kZVR5cGUuZ2V0QmFzaWNUeXBlKCkpOworCisg
ICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAgICAgIHJldHVybiBOYW1lKHZh
cikgPT0gTmFtZSgqQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCkpOworICAgIH0KK30K
KworTmFtZSBQaXBlbGluZTo6Z2V0U3RydWN0VHlwZU5hbWUoVmFyaWFudCB2YXJpYW50KSBjb25z
dAoreworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAg
ICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05B
TUUodmFyaWFudCwgIlZlcnRleEluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJWZXJ0ZXhPdXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6
OkZyYWdtZW50SW46CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJG
cmFnbWVudEluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpGcmFn
bWVudE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIkZyYWdt
ZW50T3V0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5p
Zm9ybXM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJVc2VyVW5p
Zm9ybXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5p
Zm9ybXM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJBbmdsZVVu
aWZvcm1zIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25z
dGFudEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJO
b25Db25zdEdsb2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6
Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFN
RSh2YXJpYW50LCAiSW52b2NhdGlvblZlcnRleEdsb2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisgICAgICAg
ICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJJbnZvY2F0aW9uRnJhZ21lbnRHbG9i
YWxzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgor
ICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVGV4dHVyZUVudnMiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6CisgICAg
ICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJJbnN0YW5jZUlkIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIE5hbWUobmFtZSk7Cit9CisKK05hbWUg
UGlwZWxpbmU6OmdldFN0cnVjdEluc3RhbmNlTmFtZShWYXJpYW50IHZhcmlhbnQpIGNvbnN0Cit7
CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2
YXJpYW50LCAidmVydGV4SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
InZlcnRleE91dCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6RnJh
Z21lbnRJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImZyYWdt
ZW50SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50
T3V0OgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiZnJhZ21lbnRP
dXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3Jt
czoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgInVzZXJVbmlmb3Jt
cyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVVbmlmb3Jt
czoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImFuZ2xlVW5pZm9y
bXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Ok5vbkNvbnN0YW50
R2xvYmFsczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIm5vbkNv
bnN0R2xvYmFscyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW52
b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZh
cmlhbnQsICJpbnZvY2F0aW9uVmVydGV4R2xvYmFscyIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgICAg
IG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImludm9jYXRpb25GcmFnbWVudEdsb2JhbHMi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisgICAg
ICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJ0ZXh0dXJlRW52cyIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAg
ICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImluc3RhbmNlSWQiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gTmFtZShuYW1lKTsKK30KKworc3RhdGljIGJv
b2wgQWxsb3dQYWNraW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCit7CisgICAgdXNpbmcgVHlwZSA9
IFBpcGVsaW5lOjpUeXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2Fz
ZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAg
ICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50
T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgIGNhc2UgVHlw
ZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0
ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6
CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5j
ZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGJvb2wg
QWxsb3dQYWRkaW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCit7CisgICAgdXNpbmcgVHlwZSA9IFBp
cGVsaW5lOjpUeXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBU
eXBlOjpVc2VyVW5pZm9ybXM6CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAg
IGNhc2UgVHlwZTo6VmVydGV4T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46Cisg
ICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVV
bmlmb3JtczoKKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisgICAgICAg
IGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6
SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlk
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KK2VudW0gQ29tcGFyZQorewor
ICAgIExULAorICAgIExURSwKKyAgICBFUSwKKyAgICBHVEUsCisgICAgR1QsCit9OworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBib29sIENvbXBhcmVCeShDb21wYXJlIG9wLCBjb25z
dCBUICZ4LCBjb25zdCBUICZ5KQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgICBj
YXNlIExUOgorICAgICAgICAgICAgcmV0dXJuIHggPCB5OworICAgICAgICBjYXNlIExURToKKyAg
ICAgICAgICAgIHJldHVybiB4IDw9IHk7CisgICAgICAgIGNhc2UgRVE6CisgICAgICAgICAgICBy
ZXR1cm4geCA9PSB5OworICAgICAgICBjYXNlIEdURToKKyAgICAgICAgICAgIHJldHVybiB4ID49
IHk7CisgICAgICAgIGNhc2UgR1Q6CisgICAgICAgICAgICByZXR1cm4geCA+IHk7CisgICAgfQor
fQorCit0ZW1wbGF0ZSA8VEJhc2ljVHlwZSBCVCwgQ29tcGFyZSBDbXAsIGludCBNYXRjaERpbSwg
aW50IE5ld0RpbT4KK3N0YXRpYyBpbnQgU2F0dXJhdGVWZWN0b3JPZihjb25zdCBURmllbGQgJmZp
ZWxkKQoreworICAgIHN0YXRpY19hc3NlcnQoTmV3RGltID49IE1hdGNoRGltLCAiIik7CisKKyAg
ICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgQVNTRVJUKHR5cGUuaXNT
Y2FsYXIoKSB8fCB0eXBlLmlzVmVjdG9yKCkpOworCisgICAgY29uc3QgYm9vbCBjb25kID0gdHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBCVCAmJiAhdHlwZS5pc0FycmF5KCkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICBDb21wYXJlQnkoQ21wLCB0eXBlLmdldE5vbWluYWxTaXplKCksIE1hdGNoRGlt
KTsKKworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5ld0RpbTsKKyAgICB9
CisgICAgcmV0dXJuIDA7Cit9CisKK01vZGlmeVN0cnVjdENvbmZpZyBQaXBlbGluZTo6ZXh0ZXJu
YWxTdHJ1Y3RNb2RpZnlDb25maWcoKSBjb25zdAoreworICAgIHVzaW5nIFByZWQgICA9IE1vZGlm
eVN0cnVjdENvbmZpZzo6UHJlZGljYXRlOworICAgIHVzaW5nIFNhdFZlYyA9IE1vZGlmeVN0cnVj
dENvbmZpZzo6U2F0dXJhdGVWZWN0b3I7CisKKyAgICBNb2RpZnlTdHJ1Y3RDb25maWcgY29uZmln
KAorICAgICAgICBpc1BpcGVsaW5lT3V0KCkgPyBDb252ZXJ0VHlwZTo6T3JpZ2luYWxUb01vZGlm
aWVkIDogQ29udmVydFR5cGU6Ok1vZGlmaWVkVG9PcmlnaW5hbCwKKyAgICAgICAgQWxsb3dQYWNr
aW5nKHR5cGUpLCBBbGxvd1BhZGRpbmcodHlwZSkpOworCisgICAgY29uZmlnLmV4dGVybmFsQWRk
cmVzc1NwYWNlID0gZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKTsKKworICAgIHN3aXRjaCAodHlwZSkK
KyAgICB7CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAgICAgICBjb25maWcu
aW5saW5lQXJyYXkgICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAgICAgIGNvbmZpZy5zcGxp
dE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmlnLmlubGluZVN0
cnVjdCAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAg
ICAgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0cml4Q29sdW1ucyA9
IFByZWQ6OlRydWU7CisgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJl
ZDo6VHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21l
bnRJbjoKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVl
OworICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0cml4Q29sdW1ucyA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAg
ICAgICBjb25maWcuaW5saW5lQXJyYXkgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAg
ICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zICAgICA9IFByZWQ6OlRydWU7CisgICAgICAg
ICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAg
ICAgICBjb25maWcuc2F0dXJhdGVTY2FsYXJPclZlY3RvciA9IFtdKGNvbnN0IFRGaWVsZCAmZmll
bGQpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50IHMgPSBTYXR1cmF0ZVZlY3Rvck9mPFRCYXNp
Y1R5cGU6OkVidEludCwgTFQsIDQsIDQ+KGZpZWxkKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAoaW50IHMgPSBTYXR1cmF0ZVZlY3Rvck9mPFRCYXNpY1R5cGU6OkVidFVJbnQsIExU
LCA0LCA0PihmaWVsZCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGludCBzID0g
U2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNUeXBlOjpFYnRGbG9hdCwgTFQsIDQsIDQ+KGZpZWxkKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3JtczoKKyAg
ICAgICAgICAgIGNvbmZpZy5wcm9tb3RlQm9vbFRvVWludCAgICAgICAgICAgID0gUHJlZDo6VHJ1
ZTsKKyAgICAgICAgICAgIGNvbmZpZy5zYXR1cmF0ZU1hdHJpeFJvd3MgICAgICAgICAgID0gU2F0
VmVjOjpGdWxseVNhdHVyYXRlOworICAgICAgICAgICAgY29uZmlnLnNhdHVyYXRlU2NhbGFyT3JW
ZWN0b3JBcnJheXMgPSBTYXRWZWM6OkZ1bGx5U2F0dXJhdGU7CisgICAgICAgICAgICBjb25maWcu
cmVjdXJzZVN0cnVjdCAgICAgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgICAgICBj
b25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1N0ZDQz
MDsgIC8vIFhYWDogQ29ycmVjdD8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
VHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUeXBlOjpJbnZvY2F0aW9uVmVydGV4R2xvYmFsczoKKyAgICAgICAgY2FzZSBUeXBlOjpJ
bnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6Cisg
ICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiBjb25maWc7Cit9CisKK2Jvb2wgUGlwZWxpbmU6OmFsd2F5c1JlcXVpcmVz
TG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5
cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgorICAgICAg
ICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21l
bnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBj
YXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Oklu
dm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAg
ICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorfQorCitib29sIFBpcGVsaW5lOjppc1BpcGVsaW5lT3V0KCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAg
ICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1z
OgorICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgIGNhc2UgVHlwZTo6
Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhH
bG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6Cisg
ICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlk
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4
T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorfQorCitBZGRyZXNzU3BhY2UgUGlwZWxpbmU6OmV4dGVybmFsQWRkcmVz
c1NwYWNlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNl
IFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAg
IGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9j
YXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVu
dEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBl
OjpJbnN0YW5jZUlkOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorICAgICAgICBj
YXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3BhY2U6OlRo
cmVhZDsKKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3JtczoKKyAgICAgICAgY2FzZSBU
eXBlOjpBbmdsZVVuaWZvcm1zOgorICAgICAgICAgICAgcmV0dXJuIEFkZHJlc3NTcGFjZTo6Q29u
c3RhbnQ7CisgICAgfQorfQorCitib29sIFBpcGVsaW5lU3RydWN0czo6bWF0Y2hlcyhjb25zdCBU
U3RydWN0dXJlICZzLCBib29sIGludGVybmFsLCBib29sIGV4dGVybmFsKSBjb25zdAoreworICAg
IFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBzW10gPSB7CisgICAgICAgIGZyYWdtZW50SW4s
CisgICAgICAgIGZyYWdtZW50T3V0LAorICAgICAgICB2ZXJ0ZXhJbiwKKyAgICAgICAgdmVydGV4
T3V0LAorICAgICAgICB1c2VyVW5pZm9ybXMsCisgICAgICAgIGFuZ2xlVW5pZm9ybXMsCisgICAg
ICAgIG5vbkNvbnN0YW50R2xvYmFscywKKyAgICAgICAgaW52b2NhdGlvblZlcnRleEdsb2JhbHMs
CisgICAgICAgIGludm9jYXRpb25GcmFnbWVudEdsb2JhbHMsCisgICAgICAgIHRleHR1cmUsCisg
ICAgICAgIGluc3RhbmNlSWQsCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJnAgOiBwcykK
KyAgICB7CisgICAgICAgIGlmIChpbnRlcm5hbCAmJiBwLmludGVybmFsID09ICZzKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXh0
ZXJuYWwgJiYgcC5leHRlcm5hbCA9PSAmcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45YmY0NzZhZGZkNjQ2MGIwZDllZmM2YWIxZDBmMzc5ZDNmMTNiMTc1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8v
CisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfUElQRUxJTkVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfUElQRUxJTkVfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3lt
Ym9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTW9kaWZ5U3RydWN0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8g
RGF0YSB0aGF0IGlzIHNjb3BlZCBhcyBgZXh0ZXJuYWxgIGFuZCBgaW50ZXJuYWxgIGZvciBhIGdp
dmVuIHBpcGVsaW5lLgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgUGlwZWxpbmVTY29w
ZWQKK3sKKyAgICAvLyBEYXRhIHRoYXQgaXMgY29uZmlndXJlZCB0byB0YWxrIGV4dGVybmFsbHkg
dG8gdGhlIHByb2dyYW0uCisgICAgLy8gTWF5IGNvaW5jaWRlIHdpdGggYGludGVybmFsYCwgYnV0
IG1heSBhbHNvIGRpdmVyZ2UgZnJvbSBgaW50ZXJuYWxgLgorICAgIGNvbnN0IFQgKmV4dGVybmFs
ID0gbnVsbHB0cjsKKworICAgIC8vIERhdGEgdGhhdCBpcyBjb25maWd1cmVkIHRvIHRhbGsgaW50
ZXJuYWxseSB3aXRoaW4gdGhlIHByb2dyYW0uCisgICAgLy8gTWF5IGNvaW5jaWRlIHdpdGggYGV4
dGVybmFsYCwgYnV0IG1heSBhbHNvIGRpdmVyZ2UgZnJvbSBgZXh0ZXJuYWxgLgorICAgIGNvbnN0
IFQgKmludGVybmFsID0gbnVsbHB0cjsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGlu
cHV0IGNvaW5jaWRlcyB3aXRoIGVpdGhlciBgZXh0ZXJuYWxgIG9yIGBpbnRlcm5hbGAgZGF0YS4K
KyAgICBib29sIG1hdGNoZXMoY29uc3QgVCAmb2JqZWN0KSBjb25zdCB7IHJldHVybiBleHRlcm5h
bCA9PSAmb2JqZWN0IHx8IGludGVybmFsID09ICZvYmplY3Q7IH0KKworICAgIC8vIEJvdGggYGV4
dGVybmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIG5vbi1udWxsLgorICAg
IGJvb2wgaXNUb3RhbGx5RnVsbCgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsICYmIGludGVybmFs
OyB9CisKKyAgICAvLyBCb3RoIGBleHRlcm5hbGAgYW5kIGBpbnRlcm5hbGAgcmVwcmVzZW50YXRp
b25zIGFyZSBudWxsLgorICAgIGJvb2wgaXNUb3RhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiAh
ZXh0ZXJuYWwgJiYgIWludGVybmFsOyB9CisKKyAgICAvLyBCb3RoIGBleHRlcm5hbGAgYW5kIGBp
bnRlcm5hbGAgcmVwcmVzZW50YXRpb25zIGFyZSB0aGUgc2FtZS4KKyAgICBib29sIGlzVW5pZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsID09IGludGVybmFsOyB9Cit9OworCisvLyBSZXBy
ZXNlbnRzIGEgaGlnaC1sZXZlbCBwcm9ncmFtIHBpcGVsaW5lLgorY2xhc3MgUGlwZWxpbmUKK3sK
KyAgcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZQorICAgIHsKKyAgICAgICAgVmVydGV4SW4s
CisgICAgICAgIFZlcnRleE91dCwKKyAgICAgICAgRnJhZ21lbnRJbiwKKyAgICAgICAgRnJhZ21l
bnRPdXQsCisgICAgICAgIFVzZXJVbmlmb3JtcywKKyAgICAgICAgQW5nbGVVbmlmb3JtcywKKyAg
ICAgICAgTm9uQ29uc3RhbnRHbG9iYWxzLAorICAgICAgICBJbnZvY2F0aW9uVmVydGV4R2xvYmFs
cywKKyAgICAgICAgSW52b2NhdGlvbkZyYWdtZW50R2xvYmFscywKKyAgICAgICAgVGV4dHVyZSwK
KyAgICAgICAgSW5zdGFuY2VJZCwKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBWYXJpYW50Cisg
ICAgeworICAgICAgICAvLyBGb3IgYWxsIGludGVybmFsIHBpcGVsaW5lIHVzZXMuCisgICAgICAg
IC8vIEZvciBleHRlcm5hbCBwaXBlbGluZSB1c2VzIGlmIHBpcGVsaW5lIGRvZXMgbm90IHJlcXVp
cmUgc3BsaXR0aW5nIG9yIHNhdHVyYXRpb24uCisgICAgICAgIE9yaWdpbmFsLAorCisgICAgICAg
IC8vIE9ubHkgZm9yIGV4dGVybmFsIHBpcGVsaW5lIHVzZXMgaWYgdGhlIHBpcGVsaW5lIHdhcyBz
cGxpdCBvciBzYXR1cmF0ZWQuCisgICAgICAgIE1vZGlmaWVkLAorICAgIH07CisKKyAgcHVibGlj
OgorICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBwaXBlbGluZS4KKyAgICBUeXBlIHR5cGU7CisKKyAg
ICAvLyBOb24tbnVsbCBpZiBhIGdsb2JhbCBpbnN0YW5jZSBvZiB0aGUgcGlwZWxpbmUgc3RydWN0
IGFscmVhZHkgZXhpc3RzLgorICAgIC8vIElmIG5vbi1udWxsIHN0cnVjdCBzcGxpdHRpbmcgc2hv
dWxkIG5vdCBiZSBuZWVkZWQuCisgICAgY29uc3QgVFZhcmlhYmxlICpnbG9iYWxJbnN0YW5jZVZh
cjsKKworICBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgdmFyaWFibGUgYmVs
b25ncyB0byB0aGUgcGlwZWxpbmUuCisgICAgYm9vbCB1c2VzKGNvbnN0IFRWYXJpYWJsZSAmdmFy
KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBzdHJ1Y3QgdHlwZSB0
aGF0IHN0b3JlcyB2YXJpYWJsZXMgb2YgdGhpcyBwaXBlbGluZS4KKyAgICBOYW1lIGdldFN0cnVj
dFR5cGVOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBu
YW1lIGZvciB0aGUgc3RydWN0IGluc3RhbmNlIHRoYXQgc3RvcmVzIHZhcmlhYmxlcyBvZiB0aGlz
IHBpcGVsaW5lLgorICAgIE5hbWUgZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFZhcmlhbnQgdmFyaWFu
dCkgY29uc3Q7CisKKyAgICBNb2RpZnlTdHJ1Y3RDb25maWcgZXh0ZXJuYWxTdHJ1Y3RNb2RpZnlD
b25maWcoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGlwZWxpbmUgYWx3
YXlzIHJlcXVpcmVzIGEgbm9uLXBhcmFtZXRlciBsb2NhbCBpbnN0YW5jZSBkZWNsYXJhdGlvbiBv
ZgorICAgIC8vIHRoZSBwaXBlbGluZSBzdHJ1Y3R1cmVzLgorICAgIGJvb2wgYWx3YXlzUmVxdWly
ZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Jbk1haW4oKSBjb25zdDsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZmYgdGhlIHBpcGVsaW5lIGlzIGFuIG91dHB1dCBwaXBlbGluZS4gVGhlIGV4dGVy
bmFsIHBpcGVsaW5lIHN0cnVjdHVyZSBzaG91bGQKKyAgICAvLyBiZSByZXR1cm5lZCBmcm9tIGBt
YWluYC4KKyAgICBib29sIGlzUGlwZWxpbmVPdXQoKSBjb25zdDsKKworICAgIEFkZHJlc3NTcGFj
ZSBleHRlcm5hbEFkZHJlc3NTcGFjZSgpIGNvbnN0OworfTsKKworLy8gQSBjb2xsZWN0aW9uIG9m
IHZhcmlvdXMgcGlwZWxpbmUgc3RydWN0dXJlcy4KK3N0cnVjdCBQaXBlbGluZVN0cnVjdHMgOiBh
bmdsZTo6Tm9uQ29weWFibGUKK3sKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBmcmFn
bWVudEluOworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGZyYWdtZW50T3V0OworICAg
IFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHZlcnRleEluOworICAgIFBpcGVsaW5lU2NvcGVk
PFRTdHJ1Y3R1cmU+IHZlcnRleE91dDsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiB1
c2VyVW5pZm9ybXM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gYW5nbGVVbmlmb3Jt
czsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBub25Db25zdGFudEdsb2JhbHM7Cisg
ICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gaW52b2NhdGlvblZlcnRleEdsb2JhbHM7Cisg
ICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gaW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczsK
KyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiB0ZXh0dXJlOworICAgIFBpcGVsaW5lU2Nv
cGVkPFRTdHJ1Y3R1cmU+IGluc3RhbmNlSWQ7CisKKyAgICBib29sIG1hdGNoZXMoY29uc3QgVFN0
cnVjdHVyZSAmcywgYm9vbCBpbnRlcm5hbCwgYm9vbCBleHRlcm5hbCkgY29uc3Q7Cit9OworCit9
ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9QSVBFTElORV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1By
b2dyYW1QcmVsdWRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGJmNWEwMmZlMGRiMGJlZDNkMmFhM2M5NTVjYzk5OTI3NTNiN2M4MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAKQEAgLTAsMCArMSwzNzU3
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3lt
Ym9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0NvbnN0YW50TmFtZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNw
YWNlCit7CisKK2NsYXNzIFByb2dyYW1QcmVsdWRlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
K3sKKyAgICB1c2luZyBMaW5lVGFnICAgICAgID0gdW5zaWduZWQ7CisgICAgdXNpbmcgRnVuY0Vt
aXR0ZXIgICA9IHZvaWQgKCopKFByb2dyYW1QcmVsdWRlICYsIGNvbnN0IFRGdW5jdGlvbiAmKTsK
KyAgICB1c2luZyBGdW5jVG9FbWl0dGVyID0gc3RkOjptYXA8TmFtZSwgRnVuY0VtaXR0ZXI+Owor
CisgIHB1YmxpYzoKKyAgICBQcm9ncmFtUHJlbHVkZShUSW5mb1NpbmtCYXNlICZvdXQsIGNvbnN0
IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcih0
cnVlLCBmYWxzZSwgZmFsc2UpLCBtT3V0KG91dCkKKyAgICB7CisgICAgICAgIEFMV0FZU19JTkxJ
TkUoKTsKKworICAgICAgICBpZiAocHBjLmhhc1N0cnVjdEVxKQorICAgICAgICB7CisgICAgICAg
ICAgICBlcXVhbFZlY3RvcigpOworICAgICAgICAgICAgZXF1YWxNYXRyaXgoKTsKKyAgICAgICAg
fQorCisjaWYgMQorICAgICAgICBtT3V0IDw8ICIjZGVmaW5lIEFOR0xFX3RlbnNvciBtZXRhbDo6
YXJyYXlcbiI7CisjZWxzZQorICAgICAgICB0ZW5zb3IoKTsKKyNlbmRpZgorICAgIH0KKworICBw
cml2YXRlOgorICAgIGJvb2wgZW1pdEd1YXJkKExpbmVUYWcgbGluZVRhZykKKyAgICB7CisgICAg
ICAgIGlmIChtRW1pdHRlZC5maW5kKGxpbmVUYWcpICE9IG1FbWl0dGVkLmVuZCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbUVtaXR0
ZWQuaW5zZXJ0KGxpbmVUYWcpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBz
dGF0aWMgRnVuY1RvRW1pdHRlciBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKworICAgIHZvaWQgdmlz
aXRPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRG
dW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmFyZ1R5
cGUwLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTEgPSBudWxs
cHRyKTsKKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5
cGUgJnR5cGUpOworICAgIHZvaWQgdmlzaXRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUgJnZhcik7
CisgICAgdm9pZCB2aXNpdFN0cnVjdHVyZShjb25zdCBUU3RydWN0dXJlICZzKTsKKworICAgIGJv
b2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpIG92ZXJyaWRlOworICAg
IGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlkZTsKKyAg
ICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKSBvdmVy
cmlkZTsKKyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNsYXJhdGlv
biAqbm9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpu
b2RlKSBvdmVycmlkZTsKKworICBwcml2YXRlOgorICAgIHZvaWQgQUxXQVlTX0lOTElORSgpOwor
CisgICAgdm9pZCBpbmNsdWRlX21ldGFsX2F0b21pYygpOworICAgIHZvaWQgaW5jbHVkZV9tZXRh
bF9jb21tb24oKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCk7CisgICAgdm9p
ZCBpbmNsdWRlX21ldGFsX2dyYXBoaWNzKCk7CisgICAgdm9pZCBpbmNsdWRlX21ldGFsX21hdGgo
KTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfbWF0cml4KCk7CisgICAgdm9pZCBpbmNsdWRlX21l
dGFsX3BhY2soKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfcmVsYXRpb25hbCgpOworCisgICAg
dm9pZCBlbmFibGVfaWYoKTsKKyAgICB2b2lkIHNjYWxhcl9vZigpOworICAgIHZvaWQgaXNfc2Nh
bGFyKCk7CisgICAgdm9pZCBpc192ZWN0b3IoKTsKKyAgICB2b2lkIGlzX21hdHJpeCgpOworICAg
IHZvaWQgYWRkcmVzc29mKCk7CisgICAgdm9pZCBkaXN0YW5jZSgpOworICAgIHZvaWQgbGVuZ3Ro
KCk7CisgICAgdm9pZCBkb3QoKTsKKyAgICB2b2lkIG5vcm1hbGl6ZSgpOworICAgIHZvaWQgZmFj
ZWZvcndhcmQoKTsKKyAgICB2b2lkIHJlZmxlY3QoKTsKKyAgICB2b2lkIHJlZnJhY3QoKTsKKyAg
ICB2b2lkIGRlZ3JlZXMoKTsKKyAgICB2b2lkIHJhZGlhbnMoKTsKKyAgICB2b2lkIG1vZCgpOwor
ICAgIHZvaWQgcG9zdEluY3JlbWVudE1hdHJpeCgpOworICAgIHZvaWQgcHJlSW5jcmVtZW50TWF0
cml4KCk7CisgICAgdm9pZCBwb3N0RGVjcmVtZW50TWF0cml4KCk7CisgICAgdm9pZCBwcmVEZWNy
ZW1lbnRNYXRyaXgoKTsKKyAgICB2b2lkIG5lZ2F0ZU1hdHJpeCgpOworICAgIHZvaWQgbWF0bXVs
QXNzaWduKCk7CisgICAgdm9pZCBhdGFuKCk7CisgICAgdm9pZCBhZGRNYXRyaXhTY2FsYXJBc3Np
Z24oKTsKKyAgICB2b2lkIHN1Yk1hdHJpeFNjYWxhckFzc2lnbigpOworICAgIHZvaWQgYWRkTWF0
cml4U2NhbGFyKCk7CisgICAgdm9pZCBzdWJNYXRyaXhTY2FsYXIoKTsKKyAgICB2b2lkIGRpdk1h
dHJpeFNjYWxhcigpOworICAgIHZvaWQgZGl2TWF0cml4U2NhbGFyRmFzdCgpOworICAgIHZvaWQg
ZGl2TWF0cml4U2NhbGFyQXNzaWduKCk7CisgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXJBc3NpZ25G
YXN0KCk7CisgICAgdm9pZCB0ZW5zb3IoKTsKKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGUo
KTsKKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGVBc3NpZ24oKTsKKyAgICB2b2lkIGNvbXBv
bmVudFdpc2VNdWx0aXBseSgpOworICAgIHZvaWQgb3V0ZXJQcm9kdWN0KCk7CisgICAgdm9pZCBp
bnZlcnNlMigpOworICAgIHZvaWQgaW52ZXJzZTMoKTsKKyAgICB2b2lkIGludmVyc2U0KCk7Cisg
ICAgdm9pZCBlcXVhbFZlY3RvcigpOworICAgIHZvaWQgZXF1YWxNYXRyaXgoKTsKKyAgICB2b2lk
IG5vdEVxdWFsVmVjdG9yKCk7CisgICAgdm9pZCBub3RFcXVhbFN0cnVjdCgpOworICAgIHZvaWQg
ZXF1YWxBcnJheSgpOworICAgIHZvaWQgbm90RXF1YWxBcnJheSgpOworICAgIHZvaWQgc2lnbigp
OworICAgIHZvaWQgcGFja19oYWxmXzJ4MTYoKTsKKyAgICB2b2lkIHVucGFja19oYWxmXzJ4MTYo
KTsKKyAgICB2b2lkIHZlY3RvckVsZW1SZWYoKTsKKyAgICB2b2lkIHN3aXp6bGVSZWYoKTsKKyAg
ICB2b2lkIG91dCgpOworICAgIHZvaWQgaW5vdXQoKTsKKyAgICB2b2lkIGZsYXR0ZW5BcnJheSgp
OworICAgIHZvaWQgY2FzdFZlY3RvcigpOworICAgIHZvaWQgY2FzdE1hdHJpeCgpOworICAgIHZv
aWQgZnVuY3Rpb25Db25zdGFudHMoKTsKKyAgICB2b2lkIGdyYWRpZW50KCk7CisgICAgdm9pZCB0
ZXh0dXJlRW52KCk7CisgICAgdm9pZCB0ZXhlbEZldGNoKCk7CisgICAgdm9pZCB0ZXhlbEZldGNo
T2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNf
ZmxvYXQyKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zsb2F0KCk7CisgICAg
dm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNf
ZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisgICAg
dm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0dXJlX2Rl
cHRoMmRhcnJheV9mbG9hdDQoKTsKKyAgICB2b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0
NF9mbG9hdCgpOworICAgIHZvaWQgdGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0KCk7CisgICAgdm9p
ZCB0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQoKTsKKyAgICB2b2lkIHRleHR1cmVfdGV4
dHVyZTJkYXJyYXlfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zs
b2F0M19mbG9hdCgpOworICAgIHZvaWQgdGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDQoKTsK
KyAgICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisgICAgdm9p
ZCB0ZXh0dXJlMURMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUxRFByb2ooKTsKKyAgICB2b2lkIHRl
eHR1cmUxRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUyRCgpOworICAgIHZvaWQgdGV4dHVy
ZTJETG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlMkRQcm9qKCk7CisgICAgdm9pZCB0ZXh0dXJlMkRQ
cm9qTG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlM0RMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUzRFBy
b2ooKTsKKyAgICB2b2lkIHRleHR1cmUzRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1cmVDdWJl
KCk7CisgICAgdm9pZCB0ZXh0dXJlQ3ViZUxvZCgpOworICAgIHZvaWQgdGV4dHVyZUN1YmVQcm9q
KCk7CisgICAgdm9pZCB0ZXh0dXJlQ3ViZVByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1cmVHcmFk
KCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROKCk7
CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7Cisg
ICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAg
dm9pZCB0ZXh0dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgdm9p
ZCB0ZXh0dXJlR3JhZF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICB2
b2lkIHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MygpOworICAgIHZv
aWQgdGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDMoKTsKKyAgICB2
b2lkIHRleHR1cmVHcmFkT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9nZW5l
cmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zm
c2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgIHZvaWQgdGV4dHVy
ZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7CisgICAgdm9p
ZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsK
KyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zs
b2F0Ml9pbnQyKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVfZmxvYXQ0
X2Zsb2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZzZXRfdGV4dHVy
ZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZUxvZCgp
OworICAgIHZvaWQgdGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MigpOworICAgIHZvaWQgdGV4dHVy
ZUxvZF9nZW5lcmljX2Zsb2F0MygpOworICAgIHZvaWQgdGV4dHVyZUxvZF9kZXB0aDJkX2Zsb2F0
MygpOworICAgIHZvaWQgdGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsKKyAgICB2
b2lkIHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7CisgICAgdm9pZCB0ZXh0dXJl
TG9kT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJl
UHJvaigpOworICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkKCk7CisgICAgdm9pZCB0ZXh0dXJlUHJv
akdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0MigpOworICAgIHZvaWQgdGV4dHVyZVBy
b2pHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICB2b2lkIHRleHR1cmVQ
cm9qR3JhZF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgdm9pZCB0ZXh0dXJl
UHJvakdyYWRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0
dXJlUHJvakdyYWRPZmZzZXQoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5l
cmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qR3Jh
ZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICB2b2lkIHRl
eHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsK
KyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0M19m
bG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvakxvZF9nZW5l
cmljX2Zsb2F0NCgpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2RfZGVwdGgyZF9mbG9hdDQoKTsK
KyAgICB2b2lkIHRleHR1cmVQcm9qTG9kX3RleHR1cmUzZF9mbG9hdDQoKTsKKyAgICB2b2lkIHRl
eHR1cmVQcm9qTG9kT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvak9mZnNldCgpOworICAg
IHZvaWQgdGV4dHVyZVNpemUoKTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UgJm1P
dXQ7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PExpbmVUYWc+IG1FbWl0dGVkOworICAgIHN0ZDo6
dW5vcmRlcmVkX3NldDxjb25zdCBUU3ltYm9sICo+IG1IYW5kbGVkOworICAgIGNvbnN0IEZ1bmNU
b0VtaXR0ZXIgbUZ1bmNUb0VtaXR0ZXIgPSBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKK307CisKK30g
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2Rl
ZmluZSBQUk9HUkFNX1BSRUxVREVfSU5DTFVERShoZWFkZXIpICAgICAgICAgICAgIFwKKyAgICB2
b2lkIFByb2dyYW1QcmVsdWRlOjppbmNsdWRlXyMjaGVhZGVyKCkgICAgICAgICBcCisgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoZW1pdEd1YXJkKF9fTElORV9fKSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBt
T3V0IDw8ICgiI2luY2x1ZGUgPCIgI2hlYWRlciAiPlxuXG4iKTsgXAorICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUg
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobmFtZSwgY29kZSwgLi4uKSAgICAgICAgICAgICAgICBc
CisgICAgdm9pZCBQcm9ncmFtUHJlbHVkZTo6bmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQVNTRVJUKGNvZGVbMF0gPT0gJ1xuJyk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChlbWl0R3VhcmQoX19M
SU5FX18pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIF9fVkFfQVJHU19fOyAvKiBkZXBlbmRlbmNpZXMgKi8gICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBtT3V0IDw8IChzdGF0aWNfY2FzdDxjb25zdCBjaGFyICo+KGNvZGUg
IlxuIikgKyAxKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2F0b21pYykKK1BST0dSQU1fUFJFTFVE
RV9JTkNMVURFKG1ldGFsX2NvbW1vbikKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2dl
b21ldHJpYykKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2dyYXBoaWNzKQorUFJPR1JB
TV9QUkVMVURFX0lOQ0xVREUobWV0YWxfbWF0aCkKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1l
dGFsX21hdHJpeCkKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX3BhY2spCitQUk9HUkFN
X1BSRUxVREVfSU5DTFVERShtZXRhbF9yZWxhdGlvbmFsKQorCisvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShBTFdBWVNfSU5MSU5FLCBSIigKKyNkZWZp
bmUgQU5HTEVfQUxXQVlTX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyki
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShlbmFibGVfaWYsIFIiKAordGVtcGxhdGUgPGJv
b2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfZW5hYmxlX2lmIHt9OwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZW5hYmxlX2lmPHRydWUsIFQ+Cit7Cisg
ICAgdXNpbmcgdHlwZSA9IFQ7Cit9OwordGVtcGxhdGUgPGJvb2wgQj4KK3VzaW5nIEFOR0xFX2Vu
YWJsZV9pZl90ID0gdHlwZW5hbWUgQU5HTEVfZW5hYmxlX2lmPEI+Ojp0eXBlOworKSIpCisKK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKHNjYWxhcl9vZiwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0cnVjdCBBTkdMRV9zY2FsYXJfb2YKK3sKKyAgICB1c2luZyB0eXBlID0gVDsKK307Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3VzaW5nIEFOR0xFX3NjYWxhcl9vZl90ID0gdHlwZW5hbWUg
QU5HTEVfc2NhbGFyX29mPFQ+Ojp0eXBlOworKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KGlzX3NjYWxhciwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9pc19z
Y2FsYXIge307CisjZGVmaW5lIEFOR0xFX0RFRklORV9TQ0FMQVIoc2NhbGFyKSBcCisgICAgdGVt
cGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3NjYWxhcjxzY2FsYXI+IHsgZW51bSB7IHZhbHVlID0g
dHJ1ZSB9OyB9CitBTkdMRV9ERUZJTkVfU0NBTEFSKGJvb2wpOworQU5HTEVfREVGSU5FX1NDQUxB
UihjaGFyKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIoc2hvcnQpOworQU5HTEVfREVGSU5FX1NDQUxB
UihpbnQpOworQU5HTEVfREVGSU5FX1NDQUxBUihsb25nKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIo
dWNoYXIpOworQU5HTEVfREVGSU5FX1NDQUxBUih1c2hvcnQpOworQU5HTEVfREVGSU5FX1NDQUxB
Uih1aW50KTsKK0FOR0xFX0RFRklORV9TQ0FMQVIodWxvbmcpOworQU5HTEVfREVGSU5FX1NDQUxB
UihoYWxmKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIoZmxvYXQpOworKSIpCisKK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKGlzX3ZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9yCit7CisgICAgZW51bSB7
IHZhbHVlID0gZmFsc2UgfTsKK307CisjZGVmaW5lIEFOR0xFX0RFRklORV9WRUNUT1Ioc2NhbGFy
KSBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFy
ICMjIDI+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3Ry
dWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFyICMjIDM+IHsgZW51bSB7IHZhbHVlID0g
dHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRh
bDo6c2NhbGFyICMjIDQ+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxh
dGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDI+IHsgdXNpbmcg
dHlwZSA9IHNjYWxhcjsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJf
b2Y8bWV0YWw6OnNjYWxhciAjIyAzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgND4geyB1
c2luZyB0eXBlID0gc2NhbGFyOyB9CitBTkdMRV9ERUZJTkVfVkVDVE9SKGJvb2wpOworQU5HTEVf
REVGSU5FX1ZFQ1RPUihjaGFyKTsKK0FOR0xFX0RFRklORV9WRUNUT1Ioc2hvcnQpOworQU5HTEVf
REVGSU5FX1ZFQ1RPUihpbnQpOworQU5HTEVfREVGSU5FX1ZFQ1RPUihsb25nKTsKK0FOR0xFX0RF
RklORV9WRUNUT1IodWNoYXIpOworQU5HTEVfREVGSU5FX1ZFQ1RPUih1c2hvcnQpOworQU5HTEVf
REVGSU5FX1ZFQ1RPUih1aW50KTsKK0FOR0xFX0RFRklORV9WRUNUT1IodWxvbmcpOworQU5HTEVf
REVGSU5FX1ZFQ1RPUihoYWxmKTsKK0FOR0xFX0RFRklORV9WRUNUT1IoZmxvYXQpOworKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXJfb2YoKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoaXNfbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9pc19tYXRyaXgKK3sKKyAgICBlbnVtIHsgdmFsdWUg
PSBmYWxzZSB9OworfTsKKyNkZWZpbmUgQU5HTEVfREVGSU5FX01BVFJJWChzY2FsYXIpIFwKKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgMngy
PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBB
TkdMRV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAjIyAyeDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1
ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6
c2NhbGFyICMjIDJ4ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7IGVudW0g
eyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9pc19t
YXRyaXg8bWV0YWw6OnNjYWxhciAjIyAzeDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBc
CisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2NhbGFyICMj
IDN4ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHgyPiB7IGVudW0geyB2YWx1ZSA9
IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9pc19tYXRyaXg8bWV0
YWw6OnNjYWxhciAjIyA0eDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVt
cGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2NhbGFyICMjIDR4ND4geyBl
bnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVf
c2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07
IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIg
IyMgMngzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMng0PiB7IHVzaW5nIHR5cGUgPSBz
Y2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFs
OjpzY2FsYXIgIyMgM3gyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgM3gzPiB7IHVzaW5n
IHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFy
X29mPG1ldGFsOjpzY2FsYXIgIyMgM3g0PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgNHgy
PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5H
TEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgNHgzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7
IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2Fs
YXIgIyMgNHg0PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH0KK0FOR0xFX0RFRklORV9NQVRSSVgo
aGFsZik7CitBTkdMRV9ERUZJTkVfTUFUUklYKGZsb2F0KTsKKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2NhbGFyX29mKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGFkZHJlc3Nv
ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBUICogQU5HTEVfYWRkcmVzc29mKHRocmVhZCBUICZy
ZWYpCit7CisgICAgcmV0dXJuICZyZWY7Cit9CispIikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUoZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX2Rpc3RhbmNlX2lt
cGwKK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2ZfdDxU
PiBleGVjKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFsOjpkaXN0YW5jZSh4
LCB5KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZGlz
dGFuY2VfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8VD46OnZhbHVl
Pj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4LCBUIHkpCisg
ICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmFicyh4IC0geSk7CisgICAgfQorfTsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2ZfdDxU
PiBBTkdMRV9kaXN0YW5jZShUIHgsIFQgeSkKK3sKKyAgICByZXR1cm4gQU5HTEVfZGlzdGFuY2Vf
aW1wbDxUPjo6ZXhlYyh4LCB5KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRl
X21ldGFsX21hdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBpc192ZWN0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBS
IigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0
IEFOR0xFX2xlbmd0aF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgQU5H
TEVfc2NhbGFyX29mX3Q8VD4gZXhlYyhUIHgpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6
Omxlbmd0aCh4KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5H
TEVfbGVuZ3RoX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2
YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHgpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gQU5H
TEVfbGVuZ3RoKFQgeCkKK3sKKyAgICByZXR1cm4gQU5HTEVfbGVuZ3RoX2ltcGw8VD46OmV4ZWMo
eCk7Cit9OworKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21l
dHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlzX3NjYWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoZG90LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9kb3RfaW1wbAorewor
ICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3NjYWxhcl9vZl90PFQ+IGV4ZWMo
VCB4LCBUIHkpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmRvdCh4LCB5KTsKKyAgICB9
Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZG90X2ltcGw8VCwgQU5H
TEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGlj
IEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHggKiB5OworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gQU5HTEVfZG90KFQgeCwgVCB5KQoreworICAg
IHJldHVybiBBTkdMRV9kb3RfaW1wbDxUPjo6ZXhlYyh4LCB5KTsKK307CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxh
cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobm9ybWFs
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9ub3JtYWxpemVfaW1wbAorewor
ICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisgICAgeworICAgICAg
ICByZXR1cm4gbWV0YWw6Om5vcm1hbGl6ZSh4KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8
QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19J
TkxJTkUgVCBleGVjKFQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBBTkdMRV9zaWduKHgpOwor
ICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBB
TkdMRV9ub3JtYWxpemUoVCB4KQoreworICAgIHJldHVybiBBTkdMRV9ub3JtYWxpemVfaW1wbDxU
Pjo6ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0
YWxfY29tbW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21l
dHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpc19zY2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3Zl
Y3RvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZhY2Vmb3J3
YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9mYWNlZm9yd2FyZF9pbXBsCit7
CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgbiwgVCBpLCBUIG5yZWYp
CisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmZhY2Vmb3J3YXJkKG4sIGksIG5yZWYpOwor
ICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9mYWNlZm9yd2Fy
ZF9pbXBsPFQsIEFOR0xFX2VuYWJsZV9pZl90PEFOR0xFX2lzX3NjYWxhcjxUPjo6dmFsdWU+Pgor
eworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIG4sIFQgaSwgVCBucmVm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFOR0xFX2RvdChucmVmLCBpKSA8IFQoMCkgPyBuIDog
LW47CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBUIEFOR0xFX2ZhY2Vmb3J3YXJkKFQgbiwgVCBpLCBUIG5yZWYpCit7CisgICAgcmV0dXJuIEFO
R0xFX2ZhY2Vmb3J3YXJkX2ltcGw8VD46OmV4ZWMobiwgaSwgbnJlZik7Cit9OworKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19z
Y2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICBkb3Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmVmbGVjdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+
CitzdHJ1Y3QgQU5HTEVfcmVmbGVjdF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19J
TkxJTkUgVCBleGVjKFQgaSwgVCBuKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFsOjpyZWZs
ZWN0KGksIG4pOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdM
RV9yZWZsZWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2
YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgaSwgVCBu
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgLSBUKDIpICogQU5HTEVfZG90KG4sIGkpICogbjsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQg
QU5HTEVfcmVmbGVjdChUIGksIFQgbikKK3sKKyAgICByZXR1cm4gQU5HTEVfcmVmbGVjdF9pbXBs
PFQ+OjpleGVjKGksIG4pOworfTsKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVk
ZV9tZXRhbF9nZW9tZXRyaWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBpc192ZWN0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgZG90KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHJlZnJhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX3JlZnJhY3RfaW1w
bAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIGksIFQgbiwgQU5H
TEVfc2NhbGFyX29mX3Q8VD4gZXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFsOjpyZWZy
YWN0KGksIG4sIGV0YSk7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0
IEFOR0xFX3JlZnJhY3RfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8
VD46OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBp
LCBUIG4sIFQgZXRhKQorICAgIHsKKyAgICAgICAgYXV0byBkb3ROSSA9IG4gKiBpOworICAgICAg
ICBhdXRvIGsgPSBUKDEpIC0gZXRhICogZXRhICogKFQoMSkgLSBkb3ROSSAqIGRvdE5JKTsKKyAg
ICAgICAgaWYgKGsgPCBUKDApKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVCgwKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBl
dGEgKiBpIC0gKGV0YSAqIGRvdE5JICsgbWV0YWw6OnNxcnQoaykpICogbjsKKyAgICAgICAgfQor
ICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBB
TkdMRV9yZWZyYWN0KFQgaSwgVCBuLCBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBldGEpCit7CisgICAg
cmV0dXJuIEFOR0xFX3JlZnJhY3RfaW1wbDxUPjo6ZXhlYyhpLCBuLCBldGEpOworfTsKKykiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19zY2FsYXIo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaXNfbWF0cml4KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHNpZ24sCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX3NpZ25faW1wbAoreworICAgIHN0YXRpYyBB
TkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisgICAgeworICAgICAgICByZXR1cm4gbWV0
YWw6OnNpZ24oeCk7CisgICAgfQorfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVfc2lnbl9p
bXBsPGludD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBpbnQgZXhlYyhpbnQg
eCkKKyAgICB7CisgICAgICAgIHJldHVybiAoMCA8IHgpIC0gKHggPCAwKTsKKyAgICB9Cit9Owor
dGVtcGxhdGUgPGludCBOPgorc3RydWN0IEFOR0xFX3NpZ25faW1wbDxtZXRhbDo6dmVjPGludCwg
Tj4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxpbnQsIE4+
IGV4ZWMobWV0YWw6OnZlYzxpbnQsIE4+IHgpCisgICAgeworICAgICAgICBtZXRhbDo6dmVjPGlu
dCwgTj4gczsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHNbaV0gPSBBTkdMRV9zaWduX2ltcGw8aW50Pjo6ZXhlYyh4W2ldKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gczsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfc2lnbihUIHgpCit7CisgICAgcmV0dXJu
IEFOR0xFX3NpZ25faW1wbDxUPjo6ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluY2x1ZGVfbWV0YWxfY29tbW9uKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KGF0YW4sCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5T3ZlclgpCit7CisgICAgcmV0
dXJuIG1ldGFsOjphdGFuKHlPdmVyWCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgVCBBTkdMRV9hdGFuKFQgeSwgVCB4KQoreworICAgIHJldHVybiBtZXRh
bDo6YXRhbjIoeSwgeCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVf
bWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkZWdyZWVzLCBSIigKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2RlZ3JlZXMo
VCB4KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPig1Ny4yOTU3Nzk1MTMwODIzMikgKiB4
OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHJhZGlhbnMsIFIiKAordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfcmFkaWFucyhUIHgp
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDEuNzQ1MzI5MjUxOTk0MzI5NWUtMikgKiB4
OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG1vZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIFggQU5HTEVfbW9kKFggeCwgWSB5KQoreworICAgIHJldHVybiB4IC0geSAq
IG1ldGFsOjpmbG9vcih4IC8geSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwYWNrX2hhbGZf
MngxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorQU5HTEVfQUxXQVlTX0lOTElORSB1
aW50IEFOR0xFX3BhY2tfaGFsZl8yeDE2KGZsb2F0MiB2KQoreworICAgIHJldHVybiBhc190eXBl
PHVpbnQ+KGhhbGYyKHYpKTsKK30KKykiLCApCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHVu
cGFja19oYWxmXzJ4MTYsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK0FOR0xFX0FMV0FZ
U19JTkxJTkUgZmxvYXQyIEFOR0xFX3VucGFja19oYWxmXzJ4MTYodWludCB4KQoreworICAgIHJl
dHVybiBmbG9hdDIoYXNfdHlwZTxoYWxmMj4oeCkpOworfQorKSIsICkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUobWF0bXVsQXNzaWduLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQg
Tj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgTiwgTj4gJm9w
ZXJhdG9yKj0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgTiwgTj4gJmEsIG1ldGFsOjptYXRyaXg8
VCwgTiwgTj4gYikKK3sKKyAgICBhID0gYSAqIGI7CisgICAgcmV0dXJuIGE7Cit9CispIikKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdEluY3JlbWVudE1hdHJpeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93
cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVy
YXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBpbnQpCit7Cisg
ICAgYXV0byBiID0gYTsKKyAgICBhICs9IFQoMSk7CisgICAgcmV0dXJuIGI7Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2lnbigpKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShwcmVJbmNyZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVy
YXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhKQoreworICAgIGEg
Kz0gVCgxKTsKKyAgICByZXR1cm4gYTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
YWRkTWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHBvc3RE
ZWNyZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0
eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFs
OjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0b3ItLSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiAmYSwgaW50KQoreworICAgIGF1dG8gYiA9IGE7CisgICAgYSAtPSBUKDEp
OworICAgIHJldHVybiBiOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJNYXRy
aXhTY2FsYXJBc3NpZ24oKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocHJlRGVjcmVtZW50
TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6
Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmb3BlcmF0b3ItLSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiAmYSkKK3sKKyAgICBhIC09IFQoMSk7CisgICAgcmV0dXJuIGE7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk1hdHJpeFNjYWxhckFzc2lnbigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShuZWdhdGVNYXRyaXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0b3ItKG1l
dGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSkKK3sKKyAgICBmb3IgKHNpemVfdCBjb2wgPSAw
OyBjb2wgPCBDb2xzOyArK2NvbCkKKyAgICB7CisgICAgICAgIHRocmVhZCBhdXRvICZtQ29sID0g
bVtjb2xdOworICAgICAgICBtQ29sID0gLW1Db2w7CisgICAgfQorICAgIHJldHVybiBtOworfQor
KSIsICkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyQXNzaWduLCBS
IigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvcis9
KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgpCit7CisgICAgZm9y
IChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAgICAgICBtW2Nv
bF0gKz0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9CispIikKKworUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lO
TElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yKyhtZXRhbDo6bWF0cml4
PFQsIENvbHMsIFJvd3M+IG0sIFQgeCkKK3sKKyAgICBtICs9IHg7CisgICAgcmV0dXJuIG07Cit9
CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2lnbigpKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXJBc3NpZ24sCisgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50
IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+ICZvcGVyYXRvci09KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZt
LCBUIHgpCit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisg
ICAgeworICAgICAgICBtW2NvbF0gLT0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9CispIiwg
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJv
d3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3Bl
cmF0b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSwgVCB4KQoreworICAgIG0gLT0g
eDsKKyAgICByZXR1cm4gbTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ViTWF0
cml4U2NhbGFyQXNzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRpdk1hdHJpeFNj
YWxhckFzc2lnbkZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0
eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVh
ZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvci89KHRocmVhZCBtZXRhbDo6
bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgpCit7CisgICAgeCA9IFQoMSkgLyB4OworICAg
IGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsKKyAgICAgICAg
bVtjb2xdICo9IHg7CisgICAgfQorICAgIHJldHVybiBtOworfQorKSIsICkKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyQXNzaWduLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5H
TEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmb3Bl
cmF0b3IvPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmbSwgVCB4KQorewor
ICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsKKyAgICAg
ICAgbVtjb2xdIC89IHg7CisgICAgfQorICAgIHJldHVybiBtOworfQorKSIsICkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyRmFzdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorI2lmIF9fTUVUQUxfVkVSU0lPTl9fIDw9IDIyMAordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1h
dHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiBtLCBUIHgpCit7CisgICAgbSAvPSB4OworICAgIHJldHVybiBtOworfQorI2VuZGlmCispIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRpdk1hdHJpeFNjYWxhckFzc2lnbkZhc3QoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgUiIoCisjaWYgX19NRVRBTF9WRVJTSU9OX18gPD0gMjIwCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6
bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yLyhtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJv
d3M+IG0sIFQgeCkKK3sKKyAgICBtIC89IHg7CisgICAgcmV0dXJuIG07Cit9CisjZW5kaWYKKyki
LAorICAgICAgICAgICAgICAgICAgICAgICAgZGl2TWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKGNvbXBvbmVudFdpc2VEaXZpZGUsIFIiKAordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0
YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xz
LCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGIpCit7CisgICAgZm9yIChz
aXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAgICAgICBhW2NvbF0g
Lz0gYltjb2xdOworICAgIH0KKyAgICByZXR1cm4gYTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRShjb21wb25lbnRXaXNlRGl2aWRlQXNzaWduLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5H
TEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmb3Bl
cmF0b3IvPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmYSwgbWV0YWw6Om1h
dHJpeDxULCBDb2xzLCBSb3dzPiBiKQoreworICAgIGEgPSBhIC8gYjsKKyAgICByZXR1cm4gYTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlTXVsdGlwbHksIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBBTkdMRV9jb21wb25lbnRXaXNlTXVsdGlw
bHkobWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+IGIpCit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wp
CisgICAgeworICAgICAgICBhW2NvbF0gKj0gYltjb2xdOworICAgIH0KKyAgICByZXR1cm4gYTsK
K30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShvdXRlclByb2R1Y3QsIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIGludCBNLCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0
YWw6Om1hdHJpeDxULCBOLCBNPiBBTkdMRV9vdXRlclByb2R1Y3QobWV0YWw6OnZlYzxULCBNPiB1
LCBtZXRhbDo6dmVjPFQsIE4+IHYpCit7CisgICAgbWV0YWw6Om1hdHJpeDxULCBOLCBNPiBvOwor
ICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgTjsgKytuKQorICAgIHsKKyAgICAgICAgb1tuXSA9
IHUgKiB2W25dOworICAgIH0KKyAgICByZXR1cm4gbzsKK30KKykiKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRShpbnZlcnNlMiwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCAyLCAyPiBBTkdMRV9pbnZlcnNlKG1ldGFsOjpt
YXRyaXg8VCwgMiwgMj4gbSkKK3sKKyAgICBtZXRhbDo6bWF0cml4PFQsIDIsIDI+IGFkajsKKyAg
ICBhZGpbMF1bMF0gPSAgbVsxXVsxXTsKKyAgICBhZGpbMF1bMV0gPSAtbVswXVsxXTsKKyAgICBh
ZGpbMV1bMF0gPSAtbVsxXVswXTsKKyAgICBhZGpbMV1bMV0gPSAgbVswXVswXTsKKyAgICBUIGRl
dCA9IChhZGpbMF1bMF0gKiBtWzBdWzBdKSArIChhZGpbMF1bMV0gKiBtWzFdWzBdKTsKKyAgICBy
ZXR1cm4gYWRqICogKFQoMSkgLyBkZXQpOworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKGludmVyc2UzLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lO
TElORSBtZXRhbDo6bWF0cml4PFQsIDMsIDM+IEFOR0xFX2ludmVyc2UobWV0YWw6Om1hdHJpeDxU
LCAzLCAzPiBtKQoreworICAgIFQgYSA9IG1bMV1bMV0gKiBtWzJdWzJdIC0gbVsyXVsxXSAqIG1b
MV1bMl07CisgICAgVCBiID0gbVsxXVswXSAqIG1bMl1bMl07CisgICAgVCBjID0gbVsxXVsyXSAq
IG1bMl1bMF07CisgICAgVCBkID0gbVsxXVswXSAqIG1bMl1bMV07CisgICAgVCBkZXQgPSBtWzBd
WzBdICogKGEpIC0KKyAgICAgICAgICAgIG1bMF1bMV0gKiAoYiAtIGMpICsKKyAgICAgICAgICAg
IG1bMF1bMl0gKiAoZCAtIG1bMV1bMV0gKiBtWzJdWzBdKTsKKyAgICBkZXQgPSBUKDEpIC8gZGV0
OworICAgIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gbWludjsKKyAgICBtaW52WzBdWzBdID0gKGEp
ICogZGV0OworICAgIG1pbnZbMF1bMV0gPSAobVswXVsyXSAqIG1bMl1bMV0gLSBtWzBdWzFdICog
bVsyXVsyXSkgKiBkZXQ7CisgICAgbWludlswXVsyXSA9IChtWzBdWzFdICogbVsxXVsyXSAtIG1b
MF1bMl0gKiBtWzFdWzFdKSAqIGRldDsKKyAgICBtaW52WzFdWzBdID0gKGMgLSBiKSAqIGRldDsK
KyAgICBtaW52WzFdWzFdID0gKG1bMF1bMF0gKiBtWzJdWzJdIC0gbVswXVsyXSAqIG1bMl1bMF0p
ICogZGV0OworICAgIG1pbnZbMV1bMl0gPSAobVsxXVswXSAqIG1bMF1bMl0gLSBtWzBdWzBdICog
bVsxXVsyXSkgKiBkZXQ7CisgICAgbWludlsyXVswXSA9IChkIC0gbVsyXVswXSAqIG1bMV1bMV0p
ICogZGV0OworICAgIG1pbnZbMl1bMV0gPSAobVsyXVswXSAqIG1bMF1bMV0gLSBtWzBdWzBdICog
bVsyXVsxXSkgKiBkZXQ7CisgICAgbWludlsyXVsyXSA9IChtWzBdWzBdICogbVsxXVsxXSAtIG1b
MV1bMF0gKiBtWzBdWzFdKSAqIGRldDsKKyAgICByZXR1cm4gbWludjsKK30KKykiKQorCitQUk9H
UkFNX1BSRUxVREVfREVDTEFSRShpbnZlcnNlNCwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCA0LCA0PiBBTkdMRV9pbnZlcnNl
KG1ldGFsOjptYXRyaXg8VCwgNCwgND4gbSkKK3sKKyAgICBUIEEyMzIzID0gbVsyXVsyXSAqIG1b
M11bM10gLSBtWzJdWzNdICogbVszXVsyXTsKKyAgICBUIEExMzIzID0gbVsyXVsxXSAqIG1bM11b
M10gLSBtWzJdWzNdICogbVszXVsxXTsKKyAgICBUIEExMjIzID0gbVsyXVsxXSAqIG1bM11bMl0g
LSBtWzJdWzJdICogbVszXVsxXTsKKyAgICBUIEEwMzIzID0gbVsyXVswXSAqIG1bM11bM10gLSBt
WzJdWzNdICogbVszXVswXTsKKyAgICBUIEEwMjIzID0gbVsyXVswXSAqIG1bM11bMl0gLSBtWzJd
WzJdICogbVszXVswXTsKKyAgICBUIEEwMTIzID0gbVsyXVswXSAqIG1bM11bMV0gLSBtWzJdWzFd
ICogbVszXVswXTsKKyAgICBUIEEyMzEzID0gbVsxXVsyXSAqIG1bM11bM10gLSBtWzFdWzNdICog
bVszXVsyXTsKKyAgICBUIEExMzEzID0gbVsxXVsxXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVsz
XVsxXTsKKyAgICBUIEExMjEzID0gbVsxXVsxXSAqIG1bM11bMl0gLSBtWzFdWzJdICogbVszXVsx
XTsKKyAgICBUIEEyMzEyID0gbVsxXVsyXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsyXTsK
KyAgICBUIEExMzEyID0gbVsxXVsxXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsxXTsKKyAg
ICBUIEExMjEyID0gbVsxXVsxXSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVsxXTsKKyAgICBU
IEEwMzEzID0gbVsxXVswXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVswXTsKKyAgICBUIEEw
MjEzID0gbVsxXVswXSAqIG1bM11bMl0gLSBtWzFdWzJdICogbVszXVswXTsKKyAgICBUIEEwMzEy
ID0gbVsxXVswXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVswXTsKKyAgICBUIEEwMjEyID0g
bVsxXVswXSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVswXTsKKyAgICBUIEEwMTEzID0gbVsx
XVswXSAqIG1bM11bMV0gLSBtWzFdWzFdICogbVszXVswXTsKKyAgICBUIEEwMTEyID0gbVsxXVsw
XSAqIG1bMl1bMV0gLSBtWzFdWzFdICogbVsyXVswXTsKKyAgICBUIGEgPSBtWzFdWzFdICogQTIz
MjMgLSBtWzFdWzJdICogQTEzMjMgKyBtWzFdWzNdICogQTEyMjM7CisgICAgVCBiID0gbVsxXVsw
XSAqIEEyMzIzIC0gbVsxXVsyXSAqIEEwMzIzICsgbVsxXVszXSAqIEEwMjIzOworICAgIFQgYyA9
IG1bMV1bMF0gKiBBMTMyMyAtIG1bMV1bMV0gKiBBMDMyMyArIG1bMV1bM10gKiBBMDEyMzsKKyAg
ICBUIGQgPSBtWzFdWzBdICogQTEyMjMgLSBtWzFdWzFdICogQTAyMjMgKyBtWzFdWzJdICogQTAx
MjM7CisgICAgVCBkZXQgPSBtWzBdWzBdICogKCBhICkKKyAgICAgICAgICAtIG1bMF1bMV0gKiAo
IGIgKQorICAgICAgICAgICsgbVswXVsyXSAqICggYyApCisgICAgICAgICAgLSBtWzBdWzNdICog
KCBkICk7CisgICAgZGV0ID0gVCgxKSAvIGRldDsKKyAgICBtZXRhbDo6bWF0cml4PFQsIDQsIDQ+
IGltOworICAgIGltWzBdWzBdID0gZGV0ICogICAoIGEgKTsKKyAgICBpbVswXVsxXSA9IGRldCAq
IC0gKCBtWzBdWzFdICogQTIzMjMgLSBtWzBdWzJdICogQTEzMjMgKyBtWzBdWzNdICogQTEyMjMg
KTsKKyAgICBpbVswXVsyXSA9IGRldCAqICAgKCBtWzBdWzFdICogQTIzMTMgLSBtWzBdWzJdICog
QTEzMTMgKyBtWzBdWzNdICogQTEyMTMgKTsKKyAgICBpbVswXVszXSA9IGRldCAqIC0gKCBtWzBd
WzFdICogQTIzMTIgLSBtWzBdWzJdICogQTEzMTIgKyBtWzBdWzNdICogQTEyMTIgKTsKKyAgICBp
bVsxXVswXSA9IGRldCAqIC0gKCBiICk7CisgICAgaW1bMV1bMV0gPSBkZXQgKiAgICggbVswXVsw
XSAqIEEyMzIzIC0gbVswXVsyXSAqIEEwMzIzICsgbVswXVszXSAqIEEwMjIzICk7CisgICAgaW1b
MV1bMl0gPSBkZXQgKiAtICggbVswXVswXSAqIEEyMzEzIC0gbVswXVsyXSAqIEEwMzEzICsgbVsw
XVszXSAqIEEwMjEzICk7CisgICAgaW1bMV1bM10gPSBkZXQgKiAgICggbVswXVswXSAqIEEyMzEy
IC0gbVswXVsyXSAqIEEwMzEyICsgbVswXVszXSAqIEEwMjEyICk7CisgICAgaW1bMl1bMF0gPSBk
ZXQgKiAgICggYyApOworICAgIGltWzJdWzFdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMTMyMyAt
IG1bMF1bMV0gKiBBMDMyMyArIG1bMF1bM10gKiBBMDEyMyApOworICAgIGltWzJdWzJdID0gZGV0
ICogICAoIG1bMF1bMF0gKiBBMTMxMyAtIG1bMF1bMV0gKiBBMDMxMyArIG1bMF1bM10gKiBBMDEx
MyApOworICAgIGltWzJdWzNdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMTMxMiAtIG1bMF1bMV0g
KiBBMDMxMiArIG1bMF1bM10gKiBBMDExMiApOworICAgIGltWzNdWzBdID0gZGV0ICogLSAoIGQg
KTsKKyAgICBpbVszXVsxXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTEyMjMgLSBtWzBdWzFdICog
QTAyMjMgKyBtWzBdWzJdICogQTAxMjMgKTsKKyAgICBpbVszXVsyXSA9IGRldCAqIC0gKCBtWzBd
WzBdICogQTEyMTMgLSBtWzBdWzFdICogQTAyMTMgKyBtWzBdWzJdICogQTAxMTMgKTsKKyAgICBp
bVszXVszXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTEyMTIgLSBtWzBdWzFdICogQTAyMTIgKyBt
WzBdWzJdICogQTAxMTIgKTsKKyAgICByZXR1cm4gaW07Cit9CispIikKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoZXF1YWxBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBib29sIEFO
R0xFX2VxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJyYXk8VCwgTj4gdikKK3sK
KyAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgICBpZiAodVtpXSAhPSB2
W2ldKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CispIikKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUobm90RXF1YWxBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBi
b29sIEFOR0xFX25vdEVxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJyYXk8VCwg
Tj4gdikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKHUsdik7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVxdWFsQXJyYXkoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
ZXF1YWxWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9lcXVhbChtZXRh
bDo6dmVjPFQsIE4+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKK3sKKyAgICByZXR1cm4gbWV0YWw6
OmFsbCh1ID09IHYpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21l
dGFsX21hdGgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxNYXRyaXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQywgaW50
IFI+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfZXF1YWwobWV0YWw6Om1hdHJpeDxU
LCBDLCBSPiBhLCBtZXRhbDo6bWF0cml4PFQsIEMsIFI+IGIpCit7CisgICAgZm9yIChpbnQgYyA9
IDA7IGMgPCBDOyArK2MpCisgICAgeworICAgICAgICBpZiAoIUFOR0xFX2VxdWFsKGFbY10sIGJb
Y10pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVx
dWFsVmVjdG9yKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vdEVxdWFsVmVjdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90RXF1YWwobWV0YWw6OnZlYzxULCBO
PiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCit7CisgICAgcmV0dXJuICFBTkdMRV9lcXVhbCh1LCB2
KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxWZWN0b3IoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUobm90RXF1YWxTdHJ1Y3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBib29s
IEFOR0xFX25vdEVxdWFsU3RydWN0KHRocmVhZCBjb25zdCBUICZhLCB0aHJlYWQgY29uc3QgVCAm
YikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKGEsIGIpOworfQorKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXF1
YWxNYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodmVjdG9yRWxlbVJlZiwgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitzdHJ1Y3QgQU5HTEVfVmVjdG9yRWxlbVJl
ZgoreworICAgIHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZtVmVjOworICAgIFQgbVJlZjsKKyAg
ICBjb25zdCBpbnQgbUluZGV4OworICAgIH5BTkdMRV9WZWN0b3JFbGVtUmVmKCkgeyBtVmVjW21J
bmRleF0gPSBtUmVmOyB9CisgICAgQU5HTEVfVmVjdG9yRWxlbVJlZih0aHJlYWQgbWV0YWw6OnZl
YzxULCBOPiAmdmVjLCBpbnQgaW5kZXgpCisgICAgICAgIDogbVZlYyh2ZWMpLCBtUmVmKHZlY1tp
bmRleF0pLCBtSW5kZXgoaW5kZXgpCisgICAge30KKyAgICBvcGVyYXRvciB0aHJlYWQgVCAmKCkg
eyByZXR1cm4gbVJlZjsgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPiBBTkdMRV9lbGVtX3JlZih0
aHJlYWQgbWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaW5kZXgpCit7CisgICAgcmV0dXJuIEFO
R0xFX1ZlY3RvckVsZW1SZWY8VCwgTj4odmVjLCBpbmRleCk7Cit9CispIikKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUoc3dpenpsZVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBWTiwgaW50IFNOPgorc3RydWN0IEFOR0xFX1N3aXp6
bGVSZWYKK3sKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxULCBWTj4gJm1WZWM7CisgICAgbWV0YWw6
OnZlYzxULCBTTj4gbVJlZjsKKyAgICBpbnQgbUluZGljZXNbU05dOworICAgIH5BTkdMRV9Td2l6
emxlUmVmKCkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU047ICsraSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGogPSBtSW5kaWNlc1tpXTsKKyAgICAgICAg
ICAgIG1WZWNbal0gPSBtUmVmW2ldOworICAgICAgICB9CisgICAgfQorICAgIEFOR0xFX1N3aXp6
bGVSZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgdGhyZWFkIGNvbnN0IGludCAqaW5k
aWNlcykKKyAgICAgICAgOiBtVmVjKHZlYykKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgU047ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGogPSBpbmRp
Y2VzW2ldOworICAgICAgICAgICAgbUluZGljZXNbaV0gPSBqOworICAgICAgICAgICAgbVJlZltp
XSA9IG1WZWNbal07CisgICAgICAgIH0KKyAgICB9CisgICAgb3BlcmF0b3IgdGhyZWFkIG1ldGFs
Ojp2ZWM8VCwgU04+ICYoKSB7IHJldHVybiBtUmVmOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1l
IFQsIGludCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9WZWN0b3JFbGVtUmVmPFQsIE4+
IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCkK
K3sKKyAgICByZXR1cm4gQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPih2ZWMsIGluZGV4KTsKK30K
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVf
U3dpenpsZVJlZjxULCBOLCAyPiBBTkdMRV9zd2l6emxlX3JlZih0aHJlYWQgbWV0YWw6OnZlYzxU
LCBOPiAmdmVjLCBpbnQgaTAsIGludCBpMSkKK3sKKyAgICBjb25zdCBpbnQgaXNbXSA9IHsgaTAs
IGkxIH07CisgICAgcmV0dXJuIEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMj4odmVjLCBpcyk7Cit9
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xF
X1N3aXp6bGVSZWY8VCwgTiwgMz4gQU5HTEVfc3dpenpsZV9yZWYodGhyZWFkIG1ldGFsOjp2ZWM8
VCwgTj4gJnZlYywgaW50IGkwLCBpbnQgaTEsIGludCBpMikKK3sKKyAgICBjb25zdCBpbnQgaXNb
XSA9IHsgaTAsIGkxLCBpMiB9OworICAgIHJldHVybiBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDM+
KHZlYywgaXMpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorQU5HTEVfQUxXQVlT
X0lOTElORSBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDQ+IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVh
ZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCwgaW50IGkxLCBpbnQgaTIsIGludCBpMykK
K3sKKyAgICBjb25zdCBpbnQgaXNbXSA9IHsgaTAsIGkxLCBpMiwgaTMgfTsKKyAgICByZXR1cm4g
QU5HTEVfU3dpenpsZVJlZjxULCBOLCA0Pih2ZWMsIGlzKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdmVjdG9yRWxlbVJlZigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShv
dXQsIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfT3V0Cit7CisgICAg
VCBtVGVtcDsKKyAgICB0aHJlYWQgVCAmbURlc3Q7CisgICAgfkFOR0xFX091dCgpIHsgbURlc3Qg
PSBtVGVtcDsgfQorICAgIEFOR0xFX091dCh0aHJlYWQgVCAmZGVzdCkKKyAgICAgICAgOiBtRGVz
dChkZXN0KQorICAgIHt9CisgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsgcmV0dXJuIG1UZW1w
OyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xF
X091dDxUPiBBTkdMRV9vdXQodGhyZWFkIFQgJmRlc3QpCit7CisgICAgcmV0dXJuIEFOR0xFX091
dDxUPihkZXN0KTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShpbm91dCwgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9Jbk91dAoreworICAgIFQgbVRl
bXA7CisgICAgdGhyZWFkIFQgJm1EZXN0OworICAgIH5BTkdMRV9Jbk91dCgpIHsgbURlc3QgPSBt
VGVtcDsgfQorICAgIEFOR0xFX0luT3V0KHRocmVhZCBUICZkZXN0KQorICAgICAgICA6IG1UZW1w
KGRlc3QpLCBtRGVzdChkZXN0KQorICAgIHt9CisgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsg
cmV0dXJuIG1UZW1wOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIEFOR0xFX0luT3V0PFQ+IEFOR0xFX2lub3V0KHRocmVhZCBUICZkZXN0KQoreworICAg
IHJldHVybiBBTkdMRV9Jbk91dDxUPihkZXN0KTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVf
REVDTEFSRShmbGF0dGVuQXJyYXksIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
QU5HTEVfZmxhdHRlbl9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgdGhy
ZWFkIFQgKmV4ZWModGhyZWFkIFQgJngpCisgICAgeworICAgICAgICByZXR1cm4gJng7CisgICAg
fQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KK3N0cnVjdCBBTkdMRV9mbGF0
dGVuX2ltcGw8bWV0YWw6OmFycmF5PFQsIE4+PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gZXhlYyh0aHJlYWQgbWV0YWw6OmFycmF5PFQsIE4+ICZhcnIpIC0+IFQKKyAg
ICB7CisgICAgICAgIHJldHVybiBBTkdMRV9mbGF0dGVuX2ltcGw8VD46OmV4ZWMoYXJyWzBdKTsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX2ZsYXR0ZW4odGhyZWFkIG1ldGFsOjphcnJheTxULCBOPiAmYXJy
KSAtPiBUCit7CisgICAgcmV0dXJuIEFOR0xFX2ZsYXR0ZW5faW1wbDxUPjo6ZXhlYyhhcnJbMF0p
OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGNhc3RWZWN0b3IsIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIGludCBOMSwgaW50IE4yPgorc3RydWN0IEFOR0xFX2Nhc3RWZWN0
b3Ige307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitzdHJ1Y3QgQU5HTEVfY2FzdFZl
Y3RvcjxULCBOLCBOPgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2
ZWM8VCwgTj4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiBjb25zdCAmdikKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2OworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVj
dCBBTkdMRV9jYXN0VmVjdG9yPFQsIDIsIDM+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19J
TkxJTkUgbWV0YWw6OnZlYzxULCAyPiBleGVjKHRocmVhZCBtZXRhbDo6dmVjPFQsIDM+IGNvbnN0
ICZ2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHYueHk7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorc3RydWN0IEFOR0xFX2Nhc3RWZWN0b3I8VCwgMiwgND4KK3sKKyAgICBzdGF0
aWMgQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIDI+IGV4ZWModGhyZWFkIG1ldGFs
Ojp2ZWM8VCwgND4gY29uc3QgJnYpCisgICAgeworICAgICAgICByZXR1cm4gdi54eTsKKyAgICB9
Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfY2FzdFZlY3RvcjxULCAz
LCA0PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2ZWM8VCwgMz4g
ZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCA0PiBjb25zdCAmdikKKyAgICB7CisgICAgICAgIHJl
dHVybiBhc190eXBlPG1ldGFsOjp2ZWM8VCwgMz4+KHYpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8
aW50IE4xLCBpbnQgTjIsIHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2
ZWM8VCwgTjE+IEFOR0xFX2Nhc3QodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTjI+IGNvbnN0ICZ2KQor
eworICAgIHJldHVybiBBTkdMRV9jYXN0VmVjdG9yPFQsIE4xLCBOMj46OmV4ZWModik7Cit9Cisp
IikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoY2FzdE1hdHJpeCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDMSwgaW50IFIxLCBpbnQg
QzIsIGludCBSMiwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9jYXN0TWF0
cml4Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBD
MSwgUjE+IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbTIpCisg
ICAgeworICAgICAgICBtZXRhbDo6bWF0cml4PFQsIEMxLCBSMT4gbTE7CisgICAgICAgIGNvbnN0
IGludCBNaW5DID0gQzEgPD0gQzIgPyBDMSA6IEMyOworICAgICAgICBjb25zdCBpbnQgTWluUiA9
IFIxIDw9IFIyID8gUjEgOiBSMjsKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBNaW5DOyAr
K2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgTWluUjsgKyty
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gbTJbY11bcl07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCByID0gUjI7IHIgPCBSMTsgKytyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gYyA9PSByID8gVCgxKSA6
IFQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgYyA9IEMy
OyBjIDwgQzE7ICsrYykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIg
PCBSMTsgKytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gYyA9
PSByID8gVCgxKSA6IFQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG0xOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IEMxLCBpbnQgUjEs
IGludCBDMiwgaW50IFIyPgorc3RydWN0IEFOR0xFX2Nhc3RNYXRyaXg8VCwgQzEsIFIxLCBDMiwg
UjIsIEFOR0xFX2VuYWJsZV9pZl90PChDMSA8PSBDMiAmJiBSMSA8PSBSMik+PgoreworICAgIHN0
YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBleGVjKHRo
cmVhZCBtZXRhbDo6bWF0cml4PFQsIEMyLCBSMj4gY29uc3QgJm0yKQorICAgIHsKKyAgICAgICAg
bWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IG0xOworICAgICAgICBmb3IgKHNpemVfdCBjID0gMDsg
YyA8IEMxOyArK2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIG0xW2NdID0gQU5HTEVfY2FzdDxS
MT4obTJbY10pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtMTsKKyAgICB9Cit9OwordGVt
cGxhdGUgPGludCBDMSwgaW50IFIxLCBpbnQgQzIsIGludCBSMiwgdHlwZW5hbWUgVD4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IEFOR0xFX2Nhc3QodGhyZWFk
IG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbSkKK3sKKyAgICByZXR1cm4gQU5HTEVf
Y2FzdE1hdHJpeDxULCBDMSwgUjEsIEMyLCBSMj46OmV4ZWMobSk7Cit9OworKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c3RWZWN0b3IoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGVuc29yLCBSIigKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCBzaXplX3QuLi4gRFM+CitzdHJ1Y3QgQU5HTEVfdGVuc29yX3RyYWl0
czsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRD4KK3N0cnVjdCBBTkdMRV90ZW5zb3Jf
dHJhaXRzPFQsIEQ+Cit7CisgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKyAg
ICB1c2luZyBpbm5lcl90eXBlID0gVDsKKyAgICB1c2luZyBvdXRlcl90eXBlID0gaW5uZXJfdHlw
ZVtEXTsKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEQsIHNpemVfdC4uLiBEUz4K
K3N0cnVjdCBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIEQsIERTLi4uPgoreworICAgIGVudW0gOiBz
aXplX3QgeyBvdXRlcl9kaW0gPSBEIH07CisgICAgdXNpbmcgaW5uZXJfdHlwZSA9IHR5cGVuYW1l
IEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+OjpvdXRlcl90eXBlOworICAgIHVzaW5nIG91
dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworfTsKK3RlbXBsYXRlIDxzaXplX3QgRCwgdHlwZW5h
bWUgdmFsdWVfdHlwZV8sIHR5cGVuYW1lIGlubmVyX3R5cGVfPgorc3RydWN0IEFOR0xFX3RlbnNv
cl9pbXBsCit7CisgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKyAgICB1c2lu
ZyB2YWx1ZV90eXBlID0gdmFsdWVfdHlwZV87CisgICAgdXNpbmcgaW5uZXJfdHlwZSA9IGlubmVy
X3R5cGVfOworICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworICAgIG91dGVy
X3R5cGUgX2RhdGE7CisgICAgQU5HTEVfQUxXQVlTX0lOTElORSBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG91dGVyX2RpbTsgfQorICAgIEFOR0xFX0FMV0FZU19JTkxJTkUgaW5uZXJfdHlw
ZSAmb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gX2RhdGFbaV07IH0KKyAgICBBTkdMRV9B
TFdBWVNfSU5MSU5FIGNvbnN0IGlubmVyX3R5cGUgJm9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0
IHsgcmV0dXJuIF9kYXRhW2ldOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdC4u
LiBEUz4KK3VzaW5nIEFOR0xFX3RlbnNvciA9IEFOR0xFX3RlbnNvcl9pbXBsPAorICAgIEFOR0xF
X3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+OjpvdXRlcl9kaW0sCisgICAgVCwKKyAgICB0eXBlbmFt
ZSBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6aW5uZXJfdHlwZT47CispIikKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUoZ3JhZGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBS
IigKK3RlbXBsYXRlIDxpbnQgTj4KK3N0cnVjdCBBTkdMRV9ncmFkaWVudF90cmFpdHM7Cit0ZW1w
bGF0ZSA8Pgorc3RydWN0IEFOR0xFX2dyYWRpZW50X3RyYWl0czwyPiB7IHVzaW5nIHR5cGUgPSBt
ZXRhbDo6Z3JhZGllbnQyZDsgfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVfZ3JhZGllbnRf
dHJhaXRzPDM+IHsgdXNpbmcgdHlwZSA9IG1ldGFsOjpncmFkaWVudDNkOyB9OworCit0ZW1wbGF0
ZSA8aW50IE4+Cit1c2luZyBBTkdMRV9ncmFkaWVudCA9IHR5cGVuYW1lIEFOR0xFX2dyYWRpZW50
X3RyYWl0czxOPjo6dHlwZTsKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
RW52LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3N0cnVjdCBBTkdMRV9UZXh0dXJlRW52Cit7CisgICAgdGhyZWFkIFQgKnRleHR1cmU7CisgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyICpzYW1wbGVyOworfTsKKykiKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRShmdW5jdGlvbkNvbnN0YW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorI2RlZmluZSBBTkdMRV9TQU1QTEVfQ09NUEFSRV9HUkFESUVOVF9JTkRFWCAwCisjZGVmaW5l
IEFOR0xFX1NBTVBMRV9DT01QQVJFX0xPRF9JTkRFWCAgICAgIDEKKyNkZWZpbmUgQU5HTEVfUkFT
VEVSSVpBVElPTl9ESVNDQVJEX0lOREVYICAgMgorCitjb25zdGFudCBib29sIEFOR0xFX1VzZVNh
bXBsZUNvbXBhcmVHcmFkaWVudCBbW2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1NBTVBMRV9DT01Q
QVJFX0dSQURJRU5UX0lOREVYKV1dOworY29uc3RhbnQgYm9vbCBBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlTG9kICAgICAgW1tmdW5jdGlvbl9jb25zdGFudChBTkdMRV9TQU1QTEVfQ09NUEFSRV9MT0Rf
SU5ERVgpXV07Citjb25zdGFudCBib29sIEFOR0xFX1Jhc3Rlcml6YXRpb25EaXNjYXJkICAgICBb
W2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1JBU1RFUklaQVRJT05fRElTQ0FSRF9JTkRFWCldXTsK
KykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXhlbEZldGNoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleGVsRmV0Y2goZW52LCAuLi4pIEFOR0xF
X3RleGVsRmV0Y2hfaW1wbCgqZW52LnRleHR1cmUsIF9fVkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXhlbEZl
dGNoX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFs
OjppbnQyIGNvbnN0ICZjb29yZCwKKyAgICB1aW50IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0
dXJlLnJlYWQodWludDIoY29vcmQpLCBsZXZlbCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
ZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hfaW1wbCgK
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29u
c3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1
aW50Myhjb29yZCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaF9pbXBsKAorICAgIHRocmVhZCBtZXRh
bDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6aW50MyBj
b25zdCAmY29vcmQsCisgICAgdWludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5yZWFk
KHVpbnQyKGNvb3JkLnh5KSwgdWludChjb29yZC56KSwgbGV2ZWwpOworfQorKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHRleGVsRmV0Y2hPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUg
QU5HTEVfdGV4ZWxGZXRjaE9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldF9p
bXBsKCplbnYudGV4dHVyZSwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1w
bCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDIg
Y29uc3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwsCisgICAgdGhyZWFkIG1ldGFsOjppbnQyIGNv
bnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZCArIG9m
ZnNldCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaE9mZnNldF9pbXBsKAorICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmY29vcmQs
CisgICAgdWludCBsZXZlbCwKKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3QgJm9mZnNldCkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5yZWFkKHVpbnQzKGNvb3JkICsgb2Zmc2V0KSwgbGV2ZWwp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXhlbEZldGNoT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRf
YXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZjb29yZCwK
KyAgICB1aW50IGxldmVsLAorICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQor
eworICAgIHJldHVybiB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQueHkgKyBvZmZzZXQpLCB1aW50
KGNvb3JkLnopLCBsZXZlbCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlKGVudiwgLi4uKSBBTkdMRV90
ZXh0dXJlX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKSIs
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVfZ2VuZXJpY19mbG9hdDIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDIgY29uc3QgJmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9mbG9hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgZmxvYXQg
YmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFs
OjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNfZmxvYXQzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKK3sKKyAgICByZXR1cm4g
dGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZ2Vu
ZXJpY19mbG9hdDNfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9k
ZXB0aDJkX2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSk7
Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aDJkX2Zsb2F0M19mbG9hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxU
PiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisg
ICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRhbDo6Ymlh
cyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aDJkYXJyYXlfZmxvYXQ0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpk
ZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQpCit7Cisg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIHVpbnQo
bWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgY29vcmQudyk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9k
ZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgY29tcGFyZSkKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eXosIHVpbnQobWV0YWw6
OnJvdW5kKGNvb3JkLncpKSwgY29tcGFyZSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aGN1
YmVfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAg
dGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZj
b29yZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6KTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BS
RUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoY3Vi
ZTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6
OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1l
dGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1w
bGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29y
ZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQo
bWV0YWw6OnJvdW5kKGNvb3JkLnopKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV90ZXh0dXJlMmRh
cnJheV9mbG9hdDNfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1w
bCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSks
IG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3RleHR1cmUyZGFycmF5
X2Zsb2F0NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRo
cmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRh
bDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25z
dCAmY29vcmQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3Rl
eHR1cmUyZGFycmF5X2Zsb2F0NF9mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4
dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJl
LAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCB1aW50KG1ldGFsOjpyb3VuZChj
b29yZC53KSksIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURMb2Qs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTFETG9k
KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMURMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2Ft
cGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRExvZF9pbXBsKAorICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgZmxvYXQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxl
dmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTFEUHJvaiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlMURQcm9qKGVudiwgLi4uKSBBTkdMRV90
ZXh0dXJlMURQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19f
KQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlMURQcm9qX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUs
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzID0gMCkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueC9jb29yZC55LCBtZXRhbDo6Ymlh
cyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVy
ZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisg
ICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAw
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54L2Nvb3JkLncs
IG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURQcm9qTG9kLAor
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUxRFByb2pM
b2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1wbCgqZW52LnRleHR1cmUsICpl
bnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1wbCgKKyAg
ICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorICAg
IGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54L2Nvb3JkLnksIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlMURQcm9q
TG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0
ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQueC9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlMkQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUg
QU5HTEVfdGV4dHVyZTJEKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRF9pbXBsKAorICAg
IHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQpCit7Cisg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkKTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZTJEX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0
ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlMkRfaW1w
bCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3Jk
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmUyRF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlMkRMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5H
TEVfdGV4dHVyZTJETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRMb2RfaW1wbCgqZW52LnRl
eHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
ZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRExvZF9pbXBs
KAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQs
CisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMkRQ
cm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUy
RFByb2ooZW52LCAuLi4pIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgqZW52LnRleHR1cmUsICpl
bnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgKKyAgICB0
aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZs
b2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eS9jb29yZC56LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pf
aW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNv
b3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUodGV4dHVyZTJEUHJvakxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2Rl
ZmluZSBBTkdMRV90ZXh0dXJlMkRQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRQcm9q
TG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlMkRQcm9qTG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmxldmVsKGxldmVs
KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRh
bDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlM0RMb2QsCisgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNETG9kKGVudiwgLi4u
KSBBTkdMRV90ZXh0dXJlM0RMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19W
QV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmUzRExvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0
ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7Cisg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2
ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlM0RQcm9qLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUzRFByb2ooZW52LCAuLi4pIEFOR0xFX3Rl
eHR1cmUzRFByb2pfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18p
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUzRFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmJp
YXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFByb2pMb2QsCisgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNEUHJvakxvZChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZTNEUHJvakxvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVy
LCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTNEUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2
ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29y
ZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlQ3ViZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3ViZShl
bnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxl
ciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlX2ltcGwoCisgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAor
ICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKK3sKKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4
dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZV9pbXBsKAor
ICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBj
b25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisg
ICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlQ3ViZUxvZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3ViZUxv
ZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYu
c2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlTG9kX2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9h
dCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1l
dGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJlUHJvaiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3ViZVByb2oo
ZW52LCAuLi4pIEFOR0xFX3RleHR1cmVDdWJlUHJval9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5z
YW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUN1YmVQcm9qX2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9h
dCBiaWFzID0gMCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQu
eHl6L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
Q3ViZVByb2pMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVf
dGV4dHVyZUN1YmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlQ3ViZVByb2pMb2RfaW1w
bCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVD
dWJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorI2RlZmluZSBBTkdMRV90ZXh0dXJlR3JhZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUdyYWRf
aW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUodGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmUsIGludCBOPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGZsb2F0LCBOPiBjb25zdCAmY29vcmQsCisgICAg
dGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRh
bDo6dmVjPGZsb2F0LCBOPiBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQZHgsIGRQZHkpKTsKK30KKyki
LAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVH
cmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUs
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25z
dCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5k
KGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpOworfQorKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRocmVhZCBUZXh0
dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQ
ZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50
KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zsb2F0
MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKyAgICB0aHJl
YWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0MiBjb25zdCAmZFBkeSkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdy
YWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2Ft
cGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFkaWVudDJk
KGRQZHgsIGRQZHkpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSkpID4gY29vcmQueik7CisgICAgfQorfQorKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUdyYWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdy
YWRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZF9hcnJh
eTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZk
UGR5KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1w
bGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBjb29yZC53LCBtZXRh
bDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQu
eHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwg
ZFBkeSkpID4gY29vcmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdy
YWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zs
b2F0NF9mbG9hdDNfZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3Jh
ZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGhjdWJlPFQ+ICZ0ZXh0dXJlLAorICAgIHRo
cmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCit7CisgICAgaWYgKEFOR0xF
X1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5eiwgY29vcmQu
dywgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxl
ciwgY29vcmQueHl6LCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkpKSA+IGNvb3JkLncp
OworICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFu
dHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxv
YXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRo
cmVhZCBtZXRhbDo6dGV4dHVyZWN1YmU8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQsIG1ldGFsOjpncmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpOworfQorKSIs
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorI2RlZmluZSBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZUdyYWRPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18p
CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zs
b2F0Tl9pbnROLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZSwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJl
YWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8
ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxmbG9hdCwgTj4g
Y29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR5
LAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGludCwgTj4gY29uc3QgJm9mZnNldCkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQ
ZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBncmFk
aWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNf
ZmxvYXQyX2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlR3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRo
cmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhyZWFkIG1ldGFs
OjppbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVu
dDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlR3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
R3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25z
dCAmZFBkeSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5k
KGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0
Ml9mbG9hdDJfaW50MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgbWV0YWw6
OmludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdy
YWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2Ft
cGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFkaWVudDJk
KGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBt
ZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLnopOworICAgIH0K
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQy
X2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZE9mZnNl
dF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZk
UGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorICAgIHRocmVhZCBt
ZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlR3JhZGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVy
ZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29v
cmQueikpLCBjb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQu
eikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLncpOwor
ICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoY3ViZV9mbG9hdDRfZmxv
YXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZE9m
ZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGhjdWJlPFQ+ICZ0ZXh0dXJlLAorICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQ
ZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisgICAgdGhyZWFkIG1l
dGFsOjppbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSwgb2Zmc2V0
KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfdGV4dHVyZWN1YmVf
ZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4
dHVyZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmVjdWJlPFQ+ICZ0
ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDMgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisg
ICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkp
LCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZE9m
ZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVMb2QoZW52LCAuLi4pIEFO
R0xFX3RleHR1cmVMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdT
X18pCispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUxvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJl
ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAg
ICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwo
bGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBs
ZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFs
OjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
TG9kKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfZGVwdGgyZF9mbG9h
dDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAgICB0aHJl
YWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwK
KyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUxvZCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21w
YXJlKHNhbXBsZXIsIGNvb3JkLnh5LCBjb29yZC56LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmxldmVsKGxldmVsKSkgPiBjb29y
ZC56KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29u
c3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTG9kKCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAgdGhyZWFkIG1ldGFs
Ojp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwK
KyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmxldmVsKGxldmVs
KSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2QoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAgICB0aHJlYWQgbWV0
YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3Jk
LAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVy
LCBjb29yZC54eXosIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgbWV0YWw6OmxldmVsKGxl
dmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2QoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZE9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0KGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9f
VkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAor
ICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCwK
KyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZUxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhyZWFkIGlu
dDMgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRf
aW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQz
IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAm
b2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxl
ciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVy
ZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkg
PiBjb29yZC56KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQg
bWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNv
b3JkLAorICAgIGZsb2F0IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFs
Ojpyb3VuZChjb29yZC56KSksIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsLAorICAg
IHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
KHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpLCBtZXRhbDo6
bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlT2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVPZmZzZXQoZW52LCAuLi4pIEFO
R0xFX3RleHR1cmVPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9B
UkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhy
ZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG9mZnNldCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZs
b2F0MiBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBm
bG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwg
bWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgK
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIg
Y29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhy
ZWFkIGludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgb2Zmc2V0KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgZmxv
YXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0LAorICAgIGZs
b2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1
cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVh
ZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBvZmZzZXQpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBmbG9h
dDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQsCisgICAgZmxv
YXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1l
dGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhy
ZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0
aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorICAgIHRo
cmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisgICAg
dGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmJpYXMoYmlhcyksIG9m
ZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2osCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2ooZW52LCAuLi4pIEFOR0xFX3RleHR1
cmVQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlUHJval9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRo
cmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcyA9IDApCit7CisgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpiaWFzKGJpYXMp
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZVByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6
YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0
dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBi
aWFzID0gMCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6
L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJv
akdyYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVy
ZVByb2pHcmFkKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pH
cmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHkpCit7Cisg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFs
OjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQ
cm9qR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5KQor
eworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBt
ZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0
aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3Qg
JmRQZHkpCit7CisgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNh
bXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3JkLnovY29vcmQudywgbWV0YWw6OmdyYWRpZW50
MmQoZFBkeCwgZFBkeSkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncs
IG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSA+IGNvb3JkLnovY29vcmQudyk7CisgICAg
fQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0M19mbG9h
dDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBsKAorICAg
IHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAm
Y29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
KHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQzZChkUGR4LCBkUGR5
KSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0
KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUs
ICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFk
T2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25z
dCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6Z3JhZGllbnQy
ZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldF9pbXBsKAor
ICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBj
b25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisg
ICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKK3sKKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6
OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9p
bnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1w
bCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAm
b2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShz
YW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpncmFkaWVu
dDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
L2Nvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpID4gY29vcmQu
ei9jb29yZC53KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakdyYWRP
ZmZzZXQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkT2Zmc2V0
X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRl
eHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZkUGR5LAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGll
bnQzZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qTG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xF
X3RleHR1cmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKCplbnYu
dGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
UHJvakxvZF9nZW5lcmljX2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZVByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pMb2QoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kX2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBm
bG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQu
eHkvY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVQcm9qTG9kKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIo
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIGlm
IChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHkvY29vcmQu
dywgY29vcmQuei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSA+IGNvb3JkLnov
Y29vcmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
bkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pMb2QoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RfdGV4dHVyZTNkX2Zsb2F0
NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RfaW1wbCgKKyAgICB0
aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNv
b3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qTG9kKCkpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90
ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZB
X0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
LAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9m
ZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZl
bCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJl
LnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBv
ZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6
ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0
IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgaWYgKEFOR0xF
X1VzZVNhbXBsZUNvbXBhcmVMb2QpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBjb29y
ZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KSA+
IGNvb3JkLnovY29vcmQudyk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRh
bDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25z
dCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhyZWFkIGludDMgY29uc3QgJm9mZnNl
dCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3Jk
LncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qT2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9q
T2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBsKCplbnYudGV4dHVy
ZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1
cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pPZmZzZXRfaW1w
bCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3Jk
LAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQsCisgICAgZmxvYXQgYmlhcyA9IDApCit7
CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1l
dGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBs
KAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzID0gMCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0
YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0X2ltcGwoCisgICAg
dGhyZWFkIG1ldGFsOjp0ZXh0dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZj
b29yZCwKKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0LAorICAgIGZsb2F0IGJpYXMgPSAw
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQu
dywgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVNp
emUsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVNp
emUoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVTaXplX2ltcGwoKmVudi50ZXh0dXJlLCBfX1ZBX0FS
R1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIGludDIodGV4dHVyZS5nZXRfd2lkdGgo
dWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZVNpemVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAg
ICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgodWludChs
ZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9kZXB0
aCh1aW50KGxldmVsKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6
ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJu
IGludDModGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQo
dWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9hcnJheV9zaXplKCkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9p
bXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAg
IGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1aW50KGxl
dmVsKSksIHRleHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2FycmF5
X3NpemUoKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gUmV0dXJuZWQgTmFtZSBpcyB2YWxpZCBm
b3IgYXMgbG9uZyBhcyBgYnVmZmVyYCBpcyBzdGlsbCBhbGl2ZS4KKy8vIFJldHVybnMgZmFsc2Ug
aWYgbm8gdGVtcGxhdGUgYXJncyBleGlzdC4KKy8vIFJldHVybnMgZmFsc2UgaWYgYnVmZmVyIGlz
IG5vdCBsYXJnZSBlbm91Z2guCisvLworLy8gRXhhbXBsZToKKy8vICAiZm9vPDEsMj4iIC0tPiAi
Zm9vPD4iCitzdGF0aWMgc3RkOjpwYWlyPE5hbWUsIGJvb2w+IE1hc2tUZW1wbGF0ZUFyZ3MoY29u
c3QgTmFtZSAmbmFtZSwgc2l6ZV90IGJ1ZmZlclNpemUsIGNoYXIgKmJ1ZmZlcikKK3sKKyAgICBj
b25zdCBjaGFyICpiZWdpbiA9IG5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKyAgICBjb25zdCBjaGFy
ICplbmQgICA9IHN0cmNocihiZWdpbiwgJzwnKTsKKyAgICBpZiAoIWVuZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB7e30sIGZhbHNlfTsKKyAgICB9CisgICAgc2l6ZV90IG4gPSBlbmQgLSBiZWdp
bjsKKyAgICBpZiAobiArIDMgPiBidWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHt7
fSwgZmFsc2V9OworICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkKKyAg
ICB7CisgICAgICAgIGJ1ZmZlcltpXSA9IGJlZ2luW2ldOworICAgIH0KKyAgICBidWZmZXJbbiAr
IDBdID0gJzwnOworICAgIGJ1ZmZlcltuICsgMV0gPSAnPic7CisgICAgYnVmZmVyW24gKyAyXSA9
ICdcMCc7CisgICAgcmV0dXJuIHtOYW1lKGJ1ZmZlciwgbmFtZS5zeW1ib2xUeXBlKCkpLCB0cnVl
fTsKK30KKworUHJvZ3JhbVByZWx1ZGU6OkZ1bmNUb0VtaXR0ZXIgUHJvZ3JhbVByZWx1ZGU6OkJ1
aWxkRnVuY1RvRW1pdHRlcigpCit7CisjZGVmaW5lIEVNSVRfTUVUSE9EKG1ldGhvZCkgXAorICAg
IFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICYpIC0+IHZvaWQgeyByZXR1
cm4gcHAubWV0aG9kKCk7IH0KKyAgICBGdW5jVG9FbWl0dGVyIG1hcDsKKworICAgIGF1dG8gcHV0
ID0gWyZdKE5hbWUgbmFtZSwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBGdW5jRW1p
dHRlciAmZGVzdCA9IG1hcFtuYW1lXTsKKyAgICAgICAgQVNTRVJUKCFkZXN0KTsKKyAgICAgICAg
ZGVzdCA9IGVtaXR0ZXI7CisgICAgfTsKKworICAgIGF1dG8gcHV0QW5nbGUgPSBbJl0oY29uc3Qg
Y2hhciAqbmFtZVN0ciwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBOYW1lIG5hbWUo
bmFtZVN0ciwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIHB1dChuYW1lLCBl
bWl0dGVyKTsKKyAgICB9OworCisgICAgYXV0byBwdXRCdWlsdEluID0gWyZdKGNvbnN0IGNoYXIg
Km5hbWVTdHIsIEZ1bmNFbWl0dGVyIGVtaXR0ZXIpIHsKKyAgICAgICAgTmFtZSBuYW1lKG5hbWVT
dHIsIFN5bWJvbFR5cGU6OkJ1aWx0SW4pOworICAgICAgICBwdXQobmFtZSwgZW1pdHRlcik7Cisg
ICAgfTsKKworICAgIHB1dEFuZ2xlKCJhZGRyZXNzb2YiLCBFTUlUX01FVEhPRChhZGRyZXNzb2Yp
KTsKKyAgICBwdXRBbmdsZSgiY2FzdDw+IiwgRU1JVF9NRVRIT0QoY2FzdE1hdHJpeCkpOworICAg
IHB1dEFuZ2xlKCJlbGVtX3JlZiIsIEVNSVRfTUVUSE9EKHZlY3RvckVsZW1SZWYpKTsKKyAgICBw
dXRBbmdsZSgiZmxhdHRlbiIsIEVNSVRfTUVUSE9EKGZsYXR0ZW5BcnJheSkpOworICAgIHB1dEFu
Z2xlKCJpbm91dCIsIEVNSVRfTUVUSE9EKGlub3V0KSk7CisgICAgcHV0QW5nbGUoIm91dCIsIEVN
SVRfTUVUSE9EKG91dCkpOworICAgIHB1dEFuZ2xlKCJzd2l6emxlX3JlZiIsIEVNSVRfTUVUSE9E
KHN3aXp6bGVSZWYpKTsKKworICAgIHB1dEJ1aWx0SW4oInRleGVsRmV0Y2giLCBFTUlUX01FVEhP
RCh0ZXhlbEZldGNoKSk7CisgICAgcHV0QnVpbHRJbigidGV4ZWxGZXRjaE9mZnNldCIsIEVNSVRf
TUVUSE9EKHRleGVsRmV0Y2hPZmZzZXQpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlIiwgW10o
UHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKyAgICAgICAgY29u
c3QgSW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKyAgICAgICAgICAgIEdldFRleHR1cmVU
eXBlTmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpLnJhd05h
bWUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJh
bSgxKS0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBj
b29yZC5nZXRCYXNpY1R5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGNvb3JkTiAgICAgICAgICAg
ID0gY29vcmQuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgY29uc3QgYm9vbCBiaWFzICAgICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbUNvdW50KCkgPj0gMzsKKyAgICAgICAgaWYgKHRleHR1cmVO
YW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRfZmxvYXQz
X2Zsb2F0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwcC50
ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aGN1YmU8IikpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0
ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChiaWFz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFs
OjpkZXB0aDJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZGVw
dGgyZGFycmF5X2Zsb2F0NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTJkX2FycmF5PCIpKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9h
dCAmJiBjb29yZE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlh
cykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0M19mbG9hdCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6
OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChiaWFzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zs
b2F0NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2lj
ID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAyKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9mbG9hdCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19mbG9hdDIoKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJpYXMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2dlbmVyaWNfZmxvYXQz
KCk7CisgICAgICAgIH0KKyAgICAgICAgVE9ETygpOworICAgIH0pOworICAgIHB1dEJ1aWx0SW4o
InRleHR1cmUxRExvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRExvZCkpOworICAgIHB1dEJ1aWx0
SW4oInRleHR1cmUxRFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMURQcm9qKSk7CisgICAgcHV0
QnVpbHRJbigidGV4dHVyZTFEUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRFByb2pMb2Qp
KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkQiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMkQpKTsK
KyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMkRMb2Qp
KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRQcm9qIiwgRU1JVF9NRVRIT0QodGV4dHVyZTJE
UHJvaikpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRExvZCIsIEVNSVRfTUVUSE9EKHRleHR1
cmUzRExvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRFByb2oiLCBFTUlUX01FVEhPRCh0
ZXh0dXJlM0RQcm9qKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZTNEUHJvakxvZCIsIEVNSVRf
TUVUSE9EKHRleHR1cmUzRFByb2pMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlQ3ViZSIs
IEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUN1YmVM
b2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlQ3ViZUxvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1
cmVDdWJlUHJvaiIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlUHJvaikpOworICAgIHB1dEJ1aWx0
SW4oInRleHR1cmVDdWJlUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlUHJvakxvZCkp
OworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
MkRQcm9qTG9kKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUdyYWQiLCBbXShQcm9ncmFtUHJl
bHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgeworICAgICAgICBjb25zdCBJbW11dGFi
bGVTdHJpbmcgdGV4dHVyZU5hbWUgPQorICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1
bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworICAg
ICAgICBjb25zdCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRU
eXBlKCk7CisgICAgICAgIGNvbnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3JkLmdldEJh
c2ljVHlwZSgpOworICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5n
ZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAgICAgPSBm
dW5jLmdldFBhcmFtKDIpLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAg
ICAgICAgICA9IGRQZHguZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1cmVOYW1l
LmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBk
UGR4TiA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0
aDJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBU
QmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9kZXB0aDJkYXJy
YXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwiKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxv
YXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1l
LmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlY3ViZTwiKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMg
JiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHAu
dGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDMoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Migp
OworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZs
b2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBwcC50ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQg
JiYgY29vcmROID09IGRQZHhOKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4
dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TigpOworICAgICAgICB9CisgICAg
ICAgIFRPRE8oKTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlR3JhZE9mZnNldCIs
IFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAg
IGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0
dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5y
YXdOYW1lKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0
UGFyYW0oMSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2lj
ID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAg
ICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4
ICAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3Qg
aW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBp
ZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNv
b3JkTiA9PSAzICYmIGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJf
aW50MigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlTmFt
ZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZF9hcnJheTwiKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09
IDQgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZUdyYWRPZmZzZXRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUu
YmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwiKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYg
ZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4
dHVyZUdyYWRPZmZzZXRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQzX2ludDMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0
aCgibWV0YWw6OnRleHR1cmVjdWJlPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29v
cmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9
PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3Jh
ZE9mZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNp
Y1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9m
bG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9
PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gZFBkeE4pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0Tl9mbG9h
dE5fZmxvYXROX2ludE4oKTsKKyAgICAgICAgfQorICAgICAgICBUT0RPKCk7CisgICAgfSk7Cisg
ICAgcHV0QnVpbHRJbigidGV4dHVyZUxvZCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3Qg
VEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJl
TmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7CisgICAgICAgIGNvbnN0IFRUeXBl
ICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKyAgICAgICAg
Y29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisgICAg
ICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7
CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZDwiKSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0
RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBwLnRleHR1cmVMb2RfZGVwdGgyZF9mbG9hdDMoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUy
ZF9hcnJheTwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJh
c2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQzKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRG
bG9hdCAmJiBjb29yZE4gPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRl
eHR1cmVMb2RfZ2VuZXJpY19mbG9hdDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDMoKTsKKyAgICAg
ICAgfQorICAgICAgICBUT0RPKCk7CisgICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUxv
ZE9mZnNldCIsIEVNSVRfTUVUSE9EKHRleHR1cmVMb2RPZmZzZXQpKTsKKyAgICBwdXRCdWlsdElu
KCJ0ZXh0dXJlT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZU9mZnNldCkpOworICAgIHB1dEJ1
aWx0SW4oInRleHR1cmVQcm9qIiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2opKTsKKyAgICBwdXRC
dWlsdEluKCJ0ZXh0dXJlUHJvakdyYWQiLCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRG
dW5jdGlvbiAmZnVuYykgeworICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgdGV4dHVyZU5h
bWUgPQorICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdl
dFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworICAgICAgICBjb25zdCBUVHlwZSAm
Y29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRUeXBlKCk7CisgICAgICAgIGNv
bnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3JkLmdldEJhc2ljVHlwZSgpOworICAgICAg
ICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOwor
ICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDIpLT5n
ZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAgICAgICAgICA9IGRQZHguZ2V0
Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFs
OjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBU
QmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRfZGVwdGgy
ZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNkPCIpKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9h
dCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNf
ZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFz
aWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9nZW5lcmlj
X2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFz
aWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9nZW5lcmlj
X2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgVE9ETygpOworICAg
IH0pOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIFtdKFByb2dyYW1Q
cmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IEltbXV0
YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUo
ZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7Cisg
ICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdl
dFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0
QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3Jk
LmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4ICAgICAgICAgICA9
IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGRQZHhOICAg
ICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBpZiAodGV4dHVyZU5h
bWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYm
IGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRl
eHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5z
V2l0aCgibWV0YWw6OnRleHR1cmUzZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4g
PT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVBy
b2pHcmFkT2Zmc2V0X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0M19m
bG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9
PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVy
aWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAgIFRPRE8o
KTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlUHJvakxvZCIsIFtdKFByb2dyYW1Q
cmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IEltbXV0
YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUo
ZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7Cisg
ICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdl
dFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0
QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3Jk
LmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJt
ZXRhbDo6ZGVwdGgyZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxvYXQ0KCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2lu
c1dpdGgoIm1ldGFsOjp0ZXh0dXJlM2Q8IikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF90ZXh0dXJl
M2RfZmxvYXQ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3Jk
QmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF9nZW5lcmljX2Zsb2F0MygpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0
ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVy
ZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKyAgICAgICAgfQorICAgICAgICBUT0RPKCk7Cisg
ICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBFTUlUX01FVEhP
RCh0ZXh0dXJlUHJvakxvZE9mZnNldCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qT2Zm
c2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2pPZmZzZXQpKTsKKyAgICBwdXRCdWlsdEluKCJ0
ZXh0dXJlU2l6ZSIsIEVNSVRfTUVUSE9EKHRleHR1cmVTaXplKSk7CisKKyAgICByZXR1cm4gbWFw
OworCisjdW5kZWYgRU1JVF9NRVRIT0QKK30KKwordm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRP
cGVyYXRvcihUT3BlcmF0b3Igb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRGdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFR5cGUgKmFyZ1R5cGUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTEpCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSYWRpYW5zOgorICAgICAgICAgICAgcmFkaWFucygp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZWdyZWVz
OgorICAgICAgICAgICAgZGVncmVlcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BBdGFuOgorICAgICAgICAgICAgYXRhbigpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2Q6CisgICAgICAgICAgICBtb2Qo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmcmFj
dDoKKyAgICAgICAgICAgIHJlZnJhY3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wRGlzdGFuY2U6CisgICAgICAgICAgICBkaXN0YW5jZSgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZW5ndGg6CisgICAg
ICAgICAgICBsZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wRG90OgorICAgICAgICAgICAgZG90KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vcm1hbGl6ZToKKyAgICAgICAgICAgIG5vcm1hbGl6
ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGYWNl
Zm9yd2FyZDoKKyAgICAgICAgICAgIGZhY2Vmb3J3YXJkKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZmxlY3Q6CisgICAgICAgICAgICByZWZsZWN0
KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2lu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wVGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbjoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEFjb3M6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaW5oOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zaDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFRhbmg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc2luaDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRhbmg6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBYnM6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BGbWE6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3c6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BFeHA6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHAyOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9nOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TG9nMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGbG9vcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRydW5jOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2VpbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEZyYWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmQ6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BSb3VuZEV2ZW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2Rm
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGRleHA6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BGcmV4cDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEludmVyc2VzcXJ0Ogor
ICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWw6CisgICAgICAgICAgICBpZiAoYXJnVHlw
ZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZXF1YWxWZWN0b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIEV2ZW4gaWYgQXJnMCBpcyBhIHZlY3RvciBvciBtYXRyaXgsIGl0IGNvdWxkIGFsc28gYmUg
YW4gYXJyYXkuCisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzQXJyYXkoKSAmJiBhcmdUeXBl
MS0+aXNBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVxdWFsQXJyYXko
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNWZWN0b3Io
KSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBub3RFcXVhbFZlY3RvcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
YXJnVHlwZTAtPmdldFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBub3RFcXVhbFN0cnVjdCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gU2FtZSBhcyBhYm92ZS4KKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+
aXNBcnJheSgpICYmIGFyZ1R5cGUxLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbm90RXF1YWxBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorICAgICAgICAgICAgaW5j
bHVkZV9tZXRhbF9nZW9tZXRyaWMoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BTaWduOgorICAgICAgICAgICAgc2lnbigpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENsYW1wOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTWluOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF4OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWl4OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
U3RlcDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNtb290aHN0ZXA6CisgICAgICAgICAg
ICBpbmNsdWRlX21ldGFsX2NvbW1vbigpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEFsbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFueToK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElzbmFuOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSXNpbmY6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX3JlbGF0aW9uYWwoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR4OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEZ3aWR0aDoKKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFudDoKKyAgICAgICAgICAgIGluY2x1ZGVf
bWV0YWxfbWF0cml4KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQWRkOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpICYmIGFy
Z1R5cGUxLT5pc1NjYWxhcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZE1h
dHJpeFNjYWxhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNN
YXRyaXgoKSAmJiBhcmdUeXBlMS0+aXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBzdWJNYXRyaXhTY2FsYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgICAgICBpZiAo
YXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGFyZ1R5cGUxLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChhcmdUeXBlMS0+aXNTY2FsYXIoKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGRpdk1hdHJpeFNjYWxhcigpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4
KCkgJiYgYXJnVHlwZTEtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbigpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bE1hdHJpeENvbXBvbmVu
dFdpc2U6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkgJiYgYXJnVHlwZTEt
PmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29tcG9uZW50V2lz
ZU11bHRpcGx5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wT3V0ZXJQcm9kdWN0OgorICAgICAgICAgICAgb3V0ZXJQcm9k
dWN0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
SW52ZXJzZToKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZTAtPmdldENvbHMoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGlu
dmVyc2UyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgMzoKKyAgICAgICAgICAgICAgICAgICAgaW52ZXJzZTMoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICBp
bnZlcnNlNCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJp
eFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICAgICAgbWF0bXVsQXNzaWduKCk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlSW5jcmVtZW50Ogor
ICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHByZUluY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RJbmNyZW1lbnQ6
CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcG9zdEluY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVu
dDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBwcmVEZWNyZW1lbnRNYXRyaXgoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVt
ZW50OgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHBvc3REZWNyZW1lbnRNYXRyaXgoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTmVnYXRpdmU6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0
cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmVnYXRlTWF0cml4KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQ29tbWE6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVm
dEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VPckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJp
Z2h0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXR3aXNlT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFu
RXF1YWw6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkNvbXBvbmVudFdpc2U6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsQ29tcG9uZW50V2lzZToK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuRXF1YWxDb21wb25lbnRXaXNl
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5Db21wb25lbnRXaXNlOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wTG9naWNhbFhvcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxB
bmQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3NpdGl2ZToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dp
Y2FsTm90Q29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VO
b3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1l
c1NjYWxhcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4Ogor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmV0dXJuOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQnJlYWs6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb250aW51ZToKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRp
cmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0U3RydWN0OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVaW50
Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbG9hdEJpdHNUb1VpbnQ6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorICAgICAgICAgICAgLy8gZG8gbm90
aGluZworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEtp
bGw6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dyYXBoaWNzKCk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Vub3JtMngxNjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tTbm9ybTJ4MTY6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQYWNrVW5vcm00eDg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrU25v
cm00eDg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTJ4MTY6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTR4ODoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVu
cGFja1Nub3JtNHg4OgorICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9wYWNrKCk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja0hhbGYyeDE2Ogor
ICAgICAgICAgICAgcGFja19oYWxmXzJ4MTYoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4MTY6CisgICAgICAgICAgICB1bnBhY2tf
aGFsZl8yeDE2KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0ZmllbGRFeHRyYWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0Zmll
bGRJbnNlcnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZFJldmVyc2U6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRDb3VudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEZpbmRMU0I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5kTVNCOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVWFkZENhcnJ5OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wVXN1YkJvcnJvdzoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVtdWxFeHRlbmRl
ZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEltdWxFeHRlbmRlZDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1v
cnlCYXJyaWVyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllckF0b21p
Y0NvdW50ZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVyQnVmZmVy
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllckltYWdlOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllclNoYXJlZDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEdyb3VwTWVtb3J5QmFycmllcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEF0b21pY0FkZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY01pbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY01heDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEF0b21pY0FuZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY09yOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljWG9yOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQXRvbWljRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9t
aWNDb21wU3dhcDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVtaXRWZXJ0ZXg6CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFbmRQcmltaXRpdmU6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BGVHJhbnNmb3JtOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja0RvdWJs
ZTJ4MzI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tEb3VibGUyeDMyOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXJyYXlMZW5ndGg6CisgICAgICAgICAgICBUT0RPKCk7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29uc3Ry
dWN0OgorICAgICAgICAgICAgQVNTRVJUKCFmdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKyAgICAgICAgICAgIEFTU0VSVChmdW5j
KTsKKyAgICAgICAgICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoZnVuYykuc2Vjb25kKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSgqZnVuYyk7CisgICAgICAg
ICAgICAgICAgY29uc3QgYXV0byBlbmQgPSBtRnVuY1RvRW1pdHRlci5lbmQoKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGl0ZXIgICAgICA9IG1GdW5jVG9FbWl0dGVyLmZpbmQobmFtZSk7CisgICAg
ICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2hhciBidWZmZXJbMzJdOworICAgICAgICAgICAgICAgICAgICBhdXRvIG1h
c2sgPSBNYXNrVGVtcGxhdGVBcmdzKG5hbWUsIHNpemVvZihidWZmZXIpLCBidWZmZXIpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobWFzay5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSBtRnVuY1RvRW1pdHRlci5maW5kKG1hc2su
Zmlyc3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChpdGVyICE9IGVuZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGF1dG8gJmVtaXR0ZXIgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXR0ZXIoKnRoaXMsICpmdW5jKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbVBy
ZWx1ZGU6OnZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5cGUgJnR5cGUp
Cit7CisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgpKQorICAg
IHsKKyAgICAgICAgY29uc3QgTmFtZSB0eXBlTmFtZSgqcyk7CisgICAgICAgIGlmICh0eXBlTmFt
ZS5iZWdpbnNXaXRoKE5hbWUoIlRleHR1cmVFbnY8IikpKQorICAgICAgICB7CisgICAgICAgICAg
ICB0ZXh0dXJlRW52KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgaWYgKG5hbWUgPT0gY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJs
ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0VmFyaWFibGUoY29uc3Qg
VFZhcmlhYmxlICZ2YXIpCit7CisgICAgaWYgKG1IYW5kbGVkLmluc2VydCgmdmFyKS5zZWNvbmQp
CisgICAgeworICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUodmFyKSwgdmFyLmdldFR5cGUoKSk7
CisgICAgfQorfQorCit2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFN0cnVjdHVyZShjb25zdCBU
U3RydWN0dXJlICZzKQoreworICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnMpLnNlY29uZCkKKyAg
ICB7CisgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IHMuZmllbGRzKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBlKCk7Cisg
ICAgICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUoKmZpZWxkKSwgdHlwZSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgPSBu
b2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICBjb25zdCBUVHlwZSAmcmlnaHRUeXBlID0g
bm9kZS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+Z2V0
T3AoKSwgbnVsbHB0ciwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVy
bVVuYXJ5ICpub2RlKQoreworICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlID0gbm9kZS0+Z2V0T3Bl
cmFuZCgpLT5nZXRUeXBlKCk7CisgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgpLCBudWxs
cHRyLCAmYXJnVHlwZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbVByZWx1
ZGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKQor
eworICAgIGNvbnN0IHNpemVfdCBhcmdDb3VudCA9IG5vZGUtPmdldENoaWxkQ291bnQoKTsKKwor
ICAgIGF1dG8gZ2V0QXJnVHlwZSA9IFtub2RlLCBhcmdDb3VudF0oc2l6ZV90IGluZGV4KSAtPiBj
b25zdCBUVHlwZSAmIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgYXJnQ291bnQpOworICAgICAg
ICBUSW50ZXJtVHlwZWQgKmFyZyA9IG5vZGUtPmdldENoaWxkTm9kZShpbmRleCktPmdldEFzVHlw
ZWQoKTsKKyAgICAgICAgQVNTRVJUKGFyZyk7CisgICAgICAgIHJldHVybiBhcmctPmdldFR5cGUo
KTsKKyAgICB9OworCisgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gbm9kZS0+Z2V0RnVuY3Rp
b24oKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Q2hpbGRDb3VudCgpKQorICAgIHsKKyAgICAg
ICAgY2FzZSAwOgorICAgICAgICB7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdl
dE9wKCksIGZ1bmMsIG51bGxwdHIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUw
ID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+Z2V0T3Ao
KSwgZnVuYywgJmFyZ1R5cGUwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlMCA9
IGdldEFyZ1R5cGUoMCk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJnVHlwZTEgPSBnZXRB
cmdUeXBlKDEpOworICAgICAgICAgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgpLCBmdW5j
LCAmYXJnVHlwZTAsICZhcmdUeXBlMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5
cGUwID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlMSA9
IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCks
IGZ1bmMsICZhcmdUeXBlMCwgJmFyZ1R5cGUxKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlz
aXREZWNsYXJhdGlvbihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICpub2RlKQoreworICAgIERl
Y2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKCpub2RlKTsKKyAgICBjb25zdCBUVHlw
ZSAmdHlwZSA9IGRlY2wuc3ltYm9sLmdldFR5cGUoKTsKKyAgICBpZiAodHlwZS5pc1N0cnVjdFNw
ZWNpZmllcigpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqcyA9IHR5cGUuZ2V0
U3RydWN0KCk7CisgICAgICAgIEFTU0VSVChzKTsKKyAgICAgICAgdmlzaXRTdHJ1Y3R1cmUoKnMp
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkKK3sKKyAgICB2aXNpdFZhcmlhYmxlKG5vZGUt
PnZhcmlhYmxlKCkpOworfQorCitib29sIHNoOjpFbWl0UHJvZ3JhbVByZWx1ZGUoVEludGVybUJs
b2NrICZyb290LCBUSW5mb1NpbmtCYXNlICZvdXQsIGNvbnN0IFByb2dyYW1QcmVsdWRlQ29uZmln
ICZwcGMpCit7CisgICAgUHJvZ3JhbVByZWx1ZGUgcHJvZ3JhbVByZWx1ZGUob3V0LCBwcGMpOwor
ICAgIHJvb3QudHJhdmVyc2UoJnByb2dyYW1QcmVsdWRlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Byb2dyYW1QcmVsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAwNDEzZjU3NjkyYTA1MzRkYTRkN2RjOTYz
YTA5OGJiODhjZGRjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJl
bHVkZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUFJPR1JBTVBSRUxVREVfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUFJPR1JBTVBSRUxVREVf
SF8KKworI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY2xhc3MgVEluZm9TaW5rQmFzZTsKK2NsYXNz
IFRJbnRlcm1CbG9jazsKKworc3RydWN0IFByb2dyYW1QcmVsdWRlQ29uZmlnCit7CisgICAgYm9v
bCBoYXNTdHJ1Y3RFcSA9IGZhbHNlOworfTsKKworLy8gVGhpcyBlbWl0cyBmaXhlZCBoZWxwZXIg
TWV0YWwgY29kZSBkaXJlY3RseSB3aXRob3V0IGFkZGluZyBjb2RlIHRvIHRoZSBBU1QuIFRoaXMg
d2Fsa3MgdGhlIEFTVCB0bworLy8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgd2hhdCBwcmVsdWRl
IE1TTCBjb2RlIGlzIG5lZWRlZCBmb3IgdmFyaW91cyB0aGluZ3MgaW4gdGhlIEFTVC4gWW91IGNh
bgorLy8gdGhpbmsgb2YgdGhpcyBhcyBlZmZlY3RpdmVseSBpbmxpbmluZyB2YXJpb3VzIHBvcnRp
b25zIG9mIGEgaGVscGVyIGxpYnJhcnkgaW50byB0aGUgZW1pdHRlZAorLy8gTWV0YWwgcHJvZ3Jh
bS4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBFbWl0UHJvZ3JhbVByZWx1ZGUoVEludGVybUJsb2Nr
ICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1Np
bmtCYXNlICZvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKwor
I2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9QUk9H
UkFNUFJFTFVERV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJs
b2Nrcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hYTgxNjk2ZjA2YWY2OWQ0YWRhMjU3OWMwMmQwOGM0ODk0NWZkOWU4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAKQEAgLTAsMCAr
MSwxMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8dW5v
cmRlcmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NlcGFyYXRlRGVjbGFyYXRpb25zLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1
c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFj
ZQoreworCitjbGFzcyBSZWR1Y2VyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgc3Rk
Ojp1bm9yZGVyZWRfbWFwPGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqLCBzdGQ6Om1hcDxJbW11dGFi
bGVTdHJpbmcsIGNvbnN0IFRWYXJpYWJsZSAqPj4KKyAgICAgICAgbUxpZnRlZE1hcDsKKyAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFZhcmlhYmxlICosIGNvbnN0IFRWYXJpYWJsZSAqPiBt
SW5zdGFuY2VNYXA7CisKKyAgcHVibGljOgorICAgIFJlZHVjZXIoVENvbXBpbGVyICZjb21waWxl
cikgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVS
ZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRlY2xOb2RlLmdldENoaWxkQ291bnQoKSA9
PSAxKTsKKyAgICAgICAgVEludGVybU5vZGUgJm5vZGUgPSAqZGVjbE5vZGUuZ2V0Q2hpbGROb2Rl
KDApOworCisgICAgICAgIGlmIChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRB
c1N5bWJvbE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2
YXIgICAgICAgID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRU
eXBlICZ0eXBlICAgICAgICAgICA9IHZhci5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBT
eW1ib2xUeXBlIHN5bWJvbFR5cGUgPSB2YXIuc3ltYm9sVHlwZSgpOworICAgICAgICAgICAgaWYg
KGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldEludGVyZmFj
ZUJsb2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHN5bWJvbFR5cGUg
PT0gU3ltYm9sVHlwZTo6RW1wdHkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvICZuYW1lVG9WYXIgPSBtTGlmdGVkTWFwW2ludGVyZmFjZUJsb2NrXTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gcmVwbGFjZW1lbnRzOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBpbnRlcmZhY2VCbG9jay0+
ZmllbGRzKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gJmxpZnRlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxkLT50eXBlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGxpZnRlZFR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxp
Zmllcjo6RXZxVW5pZm9ybSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZnRl
ZFR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxpZmllcjo6RXZxR2xvYmFsKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpZnRlZFR5cGUuc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXI6OkV2cVVu
aWZvcm0pOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byAqbGlmdGVkVmFyID0gbmV3IFRW
YXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBmaWVsZC0+bmFtZSgpLCAmbGlmdGVkVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQt
PnN5bWJvbFR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVUb1ZhcltmaWVs
ZC0+bmFtZSgpXSA9IGxpZnRlZFZhcjsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFj
ZW1lbnRzLnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVy
bURlY2xhcmF0aW9ue25ldyBUSW50ZXJtU3ltYm9sKGxpZnRlZFZhcil9KTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShz
dGQ6Om1vdmUocmVwbGFjZW1lbnRzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0
eXBlLmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0pOworCisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gJnN0cnVjdHVyZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAq
bmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgaW50ZXJmYWNlQmxvY2stPm5hbWUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJmYWNlQmxvY2stPmZp
ZWxkcygpLCBpbnRlcmZhY2VCbG9jay0+c3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byAmc3RydWN0VmFyID0gQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKG1TeW1ib2xUYWJs
ZSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byAmaW5zdGFuY2VWYXIgPQor
ICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShtU3ltYm9sVGFi
bGUsIHN0cnVjdHVyZSwgTmFtZSh2YXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtLCAmdHlwZS5nZXRBcnJheVNp
emVzKCkpOworCisgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZU1hcFsmdmFyXSA9ICZpbnN0
YW5jZVZhcjsKKworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnRz
W10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVybURlY2xhcmF0aW9ue25l
dyBUSW50ZXJtU3ltYm9sKCZzdHJ1Y3RWYXIpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5l
dyBUSW50ZXJtRGVjbGFyYXRpb257bmV3IFRJbnRlcm1TeW1ib2woJmluc3RhbmNlVmFyKX19Owor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShzdGQ6OmJlZ2luKHJl
cGxhY2VtZW50cyksIHN0ZDo6ZW5kKHJlcGxhY2VtZW50cykpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7ZGVjbE5vZGUsIFZp
c2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0U3ltYm9sUHJl
KFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25z
dCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUudmFyaWFibGUoKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byBpdCA9IG1JbnN0YW5jZU1hcC5maW5kKCZ2YXIpOworICAgICAgICAgICAg
aWYgKGl0ICE9IG1JbnN0YW5jZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKm5ldyBUSW50ZXJtU3ltYm9sKGl0LT5zZWNvbmQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmIChjb25zdCBUSW50ZXJmYWNlQmxvY2sgKmliID0gdmFy
LmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIGl0ID0gbUxpZnRlZE1hcC5maW5kKGliKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtTGlm
dGVkTWFwLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gKmxpZnRl
ZFZhciA9IGl0LT5zZWNvbmRbdmFyLm5hbWUoKV07CisgICAgICAgICAgICAgICAgQVNTRVJUKGxp
ZnRlZFZhcik7CisgICAgICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybVN5bWJvbChsaWZ0
ZWRWYXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBzeW1ib2xO
b2RlOworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6UmVkdWNlSW50ZXJmYWNlQmxvY2tzKFRDb21waWxl
ciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBSZWR1Y2VyIHJlZHVjZXIo
Y29tcGlsZXIpOworICAgIGlmICghcmVkdWNlci5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVNlcGFyYXRlRGVjbGFyYXRp
b25zKCZjb21waWxlciwgJnJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVj
ZUludGVyZmFjZUJsb2Nrcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM2OTVjYmFkZmQ2NGEyMTJhNWJlNTUxODliOWNlNzJjNjhkNzRhZTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmgKQEAg
LTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVEVUNFSU5URVJGQUNFQkxP
Q0tTX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIFRoaXMg
cmV3cml0ZXMgaW50ZXJmYWNlIGJsb2NrIGRlY2xhcmF0aW9ucyBvbmx5LgorLy8KKy8vIEFjY2Vz
cyBvZiBpbnRlcmZhY2UgYmxvY2tzIGlzIG5vdCByZXdyaXR0ZW4gKGUuZy4gVE9wZXJhdG9yOjpF
T3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrKS4gLy8KKy8vIFhYWDogXiBTdGlsbCB0cnVlPwor
Ly8KKy8vIEV4YW1wbGU6CisvLyAgdW5pZm9ybSBGb28geyBpbnQgeDsgfTsKKy8vIEJlY29tZXM6
CisvLyAgdW5pZm9ybSBpbnQgeDsKKy8vCisvLyBFeGFtcGxlOgorLy8gIHVuaWZvcm0gRm9vIHsg
aW50IHg7IH0gZm9vOworLy8gQmVjb21lczoKKy8vICBzdHJ1Y3QgRm9vIHsgaW50IHg7IH07IHVu
aWZvcm0gRm9vIHg7CisvLworQU5HTEVfTk9fRElTQ0FSRCBib29sIFJlZHVjZUludGVyZmFjZUJs
b2NrcyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9ICAvLyBu
YW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JN
RVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9SZWZlcmVuY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZlcmVuY2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
YjVkODZjNzg4ZTVkNmMyMzIxNTFiODM2MjZmODYwMTlhM2NiZGY5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1JlZmVyZW5jZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vCisvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVGRVJF
TkNFX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1JFRkVSRU5DRV9IXworCituYW1lc3BhY2Ugc2gKK3sKKworLy8gU2ltaWxhciB0byBzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyLCBidXQgYWxzbyBsaWZ0cyBjb21wYXJpc29uIG9wZXJhdG9ycy4KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUmVmCit7CisgIHB1YmxpYzoKKyAgICBSZWYoY29u
c3QgUmVmICYpID0gZGVmYXVsdDsKKyAgICBSZWYoUmVmICYmKSAgICAgID0gZGVmYXVsdDsKKyAg
ICBSZWYoVCAmcmVmKSA6IG1QdHIoJnJlZikge30KKworICAgIFJlZiAmb3BlcmF0b3I9KGNvbnN0
IFJlZiAmKSA9IGRlZmF1bHQ7CisgICAgUmVmICZvcGVyYXRvcj0oUmVmICYmKSA9IGRlZmF1bHQ7
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4g
Km1QdHIgPT0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVmICZv
dGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgIT0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9w
ZXJhdG9yPD0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPD0gKm90aGVy
Lm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyBy
ZXR1cm4gKm1QdHIgPj0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBS
ZWYgJm90aGVyKSBjb25zdCB7IHJldHVybiAqbVB0ciA8ICpvdGhlci5tUHRyOyB9CisgICAgYm9v
bCBvcGVyYXRvcj4oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPiAqb3Ro
ZXIubVB0cjsgfQorCisgICAgVCAmZ2V0KCkgeyByZXR1cm4gKm1QdHI7IH0KKyAgICBUIGNvbnN0
ICZnZXQoKSBjb25zdCB7IHJldHVybiAqbVB0cjsgfQorCisgICAgb3BlcmF0b3IgVCAmKCkgeyBy
ZXR1cm4gKm1QdHI7IH0KKyAgICBvcGVyYXRvciBUIGNvbnN0ICYoKSBjb25zdCB7IHJldHVybiAq
bVB0cjsgfQorCisgICAgb3BlcmF0b3IgVCAqKCkgeyByZXR1cm4gKm1QdHI7IH0KKyAgICBvcGVy
YXRvciBUIGNvbnN0ICooKSBjb25zdCB7IHJldHVybiAqbVB0cjsgfQorCisgIHByaXZhdGU6Cisg
ICAgVCAqbVB0cjsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgQ1JlZiA9IFJl
ZjxUIGNvbnN0PjsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVGRVJFTkNFX0hfCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzc4MTc3NmM1NjA3OTIx
ZGUzMjJmZTk2NTlkODM2ZTBhMzJiNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcApAQCAtMCwwICsxLDkxIEBACisvLworLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBSZXdy
aXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVj
dG9yPGNvbnN0IFRWYXJpYWJsZSAqPj4gbURlY2xhcmVkVmFyU3RhY2s7CisKKyAgcHVibGljOgor
ICAgIFJld3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGls
ZXIsIHRydWUsIHRydWUpIHt9CisKKyAgICB+UmV3cml0ZXIoKSBvdmVycmlkZSB7IEFTU0VSVCht
RGVjbGFyZWRWYXJTdGFjay5lbXB0eSgpKTsgfQorCisgIHByaXZhdGU6CisgICAgUHJlUmVzdWx0
IHZpc2l0U3dpdGNoUHJlKFRJbnRlcm1Td2l0Y2ggJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBtRGVjbGFyZWRWYXJTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgcmV0dXJuIG5v
ZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRj
aCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCghbURlY2xhcmVkVmFyU3Rh
Y2suZW1wdHkoKSk7CisgICAgICAgIGNvbnN0IGF1dG8gdmFycyA9IHN0ZDo6bW92ZShtRGVjbGFy
ZWRWYXJTdGFjay5iYWNrKCkpOworICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5wb3BfYmFjaygp
OworICAgICAgICBpZiAoIXZhcnMuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byAmYmxvY2sgPSAqbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgZm9yIChjb25zdCBU
VmFyaWFibGUgKnZhciA6IHZhcnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYmxv
Y2suYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dmFyfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBibG9jay5hcHBlbmRTdGF0ZW1lbnQoJm5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOworICAg
IH0KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUHJlKFRJbnRlcm1EZWNsYXJhdGlv
biAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbURlY2xhcmVkVmFyU3RhY2su
ZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybU5vZGUgKnBhcmVudCA9IGdl
dFBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQtPmdldEFzQmxvY2soKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqZ3JhbmRwYXJlbnQgPSBn
ZXRQYXJlbnROb2RlKDEpOworICAgICAgICAgICAgICAgIGlmIChncmFuZHBhcmVudCAmJiBncmFu
ZHBhcmVudC0+Z2V0QXNTd2l0Y2hOb2RlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBEZWNsYXJhdGlvbiBkZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5iYWNrKCkucHVzaF9iYWNrKCZkZWNs
LnN5bWJvbC52YXJpYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdEV4
cHIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAqbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZkZWNsLnN5bWJvbCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbC5p
bml0RXhwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9Cit9OworCit9
ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jv
b2wgc2g6OlJld3JpdGVDYXNlRGVjbGFyYXRpb25zKFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRl
cm1CbG9jayAmcm9vdCkKK3sKKyAgICBpZiAoIVJld3JpdGVyKGNvbXBpbGVyKS5yZWJ1aWxkUm9v
dChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlv
bnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU1YTg4MjE1NDc1ZDA4ZTUxYjIxNzRlZTNlMWEzYWFjYjU0NDUwYzcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaApAQCAtMCwwICsxLDUw
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCisjZGVmaW5lIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hf
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIEVYQU1QTEUKKy8v
ICAgIHN3aXRjaCAoZXhwcikKKy8vICAgIHsKKy8vICAgICAgY2FzZSAwOgorLy8gICAgICAgIGlu
dCB4ID0gMDsKKy8vICAgICAgICBicmVhazsKKy8vICAgICAgY2FzZSAxOgorLy8gICAgICAgIGlu
dCB5ID0gMDsKKy8vICAgICAgICB7CisvLyAgICAgICAgICBpbnQgeiA9IDA7CisvLyAgICAgICAg
fQorLy8gICAgICAgIGJyZWFrOworLy8gICAgfQorLy8gQmVjb21lcworLy8gICAgeworLy8gICAg
ICBpbnQgeDsKKy8vICAgICAgaW50IHk7CisvLyAgICAgIHN3aXRjaCAoZXhwcikKKy8vICAgICAg
eworLy8gICAgICAgIGNhc2UgMDoKKy8vICAgICAgICAgIHggPSAwOworLy8gICAgICAgICAgYnJl
YWs7CisvLyAgICAgICAgY2FzZSAxOgorLy8gICAgICAgICAgeSA9IDA7CisvLyAgICAgICAgICB7
CisvLyAgICAgICAgICAgIGludCB6ID0gMDsKKy8vICAgICAgICAgIH0KKy8vICAgICAgICAgIGJy
ZWFrOworLy8gICAgICB9CisvLyAgICB9CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZUNh
c2VEZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KTsK
KworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUNBU0VERUNMQVJBVElPTlNfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFkNWEz
NmM4MWI1YzcyNDE4YTZhOWJhZDE1NWEzYzQ1MzZiNmJlYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwCkBAIC0wLDAgKzEsMTE0
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBzaDsKKworbmFtZXNwYWNlCit7CisKK2NsYXNzIEZpbmREZWNsYXJlZEdsb2Jh
bHMgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKK3sKKyAgcHVibGljOgorICAgIHN0ZDo6dW5vcmRl
cmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4gbURlY2xhcmVkR2xvYmFsczsKKworICAgIEZpbmRE
ZWNsYXJlZEdsb2JhbHMoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVidWlsZChjb21w
aWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBy
ZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
VEludGVybU5vZGUgKmRlY2xhcmF0b3JOb2RlID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2RlKDApOwor
ICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlICAgPSBudWxscHRyOworCisgICAgICAg
IGlmIChUSW50ZXJtQmluYXJ5ICppbml0Tm9kZSA9IGRlY2xhcmF0b3JOb2RlLT5nZXRBc0JpbmFy
eU5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sTm9kZSA9IGluaXROb2RlLT5n
ZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgc3ltYm9sTm9kZSA9IGRlY2xhcmF0b3JOb2RlLT5nZXRBc1N5
bWJvbE5vZGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChzeW1ib2xOb2RlKTsKKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworCisg
ICAgICAgIG1EZWNsYXJlZEdsb2JhbHMuaW5zZXJ0KCZ2YXIpOworCisgICAgICAgIHJldHVybiB7
ZGVjbE5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZp
c2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUp
IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhl
cn07CisgICAgfQorfTsKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJlYnVpbGQK
K3sKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+ICZtRGVj
bGFyZWRHbG9iYWxzOworICAgIEludmFyaWFudHMgJm1PdXRJbnZhcmlhbnRzOworCisgIHB1Ymxp
YzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4gJmRlY2xhcmVkR2xvYmFscywK
KyAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJbnZhcmlhbnRzKQorICAgICAgICA6IFRJbnRl
cm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCBmYWxzZSksCisgICAgICAgICAgbURlY2xhcmVkR2xv
YmFscyhkZWNsYXJlZEdsb2JhbHMpLAorICAgICAgICAgIG1PdXRJbnZhcmlhbnRzKG91dEludmFy
aWFudHMpCisgICAge30KKworICAgIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uUHJlKAorICAgICAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJmdx
RGVjbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBUSW50ZXJtU3ltYm9sICZzeW1ib2xO
b2RlID0gKmdxRGVjbE5vZGUuZ2V0U3ltYm9sKCk7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAm
dmFyICAgICAgPSBzeW1ib2xOb2RlLnZhcmlhYmxlKCk7CisKKyAgICAgICAgaWYgKGdxRGVjbE5v
ZGUuaXNJbnZhcmlhbnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dEludmFyaWFudHMu
aW5zZXJ0KHZhcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURlY2xhcmVkR2xvYmFscy5m
aW5kKCZ2YXIpID09IG1EZWNsYXJlZEdsb2JhbHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmc3ltYm9sTm9kZX07CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0
RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAg
IFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNp
dEJpdHM6Ok5laXRoZXJ9OworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UK
KworYm9vbCBzaDo6UmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzKFRDb21waWxlciAmY29tcGls
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZy
b290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJm91
dEludmFyaWFudHMpCit7CisgICAgRmluZERlY2xhcmVkR2xvYmFscyBmZGcoY29tcGlsZXIpOwor
ICAgIGlmICghZmRnLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJS
T1IoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFJld3JpdGVyIHJld3Jp
dGVyKGNvbXBpbGVyLCBmZGcubURlY2xhcmVkR2xvYmFscywgb3V0SW52YXJpYW50cyk7CisgICAg
aWYgKCFyZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRl
R2xvYmFsUXVhbGlmaWVyRGVjbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTMxYmNhZmJhNmNmMTdmYTljOThk
NTFlZTg1YzM2ZDMwZTdmNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCkBAIC0wLDAgKzEsNDggQEAKKy8vCisvLyBDb3B5cmln
aHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUdM
T0JBTFFVQUxJRklFUkRFQ0xTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJRVJERUNMU19IXworCisjaW5jbHVk
ZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIFRyYWNrcyBUVmFyaWFibGVzIGFuZCBURmll
bGRzIHRoYXQgYXJlIG1hcmtlZCBhcyAiaW52YXJpYW50Ii4KK2NsYXNzIEludmFyaWFudHMKK3sK
KyAgcHVibGljOgorICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFRWYXJpYWJsZSAmdmFyKSB7IG1JbnZh
cmlhbnRzLmluc2VydCgmdmFyKTsgfQorCisgICAgdm9pZCBpbnNlcnQoY29uc3QgVEZpZWxkICZm
aWVsZCkgeyBtSW52YXJpYW50cy5pbnNlcnQoJmZpZWxkKTsgfQorCisgICAgYm9vbCBjb250YWlu
cyhjb25zdCBUVmFyaWFibGUgJnZhcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtSW52
YXJpYW50cy5maW5kKCZ2YXIpICE9IG1JbnZhcmlhbnRzLmVuZCgpOworICAgIH0KKworICAgIGJv
b2wgY29udGFpbnMoY29uc3QgVEZpZWxkICZmaWVsZCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtSW52YXJpYW50cy5maW5kKCZmaWVsZCkgIT0gbUludmFyaWFudHMuZW5kKCk7CisgICAg
fQorCisgIHByaXZhdGU6CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IHZvaWQgKj4gbUlu
dmFyaWFudHM7Cit9OworCisvLyBUaGlzIHJld3JpdGVzIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJE
ZWNsYXJhdGlvbnMgYXMgVEludGVybURlY2xhcmF0aW9ucy4KKy8vIGBvdXRJbnZhcmlhbnRzYCBp
cyBwb3B1bGF0ZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUg
bG9zdCBieSBzdWNoIGEKKy8vIHRyYW5zZm9ybS4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdy
aXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZh
cmlhbnRzICZvdXRJbnZhcmlhbnRzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUdMT0JB
TFFVQUxJRklFUkRFQ0xTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUw
MTRmNDBmODFjY2FkNTAxMzM3MDY1OGJjODk0MmIwMDJkNmI4ZTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmNwcApAQCAtMCwwICsxLDQzNCBAQAorLy8K
Ky8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworI2luY2x1ZGUgPGNjdHlwZT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUg
PGxpbWl0cz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9z
ZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBz
aDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgordXNpbmcgUmVtYXBwaW5nID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0
IFQgKiwgY29uc3QgVCAqPjsKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJlYnVp
bGQKK3sKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJpbmc+ICZt
S2V5d29yZHM7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBSZW1hcHBpbmc8VEZpZWxkPiBtb2Rp
ZmllZEZpZWxkczsKKyAgICBSZW1hcHBpbmc8VEZpZWxkTGlzdD4gbUZpZWxkTGlzdHM7CisgICAg
UmVtYXBwaW5nPFRGdW5jdGlvbj4gbUZ1bmN0aW9uczsKKyAgICBSZW1hcHBpbmc8VEludGVyZmFj
ZUJsb2NrPiBtSW50ZXJmYWNlQmxvY2tzOworICAgIFJlbWFwcGluZzxUU3RydWN0dXJlPiBtU3Ry
dWN0dXJlczsKKyAgICBSZW1hcHBpbmc8VFZhcmlhYmxlPiBtVmFyaWFibGVzOworICAgIHN0ZDo6
c3RyaW5nIG1OZXdOYW1lQnVmZmVyOworCisgIHByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgSW1tdXRhYmxlU3RyaW5nIG1heWJlQ3JlYXRlTmV3TmFtZShUIGNvbnN0ICZv
YmplY3QpCisgICAgeworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhvYmplY3QsIGZhbHNlKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1JZEdlbi5jcmVhdGVOZXdOYW1lKE5hbWUo
b2JqZWN0KSkucmF3TmFtZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOYW1lKG9iamVj
dCkucmF3TmFtZSgpOworICAgIH0KKworICAgIGNvbnN0IFRGaWVsZCAqY3JlYXRlUmVuYW1lZChj
b25zdCBURmllbGQgJmZpZWxkKQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9CisgICAg
ICAgICAgICBuZXcgVEZpZWxkKGNvbnN0X2Nhc3Q8VFR5cGUgKj4oJmdldFJlbmFtZWRPck9yaWdp
bmFsKCpmaWVsZC50eXBlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVDcmVhdGVO
ZXdOYW1lKGZpZWxkKSwgZmllbGQubGluZSgpLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsK
KworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAgICBjb25zdCBURmllbGRMaXN0
ICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlzdCkKKyAgICB7CisgICAg
ICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVEZpZWxkTGlzdCgpOworICAgICAgICBmb3IgKGNvbnN0
IFRGaWVsZCAqZmllbGQgOiBmaWVsZExpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlbmFt
ZWQtPnB1c2hfYmFjayhjb25zdF9jYXN0PFRGaWVsZCAqPigmZ2V0UmVuYW1lZE9yT3JpZ2luYWwo
KmZpZWxkKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZW5hbWVkOworICAgIH0KKwor
ICAgIGNvbnN0IFRGdW5jdGlvbiAqY3JlYXRlUmVuYW1lZChjb25zdCBURnVuY3Rpb24gJmZ1bmN0
aW9uKQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9CisgICAgICAgICAgICBuZXcgVEZ1
bmN0aW9uKCZtU3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShmdW5jdGlvbiksIFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZnZXRSZW5h
bWVkT3JPcmlnaW5hbChmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbi5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7CisKKyAg
ICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1Db3VudDsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1bmN0aW9uLmdldFBh
cmFtKGkpOworICAgICAgICAgICAgcmVuYW1lZC0+YWRkUGFyYW1ldGVyKCZnZXRSZW5hbWVkT3JP
cmlnaW5hbChwYXJhbSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZ1bmN0aW9uLmlzRGVm
aW5lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZW5hbWVkLT5zZXREZWZpbmVkKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZnVuY3Rpb24uaGFzUHJvdG90eXBlRGVjbGFyYXRpb24o
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1lZC0+c2V0SGFzUHJvdG90eXBlRGVjbGFy
YXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZW5hbWVkOworICAgIH0KKwor
ICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqY3JlYXRlUmVuYW1lZChjb25zdCBUSW50ZXJmYWNl
QmxvY2sgJmludGVyZmFjZUJsb2NrKQorICAgIHsKKyAgICAgICAgVExheW91dFF1YWxpZmllciBs
YXlvdXRRdWFsaWZpZXIgPSBUTGF5b3V0UXVhbGlmaWVyOjpDcmVhdGUoKTsKKyAgICAgICAgbGF5
b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3Jh
Z2UoKTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJpbmRpbmcgICAgICAgICAgPSBpbnRlcmZh
Y2VCbG9jay5ibG9ja0JpbmRpbmcoKTsKKworICAgICAgICBhdXRvICpyZW5hbWVkID0KKyAgICAg
ICAgICAgIG5ldyBUSW50ZXJmYWNlQmxvY2soJm1TeW1ib2xUYWJsZSwgbWF5YmVDcmVhdGVOZXdO
YW1lKGludGVyZmFjZUJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdl
dFJlbmFtZWRPck9yaWdpbmFsKGludGVyZmFjZUJsb2NrLmZpZWxkcygpKSwgbGF5b3V0UXVhbGlm
aWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUlu
dGVybmFsLCBpbnRlcmZhY2VCbG9jay5leHRlbnNpb24oKSk7CisKKyAgICAgICAgcmV0dXJuIHJl
bmFtZWQ7CisgICAgfQorCisgICAgY29uc3QgVFN0cnVjdHVyZSAqY3JlYXRlUmVuYW1lZChjb25z
dCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBhdXRvICpyZW5hbWVkID0K
KyAgICAgICAgICAgIG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3
TmFtZShzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdldFJlbmFtZWRP
ck9yaWdpbmFsKHN0cnVjdHVyZS5maWVsZHMoKSksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwp
OworCisgICAgICAgIHJlbmFtZWQtPnNldEF0R2xvYmFsU2NvcGUoc3RydWN0dXJlLmF0R2xvYmFs
U2NvcGUoKSk7CisKKyAgICAgICAgcmV0dXJuIHJlbmFtZWQ7CisgICAgfQorCisgICAgY29uc3Qg
VFR5cGUgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVFR5cGUgJnR5cGUpCisgICAgeworICAgICAgICBU
VHlwZSAqcmVuYW1lZDsKKworICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJl
ID0gdHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1lZCA9IG5l
dyBUVHlwZSgmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoKnN0cnVjdHVyZSksIHR5cGUuaXNTdHJ1Y3RT
cGVjaWZpZXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3QgVEludGVyZmFj
ZUJsb2NrICppbnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmVuYW1lZCA9IG5ldyBUVHlwZSgmZ2V0UmVuYW1lZE9yT3JpZ2lu
YWwoKmludGVyZmFjZUJsb2NrKSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOyAgLy8g
Q2FuJ3QgcmVuYW1lIGJ1aWx0LWluIHR5cGVzLgorICAgICAgICAgICAgcmVuYW1lZCA9IG51bGxw
dHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlbmFtZWQtPm1ha2VBcnJheXModHlwZS5nZXRBcnJheVNpemVzKCkpOwor
ICAgICAgICB9CisgICAgICAgIHJlbmFtZWQtPnNldFByZWNpc2UodHlwZS5pc1ByZWNpc2UoKSk7
CisgICAgICAgIHJlbmFtZWQtPnNldEludmFyaWFudCh0eXBlLmlzSW52YXJpYW50KCkpOworICAg
ICAgICByZW5hbWVkLT5zZXRNZW1vcnlRdWFsaWZpZXIodHlwZS5nZXRNZW1vcnlRdWFsaWZpZXIo
KSk7CisgICAgICAgIHJlbmFtZWQtPnNldExheW91dFF1YWxpZmllcih0eXBlLmdldExheW91dFF1
YWxpZmllcigpKTsKKworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAgICBjb25z
dCBUVmFyaWFibGUgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJsZSkKKyAg
ICB7CisgICAgICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUs
IG1heWJlQ3JlYXRlTmV3TmFtZSh2YXJpYWJsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZnZXRSZW5hbWVkT3JPcmlnaW5hbCh2YXJpYWJsZS5nZXRUeXBlKCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUlu
dGVybmFsLCB2YXJpYWJsZS5leHRlbnNpb24oKSk7CisKKyAgICAgICAgcmV0dXJuIHJlbmFtZWQ7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCAqdHJ5R2V0
UmVuYW1lZEltcGwoY29uc3QgVCAmb2JqZWN0LCBSZW1hcHBpbmc8VD4gKnJlbWFwcGluZykKKyAg
ICB7CisgICAgICAgIGlmICghbmVlZHNSZW5hbWluZyhvYmplY3QsIHRydWUpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChy
ZW1hcHBpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXQgPSByZW1hcHBpbmctPmZp
bmQoJm9iamVjdCk7CisgICAgICAgICAgICBpZiAoaXQgIT0gcmVtYXBwaW5nLT5lbmQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFQgKnJlbmFtZWRPYmplY3QgPSBjcmVh
dGVSZW5hbWVkKG9iamVjdCk7CisKKyAgICAgICAgaWYgKHJlbWFwcGluZykKKyAgICAgICAgewor
ICAgICAgICAgICAgKCpyZW1hcHBpbmcpWyZvYmplY3RdID0gcmVuYW1lZE9iamVjdDsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZW5hbWVkT2JqZWN0OworICAgIH0KKworICAgIGNvbnN0
IFRGaWVsZCAqdHJ5R2V0UmVuYW1lZChjb25zdCBURmllbGQgJmZpZWxkKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZpZWxkLCAmbW9kaWZpZWRGaWVsZHMpOworICAg
IH0KKworICAgIGNvbnN0IFRGaWVsZExpc3QgKnRyeUdldFJlbmFtZWQoY29uc3QgVEZpZWxkTGlz
dCAmZmllbGRMaXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZp
ZWxkTGlzdCwgJm1GaWVsZExpc3RzKTsKKyAgICB9CisKKyAgICBjb25zdCBURnVuY3Rpb24gKnRy
eUdldFJlbmFtZWQoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRyeUdldFJlbmFtZWRJbXBsKGZ1bmMsICZtRnVuY3Rpb25zKTsKKyAgICB9CisKKyAgICBjb25z
dCBUSW50ZXJmYWNlQmxvY2sgKnRyeUdldFJlbmFtZWQoY29uc3QgVEludGVyZmFjZUJsb2NrICZp
bnRlcmZhY2VCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbChp
bnRlcmZhY2VCbG9jaywgJm1JbnRlcmZhY2VCbG9ja3MpOworICAgIH0KKworICAgIGNvbnN0IFRT
dHJ1Y3R1cmUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHN0cnVjdHVyZSwgJm1TdHJ1Y3R1
cmVzKTsKKyAgICB9CisKKyAgICBjb25zdCBUVHlwZSAqdHJ5R2V0UmVuYW1lZChjb25zdCBUVHlw
ZSAmdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh0eXBlLCBz
dGF0aWNfY2FzdDxSZW1hcHBpbmc8VFR5cGU+ICo+KG51bGxwdHIpKTsKKyAgICB9CisKKyAgICBj
b25zdCBUVmFyaWFibGUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJsZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh2YXJpYWJsZSwgJm1WYXJp
YWJsZXMpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNvbnN0IFQg
JmdldFJlbmFtZWRPck9yaWdpbmFsKGNvbnN0IFQgJm9iamVjdCkKKyAgICB7CisgICAgICAgIGNv
bnN0IFQgKnJlbmFtZWQgPSB0cnlHZXRSZW5hbWVkKG9iamVjdCk7CisgICAgICAgIGlmIChyZW5h
bWVkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlbmFtZWQ7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKyAgICBib29sIG5lZWRzUmVuYW1pbmdJbXBsKGNvbnN0IFQgJm9iamVjdCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IG9iamVjdC5zeW1ib2xU
eXBlKCk7CisgICAgICAgIHN3aXRjaCAoc3ltYm9sVHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY2FzZSBTeW1ib2xUeXBlOjpCdWlsdEluOgorICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBl
OjpBbmdsZUludGVybmFsOgorICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpFbXB0eToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNhc2UgU3ltYm9sVHlw
ZTo6VXNlckRlZmluZWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZSA9IE5hbWUob2JqZWN0KS5yYXdOYW1lKCk7
CisgICAgICAgIGlmIChtS2V5d29yZHMuZmluZChuYW1lKSAhPSBtS2V5d29yZHMuZW5kKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG5hbWUuYmVnaW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZpeCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBURmllbGQgJmZpZWxkLCBi
b29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5n
SW1wbChmaWVsZCkgfHwgKHJlY3Vyc2l2ZSAmJiBuZWVkc1JlbmFtaW5nKCpmaWVsZC50eXBlKCks
IHRydWUpKTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEZpZWxkTGlz
dCAmZmllbGRMaXN0LCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChyZWN1cnNpdmUpOworICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZExp
c3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKCpmaWVsZCwgdHJ1
ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJv
b2wgbmVlZHNSZW5hbWluZyhjb25zdCBURnVuY3Rpb24gJmZ1bmN0aW9uLCBib29sIHJlY3Vyc2l2
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nSW1wbChmdW5jdGlvbikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFyZWN1cnNpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHNpemVfdCBwYXJhbUNvdW50ID0gZnVuY3Rpb24u
Z2V0UGFyYW1Db3VudCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291
bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZwYXJhbSA9
ICpmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKHBh
cmFtLCB0cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZh
Y2VCbG9jaywgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbmVl
ZHNSZW5hbWluZ0ltcGwoaW50ZXJmYWNlQmxvY2spIHx8CisgICAgICAgICAgICAgICAocmVjdXJz
aXZlICYmIG5lZWRzUmVuYW1pbmcoaW50ZXJmYWNlQmxvY2suZmllbGRzKCksIHRydWUpKTsKKyAg
ICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
LCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1JlbmFt
aW5nSW1wbChzdHJ1Y3R1cmUpIHx8CisgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIG5lZWRz
UmVuYW1pbmcoc3RydWN0dXJlLmZpZWxkcygpLCB0cnVlKSk7CisgICAgfQorCisgICAgYm9vbCBu
ZWVkc1JlbmFtaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmVlZHNSZW5hbWluZygqc3Ry
dWN0dXJlLCByZWN1cnNpdmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNvbnN0IFRJ
bnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldEludGVyZmFjZUJsb2NrKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nKCppbnRlcmZhY2VC
bG9jaywgcmVjdXJzaXZlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgbmVl
ZHNSZW5hbWluZyhjb25zdCBUVmFyaWFibGUgJnZhcmlhYmxlLCBib29sIHJlY3Vyc2l2ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nSW1wbCh2YXJpYWJsZSkgfHwK
KyAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZyh2YXJpYWJsZS5nZXRU
eXBlKCksIHRydWUpKTsKKyAgICB9CisKKyAgcHVibGljOgorICAgIFJld3JpdGVyKFRDb21waWxl
ciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5n
PiAma2V5d29yZHMpCisgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0
cnVlKSwgbUtleXdvcmRzKGtleXdvcmRzKSwgbUlkR2VuKGlkR2VuKQorICAgIHt9CisKKyAgICBQ
b3N0UmVzdWx0IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpCisgICAgewor
ICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUudmFyaWFibGUoKTsKKyAg
ICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodmFyLCB0cnVlKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVFZhcmlhYmxlICZyVmFyID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodmFyKTsKKyAg
ICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1TeW1ib2woJnJWYXIpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBzeW1ib2xOb2RlOworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRG
dW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUp
CisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS5n
ZXRGdW5jdGlvbigpOworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhmdW5jLCB0cnVlKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZyRnVuYyA9IGdldFJlbmFtZWRP
ck9yaWdpbmFsKGZ1bmMpOworICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybUZ1bmN0aW9u
UHJvdG90eXBlKCZyRnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZ1bmNQcm90b05v
ZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3Qo
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVuY0Rl
Zk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZm
dW5jICAgICAgICAgICAgICAgICAgID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24oKTsKKyAg
ICAgICAgaWYgKG5lZWRzUmVuYW1pbmcoZnVuYywgdHJ1ZSkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsK
KyAgICAgICAgICAgIGF1dG8gKnJGdW5jUHJvdG9Ob2RlICAgPSBuZXcgVEludGVybUZ1bmN0aW9u
UHJvdG90eXBlKCZyRnVuYyk7CisgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uKHJGdW5jUHJvdG9Ob2RlLCBmdW5jRGVmTm9kZS5nZXRCb2R5KCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmdW5jRGVmTm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVz
dWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZhZ2dyZWdhdGVOb2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0ZU5vZGUuaXNDb25zdHJ1Y3Rvcigp
KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGFnZ3JlZ2F0ZU5v
ZGUuZ2V0VHlwZSgpOworICAgICAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodHlwZSwgdHJ1ZSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJUeXBlID0gZ2V0
UmVuYW1lZE9yT3JpZ2luYWwodHlwZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1B
Z2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKHJUeXBlLCBhZ2dyZWdhdGVOb2RlLmdldFNlcXVl
bmNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0ZU5vZGUuZ2V0
RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRydWUpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBn
ZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFnZ3Jl
Z2F0ZU5vZGUuZ2V0T3AoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwockZ1bmMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFnZ3JlZ2F0ZU5vZGUuZ2V0U2VxdWVuY2UoKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZVJhd0Z1
bmN0aW9uQ2FsbChyRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5j
ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUJ1aWx0SW5GdW5jdGlvbkNhbGwo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgckZ1bmMsIGFnZ3JlZ2F0ZU5vZGUuZ2V0U2Vx
dWVuY2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBhZ2dyZWdhdGVOb2RlOworICAgIH0KK307CisKK30gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6UmV3cml0
ZUtleXdvcmRzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJp
bmc+ICZrZXl3b3JkcykKK3sKKyAgICBSZXdyaXRlciByZXdyaXRlcihjb21waWxlciwgaWRHZW4s
IGtleXdvcmRzKTsKKyAgICBpZiAoIXJld3JpdGVyLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdy
aXRlS2V5d29yZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTYyYmM3OWI0MTE4ZjljNzQ0NzVjMjY4YjY5ZGU2
MjVjNTdmNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jk
cy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNM
QVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCisjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVLRVlXT1JEU19I
XworCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKworbmFtZXNwYWNl
IHNoCit7CisKKy8vIFRoaXMgd2Fsa3MgdGhlIHRyZWUgYW5kIHJlbmFtZXMgYWxsIG5hbWVzIHRo
YXQgY29uZmxpY3Qgd2l0aCB0aGUgaW5wdXQgYGtleXdvcmRzYC4KK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBSZXdyaXRlS2V5d29yZHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJsZVN0cmluZz4gJmtl
eXdvcmRzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVPdXRBcmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWMwMzdkNTI5MGFkZjIzMjI1ZWI4OGRkMGZiNzc4
OWFhZTU0ZDJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdz
LmNwcApAQCAtMCwwICsxLDIwNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2lu
ZyBuYW1lc3BhY2Ugc2g7CisKK25hbWVzcGFjZQoreworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFNtYWxsTXVsdGlTZXQKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBFbnRyeQorICAg
IHsKKyAgICAgICAgVCBlbGVtOworICAgICAgICBzaXplX3QgY291bnQ7CisgICAgfTsKKworICAg
IGNvbnN0IEVudHJ5ICpmaW5kKGNvbnN0IFQgJngpIGNvbnN0CisgICAgeworICAgICAgICBmb3Ig
KGF1dG8gJmVudHJ5IDogbUVudHJpZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh4ID09
IGVudHJ5LmVsZW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICZlbnRy
eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBzaXplX3QgbXVsdGlwbGljaXR5KGNvbnN0IFQgJngpIGNvbnN0CisgICAgewor
ICAgICAgICBjb25zdCBFbnRyeSAqZW50cnkgPSBmaW5kKHgpOworICAgICAgICByZXR1cm4gZW50
cnkgPyBlbnRyeS0+Y291bnQgOiAwOworICAgIH0KKworICAgIGNvbnN0IEVudHJ5ICZpbnNlcnQo
Y29uc3QgVCAmeCkKKyAgICB7CisgICAgICAgIEVudHJ5ICplbnRyeSA9IGZpbmRNdXRhYmxlKHgp
OworICAgICAgICBpZiAoZW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrZW50cnktPmNv
dW50OworICAgICAgICAgICAgcmV0dXJuICplbnRyeTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1FbnRyaWVzLnB1c2hfYmFjayh7eCwgMX0pOworICAg
ICAgICAgICAgcmV0dXJuIG1FbnRyaWVzLmJhY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgY2xlYXIoKSB7IG1FbnRyaWVzLmNsZWFyKCk7IH0KKworICAgIGJvb2wgZW1wdHkoKSBj
b25zdCB7IHJldHVybiBtRW50cmllcy5lbXB0eSgpOyB9CisKKyAgICBzaXplX3QgdW5pcXVlU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1FbnRyaWVzLnNpemUoKTsgfQorCisgIHByaXZhdGU6CisgICAg
QU5HTEVfSU5MSU5FIEVudHJ5ICpmaW5kTXV0YWJsZShjb25zdCBUICZ4KSB7IHJldHVybiBjb25z
dF9jYXN0PEVudHJ5ICo+KGZpbmQoeCkpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3Rv
cjxFbnRyeT4gbUVudHJpZXM7Cit9OworCitjb25zdCBUVmFyaWFibGUgKkdldFZhcmlhYmxlKFRJ
bnRlcm1Ob2RlICZub2RlKQoreworICAgIFRJbnRlcm1UeXBlZCAqdHlOb2RlID0gbm9kZS5nZXRB
c1R5cGVkKCk7CisgICAgQVNTRVJUKHR5Tm9kZSk7CisgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5
bWJvbCA9IHR5Tm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAgeworICAgICAgICByZXR1cm4g
JnN5bWJvbC0+dmFyaWFibGUoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Ns
YXNzIFJld3JpdGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgU21hbGxNdWx0aVNl
dDxjb25zdCBUVmFyaWFibGUgKj4gbVZhckJ1ZmZlcjsgIC8vIHJldXNhYmxlIGJ1ZmZlcgorICAg
IFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKworICBwdWJsaWM6CisgICAgflJld3JpdGVyKCkgb3Zl
cnJpZGUgeyBBU1NFUlQobVZhckJ1ZmZlci5lbXB0eSgpKTsgfQorCisgICAgUmV3cml0ZXIoVENv
bXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDogVEludGVy
bVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisg
ICAge30KKworICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdh
dGUgJmFnZ3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobVZhckJ1
ZmZlci5lbXB0eSgpKTsKKworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBhZ2dyZWdh
dGVOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmICghZnVuYykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgICAgIH0KKworICAgICAgICBUSW50
ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpOworICAgICAg
ICBzaXplX3QgYXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKworICAgICAgICBhdXRvIGdl
dFBhcmFtUXVhbGlmaWVyID0gWyZdKHNpemVfdCBpKSB7CisgICAgICAgICAgICBjb25zdCBUVmFy
aWFibGUgJnBhcmFtICAgICA9ICpmdW5jLT5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGNvbnN0
IFRUeXBlICZwYXJhbVR5cGUgICAgID0gcGFyYW0uZ2V0VHlwZSgpOworICAgICAgICAgICAgY29u
c3QgVFF1YWxpZmllciBwYXJhbVF1YWwgPSBwYXJhbVR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAg
ICAgICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIFRRdWFsaWZpZXI6OkV2cU91dDoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cUluT3V0OgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xFbnYuaXNSZWZl
cmVuY2UocGFyYW0pKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZShwYXJhbSwgQWRkcmVzc1NwYWNlOjpUaHJl
YWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBhcmFtUXVhbDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBib29sIG1pZ2h0QWxpYXMgPSBmYWxzZTsKKworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRR
dWFsaWZpZXIgcGFyYW1RdWFsID0gZ2V0UGFyYW1RdWFsaWZpZXIoaSk7CisKKyAgICAgICAgICAg
IHN3aXRjaCAocGFyYW1RdWFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxT3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
SW5PdXQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFy
aWFibGUgKnZhciA9IEdldFZhcmlhYmxlKCphcmdzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1WYXJCdWZmZXIuaW5zZXJ0KHZhcikuY291bnQgPiAxKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtaWdodEFsaWFzID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGkgICAgICAgICAgPSBhcmdDb3VudDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgYm9vbCBoYXNJbmRldGVybWluYXRlVmFy
ID0gbVZhckJ1ZmZlci5maW5kKG51bGxwdHIpOworCisgICAgICAgIGlmICghbWlnaHRBbGlhcykK
KyAgICAgICAgeworICAgICAgICAgICAgbWlnaHRBbGlhcyA9IGhhc0luZGV0ZXJtaW5hdGVWYXIg
JiYgbVZhckJ1ZmZlci51bmlxdWVTaXplKCkgPiAxOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1pZ2h0QWxpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJnQ291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQgKmFyZyA9IGFyZ3NbaV0tPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoYXJnKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhciAgICAgICA9IEdl
dFZhcmlhYmxlKCphcmcpOworICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcGFyYW1R
dWFsID0gZ2V0UGFyYW1RdWFsaWZpZXIoaSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFzSW5k
ZXRlcm1pbmF0ZVZhciB8fCBtVmFyQnVmZmVyLm11bHRpcGxpY2l0eSh2YXIpID4gMSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyYW1RdWFsKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cU91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gJm1TeW1i
b2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgib3V0IiksIGFyZy0+Z2V0VHlwZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXthcmd9KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUUXVh
bGlmaWVyOjpFdnFJbk91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0g
Jm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5hbWUoImlub3V0IiksIGFyZy0+Z2V0VHlwZSgpLCAqbmV3IFRJbnRlcm1TZXF1
ZW5jZXthcmd9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1WYXJCdWZmZXIuY2xlYXIoKTsKKworICAgICAg
ICByZXR1cm4gYWdncmVnYXRlTm9kZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK2Jvb2wgc2g6OlJld3JpdGVPdXRBcmdzKFRDb21waWxlciAmY29tcGlsZXIsIFRJ
bnRlcm1CbG9jayAmcm9vdCwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCit7CisgICAgUmV3cml0ZXIg
cmV3cml0ZXIoY29tcGlsZXIsIHN5bWJvbEVudik7CisgICAgaWYgKCFyZXdyaXRlci5yZWJ1aWxk
Um9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4MmI3NDdhM2U3ZGVm
ZTI0YmRiNTllNjIxY2E3NDUwZTMxY2Q0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvUmV3cml0ZU91dEFyZ3MuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVPVVRBUkdT
X0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JF
V1JJVEVPVVRBUkdTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVy
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIGUuZy46
CisvLyAgICAvKnZvaWQgZm9vKG91dCBpbnQgeCwgaW5vdXQgaW50IHkpKi8KKy8vICAgIGZvbyh6
LCB3KTsKKy8vIGJlY29tZXMKKy8vICAgIGZvbyhPdXQoeiksIEluT3V0KHcpKTsKKy8vIHVubGVz
cyBgemAgYW5kIGB3YCBhcmUgZGV0ZWN0ZWQgdG8gbmV2ZXIgYWxpYXMuCisvLyBUaGUgdHJhbnNs
YXRlZCBleGFtcGxlIGVmZmVjdGl2ZWx5IGJlaGF2ZXMgdGhlIHNhbWUgYXM6CisvLyAgICBpbnQg
XzE7CisvLyAgICBpbnQgXzIgPSB3OworLy8gICAgZm9vKF8xLCBfMik7CisvLyAgICB6ID0gXzE7
CisvLyAgICB3ID0gXzI7CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZU91dEFyZ3MoVENv
bXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290LCBTeW1ib2xFbnYgJnN5bWJvbEVu
dik7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVPVVRBUkdTX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBp
cGVsaW5lcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzYzN2UyMzMwMGFiOTllMTBmYjgwYWM4ZjVmZjBjNmUx
ODA2NjFjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVz
LmNwcApAQCAtMCwwICsxLDkzOCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGNzdHJpbmc+Cisj
aW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQ
aXBlbGluZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5l
Tm9PcHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9GaW5kTWFp
bi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVp
bGQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2
ZXJzZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK25hbWVzcGFjZQoreworCit1c2luZyBWYXJpYWJsZVNldCAgPSBzdGQ6OnVub3JkZXJlZF9z
ZXQ8Y29uc3QgVFZhcmlhYmxlICo+OwordXNpbmcgVmFyaWFibGVMaXN0ID0gc3RkOjp2ZWN0b3I8
Y29uc3QgVFZhcmlhYmxlICo+OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitzdHJ1Y3Qg
UGlwZWxpbmVTdHJ1Y3RJbmZvCit7CisgICAgVmFyaWFibGVTZXQgcGlwZWxpbmVWYXJpYWJsZXM7
CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3Q7CisgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKyAgICBjb25z
dCBURnVuY3Rpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBudWxscHRyOworCisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChwaXBlbGluZVN0cnVjdC5pc1Rv
dGFsbHlFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocGlwZWxpbmVWYXJp
YWJsZXMuZW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZVN0cnVjdC5p
c1RvdGFsbHlGdWxsKCkpOworICAgICAgICAgICAgQVNTRVJUKCFwaXBlbGluZVZhcmlhYmxlcy5l
bXB0eSgpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK307
CisKK2NsYXNzIEdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3QgOiBwcml2YXRlIFRJbnRlcm1SZWJ1aWxk
Cit7CisgIHByaXZhdGU6CisgICAgY29uc3QgUGlwZWxpbmUgJm1QaXBlbGluZTsKKyAgICBTeW1i
b2xFbnYgJm1TeW1ib2xFbnY7CisgICAgSW52YXJpYW50cyAmbUludmFyaWFudHM7CisgICAgVmFy
aWFibGVMaXN0IG1QaXBlbGluZVZhcmlhYmxlTGlzdDsKKyAgICBJZEdlbiAmbUlkR2VuOworICAg
IFBpcGVsaW5lU3RydWN0SW5mbyBtSW5mbzsKKworICBwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
RXhlYyhQaXBlbGluZVN0cnVjdEluZm8gJm91dCwKKyAgICAgICAgICAgICAgICAgICAgIFRDb21w
aWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3Qs
CisgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICBTeW1ib2xF
bnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFu
dHMpCisgICAgeworICAgICAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0IHNlbGYoY29tcGlsZXIs
IGlkR2VuLCBwaXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzKTsKKyAgICAgICAgaWYgKCFz
ZWxmLmV4ZWMocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBvdXQgPSBzZWxmLm1JbmZvOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0KFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMpCisgICAgICAgIDogVEludGVy
bVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpLAorICAgICAgICAgIG1QaXBlbGluZShwaXBl
bGluZSksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAgICAgIG1JbnZh
cmlhbnRzKGludmFyaWFudHMpLAorICAgICAgICAgIG1JZEdlbihpZEdlbikKKyAgICB7fQorCisg
ICAgYm9vbCBleGVjKFRJbnRlcm1CbG9jayAmcm9vdCkKKyAgICB7CisgICAgICAgIGlmICghcmVi
dWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtSW5mby5waXBlbGluZVZhcmlhYmxlcy5lbXB0eSgpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAmcGlwZWxp
bmVTdHJ1Y3QgPSBbJl0oKSAtPiBjb25zdCBUU3RydWN0dXJlICYgeworICAgICAgICAgICAgaWYg
KG1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKm1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhci0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlcm5hbFBpcGVsaW5lU3RydWN0KHJvb3Qs
IHNlcSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0oKTsKKworICAgICAgICBNb2RpZmllZFN0
cnVjdE1hY2hpbmVyaWVzIG1vZGlmaWVkTWFjaGluZXJpZXM7CisgICAgICAgIGNvbnN0IGJvb2wg
bW9kaWZpZWQgPSBUcnlDcmVhdGVNb2RpZmllZFN0cnVjdCgKKyAgICAgICAgICAgIG1TeW1ib2xF
bnYsIG1JZEdlbiwgbVBpcGVsaW5lLmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCksIHBpcGVs
aW5lU3RydWN0LAorICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdFR5cGVOYW1lKFBpcGVs
aW5lOjpWYXJpYW50OjpNb2RpZmllZCksIG1vZGlmaWVkTWFjaGluZXJpZXMpOworCisgICAgICAg
IGlmIChtb2RpZmllZCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZS50
eXBlICE9IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKTsKKyAgICAgICAgICAgIEFTU0VSVCghbVBp
cGVsaW5lLmdsb2JhbEluc3RhbmNlVmFyKTsgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBieSBj
b25zdHJ1Y3Rpb24uCisKKyAgICAgICAgICAgIGF1dG8gZ2V0RnVuY3Rpb24gPSBbXShzaDo6VElu
dGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZnVuY0RlY2wpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZnVuY0RlY2wgPyBmdW5jRGVjbC0+Z2V0RnVuY3Rpb24oKSA6IG51bGxwdHI7CisgICAgICAg
ICAgICB9OworCisgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1vZGlmaWVkTWFjaGlu
ZXJpZXMuc2l6ZSgpOworICAgICAgICAgICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkgPSBtb2Rp
ZmllZE1hY2hpbmVyaWVzLmF0KGkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtYWNoaW5lcnku
bW9kaWZpZWRTdHJ1Y3QpOworCisgICAgICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhuZXcgVElu
dGVybURlY2xhcmF0aW9ueworICAgICAgICAgICAgICAgICAgICAmQ3JlYXRlU3RydWN0VHlwZVZh
cmlhYmxlKG1TeW1ib2xUYWJsZSwgKm1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCl9KTsKKworICAg
ICAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVyeS5mdW5jT3JpZ2luYWxU
b01vZGlmaWVkKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtYWNoaW5lcnkuZnVuY01v
ZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoX2JhY2sobWFj
aGluZXJ5LmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIW1hY2hpbmVyeS5mdW5jT3JpZ2luYWxUb01vZGlmaWVkKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhtYWNoaW5lcnkuZnVuY01vZGlmaWVkVG9PcmlnaW5h
bCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGkgPT0gc2l6ZSAt
IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW5mby5mdW5jT3Jp
Z2luYWxUb01vZGlmaWVkID0gZ2V0RnVuY3Rpb24obWFjaGluZXJ5LmZ1bmNPcmlnaW5hbFRvTW9k
aWZpZWQpOworICAgICAgICAgICAgICAgICAgICBtSW5mby5mdW5jTW9kaWZpZWRUb09yaWdpbmFs
ID0gZ2V0RnVuY3Rpb24obWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworCisgICAg
ICAgICAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lU3RydWN0LmludGVybmFsID0gJnBpcGVsaW5l
U3RydWN0OworICAgICAgICAgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5leHRlcm5h
bCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA/IG1hY2hpbmVyeS5tb2RpZmll
ZFN0cnVjdCA6ICZwaXBlbGluZVN0cnVjdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtSW5m
by5waXBlbGluZVN0cnVjdC5pbnRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKyAgICAgICAgICAg
IG1JbmZvLnBpcGVsaW5lU3RydWN0LmV4dGVybmFsID0gJnBpcGVsaW5lU3RydWN0OworICAgICAg
ICB9CisKKyAgICAgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgoJnJvb3Qp
LCBzZXEpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAg
IFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNp
dEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlv
blBvc3QoVEludGVybURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIERlY2xhcmF0aW9uIGRlY2wgICAgID0gVmlld0RlY2xhcmF0aW9uKGRlY2xOb2RlKTsKKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworCisg
ICAgICAgIGlmIChtUGlwZWxpbmUudXNlcyh2YXIpKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQobUluZm8ucGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSA9PSBtSW5mby5waXBlbGlu
ZVZhcmlhYmxlcy5lbmQoKSk7CisgICAgICAgICAgICBtSW5mby5waXBlbGluZVZhcmlhYmxlcy5p
bnNlcnQoJnZhcik7CisgICAgICAgICAgICBtUGlwZWxpbmVWYXJpYWJsZUxpc3QucHVzaF9iYWNr
KCZ2YXIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZGVjbE5vZGU7CisgICAgfQorCisgICAgY29uc3QgVFN0cnVjdHVyZSAmY3JlYXRl
SW50ZXJuYWxQaXBlbGluZVN0cnVjdChUSW50ZXJtQmxvY2sgJnJvb3QsIFRJbnRlcm1TZXF1ZW5j
ZSAmb3V0RGVjbFNlcSkKKyAgICB7CisgICAgICAgIGF1dG8gJmZpZWxkcyA9ICpuZXcgVEZpZWxk
TGlzdCgpOworCisgICAgICAgIHN3aXRjaCAobVBpcGVsaW5lLnR5cGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNhc2UgUGlwZWxpbmU6OlR5cGU6OlRleHR1cmU6CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1QaXBlbGluZVZhcmlh
YmxlTGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
bUludmFyaWFudHMuY29udGFpbnMoKnZhcikpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAmdmFyVHlwZSAgICAgICAgID0gdmFyLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRCYXNpY1R5cGUgc2FtcGxlclR5cGUgPSB2YXJUeXBlLmdldEJhc2ljVHlwZSgp
OworCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnRleHR1cmVFbnYgPSBt
U3ltYm9sRW52LmdldFRleHR1cmVFbnYoc2FtcGxlclR5cGUpOworICAgICAgICAgICAgICAgICAg
ICBhdXRvICp0ZXh0dXJlRW52VHlwZSAgICAgICAgID0gbmV3IFRUeXBlKCZ0ZXh0dXJlRW52LCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJUeXBlLmlzQXJyYXkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudlR5cGUt
Pm1ha2VBcnJheXModmFyVHlwZS5nZXRBcnJheVNpemVzKCkpOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2hfYmFjaygKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldyBURmllbGQodGV4dHVyZUVudlR5cGUsIHZhci0+bmFtZSgpLCBrTm9T
b3VyY2VMb2MsIHZhci0+c3ltYm9sVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1Q
aXBlbGluZVZhcmlhYmxlTGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gJnR5cGUgID0gQ2xvbmVUeXBlKHZhci0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byAqZmllbGQgPSBuZXcgVEZpZWxkKCZ0eXBlLCB2YXItPm5hbWUoKSwga05v
U291cmNlTG9jLCB2YXItPnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGZpZWxk
cy5wdXNoX2JhY2soZmllbGQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChtSW52YXJpYW50
cy5jb250YWlucygqdmFyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbUludmFyaWFudHMuaW5zZXJ0KCpmaWVsZCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIE5hbWUgcGlwZWxpbmVTdHJ1Y3ROYW1lID0gbVBpcGVsaW5l
LmdldFN0cnVjdFR5cGVOYW1lKFBpcGVsaW5lOjpWYXJpYW50OjpPcmlnaW5hbCk7CisgICAgICAg
IGF1dG8gJnMgPSAqbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgcGlwZWxpbmVTdHJ1Y3RO
YW1lLnJhd05hbWUoKSwgJmZpZWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwaXBlbGluZVN0cnVjdE5hbWUuc3ltYm9sVHlwZSgpKTsKKworICAgICAgICBvdXREZWNsU2Vx
LnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ueyZDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFi
bGUobVN5bWJvbFRhYmxlLCBzKX0pOworCisgICAgICAgIHJldHVybiBzOworICAgIH0KK307CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1BpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gQ3Jl
YXRlUGlwZWxpbmVNYWluTG9jYWxWYXIoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlw
ZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0cnVjdCkK
K3sKKyAgICBBU1NFUlQocGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKworICAgIFBp
cGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gcGlwZWxpbmVNYWluTG9jYWxWYXI7CisKKyAgICBhdXRv
IHBvcHVsYXRlRXh0ZXJuYWxNYWluTG9jYWxWYXIgPSBbJl0oKSB7CisgICAgICAgIEFTU0VSVCgh
cGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpOworICAgICAgICBwaXBlbGluZU1haW5Mb2Nh
bFZhci5leHRlcm5hbCA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAgc3lt
Ym9sVGFibGUsICpwaXBlbGluZVN0cnVjdC5leHRlcm5hbCwKKyAgICAgICAgICAgIHBpcGVsaW5l
LmdldFN0cnVjdEluc3RhbmNlTmFtZShwaXBlbGluZVN0cnVjdC5pc1VuaWZvcm0oKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBpcGVsaW5lOjpWYXJp
YW50OjpPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCkpOworICAgIH07CisKKyAgICBhdXRv
IHBvcHVsYXRlRGlzdGluY3RJbnRlcm5hbE1haW5Mb2NhbFZhciA9IFsmXSgpIHsKKyAgICAgICAg
QVNTRVJUKCFwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAgICAgIHBpcGVsaW5l
TWFpbkxvY2FsVmFyLmludGVybmFsID0KKyAgICAgICAgICAgICZDcmVhdGVJbnN0YW5jZVZhcmlh
YmxlKHN5bWJvbFRhYmxlLCAqcGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoUGlw
ZWxpbmU6OlZhcmlhbnQ6Ok9yaWdpbmFsKSk7CisgICAgfTsKKworICAgIGlmIChwaXBlbGluZS50
eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorICAgIHsKKyAgICAgICAgcG9wdWxh
dGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHBp
cGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkpCisg
ICAgeworICAgICAgICBwb3B1bGF0ZUV4dGVybmFsTWFpbkxvY2FsVmFyKCk7CisKKyAgICAgICAg
aWYgKHBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpKQorICAgICAgICB7CisgICAgICAgICAgICBw
aXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCA9IHBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVy
bmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcG9w
dWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZSBpZiAoIXBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpKQorICAgIHsKKyAgICAgICAg
cG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgfQorCisgICAgcmV0
dXJuIHBpcGVsaW5lTWFpbkxvY2FsVmFyOworfQorCitjbGFzcyBQaXBlbGluZUZ1bmN0aW9uRW52
Cit7CisgIHByaXZhdGU6CisgICAgVENvbXBpbGVyICZtQ29tcGlsZXI7CisgICAgU3ltYm9sRW52
ICZtU3ltYm9sRW52OworICAgIFRTeW1ib2xUYWJsZSAmbVN5bWJvbFRhYmxlOworICAgIElkR2Vu
ICZtSWRHZW47CisgICAgY29uc3QgUGlwZWxpbmUgJm1QaXBlbGluZTsKKyAgICBjb25zdCBzdGQ6
OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZtUGlwZWxpbmVGdW5jdGlvbnM7Cisg
ICAgY29uc3QgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gbVBpcGVsaW5lU3RydWN0OworICAg
IFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gJm1QaXBlbGluZU1haW5Mb2NhbFZhcjsKKworICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBURnVuY3Rpb24gKiwgY29uc3QgVEZ1bmN0aW9uICo+
IG1GdW5jTWFwOworCisgIHB1YmxpYzoKKyAgICBQaXBlbGluZUZ1bmN0aW9uRW52KFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVu
diwKKyAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJnBpcGVsaW5l
RnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVj
dHVyZT4gcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNj
b3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhcikKKyAgICAgICAgOiBtQ29tcGls
ZXIoY29tcGlsZXIpLAorICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKyAgICAgICAg
ICBtU3ltYm9sVGFibGUoc3ltYm9sRW52LnN5bWJvbFRhYmxlKCkpLAorICAgICAgICAgIG1JZEdl
bihpZEdlbiksCisgICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKyAgICAgICAgICBtUGlw
ZWxpbmVGdW5jdGlvbnMocGlwZWxpbmVGdW5jdGlvbnMpLAorICAgICAgICAgIG1QaXBlbGluZVN0
cnVjdChwaXBlbGluZVN0cnVjdCksCisgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyKHBp
cGVsaW5lTWFpbkxvY2FsVmFyKQorICAgIHt9CisKKyAgICBib29sIGlzT3JpZ2luYWxQaXBlbGlu
ZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtUGlwZWxpbmVGdW5jdGlvbnMuZmluZCgmZnVuYykgIT0gbVBpcGVsaW5lRnVuY3Rpb25z
LmVuZCgpOworICAgIH0KKworICAgIGJvb2wgaXNVcGRhdGVkUGlwZWxpbmVGdW5jdGlvbihjb25z
dCBURnVuY3Rpb24gJmZ1bmMpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ID0gbUZ1bmNN
YXAuZmluZCgmZnVuYyk7CisgICAgICAgIGlmIChpdCA9PSBtRnVuY01hcC5lbmQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biAmZnVuYyA9PSBpdC0+c2Vjb25kOworICAgIH0KKworICAgIGNvbnN0IFRGdW5jdGlvbiAmZ2V0
VXBkYXRlZEZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbihmdW5jKSB8fCBpc1VwZGF0ZWRQaXBlbGlu
ZUZ1bmN0aW9uKGZ1bmMpKTsKKworICAgICAgICBjb25zdCBURnVuY3Rpb24gKm5ld0Z1bmM7CisK
KyAgICAgICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworICAgICAgICBpZiAoaXQg
PT0gbUZ1bmNNYXAuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgaXNN
YWluID0gZnVuYy5pc01haW4oKTsKKworICAgICAgICAgICAgaWYgKGlzTWFpbiAmJiBtUGlwZWxp
bmUuaXNQaXBlbGluZU91dCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VS
VChmdW5jLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFzaWNUeXBlOjpFYnRW
b2lkKTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRDaGFuZ2VS
ZXR1cm5UeXBlKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptUGlwZWxpbmVTdHJ1
Y3QuZXh0ZXJuYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWlu
ICYmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvblZlcnRleEds
b2JhbHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5lLnR5cGUg
PT0gUGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHMpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiB2YXJp
YWJsZXM7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVs
aW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sobmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRh
YmxlLCBmaWVsZC0+bmFtZSgpLCBmaWVsZC0+dHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPnN5bWJvbFR5cGUoKSkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rp
b25BbmRBcHBlbmRQYXJhbXMobVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCB2YXJpYWJsZXMp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGlu
ZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiB2YXJpYWJsZXM7CisgICAg
ICAgICAgICAgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlvbiA9CisgICAg
ICAgICAgICAgICAgICAgICgoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCAqKSZtQ29tcGlsZXIp
LT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
KnRleHR1cmVFbnYgPSBmaWVsZC0+dHlwZSgpLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHRleHR1cmVFbnYgJiYgdGV4dHVyZUVudi0+ZmllbGRzKCkuc2l6ZSgpID09
IDIpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmllbGQgOiB0
ZXh0dXJlRW52LT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUoe2ZpZWxk
LT5uYW1lKCksIHN1YmZpZWxkLT5uYW1lKCl9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRU
eXBlICZ0eXBlICAgICA9ICpuZXcgVFR5cGUoKnN1YmZpZWxkLT50eXBlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCF0eXBlLmlzQXJyYXkoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlLm1ha2VBcnJheXMoZmllbGQtPnR5cGUoKS0+Z2V0QXJyYXlTaXplcygpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gKnZhciA9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUoKSwgJnR5
cGUsIG5hbWUuc3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
cy5wdXNoX2JhY2sodmFyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFk
ZE9yaWdpbmFsTmFtZSh2YXItPnVuaXF1ZUlkKCkuZ2V0KCksIGZpZWxkLT5uYW1lKCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMobVN5bWJvbFRhYmxl
LCBudWxscHRyLCBmdW5jLCB2YXJpYWJsZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0
YW5jZUlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5hbWUgbmFtZSA9IG1QaXBl
bGluZS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlmaWVkKTsK
KyAgICAgICAgICAgICAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUs
IG5hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidFVJbnQpLCBuYW1lLnN5bWJvbFR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgbmV3RnVuYyAgID0gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0o
bVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCAqdmFyKTsKKyAgICAgICAgICAgICAgICBtU3lt
Ym9sRW52Lm1hcmtBc1JlZmVyZW5jZSgqdmFyLCBtUGlwZWxpbmUuZXh0ZXJuYWxBZGRyZXNzU3Bh
Y2UoKSk7CisgICAgICAgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVybmFsID0g
dmFyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBl
bGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtUGlwZWxpbmVNYWluTG9jYWxWYXIu
aXNUb3RhbGx5RnVsbCgpKTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJmZ1bmM7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29uc3QgVFZhcmlhYmxlICp2YXI7CisgICAgICAgICAgICAgICAgQWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZTsKKworICAgICAgICAgICAgICAgIGlmIChpc01haW4gJiYgIW1QaXBlbGluZU1h
aW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbVN5bWJvbFRhYmxlLCAqbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBlbGluZTo6
VmFyaWFudDo6TW9kaWZpZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0g
bVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNlKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAgICAgICAg
bVN5bWJvbFRhYmxlLCAqbVBpcGVsaW5lU3RydWN0LmludGVybmFsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBlbGluZTo6VmFyaWFu
dDo6T3JpZ2luYWwpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gbVBpcGVs
aW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA/IG1QaXBlbGluZS5leHRlcm5hbEFkZHJlc3NTcGFjZSgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFkZHJlc3NTcGFjZTo6VGhyZWFkOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJvb2wgbWFya0FzUmVmZXJlbmNlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaXNNYWluKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaXBlbGluZTo6VHlwZTo6VmVy
dGV4SW46CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpUeXBlOjpGcmFn
bWVudEluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtBc1JlZmVyZW5jZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKG1hcmtBc1JlZmVyZW5jZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG1TeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKCp2YXIsIGFkZHJlc3NTcGFjZSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3RnVuYyA9ICZDbG9uZUZ1bmN0
aW9uQW5kUHJlcGVuZFBhcmFtKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywgKnZhcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1GdW5jTWFwWyZmdW5jXSAgID0gbmV3RnVuYzsK
KyAgICAgICAgICAgIG1GdW5jTWFwW25ld0Z1bmNdID0gbmV3RnVuYzsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld0Z1bmMgPSBpdC0+c2Vjb25kOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICpuZXdGdW5jOworICAgIH0KKworICAgIFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSAqY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKAorICAg
ICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUpCisgICAgeworICAg
ICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS5nZXRGdW5jdGlvbigp
OworICAgICAgICBpZiAoIWlzT3JpZ2luYWxQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpICYmICFpc1Vw
ZGF0ZWRQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5ld0Z1bmMg
PSBnZXRVcGRhdGVkRnVuY3Rpb24oZnVuYyk7CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlKCZuZXdGdW5jKTsKKyAgICB9Cit9OworCitjbGFzcyBVcGRhdGVQaXBl
bGluZUZ1bmN0aW9ucyA6IHByaXZhdGUgVEludGVybVJlYnVpbGQKK3sKKyAgcHJpdmF0ZToKKyAg
ICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworICAgIGNvbnN0IFBpcGVsaW5lU2NvcGVkPFRT
dHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVjdDsKKyAgICBQaXBlbGluZVNjb3BlZDxUVmFyaWFibGU+
ICZtUGlwZWxpbmVNYWluTG9jYWxWYXI7CisgICAgU3ltYm9sRW52ICZtU3ltYm9sRW52OworICAg
IFBpcGVsaW5lRnVuY3Rpb25FbnYgbUVudjsKKyAgICBjb25zdCBURnVuY3Rpb24gKm1GdW5jT3Jp
Z2luYWxUb01vZGlmaWVkOworICAgIGNvbnN0IFRGdW5jdGlvbiAqbUZ1bmNNb2RpZmllZFRvT3Jp
Z2luYWw7CisKKyAgcHVibGljOgorICAgIHN0YXRpYyBib29sIFRocmVhZFBpcGVsaW5lKFRDb21w
aWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5l
ICZwaXBlbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVu
b3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZwaXBlbGluZUZ1bmN0aW9ucywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBl
bGluZVN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3Bl
ZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuY01vZGlmaWVkVG9PcmlnaW5hbCkKKyAg
ICB7CisgICAgICAgIFVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zIHNlbGYoY29tcGlsZXIsIHBpcGVs
aW5lLCBwaXBlbGluZUZ1bmN0aW9ucywgcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVNYWluTG9jYWxWYXIsIGlkR2VuLCBzeW1ib2xF
bnYsIGZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgIGlmICghc2VsZi5yZWJ1
aWxkUm9vdChyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAgIFVw
ZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4g
JnBpcGVsaW5lRnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5l
U2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5lU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gJnBpcGVsaW5lTWFpbkxvY2FsVmFyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdp
bmFsKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksCisg
ICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKyAgICAgICAgICBtUGlwZWxpbmVTdHJ1Y3Qo
cGlwZWxpbmVTdHJ1Y3QpLAorICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhcihwaXBlbGlu
ZU1haW5Mb2NhbFZhciksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAg
ICAgIG1FbnYoY29tcGlsZXIsCisgICAgICAgICAgICAgICBzeW1ib2xFbnYsCisgICAgICAgICAg
ICAgICBpZEdlbiwKKyAgICAgICAgICAgICAgIHBpcGVsaW5lLAorICAgICAgICAgICAgICAgcGlw
ZWxpbmVGdW5jdGlvbnMsCisgICAgICAgICAgICAgICBwaXBlbGluZVN0cnVjdCwKKyAgICAgICAg
ICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhciksCisgICAgICAgICAgbUZ1bmNPcmlnaW5hbFRv
TW9kaWZpZWQoZnVuY09yaWdpbmFsVG9Nb2RpZmllZCksCisgICAgICAgICAgbUZ1bmNNb2RpZmll
ZFRvT3JpZ2luYWwoZnVuY01vZGlmaWVkVG9PcmlnaW5hbCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtUGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKyAgICB9CisKKyAgICBjb25zdCBU
VmFyaWFibGUgJmdldEludGVybmFsUGlwZWxpbmVWYXJpYWJsZShjb25zdCBURnVuY3Rpb24gJnBp
cGVsaW5lRnVuYykKKyAgICB7CisgICAgICAgIGlmIChwaXBlbGluZUZ1bmMuaXNNYWluKCkgJiYg
KG1QaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFtUGlwZWxpbmVNYWlu
TG9jYWxWYXIuaXNVbmlmb3JtKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobVBp
cGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKyAgICAgICAgICAgIHJldHVybiAqbVBpcGVs
aW5lTWFpbkxvY2FsVmFyLmludGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHBpcGVsaW5lRnVuYy5nZXRQYXJhbUNvdW50KCkgPiAw
KTsKKyAgICAgICAgICAgIHJldHVybiAqcGlwZWxpbmVGdW5jLmdldFBhcmFtKDApOworICAgICAg
ICB9CisgICAgfQorCisgICAgY29uc3QgVFZhcmlhYmxlICZnZXRFeHRlcm5hbFBpcGVsaW5lVmFy
aWFibGUoY29uc3QgVEZ1bmN0aW9uICZtYWluRnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCht
YWluRnVuYy5pc01haW4oKSk7CisgICAgICAgIGlmIChtUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0
ZXJuYWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqbVBpcGVsaW5lTWFpbkxvY2Fs
VmFyLmV4dGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKG1haW5GdW5jLmdldFBhcmFtQ291bnQoKSA+IDApOworICAgICAgICAgICAg
cmV0dXJuICptYWluRnVuYy5nZXRQYXJhbSgwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBv
c3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGxOb2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGNhbGxOb2RlLmlzQ29uc3RydWN0b3IoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZvbGRDYWxsZWRG
dW5jID0gKmNhbGxOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICBpZiAoIW1FbnYuaXNP
cmlnaW5hbFBpcGVsaW5lRnVuY3Rpb24ob2xkQ2FsbGVkRnVuYykpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY29uc3QgVEZ1bmN0aW9uICZuZXdDYWxsZWRGdW5jID0gbUVudi5nZXRVcGRhdGVkRnVuY3Rp
b24ob2xkQ2FsbGVkRnVuYyk7CisKKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqb2xkT3du
ZXJGdW5jID0gZ2V0UGFyZW50RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIEFTU0VSVChvbGRPd25l
ckZ1bmMpOworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZuZXdPd25lckZ1bmMgPSBtRW52
LmdldFVwZGF0ZWRGdW5jdGlvbigqb2xkT3duZXJGdW5jKTsKKworICAgICAgICAgICAgcmV0dXJu
ICpUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwoCisgICAgICAgICAgICAgICAg
bmV3Q2FsbGVkRnVuYywgJkNsb25lU2VxdWVuY2VBbmRQcmVwZW5kKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqY2FsbE5vZGUuZ2V0U2VxdWVuY2UoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRlcm5hbFBp
cGVsaW5lVmFyaWFibGUobmV3T3duZXJGdW5jKSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJv
dG90eXBlICZmdW5jUHJvdG9Ob2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKyAgICAgICAgICAgIG1FbnYuY3Jl
YXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90b05vZGUpOworICAgICAgICBpZiAo
bmV3RnVuY1Byb3RvTm9kZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZnVuY1Byb3RvTm9kZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKm5ld0Z1bmNQcm90
b05vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBv
c3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBpZiAoZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb24oKS0+aXNNYWluKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2aXNpdE1haW4oZnVuY0RlZk5vZGUpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZpc2l0Tm9u
TWFpbihmdW5jRGVmTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAm
dmlzaXROb25NYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKQorICAg
IHsKKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2RlID0gKmZ1
bmNEZWZOb2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgICAgIEFTU0VSVCghZnVuY1By
b3RvTm9kZS5nZXRGdW5jdGlvbigpLT5pc01haW4oKSk7CisKKyAgICAgICAgVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKyAgICAgICAgICAgIG1FbnYuY3JlYXRl
VXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90b05vZGUpOworICAgICAgICBpZiAobmV3
RnVuY1Byb3RvTm9kZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZnVuY0RlZk5vZGU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMg
PSAqbmV3RnVuY1Byb3RvTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgQVNTRVJUKCFmdW5j
LmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5jRGVmTm9kZS5n
ZXRCb2R5KCk7CisKKyAgICAgICAgcmV0dXJuICpuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
bihuZXdGdW5jUHJvdG9Ob2RlLCBib2R5KTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAmdmlz
aXRNYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKQorICAgIHsKKyAg
ICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2RlID0gKmZ1bmNEZWZO
b2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgICAgIEFTU0VSVChmdW5jUHJvdG9Ob2Rl
LmdldEZ1bmN0aW9uKCktPmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGUgKm5ld0Z1bmNQcm90b05vZGUgPQorICAgICAgICAgICAgbUVudi5jcmVhdGVVcGRhdGVk
RnVuY3Rpb25Qcm90b3R5cGUoZnVuY1Byb3RvTm9kZSk7CisgICAgICAgIGlmIChuZXdGdW5jUHJv
dG9Ob2RlID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jRGVm
Tm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9ICpuZXdG
dW5jUHJvdG9Ob2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQoZnVuYy5pc01haW4o
KSk7CisKKyAgICAgICAgYXV0byBjYWxsTW9kaWZpZWRUb09yaWdpbmFsID0gWyZdKFRJbnRlcm1C
bG9jayAmYm9keSkgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5p
bnRlcm5hbCk7CisgICAgICAgICAgICBpZiAoIW1QaXBlbGluZS5pc1BpcGVsaW5lT3V0KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1GdW5jTW9kaWZpZWRUb09yaWdp
bmFsKTsKKyAgICAgICAgICAgICAgICBhdXRvICptID0gbmV3IFRJbnRlcm1TeW1ib2woJmdldEV4
dGVybmFsUGlwZWxpbmVWYXJpYWJsZShmdW5jKSk7CisgICAgICAgICAgICAgICAgYXV0byAqbyA9
IG5ldyBUSW50ZXJtU3ltYm9sKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAg
ICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRl
RnVuY3Rpb25DYWxsKAorICAgICAgICAgICAgICAgICAgICAqbUZ1bmNNb2RpZmllZFRvT3JpZ2lu
YWwsIG5ldyBUSW50ZXJtU2VxdWVuY2V7bSwgb30pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICBhdXRvIGNhbGxPcmlnaW5hbFRvTW9kaWZpZWQgPSBbJl0oVEludGVybUJs
b2NrICZib2R5KSB7CisgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlu
dGVybmFsKTsKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtRnVuY09yaWdpbmFsVG9Nb2RpZmll
ZCk7CisgICAgICAgICAgICAgICAgYXV0byAqbyA9IG5ldyBUSW50ZXJtU3ltYm9sKG1QaXBlbGlu
ZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgYXV0byAqbSA9IG5ldyBU
SW50ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpOworICAgICAg
ICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1
bmN0aW9uQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgKm1GdW5jT3JpZ2luYWxUb01vZGlmaWVk
LCBuZXcgVEludGVybVNlcXVlbmNle28sIG19KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisKKyAgICAgICAgVEludGVybUJsb2NrICpib2R5ID0gZnVuY0RlZk5vZGUuZ2V0Qm9keSgpOwor
CisgICAgICAgIGlmIChtUGlwZWxpbmUuYWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFy
YXRpb25Jbk1haW4oKSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1h
aW5Mb2NhbFZhci5pc1RvdGFsbHlGdWxsKCkpOworCisgICAgICAgICAgICBhdXRvICpuZXdCb2R5
ID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVt
ZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFs
fSk7CisKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6
SW52b2NhdGlvblZlcnRleEdsb2JhbHMgfHwKKyAgICAgICAgICAgICAgICBtUGlwZWxpbmUudHlw
ZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyBQb3B1bGF0ZSBzdHJ1Y3QgaW5zdGFuY2Ugd2l0aCBy
ZWZlcmVuY2VzIHRvIGdsb2JhbCBwaXBlbGluZSB2YXJpYWJsZXMuCisgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVs
ZHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gKnZhciAg
ICAgICAgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIGZpZWxkLT5uYW1lKCksIGZpZWxk
LT50eXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmllbGQtPnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gKnN5bWJvbCAg
ICAgPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworICAgICAgICAgICAgICAgICAgICBhdXRvICZh
Y2Nlc3NOb2RlID0gQWNjZXNzRmllbGQoKm1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCwg
dmFyLT5uYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvICphc3NpZ25Ob2RlID0gbmV3
IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZhY2Nlc3NOb2RlLCBzeW1ib2wp
OworICAgICAgICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYXNzaWduTm9k
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAobVBpcGVsaW5lLnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6OlRleHR1cmUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbVBpcGVsaW5l
U3RydWN0LmV4dGVybmFsLT5maWVsZHMoKTsKKworICAgICAgICAgICAgICAgIEFTU0VSVChmdW5j
LmdldFBhcmFtQ291bnQoKSA+PSAyICogZmllbGRzLnNpemUoKSk7CisgICAgICAgICAgICAgICAg
c2l6ZV90IHBhcmFtSW5kZXggPSBmdW5jLmdldFBhcmFtQ291bnQoKSAtIDIgKiBmaWVsZHMuc2l6
ZSgpOworCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogZmllbGRz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxl
ICZ0ZXh0dXJlUGFyYW0gPSAqZnVuYy5nZXRQYXJhbShwYXJhbUluZGV4KyspOworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnNhbXBsZXJQYXJhbSA9ICpmdW5jLmdldFBhcmFt
KHBhcmFtSW5kZXgrKyk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBnbyA9IFsmXShUSW50
ZXJtVHlwZWQgJmVudiwgY29uc3QgaW50ICppbmRleCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkICZ0ZXh0dXJlRmllbGQgPSBBY2Nlc3NGaWVsZCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4KSwgSW1t
dXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIikpOworICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkICZzYW1wbGVyRmllbGQgPSBBY2Nlc3NGaWVsZCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4KSwgSW1tdXRhYmxlU3Ry
aW5nKCJzYW1wbGVyIikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG1rQXNzaWdu
ID0gWyZdKFRJbnRlcm1UeXBlZCAmZmllbGQsIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJh
dG9yOjpFT3BBc3NpZ24sICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
YW1lKCJhZGRyZXNzb2YiKSwgZmllbGQuZ2V0VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2VxdWVuY2V7
JkFjY2Vzc0luZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVN5bWJvbCgmcGFyYW0pLCBpbmRleCl9KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3NpZ24odGV4dHVyZUZpZWxkLCB0ZXh0dXJlUGFy
YW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudCht
a0Fzc2lnbihzYW1wbGVyRmllbGQsIHNhbXBsZXJQYXJhbSkpOworICAgICAgICAgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZW52ID0gQWNjZXNzRmll
bGQoKm1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCwgZmllbGQtPm5hbWUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZlbnZUeXBlID0gZW52LmdldFR5cGUoKTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZW52VHlwZS5pc0FycmF5KCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZW52VHlwZS5pc0FycmF5
T2ZBcnJheXMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIG4gPSBzdGF0
aWNfY2FzdDxpbnQ+KGVudlR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvKGVudiwgJmkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZ28oZW52LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZS50
eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybUJpbmFyeSgKKyAg
ICAgICAgICAgICAgICAgICAgVE9wZXJhdG9yOjpFT3BBc3NpZ24sCisgICAgICAgICAgICAgICAg
ICAgICZBY2Nlc3NGaWVsZEJ5SW5kZXgoKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRlcm5hbFBp
cGVsaW5lVmFyaWFibGUoZnVuYykpLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgJkFzVHlwZSht
U3ltYm9sRW52LCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVsaW5lVmFy
aWFibGUoZnVuYykpKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIW1Q
aXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1EZWNsYXJhdGlvbntt
UGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWx9KTsKKyAgICAgICAgICAgICAgICBjYWxsTW9k
aWZpZWRUb09yaWdpbmFsKCpuZXdCb2R5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGJvZHkpOworCisgICAgICAgICAgICBpZiAoIW1QaXBl
bGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5pc1BpcGVsaW5lT3V0KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJh
bmNoKAorICAgICAgICAgICAgICAgICAgICBUT3BlcmF0b3I6OkVPcFJldHVybiwgbmV3IFRJbnRl
cm1TeW1ib2wobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVybmFsKSkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBib2R5ID0gbmV3Qm9keTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQoIW1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCk7CisgICAgICAg
ICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKworICAgICAgICAg
ICAgYXV0byAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgIG5ld0Jv
ZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0aW9ue21QaXBlbGluZU1haW5M
b2NhbFZhci5pbnRlcm5hbH0pOworICAgICAgICAgICAgY2FsbE1vZGlmaWVkVG9PcmlnaW5hbCgq
bmV3Qm9keSk7CisgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYm9keSk7Cisg
ICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5KTsKKyAgICAgICAgICAg
IGJvZHkgPSBuZXdCb2R5OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICpuZXcgVEludGVy
bUZ1bmN0aW9uRGVmaW5pdGlvbihuZXdGdW5jUHJvdG9Ob2RlLCBib2R5KTsKKyAgICB9Cit9Owor
CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIFVwZGF0ZVBpcGVsaW5lU3ltYm9scyhQ
aXBlbGluZTo6VHlwZSBwaXBlbGluZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBU
Q29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xF
bnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYXJpYWJsZVNldCAmcGlwZWxp
bmVWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxU
VmFyaWFibGU+IHBpcGVsaW5lTWFpbkxvY2FsVmFyKQoreworICAgIGF1dG8gbWFwID0gWyZdKGNv
bnN0IFRGdW5jdGlvbiAqb3duZXIsIFRJbnRlcm1TeW1ib2wgJnN5bWJvbCkgLT4gVEludGVybU5v
ZGUgJiB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sLnZhcmlhYmxlKCk7
CisgICAgICAgIGlmIChwaXBlbGluZVZhcmlhYmxlcy5maW5kKCZ2YXIpID09IHBpcGVsaW5lVmFy
aWFibGVzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3ltYm9sOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVChvd25lcik7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAq
c3RydWN0SW5zdGFuY2VWYXI7CisgICAgICAgIGlmIChvd25lci0+aXNNYWluKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7Cisg
ICAgICAgICAgICBzdHJ1Y3RJbnN0YW5jZVZhciA9IHBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVy
bmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKG93bmVyLT5nZXRQYXJhbUNvdW50KCkgPiAwKTsKKyAgICAgICAgICAgIHN0cnVjdEluc3Rh
bmNlVmFyID0gb3duZXItPmdldFBhcmFtKDApOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChz
dHJ1Y3RJbnN0YW5jZVZhcik7CisgICAgICAgIHJldHVybiBBY2Nlc3NGaWVsZCgqc3RydWN0SW5z
dGFuY2VWYXIsIHZhci5uYW1lKCkpOworICAgIH07CisgICAgcmV0dXJuIE1hcFN5bWJvbHMoY29t
cGlsZXIsIHJvb3QsIG1hcCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wg
UmV3cml0ZVBpcGVsaW5lKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4s
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAg
IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNj
b3BlZDxUU3RydWN0dXJlPiAmb3V0U3RydWN0KQoreworICAgIEFTU0VSVChvdXRTdHJ1Y3QuaXNU
b3RhbGx5RW1wdHkoKSk7CisKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0gY29tcGls
ZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIFBpcGVsaW5lU3RydWN0SW5mbyBwc2k7CisgICAg
aWYgKCFHZW5lcmF0ZVBpcGVsaW5lU3RydWN0OjpFeGVjKHBzaSwgY29tcGlsZXIsIHJvb3QsIGlk
R2VuLCBwaXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocHNpLmlzRW1wdHkoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IGF1dG8gcGlwZWxpbmVGdW5jdGlv
bnMgPSBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucyhyb290LCBbJl0oY29uc3QgVFZhcmlhYmxl
ICZ2YXIpIHsKKyAgICAgICAgcmV0dXJuIHBzaS5waXBlbGluZVZhcmlhYmxlcy5maW5kKCZ2YXIp
ICE9IHBzaS5waXBlbGluZVZhcmlhYmxlcy5lbmQoKTsKKyAgICB9KTsKKworICAgIGF1dG8gcGlw
ZWxpbmVNYWluTG9jYWxWYXIgPQorICAgICAgICBDcmVhdGVQaXBlbGluZU1haW5Mb2NhbFZhcihz
eW1ib2xUYWJsZSwgcGlwZWxpbmUsIHBzaS5waXBlbGluZVN0cnVjdCk7CisKKyAgICBpZiAoIVVw
ZGF0ZVBpcGVsaW5lRnVuY3Rpb25zOjpUaHJlYWRQaXBlbGluZSgKKyAgICAgICAgICAgIGNvbXBp
bGVyLCByb290LCBwaXBlbGluZSwgcGlwZWxpbmVGdW5jdGlvbnMsIHBzaS5waXBlbGluZVN0cnVj
dCwgcGlwZWxpbmVNYWluTG9jYWxWYXIsCisgICAgICAgICAgICBpZEdlbiwgc3ltYm9sRW52LCBw
c2kuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCwgcHNpLmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghcGlwZWxpbmUu
Z2xvYmFsSW5zdGFuY2VWYXIpCisgICAgeworICAgICAgICBpZiAoIVVwZGF0ZVBpcGVsaW5lU3lt
Ym9scyhwaXBlbGluZS50eXBlLCBjb21waWxlciwgcm9vdCwgc3ltYm9sRW52LCBwc2kucGlwZWxp
bmVWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVsaW5l
TWFpbkxvY2FsVmFyKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFQcnVuZU5vT3BzKCZjb21waWxlciwgJnJvb3QsICZj
b21waWxlci5nZXRTeW1ib2xUYWJsZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBvdXRTdHJ1Y3QgPSBwc2kucGlwZWxpbmVTdHJ1Y3Q7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBzaDo6UmV3cml0
ZVBpcGVsaW5lcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZp
ZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZhbmdsZVVu
aWZvcm1zR2xvYmFsSW5zdGFuY2VWYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJv
bEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlhbnRzICZp
bnZhcmlhbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVN0cnVjdHMgJm91
dFN0cnVjdHMpCit7CisgICAgc3RydWN0IEluZm8KKyAgICB7CisgICAgICAgIFBpcGVsaW5lOjpU
eXBlIHBpcGVsaW5lVHlwZTsKKyAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJm91
dFN0cnVjdDsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICpnbG9iYWxJbnN0YW5jZVZhcjsKKyAg
ICB9OworCisgICAgSW5mbyBpbmZvc1tdID0geworICAgICAgICB7UGlwZWxpbmU6OlR5cGU6Oklu
c3RhbmNlSWQsIG91dFN0cnVjdHMuaW5zdGFuY2VJZCwgbnVsbHB0cn0sCisgICAgICAgIHtQaXBl
bGluZTo6VHlwZTo6VGV4dHVyZSwgb3V0U3RydWN0cy50ZXh0dXJlLCBudWxscHRyfSwKKyAgICAg
ICAge1BpcGVsaW5lOjpUeXBlOjpOb25Db25zdGFudEdsb2JhbHMsIG91dFN0cnVjdHMubm9uQ29u
c3RhbnRHbG9iYWxzLCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpBbmdsZVVu
aWZvcm1zLCBvdXRTdHJ1Y3RzLmFuZ2xlVW5pZm9ybXMsICZhbmdsZVVuaWZvcm1zR2xvYmFsSW5z
dGFuY2VWYXJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlVzZXJVbmlmb3Jtcywgb3V0U3Ry
dWN0cy51c2VyVW5pZm9ybXMsIG51bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlZl
cnRleEluLCBvdXRTdHJ1Y3RzLnZlcnRleEluLCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5l
OjpUeXBlOjpWZXJ0ZXhPdXQsIG91dFN0cnVjdHMudmVydGV4T3V0LCBudWxscHRyfSwKKyAgICAg
ICAge1BpcGVsaW5lOjpUeXBlOjpGcmFnbWVudEluLCBvdXRTdHJ1Y3RzLmZyYWdtZW50SW4sIG51
bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OkZyYWdtZW50T3V0LCBvdXRTdHJ1Y3Rz
LmZyYWdtZW50T3V0LCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpJbnZvY2F0
aW9uVmVydGV4R2xvYmFscywgb3V0U3RydWN0cy5pbnZvY2F0aW9uVmVydGV4R2xvYmFscywgbnVs
bHB0cn0sCisgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFs
cywgb3V0U3RydWN0cy5pbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLCBudWxscHRyfSwKKyAgICB9
OworCisgICAgZm9yIChJbmZvICZpbmZvIDogaW5mb3MpCisgICAgeworICAgICAgICBQaXBlbGlu
ZSBwaXBlbGluZXtpbmZvLnBpcGVsaW5lVHlwZSwgaW5mby5nbG9iYWxJbnN0YW5jZVZhcn07Cisg
ICAgICAgIGlmICghUmV3cml0ZVBpcGVsaW5lKGNvbXBpbGVyLCByb290LCBpZEdlbiwgcGlwZWxp
bmUsIHN5bWJvbEVudiwgaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5mby5vdXRTdHJ1Y3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5l
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc5MWJhODJiNGU5Njc3ZDJjMjk3NGY5MTRiN2UzNDgwYjBlODliNTAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5oCkBAIC0w
LDAgKzEsNDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworI2RlZmluZSBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFUElQRUxJTkVTX0hfCisKKyNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9JZEdlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9s
RW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBUaGlzIHJld3JpdGVzIGFsbCBwaXBlbGlu
ZXMuCisvLworLy8gRm9yIGVhY2ggcGlwZWxpbmU6CisvLyAgICAtIERpc2NvdmVyIGFsbCB2YXJp
YWJsZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgcGlwZWxpbmUKKy8vICAgIC0gTW92ZSB0aGUgdmFy
aWFibGVzIGludG8gYW4gaW50ZXJuYWwgcGlwZWxpbmUgc3RydWN0IGluc3RhbmNlIGFuZCB1cGRh
dGUgb2xkIHZhcmlhYmxlcyB0byBiZQorLy8gICAgICBtZW1iZXIgYWNjZXNzIGluc3RlYWQuCisv
LyAgICAtIERlcGVuZGVuY3kgaW5qZWN0IHRoZSBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgdG8g
YWxsIGZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB2YXJpYWJsZXMgZnJvbQorLy8gICAgICB0aGUgc3Ry
dWN0LgorLy8gICAgLSBBIG5ldyBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaXMgY3JlYXRlZCBp
ZiBuZWVkZWQgZm9yIGltcGVkYW5jZSByZWFzb25zLiBPdGhlcndpc2UgdGhlCisvLyAgICAgIGV4
dGVybmFsIGFuZCBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3RzIGFyZSB0aGUgc2FtZS4KKy8vICAg
IC0gQWRkIGBtYWluYCBwYXJhbWV0ZXIgb3IgcmV0dXJuIHZhbHVlIGZvciB0aGUgZXh0ZXJuYWwg
cGlwZWxpbmUgc3RydWN0IGFzIG5lZWRlZC4KKy8vICAgIC0gSW5zaWRlIGBtYWluYCwgbWFwIHRo
ZSBleHRlcm5hbCBzdHJ1Y3QgdG8gdGhlIGludGVybmFsIHN0cnVjdCBpZiB0aGV5IGRpZmZlciBh
bmQgaXMgcHJvdmlkZWQKKy8vICAgICAgYXMgYSBwYXJhbWV0ZXIgdG8gYG1haW5gLgorLy8gICAg
LSBJbnNpZGUgYG1haW5gLCBtYXAgdGhlIGludGVybmFsIHN0cnVjdCB0byB0aGUgZXh0ZXJuYWwg
c3RydWN0IGlmIHRoZXkgZGlmZmVyIGFuZCBpcyByZXR1cm5lZAorLy8gICAgICBmcm9tIGBtYWlu
YC4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdyaXRlUGlwZWxpbmVzKFRDb21waWxlciAmY29t
cGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxv
Y2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAm
aWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFy
aWFibGUgJmFuZ2xlVW5pZm9ybXNHbG9iYWxJbnN0YW5jZVZhciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU3RydWN0cyAmb3V0U3Ry
dWN0cyk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVQSVBFTElORVNfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTc3YzFhNTg1NTFiMzJjOWZmNmNkYzllN2JhZWIzOGNhODZiZGQyYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwCkBAIC0w
LDAgKzEsMzc2IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVs
cGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvQXNO
b2RlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVi
dWlsZC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK25hbWVzcGFjZQoreworCitib29sIElz
T3V0UGFyYW0oY29uc3QgVFR5cGUgJnBhcmFtVHlwZSkKK3sKKyAgICBjb25zdCBUUXVhbGlmaWVy
IHF1YWwgPSBwYXJhbVR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgc3dpdGNoIChxdWFsKQorICAg
IHsKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFJbk91dDoKKyAgICAgICAgY2FzZSBUUXVh
bGlmaWVyOjpFdnFPdXQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1ZlY3Rv
ckFjY2VzcyhUSW50ZXJtQmluYXJ5ICZiaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9wID0gYmlu
YXJ5LmdldE9wKCk7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5k
aXJlY3Q6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSA9IGJp
bmFyeS5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICBpZiAoIWxlZnRUeXBlLmlzVmVjdG9yKCkg
fHwgbGVmdFR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIEFTU0VSVChJc1NjYWxhckJhc2ljVHlwZShiaW5hcnkuZ2V0VHlwZSgpKSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJc1ZlY3RvckFjY2VzcyhUSW50ZXJtTm9kZSAm
bm9kZSkKK3sKKyAgICBpZiAoYXV0byAqYmluID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBJc1ZlY3RvckFjY2VzcygqYmluKTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCisvLyBEaWZmZXJzIGZyb20gSXNBc3NpZ25tZW50IGluIHRoYXQgaXQg
ZG9lcyBub3QgaW5jbHVkZSAoKyspIG9yICgtLSkuCitib29sIElzQXNzaWduRXF1YWxzU2lnbihU
T3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXpl
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNz
aWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
TW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0QXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIE9ubHkgaW5j
bHVkZXMgKCQ9KSBzdHlsZSBhc3NpZ25zLCB3aGVyZSAoJCkgaXMgYSBiaW5hcnkgb3AuCitib29s
IElzQ29tcG91bmRBc3NpZ24oVE9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3ApCisgICAg
eworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNz
aWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
TW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0QXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgUmV0dXJu
c1JlZmVyZW5jZShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNN
YXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxh
ckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNz
aWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hp
ZnRMZWZ0QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BQb3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVu
dDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDoKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworVEludGVybVR5cGVkICZEZWNvbXBvc2VDb21wb3VuZEFzc2ln
bm1lbnQoVEludGVybUJpbmFyeSAmbm9kZSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBub2RlLmdl
dE9wKCk7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBZGRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQWRkOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisgICAg
ICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wU3ViOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVy
YXRvcjo6RU9wTXVsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9y
OjpFT3BWZWN0b3JUaW1lc01hdHJpeDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgICAgICBvcCA9
IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2ln
bjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJpeDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWduOgor
ICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcERpdjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0g
VE9wZXJhdG9yOjpFT3BJTW9kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRv
cjo6RU9wQml0U2hpZnRMZWZ0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICAgICAgb3AgPSBUT3BlcmF0
b3I6OkVPcEJpdFNoaWZ0UmlnaHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRv
cjo6RU9wQml0d2lzZUFuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpF
T3BCaXR3aXNlWG9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlT3JBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0
d2lzZU9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBMT0dJQ19FUlJPUigpOworICAgIH0KKworICAgIC8vIFRoaXMgYXNzdW1lcyBTZXBhcmF0ZUNv
bXBvdW5kRXhwcmVzc2lvbnMgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuCisgICAgLy8gVGhpcyBh
c3N1bXB0aW9uIGFsbG93cyB0aGlzIGNvZGUgdG8gbm90IG5lZWQgdG8gaW50cm9kdWNlIHRlbXBv
cmFyaWVzLgorICAgIC8vCisgICAgLy8gZS5nLiBkb250IGhhdmUgdG8gd29ycnkgYWJvdXQ6Cisg
ICAgLy8gICAgICB2ZWNbaGFzU2lkZUVmZmVjdCgpXSAqPSA0CisgICAgLy8gYmVjb21pbmcKKyAg
ICAvLyAgICAgIHZlY1toYXNTaWRlRWZmZWN0KCldID0gdmVjW2hhc1NpZGVFZmZlY3QoKV0gKiA0
CisKKyAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0gbm9kZS5nZXRMZWZ0KCk7CisgICAgVEludGVy
bVR5cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKyAgICByZXR1cm4gKm5ldyBUSW50ZXJt
QmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBsZWZ0LT5kZWVwQ29weSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1CaW5hcnkob3AsIGxlZnQsIHJpZ2h0KSk7
Cit9CisKK2NsYXNzIFJld3JpdGVyMSA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICBwdWJs
aWM6CisgICAgUmV3cml0ZXIxKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIGZhbHNlLCB0cnVlKSB7fQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBv
c3QoVEludGVybUJpbmFyeSAmYmluYXJ5Tm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNv
bnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYgKElzQ29t
cG91bmRBc3NpZ24ob3ApKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmxl
ZnQgPSAqYmluYXJ5Tm9kZS5nZXRMZWZ0KCk7CisgICAgICAgICAgICBpZiAobGVmdC5nZXRBc1N3
aXp6bGVOb2RlKCkgfHwgSXNWZWN0b3JBY2Nlc3MobGVmdCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zZUNvbXBvdW5kQXNzaWdubWVudChiaW5hcnlOb2Rl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmluYXJ5Tm9kZTsK
KyAgICB9Cit9OworCitjbGFzcyBSZXdyaXRlcjIgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKK3sK
KyAgICBzdGQ6OnZlY3Rvcjxib29sPiBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2s7CisgICAgU3lt
Ym9sRW52ICZtU3ltYm9sRW52OworCisgIHByaXZhdGU6CisgICAgYm9vbCByZXF1aXJlc0FkZHJl
c3NpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFj
ay5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5iYWNrKCk7CisgICAg
fQorCisgIHB1YmxpYzoKKyAgICB+UmV3cml0ZXIyKCkgb3ZlcnJpZGUgeyBBU1NFUlQobVJlcXVp
cmVzQWRkcmVzc2luZ1N0YWNrLmVtcHR5KCkpOyB9CisKKyAgICBSZXdyaXRlcjIoVENvbXBpbGVy
ICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDogVEludGVybVJlYnVp
bGQoY29tcGlsZXIsIHRydWUsIHRydWUpLCBtU3ltYm9sRW52KHN5bWJvbEVudikKKyAgICB7fQor
CisgICAgUHJlUmVzdWx0IHZpc2l0QWdncmVnYXRlUHJlKFRJbnRlcm1BZ2dyZWdhdGUgJmFnZ3Jl
Z2F0ZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMg
PSBhZ2dyZWdhdGVOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmICghZnVuYykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgICAgIH0KKworICAg
ICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgp
OworICAgICAgICBzaXplX3QgYXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0gPSAqZnVuYy0+Z2V0UGFyYW0oaSk7CisgICAg
ICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1UeXBlID0gcGFyYW0uZ2V0VHlwZSgpOworICAgICAg
ICAgICAgVEludGVybU5vZGUgKmFyZyAgICAgICA9IGFyZ3NbaV07CisgICAgICAgICAgICBBU1NF
UlQoYXJnKTsKKworICAgICAgICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnB1c2hfYmFj
ayhJc091dFBhcmFtKHBhcmFtVHlwZSkpOworICAgICAgICAgICAgYXJnc1tpXSA9IHJlYnVpbGQo
KmFyZykuc2luZ2xlKCk7CisgICAgICAgICAgICBBU1NFUlQoYXJnc1tpXSk7CisgICAgICAgICAg
ICBBU1NFUlQoIW1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgICAg
IG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHthZ2dyZWdhdGVOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKwor
ICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmc3dpenpsZU5v
ZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIXJlcXVpcmVzQWRkcmVzc2luZygpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3dpenpsZU5vZGU7CisgICAgICAgIH0KKwor
ICAgICAgICBUSW50ZXJtVHlwZWQgJnZlY05vZGUgICAgICAgICA9ICpzd2l6emxlTm9kZS5nZXRP
cGVyYW5kKCk7CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXJMaXN0ICZvZmZzZXRzID0gc3dpenps
ZU5vZGUuZ2V0U3dpenpsZU9mZnNldHMoKTsKKyAgICAgICAgQVNTRVJUKCFvZmZzZXRzLmVtcHR5
KCkpOworICAgICAgICBBU1NFUlQob2Zmc2V0cy5zaXplKCkgPD0gNCk7CisKKyAgICAgICAgYXV0
byAmYXJncyA9ICpuZXcgVEludGVybVNlcXVlbmNlKCk7CisgICAgICAgIGFyZ3MucmVzZXJ2ZShv
ZmZzZXRzLnNpemUoKSArIDEpOworICAgICAgICBhcmdzLnB1c2hfYmFjaygmdmVjTm9kZSk7Cisg
ICAgICAgIGZvciAoaW50IG9mZnNldCA6IG9mZnNldHMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGFyZ3MucHVzaF9iYWNrKG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbihuZXcgVENvbnN0YW50VW5p
b24ob2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBtU3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoInN3aXp6
bGVfcmVmIiksIHN3aXp6bGVOb2RlLmdldFR5cGUoKSwgYXJncyk7CisgICAgfQorCisgICAgUHJl
UmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBiaW5hcnlOb2RlLmdldE9wKCk7
CisKKyAgICAgICAgY29uc3QgYm9vbCBpc0FjY2VzcyA9IElzVmVjdG9yQWNjZXNzKGJpbmFyeU5v
ZGUpOworCisgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZVRvcCAgID0gIVJldHVybnNSZWZlcmVu
Y2Uob3ApIHx8ICFyZXF1aXJlc0FkZHJlc3NpbmcoKTsKKyAgICAgICAgY29uc3QgYm9vbCBkaXNh
YmxlTGVmdCAgPSBkaXNhYmxlVG9wOworICAgICAgICBjb25zdCBib29sIGRpc2FibGVSaWdodCA9
IGRpc2FibGVUb3AgfHwgaXNBY2Nlc3MgfHwgSXNBc3NpZ25FcXVhbHNTaWduKG9wKTsKKworICAg
ICAgICBhdXRvIHRyYXZlcnNlID0gWyZdKFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgYm9vbCBk
aXNhYmxlKSAtPiBUSW50ZXJtVHlwZWQgJiB7CisgICAgICAgICAgICBpZiAoZGlzYWJsZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucHVz
aF9iYWNrKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gKm5ld05vZGUg
PSBhc05vZGU8VEludGVybVR5cGVkPihyZWJ1aWxkKG5vZGUpLnNpbmdsZSgpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChuZXdOb2RlKTsKKyAgICAgICAgICAgIGlmIChkaXNhYmxlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuICpuZXdOb2RlOworICAgICAgICB9
OworCisgICAgICAgIFRJbnRlcm1UeXBlZCAmbGVmdE5vZGUgID0gKmJpbmFyeU5vZGUuZ2V0TGVm
dCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgJnJpZ2h0Tm9kZSA9ICpiaW5hcnlOb2RlLmdldFJp
Z2h0KCk7CisKKyAgICAgICAgVEludGVybVR5cGVkICZuZXdMZWZ0ICA9IHRyYXZlcnNlKGxlZnRO
b2RlLCBkaXNhYmxlTGVmdCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAmbmV3UmlnaHQgPSB0cmF2
ZXJzZShyaWdodE5vZGUsIGRpc2FibGVSaWdodCk7CisKKyAgICAgICAgaWYgKCFpc0FjY2VzcyB8
fCBkaXNhYmxlVG9wKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoJmxlZnROb2RlID09ICZu
ZXdMZWZ0ICYmICZyaWdodE5vZGUgPT0gJm5ld1JpZ2h0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiB7JmJpbmFyeU5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geypuZXcgVEludGVybUJpbmFyeShvcCwgJm5l
d0xlZnQsICZuZXdSaWdodCksIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4ge21TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgiZWxlbV9y
ZWYiKSwgYmluYXJ5Tm9kZS5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmbmV3TGVmdCwgJm5ld1Jp
Z2h0fSksCisgICAgICAgICAgICAgICAgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKyAgICB9Cit9Owor
Cit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgc2g6OlJld3JpdGVVbmFkZHJlc3Nh
YmxlUmVmZXJlbmNlcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudikKK3sKKyAgICBpZiAo
IVJld3JpdGVyMShjb21waWxlcikucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghUmV3cml0ZXIyKGNvbXBpbGVyLCBzeW1ib2xF
bnYpLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRl
VW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNz
YWJsZVJlZmVyZW5jZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2RhOTg0M2ViMmU2MDdlZWNjNjkwZmNlYzE2
MmM2MjdhNjFiN2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFk
ZHJlc3NhYmxlUmVmZXJlbmNlcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8vCisvLyBDb3B5cmlnaHQg
MjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVOQURE
UkVTU0FCTEVSRUZFUkVOQ0VTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFV1JJVEVVTkFERFJFU1NBQkxFUkVGRVJFTkNFU19IXworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52
LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBHaXZlbjoKKy8vICAgdm9pZCBmb28ob3V0IHgp
OworLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBmb2xsb3dpbmcgdG8gYmUgbGVnYWwgaW4gR0xT
TCBidXQgbm90IGluIE1ldGFsOgorLy8gICBmb28oZXhwcmVzc2lvbik7CisvLyBUaGlzIGNhbiBo
YXBwZW4gaW4gY2FzZXMgd2hlcmUgYGV4cHJlc3Npb25gIGlzIGEgdmVjdG9yIHN3aXp6bGUgb3Ig
dmVjdG9yIGVsZW1lbnQgYWNjZXNzLgorLy8gVGhpcyByZXdyaXRlIGZ1bmN0aW9uYWxpdHkgaW50
cm9kdWNlcyB0ZW1wb3JhcmllcyB0aGF0IHNlcnZlIGFzIHByb3hpZXMgdG8gYmUgcGFzc2VkIHRv
IHRoZQorLy8gb3V0L2lub3V0IHBhcmFtZXRlcnMgYXMgbmVlZGVkLiBUaGUgY29ycmVzcG9uZGlu
ZyBleHByZXNzaW9ucyBnZXQgcG9wdWxhdGVkIHdpdGggdGhlaXIKKy8vIHByb3hpZXMgYWZ0ZXIg
dGhlIGZ1bmN0aW9uIGNhbGwuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZVVuYWRkcmVz
c2FibGVSZWZlcmVuY2VzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9s
RW52ICZzeW1ib2xFbnYpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFVU5BRERSRVNTQUJM
RVJFRkVSRU5DRVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
RXhwcmVzc2lvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9u
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWE3YjM3M2QzMWIyMjkzYWIwODQ5NTJkNDhmMjE5ODFlMzViZWY0
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVz
c2lvbnMuY3BwCkBAIC0wLDAgKzEsNjU1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8dW5vcmRl
cmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
RXhwcmVzc2lvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Np
bXBsaWZ5TG9vcENvbmRpdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK2Jvb2wgSXNJbmRleChUT3BlcmF0
b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0
cnVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNJbmRleChUSW50ZXJtVHlwZWQgJmV4cHIpCit7Cisg
ICAgaWYgKGF1dG8gKmJpbmFyeSA9IGV4cHIuZ2V0QXNCaW5hcnlOb2RlKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gSXNJbmRleChiaW5hcnktPmdldE9wKCkpOworICAgIH0KKyAgICByZXR1cm4g
ZXhwci5nZXRBc1N3aXp6bGVOb2RlKCk7Cit9CisKK2Jvb2wgVmlld0JpbmFyeUNoYWluKFRPcGVy
YXRvciBvcCwgVEludGVybVR5cGVkICZub2RlLCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4g
Jm91dCkKK3sKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnkgPSBub2RlLmdldEFzQmluYXJ5Tm9k
ZSgpOworICAgIGlmICghYmluYXJ5IHx8IGJpbmFyeS0+Z2V0T3AoKSAhPSBvcCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0g
YmluYXJ5LT5nZXRMZWZ0KCk7CisgICAgVEludGVybVR5cGVkICpyaWdodCA9IGJpbmFyeS0+Z2V0
UmlnaHQoKTsKKworICAgIGlmICghVmlld0JpbmFyeUNoYWluKG9wLCAqbGVmdCwgb3V0KSkKKyAg
ICB7CisgICAgICAgIG91dC5wdXNoX2JhY2sobGVmdCk7CisgICAgfQorCisgICAgaWYgKCFWaWV3
QmluYXJ5Q2hhaW4ob3AsICpyaWdodCwgb3V0KSkKKyAgICB7CisgICAgICAgIG91dC5wdXNoX2Jh
Y2socmlnaHQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6OnZlY3RvcjxU
SW50ZXJtVHlwZWQgKj4gVmlld0JpbmFyeUNoYWluKFRJbnRlcm1CaW5hcnkgJm5vZGUpCit7Cisg
ICAgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IGNoYWluOworICAgIFZpZXdCaW5hcnlDaGFp
bihub2RlLmdldE9wKCksIG5vZGUsIGNoYWluKTsKKyAgICBBU1NFUlQoY2hhaW4uc2l6ZSgpID49
IDIpOworICAgIHJldHVybiBjaGFpbjsKK30KKworY2xhc3MgUHJlUGFzcyA6IHB1YmxpYyBUSW50
ZXJtUmVidWlsZAoreworICBwdWJsaWM6CisgICAgUHJlUGFzcyhUQ29tcGlsZXIgJmNvbXBpbGVy
KSA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCB0cnVlKSB7fQorCisgIHByaXZhdGU6
CisgICAgLy8gQ2hhbmdlIGNoYWlucyBvZgorICAgIC8vICAgICAgeCBPUCB5IE9QIHoKKyAgICAv
LyB0bworICAgIC8vICAgICAgeCBPUCAoeSBPUCB6KQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygb3Jp
Z2luYWwgcGFyZW50aGVzaXphdGlvbi4KKyAgICBUSW50ZXJtVHlwZWQgJnJlYXNzb2NpYXRlUmln
aHQoVEludGVybUJpbmFyeSAmbm9kZSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBv
cCAgICAgICAgICAgICAgICA9IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VElu
dGVybVR5cGVkICo+IGNoYWluID0gVmlld0JpbmFyeUNoYWluKG5vZGUpOworCisgICAgICAgIFRJ
bnRlcm1UeXBlZCAqcmVzdWx0ID0gY2hhaW4uYmFjaygpOworICAgICAgICBjaGFpbi5wb3BfYmFj
aygpOworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKworICAgICAgICBjb25zdCBhdXRvIGJlZ2lu
ID0gY2hhaW4ucmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGF1dG8gZW5kICAgPSBjaGFpbi5yZW5k
KCk7CisKKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRl
cikKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVR5cGVkICpwYXJ0ID0gKml0ZXI7Cisg
ICAgICAgICAgICBBU1NFUlQocGFydCk7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAqdGVtcCA9
IHJlYnVpbGQoKnBhcnQpLnNpbmdsZSgpOworICAgICAgICAgICAgQVNTRVJUKHRlbXApOworICAg
ICAgICAgICAgcGFydCA9IHRlbXAtPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIEFTU0VSVChw
YXJ0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wLCBwYXJ0LCBy
ZXN1bHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqcmVzdWx0OworICAgIH0KKworICBw
cml2YXRlOgorICAgIFByZVJlc3VsdCB2aXNpdEJpbmFyeVByZShUSW50ZXJtQmluYXJ5ICZub2Rl
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVE9wZXJhdG9yIG9wID0gbm9kZS5nZXRP
cCgpOworICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kIHx8IG9wID09
IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
e3JlYXNzb2NpYXRlUmlnaHQobm9kZSksIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorfTsKKworY2xhc3MgU2VwYXJhdG9yIDogcHVi
bGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBzdGQ6OnZlY3Rv
cjxzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPj4gbVN0bXRzU3RhY2s7CisgICAgc3RkOjp2ZWN0
b3I8c3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBUSW50ZXJtRGVjbGFyYXRp
b24gKj4+IG1CaW5kaW5nTWFwU3RhY2s7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRJbnRlcm1U
eXBlZCAqLCBUSW50ZXJtVHlwZWQgKj4gbUV4cHJNYXA7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0
PFRJbnRlcm1EZWNsYXJhdGlvbiAqPiBtTWFza2VkRGVjbHM7CisKKyAgcHVibGljOgorICAgIFNl
cGFyYXRvcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBTeW1ib2xFbnYgJnN5bWJvbEVudiwgSWRHZW4g
JmlkR2VuKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCB0cnVlKSwg
bUlkR2VuKGlkR2VuKQorICAgIHt9CisKKyAgICB+U2VwYXJhdG9yKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIEFTU0VSVChtU3RtdHNTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG1F
eHByTWFwLmVtcHR5KCkpOworICAgICAgICBBU1NFUlQobUJpbmRpbmdNYXBTdGFjay5lbXB0eSgp
KTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAm
Z2V0Q3VyclN0bXRzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbVN0bXRzU3RhY2suZW1wdHko
KSk7CisgICAgICAgIHJldHVybiBtU3RtdHNTdGFjay5iYWNrKCk7CisgICAgfQorCisgICAgc3Rk
Ojp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBUSW50ZXJtRGVjbGFyYXRpb24gKj4g
JmdldEN1cnJCaW5kaW5nTWFwKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbUJpbmRpbmdNYXBT
dGFjay5lbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1CaW5kaW5nTWFwU3RhY2suYmFjaygpOwor
ICAgIH0KKworICAgIHZvaWQgcHVzaFN0bXQoVEludGVybU5vZGUgJm5vZGUpIHsgZ2V0Q3VyclN0
bXRzKCkucHVzaF9iYWNrKCZub2RlKTsgfQorCisgICAgYm9vbCBpc1Rlcm1pbmFsRXhwcihUSW50
ZXJtTm9kZSAmbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGVUeXBlIG5vZGVUeXBlID0gZ2V0Tm9k
ZVR5cGUobm9kZSk7CisgICAgICAgIHN3aXRjaCAobm9kZVR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkNvbnN0YW50VW5pb246CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFRJbnRlcm1UeXBlZCAqcHVsbE1hcHBlZEV4cHIoVEludGVybVR5cGVkICpub2Rl
LCBib29sIGFsbG93QmFja3RyYWNrKQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpleHBy
OworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1FeHByTWFwLmZpbmQobm9k
ZSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBtRXhwck1hcC5lbmQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgICAgIGV4cHIgPSBpdGVyLT5zZWNvbmQ7CisgICAg
ICAgICAgICBBU1NFUlQoZXhwcik7CisgICAgICAgICAgICBtRXhwck1hcC5lcmFzZShpdGVyKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChhbGxvd0JhY2t0cmFjaykKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byAmYmluZGluZ01hcCA9IGdldEN1cnJCaW5kaW5nTWFwKCk7CisgICAgICAg
ICAgICB3aGlsZSAoVEludGVybVN5bWJvbCAqc3ltYm9sID0gZXhwci0+Z2V0QXNTeW1ib2xOb2Rl
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIg
PSBzeW1ib2wtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgYXV0byBpdGVyICAgICAgICAg
ICAgPSBiaW5kaW5nTWFwLmZpbmQoJnZhcik7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0g
YmluZGluZ01hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBleHByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQo
dmFyLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAgICAgICAg
ICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGRlY2wpOworICAgICAgICAgICAgICAgIGV4cHIgPSBWaWV3RGVjbGFy
YXRpb24oKmRlY2wpLmluaXRFeHByOworICAgICAgICAgICAgICAgIEFTU0VSVChleHByKTsKKyAg
ICAgICAgICAgICAgICBiaW5kaW5nTWFwLmVyYXNlKGl0ZXIpOworICAgICAgICAgICAgICAgIG1N
YXNrZWREZWNscy5pbnNlcnQoZGVjbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBib29sIGlzU3RhbmRhbG9uZUV4cHIoVElu
dGVybVR5cGVkICZleHByKQorICAgIHsKKyAgICAgICAgaWYgKGdldFBhcmVudE5vZGUoKS0+Z2V0
QXNCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBBU1NFUlQoZXhwci5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gVEJhc2lj
VHlwZTo6RWJ0Vm9pZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lk
IHB1c2hCaW5kaW5nKFRJbnRlcm1UeXBlZCAmb2xkRXhwciwgVEludGVybVR5cGVkICZuZXdFeHBy
KQorICAgIHsKKyAgICAgICAgaWYgKGlzU3RhbmRhbG9uZUV4cHIobmV3RXhwcikpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5ld0V4cHIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmIChJc0luZGV4KG5ld0V4cHIpKQorICAgICAgICB7CisgICAg
ICAgICAgICBtRXhwck1hcFsmb2xkRXhwcl0gPSAmbmV3RXhwcjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBhdXRvICZiaW5kaW5nTWFwID0gZ2V0Q3VyckJpbmRpbmdN
YXAoKTsKKyAgICAgICAgY29uc3QgTmFtZSBuYW1lICA9IG1JZEdlbi5jcmVhdGVOZXdOYW1lKCIi
KTsKKyAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1i
b2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZuZXdFeHByLmdldFR5cGUoKSwgbmFtZS5zeW1ib2xU
eXBlKCkpOworICAgICAgICBhdXRvICpkZWNsID0gbmV3IFRJbnRlcm1EZWNsYXJhdGlvbih2YXIs
ICZuZXdFeHByKTsKKyAgICAgICAgcHVzaFN0bXQoKmRlY2wpOworICAgICAgICBtRXhwck1hcFsm
b2xkRXhwcl0gPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworICAgICAgICBiaW5kaW5nTWFwW3Zh
cl0gICAgPSBkZWNsOworICAgIH0KKworICAgIHZvaWQgcHVzaFN0YWNrcygpCisgICAgeworICAg
ICAgICBtU3RtdHNTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgbUJpbmRpbmdNYXBTdGFj
ay5lbXBsYWNlX2JhY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcFN0YWNrcygpCisgICAgewor
ICAgICAgICBBU1NFUlQoIW1CaW5kaW5nTWFwU3RhY2suZW1wdHkoKSk7CisgICAgICAgIEFTU0VS
VCghbVN0bXRzU3RhY2suZW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChtU3RtdHNTdGFjay5iYWNr
KCkuZW1wdHkoKSk7CisgICAgICAgIG1CaW5kaW5nTWFwU3RhY2sucG9wX2JhY2soKTsKKyAgICAg
ICAgbVN0bXRzU3RhY2sucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hTdG10c0lu
dG9CbG9jayhUSW50ZXJtQmxvY2sgJmJsb2NrLCBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAm
c3RtdHMpCisgICAgeworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcSA9ICpibG9jay5nZXRT
ZXF1ZW5jZSgpOworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpzdG10IDogc3RtdHMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBzdG10LT5n
ZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1
dG8gaXRlciA9IG1NYXNrZWREZWNscy5maW5kKGRlY2wpOworICAgICAgICAgICAgICAgIGlmIChp
dGVyICE9IG1NYXNrZWREZWNscy5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1NYXNrZWREZWNscy5lcmFzZShpdGVyKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
c2VxLnB1c2hfYmFjayhzdG10KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRlcm1CbG9j
ayAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKGNvbnN0IFRWYXJpYWJsZSAmdmFyLCBUSW50ZXJt
VHlwZWQgJm5ld0V4cHIpCisgICAgeworICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAq
PiBzdG10cyA9IHN0ZDo6bW92ZShnZXRDdXJyU3RtdHMoKSk7CisgICAgICAgIHBvcFN0YWNrcygp
OworCisgICAgICAgIGF1dG8gJmJsb2NrID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAg
YXV0byAmc2VxICAgPSAqYmxvY2suZ2V0U2VxdWVuY2UoKTsKKyAgICAgICAgc2VxLnJlc2VydmUo
MSArIHN0bXRzLnNpemUoKSk7CisgICAgICAgIHB1c2hTdG10c0ludG9CbG9jayhibG9jaywgc3Rt
dHMpOworICAgICAgICBzZXEucHVzaF9iYWNrKG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6
RU9wQXNzaWduLCBuZXcgVEludGVybVN5bWJvbCgmdmFyKSwgJm5ld0V4cHIpKTsKKworICAgICAg
ICByZXR1cm4gYmxvY2s7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgUHJlUmVzdWx0IHZpc2l0
QmxvY2tQcmUoVEludGVybUJsb2NrICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcHVz
aFN0YWNrcygpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0
IHZpc2l0QmxvY2tQb3N0KFRJbnRlcm1CbG9jayAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IHN0bXRzID0gc3RkOjptb3ZlKGdldEN1cnJT
dG10cygpKTsKKyAgICAgICAgcG9wU3RhY2tzKCk7CisKKyAgICAgICAgVEludGVybVNlcXVlbmNl
ICZzZXEgPSAqbm9kZS5nZXRTZXF1ZW5jZSgpOworICAgICAgICBzZXEuY2xlYXIoKTsKKyAgICAg
ICAgc2VxLnJlc2VydmUoc3RtdHMuc2l6ZSgpKTsKKyAgICAgICAgcHVzaFN0bXRzSW50b0Jsb2Nr
KG5vZGUsIHN0bXRzKTsKKworICAgICAgICBUSW50ZXJtTm9kZSAqcGFyZW50ID0gZ2V0UGFyZW50
Tm9kZSgpOworICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+Z2V0QXNCbG9jaygpKQorICAg
ICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBub2RlOworICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUHJl
KFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIERlY2xh
cmF0aW9uIGRlY2wgPSBWaWV3RGVjbGFyYXRpb24obm9kZSk7CisgICAgICAgIGlmICghZGVjbC5p
bml0RXhwciB8fCBpc1Rlcm1pbmFsRXhwcigqZGVjbC5pbml0RXhwcikpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNp
dEJpdHM6Ok5laXRoZXJ9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBvc3QoVEludGVybURlY2xhcmF0aW9u
ICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGVjbGFyYXRpb24gZGVjbCA9IFZpZXdE
ZWNsYXJhdGlvbihub2RlKTsKKyAgICAgICAgQVNTRVJUKGRlY2wuc3ltYm9sLnZhcmlhYmxlKCku
c3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICAgICAgQVNTRVJUKCFkZWNs
LnN5bWJvbC52YXJpYWJsZSgpLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpKTsKKworICAg
ICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXRFeHByID0gcHVsbE1hcHBlZEV4cHIoZGVjbC5pbml0
RXhwciwgdHJ1ZSk7CisgICAgICAgIGlmIChkZWNsLmluaXRFeHByID09IG5ld0luaXRFeHByKQor
ICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gJm5ld05vZGUgPSAqbmV3IFRJbnRl
cm1EZWNsYXJhdGlvbigpOworICAgICAgICAgICAgbmV3Tm9kZS5hcHBlbmREZWNsYXJhdG9yKAor
ICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6
ZSwgJmRlY2wuc3ltYm9sLCBuZXdJbml0RXhwcikpOworICAgICAgICAgICAgcHVzaFN0bXQobmV3
Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9z
dFJlc3VsdCB2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBUSW50ZXJtVHlwZWQgKmV4cHIgICAgPSBub2RlLmdldE9wZXJhbmQoKTsKKyAg
ICAgICAgVEludGVybVR5cGVkICpuZXdFeHByID0gcHVsbE1hcHBlZEV4cHIoZXhwciwgZmFsc2Up
OworICAgICAgICBpZiAoZXhwciA9PSBuZXdFeHByKQorICAgICAgICB7CisgICAgICAgICAgICBw
dXNoQmluZGluZyhub2RlLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXcgVEludGVybVVuYXJ5KG5vZGUu
Z2V0T3AoKSwgbmV3RXhwciwgbm9kZS5nZXRGdW5jdGlvbigpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJ
bnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0
b3Igb3AgPSBub2RlLmdldE9wKCk7CisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6OkVPcExv
Z2ljYWxBbmQgfHwgb3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCAqcmlnaHQgPSBub2RlLmdldFJpZ2h0KCk7CisKKyAgICAgICAgICAg
IFBvc3RSZXN1bHQgbGVmdFJlc3VsdCA9IHJlYnVpbGQoKmxlZnQpOworICAgICAgICAgICAgQVNT
RVJUKGxlZnRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgICAgICBwdXNoU3RhY2tzKCk7Cisg
ICAgICAgICAgICBQb3N0UmVzdWx0IHJpZ2h0UmVzdWx0ID0gcmVidWlsZCgqcmlnaHQpOworICAg
ICAgICAgICAgQVNTRVJUKHJpZ2h0UmVzdWx0LnNpbmdsZSgpKTsKKworICAgICAgICAgICAgcmV0
dXJuIHtub2RlLCBWaXNpdEJpdHM6OlBvc3R9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBvc3QoVEludGVybUJp
bmFyeSAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9
IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYgKG9wID09IFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6
ZSAmJiBnZXRQYXJlbnROb2RlKCktPmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBpcyBoYW5kbGVkIGJ5IHZpc2l0RGVjbGFyYXRp
b25Qb3N0CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIFRJ
bnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAgICAgICAgVEludGVybVR5cGVk
ICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKworICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9y
OjpFT3BMb2dpY2FsQW5kIHx8IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBOYW1lIG5hbWUgPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSgi
Iik7CisgICAgICAgICAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUs
IG5hbWUucmF3TmFtZSgpLCBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0Qm9vbCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuc3ltYm9sVHlwZSgpKTsKKworICAg
ICAgICAgICAgVEludGVybVR5cGVkICpuZXdSaWdodCAgID0gcHVsbE1hcHBlZEV4cHIocmlnaHQs
IHRydWUpOworICAgICAgICAgICAgVEludGVybUJsb2NrICpyaWdodEJsb2NrID0gJmJ1aWxkQmxv
Y2tXaXRoVGFpbEFzc2lnbigqdmFyLCAqbmV3UmlnaHQpOworICAgICAgICAgICAgVEludGVybVR5
cGVkICpuZXdMZWZ0ICAgID0gcHVsbE1hcHBlZEV4cHIobGVmdCwgdHJ1ZSk7CisKKyAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCAqY29uZCA9IG5ldyBUSW50ZXJtU3ltYm9sKHZhcik7CisgICAgICAg
ICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY29uZCA9IG5ldyBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yOjpFT3BMb2dp
Y2FsTm90LCBjb25kLCBudWxscHRyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVz
aFN0bXQoKm5ldyBUSW50ZXJtRGVjbGFyYXRpb24odmFyLCBuZXdMZWZ0KSk7CisgICAgICAgICAg
ICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UoY29uZCwgcmlnaHRCbG9jaywgbnVsbHB0cikp
OworICAgICAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVFeHByKG5vZGUpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBUSW50ZXJtU3ltYm9sKHZh
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9
CisKKyAgICAgICAgY29uc3QgYm9vbCBpc0Fzc2lnbiAgICA9IElzQXNzaWdubWVudChvcCk7Cisg
ICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3TGVmdCAgPSBwdWxsTWFwcGVkRXhwcihsZWZ0LCBmYWxz
ZSk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3UmlnaHQgPSBwdWxsTWFwcGVkRXhwcihyaWdo
dCwgaXNBc3NpZ24pOworCisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6OkVPcENvbW1hKQor
ICAgICAgICB7CisgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3UmlnaHQpOworICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpuZXdOb2RlOworICAgICAgICAgICAgaWYgKGxl
ZnQgPT0gbmV3TGVmdCAmJiByaWdodCA9PSBuZXdSaWdodCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBuZXdOb2RlID0gJm5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJt
QmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBwdXNoQmluZGluZyhub2RlLCAqbmV3Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gbm9kZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdFRlcm5hcnlQcmUoVEludGVy
bVRlcm5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBQb3N0UmVzdWx0IGNvbmRS
ZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldENvbmRpdGlvbigpKTsKKyAgICAgICAgQVNTRVJUKGNv
bmRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgIHB1c2hTdGFja3MoKTsKKyAgICAgICAgUG9z
dFJlc3VsdCB0aGVuUmVzdWx0ID0gcmVidWlsZCgqbm9kZS5nZXRUcnVlRXhwcmVzc2lvbigpKTsK
KyAgICAgICAgQVNTRVJUKHRoZW5SZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgIHB1c2hTdGFj
a3MoKTsKKyAgICAgICAgUG9zdFJlc3VsdCBlbHNlUmVzdWx0ID0gcmVidWlsZCgqbm9kZS5nZXRG
YWxzZUV4cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChlbHNlUmVzdWx0LnNpbmdsZSgpKTsK
KworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6UG9zdH07CisgICAgfQorCisgICAg
UG9zdFJlc3VsdCB2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5ICZub2RlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpjb25kICA9IG5vZGUuZ2V0Q29uZGl0aW9u
KCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqdGhlbiAgPSBub2RlLmdldFRydWVFeHByZXNzaW9u
KCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZWxzZV8gPSBub2RlLmdldEZhbHNlRXhwcmVzc2lv
bigpOworCisgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1JZEdlbi5jcmVhdGVOZXdOYW1lKCIi
KTsKKyAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1i
b2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZub2RlLmdldFR5cGUoKSwgbmFtZS5zeW1ib2xUeXBl
KCkpOworCisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3RWxzZSAgID0gcHVsbE1hcHBlZEV4cHIo
ZWxzZV8sIGZhbHNlKTsKKyAgICAgICAgVEludGVybUJsb2NrICplbHNlQmxvY2sgPSAmYnVpbGRC
bG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpuZXdFbHNlKTsKKyAgICAgICAgVEludGVybVR5cGVk
ICpuZXdUaGVuICAgPSBwdWxsTWFwcGVkRXhwcih0aGVuLCB0cnVlKTsKKyAgICAgICAgVEludGVy
bUJsb2NrICp0aGVuQmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpuZXdU
aGVuKTsKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdDb25kICAgPSBwdWxsTWFwcGVkRXhwcihj
b25kLCB0cnVlKTsKKworICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbnt2
YXJ9KTsKKyAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtSWZFbHNlKG5ld0NvbmQsIHRoZW5C
bG9jaywgZWxzZUJsb2NrKSk7CisgICAgICAgIGlmICghaXNTdGFuZGFsb25lRXhwcihub2RlKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbUV4cHJNYXBbJm5vZGVdID0gbmV3IFRJbnRlcm1TeW1i
b2wodmFyKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAg
IFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmbm9kZSkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0T3BlcmFu
ZCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBwdWxsTWFwcGVkRXhwcihleHBy
LCBmYWxzZSk7CisgICAgICAgIGlmIChleHByID09IG5ld0V4cHIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgKm5ldyBUSW50ZXJtU3dp
enpsZShuZXdFeHByLCBub2RlLmdldFN3aXp6bGVPZmZzZXRzKCkpKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdncmVnYXRl
UG9zdChUSW50ZXJtQWdncmVnYXRlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVElu
dGVybVNlcXVlbmNlICZhcmdzID0gKm5vZGUuZ2V0U2VxdWVuY2UoKTsKKyAgICAgICAgZm9yIChU
SW50ZXJtTm9kZSAqJmFyZyA6IGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgQVNTRVJUKHRhcmcp
OworICAgICAgICAgICAgYXJnID0gcHVsbE1hcHBlZEV4cHIodGFyZywgZmFsc2UpOworICAgICAg
ICB9CisgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICByZXR1cm4gbm9k
ZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9z
dChUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAg
IFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJv
dG90eXBlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFnZXRQYXJlbnRGdW5j
dGlvbigpKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRDYXNl
UHJlKFRJbnRlcm1DYXNlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKFRJbnRl
cm1UeXBlZCAqY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChpc1Rlcm1pbmFsRXhwcigqY29uZCkpOworICAgICAgICB9CisgICAgICAgIHB1
c2hTdG10KG5vZGUpOworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07
CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRjaCAm
bm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqaW5pdCAgICA9IG5v
ZGUuZ2V0SW5pdCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXQgPSBwdWxsTWFwcGVk
RXhwcihpbml0LCBmYWxzZSk7CisgICAgICAgIGlmIChpbml0ID09IG5ld0luaXQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtU3dpdGNoKG5ld0lu
aXQsIG5vZGUuZ2V0U3RhdGVtZW50TGlzdCgpKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9u
UG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAg
IFBvc3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2UgJm5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbmQgICAgPSBub2RlLmdldENvbmRpdGlv
bigpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBwdWxsTWFwcGVkRXhwcihjb25k
LCBmYWxzZSk7CisgICAgICAgIGlmIChjb25kID09IG5ld0NvbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtSWZFbHNlKG5ld0NvbmQsIG5vZGUu
Z2V0VHJ1ZUJsb2NrKCksIG5vZGUuZ2V0RmFsc2VCbG9jaygpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJyYW5jaFBvc3Qo
VEludGVybUJyYW5jaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBl
ZCAqZXhwciAgICA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworICAgICAgICBUSW50ZXJtVHlwZWQg
Km5ld0V4cHIgPSBwdWxsTWFwcGVkRXhwcihleHByLCBmYWxzZSk7CisgICAgICAgIGlmIChleHBy
ID09IG5ld0V4cHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQoKm5l
dyBUSW50ZXJtQnJhbmNoKG5vZGUuZ2V0Rmxvd09wKCksIG5ld0V4cHIpKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRMb29wUHJl
KFRJbnRlcm1Mb29wICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFyZWJ1aWxk
SW5QbGFjZSgqbm9kZS5nZXRCb2R5KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBMT0dJQ19F
UlJPUigpOworICAgICAgICB9CisgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2
aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBub2RlLmdldFR5cGUoKTsKKyAg
ICAgICAgaWYgKCF0eXBlLmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hC
aW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOworICAg
IH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3Qo
VEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGZhbHNlKTsgIC8vIFRoZXNlIHNob3VsZCBiZSBzY3J1YmJlZCBmcm9t
IEFTVCBiZWZvcmUgcmV3cml0ZXIgaXMgY2FsbGVkLgorICAgICAgICBwdXNoU3RtdChub2RlKTsK
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIHNoOjpTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KQoreworICAgIGlmIChyZWFkQm9vbEVu
dlZhcigiR01UX0RJU0FCTEVfU0VQQVJBVEVfQ09NUE9VTkRfRVhQUkVTU0lPTlMiKSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghU2ltcGxpZnlMb29wQ29u
ZGl0aW9ucygmY29tcGlsZXIsICZyb290LCAmY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKSkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFQcmVQYXNzKGNv
bXBpbGVyKS5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIVNlcGFyYXRvcihjb21waWxlciwgc3ltYm9sRW52LCBpZEdlbiku
cmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVD
b21wb3VuZEV4cHJlc3Npb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJl
c3Npb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWU0MGE1NTk2ODJhZGRlYzliNmE1MDAwNzJhNjBjM2QwNjFk
YjRiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhw
cmVzc2lvbnMuaApAQCAtMCwwICsxLDQ3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBSRVNT
SU9OU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9TRVBBUkFURUNPTVBPVU5ERVhQUkVTU0lPTlNfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBUcmFuc2Zvcm1zIGNvZGUgdG8gKHVz
dWFsbHkpIGhhdmUgbW9zdCBvbmUgbm9uLXRlcm1pbmFsIGV4cHJlc3Npb24gcGVyIHN0YXRlbWVu
dC4KKy8vIFRoaXMgYWxzbyByZXdyaXRlcyAoJiYpLCAofHwpLCBhbmQgKD86KSBpbnRvIHJhdyBp
Zi9pZi1ub3QvaWYtZWxzZSBzdGF0ZW1lbnRzLCByZXNwZWN0aXZlbHkuCisvLworLy8gZS5nLgor
Ly8gICAgaW50IHggPSA2ICsgZm9vKHksIGJhcigpKTsKKy8vIGJlY29tZXMKKy8vICAgIGF1dG8g
XzEgPSBiYXIoKTsKKy8vICAgIGF1dG8gXzIgPSBmb28oeSwgXzEpOworLy8gICAgYXV0byBfMyA9
IDYgKyBfMjsKKy8vICAgIGludCB4ID0gXzM7CisvLworLy8gV0FSTklORzoKKy8vICAgIC0gVGhp
cyBkb2VzIG5vdCByZXdyaXRlIG9iamVjdCBpbmRleGluZyBvcGVyYXRvcnMgYXMgYSB3aG9sZSAo
ZS5nLiBmb28ueCwgZm9vW3hdKSwgYnV0IHdpbGwKKy8vICAgICAgcmV3cml0ZSB0aGUgYXJndW1l
bnRzIHRvIHRoZSBvcGVyYXRvciAod2hlbiBhcHBsaWNhYmxlKS4KKy8vICAgICAgZS5nLgorLy8g
ICAgICAgIGZvbyhnZXRWZWMoKVtpICsgMl0gKyAxKTsKKy8vICAgICAgYmVjb21lcworLy8gICAg
ICAgIGF1dG8gXzEgPSBnZXRWZWMoKTsKKy8vICAgICAgICBhdXRvIF8yID0gaSArIDI7CisvLyAg
ICAgICAgYXV0byBfMyA9IF8xW18yXSArIDE7IC8vIEluZGV4IG9wZXJhdG9yIHJlbWFpbnMgaW4g
KCspIGV4cHIgaGVyZS4KKy8vICAgICAgICBmb28oXzMpOworLy8KK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52
ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNo
CisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
U0VQQVJBVEVDT01QT1VOREVYUFJFU1NJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJhOGM2ZDEy
MGIwYjQ1MjIwNjk0YmZiYjY3NGYwZGJjM2QwYzIxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcApAQCAtMCwwICsx
LDc3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0
cnVjdERlY2xhcmF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9v
cHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBTZXBhcmF0b3Ig
OiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgU2VwYXJhdG9yKFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2Us
IHRydWUsICZzeW1ib2xUYWJsZSkge30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNp
dCwgVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IEFTU0VSVChkZWNsTm9kZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBUSW50ZXJt
Tm9kZSAmbm9kZSA9ICpkZWNsTm9kZS0+Z2V0Q2hpbGROb2RlKDApOworCisgICAgICAgIGlmIChU
SW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgICAgICAgID0gc3ltYm9sTm9k
ZS0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICA9
IHZhci5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUg
PSB2YXIuc3ltYm9sVHlwZSgpOworICAgICAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZp
ZXIoKSAmJiBzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3Ry
dWN0KCk7CisgICAgICAgICAgICAgICAgYXV0byAqc3RydWN0VmFyICAgICAgICAgICAgID0gbmV3
IFRWYXJpYWJsZShtU3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFR5cGUoc3RydWN0dXJl
LCB0cnVlKSwgU3ltYm9sVHlwZTo6RW1wdHkpOworCisgICAgICAgICAgICAgICAgYXV0byAqaW5z
dGFuY2VUeXBlID0gbmV3IFRUeXBlKHN0cnVjdHVyZSwgZmFsc2UpOworICAgICAgICAgICAgICAg
IGluc3RhbmNlVHlwZS0+c2V0UXVhbGlmaWVyKHR5cGUuZ2V0UXVhbGlmaWVyKCkpOworICAgICAg
ICAgICAgICAgIGF1dG8gKmluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShtU3ltYm9sVGFibGUs
IHZhci5uYW1lKCksIGluc3RhbmNlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVHlwZSwgdmFyLmV4dGVuc2lvbigpKTsKKworICAg
ICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSByZXBsYWNlbWVudHM7CisgICAgICAgICAgICAg
ICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVEludGVybVN5bWJvbChzdHJ1Y3RWYXIpKTsK
KyAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKG5ldyBUSW50ZXJtU3ltYm9s
KGluc3RhbmNlVmFyKSk7CisgICAgICAgICAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLnB1c2hf
YmFjaygKKyAgICAgICAgICAgICAgICAgICAgTm9kZVJlcGxhY2VXaXRoTXVsdGlwbGVFbnRyeShk
ZWNsTm9kZSwgc3ltYm9sTm9kZSwgc3RkOjptb3ZlKHJlcGxhY2VtZW50cykpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit9
ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jv
b2wgc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21w
aWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFNlcGFyYXRvciBzZXBhcmF0b3IoY29t
cGlsZXIuZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgcm9vdC50cmF2ZXJzZSgmc2VwYXJhdG9yKTsK
KyAgICBpZiAoIXNlcGFyYXRvci51cGRhdGVUcmVlKCZjb21waWxlciwgJnJvb3QpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghU2VwYXJhdGVEZWNsYXJh
dGlvbnMoJmNvbXBpbGVyLCAmcm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRl
Q29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzEyZTgwZDhhNTgxZTQ0
ZTE5NmU4NjY0MzhmOWJjZTFkYTk0M2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaApAQCAtMCwwICsxLDI0IEBACisv
LworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX1NFUEFSQVRFQ09NUE9VTkRTVFJVQ1RERUNMQVJBVElPTlNfSF8KKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VORFNUUlVD
VERFQ0xBUkFUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBzaAorewor
CisvLyBFeGFtcGxlOgorLy8gIHN0cnVjdCBGb28geyBpbnQgeDsgfSBmb287CisvLyBCZWNvbWVz
OgorLy8gIHN0cnVjdCBGb28ge2ludCB4OyB9OyBGb28gZm9vOworQU5HTEVfTk9fRElTQ0FSRCBi
b29sIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxl
ciwgVEludGVybUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01Q
T1VORFNUUlVDVERFQ0xBUkFUSU9OU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NraXBw
aW5nVHJhdmVyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2tpcHBpbmdUcmF2ZXJzZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZjQ5ZGFkMjI1MmU0NjdhZDk3OTFhMTc1ODQwYjY4Y2UyMTYzYjcxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1NraXBwaW5nVHJhdmVyc2VyLmgKQEAgLTAsMCArMSw0NyBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9TS0lQUElOR1RSQVZFUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TS0lQUElOR1RSQVZFUlNFUl9IXworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKworbmFtZXNw
YWNlIHNoCit7CisKKy8vIEEgVEludGVybVRyYXZlcnNlciB0aGF0IHNraXBzIHRyYXZlcnNpbmcg
Y2hpbGRlbiBieSBkZWZhdWx0LgorY2xhc3MgU2tpcHBpbmdUcmF2ZXJzZXIgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgU2tpcHBpbmdUcmF2ZXJzZXIoYm9vbCBw
cmVWaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpblZpc2l0XywKKyAgICAgICAg
ICAgICAgICAgICAgICBib29sIHBvc3RWaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAgVFN5
bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9IG51bGxwdHIpCisgICAgICAgIDogVEludGVybVRyYXZl
cnNlcihwcmVWaXNpdF8sIGluVmlzaXRfLCBwb3N0VmlzaXRfLCBzeW1ib2xUYWJsZSkKKyAgICB7
fQorCisgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmlu
YXJ5ICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQsIFRJ
bnRlcm1UZXJuYXJ5ICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdElmRWxzZShW
aXNpdCwgVEludGVybUlmRWxzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgdmlzaXRT
d2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IHZpc2l0Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgdmlzaXRCbG9j
ayhWaXNpdCwgVEludGVybUJsb2NrICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNp
dERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKikgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoICopIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKFZp
c2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlm
ICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TS0lQUElOR1RS
QVZFUlNFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU3ltYm9sRW52LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzUzZGFjZjJkNjg4Y2JlNjAxNTg4
MDA2YWUyOTdmYWM0MTMwNWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJv
bEVudi5jcHAKQEAgLTAsMCArMSw2ODEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0
aG0+CisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bW11dGFibGVTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2lu
ZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NvbnN0ZXhwciBB
ZGRyZXNzU3BhY2Uga0FkZHJlc3NTcGFjZXNbXSA9IHsKKyAgICBBZGRyZXNzU3BhY2U6OkNvbnN0
YW50LAorICAgIEFkZHJlc3NTcGFjZTo6RGV2aWNlLAorICAgIEFkZHJlc3NTcGFjZTo6VGhyZWFk
LAorfTsKKworY2hhciBjb25zdCAqc2g6OnRvU3RyaW5nKEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sK
KyAgICBzd2l0Y2ggKHNwYWNlKQorICAgIHsKKyAgICAgICAgY2FzZSBBZGRyZXNzU3BhY2U6OkNv
bnN0YW50OgorICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudCI7CisgICAgICAgIGNhc2UgQWRk
cmVzc1NwYWNlOjpEZXZpY2U6CisgICAgICAgICAgICByZXR1cm4gImRldmljZSI7CisgICAgICAg
IGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJlYWQ6CisgICAgICAgICAgICByZXR1cm4gInRocmVhZCI7
CisgICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit1c2luZyBOYW1lVG9TdHJ1
Y3QgPSBzdGQ6Om1hcDxOYW1lLCBjb25zdCBUU3RydWN0dXJlICo+OworCitjbGFzcyBTdHJ1Y3RG
aW5kZXIgOiBUSW50ZXJtUmVidWlsZAoreworICAgIE5hbWVUb1N0cnVjdCBuYW1lVG9TdHJ1Y3Q7
CisKKyAgICBTdHJ1Y3RGaW5kZXIoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJh
dGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBEZWNsYXJhdGlvbiBkZWNsICAgICA9IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKyAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworICAgICAgICBj
b25zdCBUVHlwZSAmdHlwZSAgICA9IHZhci5nZXRUeXBlKCk7CisKKyAgICAgICAgaWYgKHZhci5z
eW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6RW1wdHkgJiYgdHlwZS5pc1N0cnVjdFNwZWNpZmll
cigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzID0gdHlwZS5n
ZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChzKTsKKyAgICAgICAgICAgIGNvbnN0IE5h
bWUgbmFtZSgqcyk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlIComeiA9IG5hbWVUb1N0
cnVjdFtuYW1lXTsKKyAgICAgICAgICAgIEFTU0VSVCgheik7CisgICAgICAgICAgICB6ID0gczsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFByZVJlc3Vs
dCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZu
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5l
aXRoZXJ9OworICAgIH0KKworICBwdWJsaWM6CisgICAgc3RhdGljIE5hbWVUb1N0cnVjdCBGaW5k
U3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCisgICAgewor
ICAgICAgICBTdHJ1Y3RGaW5kZXIgZmluZGVyKGNvbXBpbGVyKTsKKyAgICAgICAgaWYgKCFmaW5k
ZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIExPR0lDX0VSUk9S
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShmaW5kZXIubmFtZVRvU3Ry
dWN0KTsKKyAgICB9Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitUZW1wbGF0ZUFy
Zzo6VGVtcGxhdGVBcmcoYm9vbCB2YWx1ZSkgOiBtS2luZChLaW5kOjpCb29sKSwgbVZhbHVlKHZh
bHVlKSB7fQorCitUZW1wbGF0ZUFyZzo6VGVtcGxhdGVBcmcoaW50IHZhbHVlKSA6IG1LaW5kKEtp
bmQ6OkludCksIG1WYWx1ZSh2YWx1ZSkge30KKworVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJnKHVu
c2lnbmVkIHZhbHVlKSA6IG1LaW5kKEtpbmQ6OlVJbnQpLCBtVmFsdWUodmFsdWUpIHt9CisKK1Rl
bXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyhjb25zdCBUVHlwZSAmdmFsdWUpIDogbUtpbmQoS2luZDo6
VHlwZSksIG1WYWx1ZSh2YWx1ZSkge30KKworYm9vbCBUZW1wbGF0ZUFyZzo6b3BlcmF0b3I9PShj
b25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1LaW5kICE9IG90aGVy
Lm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3aXRj
aCAobUtpbmQpCisgICAgeworICAgICAgICBjYXNlIEtpbmQ6OkJvb2w6CisgICAgICAgICAgICBy
ZXR1cm4gbVZhbHVlLmIgPT0gb3RoZXIubVZhbHVlLmI7CisgICAgICAgIGNhc2UgS2luZDo6SW50
OgorICAgICAgICAgICAgcmV0dXJuIG1WYWx1ZS5pID09IG90aGVyLm1WYWx1ZS5pOworICAgICAg
ICBjYXNlIEtpbmQ6OlVJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLnUgPT0gb3RoZXIu
bVZhbHVlLnU7CisgICAgICAgIGNhc2UgS2luZDo6VHlwZToKKyAgICAgICAgICAgIHJldHVybiAq
bVZhbHVlLnQgPT0gKm90aGVyLm1WYWx1ZS50OworICAgIH0KK30KKworYm9vbCBUZW1wbGF0ZUFy
Zzo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlQXJnICZvdGhlcikgY29uc3QKK3sKKyAgICBpZiAo
bUtpbmQgPCBvdGhlci5tS2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChtS2luZCA+IG90aGVyLm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHN3aXRjaCAobUtpbmQpCisgICAgeworICAgICAgICBjYXNlIEtp
bmQ6OkJvb2w6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmIgPCBvdGhlci5tVmFsdWUuYjsK
KyAgICAgICAgY2FzZSBLaW5kOjpJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmkgPCBv
dGhlci5tVmFsdWUuaTsKKyAgICAgICAgY2FzZSBLaW5kOjpVSW50OgorICAgICAgICAgICAgcmV0
dXJuIG1WYWx1ZS51IDwgb3RoZXIubVZhbHVlLnU7CisgICAgICAgIGNhc2UgS2luZDo6VHlwZToK
KyAgICAgICAgICAgIHJldHVybiAqbVZhbHVlLnQgPCAqb3RoZXIubVZhbHVlLnQ7CisgICAgfQor
fQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIFN5bWJvbEVudjo6VGVtcGxhdGVO
YW1lOjpvcGVyYXRvcj09KGNvbnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGJhc2VOYW1lID09IG90aGVyLmJhc2VOYW1lICYmIHRlbXBsYXRlQXJncyA9PSBvdGhl
ci50ZW1wbGF0ZUFyZ3M7Cit9CisKK2Jvb2wgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6Om9wZXJh
dG9yPChjb25zdCBUZW1wbGF0ZU5hbWUgJm90aGVyKSBjb25zdAoreworICAgIGlmIChiYXNlTmFt
ZSA8IG90aGVyLmJhc2VOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmIChvdGhlci5iYXNlTmFtZSA8IGJhc2VOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdGVtcGxhdGVBcmdzIDwgb3RoZXIudGVtcGxhdGVB
cmdzOworfQorCitib29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjplbXB0eSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGJhc2VOYW1lLmVtcHR5KCkgJiYgdGVtcGxhdGVBcmdzLmVtcHR5KCk7Cit9
CisKK3ZvaWQgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmNsZWFyKCkKK3sKKyAgICBiYXNlTmFt
ZSA9IE5hbWUoKTsKKyAgICB0ZW1wbGF0ZUFyZ3MuY2xlYXIoKTsKK30KKworTmFtZSBTeW1ib2xF
bnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUoc3RkOjpzdHJpbmcgJmJ1ZmZlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQoYnVmZmVyLmVtcHR5KCkpOworCisgICAgaWYgKHRlbXBsYXRlQXJncy5lbXB0
eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2VOYW1lOworICAgIH0KKworICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG4gPSBzdGQ6Om1heCh7CisgICAgICAgIHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCwgIC8vCisgICAgICAgIHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6ZGlnaXRzMTAsICAgICAgIC8vCisgICAgICAgIDUsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG1heF9sZW5ndGgoInRydWUiLCAiZmFsc2UiKQorICAg
IH0pOworCisgICAgYnVmZmVyLnJlc2VydmUoYmFzZU5hbWUucmF3TmFtZSgpLmxlbmd0aCgpICsg
KG4gKyAyKSAqIHRlbXBsYXRlQXJncy5zaXplKCkgKyAxKTsKKyAgICBidWZmZXIgKz0gYmFzZU5h
bWUucmF3TmFtZSgpLmRhdGEoKTsKKworICAgIGlmICghdGVtcGxhdGVBcmdzLmVtcHR5KCkpCisg
ICAgeworICAgICAgICBidWZmZXIgKz0gIjwiOworCisgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVl
OworICAgICAgICBjaGFyIGFyZ0J1ZmZlcltuICsgMV07CisgICAgICAgIGZvciAoY29uc3QgVGVt
cGxhdGVBcmcgJmFyZyA6IHRlbXBsYXRlQXJncykKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGZpcnN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgYnVmZmVyICs9ICIsICI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0
IFRlbXBsYXRlQXJnOjpWYWx1ZSB2YWx1ZSA9IGFyZy52YWx1ZSgpOworICAgICAgICAgICAgY29u
c3QgVGVtcGxhdGVBcmc6OktpbmQga2luZCAgID0gYXJnLmtpbmQoKTsKKyAgICAgICAgICAgIHN3
aXRjaCAoa2luZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRlbXBsYXRl
QXJnOjpLaW5kOjpCb29sOgorICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuYikKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9ICJ0cnVl
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAiZmFs
c2UiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6SW50OgorICAgICAgICAg
ICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdmFsdWUuaSk7CisgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VUludDoKKyAgICAg
ICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIsICIldSIsIHZhbHVlLnUpOworICAgICAg
ICAgICAgICAgICAgICBidWZmZXIgKz0gYXJnQnVmZmVyOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OlR5cGU6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9
ICp2YWx1ZS50OworICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqcyA9
IHR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJ1ZmZlciArPSBzLT5uYW1lKCkuZGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc1NjYWxhckJhc2ljVHlwZSh0eXBl
KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCF0eXBlLmlzQXJyYXkoKSk7ICAvLyBUT0RPCisgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXIgKz0gdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdHlwZS5nZXROb21pbmFs
U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYXJnQnVmZmVy
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAodHlwZS5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBlLmdldENv
bHMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1ZmZlcjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gIngiOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBlLmdldFJvd3MoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1ZmZlcjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGJ1ZmZlciArPSAiPiI7CisgICAgfQorCisgICAgY29uc3QgSW1tdXRhYmxlU3Ry
aW5nIG5hbWUoYnVmZmVyKTsKKyAgICBidWZmZXIuY2xlYXIoKTsKKworICAgIHJldHVybiBOYW1l
KG5hbWUsIGJhc2VOYW1lLnN5bWJvbFR5cGUoKSk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjpUZW1w
bGF0ZU5hbWU6OmFzc2lnbihjb25zdCBOYW1lICZuYW1lLCBzaXplX3QgYXJnQ291bnQsIGNvbnN0
IFRlbXBsYXRlQXJnICphcmdzKQoreworICAgIGJhc2VOYW1lID0gbmFtZTsKKyAgICB0ZW1wbGF0
ZUFyZ3MuY2xlYXIoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kp
CisgICAgeworICAgICAgICB0ZW1wbGF0ZUFyZ3MucHVzaF9iYWNrKGFyZ3NbaV0pOworICAgIH0K
K30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworU3ltYm9sRW52OjpTeW1ib2xFbnYoVENv
bXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQorICAgIDogbVN5bWJvbFRhYmxl
KGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorICAgICAgbU5hbWVUb1N0cnVjdChTdHJ1Y3RG
aW5kZXI6OkZpbmRTdHJ1Y3RzKGNvbXBpbGVyLCByb290KSkKK3t9CisKK2NvbnN0IFRTdHJ1Y3R1
cmUgJlN5bWJvbEVudjo6cmVtYXAoY29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3QKK3sKKyAgICBj
b25zdCBOYW1lIG5hbWUocyk7CisgICAgYXV0byBpdGVyID0gbU5hbWVUb1N0cnVjdC5maW5kKG5h
bWUpOworICAgIGlmIChpdGVyID09IG1OYW1lVG9TdHJ1Y3QuZW5kKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gczsKKyAgICB9CisgICAgY29uc3QgVFN0cnVjdHVyZSAmeiA9ICppdGVyLT5zZWNv
bmQ7CisgICAgcmV0dXJuIHo7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgKlN5bWJvbEVudjo6cmVt
YXAoY29uc3QgVFN0cnVjdHVyZSAqcykgY29uc3QKK3sKKyAgICBpZiAocykKKyAgICB7CisgICAg
ICAgIHJldHVybiAmcmVtYXAoKnMpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Y29uc3QgVEZ1bmN0aW9uICZTeW1ib2xFbnY6OmdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCkKK3sK
KyAgICBBU1NFUlQoIW1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKworICAgIFNpZ1RvRnVu
YyAmc2lnVG9GdW5jID0gbU92ZXJsb2Fkc1ttUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXJdOwor
ICAgIFRGdW5jdGlvbiAqJmZ1bmMgICAgID0gc2lnVG9GdW5jW21SZXVzYWJsZVNpZ0J1ZmZlcl07
CisKKyAgICBpZiAoIWZ1bmMpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmcmV0dXJuVHlw
ZSA9IG1SZXVzYWJsZVNpZ0J1ZmZlci5iYWNrKCk7CisgICAgICAgIG1SZXVzYWJsZVNpZ0J1ZmZl
ci5wb3BfYmFjaygpOworCisgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1SZXVzYWJsZVRlbXBs
YXRlTmFtZUJ1ZmZlci5mdWxsTmFtZShtUmV1c2FibGVTdHJpbmdCdWZmZXIpOworCisgICAgICAg
IGZ1bmMgPSBuZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCBuYW1l
LnN5bWJvbFR5cGUoKSwgJnJldHVyblR5cGUsIGZhbHNlKTsKKyAgICAgICAgZm9yIChjb25zdCBU
VHlwZSAmcGFyYW1UeXBlIDogbVJldXNhYmxlU2lnQnVmZmVyKQorICAgICAgICB7CisgICAgICAg
ICAgICBmdW5jLT5hZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgm
bVN5bWJvbFRhYmxlLCBrRW1wdHlJbW11dGFibGVTdHJpbmcsICZwYXJhbVR5cGUsIFN5bWJvbFR5
cGU6OkVtcHR5KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtUmV1c2FibGVTaWdCdWZmZXIu
Y2xlYXIoKTsKKyAgICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuY2xlYXIoKTsKKworICAg
IHJldHVybiAqZnVuYzsKK30KKworY29uc3QgVEZ1bmN0aW9uICZTeW1ib2xFbnY6OmdldEZ1bmN0
aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcmFtQ291bnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAqKnBhcmFtVHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1wbGF0ZUFy
Z3MpCit7CisgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKyAgICBBU1NF
UlQobVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmVtcHR5KCkpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisgICAgeworICAgICAgICBtUmV1c2FibGVT
aWdCdWZmZXIucHVzaF9iYWNrKCpwYXJhbVR5cGVzW2ldKTsKKyAgICB9CisgICAgbVJldXNhYmxl
U2lnQnVmZmVyLnB1c2hfYmFjayhyZXR1cm5UeXBlKTsKKyAgICBtUmV1c2FibGVUZW1wbGF0ZU5h
bWVCdWZmZXIuYXNzaWduKG5hbWUsIHRlbXBsYXRlQXJnQ291bnQsIHRlbXBsYXRlQXJncyk7Cisg
ICAgcmV0dXJuIGdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCk7Cit9CisKK1RJbnRlcm1BZ2dyZWdh
dGUgJlN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJnJldHVyblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBs
YXRlQXJnICp0ZW1wbGF0ZUFyZ3MpCit7CisgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5l
bXB0eSgpKTsKKyAgICBBU1NFUlQobVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmVtcHR5KCkp
OworCisgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJncykKKyAgICB7CisgICAgICAgIFRJ
bnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworICAgICAgICBBU1NFUlQodGFy
Zyk7CisgICAgICAgIG1SZXVzYWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2sodGFyZy0+Z2V0VHlwZSgp
KTsKKyAgICB9CisgICAgbVJldXNhYmxlU2lnQnVmZmVyLnB1c2hfYmFjayhyZXR1cm5UeXBlKTsK
KyAgICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuYXNzaWduKG5hbWUsIHRlbXBsYXRlQXJn
Q291bnQsIHRlbXBsYXRlQXJncyk7CisgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gZ2V0RnVu
Y3Rpb25PdmVybG9hZEltcGwoKTsKKyAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0
ZVJhd0Z1bmN0aW9uQ2FsbChmdW5jLCAmYXJncyk7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5
bWJvbEVudjo6bmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3QgJmZpZWxk
cykKK3sKKyAgICBBU1NFUlQobmFtZS5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJ
bnRlcm5hbCk7CisKKyAgICBUU3RydWN0dXJlIComcyA9IG1BbmdsZVN0cnVjdHNbbmFtZS5yYXdO
YW1lKCldOworICAgIEFTU0VSVCghcyk7CisgICAgcyA9IG5ldyBUU3RydWN0dXJlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLCAmZmllbGRzLCBuYW1lLnN5bWJvbFR5cGUoKSk7CisgICAg
cmV0dXJuICpzOworfQorCitjb25zdCBUU3RydWN0dXJlICZTeW1ib2xFbnY6OmdldFRleHR1cmVF
bnYoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBs
ZXJUeXBlKSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqJmVudiA9IG1UZXh0dXJlRW52c1tzYW1w
bGVyVHlwZV07CisgICAgaWYgKGVudiA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgYXV0byAq
dGV4dHVyZVR5cGUgPSBuZXcgVFR5cGUoc2FtcGxlclR5cGUpOworICAgICAgICBhdXRvICp0ZXh0
dXJlICAgICA9IG5ldyBURmllbGQodGV4dHVyZVR5cGUsIEltbXV0YWJsZVN0cmluZygidGV4dHVy
ZSIpLCBrTm9Tb3VyY2VMb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5
bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgbWFya0FzUG9pbnRlcigqdGV4dHVyZSwg
QWRkcmVzc1NwYWNlOjpUaHJlYWQpOworCisgICAgICAgIGF1dG8gKnNhbXBsZXIgPQorICAgICAg
ICAgICAgbmV3IFRGaWVsZChuZXcgVFR5cGUoJmdldFNhbXBsZXJTdHJ1Y3QoKSwgZmFsc2UpLCBJ
bW11dGFibGVTdHJpbmcoInNhbXBsZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAga05vU291
cmNlTG9jLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgIG1hcmtBc1BvaW50ZXIo
KnNhbXBsZXIsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKworICAgICAgICBzdGQ6OnN0cmluZyBl
bnZOYW1lOworICAgICAgICBlbnZOYW1lICs9ICJUZXh0dXJlRW52PCI7CisgICAgICAgIGVudk5h
bWUgKz0gR2V0VGV4dHVyZVR5cGVOYW1lKHNhbXBsZXJUeXBlKS5yYXdOYW1lKCkuZGF0YSgpOwor
ICAgICAgICBlbnZOYW1lICs9ICI+IjsKKworICAgICAgICBlbnYgPSAmbmV3U3RydWN0dXJlKE5h
bWUoZW52TmFtZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKm5ldyBURmllbGRMaXN0e3RleHR1cmUsIHNhbXBsZXJ9KTsKKyAgICB9Cisg
ICAgcmV0dXJuICplbnY7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6Z2V0U2Ft
cGxlclN0cnVjdCgpCit7CisgICAgaWYgKCFtU2FtcGxlcikKKyAgICB7CisgICAgICAgIG1TYW1w
bGVyID0gbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCJtZXRh
bDo6c2FtcGxlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBURmll
bGRMaXN0KCksIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICB9CisgICAgcmV0dXJuICpt
U2FtcGxlcjsKK30KKwordm9pZCBTeW1ib2xFbnY6Om1hcmtTcGFjZShWYXJGaWVsZCB4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzU3BhY2Ugc3BhY2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiAm
bWFwKQoreworICAgIC8vIEl0IGlzIGluIHByaW5jaXBsZSBwZXJtaXNzaWJsZSB0byBoYXZlIHJl
ZmVyZW5jZXMgdG8gcG9pbnRlcnMgb3IgbXVsdGlwbGUgcG9pbnRlcnMsIGJ1dCB0aGlzCisgICAg
Ly8gaXMgbm90IHJlcXVpcmVkIGZvciBub3cgYW5kIHdvdWxkIHJlcXVpcmUgY29kZSBjaGFuZ2Vz
IHRvIGdldCByaWdodC4KKyAgICBBU1NFUlQoIWlzUG9pbnRlcih4KSk7CisgICAgQVNTRVJUKCFp
c1JlZmVyZW5jZSh4KSk7CisKKyAgICBtYXBbeF0gPSBzcGFjZTsKK30KKworY29uc3QgQWRkcmVz
c1NwYWNlICpTeW1ib2xFbnY6OmlzU3BhY2UoVmFyRmllbGQgeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwg
QWRkcmVzc1NwYWNlPiAmbWFwKSBjb25zdAoreworICAgIGNvbnN0IGF1dG8gaXRlciA9IG1hcC5m
aW5kKHgpOworICAgIGlmIChpdGVyID09IG1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICBjb25zdCBBZGRyZXNzU3BhY2Ugc3BhY2UgPSBpdGVyLT5z
ZWNvbmQ7CisgICAgY29uc3QgYXV0byBpbmRleCAgICAgICAgID0gc3RhdGljX2Nhc3Q8c3RkOjp1
bmRlcmx5aW5nX3R5cGVfdDxBZGRyZXNzU3BhY2U+PihzcGFjZSk7CisgICAgcmV0dXJuICZrQWRk
cmVzc1NwYWNlc1tpbmRleF07Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKFZh
ckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sKKyAgICByZXR1cm4gbWFya1NwYWNlKHgs
IHNwYWNlLCBtUG9pbnRlcnMpOworfQorCit2b2lkIFN5bWJvbEVudjo6bWFya0FzUmVmZXJlbmNl
KFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sKKyAgICByZXR1cm4gbWFya1NwYWNl
KHgsIHNwYWNlLCBtUmVmZXJlbmNlcyk7Cit9CisKK2NvbnN0IEFkZHJlc3NTcGFjZSAqU3ltYm9s
RW52Ojppc1BvaW50ZXIoVmFyRmllbGQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTcGFjZSh4
LCBtUG9pbnRlcnMpOworfQorCitjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6aXNSZWZl
cmVuY2UoVmFyRmllbGQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTcGFjZSh4LCBtUmVmZXJl
bmNlcyk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQYWNrZWQoY29uc3QgVEZpZWxkICZm
aWVsZCkKK3sKKyAgICBtUGFja2VkRmllbGRzLmluc2VydCgmZmllbGQpOworfQorCitib29sIFN5
bWJvbEVudjo6aXNQYWNrZWQoY29uc3QgVEZpZWxkICZmaWVsZCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVBhY2tlZEZpZWxkcy5maW5kKCZmaWVsZCkgIT0gbVBhY2tlZEZpZWxkcy5lbmQoKTsKK30K
Kworc3RhdGljIFRCYXNpY1R5cGUgR2V0VGV4dHVyZUJhc2ljVHlwZShUQmFzaWNUeXBlIGJhc2lj
VHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKGJhc2ljVHlwZSkpOworCisgICAgc3dpdGNo
IChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFs
T0VTOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJEWTJZRVhUOgorICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVM6CisgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJETVNBcnJheToKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyVmlk
ZW9XRUJHTDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFk
b3c6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEOgorICAgICAgICBjYXNlIEVidFNhbXBsZXIx
REFycmF5OgorICAgICAgICBjYXNlIEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorICAgICAgICBj
YXNlIEVidFNhbXBsZXJCdWZmZXI6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVBcnJheToK
KyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorICAgICAgICBjYXNlIEVi
dFNhbXBsZXIxRFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0U2hhZG93Ogor
ICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEZsb2F0OworCisgICAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgICBjYXNl
IEVidElTYW1wbGVyQ3ViZToKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRNU0Fy
cmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIxREFycmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRSZWN0OgorICAgICAgICBjYXNl
IEVidElTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5Ogor
ICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEludDsKKworICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgICAgY2FzZSBF
YnRVU2FtcGxlckN1YmU6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAg
ICBjYXNlIEVidFVTYW1wbGVyMkRNUzoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJETVNBcnJh
eToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVy
MURBcnJheToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEUmVjdDoKKyAgICAgICAgY2FzZSBF
YnRVU2FtcGxlckJ1ZmZlcjoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmVBcnJheToKKyAg
ICAgICAgICAgIHJldHVybiBUQmFzaWNUeXBlOjpFYnRVSW50OworCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5
cGU6OkVidFZvaWQ7CisgICAgfQorfQorCitOYW1lIHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUoVEJh
c2ljVHlwZSBzYW1wbGVyVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBsZXJUeXBl
KSk7CisKKyAgICBjb25zdCBUQmFzaWNUeXBlIHRleHR1cmVUeXBlID0gR2V0VGV4dHVyZUJhc2lj
VHlwZShzYW1wbGVyVHlwZSk7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKworI2RlZmluZSBIQU5E
TEVfVEVYVFVSRV9OQU1FKGJhc2VOYW1lKSAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzd2l0Y2gg
KHRleHR1cmVUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2Ug
VEJhc2ljVHlwZTo6RWJ0RmxvYXQ6ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5h
bWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjxmbG9hdD4iOyBcCisgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2UgVEJh
c2ljVHlwZTo6RWJ0SW50OiAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5hbWUg
PSAibWV0YWw6OiIgYmFzZU5hbWUgIjxpbnQ+IjsgICBcCisgICAgICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2UgVEJhc2lj
VHlwZTo6RWJ0VUludDogICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5hbWUgPSAi
bWV0YWw6OiIgYmFzZU5hbWUgIjx1aW50PiI7ICBcCisgICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIExPR0lDX0VSUk9S
KCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbmFtZSA9IG51bGxw
dHI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICBzd2l0
Y2ggKHNhbXBsZXJUeXBlKQorICAgIHsKKyAgICAgICAgLy8gMWQKKyAgICAgICAgY2FzZSBFYnRT
YW1wbGVyMUQ6ICAvLyBEZXNrdG9wIEdMU0wgc2FtcGxlciB0eXBlOgorICAgICAgICBjYXNlIEVi
dElTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIxRDoKKyAgICAgICAgICAgIEhB
TkRMRV9URVhUVVJFX05BTUUoInRleHR1cmUxZCIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgLy8gMWQgYXJyYXkKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURBcnJheToKKyAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjFEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIxREFy
cmF5OgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFkX2FycmF5Iik7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBCdWZmZXIgdGV4dHVyZXMKKyAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyQnVmZmVy
OgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyQnVmZmVyOgorICAgICAgICAgICAgSEFORExFX1RF
WFRVUkVfTkFNRSgidGV4dHVyZV9idWZmZXIiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIC8vIDJkIHRleHR1cmVzCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICBj
YXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRSZWN0Ogor
ICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRSZWN0OgorICAgICAgICAgICAgSEFORExFX1RFWFRV
UkVfTkFNRSgidGV4dHVyZTJkIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyAz
ZCB0ZXh0dXJlcworICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjNEOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAgICAgICBIQU5E
TEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlM2QiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIC8vIEN1YmUgdGV4dHVyZXMKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgor
ICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZWN1YmUiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIC8vIDJkIGFycmF5IHRleHR1cmVzCisgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAg
ICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJF
X05BTUUoInRleHR1cmUyZF9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRNUzoKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6CisgICAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TOgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFN
RSgidGV4dHVyZTJkX21zIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6Cisg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgICAgICBIQU5ETEVfVEVY
VFVSRV9OQU1FKCJ0ZXh0dXJlMmRfbXNfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIC8vIGN1YmUgYXJyYXkKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5Ogor
ICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICBjYXNlIEVidFVTYW1w
bGVyQ3ViZUFycmF5OgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZWN1
YmVfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFNoYWRvdworICAg
ICAgICBjYXNlIEVidFNhbXBsZXIxRFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURB
cnJheVNoYWRvdzoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIEhBTkRMRV9URVhU
VVJFX05BTUUoIlRPRE8iKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEUmVjdFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6Cisg
ICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkIik7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlIik7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICAgICAgSEFORExF
X1RFWFRVUkVfTkFNRSgiZGVwdGgyZF9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorICAgICAgICAgICAgSEFORExF
X1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlX2FycmF5Iik7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAvLyBFeHRlbnRpb25zCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VT
OiAgICAgICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgZXhpc3RzOgor
ICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJEWTJZRVhUOiAgLy8gT25seSB2YWxpZCBp
ZiBHTF9FWFRfWVVWX3RhcmdldCBleGlzdHM6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVv
V0VCR0w6CisgICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9O
QU1FKCJUT0RPIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIG5hbWUgPSBudWxscHRyOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorCisjdW5kZWYgSEFORExFX1RFWFRVUkVfTkFNRQorCisg
ICAgcmV0dXJuIE5hbWUobmFtZSwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRjOTY0NWUwNTE5ODg2N2YyNWRjMDMwYzAyZWVjMDc1NjVmYmQyZTEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgKQEAgLTAsMCArMSwyMTgg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfU1lNQk9MRU5WX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1NZTUJPTEVOVl9IXworCisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJlbmNlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gK
K3sKKworZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UKK3sKKyAgICBDb25zdGFudCwKKyAgICBEZXZp
Y2UsCisgICAgVGhyZWFkLAorfTsKKworY2hhciBjb25zdCAqdG9TdHJpbmcoQWRkcmVzc1NwYWNl
IHNwYWNlKTsKKworY2xhc3MgVmFyRmllbGQKK3sKKyAgcHVibGljOgorICAgIFZhckZpZWxkKGNv
bnN0IFRWYXJpYWJsZSAmdmFyKSA6IG1WYXJpYWJsZSgmdmFyKSB7fQorICAgIFZhckZpZWxkKGNv
bnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCkge30KKworICAgIEFOR0xFX0lOTElO
RSBjb25zdCBUVmFyaWFibGUgKnZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbVZhcmlhYmxlOyB9
CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZpZWxkICpmaWVsZCgpIGNvbnN0IHsgcmV0dXJu
IG1GaWVsZDsgfQorCisgICAgQU5HTEVfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYXJG
aWVsZCAmb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVZhcmlhYmxlID09IG90
aGVyLm1WYXJpYWJsZSAmJiBtRmllbGQgPT0gb3RoZXIubUZpZWxkOworICAgIH0KKworICBwcml2
YXRlOgorICAgIGNvbnN0IFRWYXJpYWJsZSAqbVZhcmlhYmxlID0gbnVsbHB0cjsKKyAgICBjb25z
dCBURmllbGQgKm1GaWVsZCAgICAgICA9IG51bGxwdHI7Cit9OworCit9ICAvLyBuYW1lc3BhY2Ug
c2gKKworbmFtZXNwYWNlIHN0ZAoreworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IGhhc2g8c2g6OlZh
ckZpZWxkPgoreworICAgIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IHNoOjpWYXJGaWVsZCAmeCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IHNoOjpUVmFyaWFibGUgKnZhciA9IHgudmFyaWFi
bGUoKTsKKyAgICAgICAgaWYgKHZhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6aGFzaDxjb25zdCBzaDo6VFZhcmlhYmxlICo+KCkodmFyKTsKKyAgICAgICAgfQorICAgICAg
ICBjb25zdCBzaDo6VEZpZWxkICpmaWVsZCA9IHguZmllbGQoKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6aGFzaDxjb25zdCBzaDo6VEZpZWxkICo+KCkoZmllbGQpOworICAgIH0KK307CisKK30gIC8v
IG5hbWVzcGFjZSBzdGQKKworbmFtZXNwYWNlIHNoCit7CisKK2NsYXNzIFRlbXBsYXRlQXJnCit7
CisgIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEtpbmQKKyAgICB7CisgICAgICAgIEJvb2wsCisg
ICAgICAgIEludCwKKyAgICAgICAgVUludCwKKyAgICAgICAgVHlwZSwKKyAgICB9OworCisgICAg
dW5pb24gVmFsdWUKKyAgICB7CisgICAgICAgIFZhbHVlKGJvb2wgdmFsdWUpIDogYih2YWx1ZSkg
e30KKyAgICAgICAgVmFsdWUoaW50IHZhbHVlKSA6IGkodmFsdWUpIHt9CisgICAgICAgIFZhbHVl
KHVuc2lnbmVkIHZhbHVlKSA6IHUodmFsdWUpIHt9CisgICAgICAgIFZhbHVlKGNvbnN0IFRUeXBl
ICZ2YWx1ZSkgOiB0KCZ2YWx1ZSkge30KKworICAgICAgICBib29sIGI7CisgICAgICAgIGludCBp
OworICAgICAgICB1bnNpZ25lZCB1OworICAgICAgICBjb25zdCBUVHlwZSAqdDsKKyAgICB9Owor
CisgICAgVGVtcGxhdGVBcmcoYm9vbCB2YWx1ZSk7CisgICAgVGVtcGxhdGVBcmcoaW50IHZhbHVl
KTsKKyAgICBUZW1wbGF0ZUFyZyh1bnNpZ25lZCB2YWx1ZSk7CisgICAgVGVtcGxhdGVBcmcoY29u
c3QgVFR5cGUgJnZhbHVlKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZW1wbGF0ZUFy
ZyAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlQXJnICZv
dGhlcikgY29uc3Q7CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtS2luZDsgfQor
ICAgIFZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9CisKKyAgcHVibGljOgor
ICAgIEtpbmQgbUtpbmQ7CisgICAgVmFsdWUgbVZhbHVlOworfTsKKworLy8gQW4gZW52aXJvbm1l
bnQgZm9yIGNyZWF0aW5nIGFuZCB1bmlxdWVseSBzaGFyaW5nIFRTeW1ib2wgb2JqZWN0cy4KK2Ns
YXNzIFN5bWJvbEVudgoreworICAgIGNsYXNzIFRlbXBsYXRlTmFtZQorICAgIHsKKyAgICAgICAg
TmFtZSBiYXNlTmFtZTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VGVtcGxhdGVBcmc+IHRlbXBsYXRl
QXJnczsKKworICAgICAgcHVibGljOgorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVGVt
cGxhdGVOYW1lICZvdGhlcikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRl
bXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0OworCisgICAgICAgIGJvb2wgZW1wdHkoKSBjb25zdDsK
KyAgICAgICAgdm9pZCBjbGVhcigpOworCisgICAgICAgIE5hbWUgZnVsbE5hbWUoc3RkOjpzdHJp
bmcgJmJ1ZmZlcikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBhc3NpZ24oY29uc3QgTmFtZSAmbmFt
ZSwgc2l6ZV90IGFyZ0NvdW50LCBjb25zdCBUZW1wbGF0ZUFyZyAqYXJncyk7CisgICAgfTsKKwor
ICAgIHVzaW5nIFR5cGVSZWYgICAgICAgID0gQ1JlZjxUVHlwZT47CisgICAgdXNpbmcgU2lnICAg
ICAgICAgICAgPSBzdGQ6OnZlY3RvcjxUeXBlUmVmPjsgIC8vIFBhcmFtMCwgUGFyYW0xLCAuLi4g
UGFyYW1OLCBSZXR1cm4KKyAgICB1c2luZyBTaWdUb0Z1bmMgICAgICA9IHN0ZDo6bWFwPFNpZywg
VEZ1bmN0aW9uICo+OworICAgIHVzaW5nIE92ZXJsb2FkcyAgICAgID0gc3RkOjptYXA8VGVtcGxh
dGVOYW1lLCBTaWdUb0Z1bmM+OworICAgIHVzaW5nIEFuZ2xlU3RydWN0cyAgID0gc3RkOjptYXA8
SW1tdXRhYmxlU3RyaW5nLCBUU3RydWN0dXJlICo+OworICAgIHVzaW5nIFRleHR1cmVTdHJ1Y3Rz
ID0gc3RkOjptYXA8VEJhc2ljVHlwZSwgVFN0cnVjdHVyZSAqPjsKKworICBwdWJsaWM6CisgICAg
U3ltYm9sRW52KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCk7CisKKyAg
ICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKCkgeyByZXR1cm4gbVN5bWJvbFRhYmxlOyB9CisK
KyAgICAvLyBUaGVyZSBleGlzdCBBbmdsZSByZXdyaXRlcyB0aGF0IGNhbiBsZWFkIHRvIGluY29o
ZXJlbnQgc3RydWN0cworICAgIC8vCisgICAgLy8gRXhhbXBsZQorICAgIC8vICAgIHN0cnVjdCBB
IHsgLi4uIH0KKyAgICAvLyAgICBzdHJ1Y3QgQiB7IEEnIGE7IH0gLy8gQScgaGFzIHNhbWUgbmFt
ZSBhcyBBIGJ1dCBpcyBub3QgaWRlbnRpY2FsLgorICAgIC8vIGJlY29tZXMKKyAgICAvLyAgICBz
dHJ1Y3QgQSB7IC4uLiB9CisgICAgLy8gICAgc3RydWN0IEIgeyBBIGE7IH0KKyAgICAvLworICAg
IC8vIFRoaXMgbm90YWJseSBoYXBwZW5zIHdoZW4gQSBjb250YWlucyBhIHNhbXBsZXIgaW4gdGhl
IG9yaWdpbmFsIEdMU0wgY29kZSBidXQgaXMgcmV3cml0dGVuIHRvCisgICAgLy8gbm90IGhhdmUg
YSBzYW1wbGVyLCB5ZXQgdGhlIEEnIHN0cnVjdCBmaWVsZCBzdGlsbCBjb250YWlucyB0aGUgc2Ft
cGxlciBmaWVsZC4KKyAgICBjb25zdCBUU3RydWN0dXJlICZyZW1hcChjb25zdCBUU3RydWN0dXJl
ICZzKSBjb25zdDsKKworICAgIC8vIExpa2UgYFRTdHJ1Y3R1cmUgJnJlbWFwKGNvbnN0IFRTdHJ1
Y3R1cmUgJnMpYCBidXQgYWRkaXRpb25hbGx5IG1hcHMgbnVsbCB0byBudWxsLgorICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgKnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgKnMpIGNvbnN0OworCisgICAgY29u
c3QgVEZ1bmN0aW9uICZnZXRGdW5jdGlvbk92ZXJsb2FkKGNvbnN0IE5hbWUgJm5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5U
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGFy
YW1Db3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFR5cGUgKipwYXJhbVR5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCAgICAgICAgID0gMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVtcGxhdGVBcmcgKnRlbXBsYXRlQXJn
cyA9IG51bGxwdHIpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAmY2FsbEZ1bmN0aW9uT3Zlcmxv
YWQoY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSAmcmV0dXJuVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQgICAg
ICAgICA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVGVtcGxhdGVBcmcgKnRlbXBsYXRlQXJncyA9IG51bGxwdHIpOworCisgICAgY29uc3QgVFN0
cnVjdHVyZSAmbmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3QgJmZpZWxk
cyk7CisKKyAgICBjb25zdCBUU3RydWN0dXJlICZnZXRUZXh0dXJlRW52KFRCYXNpY1R5cGUgc2Ft
cGxlclR5cGUpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJmdldFNhbXBsZXJTdHJ1Y3QoKTsKKwor
ICAgIHZvaWQgbWFya0FzUG9pbnRlcihWYXJGaWVsZCB4LCBBZGRyZXNzU3BhY2Ugc3BhY2UpOwor
ICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0OworCisg
ICAgdm9pZCBtYXJrQXNSZWZlcmVuY2UoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlKTsK
KyAgICBjb25zdCBBZGRyZXNzU3BhY2UgKmlzUmVmZXJlbmNlKFZhckZpZWxkIHgpIGNvbnN0Owor
CisgICAgdm9pZCBtYXJrQXNQYWNrZWQoY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAgYm9vbCBp
c1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxkKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIGNv
bnN0IFRGdW5jdGlvbiAmZ2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKworICAgIHZvaWQgbWFy
a1NwYWNlKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSwgc3RkOjp1bm9yZGVyZWRfbWFw
PFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+ICZtYXApOworICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAq
aXNTcGFjZShWYXJGaWVsZCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCkgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBUU3ltYm9sVGFibGUgJm1TeW1ib2xUYWJsZTsKKworICAgIHN0
ZDo6bWFwPE5hbWUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbU5hbWVUb1N0cnVjdDsKKyAgICBPdmVy
bG9hZHMgbU92ZXJsb2FkczsKKyAgICBTaWcgbVJldXNhYmxlU2lnQnVmZmVyOworICAgIFRlbXBs
YXRlTmFtZSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXI7CisgICAgc3RkOjpzdHJpbmcgbVJl
dXNhYmxlU3RyaW5nQnVmZmVyOworCisgICAgQW5nbGVTdHJ1Y3RzIG1BbmdsZVN0cnVjdHM7Cisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRCYXNpY1R5cGUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbVRl
eHR1cmVFbnZzOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKm1TYW1wbGVyID0gbnVsbHB0cjsKKwor
ICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiBtUG9pbnRlcnM7
CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+IG1SZWZlcmVu
Y2VzOworICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURmllbGQgKj4gbVBhY2tlZEZpZWxk
czsKK307CisKK05hbWUgR2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxlclR5cGUp
OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TWU1CT0xFTlZfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTg0MzMzMmRkOGRhYzI3OTJkYjJkMjYwOGI4NmVlZTEyOWI1YzFlMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3BwCkBAIC0w
LDAgKzEsMzgzIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8dmVj
dG9yPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbW11dGFibGVTdHJpbmdCdWls
ZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBFZGdlcyA9IHN0ZDo6dW5vcmRlcmVkX3NldDxUPjsK
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBHcmFwaCA9IHN0ZDo6dW5vcmRlcmVkX21h
cDxULCBFZGdlczxUPj47CisKK3ZvaWQgQnVpbGRHcmFwaEltcGwoU3ltYm9sRW52ICZzeW1ib2xF
bnYsIEdyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmcsIGNvbnN0IFRTdHJ1Y3R1cmUgKnMpCit7
CisgICAgaWYgKGcuZmluZChzKSAhPSBnLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEVkZ2VzPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmVzID0gZ1tzXTsKKworICAg
IGNvbnN0IFRGaWVsZExpc3QgJmZzID0gcy0+ZmllbGRzKCk7CisgICAgZm9yIChjb25zdCBURmll
bGQgKmYgOiBmcykKKyAgICB7CisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICp6ID0gc3lt
Ym9sRW52LnJlbWFwKGYtPnR5cGUoKS0+Z2V0U3RydWN0KCkpKQorICAgICAgICB7CisgICAgICAg
ICAgICBlcy5pbnNlcnQoeik7CisgICAgICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYs
IGcsIHopOworICAgICAgICAgICAgRWRnZXM8Y29uc3QgVFN0cnVjdHVyZSAqPiAmZXogPSBnW3pd
OworICAgICAgICAgICAgZXMuaW5zZXJ0KGV6LmJlZ2luKCksIGV6LmVuZCgpKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBCdWlsZEdyYXBoKFN5bWJv
bEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJnN0cnVjdHMpCit7CisgICAgR3Jh
cGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBnOworICAgIGZvciAoY29uc3QgVFN0cnVjdHVyZSAqcyA6
IHN0cnVjdHMpCisgICAgeworICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYsIGcsIHMp
OworICAgIH0KKyAgICByZXR1cm4gZzsKK30KKworLy8gQWxnb3J0aG06IGh0dHBzOi8vZW4ud2lr
aXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjRGVwdGgtZmlyc3Rfc2VhcmNoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0ZDo6dmVjdG9yPFQ+IFRvcG9zb3J0KGNvbnN0IEdyYXBo
PFQ+ICZnKQoreworICAgIC8vIG5vZGVzIHdpdGggdGVtcG9yYXJ5IG1hcmsKKyAgICBzdGQ6OnVu
b3JkZXJlZF9zZXQ8VD4gdGVtcHM7CisKKyAgICAvLyBub2RlcyB3aXRob3V0IHBlcm1hbmVudCBt
YXJrCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PFQ+IGludlBlcm1zOworICAgIGZvciAoY29uc3Qg
YXV0byAmZW50cnkgOiBnKQorICAgIHsKKyAgICAgICAgaW52UGVybXMuaW5zZXJ0KGVudHJ5LmZp
cnN0KTsKKyAgICB9CisKKyAgICAvLyBMIOKGkCBFbXB0eSBsaXN0IHRoYXQgd2lsbCBjb250YWlu
IHRoZSBzb3J0ZWQgZWxlbWVudHMKKyAgICBzdGQ6OnZlY3RvcjxUPiBMOworCisgICAgLy8gZnVu
Y3Rpb24gdmlzaXQobm9kZSBuKQorICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChUKT4gdmlzaXQgPSBb
Jl0oVCBuKSAtPiB2b2lkIHsKKyAgICAgICAgLy8gaWYgbiBoYXMgYSBwZXJtYW5lbnQgbWFyayB0
aGVuCisgICAgICAgIGlmIChpbnZQZXJtcy5maW5kKG4pID09IGludlBlcm1zLmVuZCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyByZXR1cm4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAvLyBpZiBuIGhhcyBhIHRlbXBvcmFyeSBtYXJrIHRoZW4KKyAgICAgICAg
aWYgKHRlbXBzLmZpbmQobikgIT0gdGVtcHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIHN0b3AgICAobm90IGEgREFHKQorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIG1hcmsgbiB3aXRoIGEgdGVtcG9yYXJ5IG1hcmsKKyAgICAgICAg
dGVtcHMuaW5zZXJ0KG4pOworCisgICAgICAgIC8vIGZvciBlYWNoIG5vZGUgbSB3aXRoIGFuIGVk
Z2UgZnJvbSBuIHRvIG0gZG8KKyAgICAgICAgYXV0byBlbkl0ZXIgPSBnLmZpbmQobik7CisgICAg
ICAgIEFTU0VSVChlbkl0ZXIgIT0gZy5lbmQoKSk7CisgICAgICAgIGNvbnN0IEVkZ2VzPFQ+ICZl
biA9IGVuSXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKFQgbSA6IGVuKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyB2aXNpdChtKQorICAgICAgICAgICAgdmlzaXQobSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyByZW1vdmUgdGVtcG9yYXJ5IG1hcmsgZnJvbSBuCisgICAgICAgIHRlbXBz
LmVyYXNlKG4pOworICAgICAgICAvLyBtYXJrIG4gd2l0aCBhIHBlcm1hbmVudCBtYXJrCisgICAg
ICAgIGludlBlcm1zLmVyYXNlKG4pOworICAgICAgICAvLyBhZGQgbiB0byBoZWFkIG9mIEwKKyAg
ICAgICAgTC5wdXNoX2JhY2sobik7CisgICAgfTsKKworICAgIC8vIHdoaWxlIGV4aXN0cyBub2Rl
cyB3aXRob3V0IGEgcGVybWFuZW50IG1hcmsgZG8KKyAgICB3aGlsZSAoIWludlBlcm1zLmVtcHR5
KCkpCisgICAgeworICAgICAgICAvLyBzZWxlY3QgYW4gdW5tYXJrZWQgbm9kZSBuCisgICAgICAg
IFQgbiA9ICppbnZQZXJtcy5iZWdpbigpOworICAgICAgICAvLyB2aXNpdChuKQorICAgICAgICB2
aXNpdChuKTsKKyAgICB9CisKKyAgICByZXR1cm4gTDsKK30KKworVEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbiAqQ3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihUU3ltYm9sVGFibGUgJnN5bWJv
bFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUU3RydWN0dXJlICZhU3RydWN0VHlwZSkKK3sKKyAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLworCisgICAgYXV0byAmZnVuY0VxdWFsaXR5ID0KKyAgICAgICAgKm5ldyBURnVu
Y3Rpb24oJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImVxdWFsIiksIFN5bWJvbFR5cGU6
OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShUQmFzaWNU
eXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisgICAgYXV0byAmYVN0cnVjdCA9IENyZWF0ZUluc3RhbmNl
VmFyaWFibGUoc3ltYm9sVGFibGUsIGFTdHJ1Y3RUeXBlLCBOYW1lKCJhIikpOworICAgIGF1dG8g
JmJTdHJ1Y3QgPSBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBhU3RydWN0VHlw
ZSwgTmFtZSgiYiIpKTsKKyAgICBmdW5jRXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZhU3RydWN0KTsK
KyAgICBmdW5jRXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZiU3RydWN0KTsKKworICAgIGF1dG8gJmJv
ZHlFcXVhbGl0eSA9ICpuZXcgVEludGVybUJsb2NrKCk7CisgICAgc3RkOjp2ZWN0b3I8VEludGVy
bVR5cGVkICo+IGFuZE5vZGVzOworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBjb25z
dCBURmllbGRMaXN0ICZhRmllbGRzID0gYVN0cnVjdFR5cGUuZmllbGRzKCk7CisgICAgY29uc3Qg
c2l6ZV90IHNpemUgICAgICAgICA9IGFGaWVsZHMuc2l6ZSgpOworCisgICAgYXV0byB0ZXN0RXF1
YWxpdHkgPSBbJl0oVEludGVybVR5cGVkICZhLCBUSW50ZXJtVHlwZWQgJmIpIC0+IFRJbnRlcm1U
eXBlZCAqIHsKKyAgICAgICAgQVNTRVJUKGEuZ2V0VHlwZSgpID09IGIuZ2V0VHlwZSgpKTsKKyAg
ICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBhLmdldFR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUu
aXNWZWN0b3IoKSB8fCB0eXBlLmlzTWF0cml4KCkgfHwgdHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byAqZnVuYyA9CisgICAgICAgICAgICAgICAgbmV3IFRGdW5j
dGlvbigmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiZXF1YWwiKSwgU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gVEludGVybUFn
Z3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKCpmdW5jLCBuZXcgVEludGVybVNlcXVlbmNleyZh
LCAmYn0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wRXF1YWwsICZhLCAmYik7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgc2l6ZTsg
KytpZHgpCisgICAgeworICAgICAgICBjb25zdCBURmllbGQgJmFGaWVsZCAgICA9ICphRmllbGRz
W2lkeF07CisgICAgICAgIGNvbnN0IFRUeXBlICZhRmllbGRUeXBlID0gKmFGaWVsZC50eXBlKCk7
CisgICAgICAgIGF1dG8gJmFGaWVsZE5hbWUgICAgICAgID0gYUZpZWxkLm5hbWUoKTsKKworICAg
ICAgICBpZiAoYUZpZWxkVHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVCghYUZpZWxkVHlwZS5pc0FycmF5T2ZBcnJheXMoKSk7ICAvLyBUT0RPCisgICAgICAgICAg
ICBpbnQgZGltID0gYUZpZWxkVHlwZS5nZXRPdXRlcm1vc3RBcnJheVNpemUoKTsKKyAgICAgICAg
ICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2QpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYXV0byAmYUFjY2VzcyA9IEFjY2Vzc0luZGV4KEFjY2Vzc0ZpZWxkKGFTdHJ1Y3Qs
IGFGaWVsZE5hbWUpLCBkKTsKKyAgICAgICAgICAgICAgICBhdXRvICZiQWNjZXNzID0gQWNjZXNz
SW5kZXgoQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSksIGQpOworICAgICAgICAgICAg
ICAgIGF1dG8gKmVxTm9kZSAgPSB0ZXN0RXF1YWxpdHkoYkFjY2VzcywgYUFjY2Vzcyk7CisgICAg
ICAgICAgICAgICAgYW5kTm9kZXMucHVzaF9iYWNrKGVxTm9kZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvICZhQWNj
ZXNzID0gQWNjZXNzRmllbGQoYVN0cnVjdCwgYUZpZWxkTmFtZSk7CisgICAgICAgICAgICBhdXRv
ICZiQWNjZXNzID0gQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSk7CisgICAgICAgICAg
ICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJBY2Nlc3MsIGFBY2Nlc3MpOworICAgICAg
ICAgICAgYW5kTm9kZXMucHVzaF9iYWNrKGVxTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBBU1NFUlQoYW5kTm9kZXMuc2l6ZSgpID4gMCk7ICAvLyBFbXB0eSBzdHJ1Y3RzIGFyZSBub3Qg
YWxsb3dlZCBpbiBHTFNMCisgICAgVEludGVybVR5cGVkICpvdXROb2RlID0gYW5kTm9kZXMuYmFj
aygpOworICAgIGFuZE5vZGVzLnBvcF9iYWNrKCk7CisgICAgZm9yIChUSW50ZXJtVHlwZWQgKmFu
ZE5vZGUgOiBhbmROb2RlcykKKyAgICB7CisgICAgICAgIG91dE5vZGUgPSBuZXcgVEludGVybUJp
bmFyeShUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQsIGFuZE5vZGUsIG91dE5vZGUpOworICAgIH0K
KyAgICBib2R5RXF1YWxpdHkuYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJhbmNoKFRPcGVy
YXRvcjo6RU9wUmV0dXJuLCBvdXROb2RlKSk7CisgICAgYXV0byAqZnVuY1Byb3RvRXF1YWxpdHkg
PSBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZmdW5jRXF1YWxpdHkpOworICAgIHJldHVy
biBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihmdW5jUHJvdG9FcXVhbGl0eSwgJmJvZHlF
cXVhbGl0eSk7Cit9CisKK3N0cnVjdCBEZWNsYXJlZFN0cnVjdHVyZQoreworICAgIFRJbnRlcm1E
ZWNsYXJhdGlvbiAqZGVjbE5vZGU7CisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZXF1
YWxpdHlGdW5jdGlvbkRlZmluaXRpb247CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJl
OworfTsKKworYm9vbCBHZXRBc0RlY2xhcmVkU3RydWN0dXJlKFN5bWJvbEVudiAmc3ltYm9sRW52
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZub2RlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmVkU3RydWN0dXJlICZvdXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFN0cnVjdHVy
ZSAqPiAmdXNlZFN0cnVjdHMpCit7CisgICAgaWYgKFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbE5v
ZGUgPSBub2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAgeworICAgICAgICBBU1NFUlQo
ZGVjbE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICAgICAgVEludGVybU5vZGUgJm5v
ZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKworICAgICAgICBpZiAoVEludGVybVN5
bWJvbCAqc3ltYm9sTm9kZSA9IG5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsK
KyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgID0gdmFyLmdldFR5cGUoKTsKKyAgICAg
ICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBzeW1ib2xFbnYucmVtYXAo
dHlwZS5nZXRTdHJ1Y3QoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHR5
cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG91dC5kZWNsTm9kZSAgPSBkZWNsTm9kZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0
LnN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LmVxdWFsaXR5
RnVuY3Rpb25EZWZpbml0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRTdHJ1Y3Rz
LmZpbmQoc3RydWN0dXJlKSA9PSB1c2VkU3RydWN0cy5lbmQoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID8gbnVsbHB0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ3JlYXRl
U3RydWN0RXF1YWxpdHlGdW5jdGlvbihzeW1ib2xUYWJsZSwgKnN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NsYXNzIEZpbmRT
dHJ1Y3RFcXVhbGl0eVVzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoK
KyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0
IFRTdHJ1Y3R1cmUgKj4gbVVzZWRTdHJ1Y3RzOworCisgICAgRmluZFN0cnVjdEVxdWFsaXR5VXNl
KFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2Us
IGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisgICAge30KKworICAgIGJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKmJpbmFyeSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeS0+Z2V0T3AoKTsKKworICAgICAg
ICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
RXF1YWw6CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWw6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBlICA9IGJpbmFyeS0+
Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJpZ2h0
VHlwZSA9IGJpbmFyeS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIEFT
U0VSVChsZWZ0VHlwZS5nZXRTdHJ1Y3QoKSA9PSByaWdodFR5cGUuZ2V0U3RydWN0KCkpOworICAg
ICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBtU3ltYm9sRW52
LnJlbWFwKGxlZnRUeXBlLmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICBwcml2YXRlOgorICAgIHZvaWQgdXNlU3RydWN0KGNvbnN0IFRTdHJ1Y3R1
cmUgJnN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChtVXNlZFN0cnVjdHMuaW5zZXJ0KCZz
dHJ1Y3R1cmUpLnNlY29uZCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBURmll
bGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdWJTdHJ1Y3QgPSBtU3ltYm9sRW52LnJlbWFw
KGZpZWxkLT50eXBlKCktPmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3ViU3RydWN0KTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OlRvcG9zb3J0U3Ry
dWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJv
bEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBj
KQoreworICAgIEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSBmaW5kZXIoc3ltYm9sRW52KTsKKyAgICBy
b290LnRyYXZlcnNlKCZmaW5kZXIpOworICAgIHBwYy5oYXNTdHJ1Y3RFcSA9ICFmaW5kZXIubVVz
ZWRTdHJ1Y3RzLmVtcHR5KCk7CisKKyAgICBEZWNsYXJlZFN0cnVjdHVyZSBkZWNsYXJlZFN0cnVj
dDsKKyAgICBzdGQ6OnZlY3RvcjxEZWNsYXJlZFN0cnVjdHVyZT4gZGVjbGFyZWRTdHJ1Y3RzOwor
ICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IG5vblN0cnVjdFN0bXROb2RlczsKKworICAg
IHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHN0bXRDb3VudCA9IHJvb3QuZ2V0Q2hpbGRDb3VudCgp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0bXRDb3VudDsgKytpKQorICAgICAg
ICB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAmc3RtdE5vZGUgPSAqcm9vdC5nZXRDaGlsZE5v
ZGUoaSk7CisgICAgICAgICAgICBpZiAoR2V0QXNEZWNsYXJlZFN0cnVjdHVyZShzeW1ib2xFbnYs
IHN0bXROb2RlLCBkZWNsYXJlZFN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCksIGZpbmRlci5tVXNlZFN0cnVjdHMp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlY2xhcmVkU3RydWN0cy5wdXNoX2Jh
Y2soZGVjbGFyZWRTdHJ1Y3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vblN0cnVjdFN0bXROb2Rlcy5wdXNoX2JhY2so
JnN0bXROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAg
ICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBzdHJ1Y3RzOworICAgICAgICBz
dGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFN0cnVjdHVyZSAqLCBEZWNsYXJlZFN0cnVjdHVyZT4g
cmF3VG9EZWNsYXJlZDsKKworICAgICAgICBmb3IgKGNvbnN0IERlY2xhcmVkU3RydWN0dXJlICZk
IDogZGVjbGFyZWRTdHJ1Y3RzKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3RzLnB1c2hf
YmFjayhkLnN0cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQocmF3VG9EZWNsYXJlZC5maW5k
KGQuc3RydWN0dXJlKSA9PSByYXdUb0RlY2xhcmVkLmVuZCgpKTsKKyAgICAgICAgICAgIHJhd1Rv
RGVjbGFyZWRbZC5zdHJ1Y3R1cmVdID0gZDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdGU6
IEdyYXBoIG1heSBjb250YWluIG1vcmUgdGhhbiBvbmx5IGV4cGxpY2l0bHkgZGVjbGFyZWQgc3Ry
dWN0dXJlcy4KKyAgICAgICAgR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBnICAgICAgICAgICAg
ICAgICAgID0gQnVpbGRHcmFwaChzeW1ib2xFbnYsIHN0cnVjdHMpOworICAgICAgICBzdGQ6OnZl
Y3Rvcjxjb25zdCBUU3RydWN0dXJlICo+IHNvcnRlZFN0cnVjdHMgPSBUb3Bvc29ydChnKTsKKyAg
ICAgICAgQVNTRVJUKGRlY2xhcmVkU3RydWN0cy5zaXplKCkgPD0gc29ydGVkU3RydWN0cy5zaXpl
KCkpOworCisgICAgICAgIGRlY2xhcmVkU3RydWN0cy5jbGVhcigpOworICAgICAgICBmb3IgKGNv
bnN0IFRTdHJ1Y3R1cmUgKnMgOiBzb3J0ZWRTdHJ1Y3RzKQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGl0ID0gcmF3VG9EZWNsYXJlZC5maW5kKHMpOworICAgICAgICAgICAgaWYgKGl0ICE9
IHJhd1RvRGVjbGFyZWQuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0
byAmZCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgQVNTRVJUKGQuZGVjbE5vZGUpOwor
ICAgICAgICAgICAgICAgIGRlY2xhcmVkU3RydWN0cy5wdXNoX2JhY2soZCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBu
ZXdTdG10Tm9kZXM7CisKKyAgICAgICAgZm9yIChEZWNsYXJlZFN0cnVjdHVyZSAmZGVjbGFyZWRT
dHJ1Y3QgOiBkZWNsYXJlZFN0cnVjdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChk
ZWNsYXJlZFN0cnVjdC5kZWNsTm9kZSk7CisgICAgICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9i
YWNrKGRlY2xhcmVkU3RydWN0LmRlY2xOb2RlKTsKKyAgICAgICAgICAgIGlmIChkZWNsYXJlZFN0
cnVjdC5lcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9iYWNrKGRlY2xhcmVkU3RydWN0LmVxdWFsaXR5RnVu
Y3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAoVEludGVybU5vZGUgKnN0bXROb2RlIDogbm9uU3RydWN0U3RtdE5vZGVzKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoc3RtdE5vZGUpOworICAgICAgICAgICAgbmV3U3RtdE5vZGVz
LnB1c2hfYmFjayhzdG10Tm9kZSk7CisgICAgICAgIH0KKworICAgICAgICAqcm9vdC5nZXRTZXF1
ZW5jZSgpID0gbmV3U3RtdE5vZGVzOworICAgIH0KKworICAgIHJldHVybiBjb21waWxlci52YWxp
ZGF0ZUFTVCgmcm9vdCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1
Y3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM5MDhl
MzRkZDRkOTZjZDA0ZDYwMjc0ZGYxODFiMGQ0ODkzM2E1MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuaApAQCAtMCwwICsxLDI3IEBACisvLworLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9T
T1JUU1RSVUNUU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9UT1BPU09SVFNUUlVDVFNfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRl
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBEb2VzIGEgdG9wb3NvcnQgb24g
c3RydWN0cyBiYXNlZCBvbiB0eXBlIGRlcGVuZGVuY2llcy4KKy8vIFN0cnVjdCB0eXBlIGRlY2xh
cmF0aW9ucyBhcmUgbW92ZWQgdG8gdGhlIHRvcCBvZiB0aGUgcm9vdCBibG9jay4KK0FOR0xFX05P
X0RJU0NBUkQgYm9vbCBUb3Bvc29ydFN0cnVjdHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbVByZWx1ZGVDb25m
aWcgJnBwYyk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDE0YmM2M2ZjYTI5OGViYTRjZmRhNDY3OTRjZTk2OGExMWZiZDhjYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHAKQEAgLTAsMCArMSw5
NCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1dyYXBNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0FzdEhlbHBlcnMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworY2xhc3MgV3JhcHBlciA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyCit7CisgIHByaXZhdGU6CisgICAgSWRHZW4gJm1JZEdlbjsKKworICBw
dWJsaWM6CisgICAgV3JhcHBlcihUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLCBJZEdlbiAmaWRH
ZW4pCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUsICZzeW1i
b2xUYWJsZSksIG1JZEdlbihpZEdlbikKKyAgICB7fQorCisgICAgYm9vbCB2aXNpdEJsb2NrKFZp
c2l0LCBUSW50ZXJtQmxvY2sgKmJsb2NrTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChibG9ja05vZGUgIT0gZ2V0Um9vdE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpub2RlIDog
KmJsb2NrTm9kZS0+Z2V0U2VxdWVuY2UoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFRJ
bnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlID0gbm9kZS0+Z2V0QXNGdW5jdGlv
bkRlZmluaXRpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBURnVu
Y3Rpb24gJmZ1bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGZ1bmMuaXNNYWluKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICB2aXNpdE1haW4oKmJsb2NrTm9kZSwgZnVuY0RlZk5vZGUpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICB2b2lkIHZp
c2l0TWFpbihUSW50ZXJtQmxvY2sgJnJvb3QsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1
bmNEZWZOb2RlKQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNE
ZWZOb2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQoZnVuYy5pc01haW4oKSk7Cisg
ICAgICAgIEFTU0VSVChmdW5jLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFz
aWNUeXBlOjpFYnRWb2lkKTsKKyAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UGFyYW1Db3VudCgpID09
IDApOworCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZXh0ZXJuYWxNYWluRnVuYyA9ICpmdW5j
RGVmTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZpbnRlcm5h
bE1haW5GdW5jID0gQ2xvbmVGdW5jdGlvbigqbVN5bWJvbFRhYmxlLCBtSWRHZW4sIGV4dGVybmFs
TWFpbkZ1bmMpOworCisgICAgICAgIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqZXh0ZXJuYWxN
YWluUHJvdG8gPSBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAgICAgICAg
VEludGVybUZ1bmN0aW9uUHJvdG90eXBlICppbnRlcm5hbE1haW5Qcm90byA9CisgICAgICAgICAg
ICBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZpbnRlcm5hbE1haW5GdW5jKTsKKworICAg
ICAgICBUSW50ZXJtQmxvY2sgKmV4dGVybmFsTWFpbkJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7
CisgICAgICAgIGV4dGVybmFsTWFpbkJvZHktPmFwcGVuZFN0YXRlbWVudCgKKyAgICAgICAgICAg
IFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm5hbE1haW5GdW5jLCBu
ZXcgVEludGVybVNlcXVlbmNlKCkpKTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmludGVybmFs
TWFpbkJvZHkgPSBmdW5jRGVmTm9kZS0+Z2V0Qm9keSgpOworCisgICAgICAgIFRJbnRlcm1GdW5j
dGlvbkRlZmluaXRpb24gKmV4dGVybmFsTWFpbkRlZiA9CisgICAgICAgICAgICBuZXcgVEludGVy
bUZ1bmN0aW9uRGVmaW5pdGlvbihleHRlcm5hbE1haW5Qcm90bywgZXh0ZXJuYWxNYWluQm9keSk7
CisgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmludGVybmFsTWFpbkRlZiA9Cisg
ICAgICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm5hbE1haW5Qcm90
bywgaW50ZXJuYWxNYWluQm9keSk7CisKKyAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLnB1c2hf
YmFjayhOb2RlUmVwbGFjZVdpdGhNdWx0aXBsZUVudHJ5KAorICAgICAgICAgICAgJnJvb3QsIGZ1
bmNEZWZOb2RlLCBUSW50ZXJtU2VxdWVuY2V7aW50ZXJuYWxNYWluRGVmLCBleHRlcm5hbE1haW5E
ZWZ9KSk7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wgc2g6OldyYXBNYWlu
KFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJsb2NrICZyb290KQor
eworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJs
ZSgpOworICAgIFdyYXBwZXIgd3JhcHBlcihzeW1ib2xUYWJsZSwgaWRHZW4pOworICAgIHJvb3Qu
dHJhdmVyc2UoJndyYXBwZXIpOworICAgIGlmICghd3JhcHBlci51cGRhdGVUcmVlKCZjb21waWxl
ciwgJnJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1dyYXBNYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWIwZWRmZjQyYjhlMzRkZDFhODBhMjc1NTIy
ZGYzYjdkNDZhNDYxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5o
CkBAIC0wLDAgKzEsMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKworbmFt
ZXNwYWNlIHNoCit7CisKKy8vIENoYW5nZXMKKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7IG1haW4t
Ym9keSB9CisvLyBUbworLy8gICAgdm9pZCBGUkVTSF9OQU1FKGFyZ3MpIHsgbWFpbi1ib2R5IH0K
Ky8vICAgIHZvaWQgbWFpbihhcmdzKSB7IEZSRVNIX05BTUUoYXJncyk7IH0KKy8vCisvLyBUaGlz
IHRyYW5zZm9ybWF0aW9uIGlzIHVzZWZ1bCBpZiB0aGUgb3JpZ2luYWwgYG1haW5gIGhhcyBtdWx0
aXBsZSByZXR1cm4gcGF0aHMgYmVjYXVzZSB0aGlzCisvLyByZWR1Y2VzIGRvd24gdG8gYSBzaW5n
bGUgcGF0aCBpbiB0aGUgbmV3IGBtYWluYC4gTmljZSBmb3IgaW5zZXJ0aW5nIGNsZWFudXAgY29k
ZSBpbiBgbWFpbmAuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgV3JhcE1haW4oVENvbXBpbGVyICZj
b21waWxlciwgSWRHZW4gJmlkR2VuLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9ICAvLyBuYW1l
c3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9XUkFQTUFJTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
VXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwYThiZjNhZmQxMjMwZTY1ZmRkY2NlOTgxOGFhN2NjMmNi
OThkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAKQEAgLTAsMCArMSwzMDUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyAgICBwcmFnbWEgd2Fybmlu
ZyhkaXNhYmxlIDogNDcxOCkKKyNlbmRpZgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
Y2xpbWl0cz4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvSW50ZXJtTm9kZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
VGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisKK25hbWVz
cGFjZSBzaAoreworCitjb25zdCBjaGFyICpnZXRCYXNpY01ldGFsU3RyaW5nKGNvbnN0IFRUeXBl
ICp0KQoreworICAgIHN3aXRjaCAodC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgeworICAgICAgICBj
YXNlIEVidFZvaWQ6CisgICAgICAgICAgICByZXR1cm4gInZvaWQiOworICAgICAgICBjYXNlIEVi
dEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisgICAgICAgIGNhc2UgRWJ0SW50
OgorICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAg
ICAgICAgICByZXR1cm4gInVpbnQiOworICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAg
ICByZXR1cm4gImJvb2wiOworICAgICAgICBjYXNlIEVidFl1dkNzY1N0YW5kYXJkRVhUOgorICAg
ICAgICAgICAgcmV0dXJuICJ5dXZDc2NTdGFuZGFyZEVYVCI7CisgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDoKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjNEIjsKKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOworICAg
ICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgICAgICAgIHJldHVybiAic2Ft
cGxlckV4dGVybmFsT0VTIjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWwyRFkyWUVY
VDoKKyAgICAgICAgICAgIHJldHVybiAiX19zYW1wbGVyRXh0ZXJuYWwyRFkyWUVYVCI7CisgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJE
UmVjdCI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICByZXR1
cm4gInNhbXBsZXIyREFycmF5IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNUzoKKyAgICAg
ICAgICAgIHJldHVybiAic2FtcGxlcjJETVMiOworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRE1T
QXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRE1TQXJyYXkiOworICAgICAgICBj
YXNlIEVidFNhbXBsZXJDdWJlQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJl
QXJyYXkiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICByZXR1cm4g
ImlzYW1wbGVyMkQiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICAgICAgICBy
ZXR1cm4gImlzYW1wbGVyM0QiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAg
ICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlIjsKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
QXJyYXk6CisgICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyMkRBcnJheSI7CisgICAgICAgIGNh
c2UgRWJ0SVNhbXBsZXIyRE1TOgorICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjJETVMiOwor
ICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRNU0FycmF5OgorICAgICAgICAgICAgcmV0dXJuICJp
c2FtcGxlcjJETVNBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlQXJyYXk6Cisg
ICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyQ3ViZUFycmF5IjsKKyAgICAgICAgY2FzZSBFYnRV
U2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEIjsKKyAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjNEOgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsKKyAgICAg
ICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICAgICAgICByZXR1cm4gInVzYW1wbGVyQ3Vi
ZSI7CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAgcmV0dXJu
ICJ1c2FtcGxlcjJEQXJyYXkiOworICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNUzoKKyAgICAg
ICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TIjsKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
TVNBcnJheToKKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TQXJyYXkiOworICAgICAg
ICBjYXNlIEVidFVTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxl
ckN1YmVBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAgICAg
ICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZVNoYWRvdyI7CisgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgICAgICByZXR1cm4gInNhbXBs
ZXIyREFycmF5U2hhZG93IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93
OgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZUFycmF5U2hhZG93IjsKKyAgICAgICAg
Y2FzZSBFYnRTdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7CisgICAgICAg
IGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgICByZXR1cm4gImludGVyZmFjZSBi
bG9jayI7CisgICAgICAgIGNhc2UgRWJ0SW1hZ2UyRDoKKyAgICAgICAgICAgIHJldHVybiAidGV4
dHVyZTJkIjsKKyAgICAgICAgY2FzZSBFYnRJSW1hZ2UyRDoKKyAgICAgICAgICAgIHJldHVybiAi
dGV4dHVyZTJkPGludD4iOworICAgICAgICBjYXNlIEVidFVJbWFnZTJEOgorICAgICAgICAgICAg
cmV0dXJuICJ0ZXh0dXJlMmQ8dWludD4iOworICAgICAgICBjYXNlIEVidEltYWdlM0Q6CisgICAg
ICAgICAgICByZXR1cm4gInRleHR1cmUzZCI7CisgICAgICAgIGNhc2UgRWJ0SUltYWdlM0Q6Cisg
ICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZDxpbnQ+IjsKKyAgICAgICAgY2FzZSBFYnRVSW1h
Z2UzRDoKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkPHVpbnQ+IjsKKyAgICAgICAgY2Fz
ZSBFYnRJbWFnZTJEQXJyYXk6CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJl
MmQ+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGNhc2UgRWJ0SUltYWdlMkRBcnJheToKKyAgICAgICAgICAgIGlmICh0LT5pc1Vuc2l6
ZWRBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlf
cmVmPHRleHR1cmUyZDxpbnQ+PiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJOT1RfSU1QTEVNRU5URUQiOwor
ICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEVidFVJbWFnZTJEQXJyYXk6CisgICAgICAgICAg
ICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlMmQ8dWludD4+IjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5P
VF9JTVBMRU1FTlRFRCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0SW1hZ2VDdWJl
OgorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlY3ViZSI7CisgICAgICAgIGNhc2UgRWJ0SUlt
YWdlQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1YmU8aW50PiI7CisgICAgICAg
IGNhc2UgRWJ0VUltYWdlQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1YmU8dWlu
dD4iOworICAgICAgICBjYXNlIEVidEltYWdlQ3ViZUFycmF5OgorICAgICAgICAgICAgaWYgKHQt
PmlzVW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJhcnJheV9yZWY8dGV4dHVyZWN1YmU+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRF
RCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0SUltYWdlQ3ViZUFycmF5OgorICAg
ICAgICAgICAgaWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZWN1YmU8aW50Pj4iOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBFYnRV
SW1hZ2VDdWJlQXJyYXk6CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlY3Vi
ZTx1aW50Pj4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgY2FzZSBFYnRBdG9taWNDb3VudGVyOgorICAgICAgICAgICAgcmV0dXJuICJh
dG9taWNfdWludCI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVvV0VCR0w6CisgICAgICAg
ICAgICByZXR1cm4gIiRzYW1wbGVyVmlkZW9XRUJHTCI7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUi
OworICAgIH0KK30KKworY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVTdHJpbmco
Y29uc3QgVFR5cGUgKnQpCit7CisgICAgaWYgKHQtPmlzTWF0cml4KCkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHQtPmdldENvbHMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSAyOgor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJmbG9hdDIiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gImZsb2F0MngzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDJ4NCI7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0
Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQzIjsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJmbG9hdDN4NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJmbG9hdDR4MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiZmxvYXQ0eDMiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0NCI7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIGlm
ICh0LT5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0LT5nZXRCYXNpY1R5cGUo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHQtPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZs
b2F0MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiZmxvYXQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDQiOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Tm9taW5h
bFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50MiI7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50MyI7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAi
aW50NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAg
ICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiYm9vbDIiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gImJvb2wzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sNCI7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0
Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidWludDIiOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInVpbnQz
IjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJ1aW50NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnRlcmZhY2VC
bG9jayk7CisgICAgcmV0dXJuIGdldEJhc2ljTWV0YWxTdHJpbmcodCk7Cit9CisKK0ltbXV0YWJs
ZVN0cmluZyBHZXRNZXRhbFR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLCBTaEhhc2hGdW5jdGlv
bjY0IGhhc2hGdW5jdGlvbiwgTmFtZU1hcCAqbmFtZU1hcCkKK3sKKyAgICBpZiAodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHJldHVybiBIYXNoTmFtZSh0eXBlLmdl
dFN0cnVjdCgpLCBoYXNoRnVuY3Rpb24sIG5hbWVNYXApOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIEltbXV0YWJsZVN0cmluZyhnZXRCdWlsdEluTWV0YWxUeXBlTmFtZVN0cmluZygmdHlwZSkp
OworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxVdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlM2NlM2NlZmQ3MzY5MTU4M2FhMzJmODgxODYyZjc3
ZDc2NDNkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5oCkBAIC0wLDAgKzEsMzEg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgVFJBTlNMQVRPUl9NRVRBTF9VVElMU19IXworI2RlZmlu
ZSBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvQmFzZVR5cGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24u
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9TeW1ib2xVbmlxdWVJZC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHlwZXMuaCIKK25hbWVzcGFjZSBzaAoreworCitjb25zdCBjaGFyICpnZXRCYXNpY01l
dGFsU3RyaW5nKGNvbnN0IFRUeXBlICp0KTsKKworY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFs
VHlwZU5hbWVTdHJpbmcoY29uc3QgVFR5cGUgKnQpOworCitJbW11dGFibGVTdHJpbmcgR2V0TWV0
YWxUeXBlTmFtZShjb25zdCBUVHlwZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTmFtZU1hcCAqbmFtZU1hcCk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAor
CisjZW5kaWYgIC8vIFRSQU5TTEFUT1JfTUVUQUxfVVRJTFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JWdWxr
YW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvclZ1bGthbi5jcHAKaW5kZXggMjAxY2JjOTFmNmUzYzIxZGQxOTI1NDVkNmM1ZDUw
ZjkzODc0YmY3MS4uYzVlYzY3ZGVlNjI1OTBmY2I4MTJkOGRiZTMyYjVjNWRkYTQ4NzViNiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvclZ1bGthbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKQEAgLTE2Myw2ICsxNjMsOCBA
QCBjbGFzcyBEZWNsYXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIKIGNvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRQb2ludENvb3JkTmFt
ZSAgICA9IEltbXV0YWJsZVN0cmluZygiZmxpcHBlZFBvaW50Q29vcmQiKTsKIGNvbnN0ZXhwciBJ
bW11dGFibGVTdHJpbmcga0ZsaXBwZWRGcmFnQ29vcmROYW1lICAgICA9IEltbXV0YWJsZVN0cmlu
ZygiZmxpcHBlZEZyYWdDb29yZCIpOwogY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRW11bGF0
ZWREZXB0aFJhbmdlUGFyYW1zID0gSW1tdXRhYmxlU3RyaW5nKCJBTkdMRURlcHRoUmFuZ2VQYXJh
bXMiKTsKK2NvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zQmxvY2tOYW1lICAgICAg
ICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVVbmlmb3JtQmxvY2siKTsKK2NvbnN0ZXhwciBJbW11
dGFibGVTdHJpbmcga1VuaWZvcm1zVmFyTmFtZSAgICAgICAgICA9IEltbXV0YWJsZVN0cmluZygi
QU5HTEVVbmlmb3JtcyIpOwogCiBjb25zdGV4cHIgZ2w6OlNoYWRlck1hcDxjb25zdCBjaGFyICo+
IGtEZWZhdWx0VW5pZm9ybU5hbWVzID0gewogICAgIHtnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCB2
azo6a0RlZmF1bHRVbmlmb3Jtc05hbWVWU30sCkBAIC00NTAsOSArNDUyLDkgQEAgY29uc3QgVFZh
cmlhYmxlICpBZGRHcmFwaGljc0RyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJsb2NrICpy
b290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMuZW5kKCkp
OwogCiAgICAgLy8gRGVmaW5lIGEgZHJpdmVyIHVuaWZvcm0gYmxvY2sgIkFOR0xFVW5pZm9ybUJs
b2NrIiB3aXRoIGluc3RhbmNlIG5hbWUgIkFOR0xFVW5pZm9ybXMiLgotICAgIHJldHVybiBEZWNs
YXJlSW50ZXJmYWNlQmxvY2soCi0gICAgICAgIHJvb3QsIHN5bWJvbFRhYmxlLCBkcml2ZXJGaWVs
ZExpc3QsIEV2cVVuaWZvcm0sIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLAotICAgICAg
ICBJbW11dGFibGVTdHJpbmcodms6OmtEcml2ZXJVbmlmb3Jtc0Jsb2NrTmFtZSksIEltbXV0YWJs
ZVN0cmluZyh2azo6a0RyaXZlclVuaWZvcm1zVmFyTmFtZSkpOworICAgIHJldHVybiBEZWNsYXJl
SW50ZXJmYWNlQmxvY2socm9vdCwgc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwgRXZxVW5p
Zm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFsaWZpZXI6
OkNyZWF0ZSgpLCAwLCBrVW5pZm9ybXNCbG9ja05hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBrVW5pZm9ybXNWYXJOYW1lKTsKIH0KIAogY29uc3QgVFZhcmlhYmxlICpBZGRD
b21wdXRlRHJpdmVyVW5pZm9ybXNUb1NoYWRlcihUSW50ZXJtQmxvY2sgKnJvb3QsIFRTeW1ib2xU
YWJsZSAqc3ltYm9sVGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAppbmRleCBhM2UwMzk5ZTNlODA3MmFiNjk3
M2Q3YmFlZmYxNjM5MGQwMmYyYzc0Li44ZjZmYzQ2NWZhZTk4ZjdmYzEzOTEyNmRmNmQ0NGMzMDJi
YTM3MGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UeXBlcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1R5cGVzLmgKQEAgLTIzMiw2ICsyMzIsNyBAQCBjbGFzcyBUVHlwZQog
CiAgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID4gMSAmJiBz
ZWNvbmRhcnlTaXplID09IDE7IH0KICAgICBib29sIGlzVmVjdG9yQXJyYXkoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmIGlzQXJyYXkoKTsg
fQorICAgIGJvb2wgaXNSYW5rMCgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID09IDEgJiYg
c2Vjb25kYXJ5U2l6ZSA9PSAxOyB9CiAgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gcHJpbWFyeVNpemUgPT0gMSAmJiBzZWNvbmRhcnlTaXplID09IDEgJiYg
IW1TdHJ1Y3R1cmUgJiYgIWlzQXJyYXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNULmNwcCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNULmNwcApp
bmRleCA3NmE4YmMyZjVlNGE4MzAxYzFlMWU5ZmExNmZmYzZkMTE2NTI2ZWUxLi5iYTRkNmYzZTVm
NWJjYTUwNzE5NTU3N2VkZDUyMDY3MDQwZDc2NDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVB
U1QuY3BwCkBAIC03NiwxMiArNzYsNyBAQCBWYWxpZGF0ZUFTVDo6VmFsaWRhdGVBU1QoVEludGVy
bU5vZGUgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNzICpkaWFn
bm9zdGljcywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWxpZGF0ZUFTVE9wdGlv
bnMgJm9wdGlvbnMpCiAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0cnVlLCBu
dWxscHRyKSwgbU9wdGlvbnMob3B0aW9ucyksIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKLXsK
LSAgICBpZiAobU9wdGlvbnMudmFsaWRhdGVTaW5nbGVQYXJlbnQpCi0gICAgewotICAgICAgICBt
UGFyZW50W3Jvb3RdID0gbnVsbHB0cjsKLSAgICB9Ci19Cit7fQogCiB2b2lkIFZhbGlkYXRlQVNU
Ojp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpub2RlKQogewpAQCAtOTAsMTIg
Kzg1LDEzIEBAIHZvaWQgVmFsaWRhdGVBU1Q6OnZpc2l0Tm9kZShWaXNpdCB2aXNpdCwgVEludGVy
bU5vZGUgKm5vZGUpCiAgICAgICAgIHNpemVfdCBjaGlsZENvdW50ID0gbm9kZS0+Z2V0Q2hpbGRD
b3VudCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7ICsraSkK
ICAgICAgICAgewotICAgICAgICAgICAgVEludGVybU5vZGUgKmNoaWxkID0gbm9kZS0+Z2V0Q2hp
bGROb2RlKGkpOwotICAgICAgICAgICAgaWYgKG1QYXJlbnQuZmluZChjaGlsZCkgIT0gbVBhcmVu
dC5lbmQoKSkKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpjaGlsZCAgID0gbm9kZS0+Z2V0Q2hp
bGROb2RlKGkpOworICAgICAgICAgICAgVEludGVybU5vZGUgKiZwYXJlbnQgPSBtUGFyZW50W2No
aWxkXTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgLy8gSWYgY2hpbGQgaXMgdmlzaXRlZCB0d2ljZSBidXQgdGhyb3VnaCB0aGUgc2FtZSBw
YXJlbnQsIHRoZSBwcm9ibGVtIGlzIGluIG9uZSBvZgogICAgICAgICAgICAgICAgIC8vIHRoZSBh
bmNlc3RvcnMuCi0gICAgICAgICAgICAgICAgaWYgKG1QYXJlbnRbY2hpbGRdICE9IG5vZGUpCisg
ICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBub2RlKQogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5lcnJvcihub2RlLT5nZXRMaW5lKCksICJG
b3VuZCBjaGlsZCB3aXRoIHR3byBwYXJlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiPHZhbGlkYXRlU2luZ2xlUGFyZW50PiIpOwpAQCAtMTAzLDE3ICs5OSwx
NyBAQCB2b2lkIFZhbGlkYXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2Rl
ICpub2RlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
bVBhcmVudFtjaGlsZF0gPSBub2RlOworICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsKICAgICAg
ICAgfQogICAgIH0KIH0KIAotdm9pZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVsbENoaWxkcmVu
KFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0X2NvdW50KQordm9p
ZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVsbENoaWxkcmVuKFZpc2l0IHZpc2l0LCBUSW50ZXJt
Tm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0Q291bnQpCiB7CiAgICAgaWYgKHZpc2l0ID09IFByZVZp
c2l0ICYmIG1PcHRpb25zLnZhbGlkYXRlTnVsbE5vZGVzKQogICAgIHsKICAgICAgICAgc2l6ZV90
IGNoaWxkQ291bnQgPSBub2RlLT5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGlmIChjaGlsZENv
dW50IDwgbGVhc3RfY291bnQpCisgICAgICAgIGlmIChjaGlsZENvdW50IDwgbGVhc3RDb3VudCkK
ICAgICAgICAgewogICAgICAgICAgICAgbURpYWdub3N0aWNzLT5lcnJvcihub2RlLT5nZXRMaW5l
KCksICJUb28gZmV3IGNoaWxkcmVuIiwgIjx2YWxpZGF0ZU51bGxOb2Rlcz4iKTsKICAgICAgICAg
ICAgIG1OdWxsTm9kZXNGYWlsZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0
aWFsaXplcnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwCmluZGV4IGRmYTIzYWFm
MTliZTQ4OTk1Y2MwNjM2OGI1MWQwMWIwYTEyOWZkOWIuLmJiYzhkY2Q0ZThhODJlNDcyMGE3N2Qw
ODFiMzdjOWY2ZDdkMGY0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6ZXJzLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKQEAgLTUzLDcgKzUzLDggQEAgdm9p
ZCBHZXREZWZlcnJlZEluaXRpYWxpemVycyhUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xhcmF0aW9u
LAogICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSk7CiAgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhw
cmVzc2lvbiA9IGluaXQtPmdldFJpZ2h0KCk7CiAKLSAgICAgICAgaWYgKGV4cHJlc3Npb24tPmdl
dFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8ICFleHByZXNzaW9uLT5oYXNDb25zdGFudFZhbHVl
KCkpCisgICAgICAgIGlmIChleHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8
fCAhZXhwcmVzc2lvbi0+aGFzQ29uc3RhbnRWYWx1ZSgpIHx8CisgICAgICAgICAgICBzeW1ib2xO
b2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFHbG9iYWwpCiAgICAgICAgIHsKICAgICAgICAgICAg
IC8vIEZvciB2YXJpYWJsZXMgd2hpY2ggYXJlIG5vdCBjb25zdGFudCwgZGVmZXIgdGhlaXIgcmVh
bCBpbml0aWFsaXphdGlvbiB1bnRpbAogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgaW5pdGlhbGl6
ZSB1bmlmb3Jtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVuZUVtcHR5
Q2FzZXMuY3BwCmluZGV4IDI4OWRlMjE1MmU5YzUxNDU5NGY2MjMxZDRkZjkyZDY2YjE3OWEyYjcu
LjJlZTgyMzkzZmNlNTExYTBkYTc3OTRkYjlhNjMxNzEwZGM4Nzc1NGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1By
dW5lRW1wdHlDYXNlcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVFbXB0eUNhc2VzLmNwcApAQCAtMTcsNyArMTcs
NyBAQCBuYW1lc3BhY2Ugc2gKIG5hbWVzcGFjZQogewogCi1ib29sIEFyZUVtcHR5QmxvY2tzKFRJ
bnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7Citib29sIEFyZUVtcHR5QmxvY2tzKGNvbnN0IFRJ
bnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7CiAKIGJvb2wgSXNFbXB0eUJsb2NrKFRJbnRlcm1O
b2RlICpub2RlKQogewpAQCAtMzcsNyArMzcsNyBAQCBib29sIElzRW1wdHlCbG9jayhUSW50ZXJt
Tm9kZSAqbm9kZSkKIAogLy8gUmV0dXJuIHRydWUgaWYgYWxsIHN0YXRlbWVudHMgaW4gInN0YXRl
bWVudHMiIGNvbnNpc3Qgb25seSBvZiBlbXB0eSBibG9ja3MgYW5kIG5vLW9wIHN0YXRlbWVudHMu
CiAvLyBSZXR1cm5zIHRydWUgYWxzbyBpZiB0aGVyZSBhcmUgbm8gc3RhdGVtZW50cy4KLWJvb2wg
QXJlRW1wdHlCbG9ja3MoVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorYm9vbCBBcmVFbXB0
eUJsb2Nrcyhjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnN0YXRlbWVudHMpCiB7CiAgICAgZm9yIChz
aXplX3QgaSA9IDB1OyBpIDwgc3RhdGVtZW50cy0+c2l6ZSgpOyArK2kpCiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV9vcHMvUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2guY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dpdGNoRmFsbFRocm91
Z2guY3BwCmluZGV4IDQ1MDBhZWE0ZTQ4MmMwMjMwOTBjYzdiZDhlNjhlZGFjNTE0YTQ5MjAuLmRk
OGRkNTQzZjZlMWEyMjUxMzM3ZWQ0ZGIwN2ZmYmRmNzcwMWEwMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1JlbW92
ZVN3aXRjaEZhbGxUaHJvdWdoLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hGYWxsVGhyb3VnaC5jcHAK
QEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXIg
OiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50
ZXJtTG9vcCAqbm9kZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVElu
dGVybUJyYW5jaCAqbm9kZSkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG91dHB1dFNlcXVlbmNlKFRJ
bnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFydEluZGV4KTsKKyAgICB2b2lkIG91
dHB1dFNlcXVlbmNlKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFy
dEluZGV4KTsKICAgICB2b2lkIGhhbmRsZVByZXZpb3VzQ2FzZSgpOwogCiAgICAgVEludGVybUJs
b2NrICptU3RhdGVtZW50TGlzdDsKQEAgLTE1MywxMSArMTUzLDEzIEBAIGJvb2wgUmVtb3ZlU3dp
dGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6OnZpc2l0U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNo
ICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW1vdmVTd2l0Y2hGYWxsVGhy
b3VnaFRyYXZlcnNlcjo6b3V0cHV0U2VxdWVuY2UoVEludGVybVNlcXVlbmNlICpzZXF1ZW5jZSwg
c2l6ZV90IHN0YXJ0SW5kZXgpCit2b2lkIFJlbW92ZVN3aXRjaEZhbGxUaHJvdWdoVHJhdmVyc2Vy
OjpvdXRwdXRTZXF1ZW5jZShjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0
YXJ0SW5kZXgpCiB7CisgICAgYXV0byAmb3V0U2VxID0gKm1TdGF0ZW1lbnRMaXN0T3V0LT5nZXRT
ZXF1ZW5jZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgc2VxdWVuY2Ut
PnNpemUoKTsgKytpKQogICAgIHsKLSAgICAgICAgbVN0YXRlbWVudExpc3RPdXQtPmdldFNlcXVl
bmNlKCktPnB1c2hfYmFjayhzZXF1ZW5jZS0+YXQoaSkpOworICAgICAgICBvdXRTZXEucHVzaF9i
YWNrKHNlcXVlbmNlLT5hdChpKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxv
b3BDb25kaXRpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCmluZGV4IDc0MTQ1
NDAwZWJjNjNhN2I5NGEzYzM1NzgyNGZhODlmYzJjN2YxMWUuLjBjMmFhOGZiNmNiMWNhZGE4ODlk
MDk0ODljYTdmNTQzN2IzOGNlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCkBAIC0yMSwxMCArMjEsMTcgQEAg
bmFtZXNwYWNlIHNoCiBuYW1lc3BhY2UKIHsKIAorc3RydWN0IExvb3BJbmZvCit7CisgICAgY29u
c3QgVFZhcmlhYmxlICpjb25kaXRpb25WYXJpYWJsZSA9IG51bGxwdHI7CisgICAgVEludGVybVR5
cGVkICpjb25kaXRpb24gICAgICAgICAgICA9IG51bGxwdHI7CisgICAgVEludGVybVR5cGVkICpl
eHByZXNzaW9uICAgICAgICAgICA9IG51bGxwdHI7Cit9OworCiBjbGFzcyBTaW1wbGlmeUxvb3BD
b25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNlcgogewog
ICBwdWJsaWM6Ci0gICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcih1bnNpZ25lZCBp
bnQgY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAorICAgIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNU
cmF2ZXJzZXIoY29uc3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25zVG9TaW1w
bGlmeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAq
c3ltYm9sVGFibGUpOwogCiAgICAgdm9pZCB0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUp
IG92ZXJyaWRlOwpAQCAtMzQsNiArNDEsNyBAQCBjbGFzcyBTaW1wbGlmeUxvb3BDb25kaXRpb25z
VHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNlcgogICAgIGJvb2wgdmlz
aXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpIG92ZXJyaWRl
OwogICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVGVybmFyeSAqbm9k
ZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlz
aXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBmb3Vu
ZExvb3BUb0NoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZExvb3BUb0NoYW5nZTsgfQogCkBA
IC00MiwxNiArNTAsMTkgQEAgY2xhc3MgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciA6
IHB1YmxpYyBUTFZhbHVlVHJhY2tpbmdUcmF2ZXJzZXIKICAgICAvLyBmb3VuZC4KICAgICBib29s
IG1Gb3VuZExvb3BUb0NoYW5nZTsKICAgICBib29sIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9y
RXhwcmVzc2lvbjsKLSAgICBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgbUNvbmRpdGlvbnNUb1Np
bXBsaWZ5OworICAgIGNvbnN0IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlciAqbUNvbmRpdGlvbnNU
b1NpbXBsaWZ5OworCisgIHByaXZhdGU6CisgICAgTG9vcEluZm8gbUxvb3A7CiB9OwogCiBTaW1w
bGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjpTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVy
c2VyKAotICAgIHVuc2lnbmVkIGludCBjb25kaXRpb25zVG9TaW1wbGlmeU1hc2ssCisgICAgY29u
c3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25zVG9TaW1wbGlmeSwKICAgICBU
U3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQogICAgIDogVExWYWx1ZVRyYWNraW5nVHJhdmVyc2Vy
KHRydWUsIGZhbHNlLCBmYWxzZSwgc3ltYm9sVGFibGUpLAogICAgICAgbUZvdW5kTG9vcFRvQ2hh
bmdlKGZhbHNlKSwKICAgICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbihm
YWxzZSksCi0gICAgICBtQ29uZGl0aW9uc1RvU2ltcGxpZnkoY29uZGl0aW9uc1RvU2ltcGxpZnlN
YXNrKQorICAgICAgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5KGNvbmRpdGlvbnNUb1NpbXBsaWZ5KQog
e30KIAogLy8gSWYgd2UncmUgaW5zaWRlIGEgbG9vcCBpbml0aWFsaXphdGlvbiwgY29uZGl0aW9u
LCBvciBleHByZXNzaW9uLCB3ZSBjaGVjayBmb3IgZXhwcmVzc2lvbnMgdGhhdApAQCAtNjgsNyAr
NzksOCBAQCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0VW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZQogICAgIGlmIChtRm91bmRMb29wVG9DaGFu
Z2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFuZ2Ug
dGhpcyBsb29wLgogCi0gICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBs
aWZ5Lm1hdGNoKG5vZGUpOworICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAg
IG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSk7
CiAgICAgcmV0dXJuICFtRm91bmRMb29wVG9DaGFuZ2U7CiB9CiAKQEAgLTgwLDcgKzkyLDkgQEAg
Ym9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybUJpbmFyeSAqbm8KICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9v
cC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRj
aChub2RlLCBnZXRQYXJlbnROb2RlKCksIGlzTFZhbHVlUmVxdWlyZWRIZXJlKCkpOworICAgIEFT
U0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9Cisg
ICAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50Tm9kZSgp
LCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSgpKTsKICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5n
ZTsKIH0KIApAQCAtOTIsNyArMTA2LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJh
dmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2EKICAgICBp
ZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5
IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9
IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCkpOworICAg
IEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9
IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50Tm9kZSgpKTsKICAg
ICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtMTA0LDcgKzExOSw4IEBAIGJv
b2wgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtVGVybmFyeSAqCiAgICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxyZWFkeSBkZWNpZGVkIHRvIGNoYW5nZSB0aGlzIGxvb3Au
CiAKLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnkubWF0Y2go
bm9kZSk7CisgICAgQVNTRVJUKG1Db25kaXRpb25zVG9TaW1wbGlmeSk7CisgICAgbUZvdW5kTG9v
cFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5LT5tYXRjaChub2RlKTsKICAgICByZXR1
cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtMTE2LDEwICsxMzIsMzUgQEAgYm9vbCBT
aW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtRGVjbGEKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KIAot
ICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRjaChub2Rl
KTsKKyAgICBBU1NFUlQobUNvbmRpdGlvbnNUb1NpbXBsaWZ5KTsKKyAgICBtRm91bmRMb29wVG9D
aGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOwogICAgIHJldHVybiAh
bUZvdW5kTG9vcFRvQ2hhbmdlOwogfQogCitib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2
ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKQorewor
ICAgIGlmIChub2RlLT5nZXRGbG93T3AoKSA9PSBFT3BDb250aW51ZSAmJiAobUxvb3AuY29uZGl0
aW9uIHx8IG1Mb29wLmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgVEludGVybUJsb2NrICpw
YXJlbnQgPSBnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKTsKKyAgICAgICAgQVNTRVJUKHBh
cmVudCk7CisgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisgICAgICAgIGlmIChtTG9vcC5l
eHByZXNzaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG1Mb29wLmV4
cHJlc3Npb24tPmRlZXBDb3B5KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChtTG9vcC5jb25k
aXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtTG9vcC5jb25kaXRpb25WYXJp
YWJsZSk7CisgICAgICAgICAgICBzZXEucHVzaF9iYWNrKAorICAgICAgICAgICAgICAgIENyZWF0
ZVRlbXBBc3NpZ25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0
aW9uLT5kZWVwQ29weSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgc2VxLnB1c2hfYmFjayhub2Rl
KTsKKyAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLnB1c2hfYmFjayhOb2RlUmVwbGFjZVdpdGhN
dWx0aXBsZUVudHJ5KHBhcmVudCwgbm9kZSwgc3RkOjptb3ZlKHNlcSkpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2Vy
Ojp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgLy8gTWFyayB0aGF0IHdl
J3JlIGluc2lkZSBhIGxvb3AgY29uZGl0aW9uIG9yIGV4cHJlc3Npb24sIGFuZCBkZXRlcm1pbmUg
aWYgdGhlIGxvb3AgbmVlZHMgdG8gYmUKQEAgLTEyOCw3ICsxNjksNyBAQCB2b2lkIFNpbXBsaWZ5
TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkK
ICAgICBTY29wZWROb2RlSW5UcmF2ZXJzYWxQYXRoIGFkZFRvUGF0aCh0aGlzLCBub2RlKTsKIAog
ICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbiA9IHRydWU7Ci0gICAgbUZv
dW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gZmFsc2U7CisgICAgbUZvdW5kTG9v
cFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gIW1Db25kaXRpb25zVG9TaW1wbGlmeTsKIAog
ICAgIGlmICghbUZvdW5kTG9vcFRvQ2hhbmdlICYmIG5vZGUtPmdldEluaXQoKSkKICAgICB7CkBA
IC0xNDcsODMgKzE4OCwxNDEgQEAgdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2Vy
Ojp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiAKICAgICBtSW5zaWRlTG9vcEluaXRD
b25kaXRpb25PckV4cHJlc3Npb24gPSBmYWxzZTsKIAorICAgIGNvbnN0IExvb3BJbmZvIHByZXZM
b29wID0gbUxvb3A7CisKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgIHsKLSAgICAg
ICAgY29uc3QgVFR5cGUgKmJvb2xUeXBlICAgICAgICA9IFN0YXRpY1R5cGU6OkdldDxFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cVRlbXBvcmFyeSwgMSwgMT4oKTsKLSAgICAgICAgVFZhcmlhYmxl
ICpjb25kaXRpb25WYXJpYWJsZSA9IENyZWF0ZVRlbXBWYXJpYWJsZShtU3ltYm9sVGFibGUsIGJv
b2xUeXBlKTsKKyAgICAgICAgY29uc3QgVFR5cGUgKmJvb2xUeXBlICAgPSBTdGF0aWNUeXBlOjpH
ZXQ8RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFUZW1wb3JhcnksIDEsIDE+KCk7CisgICAgICAg
IG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlID0gQ3JlYXRlVGVtcFZhcmlhYmxlKG1TeW1ib2xUYWJs
ZSwgYm9vbFR5cGUpOworICAgICAgICBtTG9vcC5jb25kaXRpb24gICAgICAgICA9IG5vZGUtPmdl
dENvbmRpdGlvbigpOworICAgICAgICBtTG9vcC5leHByZXNzaW9uICAgICAgICA9IG5vZGUtPmdl
dEV4cHJlc3Npb24oKTsKIAogICAgICAgICAvLyBSZXBsYWNlIHRoZSBsb29wIGNvbmRpdGlvbiB3
aXRoIGEgYm9vbGVhbiB2YXJpYWJsZSB0aGF0J3MgdXBkYXRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4K
ICAgICAgICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAgICAgICBp
ZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkKICAgICAgICAgewotICAgICAgICAgICAgLy8gVHJh
bnNmb3JtOgotICAgICAgICAgICAgLy8gICB3aGlsZSAoZXhwcikgeyBib2R5OyB9Ci0gICAgICAg
ICAgICAvLyBpbnRvCi0gICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOwotICAgICAgICAg
ICAgLy8gICB3aGlsZSAoczApIHsgeyBib2R5OyB9IHMwID0gZXhwcjsgfQotICAgICAgICAgICAg
VEludGVybURlY2xhcmF0aW9uICp0ZW1wSW5pdERlY2xhcmF0aW9uID0KLSAgICAgICAgICAgICAg
ICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwgbm9kZS0+
Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCkpOwotICAgICAgICAgICAgaW5zZXJ0U3RhdGVtZW50
SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xhcmF0aW9uKTsKLQotICAgICAgICAgICAgVEludGVy
bUJsb2NrICpuZXdCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOwotICAgICAgICAgICAgaWYgKG5v
ZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgIEFTU0VSVCghbUxvb3AuZXhwcmVzc2lvbik7CisK
KyAgICAgICAgICAgIGlmIChtTG9vcC5jb25kaXRpb24tPmdldEFzU3ltYm9sTm9kZSgpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hf
YmFjayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAgICAgIC8vIE1hc2sgY29udGludWUg
c3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAgICAgICAgbUxv
b3AuY29uZGl0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgd2hp
bGUgKGV4cHIpIHsgYm9keTsgfQorICAgICAgICAgICAgICAgIC8vIGludG8KKyAgICAgICAgICAg
ICAgICAvLyAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKHMw
KSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0
RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0
aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uKTsKKyAgICAg
ICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRlbXBJbml0RGVjbGFyYXRp
b24pOworCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0aW9uKENyZWF0ZVRlbXBTeW1i
b2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CisKKyAgICAgICAgICAgICAgICAvLyBN
YXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgorICAgICAg
ICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3Jt
OgorICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorICAgICAgICAg
ICAgICAgIC8vIGludG8KKyAgICAgICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOworICAg
ICAgICAgICAgICAgIC8vICAgd2hpbGUgKHMwKSB7IHsgYm9keTsgfSBzMCA9IGV4cHI7IH0KKyAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50
cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIHMwID0gZXhwcjsg
Y29udGludWU7CisgICAgICAgICAgICAgICAgVEludGVybURlY2xhcmF0aW9uICp0ZW1wSW5pdERl
Y2xhcmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlv
bk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7CisgICAgICAg
ICAgICAgICAgaW5zZXJ0U3RhdGVtZW50SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xhcmF0aW9u
KTsKKworICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJt
QmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVz
aF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAg
ICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlLCBtTG9v
cC5jb25kaXRpb24tPmRlZXBDb3B5KCkpKTsKKworICAgICAgICAgICAgICAgIC8vIENhbid0IHVz
ZSBxdWV1ZVJlcGxhY2VtZW50IHRvIHJlcGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1heSBoYXZl
IGJlZW4gbnVsbHB0ci4KKyAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8gdGhlIHJl
cGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwgYmUKKyAg
ICAgICAgICAgICAgICAvLyB0cmF2ZXJzZWQsIGJ1dCB0aGF0IHdvbid0IGNyZWF0ZSBhbnkgcHJv
YmxlbXMuCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Qm9keShuZXdCb2R5KTsKKyAgICAgICAg
ICAgICAgICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29u
ZGl0aW9uVmFyaWFibGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld0JvZHktPmdl
dFNlcXVlbmNlKCktPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wQXNzaWdu
bWVudE5vZGUoY29uZGl0aW9uVmFyaWFibGUsIG5vZGUtPmdldENvbmRpdGlvbigpLT5kZWVwQ29w
eSgpKSk7Ci0KLSAgICAgICAgICAgIC8vIENhbid0IHVzZSBxdWV1ZVJlcGxhY2VtZW50IHRvIHJl
cGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1heSBoYXZlIGJlZW4gbnVsbHB0ci4KLSAgICAgICAg
ICAgIC8vIEl0J3Mgc2FmZSB0byBkbyB0aGUgcmVwbGFjZW1lbnRzIGluIHBsYWNlIGhlcmUgLSB0
aGUgbmV3IGJvZHkgd2lsbCBzdGlsbCBiZQotICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQg
dGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1zLgotICAgICAgICAgICAgbm9kZS0+c2V0Qm9k
eShuZXdCb2R5KTsKLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3lt
Ym9sTm9kZShjb25kaXRpb25WYXJpYWJsZSkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYg
KGxvb3BUeXBlID09IEVMb29wRG9XaGlsZSkKICAgICAgICAgewotICAgICAgICAgICAgLy8gVHJh
bnNmb3JtOgotICAgICAgICAgICAgLy8gICBkbyB7Ci0gICAgICAgICAgICAvLyAgICAgYm9keTsK
LSAgICAgICAgICAgIC8vICAgfSB3aGlsZSAoZXhwcik7Ci0gICAgICAgICAgICAvLyBpbnRvCi0g
ICAgICAgICAgICAvLyAgIGJvb2wgczAgPSB0cnVlOwotICAgICAgICAgICAgLy8gICBkbyB7Ci0g
ICAgICAgICAgICAvLyAgICAgeyBib2R5OyB9Ci0gICAgICAgICAgICAvLyAgICAgczAgPSBleHBy
OwotICAgICAgICAgICAgLy8gICB9IHdoaWxlIChzMCk7Ci0gICAgICAgICAgICBUSW50ZXJtRGVj
bGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQotICAgICAgICAgICAgICAgIENyZWF0ZVRl
bXBJbml0RGVjbGFyYXRpb25Ob2RlKGNvbmRpdGlvblZhcmlhYmxlLCBDcmVhdGVCb29sTm9kZSh0
cnVlKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRlbXBJbml0
RGVjbGFyYXRpb24pOwotCi0gICAgICAgICAgICBUSW50ZXJtQmxvY2sgKm5ld0JvZHkgPSBuZXcg
VEludGVybUJsb2NrKCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAg
ICAgICAgQVNTRVJUKCFtTG9vcC5leHByZXNzaW9uKTsKKworICAgICAgICAgICAgaWYgKG1Mb29w
LmNvbmRpdGlvbi0+Z2V0QXNTeW1ib2xOb2RlKCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7
CisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29uZGl0aW9uIHZh
cmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24gPSBudWxscHRy
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobUxvb3AuY29uZGl0aW9uLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBU
cmFuc2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICBkbyB7CisgICAgICAgICAgICAgICAgLy8g
ICAgIGJvZHk7CisgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHByKTsKKyAgICAgICAg
ICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICBib29sIHMwID0gZXhwcjsKKyAg
ICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgYm9keTsKKyAg
ICAgICAgICAgICAgICAvLyAgIH0gd2hpbGUgKHMwKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJt
RGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAgICAgICBD
cmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxv
b3AuY29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJs
b2NrKHRlbXBJbml0RGVjbGFyYXRpb24pOworCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29u
ZGl0aW9uKENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CisK
KyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFy
aWFibGUgdXBkYXRlLgorICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgZG8geworICAgICAg
ICAgICAgICAgIC8vICAgICBib2R5OworICAgICAgICAgICAgICAgIC8vICAgfSB3aGlsZSAoZXhw
cik7CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAgYm9vbCBz
MDsKKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgeyBi
b2R5OyB9CisgICAgICAgICAgICAgICAgLy8gICAgIHMwID0gZXhwcjsKKyAgICAgICAgICAgICAg
ICAvLyAgIH0gd2hpbGUgKHMwKTsKKyAgICAgICAgICAgICAgICAvLyBMb2NhbCBjYXNlIHN0YXRl
bWVudHMgYXJlIHRyYW5zZm9ybWVkIGludG86CisgICAgICAgICAgICAgICAgLy8gICBzMCA9IGV4
cHI7IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqdGVtcElu
aXREZWNsYXJhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBEZWNsYXJhdGlv
bk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpOworICAgICAgICAgICAgICAgIGluc2VydFN0
YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisKKyAgICAgICAgICAg
ICAgICBUSW50ZXJtQmxvY2sgKm5ld0JvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRC
b2R5KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdCb2R5LT5nZXRT
ZXF1ZW5jZSgpLT5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBBc3Np
Z25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uKSk7CisK
KyAgICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgcXVldWVSZXBsYWNlbWVudCB0byByZXBsYWNl
IG9sZCBib2R5LCBzaW5jZSBpdCBtYXkgaGF2ZSBiZWVuIG51bGxwdHIuCisgICAgICAgICAgICAg
ICAgLy8gSXQncyBzYWZlIHRvIGRvIHRoZSByZXBsYWNlbWVudHMgaW4gcGxhY2UgaGVyZSAtIHRo
ZSBuZXcgYm9keSB3aWxsIHN0aWxsIGJlCisgICAgICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBi
dXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAgIG5vZGUt
PnNldEJvZHkobmV3Qm9keSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0aW9uKENy
ZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBuZXdCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2soCi0gICAg
ICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlhYmxlLCBu
b2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOwotCi0gICAgICAgICAgICAvLyBDYW4n
dCB1c2UgcXVldWVSZXBsYWNlbWVudCB0byByZXBsYWNlIG9sZCBib2R5LCBzaW5jZSBpdCBtYXkg
aGF2ZSBiZWVuIG51bGxwdHIuCi0gICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8gdGhlIHJl
cGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwgYmUKLSAg
ICAgICAgICAgIC8vIHRyYXZlcnNlZCwgYnV0IHRoYXQgd29uJ3QgY3JlYXRlIGFueSBwcm9ibGVt
cy4KLSAgICAgICAgICAgIG5vZGUtPnNldEJvZHkobmV3Qm9keSk7Ci0gICAgICAgICAgICBub2Rl
LT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUoY29uZGl0aW9uVmFyaWFibGUpKTsK
ICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikKICAgICAg
ICAgewotICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRlIHRoZSBs
b29wLgotICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICBmb3IgKGlu
aXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vIGludG8KLSAgICAgICAg
ICAgIC8vICAgewotICAgICAgICAgICAgLy8gICAgIGluaXQ7Ci0gICAgICAgICAgICAvLyAgICAg
Ym9vbCBzMCA9IGV4cHI7Ci0gICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7Ci0gICAgICAg
ICAgICAvLyAgICAgICB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vICAgICAgIGV4cHJCOwotICAg
ICAgICAgICAgLy8gICAgICAgczAgPSBleHByOwotICAgICAgICAgICAgLy8gICAgIH0KLSAgICAg
ICAgICAgIC8vICAgfQorICAgICAgICAgICAgaWYgKCFtTG9vcC5jb25kaXRpb24pCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gQ3JlYXRlQm9vbE5vZGUo
dHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRJbnRlcm1Mb29wICp3aGlsZUxv
b3A7CiAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgKmxvb3BTY29wZSAgICAgICAgICAgID0gbmV3
IFRJbnRlcm1CbG9jaygpOwogICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICpsb29wU2NvcGVT
ZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKIApAQCAtMjMzLDQ4ICszMzIsMTMw
IEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJ
bnRlcm1Mb29wICpub2RlKQogICAgICAgICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNlLT5wdXNo
X2JhY2sobm9kZS0+Z2V0SW5pdCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8g
SW5zZXJ0ICJib29sIHMwID0gZXhwcjsiIGlmIGFwcGxpY2FibGUsICJib29sIHMwID0gdHJ1ZTsi
IG90aGVyd2lzZQotICAgICAgICAgICAgVEludGVybVR5cGVkICpjb25kaXRpb25Jbml0aWFsaXpl
ciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCisgICAg
ICAgICAgICBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25Jbml0aWFsaXplciA9IG5vZGUtPmdldENv
bmRpdGlvbigpLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3Ag
Y29uZGl0aW9uIGluc2lkZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06
CisgICAgICAgICAgICAgICAgLy8gICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0K
KyAgICAgICAgICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICB7CisgICAgICAg
ICAgICAgICAgLy8gICAgIGluaXQ7CisgICAgICAgICAgICAgICAgLy8gICAgIHdoaWxlIChleHBy
KSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisgICAgICAgICAgICAgICAg
Ly8gICAgICAgZXhwckI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAg
ICAvLyAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNh
c2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAg
IGV4cHJCOyBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCAieyBib2R5OyB9
IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqd2hpbGVM
b29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGVM
b29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEluc2VydCAiZXhwckI7IiBpbiB0aGUg
d2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3aGlsZUxvb3BCb2R5LT5nZXRT
ZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+Z2V0RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlICJ3aGlsZShleHByKSB7IHdoaWxlTG9v
cEJvZHkgfSIKKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPQorICAgICAgICAgICAgICAgICAg
ICBuZXcgVEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0ciwgbUxvb3AuY29uZGl0aW9uLCBu
dWxscHRyLCB3aGlsZUxvb3BCb2R5KTsKKworICAgICAgICAgICAgICAgIC8vIE1hc2sgY29udGlu
dWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAgICAgICAg
bUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVu
aW9uKCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uSW5pdGlhbGl6
ZXIgPSBDcmVhdGVCb29sTm9kZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAvLyBNb3ZlIHRoZSBs
b29wIGNvbmRpdGlvbiBpbnNpZGUgdGhlIGxvb3AuCisgICAgICAgICAgICAgICAgLy8gVHJhbnNm
b3JtOgorICAgICAgICAgICAgICAgIC8vICAgZm9yIChpbml0OyBleHByOyBleHByQikgeyBib2R5
OyB9CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAgeworICAg
ICAgICAgICAgICAgIC8vICAgICBpbml0OworICAgICAgICAgICAgICAgIC8vICAgICBib29sIHMw
ID0gZXhwcjsKKyAgICAgICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgeyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gICAgICAgZXhwckI7
CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgIH0KKyAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50cyBh
cmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJCOyBjb250aW51
ZTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7IgorICAgICAg
ICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNlLT5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAg
ICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
LCBtTG9vcC5jb25kaXRpb24pKTsKKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsgYm9keTsg
fSIgaW4gdGhlIHdoaWxlIGxvb3AKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgKndoaWxl
TG9vcEJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxl
TG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgImV4cHJCOyIgaW4gdGhl
IHdoaWxlIGxvb3AKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9keS0+Z2V0
U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEV4cHJlc3Npb24oKSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29w
Qm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9IG5ldyBUSW50ZXJtTG9vcChFTG9v
cFdoaWxlLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSksIG51bGxw
dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9v
cEJvZHkpOworCisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29u
ZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24g
PSBudWxscHRyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9vcFNjb3BlU2VxdWVuY2Ut
PnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9k
ZShjb25kaXRpb25WYXJpYWJsZSwgY29uZGl0aW9uSW5pdGlhbGl6ZXIpKTsKLQotICAgICAgICAg
ICAgLy8gSW5zZXJ0ICJ7IGJvZHk7IH0iIGluIHRoZSB3aGlsZSBsb29wCi0gICAgICAgICAgICBU
SW50ZXJtQmxvY2sgKndoaWxlTG9vcEJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7Ci0gICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGluIHRoZSB3
aGlsZSBsb29wCi0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1
c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgLy8gSW5zZXJ0ICJzMCA9IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAotICAgICAgICAgICAg
aWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3AgY29uZGl0aW9uIGluc2lkZSB0aGUg
bG9vcC4KKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisgICAgICAgICAgICAgICAgLy8g
ICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAvLyBp
bnRvCisgICAgICAgICAgICAgICAgLy8gICB7CisgICAgICAgICAgICAgICAgLy8gICAgIGluaXQ7
CisgICAgICAgICAgICAgICAgLy8gICAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAg
IC8vICAgICB3aGlsZSAoczApIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICB7IGJvZHk7IH0K
KyAgICAgICAgICAgICAgICAvLyAgICAgICBleHByQjsKKyAgICAgICAgICAgICAgICAvLyAgICAg
ICBzMCA9IGV4cHI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAgICAv
LyAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ug
c3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIGV4
cHJCOyBzMCA9IGV4cHI7IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJi
b29sIHMwID0gZXhwcjsiCisgICAgICAgICAgICAgICAgbG9vcFNjb3BlU2VxdWVuY2UtPnB1c2hf
YmFjaygKKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUo
bUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbikpOworICAgICAgICAgICAg
ICAgIC8vIEluc2VydCAieyBib2R5OyB9IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAqd2hpbGVMb29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNr
KG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IEluc2VydCAiZXhwckI7IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICB3aGlsZUxvb3BCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+Z2V0RXhw
cmVzc2lvbigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gSW5zZXJ0
ICJzMCA9IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAogICAgICAgICAgICAgICAgIHdoaWxlTG9v
cEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICAgICAgQ3Jl
YXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlhYmxlLCBub2RlLT5nZXRDb25kaXRp
b24oKS0+ZGVlcENvcHkoKSkpOworICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1wQXNzaWdu
bWVudE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbi0+ZGVlcENv
cHkoKSkpOworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29w
Qm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9IG5ldyBUSW50ZXJtTG9vcChFTG9v
cFdoaWxlLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSksIG51bGxw
dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9v
cEJvZHkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBDcmVhdGUgIndoaWxlKHMw
KSB7IHdoaWxlTG9vcEJvZHkgfSIKLSAgICAgICAgICAgIFRJbnRlcm1Mb29wICp3aGlsZUxvb3Ag
PQotICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtTG9vcChFTG9vcFdoaWxlLCBudWxscHRyLCBD
cmVhdGVUZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJpYWJsZSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bGxwdHIsIHdoaWxlTG9vcEJvZHkpOwogICAgICAgICAgICAgbG9v
cFNjb3BlLT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sod2hpbGVMb29wKTsKICAgICAgICAgICAg
IHF1ZXVlUmVwbGFjZW1lbnQobG9vcFNjb3BlLCBPcmlnaW5hbE5vZGU6OklTX0RST1BQRUQpOwog
CiAgICAgICAgICAgICAvLyBBZnRlciB0aGlzIHRoZSBvbGQgYm9keSBub2RlIHdpbGwgYmUgdHJh
dmVyc2VkIGFuZCBsb29wcyBpbnNpZGUgaXQgbWF5IGJlCi0gICAgICAgICAgICAvLyB0cmFuc2Zv
cm1lZC4gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgb2xkIGJvZHkgbm9kZSB3aWxsIHN0aWxsIGJl
IGluIHRoZSBBU1QgYWZ0ZXIgdGhlCi0gICAgICAgICAgICAvLyB0cmFuc2Zvcm1hdGlvbiB0aGF0
J3MgcXVldWVkIGhlcmUsIGFuZCB0cmFuc2Zvcm1pbmcgbG9vcHMgaW5zaWRlIGl0IGRvZXNuJ3Qg
bmVlZCB0bwotICAgICAgICAgICAgLy8ga25vdyB0aGUgZXhhY3QgcG9zdC10cmFuc2Zvcm0gcGF0
aCB0byBpdC4KKyAgICAgICAgICAgIC8vIHRyYW5zZm9ybWVkLiBUaGlzIGlzIGZpbmUsIHNpbmNl
IHRoZSBvbGQgYm9keSBub2RlIHdpbGwgc3RpbGwgYmUgaW4gdGhlIEFTVCBhZnRlcgorICAgICAg
ICAgICAgLy8gdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQncyBxdWV1ZWQgaGVyZSwgYW5kIHRyYW5z
Zm9ybWluZyBsb29wcyBpbnNpZGUgaXQgZG9lc24ndAorICAgICAgICAgICAgLy8gbmVlZCB0byBr
bm93IHRoZSBleGFjdCBwb3N0LXRyYW5zZm9ybSBwYXRoIHRvIGl0LgogICAgICAgICB9CiAgICAg
fQogCkBAIC0yODMsMTYgKzQ2NCwyNiBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2
ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAvLyBXZSB0cmF2ZXJz
ZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBldmVuIGlmIHRoZSBsb29wIGlzIHRyYW5zZm9ybWVkLgog
ICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJhdmVy
c2UodGhpcyk7CisKKyAgICBtTG9vcCA9IHByZXZMb29wOwogfQogCiB9ICAvLyBuYW1lc3BhY2UK
IAorYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsIFRJbnRl
cm1Ob2RlICpyb290LCBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQoreworICAgIFNpbXBsaWZ5
TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXIgdHJhdmVyc2VyKG51bGxwdHIsIHN5bWJvbFRhYmxlKTsK
KyAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKyAgICByZXR1cm4gdHJhdmVyc2VyLnVw
ZGF0ZVRyZWUoY29tcGlsZXIsIHJvb3QpOworfQorCiBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnMoVENvbXBpbGVyICpjb21waWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Y29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRT
eW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpCiB7Ci0gICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1Ry
YXZlcnNlciB0cmF2ZXJzZXIoY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLCBzeW1ib2xUYWJsZSk7
CisgICAgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyIGNvbmRpdGlvbnNUb1NpbXBsaWZ5KGNvbmRp
dGlvbnNUb1NpbXBsaWZ5TWFzayk7CisgICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNl
ciB0cmF2ZXJzZXIoJmNvbmRpdGlvbnNUb1NpbXBsaWZ5LCBzeW1ib2xUYWJsZSk7CiAgICAgcm9v
dC0+dHJhdmVyc2UoJnRyYXZlcnNlcik7CiAgICAgcmV0dXJuIHRyYXZlcnNlci51cGRhdGVUcmVl
KGNvbXBpbGVyLCByb290KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaAppbmRleCA0Y2RlZGU2ODMyZGU5MzAyNDM0OGQ3
YzY5YWE5ZTYxYzA2YmI0NTBmLi42OGI5OGY4NWM0ODliOGY0Mjg4YjU5NDgzZDlmM2M5YWQ5MDU2
YmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlM
b29wQ29uZGl0aW9ucy5oCkBAIC0xOSw2ICsxOSwxMCBAQCBjbGFzcyBUQ29tcGlsZXI7CiBjbGFz
cyBUSW50ZXJtTm9kZTsKIGNsYXNzIFRTeW1ib2xUYWJsZTsKIAorQU5HTEVfTk9fRElTQ0FSRCBi
b29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMoVENvbXBpbGVyICpjb21waWxlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpyb290LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
ICpzeW1ib2xUYWJsZSk7CisKIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBTaW1wbGlmeUxvb3BDb25k
aXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb25kaXRpb25zVG9TaW1wbGlm
eSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzZkZTE4
MmQ5ZWYyM2IzYWIwMmM0MDllYmQxM2E2YjZlMzQ2OWZlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0Fz
Tm9kZS5oCkBAIC0wLDAgKzEsMjEyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorCisj
aW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIHNoCit7CisKK25hbWVzcGFjZSBwcml2Cit7
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFzTm9kZQore307CisKK3RlbXBsYXRl
IDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1Ob2RlPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJ
TkUgVEludGVybU5vZGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpIHsgcmV0dXJuIG5vZGU7IH0K
K307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1UeXBlZD4KK3sKKyAgICBz
dGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1UeXBlZCAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNUeXBlZCgpIDogbnVsbHB0
cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtU3ltYm9s
PgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVN5bWJvbCAqZXhlYyhUSW50ZXJt
Tm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNTeW1i
b2xOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNO
b2RlPFRJbnRlcm1Db25zdGFudFVuaW9uPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVElu
dGVybUNvbnN0YW50VW5pb24gKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpIDogbnVsbHB0cjsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGU+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5
cGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9kZSA/
IG5vZGUtPmdldEFzRnVuY3Rpb25Qcm90b3R5cGVOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307
CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1QcmVwcm9jZXNzb3JEaXJlY3Rp
dmU+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0
aXZlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUg
PyBub2RlLT5nZXRBc1ByZXByb2Nlc3NvckRpcmVjdGl2ZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtU3dpenpsZT4KK3sKKyAgICBz
dGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Td2l6emxlICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1N3aXp6bGVOb2RlKCkg
OiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRl
cm1CaW5hcnk+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtQmluYXJ5ICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5n
ZXRBc0JpbmFyeU5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0
cnVjdCBBc05vZGU8VEludGVybVVuYXJ5PgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVElu
dGVybVVuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5vZGUgPyBub2RlLT5nZXRBc1VuYXJ5Tm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtVGVybmFyeT4KK3sKKyAgICBzdGF0aWMg
QU5HTEVfSU5MSU5FIFRJbnRlcm1UZXJuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1Rlcm5hcnlOb2RlKCkgOiBudWxs
cHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1JZkVs
c2U+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtSWZFbHNlICpleGVjKFRJbnRl
cm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0lm
RWxzZU5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBB
c05vZGU8VEludGVybVN3aXRjaD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1T
d2l0Y2ggKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbm9k
ZSA/IG5vZGUtPmdldEFzU3dpdGNoTm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtQ2FzZT4KK3sKKyAgICBzdGF0aWMgQU5HTEVf
SU5MSU5FIFRJbnRlcm1DYXNlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0Nhc2VOb2RlKCkgOiBudWxscHRyOworICAgIH0K
K307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBu
b2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtQWdncmVnYXRlPgoreworICAgIHN0YXRp
YyBBTkdMRV9JTkxJTkUgVEludGVybUFnZ3JlZ2F0ZSAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSA6IG51
bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybUJs
b2NrPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUJsb2NrICpleGVjKFRJbnRl
cm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0Js
b2NrKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2Rl
PFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbj4KK3sKKyAgICBzdGF0aWMgQU5HTEVf
SU5MSU5FIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqZXhlYyhUSW50ZXJtTm9k
ZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNHbG9iYWxR
dWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxh
dGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybURlY2xhcmF0aW9uPgoreworICAgIHN0YXRpYyBB
TkdMRV9JTkxJTkUgVEludGVybURlY2xhcmF0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0RlY2xhcmF0aW9uTm9kZSgp
IDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50
ZXJtTG9vcD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Mb29wICpleGVjKFRJ
bnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRB
c0xvb3BOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3Qg
QXNOb2RlPFRJbnRlcm1CcmFuY2g+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJt
QnJhbmNoICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5v
ZGUgPyBub2RlLT5nZXRBc0JyYW5jaE5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKworfSAg
Ly8gbmFtZXNwYWNlIHByaXYKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9JTkxJTkUg
VCAqYXNOb2RlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIHJldHVybiBwcml2OjpBc05vZGU8
VD46OmV4ZWMobm9kZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwv
SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIu
Y3BwCmluZGV4IGQwOGMzODZkYTA3ZmU5MGRmNmFlMjE5ODJhNDhlMTExYzNkYzdmMGUuLmFjYzc4
OTI5NmIyYjcxZTFiODMzYTkzMjM4OTE3NGE4OGU4MDNjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1O
b2RlUGF0dGVybk1hdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3Bw
CkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpJc0R5bmFt
aWNJbmRleGluZ09mU3dpenpsZWRWZWN0b3IoVEludGVybUJpbmFyeSAqCiAgICAgcmV0dXJuIElz
RHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeChub2RlKSAmJiBub2RlLT5nZXRMZWZ0KCkt
PmdldEFzU3dpenpsZU5vZGUoKTsKIH0KIAotYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6
Om1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5v
ZGUpCitib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbChUSW50ZXJt
QmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAgICBpZiAo
KG1NYXNrICYga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSkgIT0gMCkKICAgICB7CkBAIC04Nyw3
ICs4Nyw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFsKFRJ
bnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVVuYXJ5ICpub2Rl
KQorYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFyeSAqbm9k
ZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga0FycmF5TGVuZ3RoTWV0aG9kKSAhPSAwKQog
ICAgIHsKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1h
dGNoKFRJbnRlcm1VbmFyeSAqbm9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50
ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJt
Tm9kZSAqcGFyZW50Tm9kZSkKK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChU
SW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAg
ICAvLyBMLXZhbHVlIHRyYWNraW5nIGluZm9ybWF0aW9uIGlzIG5lZWRlZCB0byBjaGVjayBmb3Ig
ZHluYW1pYyBpbmRleGluZyBpbiBMLXZhbHVlLgogICAgIC8vIFRyYXZlcnNlcnMgdGhhdCBkb24n
dCB0cmFjayBsLXZhbHVlcyBjYW4gc3RpbGwgdXNlIHRoaXMgY2xhc3MgYW5kIG1hdGNoIGJpbmFy
eSBub2RlcyB3aXRoCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2QK
IAogYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5v
ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnBh
cmVudE5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0xW
YWx1ZVJlcXVpcmVkSGVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGlzTFZhbHVlUmVxdWlyZWRIZXJlKSBjb25zdAogewogICAgIGlmIChtYXRjaEludGVybmFs
KG5vZGUsIHBhcmVudE5vZGUpKQogICAgIHsKQEAgLTEyNiw3ICsxMjYsNyBAQCBib29sIEludGVy
bU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50
ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkKK2Jvb2wgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJt
Tm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga0V4cHJlc3Npb25S
ZXR1cm5pbmdBcnJheSkgIT0gMCkKICAgICB7CkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBJbnRl
cm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRl
cm1Ob2RlICpwYXJlbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJtTm9kZVBh
dHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkKK2Jvb2wgSW50ZXJtTm9k
ZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkgY29uc3QKIHsKICAg
ICBpZiAoKG1NYXNrICYga1VuZm9sZGVkU2hvcnRDaXJjdWl0RXhwcmVzc2lvbikgIT0gMCkKICAg
ICB7CkBAIC0xNzAsNyArMTcwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1h
dGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJ
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSkK
K2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtRGVjbGFyYXRpb24g
Km5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKChtTWFzayAmIGtNdWx0aURlY2xhcmF0aW9uKSAhPSAw
KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1Ob2RlUGF0dGVybk1hdGNoZXIuaAppbmRleCBlOWM0YmNmYTUzMWZhOTQzYWZlNTRjMDYzZWNl
YWUyMDc3OGIzOTJlLi42ZjNkODczNTU2NzRlMGM4N2E3ZWQ0Nzc1ODdjNzIwNDQ1NTJkZDMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQ
YXR0ZXJuTWF0Y2hlci5oCkBAIC0yOCw1MiArMjgsNTIgQEAgY2xhc3MgSW50ZXJtTm9kZVBhdHRl
cm5NYXRjaGVyCiAgICAgc3RhdGljIGJvb2wgSXNEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0
cml4KFRJbnRlcm1CaW5hcnkgKm5vZGUpOwogICAgIHN0YXRpYyBib29sIElzRHluYW1pY0luZGV4
aW5nT2ZTd2l6emxlZFZlY3RvcihUSW50ZXJtQmluYXJ5ICpub2RlKTsKIAotICAgIGVudW0gUGF0
dGVyblR5cGUKKyAgICBlbnVtIFBhdHRlcm5UeXBlIDogdW5zaWduZWQgaW50CiAgICAgewogICAg
ICAgICAvLyBNYXRjaGVzIGV4cHJlc3Npb25zIHRoYXQgYXJlIHVuZm9sZGVkIHRvIGlmIHN0YXRl
bWVudHMgYnkgVW5mb2xkU2hvcnRDaXJjdWl0VG9JZgotICAgICAgICBrVW5mb2xkZWRTaG9ydENp
cmN1aXRFeHByZXNzaW9uID0gMHgwMDAxLAorICAgICAgICBrVW5mb2xkZWRTaG9ydENpcmN1aXRF
eHByZXNzaW9uID0gMXUgPDwgMHUsCiAKICAgICAgICAgLy8gTWF0Y2hlcyBleHByZXNzaW9ucyB0
aGF0IHJldHVybiBhcnJheXMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHNpbXBsZSBzdGF0ZW1lbnRz
IHdoZXJlIGEKICAgICAgICAgLy8gY29uc3RydWN0b3Igb3IgZnVuY3Rpb24gY2FsbCByZXN1bHQg
aXMgYXNzaWduZWQuCi0gICAgICAgIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkgPSAweDAwMDEg
PDwgMSwKKyAgICAgICAga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSA9IDF1IDw8IDF1LAogCiAg
ICAgICAgIC8vIE1hdGNoZXMgZHluYW1pYyBpbmRleGluZyBvZiB2ZWN0b3JzIG9yIG1hdHJpY2Vz
IGluIGwtdmFsdWVzLgotICAgICAgICBrRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeElu
TFZhbHVlID0gMHgwMDAxIDw8IDIsCisgICAgICAgIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9y
TWF0cml4SW5MVmFsdWUgPSAxdSA8PCAydSwKIAogICAgICAgICAvLyBNYXRjaGVzIGRlY2xhcmF0
aW9ucyB3aXRoIG1vcmUgdGhhbiBvbmUgZGVjbGFyZWQgdmFyaWFibGVzLgotICAgICAgICBrTXVs
dGlEZWNsYXJhdGlvbiA9IDB4MDAwMSA8PCAzLAorICAgICAgICBrTXVsdGlEZWNsYXJhdGlvbiA9
IDF1IDw8IDN1LAogCiAgICAgICAgIC8vIE1hdGNoZXMgZGVjbGFyYXRpb25zIG9mIGFycmF5cy4K
LSAgICAgICAga0FycmF5RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNCwKKyAgICAgICAga0FycmF5
RGVjbGFyYXRpb24gPSAxdSA8PCA0dSwKIAogICAgICAgICAvLyBNYXRjaGVzIGRlY2xhcmF0aW9u
cyBvZiBzdHJ1Y3RzIHdoZXJlIHRoZSBzdHJ1Y3QgdHlwZSBkb2VzIG5vdCBoYXZlIGEgbmFtZS4K
LSAgICAgICAga05hbWVsZXNzU3RydWN0RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNSwKKyAgICAg
ICAga05hbWVsZXNzU3RydWN0RGVjbGFyYXRpb24gPSAxdSA8PCA1dSwKIAogICAgICAgICAvLyBN
YXRjaGVzIGFycmF5IGxlbmd0aCgpIG1ldGhvZC4KLSAgICAgICAga0FycmF5TGVuZ3RoTWV0aG9k
ID0gMHgwMDAxIDw8IDYsCisgICAgICAgIGtBcnJheUxlbmd0aE1ldGhvZCA9IDF1IDw8IDZ1LAog
CiAgICAgICAgIC8vIE1hdGNoZXMgYSB2ZWN0b3Igb3IgbWF0cml4IGNvbnN0cnVjdG9yIHdob3Nl
IGFyZ3VtZW50cyBhcmUgc2NhbGFyaXplZCBieSB0aGUKICAgICAgICAgLy8gU0hfU0NBTEFSSVpF
X1ZFQ19PUl9NQVRfQ09OU1RSVUNUT1JfQVJHVU1FTlRTIHdvcmthcm91bmQuCi0gICAgICAgIGtT
Y2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDB4MDAwMSA8PCA3CisgICAgICAgIGtTY2Fs
YXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDF1IDw8IDd1LAogICAgIH07CiAgICAgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyKGNvbnN0IHVuc2lnbmVkIGludCBtYXNrKTsKIAotICAgIGJvb2wg
bWF0Y2goVEludGVybVVuYXJ5ICpub2RlKTsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1VbmFyeSAq
bm9kZSkgY29uc3Q7CiAKLSAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRl
cm1Ob2RlICpwYXJlbnROb2RlKTsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUs
IFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdDsKIAogICAgIC8vIFVzZSB0aGlzIHZlcnNp
b24gZm9yIGNoZWNraW5nIGJpbmFyeSBub2RlIG1hdGNoZXMgaW4gY2FzZSB5b3UncmUgdXNpbmcg
ZmxhZwogICAgIC8vIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0cml4SW5MVmFsdWUuCi0g
ICAgYm9vbCBtYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9k
ZSwgYm9vbCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSk7CisgICAgYm9vbCBtYXRjaChUSW50ZXJtQmlu
YXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSwgYm9vbCBpc0xWYWx1ZVJlcXVpcmVk
SGVyZSkgY29uc3Q7CiAKLSAgICBib29sIG1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJ
bnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKLSAgICBib29sIG1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpu
b2RlKTsKLSAgICBib29sIG1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSk7CisgICAgYm9v
bCBtYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkg
Y29uc3Q7CisgICAgYm9vbCBtYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkgY29uc3Q7CisgICAg
Ym9vbCBtYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIGNvbnN0OwogCiAgIHByaXZhdGU6
CiAgICAgY29uc3QgdW5zaWduZWQgaW50IG1NYXNrOwogCi0gICAgYm9vbCBtYXRjaEludGVybmFs
KFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKKyAgICBib29s
IG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5v
ZGUpIGNvbnN0OwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJt
Tm9kZV91dGlsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCmluZGV4IDZhYjEzYmE0Njk1ZWMx
YzQzMGJiYTFjNjI5NmE1NjFhNGY5NzQzMmUuLmQzZTFmY2EwMDE0Mjk5YjRjNDY5MzAyN2NiNThk
NmZkMGNlNjE2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1Ob2RlX3V0aWwuY3BwCkBAIC0yMjQsNiArMjI0LDUwIEBAIFRWYXJpYWJsZSAqRGVjbGFyZVRl
bXBWYXJpYWJsZShUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAogICAgIHJldHVybiB2YXJpYWJs
ZTsKIH0KIAorc3RkOjpwYWlyPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFibGUgKj4g
RGVjbGFyZVN0cnVjdHVyZSgKKyAgICBUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgVFN5bWJvbFRh
YmxlICpzeW1ib2xUYWJsZSwKKyAgICBURmllbGRMaXN0ICpmaWVsZExpc3QsCisgICAgVFF1YWxp
ZmllciBxdWFsaWZpZXIsCisgICAgY29uc3QgVE1lbW9yeVF1YWxpZmllciAmbWVtb3J5UXVhbGlm
aWVyLAorICAgIHVpbnQzMl90IGFycmF5U2l6ZSwKKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcg
JnN0cnVjdFR5cGVOYW1lLAorICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyAqc3RydWN0SW5zdGFu
Y2VOYW1lKQoreworICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9CisgICAgICAgIG5ldyBUU3Ry
dWN0dXJlKHN5bWJvbFRhYmxlLCBzdHJ1Y3RUeXBlTmFtZSwgZmllbGRMaXN0LCBTeW1ib2xUeXBl
OjpBbmdsZUludGVybmFsKTsKKworICAgIGF1dG8gbWFrZVN0cnVjdHVyZVR5cGUgPSBbJl0oYm9v
bCBpc1N0cnVjdFNwZWNpZmllcikgeworICAgICAgICBUVHlwZSAqc3RydWN0dXJlVHlwZSA9IG5l
dyBUVHlwZShzdHJ1Y3R1cmUsIGlzU3RydWN0U3BlY2lmaWVyKTsKKyAgICAgICAgc3RydWN0dXJl
VHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisgICAgICAgIHN0cnVjdHVyZVR5cGUtPnNl
dE1lbW9yeVF1YWxpZmllcihtZW1vcnlRdWFsaWZpZXIpOworICAgICAgICBpZiAoYXJyYXlTaXpl
ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0dXJlVHlwZS0+bWFrZUFycmF5KGFy
cmF5U2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVR5cGU7CisgICAg
fTsKKworICAgIFRJbnRlcm1TZXF1ZW5jZSBpbnNlcnRTZXF1ZW5jZTsKKworICAgIFRWYXJpYWJs
ZSAqdHlwZVZhciA9IG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGtFbXB0eUltbXV0YWJsZVN0
cmluZywgbWFrZVN0cnVjdHVyZVR5cGUodHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpFbXB0eSk7CisgICAgaW5zZXJ0U2VxdWVuY2UucHVz
aF9iYWNrKG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dHlwZVZhcn0pOworCisgICAgVFZhcmlhYmxl
ICppbnN0YW5jZVZhciA9IG51bGxwdHI7CisgICAgaWYgKHN0cnVjdEluc3RhbmNlTmFtZSkKKyAg
ICB7CisgICAgICAgIGluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJsZSwgKnN0
cnVjdEluc3RhbmNlTmFtZSwgbWFrZVN0cnVjdHVyZVR5cGUoZmFsc2UpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAg
ICAgIGluc2VydFNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue2luc3Rh
bmNlVmFyfSk7CisgICAgfQorCisgICAgc2l6ZV90IGZpcnN0RnVuY3Rpb25JbmRleCA9IEZpbmRG
aXJzdEZ1bmN0aW9uRGVmaW5pdGlvbkluZGV4KHJvb3QpOworICAgIHJvb3QtPmluc2VydENoaWxk
Tm9kZXMoZmlyc3RGdW5jdGlvbkluZGV4LCBpbnNlcnRTZXF1ZW5jZSk7CisKKyAgICByZXR1cm4g
e3R5cGVWYXIsIGluc3RhbmNlVmFyfTsKK30KKwogY29uc3QgVFZhcmlhYmxlICpEZWNsYXJlSW50
ZXJmYWNlQmxvY2soVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZExpc3QgKmZpZWxkTGlzdCwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9JbnRlcm1Ob2RlX3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaAppbmRleCAzOWI4NmRk
MWJmMjk2YjcwMzk1NmY3MTI2ZDA3NGJkNTlhY2U2YzRjLi5mNWQxYzkzNTgyYWEwZjUxMTcwNTcy
NjA1NTkzODViNmI3N2Y1OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybU5vZGVfdXRpbC5oCkBAIC00NSw2ICs0NSwxNSBAQCBUVmFyaWFibGUgKkRlY2xhcmVU
ZW1wVmFyaWFibGUoVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqKmRlY2xhcmF0aW9uT3V0KTsKK3N0ZDo6
cGFpcjxjb25zdCBUVmFyaWFibGUgKiwgY29uc3QgVFZhcmlhYmxlICo+IERlY2xhcmVTdHJ1Y3R1
cmUoCisgICAgVEludGVybUJsb2NrICpyb290LAorICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFi
bGUsCisgICAgVEZpZWxkTGlzdCAqZmllbGRMaXN0LAorICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVy
LAorICAgIGNvbnN0IFRNZW1vcnlRdWFsaWZpZXIgJm1lbW9yeVF1YWxpZmllciwKKyAgICB1aW50
MzJfdCBhcnJheVNpemUsCisgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzdHJ1Y3RUeXBlTmFt
ZSwKKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgKnN0cnVjdEluc3RhbmNlTmFtZSk7CiBjb25z
dCBUVmFyaWFibGUgKkRlY2xhcmVJbnRlcmZhY2VCbG9jayhUSW50ZXJtQmxvY2sgKnJvb3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJv
bFRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxkTGlz
dCAqZmllbGRMaXN0LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuY3BwIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJl
YnVpbGQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4ODM0NzM4ODU4YzBjOWZjNjcyODhlYjE1ZTYzMzFhNTNh
NDQwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHAKQEAgLTAsMCArMSwx
MDI4IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9Bc05vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1SZWJ1aWxkLmgiCisKKyNkZWZpbmUgR1VBUkQyKGNvbmQsIGZhaWxWYWwpIFwKKyAgICBkbyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgaWYgKCEoY29uZCkpICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWlsVmFsOyAgIFwKKyAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBHVUFSRChj
b25kKSBHVUFSRDIoY29uZCwgbnVsbHB0cikKKworbmFtZXNwYWNlIHNoCit7CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorQU5HTEVfSU5MSU5FIGJvb2wgQWxsQml0cyhUIGhh
eXN0YWNrLCBVIG5lZWRsZSkKK3sKKyAgICByZXR1cm4gKGhheXN0YWNrICYgbmVlZGxlKSA9PSBu
ZWVkbGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorQU5HTEVfSU5M
SU5FIGJvb2wgQW55Qml0cyhUIGhheXN0YWNrLCBVIG5lZWRsZSkKK3sKKyAgICByZXR1cm4gKGhh
eXN0YWNrICYgbmVlZGxlKSAhPSAwOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitU
SW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJlc3VsdChCYXNlUmVzdWx0ICZvdGhlcikK
KyAgICA6IG1BY3Rpb24ob3RoZXIubUFjdGlvbiksCisgICAgICBtVmlzaXQob3RoZXIubVZpc2l0
KSwKKyAgICAgIG1TaW5nbGUob3RoZXIubVNpbmdsZSksCisgICAgICBtTXVsdGkoc3RkOjptb3Zl
KG90aGVyLm1NdWx0aSkpCit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJl
c3VsdChUSW50ZXJtTm9kZSAmbm9kZSwgVmlzaXRCaXRzIHZpc2l0KQorICAgIDogbUFjdGlvbihB
Y3Rpb246OlJlcGxhY2VTaW5nbGUpLCBtVmlzaXQodmlzaXQpLCBtU2luZ2xlKCZub2RlKQore30K
KworVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoVEludGVybU5vZGUgKm5v
ZGUsIFZpc2l0Qml0cyB2aXNpdCkKKyAgICA6IG1BY3Rpb24obm9kZSA/IEFjdGlvbjo6UmVwbGFj
ZVNpbmdsZSA6IEFjdGlvbjo6RHJvcCksCisgICAgICBtVmlzaXQobm9kZSA/IHZpc2l0IDogVmlz
aXRCaXRzOjpOZWl0aGVyKSwKKyAgICAgIG1TaW5nbGUobm9kZSkKK3t9CisKK1RJbnRlcm1SZWJ1
aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KG51bGxwdHJfdCkKKyAgICA6IG1BY3Rpb24oQWN0
aW9uOjpEcm9wKSwgbVZpc2l0KFZpc2l0Qml0czo6TmVpdGhlciksIG1TaW5nbGUobnVsbHB0cikK
K3t9CisKK1RJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KEZhaWwpCisgICAg
OiBtQWN0aW9uKEFjdGlvbjo6RmFpbCksIG1WaXNpdChWaXNpdEJpdHM6Ok5laXRoZXIpLCBtU2lu
Z2xlKG51bGxwdHIpCit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJlc3Vs
dChzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAmJm5vZGVzKQorICAgIDogbUFjdGlvbihBY3Rp
b246OlJlcGxhY2VNdWx0aSksCisgICAgICBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwKKyAg
ICAgIG1TaW5nbGUobnVsbHB0ciksCisgICAgICBtTXVsdGkoc3RkOjptb3ZlKG5vZGVzKSkKK3t9
CisKK3ZvaWQgVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Om1vdmVBc3NpZ25JbXBsKEJhc2VS
ZXN1bHQgJm90aGVyKQoreworICAgIG1BY3Rpb24gPSBvdGhlci5tQWN0aW9uOworICAgIG1WaXNp
dCAgPSBvdGhlci5tVmlzaXQ7CisgICAgbVNpbmdsZSA9IG90aGVyLm1TaW5nbGU7CisgICAgbU11
bHRpICA9IHN0ZDo6bW92ZShvdGhlci5tTXVsdGkpOworfQorCitUSW50ZXJtUmVidWlsZDo6QmFz
ZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6TXVsdGkoc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gJiZub2RlcykKK3sKKyAgICBhdXRvIGl0ID0gc3RkOjpyZW1vdmUobm9kZXMu
YmVnaW4oKSwgbm9kZXMuZW5kKCksIG51bGxwdHIpOworICAgIG5vZGVzLmVyYXNlKGl0LCBub2Rl
cy5lbmQoKSk7CisgICAgcmV0dXJuIHN0ZDo6bW92ZShub2Rlcyk7Cit9CisKK2Jvb2wgVEludGVy
bVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3Rp
b24gPT0gQWN0aW9uOjpGYWlsOworfQorCitib29sIFRJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0
Ojppc0Ryb3AoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aW9uID09IEFjdGlvbjo6RHJvcDsK
K30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpzaW5nbGUoKSBj
b25zdAoreworICAgIHJldHVybiBtU2luZ2xlOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxUSW50
ZXJtTm9kZSAqPiAqVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Om11bHRpKCkgY29uc3QKK3sK
KyAgICBpZiAobUFjdGlvbiA9PSBBY3Rpb246OlJlcGxhY2VNdWx0aSkKKyAgICB7CisgICAgICAg
IHJldHVybiAmbU11bHRpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcgUHJlUmVzdWx0ID0gVEludGVybVJlYnVpbGQ6OlBy
ZVJlc3VsdDsKKworUHJlUmVzdWx0OjpQcmVSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0
Qml0cyB2aXNpdCkgOiBCYXNlUmVzdWx0KG5vZGUsIHZpc2l0KSB7fQorUHJlUmVzdWx0OjpQcmVS
ZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkgOiBCYXNlUmVzdWx0KG5v
ZGUsIHZpc2l0KSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQobnVsbHB0cl90KSA6IEJhc2VSZXN1
bHQobnVsbHB0cikge30KK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEZhaWwpIDogQmFzZVJlc3VsdChG
YWlsKCkpIHt9CisKK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhlcikgOiBC
YXNlUmVzdWx0KG90aGVyKSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQoUHJlUmVzdWx0ICYmb3Ro
ZXIpIDogQmFzZVJlc3VsdChvdGhlcikge30KKwordm9pZCBQcmVSZXN1bHQ6Om9wZXJhdG9yPShQ
cmVSZXN1bHQgJiZvdGhlcikKK3sKKyAgICBtb3ZlQXNzaWduSW1wbChvdGhlcik7Cit9CisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIFBvc3RSZXN1bHQgPSBUSW50ZXJtUmVidWls
ZDo6UG9zdFJlc3VsdDsKKworUG9zdFJlc3VsdDo6UG9zdFJlc3VsdChUSW50ZXJtTm9kZSAmbm9k
ZSkgOiBCYXNlUmVzdWx0KG5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcikge30KK1Bvc3RSZXN1bHQ6
OlBvc3RSZXN1bHQoVEludGVybU5vZGUgKm5vZGUpIDogQmFzZVJlc3VsdChub2RlLCBWaXNpdEJp
dHM6Ok5laXRoZXIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KG51bGxwdHJfdCkgOiBCYXNl
UmVzdWx0KG51bGxwdHIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KEZhaWwpIDogQmFzZVJl
c3VsdChGYWlsKCkpIHt9CisKK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoUG9zdFJlc3VsdCAmJm90
aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KEJhc2VS
ZXN1bHQgJiZvdGhlcikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorCit2b2lkIFBvc3RSZXN1bHQ6
Om9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpCit7CisgICAgbW92ZUFzc2lnbkltcGwob3Ro
ZXIpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitUSW50ZXJtUmVidWlsZDo6VElu
dGVybVJlYnVpbGQoVENvbXBpbGVyICZjb21waWxlciwgYm9vbCBwcmVWaXNpdCwgYm9vbCBwb3N0
VmlzaXQpCisgICAgOiBtQ29tcGlsZXIoY29tcGlsZXIpLAorICAgICAgbVN5bWJvbFRhYmxlKGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorICAgICAgbVByZVZpc2l0KHByZVZpc2l0KSwKKyAg
ICAgIG1Qb3N0VmlzaXQocG9zdFZpc2l0KQoreworICAgIEFTU0VSVChwcmVWaXNpdCB8fCBwb3N0
VmlzaXQpOworfQorCitUSW50ZXJtUmVidWlsZDo6flRJbnRlcm1SZWJ1aWxkKCkKK3sKKyAgICBB
U1NFUlQoIW1Ob2RlU3RhY2sudmFsdWUpOworICAgIEFTU0VSVCghbU5vZGVTdGFjay50YWlsKTsK
K30KKworY29uc3QgVEZ1bmN0aW9uICpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50RnVuY3Rpb24o
KSBjb25zdAoreworICAgIHJldHVybiBtUGFyZW50RnVuYzsKK30KKworVEludGVybU5vZGUgKlRJ
bnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnROb2RlKHNpemVfdCBvZmZzZXQpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1Ob2RlU3RhY2sudGFpbCk7CisgICAgYXV0byBwYXJlbnQgPSAqbU5vZGVTdGFjay50
YWlsOworICAgIHdoaWxlIChvZmZzZXQgPiAwKQorICAgIHsKKyAgICAgICAgLS1vZmZzZXQ7Cisg
ICAgICAgIEFTU0VSVChwYXJlbnQudGFpbCk7CisgICAgICAgIHBhcmVudCA9ICpwYXJlbnQudGFp
bDsKKyAgICB9CisgICAgcmV0dXJuIHBhcmVudC52YWx1ZTsKK30KKworYm9vbCBUSW50ZXJtUmVi
dWlsZDo6cmVidWlsZFJvb3QoVEludGVybUJsb2NrICZyb290KQoreworICAgIGlmICghcmVidWls
ZEluUGxhY2Uocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiBtQ29tcGlsZXIudmFsaWRhdGVBU1QoJnJvb3QpOworfQorCitib29sIFRJbnRlcm1S
ZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtQWdncmVnYXRlICZub2RlKQoreworICAgIHJl
dHVybiByZWJ1aWxkSW5QbGFjZUltcGwobm9kZSk7Cit9CisKK2Jvb2wgVEludGVybVJlYnVpbGQ6
OnJlYnVpbGRJblBsYWNlKFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICByZXR1cm4gcmVidWls
ZEluUGxhY2VJbXBsKG5vZGUpOworfQorCitib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5Q
bGFjZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIHJlYnVpbGRJblBs
YWNlSW1wbChub2RlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+Citib29sIFRJbnRl
cm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZUltcGwoTm9kZSAmbm9kZSkKK3sKKyAgICBhdXRvICpu
ZXdOb2RlID0gdHJhdmVyc2VBbnlBczxOb2RlPihub2RlKTsKKyAgICBpZiAoIW5ld05vZGUpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG5ld05vZGUgIT0g
Jm5vZGUpCisgICAgeworICAgICAgICAqbm9kZS5nZXRTZXF1ZW5jZSgpID0gc3RkOjptb3ZlKCpu
ZXdOb2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
UG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6cmVidWlsZChUSW50ZXJtTm9kZSAmbm9kZSkKK3sK
KyAgICByZXR1cm4gdHJhdmVyc2VBbnkobm9kZSk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgorTm9kZSAqVEludGVybVJlYnVpbGQ6OnRy
YXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAgUG9zdFJlc3VsdCByZXN1bHQo
dHJhdmVyc2VBbnkobm9kZSkpOworICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OkZh
aWwgfHwgIXJlc3VsdC5tU2luZ2xlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIHJldHVybiBhc05vZGU8Tm9kZT4ocmVzdWx0Lm1TaW5nbGUpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgTm9kZT4KK2Jvb2wgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55QXMo
VEludGVybU5vZGUgJm5vZGUsIE5vZGUgKiZvdXQpCit7CisgICAgUG9zdFJlc3VsdCByZXN1bHQo
dHJhdmVyc2VBbnkobm9kZSkpOworICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OkZh
aWwgfHwgcmVzdWx0Lm1BY3Rpb24gPT0gQWN0aW9uOjpSZXBsYWNlTXVsdGkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcmVzdWx0Lm1TaW5nbGUpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgb3V0ID0gYXNOb2RlPE5vZGU+KHJl
c3VsdC5tU2luZ2xlKTsKKyAgICByZXR1cm4gb3V0OworfQorCitib29sIFRJbnRlcm1SZWJ1aWxk
Ojp0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlQmFzZSAmbm9k
ZSkKK3sKKyAgICBhdXRvICpjb25zdCBjaGlsZHJlbiA9IG5vZGUuZ2V0U2VxdWVuY2UoKTsKKyAg
ICBBU1NFUlQoY2hpbGRyZW4pOworICAgIFRJbnRlcm1TZXF1ZW5jZSBuZXdDaGlsZHJlbjsKKwor
ICAgIGZvciAoVEludGVybU5vZGUgKmNoaWxkIDogKmNoaWxkcmVuKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGNoaWxkKTsKKyAgICAgICAgUG9zdFJlc3VsdCByZXN1bHQodHJhdmVyc2VBbnkoKmNo
aWxkKSk7CisKKyAgICAgICAgc3dpdGNoIChyZXN1bHQubUFjdGlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VTaW5nbGU6CisgICAgICAgICAgICAgICAgbmV3
Q2hpbGRyZW4ucHVzaF9iYWNrKHJlc3VsdC5tU2luZ2xlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VNdWx0aToKKyAgICAgICAgICAg
ICAgICBmb3IgKFRJbnRlcm1Ob2RlICpuZXdOb2RlIDogcmVzdWx0Lm1NdWx0aSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoX2JhY2so
bmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQWN0aW9uOjpEcm9wOgorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFjdGlvbjo6RmFpbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqY2hp
bGRyZW4gPSBzdGQ6Om1vdmUobmV3Q2hpbGRyZW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3N0cnVjdCBUSW50ZXJtUmVidWlsZDo6Tm9kZVN0
YWNrR3VhcmQKK3sKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiBvbGROb2RlU3RhY2s7Cisg
ICAgQ29uc0xpc3Q8VEludGVybU5vZGUgKj4gJm5vZGVTdGFjazsKKyAgICBOb2RlU3RhY2tHdWFy
ZChDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrKQorICAgICAgICA6IG9sZE5vZGVT
dGFjayhub2RlU3RhY2spLCBub2RlU3RhY2sobm9kZVN0YWNrKQorICAgIHt9CisgICAgfk5vZGVT
dGFja0d1YXJkKCkgeyBub2RlU3RhY2sgPSBvbGROb2RlU3RhY2s7IH0KK307CisKK1Bvc3RSZXN1
bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUp
Cit7CisgICAgUHJlUmVzdWx0IHByZVJlc3VsdCA9IHRyYXZlcnNlUHJlKG9yaWdpbmFsTm9kZSk7
CisgICAgaWYgKCFwcmVSZXN1bHQubVNpbmdsZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChwcmVS
ZXN1bHQubVZpc2l0ID09IFZpc2l0Qml0czo6TmVpdGhlcik7CisgICAgICAgIHJldHVybiBzdGQ6
Om1vdmUocHJlUmVzdWx0KTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAqY3Vyck5vZGUgICAg
ICAgPSBwcmVSZXN1bHQubVNpbmdsZTsKKyAgICBjb25zdCBWaXNpdEJpdHMgdmlzaXQgICAgICAg
PSBwcmVSZXN1bHQubVZpc2l0OworICAgIGNvbnN0IE5vZGVUeXBlIGN1cnJOb2RlVHlwZSA9IGdl
dE5vZGVUeXBlKCpjdXJyTm9kZSk7CisKKyAgICBjdXJyTm9kZSA9IHRyYXZlcnNlQ2hpbGRyZW4o
Y3Vyck5vZGVUeXBlLCBvcmlnaW5hbE5vZGUsICpjdXJyTm9kZSwgdmlzaXQpOworICAgIGlmICgh
Y3Vyck5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gRmFpbCgpOworICAgIH0KKworICAgIHJl
dHVybiB0cmF2ZXJzZVBvc3QoY3Vyck5vZGVUeXBlLCBvcmlnaW5hbE5vZGUsICpjdXJyTm9kZSwg
dmlzaXQpOworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlUHJlKFRJbnRl
cm1Ob2RlICZvcmlnaW5hbE5vZGUpCit7CisgICAgaWYgKCFtUHJlVmlzaXQpCisgICAgeworICAg
ICAgICByZXR1cm4ge29yaWdpbmFsTm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyAgICB9CisKKyAg
ICBOb2RlU3RhY2tHdWFyZCBndWFyZChtTm9kZVN0YWNrKTsKKyAgICBtTm9kZVN0YWNrID0geyZv
cmlnaW5hbE5vZGUsICZndWFyZC5vbGROb2RlU3RhY2t9OworCisgICAgY29uc3QgTm9kZVR5cGUg
b3JpZ2luYWxOb2RlVHlwZSA9IGdldE5vZGVUeXBlKG9yaWdpbmFsTm9kZSk7CisKKyAgICBzd2l0
Y2ggKG9yaWdpbmFsTm9kZVR5cGUpCisgICAgeworICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtu
b3duOgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBGYWls
KCk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiB2
aXNpdFN5bWJvbFByZSgqb3JpZ2luYWxOb2RlLmdldEFzU3ltYm9sTm9kZSgpKTsKKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6Q29uc3RhbnRVbmlvbjoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdENv
bnN0YW50VW5pb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOgorICAgICAgICAgICAgcmV0dXJu
IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0Z1bmN0aW9uUHJv
dG90eXBlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0
aXZlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUHJlKCpv
cmlnaW5hbE5vZGUuZ2V0QXNQcmVwcm9jZXNzb3JEaXJlY3RpdmUoKSk7CisgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OlVuYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQcmUoKm9yaWdp
bmFsTm9kZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QmluYXJ5
OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QmluYXJ5UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNC
aW5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorICAgICAgICAg
ICAgcmV0dXJuIHZpc2l0VGVybmFyeVByZSgqb3JpZ2luYWxOb2RlLmdldEFzVGVybmFyeU5vZGUo
KSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6CisgICAgICAgICAgICByZXR1cm4g
dmlzaXRTd2l6emxlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsKKyAgICAg
ICAgY2FzZSBOb2RlVHlwZTo6SWZFbHNlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0SWZFbHNl
UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNJZkVsc2VOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVU
eXBlOjpTd2l0Y2g6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l0Y2hQcmUoKm9yaWdpbmFs
Tm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNhc2U6Cisg
ICAgICAgICAgICByZXR1cm4gdmlzaXRDYXNlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNDYXNlTm9k
ZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25EZWZpbml0aW9uOgorICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKCpvcmlnaW5hbE5vZGUuZ2V0
QXNGdW5jdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkFnZ3JlZ2F0
ZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEFnZ3JlZ2F0ZVByZSgqb3JpZ2luYWxOb2RlLmdl
dEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpCbG9jazoKKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdEJsb2NrUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCbG9jaygpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb246CisgICAgICAg
ICAgICByZXR1cm4gdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSgKKyAgICAgICAg
ICAgICAgICAqb3JpZ2luYWxOb2RlLmdldEFzR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Ob2Rl
KCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpEZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIHJl
dHVybiB2aXNpdERlY2xhcmF0aW9uUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNEZWNsYXJhdGlvbk5v
ZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisgICAgICAgICAgICByZXR1cm4g
dmlzaXRMb29wUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNMb29wTm9kZSgpKTsKKyAgICAgICAgY2Fz
ZSBOb2RlVHlwZTo6QnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QnJhbmNoUHJlKCpv
cmlnaW5hbE5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkpOworICAgIH0KK30KKworVEludGVybU5vZGUg
KlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUNoaWxkcmVuKE5vZGVUeXBlIGN1cnJOb2RlVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSW50
ZXJtTm9kZSAmb3JpZ2luYWxOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpCit7CisgICAgaWYgKCFB
bnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OkNoaWxkcmVuKSkKKyAgICB7CisgICAgICAgIHJldHVy
biAmY3Vyck5vZGU7CisgICAgfQorCisgICAgaWYgKEFueUJpdHModmlzaXQsIFZpc2l0Qml0czo6
Q2hpbGRyZW5SZXF1aXJlc1NhbWUpICYmICZvcmlnaW5hbE5vZGUgIT0gJmN1cnJOb2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKyAgICB9CisKKyAgICBOb2RlU3RhY2tHdWFy
ZCBndWFyZChtTm9kZVN0YWNrKTsKKyAgICBtTm9kZVN0YWNrID0geyZjdXJyTm9kZSwgJmd1YXJk
Lm9sZE5vZGVTdGFja307CisKKyAgICBzd2l0Y2ggKGN1cnJOb2RlVHlwZSkKKyAgICB7CisgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OlVua25vd246CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJv
bDoKKyAgICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkNvbnN0YW50VW5pb246CisgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworICAgICAgICBj
YXNlIE5vZGVUeXBlOjpGdW5jdGlvblByb3RvdHlwZToKKyAgICAgICAgICAgIHJldHVybiAmY3Vy
ck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAg
ICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlVuYXJ5
OgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVW5hcnlDaGlsZHJlbigqY3Vyck5vZGUuZ2V0
QXNVbmFyeU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKyAgICAgICAg
ICAgIHJldHVybiB0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0JpbmFyeU5v
ZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlRlcm5hcnk6CisgICAgICAgICAgICByZXR1
cm4gdHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzVGVybmFyeU5vZGUoKSk7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6CisgICAgICAgICAgICByZXR1cm4gdHJh
dmVyc2VTd2l6emxlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzU3dpenpsZU5vZGUoKSk7CisgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUlm
RWxzZUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7CisgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OlN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVN3aXRjaENoaWxk
cmVuKCpjdXJyTm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkNhc2U6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VDYXNlQ2hpbGRyZW4oKmN1cnJOb2Rl
LmdldEFzQ2FzZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5p
dGlvbjoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUZ1bmN0aW9uRGVmaW5pdGlvbkNoaWxk
cmVuKCpjdXJyTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgY2FzZSBO
b2RlVHlwZTo6QWdncmVnYXRlOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQWdncmVnYXRl
Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNlIE5vZGVU
eXBlOjpCbG9jazoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJsb2NrQ2hpbGRyZW4oKmN1
cnJOb2RlLmdldEFzQmxvY2soKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxp
ZmllckRlY2xhcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlR2xvYmFsUXVhbGlm
aWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAqY3Vyck5vZGUuZ2V0QXNH
bG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlRGVjbGFyYXRpb25DaGls
ZHJlbigqY3Vyck5vZGUuZ2V0QXNEZWNsYXJhdGlvbk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6Okxvb3A6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VMb29wQ2hpbGRyZW4oKmN1
cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJyYW5jaDoK
KyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJyYW5jaENoaWxkcmVuKCpjdXJyTm9kZS5nZXRB
c0JyYW5jaE5vZGUoKSk7CisgICAgfQorfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp0
cmF2ZXJzZVBvc3QoTm9kZVR5cGUgY3Vyck5vZGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJmN1cnJOb2Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0cyB2aXNp
dCkKK3sKKyAgICBpZiAoIW1Qb3N0VmlzaXQpCisgICAgeworICAgICAgICByZXR1cm4gY3Vyck5v
ZGU7CisgICAgfQorCisgICAgaWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OlBvc3QpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworICAgIH0KKworICAgIGlmIChBbnlCaXRz
KHZpc2l0LCBWaXNpdEJpdHM6OlBvc3RSZXF1aXJlc1NhbWUpICYmICZvcmlnaW5hbE5vZGUgIT0g
JmN1cnJOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworICAgIH0KKworICAg
IE5vZGVTdGFja0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2spOworICAgIG1Ob2RlU3RhY2sgPSB7JmN1
cnJOb2RlLCAmZ3VhcmQub2xkTm9kZVN0YWNrfTsKKworICAgIHN3aXRjaCAoY3Vyck5vZGVUeXBl
KQorICAgIHsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5rbm93bjoKKyAgICAgICAgICAgIEFT
U0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gRmFpbCgpOworICAgICAgICBjYXNlIE5v
ZGVUeXBlOjpTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1ib2xQb3N0KCpjdXJy
Tm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNvbnN0YW50
VW5pb246CisgICAgICAgICAgICByZXR1cm4gdmlzaXRDb25zdGFudFVuaW9uUG9zdCgqY3Vyck5v
ZGUuZ2V0QXNDb25zdGFudFVuaW9uKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpGdW5jdGlv
blByb3RvdHlwZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9z
dCgqY3Vyck5vZGUuZ2V0QXNGdW5jdGlvblByb3RvdHlwZU5vZGUoKSk7CisgICAgICAgIGNhc2Ug
Tm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAgICAgICAgIHJldHVybiB2aXNp
dFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoKmN1cnJOb2RlLmdldEFzUHJlcHJvY2Vzc29yRGly
ZWN0aXZlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmFyeToKKyAgICAgICAgICAgIHJl
dHVybiB2aXNpdFVuYXJ5UG9zdCgqY3Vyck5vZGUuZ2V0QXNVbmFyeU5vZGUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJpbmFyeVBv
c3QoKmN1cnJOb2RlLmdldEFzQmluYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
VGVybmFyeToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdFRlcm5hcnlQb3N0KCpjdXJyTm9kZS5n
ZXRBc1Rlcm5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpTd2l6emxlOgorICAg
ICAgICAgICAgcmV0dXJuIHZpc2l0U3dpenpsZVBvc3QoKmN1cnJOb2RlLmdldEFzU3dpenpsZU5v
ZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKyAgICAgICAgICAgIHJldHVy
biB2aXNpdElmRWxzZVBvc3QoKmN1cnJOb2RlLmdldEFzSWZFbHNlTm9kZSgpKTsKKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6U3dpdGNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dpdGNoUG9z
dCgqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpD
YXNlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0Q2FzZVBvc3QoKmN1cnJOb2RlLmdldEFzQ2Fz
ZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjoKKyAg
ICAgICAgICAgIHJldHVybiB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoKmN1cnJOb2RlLmdl
dEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpBZ2dyZWdh
dGU6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRBZ2dyZWdhdGVQb3N0KCpjdXJyTm9kZS5nZXRB
c0FnZ3JlZ2F0ZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QmxvY2s6CisgICAgICAgICAg
ICByZXR1cm4gdmlzaXRCbG9ja1Bvc3QoKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uOgorICAgICAgICAgICAg
cmV0dXJuIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Qb3N0KAorICAgICAgICAgICAg
ICAgICpjdXJyTm9kZS5nZXRBc0dsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uTm9kZSgpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6RGVjbGFyYXRpb246CisgICAgICAgICAgICByZXR1cm4gdmlz
aXREZWNsYXJhdGlvblBvc3QoKmN1cnJOb2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpOworICAg
ICAgICBjYXNlIE5vZGVUeXBlOjpMb29wOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0TG9vcFBv
c3QoKmN1cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJy
YW5jaDoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJyYW5jaFBvc3QoKmN1cnJOb2RlLmdldEFz
QnJhbmNoTm9kZSgpKTsKKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1RJ
bnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdhdGVDaGlsZHJlbihUSW50
ZXJtQWdncmVnYXRlICZub2RlKQoreworICAgIGlmICh0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGls
ZHJlbihub2RlKSkKKyAgICB7CisgICAgICAgIHJldHVybiAmbm9kZTsKKyAgICB9CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VC
bG9ja0NoaWxkcmVuKFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICBpZiAodHJhdmVyc2VBZ2dy
ZWdhdGVCYXNlQ2hpbGRyZW4obm9kZSkpCisgICAgeworICAgICAgICByZXR1cm4gJm5vZGU7Cisg
ICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlRGVjbGFyYXRpb25DaGlsZHJlbihUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUp
Cit7CisgICAgaWYgKHRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKG5vZGUpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuICZub2RlOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
VEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVN3aXp6bGVDaGlsZHJlbihUSW50
ZXJtU3dpenpsZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBvcGVyYW5kID0gbm9kZS5nZXRP
cGVyYW5kKCk7CisgICAgQVNTRVJUKG9wZXJhbmQpOworCisgICAgYXV0byAqbmV3T3BlcmFuZCA9
IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqb3BlcmFuZCk7CisgICAgR1VBUkQobmV3T3Bl
cmFuZCk7CisKKyAgICBpZiAobmV3T3BlcmFuZCAhPSBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBUSW50ZXJtU3dpenpsZShuZXdPcGVyYW5kLCBub2RlLmdldFN3aXp6bGVPZmZz
ZXRzKCkpOworICAgIH0KKworICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5vZGUgKlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkgJm5vZGUp
Cit7CisgICAgYXV0byAqY29uc3QgbGVmdCA9IG5vZGUuZ2V0TGVmdCgpOworICAgIEFTU0VSVChs
ZWZ0KTsKKyAgICBhdXRvICpjb25zdCByaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKyAgICBBU1NF
UlQocmlnaHQpOworCisgICAgYXV0byAqY29uc3QgbmV3TGVmdCA9IHRyYXZlcnNlQW55QXM8VElu
dGVybVR5cGVkPigqbGVmdCk7CisgICAgR1VBUkQobmV3TGVmdCk7CisgICAgYXV0byAqY29uc3Qg
bmV3UmlnaHQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKnJpZ2h0KTsKKyAgICBHVUFS
RChuZXdSaWdodCk7CisKKyAgICBpZiAobmV3TGVmdCAhPSBsZWZ0IHx8IG5ld1JpZ2h0ICE9IHJp
Z2h0KQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS5nZXRPcCgpOworICAgICAg
ICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
SW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKG5l
d0xlZnQtPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJm
YWNlQmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVy
ZmFjZUJsb2NrOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuZXdMZWZ0LT5n
ZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BDb21tYToKKyAgICAgICAgICAgICAgICByZXR1cm4gVEludGVybUJp
bmFyeTo6Q3JlYXRlQ29tbWEobmV3TGVmdCwgbmV3UmlnaHQsIG1Db21waWxlci5nZXRTaGFkZXJW
ZXJzaW9uKCkpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KG9wLCBuZXdM
ZWZ0LCBuZXdSaWdodCk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJt
Tm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlVW5hcnlDaGlsZHJlbihUSW50ZXJtVW5hcnkg
Jm5vZGUpCit7CisgICAgYXV0byAqY29uc3Qgb3BlcmFuZCA9IG5vZGUuZ2V0T3BlcmFuZCgpOwor
ICAgIEFTU0VSVChvcGVyYW5kKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld09wZXJhbmQgPSB0cmF2
ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKm9wZXJhbmQpOworICAgIEdVQVJEKG5ld09wZXJhbmQp
OworCisgICAgaWYgKG5ld09wZXJhbmQgIT0gb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgVEludGVybVVuYXJ5KG5vZGUuZ2V0T3AoKSwgbmV3T3BlcmFuZCwgbm9kZS5nZXRGdW5j
dGlvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4oVEludGVybVRlcm5hcnkgJm5v
ZGUpCit7CisgICAgYXV0byAqY29uc3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisgICAg
QVNTRVJUKGNvbmQpOworICAgIGF1dG8gKmNvbnN0IHRydWVfID0gbm9kZS5nZXRUcnVlRXhwcmVz
c2lvbigpOworICAgIEFTU0VSVCh0cnVlXyk7CisgICAgYXV0byAqY29uc3QgZmFsc2VfID0gbm9k
ZS5nZXRGYWxzZUV4cHJlc3Npb24oKTsKKyAgICBBU1NFUlQoZmFsc2VfKTsKKworICAgIGF1dG8g
KmNvbnN0IG5ld0NvbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmNvbmQpOworICAg
IEdVQVJEKG5ld0NvbmQpOworICAgIGF1dG8gKmNvbnN0IG5ld1RydWUgPSB0cmF2ZXJzZUFueUFz
PFRJbnRlcm1UeXBlZD4oKnRydWVfKTsKKyAgICBHVUFSRChuZXdUcnVlKTsKKyAgICBhdXRvICpj
b25zdCBuZXdGYWxzZSA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqZmFsc2VfKTsKKyAg
ICBHVUFSRChuZXdGYWxzZSk7CisKKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5ld1RydWUg
IT0gdHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBUSW50ZXJtVGVybmFyeShuZXdDb25kLCBuZXdUcnVlLCBuZXdGYWxzZSk7CisgICAgfQorCisg
ICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZl
cnNlSWZFbHNlQ2hpbGRyZW4oVEludGVybUlmRWxzZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25z
dCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKyAgICBBU1NFUlQoY29uZCk7CisgICAgYXV0
byAqY29uc3QgdHJ1ZV8gID0gbm9kZS5nZXRUcnVlQmxvY2soKTsKKyAgICBhdXRvICpjb25zdCBm
YWxzZV8gPSBub2RlLmdldEZhbHNlQmxvY2soKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld0NvbmQg
PSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmNvbmQpOworICAgIEdVQVJEKG5ld0NvbmQp
OworICAgIFRJbnRlcm1CbG9jayAqbmV3VHJ1ZSA9IG51bGxwdHI7CisgICAgaWYgKHRydWVfKQor
ICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqdHJ1ZV8sIG5ld1RydWUpKTsKKyAg
ICB9CisgICAgVEludGVybUJsb2NrICpuZXdGYWxzZSA9IG51bGxwdHI7CisgICAgaWYgKGZhbHNl
XykKKyAgICB7CisgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMoKmZhbHNlXywgbmV3RmFsc2Up
KTsKKyAgICB9CisKKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5ld1RydWUgIT0gdHJ1ZV8g
fHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJt
SWZFbHNlKG5ld0NvbmQsIG5ld1RydWUsIG5ld0ZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
Jm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VTd2l0Y2hD
aGlsZHJlbihUSW50ZXJtU3dpdGNoICZub2RlKQoreworICAgIGF1dG8gKmNvbnN0IGluaXQgPSBu
b2RlLmdldEluaXQoKTsKKyAgICBBU1NFUlQoaW5pdCk7CisgICAgYXV0byAqY29uc3Qgc3RtdHMg
PSBub2RlLmdldFN0YXRlbWVudExpc3QoKTsKKyAgICBBU1NFUlQoc3RtdHMpOworCisgICAgYXV0
byAqY29uc3QgbmV3SW5pdCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqaW5pdCk7Cisg
ICAgR1VBUkQobmV3SW5pdCk7CisgICAgYXV0byAqY29uc3QgbmV3U3RtdHMgPSB0cmF2ZXJzZUFu
eUFzPFRJbnRlcm1CbG9jaz4oKnN0bXRzKTsKKyAgICBHVUFSRChuZXdTdG10cyk7CisKKyAgICBp
ZiAobmV3SW5pdCAhPSBpbml0IHx8IG5ld1N0bXRzICE9IHN0bXRzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBUSW50ZXJtU3dpdGNoKG5ld0luaXQsIG5ld1N0bXRzKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVy
c2VDYXNlQ2hpbGRyZW4oVEludGVybUNhc2UgJm5vZGUpCit7CisgICAgYXV0byAqY29uc3QgY29u
ZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBu
dWxscHRyOworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlB
cygqY29uZCwgbmV3Q29uZCkpOworICAgIH0KKworICAgIGlmIChuZXdDb25kICE9IGNvbmQpCisg
ICAgeworICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1DYXNlKG5ld0NvbmQpOworICAgIH0KKwor
ICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2
ZXJzZUZ1bmN0aW9uRGVmaW5pdGlvbkNoaWxkcmVuKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24g
Jm5vZGUpCit7CisgICAgR1VBUkQoIW1QYXJlbnRGdW5jKTsgIC8vIEZ1bmN0aW9uIGRlZmluaXRp
b25zIGNhbm5vdCBiZSBuZXN0ZWQuCisgICAgbVBhcmVudEZ1bmMgPSBub2RlLmdldEZ1bmN0aW9u
KCk7CisgICAgc3RydWN0IE9uRXhpdAorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICom
cGFyZW50RnVuYzsKKyAgICAgICAgT25FeGl0KGNvbnN0IFRGdW5jdGlvbiAqJnBhcmVudEZ1bmMp
IDogcGFyZW50RnVuYyhwYXJlbnRGdW5jKSB7fQorICAgICAgICB+T25FeGl0KCkgeyBwYXJlbnRG
dW5jID0gbnVsbHB0cjsgfQorICAgIH0gb25FeGl0KG1QYXJlbnRGdW5jKTsKKworICAgIGF1dG8g
KmNvbnN0IHByb3RvID0gbm9kZS5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworICAgIEFTU0VSVChw
cm90byk7CisgICAgYXV0byAqY29uc3QgYm9keSA9IG5vZGUuZ2V0Qm9keSgpOworICAgIEFTU0VS
VChib2R5KTsKKworICAgIGF1dG8gKmNvbnN0IG5ld1Byb3RvID0gdHJhdmVyc2VBbnlBczxUSW50
ZXJtRnVuY3Rpb25Qcm90b3R5cGU+KCpwcm90byk7CisgICAgR1VBUkQobmV3UHJvdG8pOworICAg
IGF1dG8gKmNvbnN0IG5ld0JvZHkgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1CbG9jaz4oKmJvZHkp
OworICAgIEdVQVJEKG5ld0JvZHkpOworCisgICAgaWYgKG5ld1Byb3RvICE9IHByb3RvIHx8IG5l
d0JvZHkgIT0gYm9keSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUZ1bmN0aW9u
RGVmaW5pdGlvbihuZXdQcm90bywgbmV3Qm9keSk7CisgICAgfQorCisgICAgcmV0dXJuICZub2Rl
OworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlm
aWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFy
YXRpb24gJm5vZGUpCit7CisgICAgYXV0byAqY29uc3Qgc3ltYm9sID0gbm9kZS5nZXRTeW1ib2wo
KTsKKyAgICBBU1NFUlQoc3ltYm9sKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld1N5bWJvbCA9IHRy
YXZlcnNlQW55QXM8VEludGVybVN5bWJvbD4oKnN5bWJvbCk7CisgICAgR1VBUkQobmV3U3ltYm9s
KTsKKworICAgIGlmIChuZXdTeW1ib2wgIT0gc3ltYm9sKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24obmV3U3ltYm9sLCBub2RlLmlz
UHJlY2lzZSgpLCBub2RlLmdldExpbmUoKSk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOwor
fQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxkcmVuKFRJ
bnRlcm1Mb29wICZub2RlKQoreworICAgIGNvbnN0IFRMb29wVHlwZSBsb29wVHlwZSA9IG5vZGUu
Z2V0VHlwZSgpOworCisgICAgYXV0byAqY29uc3QgaW5pdCA9IG5vZGUuZ2V0SW5pdCgpOworICAg
IGF1dG8gKmNvbnN0IGNvbmQgPSBub2RlLmdldENvbmRpdGlvbigpOworICAgIGF1dG8gKmNvbnN0
IGV4cHIgPSBub2RlLmdldEV4cHJlc3Npb24oKTsKKyAgICBhdXRvICpjb25zdCBib2R5ID0gbm9k
ZS5nZXRCb2R5KCk7CisgICAgQVNTRVJUKGJvZHkpOworCisjaWYgZGVmaW5lZChBTkdMRV9FTkFC
TEVfQVNTRVJUUykKKyAgICBzd2l0Y2ggKGxvb3BUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBU
TG9vcFR5cGU6OkVMb29wRm9yOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVExv
b3BUeXBlOjpFTG9vcFdoaWxlOgorICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BEb1doaWxl
OgorICAgICAgICAgICAgQVNTRVJUKGNvbmQpOworICAgICAgICAgICAgQVNTRVJUKCFpbml0ICYm
ICFleHByKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAgYXV0byAq
Y29uc3QgbmV3Qm9keSA9IHRyYXZlcnNlQW55QXM8VEludGVybUJsb2NrPigqYm9keSk7CisgICAg
R1VBUkQobmV3Qm9keSk7CisgICAgVEludGVybU5vZGUgKm5ld0luaXQgPSBudWxscHRyOworICAg
IGlmIChpbml0KQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqaW5pdCwgbmV3
SW5pdCkpOworICAgIH0KKyAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBudWxscHRyOworICAg
IGlmIChjb25kKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqY29uZCwgbmV3
Q29uZCkpOworICAgIH0KKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOworICAg
IGlmIChleHByKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqZXhwciwgbmV3
RXhwcikpOworICAgIH0KKworICAgIGlmIChuZXdJbml0ICE9IGluaXQgfHwgbmV3Q29uZCAhPSBj
b25kIHx8IG5ld0V4cHIgIT0gZXhwciB8fCBuZXdCb2R5ICE9IGJvZHkpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGxvb3BUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRMb29wVHlw
ZTo6RUxvb3BGb3I6CisgICAgICAgICAgICAgICAgR1VBUkQobmV3Qm9keSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BXaGlsZToKKyAg
ICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisgICAgICAgICAgICAgICAg
R1VBUkQobmV3Q29uZCAmJiBuZXdCb2R5KTsKKyAgICAgICAgICAgICAgICBHVUFSRCghbmV3SW5p
dCAmJiAhbmV3RXhwcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG5ldyBUSW50ZXJtTG9vcChsb29wVHlwZSwgbmV3SW5pdCwgbmV3Q29uZCwgbmV3
RXhwciwgbmV3Qm9keSk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJt
Tm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQnJhbmNoQ2hpbGRyZW4oVEludGVybUJyYW5j
aCAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBleHByID0gbm9kZS5nZXRFeHByZXNzaW9uKCk7
CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOworICAgIGlmIChleHByKQor
ICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpleHByLCBu
ZXdFeHByKSk7CisgICAgfQorCisgICAgaWYgKG5ld0V4cHIgIT0gZXhwcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgVEludGVybUJyYW5jaChub2RlLmdldEZsb3dPcCgpLCBuZXdFeHByKTsK
KyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTeW1ib2xQcmUoVEludGVybVN5bWJv
bCAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1By
ZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKFRJbnRlcm1Db25z
dGFudFVuaW9uICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsK
K30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUHJl
KFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZp
c2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRQcmVw
cm9jZXNzb3JEaXJlY3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSkK
K3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBU
SW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpCit7CisgICAg
cmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpCit7CisgICAgcmV0dXJu
IHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6
OnZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlz
aXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwg
VmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdElm
RWxzZVByZShUSW50ZXJtSWZFbHNlICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRC
aXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFBy
ZShUSW50ZXJtU3dpdGNoICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpC
b3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQcmUoVEludGVy
bUNhc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQor
CitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0TG9vcFByZShUSW50ZXJtTG9vcCAmbm9k
ZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3Vs
dCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCcmFuY2hQcmUoVEludGVybUJyYW5jaCAmbm9kZSkKK3sK
KyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50
ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUp
Cit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQg
VEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUoVEludGVybUJsb2NrICZub2RlKQoreworICAg
IHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1S
ZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKQoreworICAg
IHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1S
ZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKwor
UHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
UHJlKAorICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSkKK3sKKyAg
ICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9zdChUSW50
ZXJtU3ltYm9sICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFudFVuaW9u
ICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUg
Jm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVp
bGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vzc29yRGly
ZWN0aXZlICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRl
cm1SZWJ1aWxkOjp2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5vZGUpCit7CisgICAgcmV0
dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QmluYXJ5UG9z
dChUSW50ZXJtQmluYXJ5ICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVz
dWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5ICZub2Rl
KQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2
aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIHJldHVybiBub2Rl
OworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBvc3QoVEludGVy
bUlmRWxzZSAmbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50
ZXJtUmVidWlsZDo6dmlzaXRTd2l0Y2hQb3N0KFRJbnRlcm1Td2l0Y2ggJm5vZGUpCit7CisgICAg
cmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Q2FzZVBv
c3QoVEludGVybUNhc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1
bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0TG9vcFBvc3QoVEludGVybUxvb3AgJm5vZGUpCit7Cisg
ICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QnJh
bmNoUG9zdChUSW50ZXJtQnJhbmNoICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQ
b3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50ZXJtRGVj
bGFyYXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVElu
dGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQb3N0KFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICBy
ZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRBZ2dyZWdh
dGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisK
K1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUG9zdChU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQor
CitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uUG9zdCgKKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5vZGUpCit7
CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaApkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybVJlYnVpbGQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA5N2U0MGUz
NTU0YjZjMDlmNjZkY2NlY2Q5YmExNWUzNDRmNTJhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1SZWJ1aWxkLmgKQEAgLTAsMCArMSwzMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9JTlRFUk1SRUJVSUxEX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Ob2RlVHlwZS5oIgorCituYW1lc3BhY2Ugc2gKK3sK
KworLy8gV2Fsa3MgdGhlIHRyZWUgdG8gcmVidWlsZCBub2Rlcy4KKy8vIFRoaXMgY2xhc3MgaXMg
aW50ZW5kZWQgdG8gYmUgZGVyaXZlZCB3aXRoIG92ZXJyaWRkZW4gdmlzaXRYWFggZnVuY3Rpb25z
LgorLy8KKy8vIEVhY2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGEgVmlz
aXQgcGFyYW1ldGVyIHNpbXBseSBoYXMgdGhlIHZpc2l0b3IgY2FsbGVkCisvLyBleGFjdGx5IG9u
Y2UsIHJlZ2FyZGxlc3Mgb2YgKHByZVZpc2l0KSBvciAocG9zdFZpc2l0KSB2YWx1ZXMuCisKKy8v
IEVhY2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBoYXMgYSBWaXNpdCBwYXJhbWV0ZXIgYmVoYXZl
cyBhcyBmb2xsb3dzOgorLy8gICAgKiBJZiAocHJlVmlzaXQpOgorLy8gICAgICAtIFRoZSBub2Rl
IGlzIHZpc2l0ZWQgYmVmb3JlIGNoaWxkcmVuIGFyZSB0cmF2ZXJzZWQuCisvLyAgICAgIC0gVGhl
IHJldHVybmVkIHZhbHVlIGlzIHVzZWQgdG8gcmVwbGFjZSB0aGUgdmlzaXRlZCBub2RlLiBUaGUg
cmV0dXJuZWQgdmFsdWUgbWF5IGJlIHRoZSBzYW1lCisvLyAgICAgICAgYXMgdGhlIG9yaWdpbmFs
IG5vZGUuCisvLyAgICAgIC0gSWYgbXVsdGlwbGUgbm9kZXMgYXJlIHJldHVybmVkLCBjaGlsZHJl
biBhbmQgcG9zdCB2aXNpdHMgb2YgdGhlIHJldHVybmVkIG5vZGVzIGFyZSBub3QKKy8vICAgICAg
ICBwcmVmb3JtZWQsIGV2ZW4gaWYgaXQgaXMgYSBzaW5nbGV0b24gY29sbGVjdGlvbi4KKy8vICAg
ICogSWYgKGNoaWxkVmlzaXQpCisvLyAgICAgIC0gSWYgYW55IG5ldyBjaGlsZHJlbiBhcmUgcmV0
dXJuZWQsIHRoZSBub2RlIGlzIGF1dG9tYXRpY2FsbHkgcmVidWlsdCB3aXRoIHRoZSBuZXcgY2hp
bGRyZW4KKy8vICAgICAgICBiZWZvcmUgcG9zdCB2aXNpdC4KKy8vICAgICAgLSBEZXBlbmRpbmcg
b24gdGhlIHR5cGUgb2YgdGhlIG5vZGUsIG51bGwgY2hpbGRyZW4gbWF5IGJlIGRpc2NhcmRlZC4K
Ky8vICAgICAgLSBJbGwtdHlwZWQgY2hpbGRyZW4gY2F1c2UgcmVidWlsZCBlcnJvcnMuIElsbC10
eXBlZCBtZWFucyB0aGUgbm9kZSB0byBhdXRvbWF0aWNhbGx5IHJlYnVpbGQKKy8vICAgICAgICBj
YW5ub3QgYWNjZXB0IGEgY2hpbGQgb2YgYSBjZXJ0YWluIHR5cGUgYXMgaW5wdXQgdG8gaXRzIGNv
bnN0cnVjdG9yLgorLy8gICAgICAtIE9ubHkgaW5zdGFuY2VzIG9mIFRJbnRlcm1BZ2dyZWdhdGVC
YXNlIGNhbiBhY2NlcHQgTXVsdGkgcmVzdWx0cyBmb3IgYW55IG9mIGl0cyBjaGlsZHJlbi4KKy8v
ICAgICAgICBJZiBzdXBwbGllZCwgdGhlIG5vZGVzIGFyZSBzcGxpY2VkIGNoaWxkcmVuIGF0IHRo
ZSBzcG90IG9mIHRoZSBvcmlnaW5hbCBjaGlsZC4KKy8vICAgICogSWYgKHBvc3RWaXNpdCkKKy8v
ICAgICAgLSBUaGUgbm9kZSBpcyB2aXNpdGVkIGFmdGVyIGFueSBjaGlsZHJlbiBhcmUgdHJhdmVy
c2VkLgorLy8gICAgICAtIE9ubHkgYWZ0ZXIgc3VjaCBhIHJlYnVpbGQgKG9yIGxhY2sgdGhlcmVv
ZiksIHRoZSBwb3N0LXZpc2l0IGlzIHBlcmZvcm1lZC4KKy8vCisvLyBOb2RlcyBpbiB2aXNpdCBm
dW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgbW9kaWZpZWQgaW4gcGxhY2UsIGluY2x1ZGluZyBU
SW50ZXJtQWdncmVnYXRlQmFzZQorLy8gY2hpbGQgc2VxdWVuY2VzLgorLy8KKy8vIFRoZSBkZWZh
dWx0IGltcGxlbWVudGF0aW9ucyBvZiBhbGwgdGhlIHZpc2l0WFhYIGZ1bmN0aW9ucyBzdXBwb3J0
IGZ1bGwgcHJlIGFuZCBwb3N0IHRyYXZlcnNhbAorLy8gd2l0aG91dCBtb2RpZnlpbmcgdGhlIHZp
c2l0ZWQgbm9kZXMuCisvLworY2xhc3MgVEludGVybVJlYnVpbGQgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKK3sKKworICAgIGVudW0gY2xhc3MgQWN0aW9uCisgICAgeworICAgICAgICBSZXBsYWNlU2lu
Z2xlLAorICAgICAgICBSZXBsYWNlTXVsdGksCisgICAgICAgIERyb3AsCisgICAgICAgIEZhaWws
CisgICAgfTsKKworICBwdWJsaWM6CisgICAgc3RydWN0IEZhaWwKKyAgICB7fTsKKworICAgIGVu
dW0gVmlzaXRCaXRzIDogc2l6ZV90CisgICAgeworICAgICAgICAvLyBObyBiaXRzIGFyZSBzZXQu
CisgICAgICAgIEVtcHR5ID0gMHUsCisKKyAgICAgICAgLy8gQWxsb3cgdmlzaXQgb2YgcmV0dXJu
ZWQgbm9kZSdzIGNoaWxkcmVuLgorICAgICAgICBDaGlsZHJlbiA9IDF1IDw8IDB1LAorCisgICAg
ICAgIC8vIEFsbG93IHBvc3QgdmlzaXQgb2YgcmV0dXJuZWQgbm9kZS4KKyAgICAgICAgUG9zdCA9
IDF1IDw8IDF1LAorCisgICAgICAgIC8vIElmIChDaGlsZHJlbikgYml0LCBvbmx5IHZpc2l0IGlm
IHRoZSByZXR1cm5lZCBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBub2RlLgorICAg
ICAgICBDaGlsZHJlblJlcXVpcmVzU2FtZSA9IDF1IDw8IDJ1LAorCisgICAgICAgIC8vIElmIChQ
b3N0KSBiaXQsIG9ubHkgdmlzaXQgaWYgdGhlIHJldHVybmVkIG5vZGUgaXMgdGhlIHNhbWUgYXMg
dGhlIG9yaWdpbmFsIG5vZGUuCisgICAgICAgIFBvc3RSZXF1aXJlc1NhbWUgPSAxdSA8PCAzdSwK
KworICAgICAgICBSZXF1aXJlU2FtZSAgPSBDaGlsZHJlblJlcXVpcmVzU2FtZSB8IFBvc3RSZXF1
aXJlc1NhbWUsCisgICAgICAgIE5laXRoZXIgICAgICA9IEVtcHR5LAorICAgICAgICBCb3RoICAg
ICAgICAgPSBDaGlsZHJlbiB8IFBvc3QsCisgICAgICAgIEJvdGhXaGVuU2FtZSA9IEJvdGggfCBS
ZXF1aXJlU2FtZSwKKyAgICB9OworCisgIHByaXZhdGU6CisgICAgc3RydWN0IE5vZGVTdGFja0d1
YXJkOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IENvbnNMaXN0Cisg
ICAgeworICAgICAgICBUIHZhbHVlOworICAgICAgICBDb25zTGlzdDxUPiAqdGFpbDsKKyAgICB9
OworCisgICAgY2xhc3MgQmFzZVJlc3VsdAorICAgIHsKKyAgICAgICAgQmFzZVJlc3VsdChjb25z
dCBCYXNlUmVzdWx0ICYpID0gZGVsZXRlOworICAgICAgICBCYXNlUmVzdWx0ICZvcGVyYXRvcj0o
Y29uc3QgQmFzZVJlc3VsdCAmKSA9IGRlbGV0ZTsKKworICAgICAgcHVibGljOgorICAgICAgICBC
YXNlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhlcikgPSBkZWZhdWx0OworICAgICAgICBCYXNlUmVz
dWx0KEJhc2VSZXN1bHQgJm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGNvbnN0cnVjdG9y
IGltcGxzCisgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0Qml0cyB2
aXNpdCk7CisgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2
aXNpdCk7CisgICAgICAgIEJhc2VSZXN1bHQobnVsbHB0cl90KTsKKyAgICAgICAgQmFzZVJlc3Vs
dChGYWlsKTsKKyAgICAgICAgQmFzZVJlc3VsdChzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAm
Jm5vZGVzKTsKKworICAgICAgICB2b2lkIG1vdmVBc3NpZ25JbXBsKEJhc2VSZXN1bHQgJm90aGVy
KTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGFzc2lnbiBpbXBscworCisgICAgICAgIHN0YXRpYyBC
YXNlUmVzdWx0IE11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpOworCisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorICAgICAgICBzdGF0aWMgQmFzZVJlc3Vs
dCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IG5vZGVzOworICAgICAgICAgICAgZm9y
IChJdGVyIG5vZGVzQ3VyciA9IG5vZGVzQmVnaW47IG5vZGVzQ3VyciAhPSBub2Rlc0VuZDsgKytu
b2Rlc0N1cnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZXMucHVzaF9iYWNr
KCpub2Rlc0N1cnIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZShub2Rlcyk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzRmFpbCgpIGNvbnN0OworICAg
ICAgICBib29sIGlzRHJvcCgpIGNvbnN0OworICAgICAgICBUSW50ZXJtTm9kZSAqc2luZ2xlKCkg
Y29uc3Q7CisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICptdWx0aSgp
IGNvbnN0OworCisgICAgICBwdWJsaWM6CisgICAgICAgIEFjdGlvbiBtQWN0aW9uOworICAgICAg
ICBWaXNpdEJpdHMgbVZpc2l0OworICAgICAgICBUSW50ZXJtTm9kZSAqbVNpbmdsZTsKKyAgICAg
ICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gbU11bHRpOworICAgIH07CisKKyAgcHVibGlj
OgorICAgIGNsYXNzIFByZVJlc3VsdCA6IHByaXZhdGUgQmFzZVJlc3VsdAorICAgIHsKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIFRJbnRlcm1SZWJ1aWxkOworCisgICAgICBwdWJsaWM6CisgICAgICAg
IFByZVJlc3VsdChQcmVSZXN1bHQgJiZvdGhlcik7CisgICAgICAgIFByZVJlc3VsdChUSW50ZXJt
Tm9kZSAmbm9kZSwgVmlzaXRCaXRzIHZpc2l0ID0gVmlzaXRCaXRzOjpCb3RoV2hlblNhbWUpOwor
ICAgICAgICBQcmVSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNpdCA9IFZp
c2l0Qml0czo6Qm90aFdoZW5TYW1lKTsKKyAgICAgICAgUHJlUmVzdWx0KG51bGxwdHJfdCk7ICAv
LyBVc2VkIHRvIGRyb3AgYSBub2RlLgorICAgICAgICBQcmVSZXN1bHQoRmFpbCk7ICAgICAgIC8v
IFVzZWQgdG8gc2lnbmFsIGZhaWx1cmUuCisKKyAgICAgICAgdm9pZCBvcGVyYXRvcj0oUHJlUmVz
dWx0ICYmb3RoZXIpOworCisgICAgICAgIHN0YXRpYyBQcmVSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEJhc2VSZXN1bHQ6Ok11bHRpKHN0ZDo6bW92ZShub2RlcykpOworICAgICAgICB9CisKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXI+CisgICAgICAgIHN0YXRpYyBQcmVSZXN1bHQgTXVs
dGkoSXRlciBub2Rlc0JlZ2luLCBJdGVyIG5vZGVzRW5kKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gQmFzZVJlc3VsdDo6TXVsdGkobm9kZXNCZWdpbiwgbm9kZXNFbmQpOworICAgICAg
ICB9CisKKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNEcm9wOworICAgICAgICB1c2luZyBC
YXNlUmVzdWx0Ojppc0ZhaWw7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6Om11bHRpOworICAg
ICAgICB1c2luZyBCYXNlUmVzdWx0OjpzaW5nbGU7CisKKyAgICAgIHByaXZhdGU6CisgICAgICAg
IFByZVJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpOworICAgIH07CisKKyAgICBjbGFzcyBQb3N0
UmVzdWx0IDogcHJpdmF0ZSBCYXNlUmVzdWx0CisgICAgeworICAgICAgICBmcmllbmQgY2xhc3Mg
VEludGVybVJlYnVpbGQ7CisKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgUG9zdFJlc3VsdChQb3N0
UmVzdWx0ICYmb3RoZXIpOworICAgICAgICBQb3N0UmVzdWx0KFRJbnRlcm1Ob2RlICZub2RlKTsK
KyAgICAgICAgUG9zdFJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAgICAgIFBvc3RSZXN1
bHQobnVsbHB0cl90KTsgIC8vIFVzZWQgdG8gZHJvcCBhIG5vZGUKKyAgICAgICAgUG9zdFJlc3Vs
dChGYWlsKTsgICAgICAgLy8gVXNlZCB0byBzaWduYWwgZmFpbHVyZS4KKworICAgICAgICB2b2lk
IG9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpOworCisgICAgICAgIHN0YXRpYyBQb3N0UmVz
dWx0IE11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUobm9kZXMpKTsK
KyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorICAgICAgICBz
dGF0aWMgUG9zdFJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShub2Rlc0JlZ2lu
LCBub2Rlc0VuZCk7CisgICAgICAgIH0KKworICAgICAgICB1c2luZyBCYXNlUmVzdWx0Ojppc0Ry
b3A7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRmFpbDsKKyAgICAgICAgdXNpbmcgQmFz
ZVJlc3VsdDo6bXVsdGk7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OnNpbmdsZTsKKworICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgUG9zdFJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpOworICAg
IH07CisKKyAgcHVibGljOgorICAgIFRJbnRlcm1SZWJ1aWxkKFRDb21waWxlciAmY29tcGlsZXIs
IGJvb2wgcHJlVmlzaXQsIGJvb2wgcG9zdFZpc2l0KTsKKworICAgIHZpcnR1YWwgflRJbnRlcm1S
ZWJ1aWxkKCk7CisKKyAgICAvLyBSZWJ1aWxkcyB0aGUgdHJlZSBzdGFydGluZyBhdCB0aGUgcHJv
dmlkZWQgcm9vdC4gSWYgYSBuZXcgbm9kZSB3b3VsZCBiZSByZXR1cm5lZCBmb3IgdGhlCisgICAg
Ly8gcm9vdCwgdGhlIHJvb3Qgbm9kZSdzIGNoaWxkcmVuIGJlY29tZSB0aGF0IG9mIHRoZSBuZXcg
bm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1cmUKKyAgICAvLyBvY2N1cnJlZC4K
KyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZFJvb3QoVEludGVybUJsb2NrICZyb290
KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRTeW1ib2xQcmUo
VEludGVybVN5bWJvbCAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRDb25zdGFu
dFVuaW9uUHJlKFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJl
c3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUHJlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAm
bm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQ
cmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVS
ZXN1bHQgdmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUHJl
UmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwg
UHJlUmVzdWx0IHZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSk7CisgICAgdmly
dHVhbCBQcmVSZXN1bHQgdmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKTsKKyAg
ICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdElmRWxzZVByZShUSW50ZXJtSWZFbHNlICZub2RlKTsK
KyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN3aXRjaFByZShUSW50ZXJtU3dpdGNoICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdENhc2VQcmUoVEludGVybUNhc2UgJm5vZGUp
OworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0TG9vcFByZShUSW50ZXJtTG9vcCAmbm9kZSk7
CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCcmFuY2hQcmUoVEludGVybUJyYW5jaCAmbm9k
ZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVj
bGFyYXRpb24gJm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0QmxvY2tQcmUoVElu
dGVybUJsb2NrICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVBy
ZShUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEZ1
bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKTsKKyAg
ICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uUHJlKFRJ
bnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSk7CisKKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRTeW1ib2xQb3N0KFRJbnRlcm1TeW1ib2wgJm5vZGUpOworICAgIHZpcnR1
YWwgUG9zdFJlc3VsdCB2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFudFVuaW9u
ICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBv
c3QoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1
bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQb3N0KFRJbnRlcm1QcmVwcm9jZXNzb3JEaXJl
Y3RpdmUgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdFVuYXJ5UG9zdChUSW50
ZXJtVW5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBvc3Qo
VEludGVybUJpbmFyeSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0VGVybmFy
eVBvc3QoVEludGVybVRlcm5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNp
dFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1
bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2UgJm5vZGUpOworICAgIHZpcnR1YWwgUG9z
dFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRjaCAmbm9kZSk7CisgICAgdmlydHVh
bCBQb3N0UmVzdWx0IHZpc2l0Q2FzZVBvc3QoVEludGVybUNhc2UgJm5vZGUpOworICAgIHZpcnR1
YWwgUG9zdFJlc3VsdCB2aXNpdExvb3BQb3N0KFRJbnRlcm1Mb29wICZub2RlKTsKKyAgICB2aXJ0
dWFsIFBvc3RSZXN1bHQgdmlzaXRCcmFuY2hQb3N0KFRJbnRlcm1CcmFuY2ggJm5vZGUpOworICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50ZXJtRGVjbGFyYXRp
b24gJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJsb2NrUG9zdChUSW50ZXJt
QmxvY2sgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVBvc3Qo
VEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0RnVu
Y3Rpb25EZWZpbml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKTsKKyAg
ICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3Qo
VEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKTsKKworICAgIC8vIENhbiBi
ZSB1c2VkIHRvIHJlYnVpbGQgYSBzcGVjaWZpYyBub2RlIGR1cmluZyBhIHRyYXZlcnNhbC4gVXNl
ZnVsIGZvciBmaW5lIGNvbnRyb2wgb2YKKyAgICAvLyByZWJ1aWxkaW5nIGEgbm9kZSdzIGNoaWxk
cmVuLgorICAgIEFOR0xFX05PX0RJU0NBUkQgUG9zdFJlc3VsdCByZWJ1aWxkKFRJbnRlcm1Ob2Rl
ICZub2RlKTsKKworICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJ
ZiBhIG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgor
ICAgIC8vIGJlY29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNl
IGlmIGZhaWx1cmUgb2NjdXJyZWQuCisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJlYnVpbGRJ
blBsYWNlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpOworCisgICAgLy8gUmVidWlsZHMgdGhlIHBy
b3ZpZGVkIG5vZGUgaW4gcGxhY2UuIElmIGEgbmV3IG5vZGUgd291bGQgYmUgcmV0dXJuZWQsIHRo
ZSBvbGQgbm9kZSdzIGNoaWxkcmVuCisgICAgLy8gYmVjb21lIHRoYXQgb2YgdGhlIG5ldyBub2Rl
IGluc3RlYWQuIFJldHVybnMgZmFsc2UgaWYgZmFpbHVyZSBvY2N1cnJlZC4KKyAgICBBTkdMRV9O
T19ESVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2UoVEludGVybUJsb2NrICZub2RlKTsKKworICAg
IC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBhIG5ldyBub2RlIHdv
dWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorICAgIC8vIGJlY29tZSB0
aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1cmUgb2Nj
dXJyZWQuCisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJlYnVpbGRJblBsYWNlKFRJbnRlcm1E
ZWNsYXJhdGlvbiAmbm9kZSk7CisKKyAgICAvLyBJZiBjdXJyZW50bHkgYXQgb3IgYmVsb3cgYSBm
dW5jdGlvbiBkZWNsYXJhdGlvbiBib2R5LCB0aGlzIHJldHVybnMgdGhlIGZ1bmN0aW9uIHRoYXQg
ZW5jbG9zZXMKKyAgICAvLyB0aGUgY3VycmVudGx5IHZpc2l0ZWQgbm9kZS4gKFRoaXMgcmV0dXJu
cyBudWxsIGlmIGF0IGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gbm9kZS4pCisgICAgY29uc3QgVEZ1
bmN0aW9uICpnZXRQYXJlbnRGdW5jdGlvbigpIGNvbnN0OworCisgICAgVEludGVybU5vZGUgKmdl
dFBhcmVudE5vZGUoc2l6ZV90IG9mZnNldCA9IDApIGNvbnN0OworCisgIHByaXZhdGU6CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+CisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJlYnVp
bGRJblBsYWNlSW1wbChOb2RlICZub2RlKTsKKworICAgIFBvc3RSZXN1bHQgdHJhdmVyc2VBbnko
VEludGVybU5vZGUgJm5vZGUpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+CisgICAg
Tm9kZSAqdHJhdmVyc2VBbnlBcyhUSW50ZXJtTm9kZSAmbm9kZSk7CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTm9kZT4KKyAgICBib29sIHRyYXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5vZGUs
IE5vZGUgKiZvdXQpOworCisgICAgUHJlUmVzdWx0IHRyYXZlcnNlUHJlKFRJbnRlcm1Ob2RlICZv
cmlnaW5hbE5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUNoaWxkcmVuKE5vZGVUeXBl
IGN1cnJOb2RlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
SW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWaXNpdEJpdHMgdmlzaXQpOworICAgIFBvc3RSZXN1bHQgdHJhdmVyc2VQb3N0KE5vZGVU
eXBlIG5vZGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1O
b2RlICZvcmlnaW5hbE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5v
ZGUgJmN1cnJOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0cyB2aXNp
dCk7CisKKyAgICBib29sIHRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlICZub2RlKTsKKworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVVuYXJ5Q2hpbGRy
ZW4oVEludGVybVVuYXJ5ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VCaW5hcnlD
aGlsZHJlbihUSW50ZXJtQmluYXJ5ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VU
ZXJuYXJ5Q2hpbGRyZW4oVEludGVybVRlcm5hcnkgJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0
cmF2ZXJzZVN3aXp6bGVDaGlsZHJlbihUSW50ZXJtU3dpenpsZSAmbm9kZSk7CisgICAgVEludGVy
bU5vZGUgKnRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oVEludGVybUlmRWxzZSAmbm9kZSk7CisgICAg
VEludGVybU5vZGUgKnRyYXZlcnNlU3dpdGNoQ2hpbGRyZW4oVEludGVybVN3aXRjaCAmbm9kZSk7
CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNlICZub2Rl
KTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VMb29wQ2hpbGRyZW4oVEludGVybUxvb3AgJm5v
ZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUJyYW5jaENoaWxkcmVuKFRJbnRlcm1CcmFu
Y2ggJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZURlY2xhcmF0aW9uQ2hpbGRyZW4o
VEludGVybURlY2xhcmF0aW9uICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VCbG9j
a0NoaWxkcmVuKFRJbnRlcm1CbG9jayAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNl
QWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisgICAgVEludGVybU5v
ZGUgKnRyYXZlcnNlRnVuY3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oVEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbiAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVy
RGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICAgICAgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uICZub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgVENvbXBpbGVyICZtQ29tcGlsZXI7
CisgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisgICAgY29uc3QgVEZ1bmN0aW9uICpt
UGFyZW50RnVuYyA9IG51bGxwdHI7CisgICAgR2V0Tm9kZVR5cGUgZ2V0Tm9kZVR5cGU7CisKKyAg
cHJpdmF0ZToKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiBtTm9kZVN0YWNre251bGxwdHIs
IG51bGxwdHJ9OworICAgIGJvb2wgbVByZVZpc2l0OworICAgIGJvb2wgbVBvc3RWaXNpdDsKK307
CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9k
ZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hNTllNWFmMmQ1YWFjY2I1Y2I5MGUyNDJkNTBkZjg0ZWZlMDlj
YzdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8v
CisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9OT0RFVFlQRV9I
XworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX05PREVUWVBFX0hfCisKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgor
CituYW1lc3BhY2Ugc2gKK3sKKworZW51bSBjbGFzcyBOb2RlVHlwZQoreworICAgIFVua25vd24s
CisgICAgU3ltYm9sLAorICAgIENvbnN0YW50VW5pb24sCisgICAgRnVuY3Rpb25Qcm90b3R5cGUs
CisgICAgUHJlcHJvY2Vzc29yRGlyZWN0aXZlLAorICAgIFVuYXJ5LAorICAgIEJpbmFyeSwKKyAg
ICBUZXJuYXJ5LAorICAgIFN3aXp6bGUsCisgICAgSWZFbHNlLAorICAgIFN3aXRjaCwKKyAgICBD
YXNlLAorICAgIEZ1bmN0aW9uRGVmaW5pdGlvbiwKKyAgICBBZ2dyZWdhdGUsCisgICAgQmxvY2ss
CisgICAgR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24sCisgICAgRGVjbGFyYXRpb24sCisgICAg
TG9vcCwKKyAgICBCcmFuY2gsCit9OworCisvLyBUaGlzIGlzIGEgZnVuY3Rpb24gbGlrZSBvYmpl
Y3QgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHRoYXQgc3RhY2sgYWxsb2NhdGVzIHRoaXMgYmVjYXVz
ZQorLy8gVEludGVybVRyYXZlcnNlciBpcyBhIGhlYXZ5IG9iamVjdCB0byBjb25zdHJ1Y3QuCitj
bGFzcyBHZXROb2RlVHlwZSA6IHByaXZhdGUgVEludGVybVRyYXZlcnNlcgoreworICAgIE5vZGVU
eXBlIG5vZGVUeXBlOworCisgIHB1YmxpYzoKKyAgICBHZXROb2RlVHlwZSgpIDogVEludGVybVRy
YXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpIHt9CisKKyAgICBOb2RlVHlwZSBvcGVyYXRvcigp
KFRJbnRlcm1Ob2RlICZub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS52aXNpdChWaXNpdDo6UHJl
VmlzaXQsIHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZVR5cGU7CisgICAgfQorCisgIHByaXZh
dGU6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRlIHsgbm9k
ZVR5cGUgPSBOb2RlVHlwZTo6U3ltYm9sOyB9CisKKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlv
bihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqKSBvdmVycmlkZSB7IG5vZGVUeXBlID0gTm9kZVR5cGU6
OkNvbnN0YW50VW5pb247IH0KKworICAgIHZvaWQgdmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50
ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBl
ID0gTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOworICAgIH0KKworICAgIHZvaWQgdmlzaXRQ
cmVwcm9jZXNzb3JEaXJlY3RpdmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAqKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGly
ZWN0aXZlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dp
enpsZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6U3dp
enpsZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRCaW5h
cnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVU
eXBlID0gTm9kZVR5cGU6OkJpbmFyeTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICopIG92ZXJyaWRlCisgICAg
eworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpVbmFyeTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFy
eSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6VGVybmFy
eTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRJZkVsc2Uo
VmlzaXQsIFRJbnRlcm1JZkVsc2UgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBl
ID0gTm9kZVR5cGU6OklmRWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGJvb2wgdmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OlN3aXRjaDsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2FzZSAqKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6Q2FzZTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRp
b24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJ
bnRlcm1BZ2dyZWdhdGUgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9k
ZVR5cGU6OkFnZ3JlZ2F0ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJv
b2wgdmlzaXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICopIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCbG9jazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihWaXNpdCwg
VEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICopIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybURlY2xhcmF0aW9uICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBub2Rl
VHlwZSA9IE5vZGVUeXBlOjpEZWNsYXJhdGlvbjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6TG9vcDsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFu
Y2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkJyYW5j
aDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZSBz
aAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVfSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3V0aWwuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdXRpbC5jcHAKaW5kZXggMzQ2NDcwZTRiMjA1M2Y0YzkyMDJkNjVjMTZmM2IxNDUxNjgx
NTI4Yy4uNTgyZGRjNzBjOTZjMGFkYTAwMTY1YzIxY2ExZTk2NmY3OTU4NGFhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5j
cHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dXRpbC5jcHAKQEAgLTgwNCw2ICs4MDQsMTAgQEAgYm9vbCBJc091dHB1dE1ldGFsKFNoU2hhZGVy
T3V0cHV0IG91dHB1dCkKIHsKICAgICByZXR1cm4gb3V0cHV0ID09IFNIX0dMU0xfTUVUQUxfT1VU
UFVUOwogfQorYm9vbCBJc091dHB1dE1ldGFsRGlyZWN0KFNoU2hhZGVyT3V0cHV0IG91dHB1dCkK
K3sKKyAgICByZXR1cm4gb3V0cHV0ID09IFNIX01TTF9NRVRBTF9PVVRQVVQ7Cit9CiAKIGJvb2wg
SXNJblNoYWRlclN0b3JhZ2VCbG9jayhUSW50ZXJtVHlwZWQgKm5vZGUpCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgK
aW5kZXggNTNlZTc1NTIwM2Q5Mjg4YjkyZGJiMjYwYmYyNGE1Y2FhNDFlMzE5NS4uZjlhZTliYjFk
NmVhNDMwYTUzMDQ3MzhjMzQ3NzNmMTI3N2YxNjExNCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuaApAQCAtNzcsNiAr
NzcsNyBAQCBib29sIElzT3V0cHV0R0xTTChTaFNoYWRlck91dHB1dCBvdXRwdXQpOwogYm9vbCBJ
c091dHB1dEhMU0woU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKIGJvb2wgSXNPdXRwdXRWdWxrYW4o
U2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKIGJvb2wgSXNPdXRwdXRNZXRhbChTaFNoYWRlck91dHB1
dCBvdXRwdXQpOworYm9vbCBJc091dHB1dE1ldGFsRGlyZWN0KFNoU2hhZGVyT3V0cHV0IG91dHB1
dCk7CiAKIGJvb2wgSXNJblNoYWRlclN0b3JhZ2VCbG9jayhUSW50ZXJtVHlwZWQgKm5vZGUpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvX2FwcGxlLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dwdV9pbmZv
X3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQppbmRleCBhNDlkYzUyNzNmZjA2NjExN2RlNzIwN2Q5
ZGI3YzllNjRiYWVkMjQyLi4xNTAwZmZmNDIyYzAwMGZkMWU3ZWFlZmJjMDBkMDM3MTVkMzAyMWM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvX2FwcGxlLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVf
aW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW0KQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE5
LDcgKzE5LDI1IEBAIG5hbWVzcGFjZSBhbmdsZQogCiBib29sIEdldFN5c3RlbUluZm8oU3lzdGVt
SW5mbyAqaW5mbykKIHsKLSNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorIyAgICBpZiBkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkKKyAgICBzdGF0
aWMgYm9vbCBpc2lPU0FwcE9uTWFjID0gZmFsc2U7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57CisgICAgICBpc2lPU0FwcE9uTWFj
ID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBpc2lPU0FwcE9uTWFjXTsKKyAgICB9KTsK
KworICAgIGlmIChpc2lPU0FwcE9uTWFjKQorICAgIHsKKyAgICAgICAgR2V0U3lzdGVtSW5mb19p
b3MoaW5mbyk7CisgICAgICAgIGlmIChpbmZvKQorICAgICAgICB7CisgICAgICAgICAgICBpbmZv
LT5pc2lPU0FwcE9uTWFjID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5mbzsK
KyAgICB9CisKKyAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19tYWMoaW5mbyk7CisjICAgIGVsaWYg
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9N
QUNDQVRBTFlTVCkKICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19tYWMoaW5mbyk7CiAjICAgIGVs
c2UKICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lvcy5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lv
cy5jcHAKaW5kZXggZTUyZWNiMzI3NWRkMjZmOTNlODM3NTY0NWQ2MGI3NDk3N2U3MTIxZC4uN2E5
ZDlmYTI4NmIwMmU5ZjNiYjMwMTQ3ZGNlYWFmZWZkNzdhZTU5ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9f
aW9zLmNwcApAQCAtMTgsOSArMTgsMTYgQEAgbmFtZXNwYWNlIGFuZ2xlCiBib29sIEdldFN5c3Rl
bUluZm9faW9zKFN5c3RlbUluZm8gKmluZm8pCiB7CiAgICAgewotICAgICAgICAvLyBUT0RPKGFu
Z2xlYnVnLmNvbS80Mjc1KTogR2V0IHRoZSBhY3R1YWwgc3lzdGVtIHZlcnNpb24gYW5kIEdQVSBp
bmZvLgorICAgICAgICAvLyAgICAgICAgR1BVRGV2aWNlSW5mbyBkZXZpY2VJbmZvOworICAgICAg
ICAvLyAgICAgICAgZGV2aWNlSW5mby52ZW5kb3JJZCAgICAgID0ga1ZlbmRvcklEX0FwcGxlOwor
ICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby5kZXZpY2VJZCAgICAgID0gMDsKKyAgICAgICAg
Ly8gICAgICAgIGRldmljZUluZm8uZHJpdmVyVmVuZG9yICA9ICJBcHBsZSI7CisgICAgICAgIC8v
ICAgICAgICBkZXZpY2VJbmZvLmRyaXZlclZlcnNpb24gPSAiMC4wIjsKKyAgICAgICAgLy8gICAg
ICAgIGRldmljZUluZm8uZHJpdmVyRGF0ZSAgICA9ICIxLzEvMTk3MCI7CisKKyAgICAgICAgLy8g
VE9ETyhhbmdsZWJ1Zy5jb20vNDI3NSk6IEdldCB0aGUgYWN0dWFsIHN5c3RlbSB2ZXJzaW9uLgog
ICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Ci0gICAgICAgIGluZm8t
PmdwdXMuZW1wbGFjZV9iYWNrKCkudmVuZG9ySWQgPSBrVmVuZG9ySURfQXBwbGU7CisgICAgICAg
IC8vIGluZm8tPmdwdXMucHVzaF9iYWNrKGRldmljZUluZm8pOwogICAgIH0KIAogICAgIHJldHVy
biB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L0NhcHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0NhcHMuY3Bw
CmluZGV4IDFkZGRkNGQ4NTQ4MzJiMmQyOWIzODBhMDQ4YmQ0YTQzNzk5MzdjM2YuLjc5MzEwMDli
MmFlYThlZTE2ZThlMGQ3ZTkzZjcxN2Y0OTU5NWY3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9DYXBzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKQEAgLTE3MCw4ICsxNzAsOCBAQCBzdGF0aWMg
Ym9vbCBHZXRGb3JtYXRTdXBwb3J0QmFzZShjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNh
cHMsCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1aXJlZEZvcm1hdHNTaXplOyBp
KyspCiAgICAgewotICAgICAgICBjb25zdCBUZXh0dXJlQ2FwcyAmY2FwID0gdGV4dHVyZUNhcHMu
Z2V0KHJlcXVpcmVkRm9ybWF0c1tpXSk7CiAKKyAgICAgICAgY29uc3QgVGV4dHVyZUNhcHMgJmNh
cCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJlZEZvcm1hdHNbaV0pOwogICAgICAgICBpZiAocmVx
dWlyZXNUZXh0dXJpbmcgJiYgIWNhcC50ZXh0dXJhYmxlKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC00NjIsNyArNDYyLDYgQEAgc3RhdGljIGJvb2wgRGV0ZXJtaW5l
QVNUQ0xEUlRleHR1cmVTdXBwb3J0KGNvbnN0IFRleHR1cmVDYXBzTWFwICZ0ZXh0dXJlQ2FwcykK
ICAgICAgICAgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUiwgIEdMX0NP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSLAogICAgICAgICBHTF9DT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiwgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ18xMngxMl9LSFIsCiAgICAgfTsKLQogICAgIHJldHVybiBHZXRGb3JtYXRTdXBwb3J0
KHRleHR1cmVDYXBzLCByZXF1aXJlZEZvcm1hdHMsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UpOwogfQogCkBAIC02MzAsMTIgKzYyOSw3IEBAIHN0YXRpYyBib29sIERldGVybWluZURl
cHRoVGV4dHVyZUFOR0xFU3VwcG9ydChjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMp
CiB7CiAgICAgY29uc3RleHByIEdMZW51bSByZXF1aXJlZEZvcm1hdHNbXSA9IHsKICAgICAgICAg
R0xfREVQVEhfQ09NUE9ORU5UMTYsCi0jaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAm
JiAoIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpIHx8ICFkZWZpbmVkKEFOR0xF
X0NQVV9BUk02NCkpCi0gICAgICAgIC8vIFRPRE8oZGlubyk6IFRlbXBvcmFyaWx5IFJlbW92aW5n
IHRoZSBuZWVkIGZvciBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMKLSAgICAgICAgLy8gYmVjYXVz
ZSBpdCBpcyBub3Qgc3VwcG9ydGVkIG9uIGlPUy4KLSAgICAgICAgLy8gVE9ETyhkaW5vKTogSSB0
aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgcnVudGltZSBjaGVjayB3aGVuIHJ1bm5pbmcgYW4gaU9T
IGFwcCBvbiBNYWMuCiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywKLSNlbmRpZgog
ICAgICAgICBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywKICAgICB9OwogCkBAIC02NDcsMTIgKzY0
MSw3IEBAIHN0YXRpYyBib29sIERldGVybWluZURlcHRoVGV4dHVyZU9FU1N1cHBvcnQoY29uc3Qg
VGV4dHVyZUNhcHNNYXAgJnRleHR1cmVDYXBzKQogewogICAgIGNvbnN0ZXhwciBHTGVudW0gcmVx
dWlyZWRGb3JtYXRzW10gPSB7CiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LAotI2lmICFk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgKCFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01B
Q0NBVEFMWVNUKSB8fCAhZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQotICAgICAgICAvLyBUT0RP
KGRpbm8pOiBUZW1wb3JhcmlseSBSZW1vdmluZyB0aGUgbmVlZCBmb3IgR0xfREVQVEhfQ09NUE9O
RU5UMzJfT0VTCi0gICAgICAgIC8vIGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBvbiBpT1Mu
Ci0gICAgICAgIC8vIFRPRE8oZGlubyk6IEkgdGhpbmsgdGhpcyBuZWVkcyB0byBiZSBhIHJ1bnRp
bWUgY2hlY2sgd2hlbiBydW5uaW5nIGFuIGlPUyBhcHAgb24gTWFjLgogICAgICAgICBHTF9ERVBU
SF9DT01QT05FTlQzMl9PRVMsCi0jZW5kaWYKICAgICB9OwogCiAgICAgcmV0dXJuIEdldEZvcm1h
dFN1cHBvcnQodGV4dHVyZUNhcHMsIHJlcXVpcmVkRm9ybWF0cywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwg
dHJ1ZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL0Rpc3BsYXkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L0Rpc3BsYXkuY3BwCmluZGV4IGRkZTQzMzdiYTViN2ZjN2I0ODJlYzI3NTE4OTBiNWRiZjMzYTMw
NDAuLjY1NzgxNGZlMDY3Mzg5NWE4MzFhNDNjZmNjZWZiNjk5ZTI1NmZjNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAKQEAgLTE4MSw3
ICsxODEsMTMgQEAgRUdMQXR0cmliIEdldERpc3BsYXlUeXBlRnJvbUVudmlyb25tZW50KCkKICAg
ICAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX05VTExfQU5HTEU7CiAgICAgfQog
I2VuZGlmCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfTUVUQUwpCisgICAgaWYgKGFuZ2xlRGVm
YXVsdEVudiA9PSAibWV0YWwiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9B
TkdMRV9UWVBFX01FVEFMX0FOR0xFOworICAgIH0KIAorI2VuZGlmCiAjaWYgZGVmaW5lZChBTkdM
RV9FTkFCTEVfRDNEMTEpCiAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX0QzRDEx
X0FOR0xFOwogI2VsaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKQEAgLTEzMjUsNiArMTMz
MSw0NyBAQCBFcnJvciBEaXNwbGF5OjptYWtlQ3VycmVudChnbDo6Q29udGV4dCAqcHJldmlvdXND
b250ZXh0LAogICAgIHJldHVybiBOb0Vycm9yKCk7CiB9CiAKK0Vycm9yIERpc3BsYXk6Om1ha2VD
dXJyZW50KGNvbnN0IFRocmVhZCAqdGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWdsOjpTdXJmYWNlICpkcmF3U3VyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVn
bDo6U3VyZmFjZSAqcmVhZFN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIW1Jbml0aWFsaXplZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBOb0Vycm9yKCk7CisgICAgfQorCisgICAgZ2w6OkNvbnRleHQgKnByZXZpb3Vz
Q29udGV4dCA9IHRocmVhZC0+Z2V0Q29udGV4dCgpOworICAgIGlmIChwcmV2aW91c0NvbnRleHQp
CisgICAgeworICAgICAgICBBTkdMRV9UUlkocHJldmlvdXNDb250ZXh0LT51bk1ha2VDdXJyZW50
KHRoaXMpKTsKKyAgICB9CisKKyAgICBBTkdMRV9UUlkobUltcGxlbWVudGF0aW9uLT5tYWtlQ3Vy
cmVudCh0aGlzLCBkcmF3U3VyZmFjZSwgcmVhZFN1cmZhY2UsIGNvbnRleHQpKTsKKworICAgIGlm
IChjb250ZXh0ICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoY29udGV4dC0+
bWFrZUN1cnJlbnQodGhpcywgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlKSk7CisgICAgfQorCisg
ICAgLy8gVGljayBhbGwgdGhlIHNjcmF0Y2ggYnVmZmVycyB0byBtYWtlIHN1cmUgdGhleSBnZXQg
Y2xlYW5lZCB1cCBldmVudHVhbGx5IGlmIHRoZXkgc3RvcCBiZWluZworICAgIC8vIHVzZWQuCisg
ICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtU2NyYXRjaEJ1
ZmZlck11dGV4KTsKKworICAgICAgICBmb3IgKGFuZ2xlOjpTY3JhdGNoQnVmZmVyICZzY2F0Y2hC
dWZmZXIgOiBtU2NyYXRjaEJ1ZmZlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNjYXRjaEJ1
ZmZlci50aWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChhbmdsZTo6U2NyYXRjaEJ1ZmZl
ciAmemVyb0ZpbGxlZEJ1ZmZlciA6IG1aZXJvRmlsbGVkQnVmZmVycykKKyAgICAgICAgeworICAg
ICAgICAgICAgemVyb0ZpbGxlZEJ1ZmZlci50aWNrKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gTm9FcnJvcigpOworfQorCiBFcnJvciBEaXNwbGF5OjpyZXN0b3JlTG9zdERldmlj
ZSgpCiB7CiAgICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRvciBjdHggPSBtQ29udGV4dFNldC5i
ZWdpbigpOyBjdHggIT0gbUNvbnRleHRTZXQuZW5kKCk7IGN0eCsrKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmgKaW5kZXggNGFjNjMzNmUwZjNhY2Iw
NmVhNTk1YzU0NzVhYTk4ZTRiODZjN2U5NC4uMTZmYWYyYmY1Y2JjZDM5MjhiNTBjNWQxY2U1ZDA3
MDRjZWE1ZTc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL0Rpc3BsYXkuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
RGlzcGxheS5oCkBAIC0xNjYsNiArMTY2LDExIEBAIGNsYXNzIERpc3BsYXkgZmluYWwgOiBwdWJs
aWMgTGFiZWxlZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0
ZU1hcCAmYXR0cmlicywKICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpDb250ZXh0ICoqb3V0
Q29udGV4dCk7CiAKKyAgICBFcnJvciBtYWtlQ3VycmVudChjb25zdCBUaHJlYWQgKnRocmVhZCwK
KyAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNlICpkcmF3U3VyZmFjZSwKKyAgICAgICAgICAg
ICAgICAgICAgICBTdXJmYWNlICpyZWFkU3VyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCk7CisKICAgICBFcnJvciBjcmVhdGVTeW5jKGNvbnN0IGdsOjpD
b250ZXh0ICpjdXJyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgIEVHTGVudW0gdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZU1hcCAmYXR0cmlicywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvUHJvZ3JhbS5oCmluZGV4IGZl
M2VjMjg1OWJhYTc2Mjg3YjY5ZmM3Y2JmMDNmZDc5ODljNDExZGYuLmJhOTI2N2EwM2M5Mzk2YzU3
YmRlNGQ0N2QyM2M3ODEzNTgxNmMzNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL1Byb2dyYW0uaApAQCAtMjc2LDYgKzI3NiwxMSBAQCBjbGFzcyBQcm9ncmFt
U3RhdGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICB7CiAgICAgICAgIHJldHVybiBt
RXhlY3V0YWJsZS0+Z2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpOwogICAgIH0K
KyAgICB2b2lkIHNldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoCisgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gX21MaW5rZWRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1FeGVjdXRh
YmxlLT5zZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKF9tTGlua2VkVHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncyk7CisgICAgfQogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEdMc2l6ZWk+
ICZnZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG1FeGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtRXhlY3V0YWJs
ZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRh
YmxlLmgKaW5kZXggOTUwODMyYjRlODA1MTdhZWNiMDVkZGM2YmNiZWJiODBhYzYyYjRkZi4uNDhm
M2JkMjE3NTQwODQ3OTZkOThkNTI4MmRkYTZlNWI0ZmE4NjkzMyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRhYmxlLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRhYmxlLmgK
QEAgLTIyOSw2ICsyMjksMTEgQEAgY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGUgZmluYWwgOiBwdWJs
aWMgYW5nbGU6OlN1YmplY3QKICAgICB7CiAgICAgICAgIHJldHVybiBtTGlua2VkVHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5nczsKICAgICB9CisgICAgdm9pZCBzZXRMaW5rZWRUcmFuc2Zvcm1GZWVk
YmFja1ZhcnlpbmdzKAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxUcmFuc2Zvcm1GZWVkYmFj
a1Zhcnlpbmc+IF9tTGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykKKyAgICB7CisgICAg
ICAgIG1MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzID0gX21MaW5rZWRUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzOworICAgIH0KICAgICBHTGludCBnZXRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlck1vZGUoKSBjb25zdCB7IHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlOyB9
CiAgICAgR0x1aW50IGdldFVuaWZvcm1CbG9ja0JpbmRpbmcoR0x1aW50IHVuaWZvcm1CbG9ja0lu
ZGV4KSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKaW5kZXggZDRjNmFl
ZDZlY2MwODNjYTUzYWRlMzZhNzA1MjgzMmRmNTIzMjNmZC4uMjIzNjRiMzQyN2Y4ZGNkY2Y1ZDkz
YWM2YTk3NmZkMmU3M2Y4ZjdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKQEAgLTIw
NSw3ICsyMDUsNyBAQCBib29sIG9wZXJhdG9yPj0oY29uc3QgT1NWZXJzaW9uICZhLCBjb25zdCBP
U1ZlcnNpb24gJmIpCiAgICAgICAgICAgIHN0ZDo6dGllKGIubWFqb3JWZXJzaW9uLCBiLm1pbm9y
VmVyc2lvbiwgYi5wYXRjaFZlcnNpb24pOwogfQogCi0jaWYgIWRlZmluZWQoQU5HTEVfUExBVEZP
Uk1fQVBQTEUpCisjaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCiBPU1ZlcnNpb24g
R2V0TWFjT1NWZXJzaW9uKCkKIHsKICAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNpb24KQEAg
LTIxMyw2ICsyMTMsMTQgQEAgT1NWZXJzaW9uIEdldE1hY09TVmVyc2lvbigpCiB9CiAjZW5kaWYK
IAorI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKK09TVmVyc2lvbiBHZXRpT1NWZXJz
aW9uKCkKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNpb24KKyAgICByZXR1cm4gT1NW
ZXJzaW9uKDAsIDAsIDApOworfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X0xJTlVYKQogYm9vbCBQYXJzZUxpbnV4T1NWZXJzaW9uKGNvbnN0IGNoYXIgKnZlcnNpb24sIGlu
dCAqbWFqb3IsIGludCAqbWlub3IsIGludCAqcGF0Y2gpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxz
LmgKaW5kZXggMjYxOWJjMzRmMzM3OTAyNjJkODZhMTMzZDhhNjAzOTJjNmExZjk5MS4uNzg3NzJh
ZTJmZDEzNzY4ZDdlZjRmZDJkMjIxYzcwZjI3ODMxODdiMSAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRp
bHMuaApAQCAtMTY3LDYgKzE2NywxNSBAQCBpbmxpbmUgYm9vbCBJc0FwcGxlKCkKICNlbmRpZgog
fQogCitpbmxpbmUgYm9vbCBJc01hYygpCit7CisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9B
UFBMRSkgJiYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykKKyAgICByZXR1cm4gdHJ1ZTsK
KyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIGlubGluZSBib29sIElzRnVj
aHNpYSgpCiB7CiAjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9GVUNIU0lBKQpAQCAtMjA0LDYg
KzIxMyw4IEBAIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPU1ZlcnNpb24gJmEsIGNvbnN0IE9TVmVy
c2lvbiAmYik7CiAKIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKTsKIAorT1NWZXJzaW9uIEdl
dGlPU1ZlcnNpb24oKTsKKwogT1NWZXJzaW9uIEdldExpbnV4T1NWZXJzaW9uKCk7CiAKIGlubGlu
ZSBib29sIElzQW5kcm9pZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbSBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfaW9zLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU3YTg0NWMwNzI1ZjA5NGY2MmU3Y2EzNzMyZjE1MzYxOWNlYzY1ZTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
ZHJpdmVyX3V0aWxzX2lvcy5tbQpAQCAtMCwwICsxLDI4IEBACisvLworLy8gQ29weXJpZ2h0IDIw
MTkgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBkcml2
ZXJfdXRpbHNfaW9zLm1tIDogcHJvdmlkZXMgaW9zLXNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0
IGN1cnJlbnQgZHJpdmVyLgorCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0
aWxzLmgiCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1lc3BhY2Ug
cngKK3sKKworT1NWZXJzaW9uIEdldGlPU1ZlcnNpb24oKQoreworICAgIE9TVmVyc2lvbiByZXN1
bHQ7CisKKyAgICBOU09wZXJhdGluZ1N5c3RlbVZlcnNpb24gdmVyc2lvbiA9IFtbTlNQcm9jZXNz
SW5mbyBwcm9jZXNzSW5mb10gb3BlcmF0aW5nU3lzdGVtVmVyc2lvbl07CisgICAgcmVzdWx0Lm1h
am9yVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24ubWFqb3JW
ZXJzaW9uKTsKKyAgICByZXN1bHQubWlub3JWZXJzaW9uICAgICAgICAgICAgICA9IHN0YXRpY19j
YXN0PGludD4odmVyc2lvbi5taW5vclZlcnNpb24pOworICAgIHJlc3VsdC5wYXRjaFZlcnNpb24g
ICAgICAgICAgICAgID0gc3RhdGljX2Nhc3Q8aW50Pih2ZXJzaW9uLnBhdGNoVmVyc2lvbik7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfbWFj
Lm1tCmluZGV4IDNhZjQ2ZmM4ODc4YjhiOTU1MzU1ODM5MTYzNTYzMWNhN2RkN2E2MjAuLjliNTNl
YjczNGVhZmFlYjA3MzAyYThiNjA1NzQzYmVlOGFmNjhiMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfbWFjLm1t
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHNfbWFjLm1tCkBAIC0xMyw2ICsxMyw3IEBACiBuYW1lc3BhY2UgcngKIHsKIAorI2lm
ICFUQVJHRVRfT1NfSU9TCiBPU1ZlcnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKIHsKICAgICBPU1Zl
cnNpb24gcmVzdWx0OwpAQCAtMjQsNSArMjUsNSBAQCBPU1ZlcnNpb24gR2V0TWFjT1NWZXJzaW9u
KCkKIAogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5n
X2FwcGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvU29mdExpbmtpbmdfYXBwbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjNhNmQ3YTAyZWI3ZmI0MjMzN2Rj
MGU1NzRkYzZjNTU4Yzg0MGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmgKQEAgLTAs
MCArMSwxMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIFNvZnRMaW5raW5nX2FwcGxlLmNwcDogTWFjcm9zIGZvciBzb2Z0LWxpbmtp
bmcgRnJhbWV3b3JrcyBhbmQgRnVuY3Rpb25zLgorCisjaWZuZGVmIFNPRlRfTElOS0lOR19BUFBM
RV9IXworI2RlZmluZSBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KKworI2luY2x1ZGUgImNvbW1vbi9w
bGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKKworIyAgICBp
bmNsdWRlICJjb21tb24vZGVidWcuaCIKKworIyAgICBpbXBvcnQgPGRpc3BhdGNoL2Rpc3BhdGNo
Lmg+CisjICAgIGltcG9ydCA8ZGxmY24uaD4KKyMgICAgaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4K
KworIyAgICBkZWZpbmUgUkVMRUFTRV9BU1NFUlQoZXhwcmVzc2lvbiwgbWVzc2FnZSkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGV4cHJl
c3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDx2b2lk
PigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgIDogKEZBVEFMKCkgPDwgIlx0ISBBc3NlcnQgZmFpbGVkIGlu
ICIgPDwgX19GVU5DVElPTl9fIDw8ICIgKCIgPDwgX19GSUxFX18gPDwgIjoiIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDw8IF9fTElORV9fIDw8ICIpOiAiIDw8ICNleHByZXNzaW9uIDw8ICJc
blx0ISBNZXNzYWdlOiAiIDw8IG1lc3NhZ2UpKQorCisjICAgIGlmZGVmIF9fY3BsdXNwbHVzCisj
ICAgICAgICBkZWZpbmUgRVhURVJOX0NfQkVHSU4gZXh0ZXJuICJDIiB7CisjICAgICAgICBkZWZp
bmUgRVhURVJOX0NfRU5EIH0KKyMgICAgZWxzZQorIyAgICAgICAgZGVmaW5lIEVYVEVSTl9DX0JF
R0lOCisjICAgICAgICBkZWZpbmUgRVhURVJOX0NfRU5ECisjICAgIGVuZGlmCisKKyMgICAgZGVm
aW5lIFNPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKGZyYW1ld29yaykgZXh0ZXJuIHZvaWQgKmZy
YW1ld29yayMjTGlicmFyeSgpOworCisjICAgIGRlZmluZSBTT0ZUX0xJTktfRlJBTUVXT1JLX1NP
VVJDRShmcmFtZXdvcmspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHZvaWQgKmZyYW1ld29yayMjTGlicmFyeSgpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2UgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGF0aWMgdm9pZCAqZnJhbWV3b3JrTGli
cmFyeSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgIGZyYW1ld29ya0xpYnJhcnkgPSBkbG9wZW4oICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAiL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvIiAjZnJhbWV3b3JrICIuZnJhbWV3b3JrLyIgI2ZyYW1ld29y
aywgUlRMRF9OT1cpOyBcCisgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1ld29ya0xp
YnJhcnksICJVbmFibGUgdG8gbG9hZCAiICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsiKTsgICAgICBc
CisgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBy
ZXR1cm4gZnJhbWV3b3JrTGlicmFyeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworIyAgICBkZWZpbmUgU09G
VF9MSU5LX0ZVTkNUSU9OX0hFQURFUihmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0VHlw
ZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtZXRlck5hbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgRVhURVJOX0NfQkVHSU4gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICByZXN1bHRUeXBlIGZ1bmN0aW9uTmFtZSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnM7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEVY
VEVSTl9DX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZXh0ZXJuIHJlc3VsdFR5
cGUgaW5pdCMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyRGVjbGFyYXRpb25zOyAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBleHRlcm4gcmVzdWx0VHlwZSgqc29mdExpbmsj
I2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnM7ICAgICAgICAg
ICAgICBcCisgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp
IHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyAgIFwKKyAgICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJu
IHNvZnRMaW5rIyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworIyAgICBkZWZpbmUgU09GVF9M
SU5LX0ZVTkNUSU9OX1NPVVJDRShmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0VHlwZSwg
cGFyYW1ldGVyRGVjbGFyYXRpb25zLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJOYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICByZXN1bHRUeXBlKCpzb2Z0TGluayMjZnJhbWV3b3JrIyNm
dW5jdGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9ucyA9ICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgaW5pdCMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWU7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBy
ZXN1bHRUeXBlIGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0
aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RhdGljIGRpc3BhdGNoX29uY2Vf
dCBvbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICBzb2Z0TGluayMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgPSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgKHJlc3VsdFR5cGUoKikgcGFyYW1ldGVyRGVjbGFyYXRpb25zKWRsc3ltKGZyYW1ld29y
ayMjTGlicmFyeSgpLCAjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICAgICAgfSk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNmcmFtZXdv
cmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICB9CisKKyMgICAgZGVmaW5lIFNPRlRfTElOS19DTEFTU19IRUFERVIo
Y2xhc3NOYW1lKSAgICBcCisgICAgICAgIEBjbGFzcyBjbGFzc05hbWU7ICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBleHRlcm4gQ2xhc3MgKCpnZXQjI2NsYXNzTmFtZSMjQ2xhc3Mp
KCk7IFwKKyAgICAgICAgY2xhc3NOYW1lICphbGxvYyMjY2xhc3NOYW1lIyNJbnN0YW5jZSgpOyBc
CisgICAgICAgIGlubGluZSBjbGFzc05hbWUgKmFsbG9jIyNjbGFzc05hbWUjI0luc3RhbmNlKCkg
eyByZXR1cm4gW2dldCMjY2xhc3NOYW1lIyNDbGFzcygpIGFsbG9jXTsgfQorCisjICAgIGRlZmlu
ZSBTT0ZUX0xJTktfQ0xBU1MoZnJhbWV3b3JrLCBjbGFzc05hbWUpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBAY2xhc3MgY2xhc3NOYW1lOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENsYXNzICgqZ2V0IyNj
bGFzc05hbWUjI0NsYXNzKSgpID0gaW5pdCMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBzdGF0aWMgQ2xhc3MgY2xhc3MjI2NsYXNzTmFtZTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyBDbGFzcyBjbGFzc05hbWUjI0Z1
bmN0aW9uKCkgeyByZXR1cm4gY2xhc3MjI2NsYXNzTmFtZTsgfSAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljIENsYXNzIGlu
aXQjI2NsYXNzTmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
c3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgIGZyYW1ld29yayMjTGlicmFyeSgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBjbGFzcyMjY2xh
c3NOYW1lID0gb2JqY19nZXRDbGFzcygjY2xhc3NOYW1lKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3MjI2NsYXNzTmFtZSwg
Im9iamNfZ2V0Q2xhc3MgZmFpbGVkIGZvciAiICNjbGFzc05hbWUpOyBcCisgICAgICAgICAgICAg
IGdldCMjY2xhc3NOYW1lIyNDbGFzcyA9IGNsYXNzTmFtZSMjRnVuY3Rpb247ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIHJldHVybiBjbGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHB1c2giKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9Q
cmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLWZ1bmN0aW9uXCIiKSBz
dGF0aWMgY2xhc3NOYW1lICBcCisgICAgICAgICAgICAgICAgKmFsbG9jIyNjbGFzc05hbWUjI0lu
c3RhbmNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBbZ2V0IyNj
bGFzc05hbWUjI0NsYXNzKCkgYWxsb2NdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfUHJhZ21h
KCJjbGFuZyBkaWFnbm9zdGljIHBvcCIpCisKKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9BUFBMRSkKKworI2VuZGlmICAvLyBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
Q0dMRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTVjMGY2YmFhNGY4
OGRjMWIxOTUzZTM3MzljZmRhN2RmYWMzYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMu
Y3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIENHTEZ1bmN0aW9ucy5jcHA6IEV4cG9zaW5nIHRoZSBzb2Z0
LWxpbmtlZCBDR0wgaW50ZXJmYWNlLgorCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wv
Y2dsL0NHTEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYg
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9N
QUNDQVRBTFlTVCkKKworU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoT3BlbkdMKQorCitTT0ZU
X0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0dMQ2hvb3NlUGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1
dGUgKmF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xQaXhlbEZvcm1hdE9i
aiAqcGl4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgKm5waXgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAoYXR0cmlicywgcGl4LCBucGl4KSkKK1NPRlRfTElOS19GVU5D
VElPTl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xDcmVhdGVD
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgKENHTFBpeGVsRm9ybWF0T2JqIHBpeCwgQ0dMQ29udGV4dE9iaiBzaGFy
ZSwgQ0dMQ29udGV4dE9iaiAqY3R4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHBpeCwg
c2hhcmUsIGN0eCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKAorICAgIE9wZW5HTCwKKyAg
ICBDR0xEZXNjcmliZVBpeGVsRm9ybWF0LAorICAgIENHTEVycm9yLAorICAgIChDR0xQaXhlbEZv
cm1hdE9iaiBwaXgsIEdMaW50IHBpeF9udW0sIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJp
YiwgR0xpbnQgKnZhbHVlKSwKKyAgICAocGl4LCBwaXhfbnVtLCBhdHRyaWIsIHZhbHVlKSkKK1NP
RlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xEZXN0cm95Q29udGV4dCwgQ0dMRXJy
b3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJD
RShPcGVuR0wsIENHTERlc3Ryb3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhlbEZvcm1h
dE9iaiBwaXgpLCAocGl4KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xF
cnJvclN0cmluZywgY29uc3QgY2hhciAqLCAoQ0dMRXJyb3IgZXJyb3IpLCAoZXJyb3IpKQorU09G
VF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTFJlbGVhc2VDb250ZXh0LCB2b2lkLCAo
Q0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3Bl
bkdMLCBDR0xTZXRDdXJyZW50Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCks
IChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIENHTFNldFZpcnR1YWxTY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMQ29udGV4dE9iaiBj
dHgsIEdMaW50IHNjcmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgsIHNjcmVl
bikpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKAorICAgIE9wZW5HTCwKKyAgICBDR0xUZXhJ
bWFnZUlPU3VyZmFjZTJELAorICAgIENHTEVycm9yLAorICAgIChDR0xDb250ZXh0T2JqIGN0eCwK
KyAgICAgR0xlbnVtIHRhcmdldCwKKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKyAgICAg
R0xzaXplaSB3aWR0aCwKKyAgICAgR0xzaXplaSBoZWlnaHQsCisgICAgIEdMZW51bSBmb3JtYXQs
CisgICAgIEdMZW51bSB0eXBlLAorICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlLAorICAgICBH
THVpbnQgcGxhbmUpLAorICAgIChjdHgsIHRhcmdldCwgaW50ZXJuYWxfZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGlvU3VyZmFjZSwgcGxhbmUpKQorU09GVF9MSU5LX0ZVTkNU
SU9OX1NPVVJDRShPcGVuR0wsIENHTFVwZGF0ZUNvbnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4
dE9iaiBjdHgpLCAoY3R4KSkKKworU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRSgKKyAgICBPcGVu
R0wsCisgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKyAgICBDR0xFcnJvciwKKyAgICAoQ0dMUmVu
ZGVyZXJJbmZvT2JqIHJlbmQsIEdMaW50IHJlbmRfbnVtLCBDR0xSZW5kZXJlclByb3BlcnR5IHBy
b3AsIEdMaW50ICp2YWx1ZSksCisgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1ZSkpCitT
T0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dM
RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVu
ZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW5kKSkKK1NPRlRfTElOS19GVU5DVElP
Tl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xRdWVyeVJlbmRl
cmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIChHTHVpbnQgZGlzcGxheV9tYXNrLCBDR0xSZW5kZXJlckluZm9PYmog
KnJlbmQsIEdMaW50ICpucmVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXNwbGF5
X21hc2ssIHJlbmQsIG5yZW5kKSkKKworI2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9D
R0xGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZiODcxZTRiZWM4YWJjMGUy
NzJlMjNjNGE2ZTU1NGRlZDVjMGIyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmgKQEAg
LTAsMCArMSw4NCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gQ0dMRnVuY3Rpb25zLmg6IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBD
R0wgaW50ZXJmYWNlLgorCisjaWZuZGVmIENHTF9GVU5DVElPTlNfSF8KKyNkZWZpbmUgQ0dMX0ZV
TkNUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3JtLmgiCisKKyNpZiBkZWZpbmVk
KEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFM
WVNUKQorCisjICAgIGluY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KKworIyAgICBpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oIgorCitTT0ZUX0xJTktfRlJB
TUVXT1JLX0hFQURFUihPcGVuR0wpCisKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdM
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb25zdCBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSAqYXR0cmlicywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENHTFBpeGVsRm9ybWF0T2JqICpwaXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCAqbnBpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJz
LCBwaXgsIG5waXgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIENHTENyZWF0ZUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMUGl4ZWxGb3Jt
YXRPYmogcGl4LCBDR0xDb250ZXh0T2JqIHNoYXJlLCBDR0xDb250ZXh0T2JqICpjdHgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAocGl4LCBzaGFyZSwgY3R4KSkKK1NPRlRfTElOS19GVU5D
VElPTl9IRUFERVIoCisgICAgT3BlbkdMLAorICAgIENHTERlc2NyaWJlUGl4ZWxGb3JtYXQsCisg
ICAgQ0dMRXJyb3IsCisgICAgKENHTFBpeGVsRm9ybWF0T2JqIHBpeCwgR0xpbnQgcGl4X251bSwg
Q0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0cmliLCBHTGludCAqdmFsdWUpLAorICAgIChwaXgs
IHBpeF9udW0sIGF0dHJpYiwgdmFsdWUpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUigKKyAg
ICBPcGVuR0wsCisgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKyAgICBDR0xFcnJvciwKKyAgICAo
Q0dMUmVuZGVyZXJJbmZvT2JqIHJlbmQsIEdMaW50IHJlbmRfbnVtLCBDR0xSZW5kZXJlclByb3Bl
cnR5IHByb3AsIEdMaW50ICp2YWx1ZSksCisgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1
ZSkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwgQ0dMRGVzdHJveUNvbnRleHQs
IENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19GVU5DVElP
Tl9IRUFERVIoT3BlbkdMLCBDR0xEZXN0cm95UGl4ZWxGb3JtYXQsIENHTEVycm9yLCAoQ0dMUGl4
ZWxGb3JtYXRPYmogcGl4KSwgKHBpeCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5H
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
IChyZW5kKSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xFcnJvclN0cmlu
ZywgY29uc3QgY2hhciAqLCAoQ0dMRXJyb3IgZXJyb3IpLCAoZXJyb3IpKQorU09GVF9MSU5LX0ZV
TkNUSU9OX0hFQURFUihPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTFF1ZXJ5
UmVuZGVyZXJJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgKEdMdWludCBkaXNwbGF5X21hc2ssIENHTFJlbmRlcmVySW5m
b09iaiAqcmVuZCwgR0xpbnQgKm5yZW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRp
c3BsYXlfbWFzaywgcmVuZCwgbnJlbmQpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVu
R0wsIENHTFJlbGVhc2VDb250ZXh0LCB2b2lkLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkK
K1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xTZXRDdXJyZW50Q29udGV4dCwg
Q0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9O
X0hFQURFUihPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTFNldFZpcnR1YWxT
Y3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAoQ0dMQ29udGV4dE9iaiBjdHgsIEdMaW50IHNjcmVlbiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjdHgsIHNjcmVlbikpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVB
REVSKAorICAgIE9wZW5HTCwKKyAgICBDR0xUZXhJbWFnZUlPU3VyZmFjZTJELAorICAgIENHTEVy
cm9yLAorICAgIChDR0xDb250ZXh0T2JqIGN0eCwKKyAgICAgR0xlbnVtIHRhcmdldCwKKyAgICAg
R0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKyAgICAgR0xzaXplaSB3aWR0aCwKKyAgICAgR0xzaXpl
aSBoZWlnaHQsCisgICAgIEdMZW51bSBmb3JtYXQsCisgICAgIEdMZW51bSB0eXBlLAorICAgICBJ
T1N1cmZhY2VSZWYgaW9TdXJmYWNlLAorICAgICBHTHVpbnQgcGxhbmUpLAorICAgIChjdHgsIHRh
cmdldCwgaW50ZXJuYWxfZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGlvU3Vy
ZmFjZSwgcGxhbmUpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTFVwZGF0
ZUNvbnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKKworI2VuZGlm
ICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX01BQ0NBVEFMWVNUKQorCisjZW5kaWYgIC8vIENHTF9GVU5DVElPTlNfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
RGlzcGxheUNHTC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbC9jZ2wvRGlzcGxheUNHTC5tbQppbmRleCBiNWE2MzFhZTQzMjFmMWFkOWI0ODU2NmZh
YTA5ZGZmZmEzOTQ2MzkxLi45MGU4MDU4ZjU4NWZhYjcxZDY1ZTI0MTk1MjA2Mjg0Zjg0NDU1YjNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvY2dsL0Rpc3BsYXlDR0wubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tCkBAIC0yOSw2ICsyOSw4IEBA
CiAjICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9XaW5kb3dTdXJmYWNlQ0dM
LmgiCiAjICAgIGluY2x1ZGUgInBsYXRmb3JtL1BsYXRmb3JtTWV0aG9kcy5oIgogCisjICAgIGlu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuaCIKKwogbmFtZXNw
YWNlCiB7CiAKQEAgLTE2Myw5ICsxNjUsMTAgQEAgZWdsOjpFcnJvciBEaXNwbGF5Q0dMOjppbml0
aWFsaXplKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICBtRUdMRGlzcGxheSA9IGRpc3BsYXk7
CiAKICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotICAgIC8vIEl0J3MgbGVnYWwgZm9yIEdl
dFN5c3RlbUluZm8gdG8gcmV0dXJuIGZhbHNlIGFuZCB0aGVyZWJ5Ci0gICAgLy8gY29udGFpbiBp
bmNvbXBsZXRlIGluZm9ybWF0aW9uLgotICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZp
bmZvKTsKKyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBB
TkdMRSdzIFN5c3RlbUluZm8uIjsKKyAgICB9CiAKICAgICAvLyBUaGlzIGNvZGUgaW1wbGVtZW50
cyB0aGUgZWZmZWN0IG9mIHRoZQogICAgIC8vIGRpc2FibGVHUFVTd2l0Y2hpbmdTdXBwb3J0IHdv
cmthcm91bmQgaW4gRmVhdHVyZXNHTC4KQEAgLTQ0MCw3ICs0NDMsNyBAQCBlZ2w6OkVycm9yIERp
c3BsYXlDR0w6OnJlc3RvcmVMb3N0RGV2aWNlKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkK
IAogYm9vbCBEaXNwbGF5Q0dMOjppc1ZhbGlkTmF0aXZlV2luZG93KEVHTE5hdGl2ZVdpbmRvd1R5
cGUgd2luZG93KSBjb25zdAogewotICAgIE5TT2JqZWN0ICpsYXllciA9IChfX2JyaWRnZSBOU09i
amVjdCAqKXdpbmRvdzsKKyAgICBOU09iamVjdCAqbGF5ZXIgPSByZWludGVycHJldF9jYXN0PE5T
T2JqZWN0ICo+KHdpbmRvdyk7CiAgICAgcmV0dXJuIFtsYXllciBpc0tpbmRPZkNsYXNzOltDQUxh
eWVyIGNsYXNzXV07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wubW0K
aW5kZXggYTc5NTAzN2QxNDc5YTNjZjFkYmNjMjE5ZjQ5MzZkMmI1MDc3ZTcwNi4uYzU1YWU3ZmJm
M2FiNzY5MTU5ZGNlYWU2MWY4MDEzMzcyYjFkZTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVBR0wubW0K
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2Vh
Z2wvRGlzcGxheUVBR0wubW0KQEAgLTI3LDYgKzI3LDggQEAKICMgICAgaW1wb3J0IDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmUuaD4KICMgICAgaW1wb3J0IDxkbGZjbi5oPgogCisjICAgIGltcG9ydCAi
bGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLmgiCisKIG5hbWVzcGFjZQog
ewogCkBAIC02NCw5ICs2NiwxMCBAQCBlZ2w6OkVycm9yIERpc3BsYXlFQUdMOjppbml0aWFsaXpl
KGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICBtRUdMRGlzcGxheSA9IGRpc3BsYXk7CiAKICAg
ICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotICAgIC8vIEl0J3MgbGVnYWwgZm9yIEdldFN5c3Rl
bUluZm8gdG8gcmV0dXJuIGZhbHNlIGFuZCB0aGVyZWJ5Ci0gICAgLy8gY29udGFpbiBpbmNvbXBs
ZXRlIGluZm9ybWF0aW9uLgotICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKTsK
KyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBBTkdMRSdz
IFN5c3RlbUluZm8uIjsKKyAgICB9CiAKICAgICBtQ29udGV4dCA9IFthbGxvY0VBR0xDb250ZXh0
SW5zdGFuY2UoKSBpbml0V2l0aEFQSTprRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTM107CiAgICAg
aWYgKG1Db250ZXh0ID09IG51bGxwdHIpCkBAIC0xMTMsNiArMTE2LDcgQEAgdm9pZCBEaXNwbGF5
RUFHTDo6dGVybWluYXRlKCkKICAgICBpZiAobUNvbnRleHQgIT0gbnVsbHB0cikKICAgICB7CiAg
ICAgICAgIFtnZXRFQUdMQ29udGV4dENsYXNzKCkgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKKyAg
ICAgICAgW21Db250ZXh0IHJlbGVhc2VdOwogICAgICAgICBtQ29udGV4dCA9IG51bGxwdHI7CiAg
ICAgICAgIG1UaHJlYWRzV2l0aENvbnRleHRDdXJyZW50LmNsZWFyKCk7CiAgICAgfQpAQCAtMjc1
LDcgKzI3OSw3IEBAIGVnbDo6RXJyb3IgRGlzcGxheUVBR0w6OnJlc3RvcmVMb3N0RGV2aWNlKGNv
bnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkKIAogYm9vbCBEaXNwbGF5RUFHTDo6aXNWYWxpZE5h
dGl2ZVdpbmRvdyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRvdykgY29uc3QKIHsKLSAgICBOU09i
amVjdCAqbGF5ZXIgPSAoX19icmlkZ2UgTlNPYmplY3QgKil3aW5kb3c7CisgICAgTlNPYmplY3Qg
KmxheWVyID0gcmVpbnRlcnByZXRfY2FzdDxOU09iamVjdCAqPih3aW5kb3cpOwogICAgIHJldHVy
biBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOwogfQogCkBAIC0zMTEsOSAr
MzE1LDggQEAgdm9pZCBEaXNwbGF5RUFHTDo6Z2VuZXJhdGVFeHRlbnNpb25zKGVnbDo6RGlzcGxh
eUV4dGVuc2lvbnMgKm91dEV4dGVuc2lvbnMpIGNvbnMKICAgICBvdXRFeHRlbnNpb25zLT5zdXJm
YWNlbGVzc0NvbnRleHQgICAgPSB0cnVlOwogICAgIG91dEV4dGVuc2lvbnMtPmRldmljZVF1ZXJ5
ICAgICAgICAgICA9IHRydWU7CiAKLSAgICAvLyBDb250ZXh0cyBhcmUgdmlydHVhbGl6ZWQgc28g
dGV4dHVyZXMgYW5zIHNlbWFwaG9yZXMgY2FuIGJlIHNoYXJlZCBnbG9iYWxseQotICAgIG91dEV4
dGVuc2lvbnMtPmRpc3BsYXlUZXh0dXJlU2hhcmVHcm91cCAgID0gdHJ1ZTsKLSAgICBvdXRFeHRl
bnNpb25zLT5kaXNwbGF5U2VtYXBob3JlU2hhcmVHcm91cCA9IHRydWU7CisgICAgLy8gQ29udGV4
dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGNhbiBiZSBzaGFyZWQgZ2xvYmFsbHkKKyAg
ICBvdXRFeHRlbnNpb25zLT5kaXNwbGF5VGV4dHVyZVNoYXJlR3JvdXAgPSB0cnVlOwogCiAgICAg
b3V0RXh0ZW5zaW9ucy0+cG93ZXJQcmVmZXJlbmNlID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xG
dW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjEyNTEzMzhlZWU2OGY3MDM0
ZGM4YzY3NWFlZWZmZmNhNDE5NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0aW9ucy5oCkBA
IC0wLDAgKzEsMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIEVBR0xGdW5jdGlvbnMuaDogRXhwb3NpbmcgdGhlIHNvZnQtbGlua2Vk
IEVBR0wgaW50ZXJmYWNlLgorCisjaWZuZGVmIEVBR0xfRlVOQ1RJT05TX0hfCisjZGVmaW5lIEVB
R0xfRlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlICJjb21tb24vcGxhdGZvcm0uaCIKKworI2lmIChk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFD
Q0FUQUxZU1QpKSB8fCBcCisgICAgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1Qp
ICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKKworIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VB
R0wuaD4KKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKyMgICAgaW1wb3J0
IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisKKyMgICAgaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaCIKKworU09GVF9MSU5LX0ZSQU1FV09SS19IRUFE
RVIoT3BlbkdMRVMpCisKK1NPRlRfTElOS19DTEFTU19IRUFERVIoRUFHTENvbnRleHQpCisKKyNl
bmRpZiAgLy8gKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9NQUNDQVRBTFlTVCkpIHx8CisgICAgICAgIC8vIChkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCisKKyNlbmRpZiAg
Ly8gQ0dMX0ZVTkNUSU9OU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0aW9ucy5tbSBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlv
bnMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGIxZWI3MGM3NWY0ODc5ZDhjZDE4Yzg4NmRmNjllZjM5YTIzMTg4
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMubW0KQEAgLTAsMCArMSwyNSBAQAorLy8K
Ky8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRUFH
TEZ1bmN0aW9ucy5jcHA6IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBFQUdMIGludGVyZmFjZS4K
KworI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgKGRlZmluZWQoQU5HTEVfUExB
VEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8IFwK
KyAgICAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgJiYgZGVmaW5lZChBTkdM
RV9DUFVfQVJNNjQpKQorCisjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorIyAgICBpbXBv
cnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgorIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xJ
T1N1cmZhY2UuaD4KKworIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlu
a2luZ19hcHBsZS5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX1NPVVJDRShPcGVuR0xFUykKKwor
U09GVF9MSU5LX0NMQVNTKE9wZW5HTEVTLCBFQUdMQ29udGV4dCkKKworI2VuZGlmICAvLyAoZGVm
aW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NB
VEFMWVNUKSkgfHwKKyAgICAgICAgLy8gKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZ
U1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdM
Lm1tCmluZGV4IDQ1ZTZkMGY5OWJkNTVkMzU2MDNjNzc3NDRhNDk2ZGQ4NDZhY2VlYjkuLmUzMDlh
ODY2MjY0MGFiNTNlYTg4OGJmNDAyZTlkM2QwNzU4YmU0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1
cmZhY2VFQUdMLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCkBAIC04Myw4ICs4Myw4IEBA
IElPU3VyZmFjZVN1cmZhY2VFQUdMOjpJT1N1cmZhY2VTdXJmYWNlRUFHTChjb25zdCBlZ2w6OlN1
cmZhY2VTdGF0ZSAmc3RhdGUsCiAgICAgICBtV2lkdGgoMCksCiAgICAgICBtSGVpZ2h0KDApLAog
ICAgICAgbVBsYW5lKDApLAotICAgICAgbVJvd1N0cmlkZUluUGl4ZWxzKDApLAogICAgICAgbUZv
cm1hdEluZGV4KC0xKSwKKyAgICAgIG1Sb3dTdHJpZGVJblBpeGVscygwKSwKICAgICAgIG1BbHBo
YUluaXRpYWxpemVkKGZhbHNlKQogewogICAgIC8vIEtlZXAgcmVmZXJlbmNlIHRvIHRoZSBJT1N1
cmZhY2Ugc28gaXQgZG9lc24ndCBnZXQgZGVsZXRlZCB3aGlsZSB0aGUgcGJ1ZmZlciBleGlzdHMu
CkBAIC0yMDYsOSArMjA2LDcgQEAgZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlRUFHTDo6Ymlu
ZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAvLyBUT0RPKGti
cik6IHBvc3NpYmx5IG1vcmUgc3RhdGUgdG8gYmUgc2V0IGhlcmUsIGluY2x1ZGluZyBzZXR0aW5n
IGFueQogICAgICAgICAvLyBwaXhlbCB1bnBhY2sgYnVmZmVyIHRvIDAgd2hlbiB1c2luZyBFUyAz
LjAgY29udGV4dHMuCiAgICAgICAgIGdsOjpQaXhlbFVucGFja1N0YXRlIGRlZmF1bHRVbnBhY2tT
dGF0ZTsKLSAgICAgICAgaWYgKElzRXJyb3Ioc3RhdGVNYW5hZ2VyLT5zZXRQaXhlbFVucGFja1N0
YXRlKGNvbnRleHQsIGRlZmF1bHRVbnBhY2tTdGF0ZSkpKSB7Ci0gICAgICAgICAgICByZXR1cm4g
ZWdsOjpFZ2xCYWRTdGF0ZSgpIDw8ICJGYWlsZWQgdG8gc2V0IHBpeGVsIHVucGFjayBzdGF0ZS4i
OwotICAgICAgICB9CisgICAgICAgIHN0YXRlTWFuYWdlci0+c2V0UGl4ZWxVbnBhY2tTdGF0ZShk
ZWZhdWx0VW5wYWNrU3RhdGUpOwogICAgICAgICB0ZXh0dXJlRGF0YSA9IElPU3VyZmFjZUdldEJh
c2VBZGRyZXNzKG1JT1N1cmZhY2UpOwogICAgIH0KIApAQCAtMjQwLDkgKzIzOCw3IEBAIGVnbDo6
RXJyb3IgSU9TdXJmYWNlU3VyZmFjZUVBR0w6OnJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwgRUdMCiAgICAgICAgIGdsOjpQaXhlbFBhY2tTdGF0ZSBzdGF0ZTsKICAg
ICAgICAgc3RhdGUucm93TGVuZ3RoID0gbVJvd1N0cmlkZUluUGl4ZWxzOwogICAgICAgICBzdGF0
ZS5hbGlnbm1lbnQgPSAxOwotICAgICAgICBpZiAoSXNFcnJvcihzdGF0ZU1hbmFnZXItPnNldFBp
eGVsUGFja1N0YXRlKGNvbnRleHQsIHN0YXRlKSkpIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6
OkVnbEJhZFN0YXRlKCkgPDwgIkZhaWxlZCB0byBzZXQgcGl4ZWwgdW5wYWNrIHN0YXRlLiI7Ci0g
ICAgICAgIH0KKyAgICAgICAgc3RhdGVNYW5hZ2VyLT5zZXRQaXhlbFBhY2tTdGF0ZShzdGF0ZSk7
CiAgICAgICAgIC8vIFRPRE8oa2JyKTogcG9zc2libHkgbW9yZSBzdGF0ZSB0byBiZSBzZXQgaGVy
ZSwgaW5jbHVkaW5nIHNldHRpbmcgYW55CiAgICAgICAgIC8vIHBpeGVsIHBhY2sgYnVmZmVyIHRv
IDAgd2hlbiB1c2luZyBFUyAzLjAgY29udGV4dHMuCiAgICAgICAgIGNvbnN0IGF1dG8gJmZvcm1h
dCA9IGtJT1N1cmZhY2VGb3JtYXRzW21Gb3JtYXRJbmRleF07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0
aWxzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCmluZGV4IGQ3MGFlNThhMGJmNDlmNjJkZjkyZTg1MjY5
ODc3YjMwMTEyZDNmODIuLjYxNWRkNDRkMTRlOGRiNzAyNmNiOGQ5MThmNWVjZmY5OGE4YmExYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCkBAIC0yODEs
MTAgKzI4MSwxMiBAQCBzdGQ6OnN0cmluZyBTdWJzdGl0dXRlVHJhbnNmb3JtRmVlZGJhY2tNYXJr
ZXJzKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbFNvdXJjZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmeGZiT3V0KQog
ewogICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyU3RhcnQgPSBvcmlnaW5hbFNvdXJjZS5m
aW5kKGtYZmJEZWNsTWFya2VyKTsKLSAgICBjb25zdCBzaXplX3QgeGZiRGVjbE1hcmtlckVuZCAg
ID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYkRlY2xNYXJrZXIpOworICAg
IEFTU0VSVCh4ZmJEZWNsTWFya2VyU3RhcnQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpOworICAgIGNv
bnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyRW5kID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29uc3RT
dHJMZW4oa1hmYkRlY2xNYXJrZXIpOwogCiAgICAgY29uc3Qgc2l6ZV90IHhmYk91dE1hcmtlclN0
YXJ0ID0gb3JpZ2luYWxTb3VyY2UuZmluZChrWGZiT3V0TWFya2VyLCB4ZmJEZWNsTWFya2VyU3Rh
cnQpOwotICAgIGNvbnN0IHNpemVfdCB4ZmJPdXRNYXJrZXJFbmQgICA9IHhmYk91dE1hcmtlclN0
YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYk91dE1hcmtlcik7CisgICAgQVNTRVJUKHhmYk91dE1hcmtl
clN0YXJ0ICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKKyAgICBjb25zdCBzaXplX3QgeGZiT3V0TWFy
a2VyRW5kID0geGZiT3V0TWFya2VyU3RhcnQgKyBDb25zdFN0ckxlbihrWGZiT3V0TWFya2VyKTsK
IAogICAgIC8vIFRoZSBzaGFkZXIgaXMgdGhlIGZvbGxvd2luZyBmb3JtOgogICAgIC8vCkBAIC0z
NjIsNyArMzY0LDggQEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0
cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJv
Z3JhbVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHbHNsYW5nUHJvZ3JhbUludGVyZmFjZUluZm8gKnByb2dyYW1JbnRlcmZhY2VJbmZvLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyAq
dmVydGV4U2hhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTaGFkZXJJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVySW50
ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZWFybHlSZXR1cm4pCiB7CiAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gJnZhcnlp
bmdzID0KICAgICAgICAgcHJvZ3JhbVN0YXRlLmdldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ3MoKTsKQEAgLTQxMyw2ICs0MTYsMTAgQEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRi
YWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KICAg
ICAgICAgICAgIG91dHB1dE9mZnNldCArPSBpbmZvLmNvbHVtbkNvdW50ICogaW5mby5yb3dDb3Vu
dCAqIHZhcnlpbmcuc2l6ZSgpOwogICAgICAgICB9CiAgICAgfQorICAgIGlmIChlYXJseVJldHVy
bikKKyAgICB7CisgICAgICAgIHhmYk91dCArPSAicmV0dXJuOyI7CisgICAgfQogICAgIHhmYk91
dCArPSAifVxuIjsKIAogICAgICp2ZXJ0ZXhTaGFkZXIgPSBTdWJzdGl0dXRlVHJhbnNmb3JtRmVl
ZGJhY2tNYXJrZXJzKCp2ZXJ0ZXhTaGFkZXIsIHhmYkRlY2wsIHhmYk91dCk7CkBAIC0zMzY4LDEx
ICszMzc1LDYgQEAgc3RkOjpzdHJpbmcgR2xzbGFuZ0dldE1hcHBlZFNhbXBsZXJOYW1lKGNvbnN0
IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUpCiAgICAgcmV0dXJuIHNhbXBsZXJOYW1lOwogfQog
Ci1zdGQ6OnN0cmluZyBHZXRYZmJCdWZmZXJOYW1lKGNvbnN0IHVpbnQzMl90IGJ1ZmZlckluZGV4
KQotewotICAgIHJldHVybiAieGZiQnVmZmVyIiArIFN0cihidWZmZXJJbmRleCk7Ci19Ci0KIHZv
aWQgR2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNs
YW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xzbGFu
Z1Byb2dyYW1JbnRlcmZhY2VJbmZvICpwcm9ncmFtSW50ZXJmYWNlSW5mbywKQEAgLTMzODAsNyAr
MzM4Miw3IEBAIHZvaWQgR2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0
cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFw
ICp2YXJpYWJsZUluZm9NYXBPdXQpCiB7CiAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0Vt
dWxhdGlvbk91dHB1dHMob3B0aW9ucywgcHJvZ3JhbVN0YXRlLCBwcm9ncmFtSW50ZXJmYWNlSW5m
bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhT
aGFkZXIsIHZhcmlhYmxlSW5mb01hcE91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyLCB2YXJpYWJsZUluZm9NYXBPdXQsIGZhbHNl
KTsKIH0KIAogdm9pZCBHbHNsYW5nQXNzaWduTG9jYXRpb25zKGNvbnN0IEdsc2xhbmdTb3VyY2VP
cHRpb25zICZvcHRpb25zLApAQCAtMzQyOCw2ICszNDMwLDU3IEBAIHZvaWQgR2xzbGFuZ0Fzc2ln
bkxvY2F0aW9ucyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0KTsKIH0KIAorc3RkOjpzdHJp
bmcgR2V0WGZiQnVmZmVyTmFtZShjb25zdCB1aW50MzJfdCBidWZmZXJJbmRleCkKK3sKKyAgICBy
ZXR1cm4gInhmYkJ1ZmZlciIgKyBTdHIoYnVmZmVySW5kZXgpOworfQorCisKK3ZvaWQgR2xzbGFu
Z0Fzc2lnbkxvY2F0aW9ucyhHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgJnByb2dyYW1F
eGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJU
eXBlIHNoYWRlclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xzbGFuZ1Byb2dy
YW1JbnRlcmZhY2VJbmZvICpwcm9ncmFtSW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5m
b01hcE91dCkKK3sKKyAgICAvLyBBc3NpZ24gb3V0cHV0cyB0byB0aGUgZnJhZ21lbnQgc2hhZGVy
LCBpZiBhbnkuCisgICAgaWYgKChzaGFkZXJUeXBlID09IGdsOjpTaGFkZXJUeXBlOjpGcmFnbWVu
dCkgJiYKKyAgICAgICAgcHJvZ3JhbUV4ZWN1dGFibGUuaGFzTGlua2VkU2hhZGVyU3RhZ2UoZ2w6
OlNoYWRlclR5cGU6OkZyYWdtZW50KSkKKyAgICB7CisgICAgICAgIEFzc2lnbk91dHB1dExvY2F0
aW9ucyhwcm9ncmFtRXhlY3V0YWJsZSwgZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVy
VHlwZTo6RnJhZ21lbnRdKTsKKyAgICB9CisKKyAgICAvLyBBc3NpZ24gYXR0cmlidXRlcyB0byB0
aGUgdmVydGV4IHNoYWRlciwgaWYgYW55LgorICAgIGlmICgoc2hhZGVyVHlwZSA9PSBnbDo6U2hh
ZGVyVHlwZTo6VmVydGV4KSAmJgorICAgICAgICBwcm9ncmFtRXhlY3V0YWJsZS5oYXNMaW5rZWRT
aGFkZXJTdGFnZShnbDo6U2hhZGVyVHlwZTo6VmVydGV4KSkKKyAgICB7CisgICAgICAgIEFzc2ln
bkF0dHJpYnV0ZUxvY2F0aW9ucyhwcm9ncmFtRXhlY3V0YWJsZSwgZ2w6OlNoYWRlclR5cGU6OlZl
cnRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKnZhcmlhYmxlSW5mb01h
cE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0pOworICAgIH0KKworICAgIGlmICghcHJvZ3Jh
bUV4ZWN1dGFibGUuaGFzTGlua2VkU2hhZGVyU3RhZ2UoZ2w6OlNoYWRlclR5cGU6OkNvbXB1dGUp
KQorICAgIHsKKyAgICAgICAgLy8gQXNzaWduIHZhcnlpbmcgbG9jYXRpb25zLgorICAgICAgICBB
c3NpZ25WYXJ5aW5nTG9jYXRpb25zKG9wdGlvbnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFkZXJU
eXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZUluZm9NYXBPdXQpOworCisgICAgICAgIGlmICghcHJvZ3JhbUV4ZWN1dGFibGUu
Z2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpLmVtcHR5KCkgJiYKKyAgICAgICAg
ICAgIG9wdGlvbnMuc3VwcG9ydHNUcmFuc2Zvcm1GZWVkYmFja0V4dGVuc2lvbiAmJiAoc2hhZGVy
VHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVydGV4KSkKKyAgICAgICAgeworICAgICAgICAgICAg
QXNzaWduVHJhbnNmb3JtRmVlZGJhY2tFeHRlbnNpb25RdWFsaWZpZXJzKAorICAgICAgICAgICAg
ICAgIHByb2dyYW1FeGVjdXRhYmxlLCBwcm9ncmFtSW50ZXJmYWNlSW5mby0+bG9jYXRpb25zVXNl
ZEZvclhmYkV4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVydGV4
LCAmKCp2YXJpYWJsZUluZm9NYXBPdXQpW2dsOjpTaGFkZXJUeXBlOjpWZXJ0ZXhdKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEFzc2lnblVuaWZvcm1CaW5kaW5ncyhvcHRpb25zLCBwcm9ncmFt
RXhlY3V0YWJsZSwgc2hhZGVyVHlwZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5mb01hcE91dCk7CisgICAgQXNzaWduVGV4dHVyZUJp
bmRpbmdzKG9wdGlvbnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFkZXJUeXBlLCBwcm9ncmFtSW50
ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0
KTsKKyAgICBBc3NpZ25Ob25UZXh0dXJlQmluZGluZ3Mob3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFi
bGUsIHNoYWRlclR5cGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworfQorCiB2b2lkIEdsc2xhbmdHZXRTaGFk
ZXJTb3VyY2UoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3Vy
Y2VzICZyZXNvdXJjZXMsCkBAIC0zNDYyLDcgKzM1MTUsOCBAQCB2b2lkIEdsc2xhbmdHZXRTaGFk
ZXJTb3VyY2UoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91
dHB1dHMoCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIHByb2dyYW1TdGF0ZSwgcHJvZ3Jh
bUludGVyZmFjZUluZm8sIHZlcnRleFNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgJigqdmFy
aWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CisgICAgICAgICAgICAg
ICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0sCisg
ICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHJhbnNmb3JtRmVlZGJhY2tFYXJseVJldHVybik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFu
Z193cmFwcGVyX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgKaW5kZXggMmJkMmM2MWE4NzE4NWY0MTYw
YjQwZmUyNjRhMzg4YTIxYzU4ZTJkZC4uNjAyNDhjZGJhZDc2NTk2MDE4OTA4ZmQxMzcyMDkwNzA1
YTE5NWE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaApAQCAt
NTEsNiArNTEsNyBAQCBzdHJ1Y3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMKICAgICBib29sIHN1cHBv
cnRzVHJhbnNmb3JtRmVlZGJhY2tFeHRlbnNpb24gPSBmYWxzZTsKICAgICBib29sIGVtdWxhdGVU
cmFuc2Zvcm1GZWVkYmFjayAgICAgICAgICAgPSBmYWxzZTsKICAgICBib29sIGVtdWxhdGVCcmVz
ZW5oYW1MaW5lcyAgICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBib29sIHRyYW5zZm9ybUZlZWRi
YWNrRWFybHlSZXR1cm4gICAgICAgPSBmYWxzZTsKIH07CiAKIHVzaW5nIFNwaXJ2QmxvYiA9IHN0
ZDo6dmVjdG9yPHVpbnQzMl90PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19kYXRhLmpzb24gYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0
YS5qc29uCmluZGV4IDhjM2ZkMDU1ZDJkM2NiYzQ4OTc4MjJjZDRmM2JkMjQ1OTFhODdhZGMuLjdi
Y2RlZDA3ZDRjMjRmZjdkNWM4NjhjMDQ1ZDMwYjNkNDFiOTJiZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19k
YXRhLmpzb24KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2xvYWRfZnVuY3Rpb25zX2RhdGEuanNvbgpAQCAtNjcyLDYgKzY3Miw5IEBACiAgICAgIkQz
Ml9GTE9BVF9TOFgyNF9VSU5UIjogewogICAgICAgIkdMX1VOU0lHTkVEX0lOVF8yNF84IjogIkxv
YWREMjRTOFRvRDMyRlM4WDI0IiwKICAgICAgICJHTF9VTlNJR05FRF9JTlQiOiAiTG9hZEQzMlRv
RDMyRlgzMiIKKyAgICB9LAorICAgICJEMzJfRkxPQVQiOiB7CisgICAgICAiR0xfVU5TSUdORURf
SU5UIjogIkxvYWREMjRTOFRvRDMyRiIKICAgICB9CiAgIH0sCiAgICJHTF9SMzJJIjogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xv
YWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwCmlu
ZGV4IDIwZTcwNmY3YzliYzgzNzlhMzIwNjRjMGFmNTkzYTE5MGNkOWRlNGQuLjJlZjAxY2EzY2Zl
OTA1NzhjODMwNWRiYTA0MzkxNGFmNzZjMDQ4OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRv
Z2VuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbG9hZF9mdW5jdGlvbnNfdGFibGVfYXV0b2dlbi5jcHAKQEAgLTQ0Niw4ICs0NDYsNyBAQCBM
b2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9SR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FO
R0xFX3RvX0JDMV9SR0JfVU5PUk1fQgogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZv
IENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRDMl9SOEc4QjhB
MV9VTk9STV9CTE9DSygKLSAgICBHTGVudW0gdHlwZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBD
T01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFf
VU5PUk1fQkxPQ0soR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKQEAg
LTQ3MSw4ICs0NzAsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9SR0I4X1BV
TkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9STQogICAgIH0KIH0KIAotTG9h
ZEltYWdlRnVuY3Rpb25JbmZvCi1DT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9M
T1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlw
ZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FM
UEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9CTE9DSyhHTGVu
dW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewpAQCAtMTMxMiw4ICsxMzEwLDcg
QEAgTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfRVRDMl90b19SOEc4QjhB
OF9VTk9STV9TUkdCKEdMZW51bSB0eXBlKQogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9V
Tk9STV9TUkdCX0JMT0NLKAotICAgIEdMZW51bSB0eXBlKQorTG9hZEltYWdlRnVuY3Rpb25JbmZv
IENPTVBSRVNTRURfU1JHQjhfTE9TU1lfREVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9S
TV9TUkdCX0JMT0NLKEdMZW51bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBA
IC0xMzI1LDggKzEzMjIsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdC
OF9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCX1VOT1JNXwogICAgIH0KIH0KIAot
TG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhB
MV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSygKLSAgICBHTGVudW0gdHlwZSkKK0xv
YWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFf
RVRDMl90b19FVEMyX1I4RzhCOEExX1NSR0JfQkxPQ0soR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dp
dGNoICh0eXBlKQogICAgIHsKQEAgLTEzNTAsOSArMTM0Niw3IEBAIExvYWRJbWFnZUZ1bmN0aW9u
SW5mbyBDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhB
OF9VTk9SCiAgICAgfQogfQogCi1Mb2FkSW1hZ2VGdW5jdGlvbkluZm8KLUNPTVBSRVNTRURfU1JH
QjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdC
QV9VTk9STV9TUkdCX0JMT0NLKAotICAgIEdMZW51bSB0eXBlKQorTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRD
Ml9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9TUkdCX0JMT0NLKEdMZW51bSB0eXBlKQogewogICAg
IHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC0xNTEwLDYgKzE1MDQsMTggQEAgTG9hZEltYWdlRnVu
Y3Rpb25JbmZvIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QyNF9VTk9STV9YOF9VSU5UKEdMZW51bSB0
eXBlKQogICAgIH0KIH0KIAorTG9hZEltYWdlRnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVOVDI0
X3RvX0QzMl9GTE9BVChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgIHJldHVybiBMb2FkSW1h
Z2VGdW5jdGlvbkluZm8oTG9hZEQyNFM4VG9EMzJGLCB0cnVlKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gTG9hZEltYWdl
RnVuY3Rpb25JbmZvKFVucmVhY2hhYmxlTG9hZEZ1bmN0aW9uLCB0cnVlKTsKKyAgICB9Cit9CisK
IExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBERVBUSF9DT01QT05FTlQyNF90b19EMzJfRkxPQVRfUzhY
MjRfVUlOVChHTGVudW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpCkBAIC0zNjI0LDYgKzM2
MzAsOCBAQCBMb2FkRnVuY3Rpb25NYXAgR2V0TG9hZEZ1bmN0aW9uc01hcChHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEZvcm1hdElEIGFuZ2xlRm9ybWF0KQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDI0X1VOT1JNX1M4X1VJTlQ7CiAgICAgICAgICAgICAg
ICAgY2FzZSBGb3JtYXRJRDo6RDI0X1VOT1JNX1g4X1VJTlQ6CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBERVBUSF9DT01QT05FTlQyNF90b19EMjRfVU5PUk1fWDhfVUlOVDsKKyAgICAgICAg
ICAgICAgICBjYXNlIEZvcm1hdElEOjpEMzJfRkxPQVQ6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBERVBUSF9DT01QT05FTlQyNF90b19EMzJfRkxPQVQ7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBERVBUSF9DT01QT05FTlQyNF90b19EMzJfRkxPQVRfUzhYMjRfVUlOVDsKICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduCmluZGV4IDg2OGM0NzZiOTQ0
NWI3ZDllOGE1YWMwNWU0YTU4N2NmMDRmNzFiNDcuLjBkNTBkODFjZGZlNjhlNDdlOTNiNTMwZTU1
MWI3ZGZlOTQ2MjFlZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CVUlMRC5nbgorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQlVJTEQuZ24KQEAgLTYsNyArNiw3IEBA
CiAKIGltcG9ydCgiLi4vLi4vLi4vLi4vZ25pL2FuZ2xlLmduaSIpCiAKLWFzc2VydChpc19tYWMp
Cithc3NlcnQoaXNfbWFjIHx8IGlzX2lvcykKIGFzc2VydChhbmdsZV9lbmFibGVfbWV0YWwpCiAK
IF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBbCkBAIC0yMSw2ICsyMSw4IEBAIF9tZXRhbF9iYWNr
ZW5kX3NvdXJjZXMgPSBbCiAgICJEaXNwbGF5TXRsX2FwaS5oIiwKICAgIkZyYW1lQnVmZmVyTXRs
LmgiLAogICAiRnJhbWVCdWZmZXJNdGwubW0iLAorICAiSU9TdXJmYWNlU3VyZmFjZU10bC5oIiwK
KyAgIklPU3VyZmFjZVN1cmZhY2VNdGwubW0iLAogICAiUHJvZ3JhbU10bC5oIiwKICAgIlByb2dy
YW1NdGwubW0iLAogICAiUXVlcnlNdGwuaCIsCkBAIC01Miw2ICs1NCw4IEBAIF9tZXRhbF9iYWNr
ZW5kX3NvdXJjZXMgPSBbCiAgICJtdGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0iLAogICAibXRs
X2Zvcm1hdF91dGlscy5oIiwKICAgIm10bF9mb3JtYXRfdXRpbHMubW0iLAorICAibXRsX2dsc2xh
bmdfbXRsX3V0aWxzLmgiLAorICAibXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIiwKICAgIm10bF9n
bHNsYW5nX3V0aWxzLmgiLAogICAibXRsX2dsc2xhbmdfdXRpbHMubW0iLAogICAibXRsX29jY2x1
c2lvbl9xdWVyeV9wb29sLmgiLApAQCAtNjUsMTIgKzY5LDExIEBAIF9tZXRhbF9iYWNrZW5kX3Nv
dXJjZXMgPSBbCiAgICJtdGxfdXRpbHMuaCIsCiAgICJtdGxfdXRpbHMubW0iLAogICAic2hhZGVy
cy9jb25zdGFudHMuaCIsCi0gICJzaGFkZXJzL2Zvcm1hdF9hdXRvZ2VuLmgiLAotICAic2hhZGVy
cy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIsCisgICJzaGFkZXJzL210bF9k
ZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4uaW5jIgogXQogCiBjb25maWcoImFuZ2xlX21ldGFs
X2JhY2tlbmRfY29uZmlnIikgewotICBkZWZpbmVzID0gWyAiQU5HTEVfRU5BQkxFX01FVEFMIiBd
CisgIGRlZmluZXMgPSBbICJBTkdMRV9FTkFCTEVfTUVUQUwiLCAiQU5HTEVfRU5BQkxFX01FVEFM
X1NQSVJWIiBdCiAgIGxkZmxhZ3MgPSBbCiAgICAgIi13ZWFrX2ZyYW1ld29yayIsCiAgICAgIk1l
dGFsIiwKQEAgLTk2LDEyICs5OSwxNiBAQCBhbmdsZV9zb3VyY2Vfc2V0KCJhbmdsZV9tZXRhbF9i
YWNrZW5kIikgewogICAgICIke2FuZ2xlX3Jvb3R9OmxpYkFOR0xFX2hlYWRlcnMiLAogICBdCiAK
LSAgZGVwcyA9IFsgIiR7YW5nbGVfc3BpcnZfY3Jvc3NfZGlyfS9nbjpzcGlydl9jcm9zc19zb3Vy
Y2VzIiBdCisgIGRlcHMgPSBbCisgICAgIiRhbmdsZV9zcGlydl90b29sc19kaXI6c3B2dG9vbHNf
dmFsIiwKKyAgICAiJHthbmdsZV9zcGlydl9jcm9zc19kaXJ9L2duOnNwaXJ2X2Nyb3NzX3NvdXJj
ZXMiLAorICBdCiAKICAgb2JqY19mbGFncyA9IFsKICAgICAiLVduby1udWxsYWJpbGl0eS1jb21w
bGV0ZW5lc3MiLAogICAgICItV25vLXVuZ3VhcmRlZC1hdmFpbGFiaWxpdHkiLAogICAgICItZm5v
LW9iamMtYXJjIiwKKyAgICAiLVduby1leHRyYS1zZW1pLXN0bXQiLAogICBdCiAgIGNmbGFnc19v
YmpjICs9IG9iamNfZmxhZ3MKICAgY2ZsYWdzX29iamNjICs9IG9iamNfZmxhZ3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9C
dWZmZXJNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9CdWZmZXJNdGwuaAppbmRleCA3NjI1NDllNGQyNzBmOWNmMjQ0ZjMzZTFmZTBiMTkw
NWZhMmExMzkyLi45ZjllYzZjYmQ5YzgzMTU3ZTMxNDc0ZTY2OGQzNTIyZjJlZDRmMjgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oCkBAIC0xNTIsMTAgKzE1MiwxNSBAQCBjbGFzcyBC
dWZmZXJNdGwgOiBwdWJsaWMgQnVmZmVySW1wbCwgcHVibGljIEJ1ZmZlckhvbGRlck10bAogCiAg
ICAgQ29udmVyc2lvbkJ1ZmZlck10bCAqZ2V0VW5pZm9ybUNvbnZlcnNpb25CdWZmZXIoQ29udGV4
dE10bCAqY29udGV4dCwgc2l6ZV90IG9mZnNldCk7CiAKKyAgICAvLyBOT1RFKGhxbGUpOiBJZiB0
aGUgYnVmZmVyIGlzIG1vZGlmZWQgYnkgR1BVLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhwbGlj
aXRseQorICAgIC8vIGNhbGxlZC4KKyAgICB2b2lkIG1hcmtDb252ZXJzaW9uQnVmZmVyc0RpcnR5
KCk7CisKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVf
dD4obVN0YXRlLmdldFNpemUoKSk7IH0KIAogICBwcml2YXRlOgogICAgIGFuZ2xlOjpSZXN1bHQg
c2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6QnVmZmVyQmluZGluZyB0YXJnZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVm
ZmVyVXNhZ2UgdXNhZ2UpOwpAQCAtMTY3LDIwICsxNzIsMjQgQEAgY2xhc3MgQnVmZmVyTXRsIDog
cHVibGljIEJ1ZmZlckltcGwsIHB1YmxpYyBCdWZmZXJIb2xkZXJNdGwKICAgICBhbmdsZTo6UmVz
dWx0IGNvbW1pdFNoYWRvd0NvcHkoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwogICAgIGFu
Z2xlOjpSZXN1bHQgY29tbWl0U2hhZG93Q29weShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
c2l6ZV90IHNpemUpOwogCi0gICAgdm9pZCBtYXJrQ29udmVyc2lvbkJ1ZmZlcnNEaXJ0eSgpOwot
CiAgICAgdm9pZCBjbGVhckNvbnZlcnNpb25CdWZmZXJzKCk7CisKICAgICBib29sIGNsaWVudFNo
YWRvd0NvcHlEYXRhTmVlZFN5bmMoQ29udGV4dE10bCAqY29udGV4dE10bCk7CiAgICAgdm9pZCBl
bnN1cmVTaGFkb3dDb3B5U3luY2VkRnJvbUdQVShDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKICAg
ICB1aW50OF90ICpzeW5jQW5kT2J0YWluU2hhZG93Q29weShDb250ZXh0TXRsICpjb250ZXh0TXRs
KTsKIAorICAgIC8vIENvbnZlbmllbnQgbWV0aG9kCisgICAgY29uc3QgdWludDhfdCAqZ2V0Q2xp
ZW50U2hhZG93Q29weURhdGEoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2V0Q2xpZW50U2hhZG93Q29weURhdGEobXRsOjpHZXRJbXBsKGNvbnRleHQp
KTsKKyAgICB9CiAgICAgLy8gQ2xpZW50IHNpZGUgc2hhZG93IGJ1ZmZlcgogICAgIGFuZ2xlOjpN
ZW1vcnlCdWZmZXIgbVNoYWRvd0NvcHk7CiAKICAgICAvLyBHUFUgc2lkZSBidWZmZXJzIHBvb2wK
ICAgICBtdGw6OkJ1ZmZlclBvb2wgbUJ1ZmZlclBvb2w7CiAKLSAgICAvLyBBIGNhY2hlIG9mIGNv
bnZlcnRlZCBidWZmZXIgZGF0YS4KKyAgICAvLyBBIGNhY2hlIG9mIGNvbnZlcnRlZCB2ZXJ0ZXgg
ZGF0YS4KICAgICBzdGQ6OnZlY3RvcjxWZXJ0ZXhDb252ZXJzaW9uQnVmZmVyTXRsPiBtVmVydGV4
Q29udmVyc2lvbkJ1ZmZlcnM7CiAKICAgICBzdGQ6OnZlY3RvcjxJbmRleENvbnZlcnNpb25CdWZm
ZXJNdGw+IG1JbmRleENvbnZlcnNpb25CdWZmZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5tbSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJN
dGwubW0KaW5kZXggNjRjN2RlOGEzMjhkNWZjY2E2MGI0Y2M1ZWVkMjRmYzY4YjU5NjAwNS4uODA5
Njk5NmUyODhmNTk1MTMyMWViODhmZmVkN2RhMGQwOTkyMTRiMCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5t
bQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLm1tCkBAIC0yMyw2ICsyMywxMCBAQCBuYW1lc3BhY2UKIC8vIFN0YXJ0IHdp
dGggYSBmYWlybHkgc21hbGwgYnVmZmVyIHNpemUuIFdlIGNhbiBpbmNyZWFzZSB0aGlzIGR5bmFt
aWNhbGx5IGFzIHdlIGNvbnZlcnQgbW9yZSBkYXRhLgogY29uc3RleHByIHNpemVfdCBrQ29udmVy
dGVkRWxlbWVudEFycmF5QnVmZmVySW5pdGlhbFNpemUgPSAxMDI0ICogODsKIAorLy8gVGhlIG1h
eCBzaXplIHRoYXQgd2Ugd2lsbCB1c2UgYnVmZmVyIHBvb2wgZm9yIGR5bmFtaWMgdXBkYXRlLgor
Ly8gSWYgdGhlIGJ1ZmZlciBzaXplIGV4Y2VlZHMgdGhpcyBsaW1pdCwgd2Ugd2lsbCB1c2Ugb25s
eSBvbmUgYnVmZmVyIGluc3RlYWQgb2YgdXNpbmcgdGhlIHBvb2wuCitjb25zdGV4cHIgc2l6ZV90
IGtEeW5hbWljQnVmZmVyUG9vbE1heEJ1ZlNpemUgPSAxMjggKiAxMDI0OworCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgSW5kZXhUeXBlPgogYW5nbGU6OlJlc3VsdCBHZXRGaXJzdExhc3RJbmRpY2VzKGNv
bnN0IEluZGV4VHlwZSAqaW5kaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgY291bnQsCkBAIC0xMDUsNyArMTA5LDcgQEAgYW5nbGU6OlJlc3VsdCBCdWZmZXJN
dGw6OnNldERhdGEoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgaW50ZW5kZWRTaXplLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlclVzYWdlIHVzYWdlKQogewotICAgIHJldHVybiBzZXRE
YXRhSW1wbChjb250ZXh0LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsKKyAgICByZXR1cm4g
c2V0RGF0YUltcGwoY29udGV4dCwgdGFyZ2V0LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsK
IH0KIAogYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6OnNldFN1YkRhdGEoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCkBAIC0xNjQsNyArMTY4LDggQEAgYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6
Om1hcFJhbmdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogewogICAgIGlmIChhY2Nlc3Mg
JiBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJfQklUKQogICAgIHsKLSAgICAgICAgQU5HTEVfVFJZ
KHNldERhdGFJbXBsKGNvbnRleHQsIG51bGxwdHIsIHNpemUoKSwgbVN0YXRlLmdldFVzYWdlKCkp
KTsKKyAgICAgICAgQU5HTEVfVFJZKHNldERhdGFJbXBsKGNvbnRleHQsIGdsOjpCdWZmZXJCaW5k
aW5nOjpJbnZhbGlkRW51bSwgbnVsbHB0ciwgc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVN0YXRlLmdldFVzYWdlKCkpKTsKICAgICB9CiAKICAgICBpZiAobWFwUHRyKQpA
QCAtMTczLDcgKzE3OCw3IEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjptYXBSYW5nZShjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgaWYgKG1CdWZmZXJQb29sLmdldE1heEJ1
ZmZlcnMoKSA9PSAxKQogICAgICAgICB7CiAgICAgICAgICAgICAqbWFwUHRyID0gbUJ1ZmZlci0+
bWFwV2l0aE9wdChjb250ZXh0TXRsLCAoYWNjZXNzICYgR0xfTUFQX1dSSVRFX0JJVCkgPT0gMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyAmIEdMX01B
UF9VTlNZTkNIUk9OSVpFRF9CSVQpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWNjZXNzICYgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVCkgKwogICAgICAgICAgICAgICAg
ICAgICAgIG9mZnNldDsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0zOTUsNiArNDAwLDcg
QEAgdm9pZCBCdWZmZXJNdGw6OmNsZWFyQ29udmVyc2lvbkJ1ZmZlcnMoKQogfQogCiBhbmdsZTo6
UmVzdWx0IEJ1ZmZlck10bDo6c2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlckJpbmRpbmcg
dGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQg
KmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVu
ZGVkU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVy
VXNhZ2UgdXNhZ2UpCkBAIC00MTMsNiArNDE5LDEzIEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRs
OjpzZXREYXRhSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIHNpemVfdCBh
ZGp1c3RlZFNpemUgPSBzdGQ6Om1heDxzaXplX3Q+KDEsIGludGVuZGVkU2l6ZSk7CiAKKyAgICAv
LyBFbnN1cmVzIG5vIHZhbGlkYXRpb24gbGF5ZXIgaXNzdWVzIGluIHN0ZDE0MCB3aXRoIGRhdGEg
dHlwZXMgbGlrZSB2ZWMzIGJlaW5nIDEyIGJ5dGVzIHZzIDE2CisgICAgLy8gaW4gTVNMLgorICAg
IGlmICh0YXJnZXQgPT0gZ2w6OkJ1ZmZlckJpbmRpbmc6OlVuaWZvcm0pCisgICAgeworICAgICAg
ICBhZGp1c3RlZFNpemUgPSByb3VuZFVwUG93MihhZGp1c3RlZFNpemUsIChzaXplX3QpMTYpOwor
ICAgIH0KKwogICAgIHNpemVfdCBtYXhCdWZmZXJzOwogICAgIHN3aXRjaCAodXNhZ2UpCiAgICAg
ewpAQCAtNDI3LDcgKzQ0MCw3IEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXREYXRhSW1w
bChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIC8vIGR5bmFtaWMgYnVmZmVyLCBhbGxvdyB1cCB0byAxMCB1cGRhdGUgcGVyIGZyYW1lL2Vu
Y29kaW5nIHdpdGhvdXQKICAgICAgICAgICAgIC8vIHdhaXRpbmcgZm9yIEdQVS4KLSAgICAgICAg
ICAgIGlmIChhZGp1c3RlZFNpemUgPD0gbXRsOjprU2hhcmVkTWVtQnVmZmVyTWF4QnVmU2l6ZUhp
bnQpCisgICAgICAgICAgICBpZiAoYWRqdXN0ZWRTaXplIDw9IGtEeW5hbWljQnVmZmVyUG9vbE1h
eEJ1ZlNpemUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbWF4QnVmZmVycyA9IDEw
OwogICAgICAgICAgICAgICAgIG1CdWZmZXJQb29sLnNldEFsd2F5c1VzZVNoYXJlZE1lbSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0NvbXBpbGVyTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tCmluZGV4IGE1ODY2NzAxYmQ1ZjAyNTYy
MmI2MzU0Mjc4OWQ2NDlhNzE0OTJjMGUuLjNlMjliNGRkODExODJiODgzZThlYjJjZjA3NjRjY2Jm
YTkwOThlNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW0KQEAgLTEwLDYg
KzEwLDcgQEAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10bC5o
IgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oIgogCiBuYW1l
c3BhY2UgcngKIHsKQEAgLTIwLDcgKzIxLDE2IEBAIENvbXBpbGVyTXRsOjp+Q29tcGlsZXJNdGwo
KSB7fQogCiBTaFNoYWRlck91dHB1dCBDb21waWxlck10bDo6Z2V0VHJhbnNsYXRvck91dHB1dFR5
cGUoKSBjb25zdAogewotICAgIHJldHVybiBTSF9HTFNMX01FVEFMX09VVFBVVDsKKyAgICBpZiAo
c2g6OnJlYWRCb29sRW52VmFyKCJBTkdMRV9HRU5fTVRMX1dJVEhfU1BJUlYiKSkKKyAgICB7Cisg
ICAgICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJuIEdMIG91dHB1dCBmaXJzdCwgd2UgY2FuJ3QgYWN0
dWFsbHkKKyAgICAgICAgLy8gZ2V0IE1TTCBjb2RlIHVudGlsIGxpbmsgdGltZS4gVHJhbnNsYXRp
b24gdGltZSBpcyB0b28gZWFybHkKKyAgICAgICAgcmV0dXJuIFNIX0dMU0xfTUVUQUxfT1VUUFVU
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gU0hfTVNMX01FVEFMX09V
VFBVVDsKKyAgICB9CiB9CiAKIH0gIC8vIG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9D
b250ZXh0TXRsLmgKaW5kZXggMTY4N2M4YzkxNDdiZmI5N2RmN2M1YTY0NDAxMmI1ZDIyMDEzY2Vk
Yy4uMmYzOTM3MWQ5ODMzZGExMzY5NTYzNmY4MzQwMjAzMzBjZWFhZGNmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRl
eHRNdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5oCkBAIC0yOSw4ICsyOSw4IEBAIGNsYXNzIEZyYW1lYnVmZmVy
TXRsOwogY2xhc3MgVmVydGV4QXJyYXlNdGw7CiBjbGFzcyBQcm9ncmFtTXRsOwogY2xhc3MgUmVu
ZGVyVGFyZ2V0TXRsOwotY2xhc3MgV2luZG93U3VyZmFjZU10bDsKLWNsYXNzIFRyYW5zZm9ybUZl
ZWRiYWNrTXRsOworY2xhc3MgU3VyZmFjZU10bFByb3RvY29sOworY2xhc3MgQnVmZmVyTXRsOwog
CiBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250
ZXh0CiB7CkBAIC04NSw3ICs4NSw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4
dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqaW5kaWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBpbnN0YW5jZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRleCkg
b3ZlcnJpZGU7CiAgICAgYW5nbGU6OlJlc3VsdCBkcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVy
dGV4QmFzZUluc3RhbmNlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJp
bWl0aXZlTW9kZSBtb2RlLApAQCAtMTU3LDYgKzE1NywxMiBAQCBjbGFzcyBDb250ZXh0TXRsIDog
cHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
R0xpbnQgKmJhc2VWZXJ0aWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgKmJhc2VJbnN0YW5j
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworICAgIGFuZ2xlOjpS
ZXN1bHQgZHJhd0VsZW1lbnRzU2ltcGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3Vu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBpbnN0YW5jZXMpOwogCiAgICAgLy8gRGV2aWNlIGxvc3MKICAgICBnbDo6R3JhcGhp
Y3NSZXNldFN0YXR1cyBnZXRSZXNldFN0YXR1cygpIG92ZXJyaWRlOwpAQCAtMTk2LDYgKzIwMiw4
IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNv
bnRleHQKICAgICBjb25zdCBnbDo6RXh0ZW5zaW9ucyAmZ2V0TmF0aXZlRXh0ZW5zaW9ucygpIGNv
bnN0IG92ZXJyaWRlOwogICAgIGNvbnN0IGdsOjpMaW1pdGF0aW9ucyAmZ2V0TmF0aXZlTGltaXRh
dGlvbnMoKSBjb25zdCBvdmVycmlkZTsKIAorICAgIGNvbnN0IFByb2dyYW1NdGwgKmdldFByb2dy
YW0oKSBjb25zdCB7IHJldHVybiBtUHJvZ3JhbTsgfQorCiAgICAgLy8gU2hhZGVyIGNyZWF0aW9u
CiAgICAgQ29tcGlsZXJJbXBsICpjcmVhdGVDb21waWxlcigpIG92ZXJyaWRlOwogICAgIFNoYWRl
ckltcGwgKmNyZWF0ZVNoYWRlcihjb25zdCBnbDo6U2hhZGVyU3RhdGUgJnN0YXRlKSBvdmVycmlk
ZTsKQEAgLTI0OSwxMiArMjU3LDI0IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4
dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICBhbmdsZTo6UmVzdWx0IG1lbW9yeUJhcnJp
ZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEdMYml0ZmllbGQgYmFycmllcnMpIG92ZXJy
aWRlOwogICAgIGFuZ2xlOjpSZXN1bHQgbWVtb3J5QmFycmllckJ5UmVnaW9uKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBHTGJpdGZpZWxkIGJhcnJpZXJzKSBvdmVycmlkZTsKIAorICAgIHZv
aWQgaW52YWxpZGF0ZUN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lk
IG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKyAgICBhbmdsZTo6UmVzdWx0IG9u
QmVnaW5UcmFuc2Zvcm1GZWVkYmFjaygKKyAgICAgICAgc2l6ZV90IGJ1ZmZlckNvdW50LAorICAg
ICAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+
ICZidWZmZXJzKTsKKworICAgIHZvaWQgb25FbmRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgIGFu
Z2xlOjpSZXN1bHQgb25QYXVzZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisKKyAgICB2b2lkIHBvcHVs
YXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJTZXQoCisgICAgICAgIHNpemVfdCBidWZmZXJDb3Vu
dCwKKyAgICAgICAgY29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZl
ck10bCAqPiAmYnVmZmVycyk7CiAgICAgLy8gb3ZlcnJpZGUgbXRsOjpFcnJvckhhbmRsZXIKICAg
ICB2b2lkIGhhbmRsZUVycm9yKEdMZW51bSBlcnJvciwKICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlv
biwKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKl9OdWxsYWJsZSBlcnJvciwKKyAgICB2b2lkIGhh
bmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZmlsZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpIG92ZXJyaWRlOwpAQCAtMjcyLDEy
ICsyOTIsMTIgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGlj
IG10bDo6Q29udGV4dAogICAgIHZvaWQgb25EcmF3RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBGcmFtZWJ1ZmZlck10bCAqZnJhbWVidWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclBhc3NDaGFuZ2VkKTsKLSAgICB2b2lkIG9u
QmFja2J1ZmZlclJlc2l6ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFdpbmRvd1N1cmZh
Y2VNdGwgKmJhY2tidWZmZXIpOworICAgIHZvaWQgb25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFjZU10bFByb3RvY29sICpiYWNrYnVmZmVyKTsKIAog
ICAgIC8vIEludm9rZSBieSBRdWVyeU10bAotICAgIGFuZ2xlOjpSZXN1bHQgb25PY2NsdXNpb25R
dWVyeUJlZ2luKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOwot
ICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
UXVlcnlNdGwgKnF1ZXJ5KTsKLSAgICB2b2lkIG9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworICAgIGFuZ2xlOjpSZXN1
bHQgb25PY2NsdXNpb25RdWVyeUJlZ2FuKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVy
eU10bCAqcXVlcnkpOworICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZGVkKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworICAgIHZvaWQgb25PY2NsdXNpb25R
dWVyeURlc3Ryb3llZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5
KTsKIAogICAgIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJpbHkgcGF1c2UgdGhlbiByZXN0YXJ0IG9j
Y2x1c2lvbiBxdWVyeSBkdXJpbmcgY2xlYXIvYmxpdCB3aXRoIGRyYXcuCiAgICAgYm9vbCBoYXNB
Y3RpdmVPY2NsdXNpb25RdWVyeSgpIGNvbnN0IHsgcmV0dXJuIG1PY2NsdXNpb25RdWVyeTsgfQpA
QCAtMzY3LDcgKzM4Nyw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGws
IHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IGluc3RhbmNlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVt
ZW50c1R5cGUgaW5kZXhUeXBlT3JOb25lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKmluZGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB4ZmJQ
YXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNr
RHJhdyk7CiAKICAgICBhbmdsZTo6UmVzdWx0IGRyYXdUcmlGYW5BcnJheXMoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IGZpcnN0LApAQCAtNDE3LDYgKzQzNywxOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENv
bnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCk7CiAKKyAgICB2b2lkIGV4ZWNEcmF3SW5z
dGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IHZlcnRleFN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgdmVydGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBpbnN0YW5jZXMpOworCisgICAgdm9pZCBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRM
UHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGluZGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTVRMSW5kZXhUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAmaW5kZXhCdWZmZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpOworCiAgICAgdm9pZCB1cGRh
dGVFeHRlbmRlZFN0YXRlKGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSk7CiAKICAgICB2b2lkIHVw
ZGF0ZVZpZXdwb3J0KEZyYW1lYnVmZmVyTXRsICpmcmFtZWJ1ZmZlck10bCwKQEAgLTQ0Miw2ICs0
NzQsNyBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRs
OjpDb250ZXh0CiAgICAgYW5nbGU6OlJlc3VsdCBmaWxsRHJpdmVyWEZCVW5pZm9ybXMoR0xpbnQg
ZHJhd0NhbGxGaXJzdFZlcnRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCB2ZXJ0aWNlc1Blckluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5jZXMpOworICAgIGFuZ2xl
OjpSZXN1bHQgaGFuZGxlRGlydHlHcmFwaGljc1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0VtdWxh
dGlvbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBoYW5k
bGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKICAg
ICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5RGVwdGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KTsKICAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5UmVuZGVyUGFzcyhjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCk7CkBAIC00NzAsNiArNTAzLDcgQEAgY2xhc3MgQ29udGV4dE10
bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgICAgICBESVJU
WV9CSVRfUkVOREVSX1BJUEVMSU5FLAogICAgICAgICBESVJUWV9CSVRfVU5JRk9STV9CVUZGRVJT
X0JJTkRJTkcsCiAgICAgICAgIERJUlRZX0JJVF9SQVNURVJJWkVSX0RJU0NBUkQsCisgICAgICAg
IERJUlRZX0JJVF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUywKICAgICAgICAgRElSVFlfQklU
X01BWCwKICAgICB9OwogCkBAIC00ODgsNyArNTIyLDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1
YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgICAgICB1aW50MzJfdCB4
ZmJBY3RpdmVVbnBhdXNlZDsKICAgICAgICAgdWludDMyX3QgeGZiVmVydGljZXNQZXJEcmF3Owog
ICAgICAgICAvLyBOT1RFOiBFeHBsaWNpdCBwYWRkaW5nLiBGaWxsIGluIHdpdGggdXNlZnVsIGRh
dGEgd2hlbiBuZWVkZWQgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgaW50MzJfdCBwYWRkaW5nWzNd
OworICAgICAgICBpbnQzMl90IHBhZGRpbmdfMFszXTsKIAogICAgICAgICBpbnQzMl90IHhmYkJ1
ZmZlck9mZnNldHNbNF07CiAgICAgICAgIHVpbnQzMl90IGFjYkJ1ZmZlck9mZnNldHNbNF07CkBA
IC01MDgsMTIgKzU0MiwxNSBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBs
LCBwdWJsaWMgbXRsOjpDb250ZXh0CiAKICAgICAgICAgdWludDMyX3QgY292ZXJhZ2VNYXNrOwog
Ci0gICAgICAgIGZsb2F0IHBhZGRpbmcyWzNdOworICAgICAgICBpbnQzMl90IGVtdWxhdGVkSW5z
dGFuY2VJRDsKKworICAgICAgICAvLyBOT1RFOiBFeHBsaWNpdCBwYWRkaW5nLiBGaWxsIGluIHdp
dGggdXNlZnVsIGRhdGEgd2hlbiBuZWVkZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgaW50MzJf
dCBwYWRkaW5nXzFbMl07CiAgICAgfTsKIAogICAgIHN0cnVjdCBEZWZhdWx0QXR0cmlidXRlCiAg
ICAgewotICAgICAgICB1aW50OF90IHZhbHVlc1tzaXplb2YoZmxvYXQpICogNF07CisgICAgICAg
IGZsb2F0IHZhbHVlc1s0XTsKICAgICB9OwogCiAgICAgbXRsOjpPY2NsdXNpb25RdWVyeVBvb2wg
bU9jY2x1c2lvblF1ZXJ5UG9vbDsKQEAgLTUyMiw2ICs1NTksMTMgQEAgY2xhc3MgQ29udGV4dE10
bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgIG10bDo6UmVu
ZGVyQ29tbWFuZEVuY29kZXIgbVJlbmRlckVuY29kZXI7CiAgICAgbXRsOjpCbGl0Q29tbWFuZEVu
Y29kZXIgbUJsaXRFbmNvZGVyOwogICAgIG10bDo6Q29tcHV0ZUNvbW1hbmRFbmNvZGVyIG1Db21w
dXRlRW5jb2RlcjsKKyAgICAvLyBUT0RPKGpjdW5uaW5naGFtKToKKyAgICAvLyBDYWNoZSB0aGUg
Y3VycmVudCBkcmF3IGNhbGwncyBmaXJzdFZlcnRleCB0byBiZSBwYXNzZWQgdG8KKyAgICAvLyBU
cmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zmc2V0cy4gIFdlIHNob3VsZCBzd2l0Y2gK
KyAgICAvLyB0byB1c2luZyBnbF9CYXNlVmVydGV4IC0+IGJhc2VfdmVydGV4IGluIE1TTAorICAg
IEdMaW50IG1YZmJCYXNlVmVydGV4OworICAgIC8vIENhY2hlIHRoZSBjdXJyZW50IGRyYXcgY2Fs
bCdzIHZlcnRleCBjb3VudCBhcyB3ZWxsIHRvIHN1cHBvcnQgaW5zdGFuY2VkIGRyYXcgY2FsbHMK
KyAgICBHTHVpbnQgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2U7CiAKICAgICAvLyBDYWNoZWQg
YmFjay1lbmQgb2JqZWN0cwogICAgIEZyYW1lYnVmZmVyTXRsICptRHJhd0ZyYW1lYnVmZmVyID0g
bnVsbHB0cjsKQEAgLTU1NCw2ICs1OTgsOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENv
bnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgbXRsOjpCdWZmZXJQb29sIG1UcmlG
YW5JbmRleEJ1ZmZlcjsKICAgICAvLyBvbmUgYnVmZmVyIGNhbiBiZSByZXVzZWQgZm9yIGFueSBz
dGFydGluZyB2ZXJ0ZXggaW4gRHJhd0FycmF5cygpCiAgICAgbXRsOjpCdWZmZXJSZWYgbVRyaUZh
bkFycmF5c0luZGV4QnVmZmVyOworICAgIC8vCisgICAgbXRsOjpCdWZmZXJQb29sIG1QcmltaXRp
dmVSZXN0YXJ0QnVmZmVyOwogCiAgICAgLy8gRHVtbXkgdGV4dHVyZSB0byBiZSB1c2VkIGZvciB0
cmFuc2Zvcm0gZmVlZGJhY2sgb25seSBwYXNzLgogICAgIG10bDo6VGV4dHVyZVJlZiBtRHVtbXlY
RkJSZW5kZXJUZXh0dXJlOwpAQCAtNTYyLDYgKzYwOCw5IEBAIGNsYXNzIENvbnRleHRNdGwgOiBw
dWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKIAogICAgIERlZmF1bHRBdHRy
aWJ1dGUgbURlZmF1bHRBdHRyaWJ1dGVzW210bDo6a01heFZlcnRleEF0dHJpYnNdOwogCisgICAg
Ly8gVHJhbnNmb3JtIGZlZWRiYWNrIGJ1ZmZlcnMuCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNv
bnN0IEJ1ZmZlck10bCAqPiBtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyczsKKwogICAg
IEluY29tcGxldGVUZXh0dXJlU2V0IG1JbmNvbXBsZXRlVGV4dHVyZXM7CiAgICAgYm9vbCBtSW5j
b21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10
bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9Db250ZXh0TXRsLm1tCmluZGV4IDI3ZTY5Nzg3MDIxZjc4ZDdiZGI3ZWQwYzgwMGVlYTVjNDEw
MWE0NmYuLjQ1YTA5MjgwMGE3ZDAwOGYyZGMxMWQ1N2ZlODYxMThjNTNlNjk2N2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9D
b250ZXh0TXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tCkBAIC00NCwyNSArNDQsNiBAQCBjb25zdGV4cHIg
dWludDMyX3Qga01heFRyaUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lID0gMDsKIGNvbnN0ZXhw
ciB1aW50MzJfdCBrTWF4VHJpRmFuTGluZUxvb3BCdWZmZXJzUGVyRnJhbWUgPSAxMDsKICNlbmRp
ZgogCi0jZGVmaW5lIEFOR0xFX01UTF9YRkJfRFJBVyhEUkFXX1BST0MpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIW1TdGF0
ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIC8qIE5vcm1hbCBkcmF3IGNhbGwgKi8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgRFJBV19Q
Uk9DKGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAvKiBGaXJzdCBwYXNzOiB3cml0ZSB0byBY
RkIgYnVmZmVycyBpbiB2ZXJ0ZXggc2hhZGVyLCBmcmFnbWVudCBzaGFkZXIgaW5hY3RpdmUgKi8g
ICBcCi0gICAgICAgIERSQVdfUFJPQyh0cnVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFt
U3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICAvKiBTZWNvbmQgcGFzczogZnVsbCByYXN0ZXJpemF0aW9uOiB2ZXJ0
ZXggc2hhZGVyICsgZnJhZ21lbnQgc2hhZGVyIGFyZSBhY3RpdmUuIFwKLSAgICAgICAgICAgICAg
IFZlcnRleCBzaGFkZXIgd3JpdGVzIHRvIHN0YWdlIG91dHB1dCBidXQgd29uJ3Qgd3JpdGUgdG8g
WEZCIGJ1ZmZlcnMgKi8gICAgICAgXAotICAgICAgICAgICAgaW52YWxpZGF0ZVJlbmRlclBpcGVs
aW5lKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICBEUkFXX1BST0MoZmFsc2UpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQogYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRy
aWFuZ2xlRmFuQnVmZmVyRnJvbVBvb2woQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgdmVydGV4Q291bnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1
ZmZlclBvb2wgKnBvb2wsCkBAIC04NCwxMSArNjUsMTEgQEAgYW5nbGU6OlJlc3VsdCBBbGxvY2F0
ZVRyaWFuZ2xlRmFuQnVmZmVyRnJvbVBvb2woQ29udGV4dE10bCAqY29udGV4dCwKICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKLWFuZ2xlOjpSZXN1bHQgQWxsb2NhdGVM
aW5lTG9vcEJ1ZmZlckZyb21Qb29sKENvbnRleHRNdGwgKmNvbnRleHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluZGljZXNUb1Jlc2VydmUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZl
clBvb2wgKnBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OkJ1ZmZlclJlZiAqYnVmZmVyT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgKm9mZnNldE91dCkKK2FuZ2xlOjpSZXN1bHQgQWxs
b2NhdGVCdWZmZXJGcm9tUG9vbChDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5kaWNlc1RvUmVzZXJ2ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqb2Zmc2V0
T3V0KQogewogICAgIHNpemVfdCBvZmZzZXQ7CiAgICAgcG9vbC0+cmVsZWFzZUluRmxpZ2h0QnVm
ZmVycyhjb250ZXh0KTsKQEAgLTEwNSwxMiArODYsNyBAQCBib29sIE5lZWRUb0ludmVydERlcHRo
UmFuZ2UoZmxvYXQgbmVhciwgZmxvYXQgZmFyKQogICAgIHJldHVybiBuZWFyID4gZmFyOwogfQog
Ci1ib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkK
LXsKLSAgICByZXR1cm4gZ2xTdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSAmJiBnbFN0YXRlLmlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCk7Ci19Ci0KLXN0ZDo6c3Ry
aW5nIENvbnZlcnRNYXJrZXJUb1N0cmluZyhHTHNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFy
a2VyKQorc3RkOjpzdHJpbmcgQ29udmVydE1hcmtlclRvQ3BwKEdMc2l6ZWkgbGVuZ3RoLCBjb25z
dCBjaGFyICptYXJrZXIpCiB7CiAgICAgc3RkOjpzdHJpbmcgY3BwU3RyaW5nOwogICAgIGlmIChs
ZW5ndGggPT0gMCkKQEAgLTE3Myw3ICsxNDksNyBAQCBjbGFzcyBMaW5lTG9vcExhc3RTZWdtZW50
SGVscGVyCiAgICAgICAgICAgICAgICAgICAgIHtpbmRleFR5cGVPck5vbmUsIHZlcnRleE9ySW5k
ZXhDb3VudCwgaW5kaWNlcywgbUxpbmVMb29wSW5kZXhCdWZmZXIsIDB9KSk7CiAgICAgICAgIH0K
IAotICAgICAgICBBTkdMRV9UUlkoaW5kZXhCdWZmZXJQb29sLT5jb21taXQobUNvbnRleHRNdGwp
KTsKKyAgICAgICAgQU5HTEVfVFJZKGluZGV4QnVmZmVyUG9vbC0+Y29tbWl0KG1Db250ZXh0TXRs
LCBmYWxzZSkpOwogCiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAg
ICB9CkBAIC0xOTEsNyArMTY3LDggQEAgQ29udGV4dE10bDo6Q29udGV4dE10bChjb25zdCBnbDo6
U3RhdGUgJnN0YXRlLCBnbDo6RXJyb3JTZXQgKmVycm9yU2V0LCBEaXNwbGF5TXQKICAgICAgIG1D
bWRCdWZmZXIoJmRpc3BsYXktPmNtZFF1ZXVlKCkpLAogICAgICAgbVJlbmRlckVuY29kZXIoJm1D
bWRCdWZmZXIsIG1PY2NsdXNpb25RdWVyeVBvb2wpLAogICAgICAgbUJsaXRFbmNvZGVyKCZtQ21k
QnVmZmVyKSwKLSAgICAgIG1Db21wdXRlRW5jb2RlcigmbUNtZEJ1ZmZlcikKKyAgICAgIG1Db21w
dXRlRW5jb2RlcigmbUNtZEJ1ZmZlciksCisgICAgICBtWGZiVmVydGV4Q291bnRQZXJJbnN0YW5j
ZSgwKQoge30KIAogQ29udGV4dE10bDo6fkNvbnRleHRNdGwoKSB7fQpAQCAtMjA4LDYgKzE4NSw4
IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6aW5pdGlhbGl6ZSgpCiAgICAgbUxpbmVMb29w
TGFzdFNlZ21lbnRJbmRleEJ1ZmZlci5pbml0aWFsaXplKHRoaXMsIDIgKiBzaXplb2YodWludDMy
X3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6
OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga01heFRyaUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lKTsK
KyAgICBtUHJpbWl0aXZlUmVzdGFydEJ1ZmZlci5pbml0aWFsaXplKHRoaXMsIDAsIG10bDo6a0lu
ZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga01heFRyaUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lKTsKIAogICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KQEAgLTIyNywyMyArMjA2LDIwIEBAIHZvaWQg
Q29udGV4dE10bDo6b25EZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogCiBhbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6OmVuc3VyZUluY29tcGxldGVUZXh0dXJlc0NyZWF0ZWQoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgaWYgKEFOR0xFX0xJS0VMWShtSW5jb21w
bGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOwotICAgIH0KLSAgICBjb25zdGV4cHIgZ2w6OlRleHR1cmVUeXBlIHN1
cHBvcnRlZFRleHR1cmVUeXBlc1tdID0ge2dsOjpUZXh0dXJlVHlwZTo6XzJELCBnbDo6VGV4dHVy
ZVR5cGU6Ol8zRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZVR5cGU6
OkN1YmVNYXB9OwotICAgIGZvciAoZ2w6OlRleHR1cmVUeXBlIHRleFR5cGUgOiBzdXBwb3J0ZWRU
ZXh0dXJlVHlwZXMpCisgICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtSW5jb21wbGV0ZVRleHR1cmVz
SW5pdGlhbGl6ZWQpKQogICAgIHsKLSAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0gICAg
ICAgIEFOR0xFX1RSWShtSW5jb21wbGV0ZVRleHR1cmVzLmdldEluY29tcGxldGVUZXh0dXJlKGNv
bnRleHQsIHRleFR5cGUsIG51bGxwdHIsICZ0ZXh0dXJlKSk7Ci0KLSAgICAgICAgVGV4dHVyZU10
bCAqdGV4dHVyZU10bCAgICAgICAgICAgICAgICAgICAgICA9IG10bDo6R2V0SW1wbCh0ZXh0dXJl
KTsKLSAgICAgICAgdGV4dHVyZU10bC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXQoKS5sYWJlbCA9
IEAiSW5jb21wbGV0ZVRleHR1cmUiOworICAgICAgICBjb25zdGV4cHIgZ2w6OlRleHR1cmVUeXBl
IHN1cHBvcnRlZFRleHR1cmVUeXBlc1tdID0geworICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBl
OjpfMkQsIGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXksIGdsOjpUZXh0dXJlVHlwZTo6XzNELAor
ICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlOjpDdWJlTWFwfTsKKyAgICAgICAgZm9yIChhdXRv
IHRleFR5cGUgOiBzdXBwb3J0ZWRUZXh0dXJlVHlwZXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAgICAgICAgICAgQU5HTEVfVU5VU0VEX1ZBUklBQkxF
KHRleHR1cmUpOworICAgICAgICAgICAgQU5HTEVfVFJZKAorICAgICAgICAgICAgICAgIG1JbmNv
bXBsZXRlVGV4dHVyZXMuZ2V0SW5jb21wbGV0ZVRleHR1cmUoY29udGV4dCwgdGV4VHlwZSwgbnVs
bHB0ciwgJnRleHR1cmUpKTsKKyAgICAgICAgfQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVz
SW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KLSAgICBtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlh
bGl6ZWQgPSB0cnVlOwotCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQog
CkBAIC0yODIsNyArMjU4LDE3IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1RyaUZh
bkFycmF5c1dpdGhCYXNlVmVydGV4KGNvbnN0IGdsOjpDb250ZXh0ICpjb250CiAgICAgICAgICAg
ICB0aGlzLCB7MCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvdW50KSwgbVRyaUZhbkFycmF5c0lu
ZGV4QnVmZmVyLCAwfSkpOwogICAgIH0KIAotICAgIEFTU0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5z
Zm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1
cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCBmaXJzdCwgY291
bnQsIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1l
bnRzVHlwZTo6SW52YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSk7CisgICAgICAgIC8vIERyYXcgd2l0
aCB0aGUgemVybyBzdGFydGluZyBpbmRleCBidWZmZXIsIHNoaWZ0IHRoZSB2ZXJ0ZXggaW5kZXgg
dXNpbmcgYmFzZVZlcnRleAorICAgICAgICAvLyBpbnN0YW5jZWQgZHJhdzoKKyAgICAgICAgbVJl
bmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWRCYXNlVmVydGV4KE1UTFByaW1pdGl2ZVR5
cGVUcmlhbmdsZSwgZ2VuSW5kaWNlc0NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMSW5kZXhUeXBlVUludDMyLCBtVHJpRmFuQXJy
YXlzSW5kZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBpbnN0YW5jZXMsIGZpcnN0KTsKKyAgICB9CiAKICAgICBBTkdMRV9U
Ulkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmly
c3QsIGNvdW50LCBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0Vs
ZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigw
KSwKQEAgLTMxMSwxNiArMjk3LDIzIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1Ry
aUZhbkFycmF5c0xlZ2FjeShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgdGhp
cywge3N0YXRpY19jYXN0PHVpbnQzMl90PihmaXJzdCksIHN0YXRpY19jYXN0PHVpbnQzMl90Pihj
b3VudCksIGdlbklkeEJ1ZmZlciwKICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0p
KTsKIAotICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMpKTsKKyAg
ICBBTkdMRV9UUlkobVRyaUZhbkluZGV4QnVmZmVyLmNvbW1pdCh0aGlzLCBmYWxzZSkpOwogCi0g
ICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgp
KTsKKyAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQor
ICAgIHsKKyAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZl
TW9kZTo6VHJpYW5nbGVGYW4sIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB2b2lkICo+KDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUpKTsKIAorICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZl
VHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zm
c2V0LCBpbnN0YW5jZXMpOworICAgIH0KICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQs
IGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVu
dW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhbHNlKSk7CiAKLSAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChNVExQcmlt
aXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVy
T2Zmc2V0KTsKKyAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRy
aWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3Rh
bmNlcyk7CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC0zNjgs
MjIgKzM2MSwyNyBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdMaW5lTG9vcEFycmF5
cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICB1aW50MzJfdCBnZW5JZHhCdWZmZXJP
ZmZzZXQ7CiAgICAgdWludDMyX3QgZ2VuSW5kaWNlc0NvdW50ID0gY291bnQgKyAxOwogCi0gICAg
QU5HTEVfVFJZKEFsbG9jYXRlTGluZUxvb3BCdWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2Vz
Q291bnQsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZnZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsK
KyAgICBBTkdMRV9UUlkoQWxsb2NhdGVCdWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291
bnQsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwgJmdlbklkeEJ1ZmZlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CiAgICAgQU5HTEVf
VFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFy
cmF5cygKICAgICAgICAgdGhpcywge3N0YXRpY19jYXN0PHVpbnQzMl90PihmaXJzdCksIHN0YXRp
Y19jYXN0PHVpbnQzMl90Pihjb3VudCksIGdlbklkeEJ1ZmZlciwKICAgICAgICAgICAgICAgIGdl
bklkeEJ1ZmZlck9mZnNldH0pKTsKIAotICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZl
ci5jb21taXQodGhpcykpOworICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21t
aXQodGhpcywgZmFsc2UpKTsKIAotICAgIEFTU0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRi
YWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXco
Y29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OkxpbmVMb29wLCBmaXJzdCwgY291bnQsIGluc3Rh
bmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6
SW52YWxpZEVudW0sIG51bGxwdHIsIHRydWUpKTsKIAorICAgICAgICBleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LCBNVExJ
bmRleFR5cGVVSW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhC
dWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKyAgICB9CiAgICAgQU5HTEVf
VFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIGZpcnN0
LCBjb3VudCwgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVt
ZW50c1R5cGU6OkludmFsaWRFbnVtLCBudWxscHRyLCBmYWxzZSkpOwogCi0gICAgbVJlbmRlckVu
Y29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2Vu
SW5kaWNlc0NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1U
TEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzKTsKKyAgICBleGVj
RHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNl
c0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwogCiAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQpAQCAtNDEzLDIxICs0MTEsMzMgQEAgYW5n
bGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3QXJyYXlzSW1wbChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKIAogICAgIE1UTFByaW1pdGl2ZVR5cGUgbXRsVHlwZSA9IG10bDo6R2V0UHJpbWl0
aXZlVHlwZShtb2RlKTsKIAotI2RlZmluZSBEUkFXX0dFTkVSSUNfQVJSQVkoeGZiUGFzcykgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgZmlyc3QsIGNvdW50
LCBpbnN0YW5jZXMsIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgXAotICAgICAg
ICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgeGZiUGFzcykpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChpbnN0YW5jZXMgPT0gMCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAvKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJhd0FycmF5
cygpICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBt
UmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUsIGZpcnN0LCBjb3VudCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5zdGFuY2VkKG10bFR5cGUsIGZpcnN0LCBjb3Vu
dCwgaW5zdGFuY2VDb3VudCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChtU3Rh
dGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBB
TkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZh
bGlkRW51bSwgbnVsbHB0ciwgdHJ1ZSkpOworCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gbm9y
bWFsIGRyYXdBcnJheXMoKQorICAgICAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhtdGxUeXBl
LCBmaXJzdCwgY291bnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgZXhlY0RyYXdJbnN0YW5jZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5j
ZUNvdW50KTsKKyAgICAgICAgfQogICAgIH0KKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRl
eHQsIG1vZGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6
SW52YWxpZEVudW0sCisgICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCBmYWxzZSkpOwog
Ci0gICAgQU5HTEVfTVRMX1hGQl9EUkFXKERSQVdfR0VORVJJQ19BUlJBWSkKKyAgICBpZiAoaW5z
dGFuY2VzID09IDApCisgICAgeworICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJv
bSBub3JtYWwgZHJhd0FycmF5cygpCisgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXcobXRsVHlw
ZSwgZmlyc3QsIGNvdW50KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZXhlY0Ry
YXdJbnN0YW5jZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKyAgICB9
CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC00ODAsMTYgKzQ5
MCwyNSBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdUcmlGYW5FbGVtZW50cyhjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0LCAmZ2VuSW5kaWNlc0NvdW50
KSk7CiAKICAgICAgICAgQU5HTEVfVFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0
ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KAotICAgICAgICAgICAgdGhpcywge3R5cGUs
IGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgcHJpbWl0
aXZlUmVzdGFydH0pKTsKKyAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywg
Z2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9LAorICAg
ICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOworCisgICAgICAgIEFOR0xFX1RSWShtVHJpRmFu
SW5kZXhCdWZmZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CisKKyAgICAgICAgaWYgKG1TdGF0ZS5p
c1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5n
bGVGYW4sIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGljZXMsIHRydWUpKTsKIAotICAgICAgICBBTkdMRV9UUlkobVRyaUZhbklu
ZGV4QnVmZmVyLmNvbW1pdCh0aGlzKSk7CisgICAgICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0
YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4
VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhC
dWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKyAgICAgICAgfQogCiAgICAg
ICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFu
Z2xlRmFuLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGljZXMsIGZhbHNlKSk7CiAKLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0lu
ZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlw
ZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyk7CisgICAgICAgIGV4ZWNE
cmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXND
b3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CiAKICAgICAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0gIC8vIGlmIChjb3VudCA+
IDMpCkBAIC01MzIsMjcgKzU1MSw4NyBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdM
aW5lTG9vcEVsZW1lbnRzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICB1aW50
MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CiAgICAgICAgIHVpbnQzMl90IHJlc2VydmVkSW5kaWNl
cyA9IGNvdW50ICogMjsKICAgICAgICAgdWludDMyX3QgZ2VuSW5kaWNlc0NvdW50OwotICAgICAg
ICBBTkdMRV9UUlkoQWxsb2NhdGVMaW5lTG9vcEJ1ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVk
SW5kaWNlcywgJm1MaW5lTG9vcEluZGV4QnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZnZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZz
ZXQpKTsKKyAgICAgICAgQU5HTEVfVFJZKEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wodGhpcywgcmVz
ZXJ2ZWRJbmRpY2VzLCAmbUxpbmVMb29wSW5kZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZnZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQp
KTsKIAogICAgICAgICBBTkdMRV9UUlkoZ2V0RGlzcGxheSgpLT5nZXRVdGlscygpLmdlbmVyYXRl
TGluZUxvb3BCdWZmZXJGcm9tRWxlbWVudHNBcnJheSgKICAgICAgICAgICAgIHRoaXMsIHt0eXBl
LCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1p
dGl2ZVJlc3RhcnR9LAogICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOwogCi0gICAgICAg
IEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21taXQodGhpcykpOworICAgICAgICBB
TkdMRV9UUlkobUxpbmVMb29wSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CisKKyAg
ICAgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJp
bWl0aXZlTW9kZTo6TGluZUxvb3AsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMsIHRydWUpKTsKKworICAgICAgICAgICAg
ZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdlbklu
ZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMp
OworICAgICAgICB9CiAKICAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6
UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcywgZmFsc2UpKTsKIAotICAgICAgICBtUmVu
ZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlw
LCBnZW5JbmRpY2VzQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNl
cyk7CisgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGlu
ZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBp
bnN0YW5jZXMpOwogCiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAg
ICB9ICAvLyBpZiAoY291bnQgPj0gMikKICAgICByZXR1cm4gZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5lcywgY291bnQsIHR5cGUsIGluZGljZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMpOwogfQorYW5nbGU6
OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNTaW1wbGVUeXBlc1ByaW1pdGl2ZVJlc3Rh
cnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9k
ZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVu
dHNUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSBpbnN0YW5jZXMpCit7CisKKyAgICBtdGw6OkJ1ZmZlclJlZiBnZW5JZHhCdWZmZXI7Cisg
ICAgdWludDMyX3QgZ2VuSWR4QnVmZmVyT2Zmc2V0OworICAgIHVpbnQzMl90IHJlc2VydmVkSW5k
aWNlcyA9IGNvdW50OworICAgIHNpemVfdCBnZW5JbmRpY2VzQ291bnQ7CisgICAgQU5HTEVfVFJZ
KEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wodGhpcywgcmVzZXJ2ZWRJbmRpY2VzLCAmbVByaW1pdGl2
ZVJlc3RhcnRCdWZmZXIsICZnZW5JZHhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmdlbklkeEJ1ZmZlck9mZnNldCkpOworICAgIHN3aXRjaCAobW9kZSkKKyAg
ICB7CisgICAgICAgIGNhc2UgZ2w6OlByaW1pdGl2ZU1vZGU6OlBvaW50czoKKyAgICAgICAgICAg
IEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0
YXJ0UG9pbnRzQnVmZmVyKAorICAgICAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5k
aWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHRydWV9LAorICAgICAgICAg
ICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5lczoKKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXRE
aXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIo
CisgICAgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZm
ZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1ZX0sCisgICAgICAgICAgICAgICAgJmdlbkluZGlj
ZXNDb3VudCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZ2w6OlByaW1pdGl2
ZU1vZGU6OlRyaWFuZ2xlczoKKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdl
dFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorICAgICAg
ICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5J
ZHhCdWZmZXJPZmZzZXQsIHRydWV9LAorICAgICAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworICAg
IH0KKyAgICBBTkdMRV9UUlkobVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIuY29tbWl0KHRoaXMpKTsK
KyAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUobW9k
ZSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkK
KyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgMCwgY291
bnQsIGluc3RhbmNlcywgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCksIHRydWUpKTsKKworICAgICAgICBleGVjRHJhd0lu
ZGV4ZWRJbnN0YW5jZWQobXRsVHlwZSwgKHVpbnQzMl90KWdlbkluZGljZXNDb3VudCwgTVRMSW5k
ZXhUeXBlVUludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVm
ZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CisgICAgfQorICAgIEFOR0xFX1RS
WShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwgaW5k
aWNlcywgZmFsc2UpKTsKKworICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCAo
dWludDMyX3QpZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0
YW5jZXMpOworCisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQogCiBhbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OlByaW1pdGl2ZU1vZGUgbW9kZSwKQEAgLTU2Myw3ICs2NDIsNiBAQCBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiB7
CiAgICAgLy8gUmVhbCBpbnN0YW5jZXMgY291bnQuIFplcm8gbWVhbnMgdGhpcyBpcyBub3QgaW5z
dGFuY2VkIGRyYXcuCiAgICAgR0xzaXplaSBpbnN0YW5jZUNvdW50ID0gaW5zdGFuY2VzID8gaW5z
dGFuY2VzIDogMTsKLQogICAgIGlmIChtQ3VsbEFsbFBvbHlnb25zICYmIGdsOjpJc1BvbHlnb25N
b2RlKG1vZGUpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwpAQCAtNTc3LDE4ICs2NTUsMzkgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxl
bWVudHNJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIHsKICAgICAgICAgcmV0
dXJuIGRyYXdMaW5lTG9vcEVsZW1lbnRzKGNvbnRleHQsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCBp
bnN0YW5jZUNvdW50KTsKICAgICB9Ci0KICAgICBtdGw6OkJ1ZmZlclJlZiBpZHhCdWZmZXI7CiAg
ICAgc2l6ZV90IGNvbnZlcnRlZE9mZnNldCAgICAgICAgICAgICA9IDA7CiAgICAgZ2w6OkRyYXdF
bGVtZW50c1R5cGUgY29udmVydGVkVHlwZSA9IHR5cGU7CisgICAgc2l6ZV90IGNvbnZlcnRlZENv
dW50ICAgICAgICAgICAgICA9IChzaXplX3QpY291bnQ7CiAKLSAgICBBTkdMRV9UUlkobVZlcnRl
eEFycmF5LT5nZXRJbmRleEJ1ZmZlcihjb250ZXh0LCB0eXBlLCBjb3VudCwgaW5kaWNlcywgJmlk
eEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29u
dmVydGVkT2Zmc2V0LCAmY29udmVydGVkVHlwZSkpOworICAgIEFOR0xFX1RSWShtVmVydGV4QXJy
YXktPmdldEluZGV4QnVmZmVyKGNvbnRleHQsIHR5cGUsIG1vZGUsIGNvdW50LCBpbmRpY2VzLCAm
aWR4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZj
b252ZXJ0ZWRPZmZzZXQsICZjb252ZXJ0ZWRUeXBlLCAmY29udmVydGVkQ291bnQpKTsKIAogICAg
IEFTU0VSVChpZHhCdWZmZXIpOwogICAgIEFTU0VSVCgoY29udmVydGVkT2Zmc2V0ICUgbXRsOjpr
SW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQpID09IDApOworICAgIHVpbnQzMl90IGNvbnZlcnRl
ZENvdW50aTMyID0gKHVpbnQzMl90KWNvbnZlcnRlZENvdW50OworICAgIGlmIChtU3RhdGUuaXNU
cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBBTkdMRV9U
Ulkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5j
ZXMsIHR5cGUsIGluZGljZXMsIHRydWUpKTsKKyAgICAgICAgTVRMUHJpbWl0aXZlVHlwZSBtdGxU
eXBlID0gbXRsOjpHZXRQcmltaXRpdmVUeXBlKG1vZGUpOwogCi0gICAgQU5HTEVfVFJZKHNldHVw
RHJhdyhjb250ZXh0LCBtb2RlLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLCBpbmRpY2VzLCBm
YWxzZSkpOworICAgICAgICBNVExJbmRleFR5cGUgbXRsSWR4VHlwZSA9IG10bDo6R2V0SW5kZXhU
eXBlKGNvbnZlcnRlZFR5cGUpOworCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gTm9ybWFsIGRyYXcKKyAgICAgICAgICAgIG1SZW5kZXJFbmNv
ZGVyLmRyYXdJbmRleGVkKG10bFR5cGUsIGNvbnZlcnRlZENvdW50aTMyLCBtdGxJZHhUeXBlLCBp
ZHhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0
ZWRPZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gSW5zdGFuY2VkIGRyYXcKKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNl
ZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZE9mZnNldCwgaW5zdGFu
Y2VDb3VudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNv
bnRleHQsIG1vZGUsIDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5jZXMsIHR5cGUsIGluZGlj
ZXMsIGZhbHNlKSk7CiAKICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6OkdldFBy
aW1pdGl2ZVR5cGUobW9kZSk7CiAKQEAgLTU5NywxMyArNjk2LDE0IEBAIGFuZ2xlOjpSZXN1bHQg
Q29udGV4dE10bDo6ZHJhd0VsZW1lbnRzSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
ICAgICBpZiAoaW5zdGFuY2VzID09IDApCiAgICAgewogICAgICAgICAvLyBOb3JtYWwgZHJhdwot
ICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb3VudCwgbXRsSWR4
VHlwZSwgaWR4QnVmZmVyLCBjb252ZXJ0ZWRPZmZzZXQpOworICAgICAgICBtUmVuZGVyRW5jb2Rl
ci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwgaWR4
QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRPZmZz
ZXQpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICAvLyBJbnN0YW5jZWQgZHJhdwot
ICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBjb3Vu
dCwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLCBjb252ZXJ0ZWRPZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlQ291bnQpOworICAgICAgICBl
eGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQobXRsVHlwZSwgY29udmVydGVkQ291bnRpMzIsIG10bElk
eFR5cGUsIGlkeEJ1ZmZlciwgY29udmVydGVkT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zdGFuY2VDb3VudCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOwpAQCAtNjI1LDcgKzcyNSw2IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4
dE10bDo6ZHJhd0VsZW1lbnRzQmFzZVZlcnRleChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2
b2lkICppbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCiB7Ci0gICAgLy8gTk9URShocWxlKTogRVMgMy4yCiAg
ICAgVU5JTVBMRU1FTlRFRCgpOwogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOwogfQpA
QCAtNjQ5LDEwICs3NDgsOSBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50
c0luc3RhbmNlZEJhc2VWZXJ0ZXgoY29uc3QgZ2w6OkNvbnRleHQgKmNvbgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBiYXNl
VmVydGV4KQogewotICAgIC8vIE5PVEUoaHFsZSk6IEVTIDMuMgogICAgIFVOSU1QTEVNRU5URUQo
KTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKIH0KQEAgLTY2OSw3ICs3NjcsNiBA
QCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0
ZXhCYXNlSW5zdGFuY2UoY29uc3QgZ2w6OgogICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKIH0KLQogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpk
cmF3UmFuZ2VFbGVtZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IHN0YXJ0
LApAQCAtNjkwLDcgKzc4Nyw2IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1Jhbmdl
RWxlbWVudHNCYXNlVmVydGV4KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpp
bmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgYmFzZVZlcnRleCkKIHsKLSAgICAvLyBOT1RFKGhxbGUpOiBFUyAzLjIKICAg
ICBVTklNUExFTUVOVEVEKCk7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CiB9CkBA
IC03MTMsNiArODA5LDY0IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRz
SW5kaXJlY3QoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OlN0b3A7CiB9CiAKK3ZvaWQgQ29udGV4dE10bDo6ZXhlY0RyYXdJbnN0YW5jZWQoTVRM
UHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKK3sKKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5n
ZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWREcmF3LmVuYWJsZWQpCisgICAgewor
ICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5zdGFuY2VkKHByaW1pdGl2ZVR5cGUsIHZlcnRl
eFN0YXJ0LCB2ZXJ0ZXhDb3VudCwgaW5zdGFuY2VzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhwcmltaXRpdmVUeXBlLCB2ZXJ0ZXhTdGFydCwg
dmVydGV4Q291bnQpOworICAgICAgICBmb3IgKHVpbnQzMl90IGluc3QgPSAxOyBpbnN0IDwgaW5z
dGFuY2VzOyArK2luc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy5l
bXVsYXRlZEluc3RhbmNlSUQgPSBpbnN0OworCisgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5z
ZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5n
SW5kZXgpOworCisgICAgICAgICAgICBtVmVydGV4QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdT
dGVwKCZtUmVuZGVyRW5jb2RlciwgaW5zdCk7CisKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVy
LmRyYXcocHJpbWl0aXZlVHlwZSwgdmVydGV4U3RhcnQsIHZlcnRleENvdW50KTsKKyAgICAgICAg
fQorICAgICAgICAvLyBSZXNldCBpbnN0YW5jZSBJRCB0byB6ZXJvCisgICAgICAgIG1WZXJ0ZXhB
cnJheS0+ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVyLCAwKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29udGV4dE10bDo6ZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1p
dGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGluZGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNVExJbmRleFR5cGUgaW5kZXhUeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgJmluZGV4QnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1
ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGluc3RhbmNlcykKK3sKKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygp
Lmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWREcmF3LmVuYWJsZWQpCisgICAgeworICAgICAgICBtUmVu
ZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChwcmltaXRpdmVUeXBlLCBpbmRleENvdW50
LCBpbmRleFR5cGUsIGluZGV4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkKHByaW1pdGl2ZVR5cGUs
IGluZGV4Q291bnQsIGluZGV4VHlwZSwgaW5kZXhCdWZmZXIsIGJ1ZmZlck9mZnNldCk7CisgICAg
ICAgIGZvciAodWludDMyX3QgaW5zdCA9IDE7IGluc3QgPCBpbnN0YW5jZXM7ICsraW5zdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbURyaXZlclVuaWZvcm1zLmVtdWxhdGVkSW5zdGFuY2VJRCA9
IGluc3Q7CisKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVyLnNldFZlcnRleERhdGEobURyaXZl
clVuaWZvcm1zLCBtdGw6OmtEcml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CisKKyAgICAgICAg
ICAgIG1WZXJ0ZXhBcnJheS0+ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVy
LCBpbnN0KTsKKworICAgICAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQocHJpbWl0
aXZlVHlwZSwgaW5kZXhDb3VudCwgaW5kZXhUeXBlLCBpbmRleEJ1ZmZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlck9mZnNldCk7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gUmVzZXQgaW5zdGFuY2UgSUQgdG8gemVybworICAgICAgICBtVmVydGV4QXJyYXkt
PmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgMCk7CisgICAgfQorfQor
CiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om11bHRpRHJhd0FycmF5cyhjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBHTGludCAqZmlyc3RzLApAQCAtODAyLDE1ICs5NTYsMTUgQEAgc3Rk
OjpzdHJpbmcgQ29udGV4dE10bDo6Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0CiAvLyBF
WFRfZGVidWdfbWFya2VyCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Omluc2VydEV2ZW50TWFy
a2VyKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCiB7CisgICAgbUNtZEJ1ZmZl
ci5pbnNlcnREZWJ1Z1NpZ24oQ29udmVydE1hcmtlclRvQ3BwKGxlbmd0aCwgbWFya2VyKSk7CiAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCiBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OnB1c2hHcm91cE1hcmtlcihHTHNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFy
a2VyKQogewotICAgIG1DbWRCdWZmZXIucHVzaERlYnVnR3JvdXAoQ29udmVydE1hcmtlclRvU3Ry
aW5nKGxlbmd0aCwgbWFya2VyKSk7CisgICAgbUNtZEJ1ZmZlci5wdXNoRGVidWdHcm91cChDb252
ZXJ0TWFya2VyVG9DcHAobGVuZ3RoLCBtYXJrZXIpKTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CiB9Ci0KIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6cG9wR3JvdXBNYXJr
ZXIoKQogewogICAgIG1DbWRCdWZmZXIucG9wRGVidWdHcm91cCgpOwpAQCAtMTE1NSwxMCArMTMw
OSwxMiBAQCBRdWVyeUltcGwgKkNvbnRleHRNdGw6OmNyZWF0ZVF1ZXJ5KGdsOjpRdWVyeVR5cGUg
dHlwZSkKIHsKICAgICByZXR1cm4gbmV3IFF1ZXJ5TXRsKHR5cGUpOwogfQorCiBGZW5jZU5WSW1w
bCAqQ29udGV4dE10bDo6Y3JlYXRlRmVuY2VOVigpCiB7CiAgICAgcmV0dXJuIG5ldyBGZW5jZU5W
TXRsKCk7CiB9CisKIFN5bmNJbXBsICpDb250ZXh0TXRsOjpjcmVhdGVTeW5jKCkKIHsKICAgICBy
ZXR1cm4gbmV3IFN5bmNNdGwoKTsKQEAgLTEyMDUsNiArMTM2MSw2OSBAQCBPdmVybGF5SW1wbCAq
Q29udGV4dE10bDo6Y3JlYXRlT3ZlcmxheShjb25zdCBnbDo6T3ZlcmxheVN0YXRlICZzdGF0ZSkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCBDb250ZXh0TXRsOjppbnZhbGlkYXRlQ3Vy
cmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpCit7CisgICAgaWYgKGdldERpc3BsYXkoKS0+
Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKyAgICB7Cisg
ICAgICAgIG1EaXJ0eUJpdHMuc2V0KERJUlRZX0JJVF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
Uyk7CisgICAgfQorfQorCit2b2lkIENvbnRleHRNdGw6Om9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0
ZUNoYW5nZWQoKQoreworICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0
ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlRHJp
dmVyVW5pZm9ybXMoKTsKKyAgICB9Cit9CisKK2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6b25C
ZWdpblRyYW5zZm9ybUZlZWRiYWNrKAorICAgIHNpemVfdCBidWZmZXJDb3VudCwKKyAgICBjb25z
dCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJz
KQoreworICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKworICAgIGZvciAo
c2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZm
ZXJJbmRleCkKKyAgICB7CisgICAgICAgIGlmIChtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycy5jb3VudChidWZmZXJzW2J1ZmZlckluZGV4XSkgIT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZW5kRW5jb2RpbmcobVJlbmRlckVuY29kZXIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBwb3B1bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyU2V0
KGJ1ZmZlckNvdW50LCBidWZmZXJzKTsKKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250
aW51ZTsKK30KKwordm9pZCBDb250ZXh0TXRsOjpwb3B1bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyU2V0KAorICAgIHNpemVfdCBidWZmZXJDb3VudCwKKyAgICBjb25zdCBnbDo6VHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKQoreworICAgIGZvciAo
c2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZm
ZXJJbmRleCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJz
Lmluc2VydChidWZmZXJzW2J1ZmZlckluZGV4XSk7CisgICAgfQorfQorCit2b2lkIENvbnRleHRN
dGw6Om9uRW5kVHJhbnNmb3JtRmVlZGJhY2soKQoreworICAgIGlmIChnZXREaXNwbGF5KCktPmdl
dEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQpCisgICAgeworICAg
ICAgICBvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorfQorCithbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCit7CisgICAg
aWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2su
ZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQo
KTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQorCiBhbmds
ZTo6UmVzdWx0IENvbnRleHRNdGw6OmRpc3BhdGNoQ29tcHV0ZShjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWlu
dCBudW1Hcm91cHNYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0x1aW50IG51bUdyb3Vwc1ksCkBAIC0xMzMxLDYgKzE1NTAsMTEgQEAgY29uc3QgbXRsOjpGb3Jt
YXQgJkNvbnRleHRNdGw6OmdldFBpeGVsRm9ybWF0KGFuZ2xlOjpGb3JtYXRJRCBhbmdsZUZvcm1h
dElkKSBjb24KICAgICByZXR1cm4gZ2V0RGlzcGxheSgpLT5nZXRQaXhlbEZvcm1hdChhbmdsZUZv
cm1hdElkKTsKIH0KIAorY29uc3QgbXRsOjpGb3JtYXRDYXBzICZDb250ZXh0TXRsOjpnZXROYXRp
dmVGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IG10bEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZ2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKG10bEZvcm1hdCk7Cit9CisKIC8v
IFNlZSBtdGw6OkZvcm1hdFRhYmxlOjpnZXRWZXJ0ZXhGb3JtYXQoKQogY29uc3QgbXRsOjpWZXJ0
ZXhGb3JtYXQgJkNvbnRleHRNdGw6OmdldFZlcnRleEZvcm1hdChhbmdsZTo6Rm9ybWF0SUQgYW5n
bGVGb3JtYXRJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB0aWdodGx5UGFja2VkKSBjb25zdApAQCAtMTMzOCwxMSArMTU2Miw2IEBA
IGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZDb250ZXh0TXRsOjpnZXRWZXJ0ZXhGb3JtYXQoYW5n
bGU6OkZvcm1hdElEIGFuZ2xlRm9ybWF0CiAgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0VmVy
dGV4Rm9ybWF0KGFuZ2xlRm9ybWF0SWQsIHRpZ2h0bHlQYWNrZWQpOwogfQogCi1jb25zdCBtdGw6
OkZvcm1hdENhcHMgJkNvbnRleHRNdGw6OmdldE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXQgbXRsRm9ybWF0KSBjb25zdAotewotICAgIHJldHVybiBnZXREaXNwbGF5KCktPmdldE5hdGl2
ZUZvcm1hdENhcHMobXRsRm9ybWF0KTsKLX0KLQogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpn
ZXRJbmNvbXBsZXRlVGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHR5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlICoqdGV4dHVyZU91dCkKQEAgLTEzNjIsNiArMTU4MSwyMiBAQCB2b2lkIENvbnRleHRN
dGw6OmVuZFJlbmRlckVuY29kaW5nKG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIp
CiAKICAgICAvLyBSZXNvbHZlIHZpc2liaWxpdHkgcmVzdWx0cwogICAgIG1PY2NsdXNpb25RdWVy
eVBvb2wucmVzb2x2ZVZpc2liaWxpdHlSZXN1bHRzKHRoaXMpOworCisgICAgbUN1cnJlbnRUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlcnMuY2xlYXIoKTsKKworICAgIC8vIFJlc2V0IHNlcmlhbHMgZm9y
IFhGQiBpZiBhY3RpdmUuCisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
VW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAq
ZXhlY3V0YWJsZSA9IG1TdGF0ZS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOworICAgICAgICBBU1NF
UlQoZXhlY3V0YWJsZSk7CisgICAgICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCA9IGV4ZWN1dGFi
bGUtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQ291bnQoKTsKKworICAgICAgICBUcmFuc2Zv
cm1GZWVkYmFja010bCAqdHJhbnNmb3JtRmVlZGJhY2tNdGwgPQorICAgICAgICAgICAgbXRsOjpH
ZXRJbXBsKG1TdGF0ZS5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKSk7CisKKyAgICAgICAg
cG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlclNldCh4ZmJCdWZmZXJDb3VudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja010
bC0+Z2V0QnVmZmVySGFuZGxlcygpKTsKKyAgICB9CiB9CiAKIHZvaWQgQ29udGV4dE10bDo6ZW5k
RW5jb2RpbmcoYm9vbCBmb3JjZVNhdmVSZW5kZXJQYXNzQ29udGVudCkKQEAgLTEzOTAsNyArMTYy
NSw3IEBAIHZvaWQgQ29udGV4dE10bDo6ZW5kRW5jb2RpbmcoYm9vbCBmb3JjZVNhdmVSZW5kZXJQ
YXNzQ29udGVudCkKIAogdm9pZCBDb250ZXh0TXRsOjpmbHVzaENvbW1hbmRCdWZlcigpCiB7Ci0g
ICAgaWYgKCFtQ21kQnVmZmVyLnJlYWR5KCkpCisgICAgaWYgKCFtQ21kQnVmZmVyLnZhbGlkKCkp
CiAgICAgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ1NCw2ICsxNjg5LDI3IEBAIG10
bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKkNvbnRleHRNdGw6OmdldFJlbmRlclBhc3NDb21tYW5k
RW5jb2Rlcihjb25zdCBtdGw6OlJlCiAgICAgLy8gTmVlZCB0byByZS1hcHBseSBldmVyeXRoaW5n
IG9uIG5leHQgZHJhdyBjYWxsLgogICAgIG1EaXJ0eUJpdHMuc2V0KCk7CiAKKyAgICBpZDxNVExE
ZXZpY2U+IG1ldGFsRGV2aWNlID0gZ2V0RGlzcGxheSgpLT5nZXRNZXRhbERldmljZSgpOworICAg
IGlmIChtdGw6OkRldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRTaXplKG1ldGFsRGV2aWNlKSkK
KyAgICB7CisgICAgICAgIE1UTFJlbmRlclBhc3NEZXNjcmlwdG9yICpvYmpDRGVzYyA9IFtNVExS
ZW5kZXJQYXNzRGVzY3JpcHRvciByZW5kZXJQYXNzRGVzY3JpcHRvcl07CisgICAgICAgIGRlc2Mu
Y29udmVydFRvTWV0YWxEZXNjKG9iakNEZXNjKTsKKyAgICAgICAgTlNVSW50ZWdlciBtYXhTaXpl
ID0gbXRsOjpHZXRNYXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhtZXRhbERldmlj
ZSk7CisgICAgICAgIE5TVUludGVnZXIgcmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICBD
b21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJlbmRlclBhc3NEZXNjcmlwdG9yKG9iakNEZXNjLCB0
aGlzLCBtZXRhbERldmljZSk7CisgICAgICAgIGlmIChyZW5kZXJUYXJnZXRTaXplID4gbWF4U2l6
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKyAgICAg
ICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlRoaXMgc2V0IG9mIHJlbmRl
ciB0YXJnZXRzIHJlcXVpcmVzICVsdSBieXRlcyBvZiAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQCJwaXhlbCBzdG9yYWdlLiBUaGlzIGRldmljZSBzdXBwb3J0
cyAlbHUgYnl0ZXMuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZW5kZXJUYXJnZXRTaXplLCBtYXhTaXplXTsKKyAgICAgICAgICAgIE5TRXJyb3IgKmVyciA9
IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIk1UTFZhbGlkYXRpb25FcnJvciIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTotMQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOkB7TlNMb2NhbGl6ZWRE
ZXNjcmlwdGlvbktleSA6IGVycm9yU3RyaW5nfV07CisgICAgICAgICAgICB0aGlzLT5oYW5kbGVF
cnJvcihlcnIsIF9fRklMRV9fLCBBTkdMRV9GVU5DVElPTiwgX19MSU5FX18pOworICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gJm1SZW5kZXJFbmNv
ZGVyLnJlc3RhcnQoZGVzYyk7CiB9CiAKQEAgLTE0NjcsMTEgKzE3MjMsMTIgQEAgbXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2RlciAqQ29udGV4dE10bDo6Z2V0VGV4dHVyZVJlbmRlckNvbW1hbmRFbmNv
ZGVyKAogCiAgICAgbXRsOjpSZW5kZXJQYXNzRGVzYyBycERlc2M7CiAKLSAgICBycERlc2MuY29s
b3JBdHRhY2htZW50c1swXS50ZXh0dXJlICAgICAgPSB0ZXh0dXJlVGFyZ2V0OwotICAgIHJwRGVz
Yy5jb2xvckF0dGFjaG1lbnRzWzBdLmxldmVsICAgICAgICA9IGluZGV4LmdldE5hdGl2ZUxldmVs
KCk7Ci0gICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0uc2xpY2VPckRlcHRoID0gaW5kZXgu
aGFzTGF5ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7Ci0gICAgcnBEZXNjLm51bUNv
bG9yQXR0YWNobWVudHMgICAgICAgICAgICAgID0gMTsKLSAgICBycERlc2Muc2FtcGxlQ291bnQg
ICAgICAgICAgICAgICAgICAgICAgPSB0ZXh0dXJlVGFyZ2V0LT5zYW1wbGVzKCk7CisgICAgcnBE
ZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT50ZXh0dXJlID0gdGV4dHVyZVRh
cmdldDsKKyAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5yZW5kZXJUYXJnZXQtPmxldmVs
ICAgPSBpbmRleC5nZXROYXRpdmVMZXZlbCgpOworICAgIHJwRGVzYy5jb2xvckF0dGFjaG1lbnRz
WzBdLnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0KKyAgICAgICAgaW5kZXguaGFzTGF5ZXIo
KSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7CisgICAgcnBEZXNjLm51bUNvbG9yQXR0YWNo
bWVudHMgPSAxOworICAgIHJwRGVzYy5zYW1wbGVDb3VudCAgICAgICAgID0gdGV4dHVyZVRhcmdl
dC0+c2FtcGxlcygpOwogCiAgICAgcmV0dXJuIGdldFJlbmRlclBhc3NDb21tYW5kRW5jb2Rlcihy
cERlc2MpOwogfQpAQCAtMTUzNiwxMiArMTc5MywxMiBAQCBtdGw6OkNvbXB1dGVDb21tYW5kRW5j
b2RlciAqQ29udGV4dE10bDo6Z2V0Q29tcHV0ZUNvbW1hbmRFbmNvZGVyKCkKIAogdm9pZCBDb250
ZXh0TXRsOjplbnN1cmVDb21tYW5kQnVmZmVyUmVhZHkoKQogewotICAgIGlmICghbUNtZEJ1ZmZl
ci5yZWFkeSgpKQorICAgIGlmICghbUNtZEJ1ZmZlci52YWxpZCgpKQogICAgIHsKICAgICAgICAg
bUNtZEJ1ZmZlci5yZXN0YXJ0KCk7CiAgICAgfQogCi0gICAgQVNTRVJUKG1DbWRCdWZmZXIucmVh
ZHkoKSk7CisgICAgQVNTRVJUKG1DbWRCdWZmZXIudmFsaWQoKSk7CiB9CiAKIHZvaWQgQ29udGV4
dE10bDo6dXBkYXRlVmlld3BvcnQoRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyTXRsLApAQCAt
MTY3Nyw3ICsxOTM0LDcgQEAgdm9pZCBDb250ZXh0TXRsOjpvbkRyYXdGcmFtZUJ1ZmZlckNoYW5n
ZWRTdGF0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICB9CiB9CiAKLXZvaWQgQ29u
dGV4dE10bDo6b25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
V2luZG93U3VyZmFjZU10bCAqYmFja2J1ZmZlcikKK3ZvaWQgQ29udGV4dE10bDo6b25CYWNrYnVm
ZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFjZU10bFByb3RvY29s
ICpiYWNrYnVmZmVyKQogewogICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgICA9IGdldFN0
YXRlKCk7CiAgICAgRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyID0gbXRsOjpHZXRJbXBsKGds
U3RhdGUuZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOwpAQCAtMTY4NiwxMCArMTk0MywxMyBAQCB2b2lk
IENvbnRleHRNdGw6Om9uQmFja2J1ZmZlclJlc2l6ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIFdpbmRvd1N1cmZhY2VNdAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgdXBkYXRl
Vmlld3BvcnQoZnJhbWVidWZmZXIsIGdsU3RhdGUuZ2V0Vmlld3BvcnQoKSwgZ2xTdGF0ZS5nZXRO
ZWFyUGxhbmUoKSwKKyAgICAgICAgICAgICAgICAgICBnbFN0YXRlLmdldEZhclBsYW5lKCkpOwor
ICAgIHVwZGF0ZVNjaXNzb3IoZ2xTdGF0ZSk7CiAgICAgb25EcmF3RnJhbWVCdWZmZXJDaGFuZ2Vk
U3RhdGUoY29udGV4dCwgZnJhbWVidWZmZXIsIHRydWUpOwogfQogCi1hbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgUXVlcnlNdGwgKnF1ZXJ5KQorYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpvbk9jY2x1c2lv
blF1ZXJ5QmVnYW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkK
IHsKICAgICBBU1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IG51bGxwdHIpOwogICAgIG1PY2NsdXNp
b25RdWVyeSA9IHF1ZXJ5OwpAQCAtMTcwNiw3ICsxOTY2LDcgQEAgYW5nbGU6OlJlc3VsdCBDb250
ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5QmVnaW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
IFF1ZXIKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KLXZvaWQgQ29u
dGV4dE10bDo6b25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
UXVlcnlNdGwgKnF1ZXJ5KQordm9pZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5RW5kZWQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKIHsKICAgICBBU1NF
UlQobU9jY2x1c2lvblF1ZXJ5ID09IHF1ZXJ5KTsKIApAQCAtMTcxOCw3ICsxOTc4LDcgQEAgdm9p
ZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5RW5kKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBRdWVyeU10bCAqcXVlcnkKIAogICAgIG1PY2NsdXNpb25RdWVyeSA9IG51bGxwdHI7CiB9
Ci12b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCit2b2lkIENvbnRleHRNdGw6Om9uT2NjbHVz
aW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpx
dWVyeSkKIHsKICAgICBpZiAocXVlcnktPmdldEFsbG9jYXRlZFZpc2liaWxpdHlPZmZzZXRzKCku
ZW1wdHkoKSkKICAgICB7CkBAIC0xNzI2LDcgKzE5ODYsNyBAQCB2b2lkIENvbnRleHRNdGw6Om9u
T2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10
bCAqcQogICAgIH0KICAgICBpZiAobU9jY2x1c2lvblF1ZXJ5ID09IHF1ZXJ5KQogICAgIHsKLSAg
ICAgICAgb25PY2NsdXNpb25RdWVyeUVuZChjb250ZXh0LCBxdWVyeSk7CisgICAgICAgIG9uT2Nj
bHVzaW9uUXVlcnlFbmRlZChjb250ZXh0LCBxdWVyeSk7CiAgICAgfQogICAgIG1PY2NsdXNpb25R
dWVyeVBvb2wuZGVhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KHRoaXMsIHF1ZXJ5KTsKIH0KQEAgLTE3NzAs
MjAgKzIwMzAsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnN0YXJ0T2NjbHVzaW9uUXVl
cnlJblJlbmRlclBhc3MoUXVlcnlNdGwgKnF1ZXJ5LCBib29sCiAgICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOwogfQogCi12b2lkIENvbnRleHRNdGw6Om9uVHJhbnNmb3JtRmVlZGJh
Y2tBY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRyYW5zZm9ybUZlZWRiYWNrTXRs
ICp4ZmIpCi17Ci0gICAgLy8gTk9URShocWxlKTogV2UgaGF2ZSB0byBlbmQgY3VycmVudCByZW5k
ZXIgcGFzcyB0byBlbmFibGUgc3luY2hyb25pemF0aW9uIGJlZm9yZSBYRkIKLSAgICAvLyBidWZm
ZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25zaWRlciBhIGJldHRlciBhcHBy
b2FjaC4KLSAgICBlbmRFbmNvZGluZyh0cnVlKTsKLX0KLQotdm9pZCBDb250ZXh0TXRsOjpvblRy
YW5zZm9ybUZlZWRiYWNrSW5hY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRyYW5z
Zm9ybUZlZWRiYWNrTXRsICp4ZmIpCi17Ci0gICAgLy8gTk9URShocWxlKTogV2UgaGF2ZSB0byBl
bmQgY3VycmVudCByZW5kZXIgcGFzcyB0byBlbmFibGUgc3luY2hyb25pemF0aW9uIGJlZm9yZSBY
RkIKLSAgICAvLyBidWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25zaWRl
ciBhIGJldHRlciBhcHByb2FjaC4KLSAgICBlbmRFbmNvZGluZyh0cnVlKTsKLX0KLQogdm9pZCBD
b250ZXh0TXRsOjpxdWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2
ZW50LCB1aW50NjRfdCB2YWx1ZSkKIHsKICAgICBlbnN1cmVDb21tYW5kQnVmZmVyUmVhZHkoKTsK
QEAgLTE4NDIsMTAgKzIwODgsMTkgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERy
YXcoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdykKIHsKICAg
ICBBU1NFUlQobVByb2dyYW0pOwogCisgICAgLy8gVXBkYXRlIHRyYW5zZm9ybSBmZWVkYmFjayBv
ZmZzZXRzIG9uIGV2ZXJ5IGRyYXcgY2FsbC4KKyAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZpcnN0VmVydGV4
ICE9IC0xKTsKKyAgICAgICAgbVhmYkJhc2VWZXJ0ZXggICAgICAgICAgICAgPSBmaXJzdFZlcnRl
eDsKKyAgICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2UgPSB2ZXJ0ZXhPckluZGV4Q291
bnQ7CisgICAgICAgIGludmFsaWRhdGVEcml2ZXJVbmlmb3JtcygpOworICAgIH0KKwogICAgIC8v
IGluc3RhbmNlcz0wIG1lYW5zIG5vIGluc3RhbmNlZCBkcmF3LgogICAgIEdMc2l6ZWkgaW5zdGFu
Y2VDb3VudCA9IGluc3RhbmNlcyA/IGluc3RhbmNlcyA6IDE7CiAKQEAgLTE4NjIsMjAgKzIxMTcs
NiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKICAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURpcnR5QWN0aXZlVGV4dHVyZXMo
Y29udGV4dCkpOwogICAgIH0KIAotICAgIGlmIChtRGlydHlCaXRzLnRlc3QoRElSVFlfQklUX1JB
U1RFUklaRVJfRElTQ0FSRCkpCi0gICAgewotICAgICAgICBpZiAoZ2V0U3RhdGUoKS5pc1RyYW5z
Zm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
SWYgWEZCIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHJlc2V0IHJlbmRlciBwYXNzIHNpbmNlIHdlIGNv
dWxkIHVzZSBhIGR1bW15IHJlbmRlcgotICAgICAgICAgICAgLy8gdGFyZ2V0IGlmIG9ubHkgWEZC
IGlzIG5lZWRlZC4KLSAgICAgICAgICAgIGludmFsaWRhdGVTdGF0ZShjb250ZXh0KTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludmFsaWRhdGVSZW5k
ZXJQaXBlbGluZSgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgaWYgKCFtUmVuZGVyRW5jb2Rl
ci52YWxpZCgpKQogICAgIHsKICAgICAgICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZwpAQCAtMTg4
NCw3ICsyMTI1LDExIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6c2V0dXBEcmF3KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAogCiAgICAgaWYgKG1EaXJ0eUJpdHMudGVzdChESVJUWV9C
SVRfRFJBV19GUkFNRUJVRkZFUikpCiAgICAgewotICAgICAgICBBTkdMRV9UUlkoaGFuZGxlRGly
dHlSZW5kZXJQYXNzKGNvbnRleHQpKTsKKyAgICAgICAgLy8gU3RhcnQgbmV3IHJlbmRlciBjb21t
YW5kIGVuY29kZXIKKyAgICAgICAgQU5HTEVfTVRMX1RSWSh0aGlzLCBtRHJhd0ZyYW1lYnVmZmVy
LT5lbnN1cmVSZW5kZXJQYXNzU3RhcnRlZChjb250ZXh0KSk7CisKKyAgICAgICAgLy8gcmUtYXBw
bHkgZXZlcnl0aGluZworICAgICAgICBpbnZhbGlkYXRlU3RhdGUoY29udGV4dCk7CiAgICAgfQog
CiAgICAgaWYgKG1PY2NsdXNpb25RdWVyeSAmJiBtT2NjbHVzaW9uUXVlcnlQb29sLmdldE51bVJl
bmRlclBhc3NBbGxvY2F0ZWRRdWVyaWVzKCkgPT0gMCkKQEAgLTE4OTQsMTcgKzIxMzksMTEgQEAg
YW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCiAgICAgICAgIEFOR0xFX1RSWShzdGFydE9jY2x1c2lvblF1ZXJ5SW5SZW5kZXJQYXNz
KG1PY2NsdXNpb25RdWVyeSwgZmFsc2UpKTsKICAgICB9CiAKLSAgICBib29sIGlzUGlwZWxpbmVE
ZXNjQ2hhbmdlZDsKLSAgICBBTkdMRV9UUlkoY2hlY2tJZlBpcGVsaW5lQ2hhbmdlZChjb250ZXh0
LCBtb2RlLCB4ZmJQYXNzLCAmaXNQaXBlbGluZURlc2NDaGFuZ2VkKSk7CisgICAgYm9vbCBjaGFu
Z2VkUGlwZWxpbmU7CisgICAgQU5HTEVfVFJZKGNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29udGV4
dCwgbW9kZSwgbVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhbmdlZFBpcGVsaW5lKSk7CiAKICAgICBib29s
IHVuaWZvcm1CdWZmZXJzRGlydHkgPSBmYWxzZTsKLQotICAgIGlmIChJc1RyYW5zZm9ybUZlZWRi
YWNrT25seShnZXRTdGF0ZSgpKSkKLSAgICB7Ci0gICAgICAgIC8vIEZpbHRlciBvdXQgdW5uZWVk
ZWQgZGlydHkgYml0cwotICAgICAgICBmaWx0ZXJPdXRYRkJPbmx5RGlydHlCaXRzKGNvbnRleHQp
OwotICAgIH0KLQogICAgIGZvciAoc2l6ZV90IGJpdCA6IG1EaXJ0eUJpdHMpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGJpdCkKQEAgLTE5NTMsOCArMjE5MiwxMCBAQCBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAg
ICAgIGNhc2UgRElSVFlfQklUX1VOSUZPUk1fQlVGRkVSU19CSU5ESU5HOgogICAgICAgICAgICAg
ICAgIHVuaWZvcm1CdWZmZXJzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBESVJUWV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM6Cisg
ICAgICAgICAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcnNFbXVsYXRpb24oY29udGV4dCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBESVJUWV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEOgotICAgICAgICAg
ICAgICAgIC8vIEFscmVhZHkgaGFuZGxlZC4KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKQEAgLTE5NjIs
ODIgKzIyMDMsMzEgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERyYXcoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoeGZiUGFz
cyAmJiAhbURpcnR5Qml0cy50ZXN0KERJUlRZX0JJVF9EUklWRVJfVU5JRk9STVMpKQotICAgIHsK
LSAgICAgICAgLy8gSWYgaGFuZGxlRGlydHlEcml2ZXJVbmlmb3JtcygpIHdhcyBub3QgY2FsbGVk
IGFuZCB0aGlzIGlzIFhGQiBwYXNzLCB3ZSBzdGlsbCBuZWVkIHRvCi0gICAgICAgIC8vIHVwZGF0
ZSBYRkIgcmVsYXRlZCB1bmlmb3JtcwotICAgICAgICBBTkdMRV9UUlkoCi0gICAgICAgICAgICBm
aWxsRHJpdmVyWEZCVW5pZm9ybXMoZmlyc3RWZXJ0ZXgsIHZlcnRleE9ySW5kZXhDb3VudCwgLyoq
IHNraXBwZWRJbnN0YW5jZXMgKi8gMCkpOwotICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0
ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgp
OwotICAgIH0KLQogICAgIG1EaXJ0eUJpdHMucmVzZXQoKTsKIAotICAgIEFOR0xFX1RSWShtUHJv
Z3JhbS0+c2V0dXBEcmF3KGNvbnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5l
RGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BpcGVsaW5lRGVzY0No
YW5nZWQsIHRleHR1cmVDaGFuZ2VkLCB1bmlmb3JtQnVmZmVyc0RpcnR5KSk7Ci0KLSAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Ci19Ci0KLXZvaWQgQ29udGV4dE10bDo6ZmlsdGVy
T3V0WEZCT25seURpcnR5Qml0cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBB
U1NFUlQoSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoZ2V0U3RhdGUoKSkpOwotCi0gICAgQVNTRVJU
KG1SZW5kZXJFbmNvZGVyLnJlbmRlclBhc3NEZXNjKCkuY29sb3JBdHRhY2htZW50c1swXS50ZXh0
dXJlID09IG1EdW1teVhGQlJlbmRlclRleHR1cmUpOwotCi0gICAgLy8gSW4gdHJhbnNmb3JtIGZl
ZWRiYWNrIG9ubHkgcGFzcywgb25seSB2ZXJ0ZXggc2hhZGVyJ3MgcmVsYXRlZCBzdGF0ZXMgYXJl
IG5lZWRlZC4KLSAgICBjb25zdGV4cHIgc2l6ZV90IGtVbm5lZWRlZEJpdHMgPQotICAgICAgICBh
bmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0RFUFRIX1NURU5DSUxfREVTQykgfAotICAgICAg
ICBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0RFUFRIX0JJQVMpIHwgYW5nbGU6OkJpdDxz
aXplX3Q+KERJUlRZX0JJVF9TVEVOQ0lMX1JFRikgfAotICAgICAgICBhbmdsZTo6Qml0PHNpemVf
dD4oRElSVFlfQklUX0JMRU5EX0NPTE9SKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRf
VklFV1BPUlQpIHwKLSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9TQ0lTU09S
KSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfQ1VMTF9NT0RFKSB8Ci0gICAgICAgIGFu
Z2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfV0lORElORyk7Ci0KLSAgICBtRGlydHlCaXRzICY9
IH5rVW5uZWVkZWRCaXRzOwotfQotCi1hbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURp
cnR5UmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBpZiAoIUlz
VHJhbnNmb3JtRmVlZGJhY2tPbmx5KG1TdGF0ZSkpCisgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNr
RHJhdykKICAgICB7Ci0gICAgICAgIC8vIFN0YXJ0IG5ldyByZW5kZXIgY29tbWFuZCBlbmNvZGVy
Ci0gICAgICAgIEFOR0xFX01UTF9UUlkodGhpcywgbURyYXdGcmFtZWJ1ZmZlci0+ZW5zdXJlUmVu
ZGVyUGFzc1N0YXJ0ZWQoY29udGV4dCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICAvLyBYRkIgaXMgYWN0aXZlIGFuZCByYXN0ZXJpemF0aW9uIGlzIGRpc2FibGVkLiBVc2UgZHVt
bXkgcmVuZGVyIHRhcmdldC4KLSAgICAgICAgLy8gV2UgY3VycmVudGx5IG5lZWQgdG8gZW5kIHRo
ZSByZW5kZXIgcGFzcyB3aGVuIFhGQiBpcyBhY3RpdmF0ZWQvZGVhY3RpdmF0ZWQgc28gdXNpbmcK
LSAgICAgICAgLy8gYSBzbWFsbCBkdW1teSByZW5kZXIgdGFyZ2V0IHdvdWxkIG1ha2UgdGhlIHJl
bmRlciBwYXNzIGVuZGluZyB2ZXJ5IGNoZWFwLgotICAgICAgICBpZiAoIW1EdW1teVhGQlJlbmRl
clRleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6
Ok1ha2UyRFRleHR1cmUodGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0UGl4ZWxGb3JtYXQoYW5nbGU6OkZvcm1hdElEOjpSOEc4QjhBOF9V
Tk9STSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEsIDEsIDEsIHRydWUsIGZhbHNlLCAmbUR1bW15WEZCUmVuZGVyVGV4dHVyZSkpOwotICAgICAg
ICB9Ci0gICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIgPSBnZXRUZXh0
dXJlUmVuZGVyQ29tbWFuZEVuY29kZXIoCi0gICAgICAgICAgICBtRHVtbXlYRkJSZW5kZXJUZXh0
dXJlLAotICAgICAgICAgICAgbXRsOjpJbWFnZU5hdGl2ZUluZGV4OjpGcm9tQmFzZVplcm9HTElu
ZGV4KGdsOjpJbWFnZUluZGV4OjpNYWtlMkQoMCkpKTsKLSAgICAgICAgZW5jb2Rlci0+c2V0Q29s
b3JMb2FkQWN0aW9uKE1UTExvYWRBY3Rpb25Eb250Q2FyZSwgTVRMQ2xlYXJDb2xvcigpLCAwKTsK
LSAgICAgICAgZW5jb2Rlci0+c2V0Q29sb3JTdG9yZUFjdGlvbihNVExTdG9yZUFjdGlvbkRvbnRD
YXJlKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgZW5jb2Rlci0+c2V0TGFiZWwoQCJUcmFu
c2Zvcm1GZWVkYmFja09ubHlQYXNzIik7Ci0jZW5kaWYKKyAgICAgICAgbXRsOjpSZW5kZXJVdGls
cyAmdXRpbHMgPSBnZXREaXNwbGF5KCktPmdldFV0aWxzKCk7CisgICAgICAgIGFuZ2xlOjpSZXN1
bHQgcmVzdWx0ID0KKyAgICAgICAgICAgIHV0aWxzLmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrUFNP
KGNvbnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYyk7CisgICAgICAg
IEFOR0xFX1VOVVNFRF9WQVJJQUJMRShyZXN1bHQpOworICAgICAgICBhc3NlcnQocmVzdWx0ID09
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKTsKKyAgICAgICAgY2hhbmdlZFBpcGVsaW5lID0gdHJ1
ZTsKICAgICB9CiAKLSAgICAvLyByZS1hcHBseSBldmVyeXRoaW5nCi0gICAgaW52YWxpZGF0ZVN0
YXRlKGNvbnRleHQpOworICAgIEFOR0xFX1RSWShtUHJvZ3JhbS0+c2V0dXBEcmF3KGNvbnRleHQs
ICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYywgY2hhbmdlZFBpcGVsaW5lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVDaGFuZ2VkLCB1bmlmb3Jt
QnVmZmVyc0RpcnR5LCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpKTsKIAogICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5k
bGVEaXJ0eUFjdGl2ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewotICAg
IGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgID0gbVN0YXRlOwotICAgIGNvbnN0IGdsOjpQcm9n
cmFtICpwcm9ncmFtID0gZ2xTdGF0ZS5nZXRQcm9ncmFtKCk7CisgICAgY29uc3QgZ2w6OlN0YXRl
ICZnbFN0YXRlICAgICAgICAgICAgICAgID0gbVN0YXRlOworICAgIGNvbnN0IGdsOjpQcm9ncmFt
RXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4
ZWN1dGFibGUoKTsKIAogICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0dXJlc0NhY2hlICZ0ZXh0dXJl
cyAgICAgPSBnbFN0YXRlLmdldEFjdGl2ZVRleHR1cmVzQ2FjaGUoKTsKLSAgICBjb25zdCBnbDo6
QWN0aXZlVGV4dHVyZU1hc2sgJmFjdGl2ZVRleHR1cmVzID0gcHJvZ3JhbS0+Z2V0RXhlY3V0YWJs
ZSgpLmdldEFjdGl2ZVNhbXBsZXJzTWFzaygpOworICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0dXJl
TWFzayAmYWN0aXZlVGV4dHVyZXMgPSBleGVjdXRhYmxlLT5nZXRBY3RpdmVTYW1wbGVyc01hc2so
KTsKIAogICAgIGZvciAoc2l6ZV90IHRleHR1cmVVbml0IDogYWN0aXZlVGV4dHVyZXMpCiAgICAg
ewpAQCAtMjA2Nyw2ICsyMjU3LDcgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVE
aXJ0eURlZmF1bHRBdHRyaWJzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgIH0KIAog
ICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKKyAgICBtUmVuZGVyRW5jb2Rlci5z
ZXRGcmFnbWVudERhdGEobURlZmF1bHRBdHRyaWJ1dGVzLCBtdGw6OmtEZWZhdWx0QXR0cmlic0Jp
bmRpbmdJbmRleCk7CiAgICAgbVJlbmRlckVuY29kZXIuc2V0VmVydGV4RGF0YShtRGVmYXVsdEF0
dHJpYnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4KTsKIAogICAgIG1EaXJ0
eURlZmF1bHRBdHRyaWJzTWFzay5yZXNldCgpOwpAQCAtMjEyMCw5ICsyMzExLDYgQEAgYW5nbGU6
OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAogICAgIH0KICAgICBtRHJpdmVyVW5pZm9ybXMuY292ZXJhZ2VNYXNr
ID0gY292ZXJhZ2VNYXNrOwogCi0gICAgQU5HTEVfVFJZKAotICAgICAgICBmaWxsRHJpdmVyWEZC
VW5pZm9ybXMoZHJhd0NhbGxGaXJzdFZlcnRleCwgdmVydGljZXNQZXJJbnN0YW5jZSwgLyoqIHNr
aXBwZWRJbnN0YW5jZXMgKi8gMCkpOwotCiAgICAgQVNTRVJUKG1SZW5kZXJFbmNvZGVyLnZhbGlk
KCkpOwogICAgIG1SZW5kZXJFbmNvZGVyLnNldEZyYWdtZW50RGF0YShtRHJpdmVyVW5pZm9ybXMs
IG10bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsKICAgICBtUmVuZGVyRW5jb2Rlci5z
ZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5n
SW5kZXgpOwpAQCAtMjEzMCwyNSArMjMxOCwzMyBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
OmhhbmRsZURpcnR5RHJpdmVyVW5pZm9ybXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCi1hbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmZpbGxEcml2ZXJYRkJVbmlmb3JtcyhHTGludCBkcmF3Q2FsbEZpcnN0VmVydGV4
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgdmVydGljZXNQZXJJbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5jZXMpCithbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OmhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNF
bXVsYXRpb24oCisgICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgZ2w6OlRy
YW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdldFN0YXRlKCkuZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVjdXRhYmxlICpl
eGVjdXRhYmxlID0gbVN0YXRlLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CisgICAgQVNTRVJUKGV4
ZWN1dGFibGUpOwogCi0gICAgbURyaXZlclVuaWZvcm1zLnhmYkFjdGl2ZVVucGF1c2VkID0gZ2V0
U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKTsKLSAgICBpZiAoIXRy
YW5zZm9ybUZlZWRiYWNrIHx8ICFtRHJpdmVyVW5pZm9ybXMueGZiQWN0aXZlVW5wYXVzZWQpCisg
ICAgaWYgKCFleGVjdXRhYmxlLT5oYXNUcmFuc2Zvcm1GZWVkYmFja091dHB1dCgpIHx8ICFtU3Rh
dGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KIAotICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJW
ZXJ0aWNlc1BlckRyYXcgPSB2ZXJ0aWNlc1Blckluc3RhbmNlOworICAgIFRyYW5zZm9ybUZlZWRi
YWNrTXRsICp0cmFuc2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1wbChtU3RhdGUuZ2V0Q3Vy
cmVudFRyYW5zZm9ybUZlZWRiYWNrKCkpOworICAgIHNpemVfdCBidWZmZXJDb3VudCAgICAgICAg
ICAgICAgICAgICAgICAgICA9IGV4ZWN1dGFibGUtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
Q291bnQoKTsKKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVm
ZmVyTXRsICo+ICZidWZmZXJIYW5kbGVzID0KKyAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2tNdGwt
PmdldEJ1ZmZlckhhbmRsZXMoKTsKIAotICAgIFRyYW5zZm9ybUZlZWRiYWNrTXRsICp0cmFuc2Zv
cm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgZm9y
IChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJ1ZmZlckNvdW50OyArK2J1
ZmZlckluZGV4KQorICAgIHsKKyAgICAgICAgQnVmZmVyTXRsICpidWZmZXJIYW5kbGUgPSBidWZm
ZXJIYW5kbGVzW2J1ZmZlckluZGV4XTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlckhhbmRsZSk7Cisg
ICAgICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKKyAgICAgICAgbVJlbmRlckVu
Y29kZXIuc2V0QnVmZmVyRm9yV3JpdGUoCisgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4LCBidWZmZXJIYW5kbGUtPmdldEN1cnJlbnRCdWZmZXIoKSwgMCwKKyAgICAgICAgICAgIG10
bDo6a1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgKHVpbnQzMl90KWJ1ZmZlckluZGV4
KTsKKyAgICB9CiAKLSAgICByZXR1cm4gdHJhbnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlck9m
ZnNldHModGhpcywgZHJhd0NhbGxGaXJzdFZlcnRleCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNQZXJJbnN0YW5jZSAqIHNraXBwZWRJ
bnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJCdWZmZXJPZmZzZXRzKTsKKyAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6aGFuZGxl
RGlydHlEZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKQEAgLTIx
NTksMTMgKzIzNTUsMTMgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURl
cHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXgKICAgICBtdGw6OkRlcHRo
U3RlbmNpbERlc2MgZHNEZXNjICAgICAgICAgICAgICA9IG1EZXB0aFN0ZW5jaWxEZXNjOwogICAg
IGNvbnN0IG10bDo6UmVuZGVyUGFzc0Rlc2MgJnJlbmRlclBhc3NEZXNjID0gbVJlbmRlckVuY29k
ZXIucmVuZGVyUGFzc0Rlc2MoKTsKIAotICAgIGlmICghcmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRh
Y2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQu
dGV4dHVyZSgpKQogICAgIHsKICAgICAgICAgZHNEZXNjLmRlcHRoV3JpdGVFbmFibGVkICAgID0g
ZmFsc2U7CiAgICAgICAgIGRzRGVzYy5kZXB0aENvbXBhcmVGdW5jdGlvbiA9IE1UTENvbXBhcmVG
dW5jdGlvbkFsd2F5czsKICAgICB9CiAKLSAgICBpZiAoIXJlbmRlclBhc3NEZXNjLnN0ZW5jaWxB
dHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNo
bWVudC50ZXh0dXJlKCkpCiAgICAgewogICAgICAgICBkc0Rlc2MuZnJvbnRGYWNlU3RlbmNpbC5y
ZXNldCgpOwogICAgICAgICBkc0Rlc2MuYmFja0ZhY2VTdGVuY2lsLnJlc2V0KCk7CkBAIC0yMTk2
LDggKzIzOTIsOCBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5RGVwdGhC
aWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogCiBhbmdsZTo6UmVzdWx0IENvbnRleHRN
dGw6OmNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1p
dGl2ZU1vZGUgcHJpbWl0aXZlTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqaXNQaXBlbGluZURlc2NDaGFuZ2VkKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgeGJmUGFz
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
ICpwaXBlbGluZURlc2NDaGFuZ2VkKQogewogICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxp
ZCgpKTsKICAgICBtdGw6OlByaW1pdGl2ZVRvcG9sb2d5Q2xhc3MgdG9wb2xvZ3lDbGFzcyA9IG10
bDo6R2V0UHJpbWl0aXZlVG9wb2xvZ3lDbGFzcyhwcmltaXRpdmVNb2RlKTsKQEAgLTIyMTYsMjQg
KzI0MTIsMTAgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFu
Z2VkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICByZW5kZXJQYXNzRGVzYy5w
b3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhtQmxlbmREZXNjLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbVJlbmRlclBpcGVs
aW5lRGVzYy5vdXRwdXREZXNjcmlwdG9yKTsKIAotICAgICAgICBpZiAoeGZiUGFzcykKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gSW4gWEZCIHBhc3MsIHdlIGRpc2FibGUgZnJhZ21lbnQgc2hh
ZGVyLgotICAgICAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9
IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gSWYgWEZCIGlzIG5vdCBhY3RpdmUgYW5kIHJhc3Rlcml6
ZXIgZGlzY2FyZCBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIGVtdWxhdGUgdGhlCi0gICAgICAgICAg
ICAvLyBkaXNjYXJkLiBCZWNhdXNlIGluIHRoaXMgY2FzZSwgdmVydGV4IHNoYWRlciBtaWdodCB3
cml0ZSB0byBzdGFnZSBvdXRwdXQgdmFsdWVzIGFuZAotICAgICAgICAgICAgLy8gTWV0YWwgZG9l
c24ndCBhbGxvdyByYXN0ZXJpemF0aW9uIHRvIGJlIGRpc2FibGVkLgotICAgICAgICAgICAgbVJl
bmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9Ci0gICAgICAgICAgICAgICAgbXRs
OjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2FyZDsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJQaXBlbGluZURl
c2MucmFzdGVyaXphdGlvblR5cGUgPSBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6
RW5hYmxlZDsKLSAgICAgICAgfQogICAgICAgICBtUmVuZGVyUGlwZWxpbmVEZXNjLmlucHV0UHJp
bWl0aXZlVG9wb2xvZ3kgPSB0b3BvbG9neUNsYXNzOworICAgICAgICBtUmVuZGVyUGlwZWxpbmVE
ZXNjLnJhc3Rlcml6YXRpb25UeXBlID0KKyAgICAgICAgICAgIChtU3RhdGUuaXNSYXN0ZXJpemVy
RGlzY2FyZEVuYWJsZWQoKSA/IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpFbXVs
YXRlZERpc2NhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpFbmFibGVkKTsKICAgICAg
ICAgbVJlbmRlclBpcGVsaW5lRGVzYy5hbHBoYVRvQ292ZXJhZ2VFbmFibGVkID0gbVN0YXRlLmlz
U2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpOwogICAgICAgICBtUmVuZGVyUGlwZWxpbmVE
ZXNjLmVtdWxhdGVDb3ZlcmFnZU1hc2sgICAgPSBtU3RhdGUuaXNTYW1wbGVDb3ZlcmFnZUVuYWJs
ZWQoKTsKIApAQCAtMjI0MSw3ICsyNDIzLDcgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpj
aGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAg
ICAgICAgbURyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RhdGUoKS5nZXRFbmFibGVkRHJhd0J1ZmZlcnMo
KSk7CiAgICAgfQogCi0gICAgKmlzUGlwZWxpbmVEZXNjQ2hhbmdlZCA9IHJwcENoYW5nZTsKKyAg
ICAqcGlwZWxpbmVEZXNjQ2hhbmdlZCA9IHJwcENoYW5nZTsKIAogICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oCmluZGV4
IGIwMGRlMWIyZDljODczNTdhZWFlNWFmYjAxYTY3MzQyNTI0MDY2YjQuLjI0MTcxMjIwYzVhNjUw
YWVhMzhjOTI0ZTRhZmQyNGFkYWFmMzk2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlN
dGwuaApAQCAtNTIsNiArNTIsMTAgQEAgY2xhc3MgRGlzcGxheU10bCA6IHB1YmxpYyBEaXNwbGF5
SW1wbAogCiAgICAgZWdsOjpFcnJvciB3YWl0Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0KSBvdmVycmlkZTsKICAgICBlZ2w6OkVycm9yIHdhaXROYXRpdmUoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsIEVHTGludCBlbmdpbmUpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgdmFs
aWRhdGVDbGllbnRCdWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1
dGVNYXAgJmF0dHJpYnMpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgU3VyZmFjZUltcGwgKmNyZWF0
ZVdpbmRvd1N1cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93LApA
QCAtOTYsMTEgKzEwMCw2IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwK
IAogICAgIGJvb2wgaXNWYWxpZE5hdGl2ZVdpbmRvdyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRv
dykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBlZ2w6OkVycm9yIHZhbGlkYXRlQ2xpZW50QnVmZmVy
KGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKSBj
b25zdCBvdmVycmlkZTsKLQogICAgIGVnbDo6Q29uZmlnU2V0IGdlbmVyYXRlQ29uZmlncygpIG92
ZXJyaWRlOwogCiAgICAgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0
OwpAQCAtMTY1LDYgKzE2NCw4IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUlt
cGwKICAgICB2b2lkIGluaXRpYWxpemVFeHRlbnNpb25zKCkgY29uc3Q7CiAgICAgdm9pZCBpbml0
aWFsaXplVGV4dHVyZUNhcHMoKSBjb25zdDsKICAgICB2b2lkIGluaXRpYWxpemVGZWF0dXJlcygp
OworICAgIHZvaWQgaW5pdGlhbGl6ZUxpbWl0YXRpb25zKCk7CisKICAgICBhbmdsZTo6UmVzdWx0
IGluaXRpYWxpemVTaGFkZXJMaWJyYXJ5KCk7CiAKICAgICBtdGw6OkF1dG9PYmpDUHRyPGlkPE1U
TERldmljZT4+IG1NZXRhbERldmljZSA9IG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlN
dGwubW0KaW5kZXggMjQ3ZDc2YTgwOTI1NDk4N2NlYzU0YTI2ODcwMDQ5OWU1NjdiZGQzZC4uYzE1
OWMwNWIwYTBiY2FjNDg1NWFkZTI5NzY0MTAxZmQ3ZWEzMzJlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwu
bW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL0Rpc3BsYXlNdGwubW0KQEAgLTgsMTIgKzgsMTQgQEAKIAogI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9zeXN0ZW1f
dXRpbHMuaCIKICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaCIKICNpbmNsdWRl
ICJsaWJBTkdMRS9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvRGlzcGxheS5oIgogI2lu
Y2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9n
bHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9Db250ZXh0TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJm
YWNlU3VyZmFjZU10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZh
Y2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmgiCiAj
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgpAQCAtMjIsOSAr
MjQsNjIgQEAKIAogI2luY2x1ZGUgIkVHTC9lZ2xleHQuaCIKIAorI2lmIGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCitj
b25zdGV4cHIgY2hhciBrQU5HTEVQcmVmZXJyZWREZXZpY2VFbnZbXSA9ICJBTkdMRV9QUkVGRVJS
RURfREVWSUNFIjsKKyNlbmRpZgorY29uc3RleHByIGNoYXIga0FOR0xFVHJhbnNmb3JtRmVlZGJh
Y2tFbnZbXSA9ICJBTkdMRV9NRVRBTF9YRkJfRU5BQkxFIjsKKwogbmFtZXNwYWNlIHJ4CiB7CiAK
K3N0YXRpYyBFR0xpbnQgR2V0RGVwdGhTaXplKEdMaW50IGludGVybmFsZm9ybWF0KQoreworICAg
IHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgICBjYXNlIEdMX1NURU5DSUxf
SU5ERVg4OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UMTY6CisgICAgICAgICAgICByZXR1cm4gMTY7CisgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UMjQ6CisgICAgICAgICAgICByZXR1cm4gMjQ7CisgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgcmV0dXJuIDMyOworICAgICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICAgICAg
Y2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4OgorICAgICAgICAgICAgcmV0dXJuIDI0OworICAgICAg
ICBjYXNlIEdMX0RFUFRIMzJGX1NURU5DSUw4OgorICAgICAgICAgICAgcmV0dXJuIDMyOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gICAgVU5SRUFDSEFCTEUoaW50ZXJuYWxmb3Jt
YXQpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgRUdMaW50IEdl
dFN0ZW5jaWxTaXplKEdMaW50IGludGVybmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpCisgICAgeworICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgorICAgICAg
ICAgICAgcmV0dXJuIDg7CisgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQyNDoKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09F
UzoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDMyRjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RF
TkNJTDg6CisgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgY2FzZSBHTF9ERVBUSDMyRl9T
VEVOQ0lMODoKKyAgICAgICAgICAgIHJldHVybiA4OworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgLy8gICAgVU5SRUFDSEFCTEUoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCiBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKIHsKICAg
ICAvLyBXZSBvbmx5IHN1cHBvcnQgbWFjb3MgMTAuMTMrIGFuZCAxMSBmb3Igbm93LiBTaW5jZSB0
aGV5IGFyZSByZXF1aXJlbWVudHMgZm9yIE1ldGFsIDIuMC4KQEAgLTU3LDcgKzExMiw3IEBAIHN0
cnVjdCBEZWZhdWx0U2hhZGVyQXN5bmNJbmZvTXRsCiB9OwogCiBEaXNwbGF5TXRsOjpEaXNwbGF5
TXRsKGNvbnN0IGVnbDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKLSAgICA6IERpc3BsYXlJbXBsKHN0
YXRlKSwgbVV0aWxzKHRoaXMpLCBtR2xzbGFuZ0luaXRpYWxpemVkKGZhbHNlKQorICAgIDogRGlz
cGxheUltcGwoc3RhdGUpLCBtU3RhdGVDYWNoZShtRmVhdHVyZXMpLCBtVXRpbHModGhpcykKIHt9
CiAKIERpc3BsYXlNdGw6On5EaXNwbGF5TXRsKCkge30KQEAgLTc4LDEwICsxMzMsMjcgQEAgYW5n
bGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXplSW1wbChlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXkpCiB7CiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICB7Ci0gICAgICAgIG1NZXRhbERl
dmljZSA9IFtNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNlKCkgQU5HTEVfTVRMX0FVVE9SRUxF
QVNFXTsKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xF
X1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBhbmdsZVBy
ZWZlcnJlZERldmljZSA9IGFuZ2xlOjpHZXRFbnZpcm9ubWVudFZhcihrQU5HTEVQcmVmZXJyZWRE
ZXZpY2VFbnYpOworICAgICAgICBpZiAoYW5nbGVQcmVmZXJyZWREZXZpY2UgIT0gIiIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIE5TQXJyYXk8aWQ8TVRMRGV2aWNlPj4gKmRldmljZXMgPSBbTVRM
Q29weUFsbERldmljZXMoKSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICAgICAgICAgZm9y
IChpZDxNVExEZXZpY2U+IGRldmljZSBpbiBkZXZpY2VzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChbZGV2aWNlLm5hbWUubG93ZXJjYXNlU3RyaW5nCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250YWluc1N0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6
YW5nbGVQcmVmZXJyZWREZXZpY2UuY19zdHIoKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAubG93ZXJjYXNlU3RyaW5nXSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiVXNpbmcgTWV0YWwgRGV2aWNlOiAlQCIsIFtkZXZp
Y2UgbmFtZV0pOworICAgICAgICAgICAgICAgICAgICBtTWV0YWxEZXZpY2UgPSBbZGV2aWNlIEFO
R0xFX01UTF9BVVRPUkVMRUFTRV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIGlm
ICghbU1ldGFsRGV2aWNlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6U3RvcDsKKyAgICAgICAgICAgIG1NZXRhbERldmljZSA9IFtNVExDcmVhdGVTeXN0ZW1E
ZWZhdWx0RGV2aWNlKCkgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKICAgICAgICAgfQogCiAgICAg
ICAgIG1NZXRhbERldmljZVZlbmRvcklkID0gbXRsOjpHZXREZXZpY2VWZW5kb3JJZChtTWV0YWxE
ZXZpY2UpOwpAQCAtODksMTIgKzE2MSwxMyBAQCBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6Omlu
aXRpYWxpemVJbXBsKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICAgICAgbUNtZFF1ZXVlLnNl
dChbW21NZXRhbERldmljZS5nZXQoKSBuZXdDb21tYW5kUXVldWVdIEFOR0xFX01UTF9BVVRPUkVM
RUFTRV0pOwogCiAgICAgICAgIG1DYXBzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQorI2lmIEFOR0xF
X0VOQUJMRV9NRVRBTF9TUElSVgogICAgICAgICBpZiAoIW1HbHNsYW5nSW5pdGlhbGl6ZWQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEdsc2xhbmdJbml0aWFsaXplKCk7CiAgICAgICAgICAgICBt
R2xzbGFuZ0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAg
aWYgKCFtU3RhdGUuZmVhdHVyZXNBbGxEaXNhYmxlZCkKICAgICAgICAgewpAQCAtMTIwLDEyICsx
OTMsMTMgQEAgdm9pZCBEaXNwbGF5TXRsOjp0ZXJtaW5hdGUoKQogICAgIG1DYXBzSW5pdGlhbGl6
ZWQgPSBmYWxzZTsKIAogICAgIG1NZXRhbERldmljZVZlbmRvcklkID0gMDsKLQorI2lmIEFOR0xF
X0VOQUJMRV9NRVRBTF9TUElSVgogICAgIGlmIChtR2xzbGFuZ0luaXRpYWxpemVkKQogICAgIHsK
ICAgICAgICAgR2xzbGFuZ1JlbGVhc2UoKTsKICAgICAgICAgbUdsc2xhbmdJbml0aWFsaXplZCA9
IGZhbHNlOwogICAgIH0KKyNlbmRpZgogfQogCiBib29sIERpc3BsYXlNdGw6OnRlc3REZXZpY2VM
b3N0KCkKQEAgLTE3MSw2ICsyNDUsMTUgQEAgZWdsOjpFcnJvciBEaXNwbGF5TXRsOjp3YWl0Q2xp
ZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgIHJldHVybiBlZ2w6Ok5vRXJyb3Io
KTsKIH0KIAorZWdsOjpFcnJvciBEaXNwbGF5TXRsOjp2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25z
dCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJp
YnV0ZU1hcCAmYXR0cmlicykgY29uc3QKK3sKKyAgICAvLyBUT0RPOiBGaWxsIG91dCBwcm9wZXJs
eQorICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKwogZWdsOjpFcnJvciBEaXNwbGF5TXRs
Ojp3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgZW5naW5lKQog
ewogICAgIFVOSU1QTEVNRU5URUQoKTsKQEAgLTE4Nyw3ICsyNzAsOCBAQCBTdXJmYWNlSW1wbCAq
RGlzcGxheU10bDo6Y3JlYXRlV2luZG93U3VyZmFjZShjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAm
c3RhdGUsCiBTdXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlUGJ1ZmZlclN1cmZhY2UoY29u
c3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQogewot
ICAgIHJldHVybiBuZXcgUEJ1ZmZlclN1cmZhY2VNdGwodGhpcywgc3RhdGUsIGF0dHJpYnMpOwor
ICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3VyZmFjZUltcGwg
Kj4oMCk7CiB9CiAKIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJvbUNs
aWVudEJ1ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCkBAIC0xOTUsMTUgKzI3
OSw3IEBAIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1
ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKIHsKLSAgICBzd2l0Y2ggKGJ1ZnR5
cGUpCi0gICAgewotICAgICAgICBjYXNlIEVHTF9JT1NVUkZBQ0VfQU5HTEU6Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IElPU3VyZmFjZVN1cmZhY2VNdGwodGhpcywgc3RhdGUsIGNsaWVudEJ1ZmZl
ciwgYXR0cmlicyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBuZXcgSU9TdXJmYWNlU3VyZmFjZU10bCh0aGlzLCBzdGF0ZSwgY2xpZW50QnVmZmVyLCBh
dHRyaWJzKTsKIH0KIAogU3VyZmFjZUltcGwgKkRpc3BsYXlNdGw6OmNyZWF0ZVBpeG1hcFN1cmZh
Y2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLApAQCAtMjQwLDE3ICszMTYsMTIgQEAg
U3RyZWFtUHJvZHVjZXJJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVTdHJlYW1Qcm9kdWNlckQzRFRl
eHR1cmUoCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVNoYXJlR3JvdXBJbXBsICpEaXNwbGF5
TXRsOjpjcmVhdGVTaGFyZUdyb3VwKCkKLXsKLSAgICByZXR1cm4gbmV3IFNoYXJlR3JvdXBNdGwo
KTsKLX0KLQogZ2w6OlZlcnNpb24gRGlzcGxheU10bDo6Z2V0TWF4U3VwcG9ydGVkRVNWZXJzaW9u
KCkgY29uc3QKIHsKICAgICAvLyBOT1RFKGhxbGUpOiBTdXBwb3J0cyBHTEVTIDMuMCBvbiBpT1Mg
R1BVIGZhbWlseSA0KyBmb3Igbm93LgogICAgIGlmIChzdXBwb3J0c0VpdGhlckdQVUZhbWlseSg0
LCAxKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtdGw6OmtNYXhTdXBwb3J0ZWRHTFZlcnNpb247
CisgICAgICAgIHJldHVybiBnbDo6VmVyc2lvbigzLCAwKTsKICAgICB9CiAgICAgcmV0dXJuIGds
OjpWZXJzaW9uKDIsIDApOwogfQpAQCAtMjY1LDYgKzMzNiwxMSBAQCBFR0xTeW5jSW1wbCAqRGlz
cGxheU10bDo6Y3JlYXRlU3luYyhjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKICAg
ICByZXR1cm4gbmV3IEVHTFN5bmNNdGwoYXR0cmlicyk7CiB9CiAKK1NoYXJlR3JvdXBJbXBsICpE
aXNwbGF5TXRsOjpjcmVhdGVTaGFyZUdyb3VwKCkKK3sKKyAgICByZXR1cm4gbmV3IFNoYXJlR3Jv
dXBJbXBsKCk7Cit9CisKIGVnbDo6RXJyb3IgRGlzcGxheU10bDo6bWFrZUN1cnJlbnQoZWdsOjpE
aXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZ2w6
OlN1cmZhY2UgKmRyYXdTdXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlZ2w6OlN1cmZhY2UgKnJlYWRTdXJmYWNlLApAQCAtMzI2LDcgKzQwMiw3IEBAIGVnbDo6Q29u
ZmlnU2V0IERpc3BsYXlNdGw6OmdlbmVyYXRlQ29uZmlncygpCiAgICAgY29uZmlnLnRyYW5zcGFy
ZW50VHlwZSA9IEVHTF9OT05FOwogCiAgICAgLy8gUGJ1ZmZlcgotICAgIGNvbmZpZy5iaW5kVG9U
ZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfMkQ7CisgICAgY29uZmlnLmJpbmRUb1RleHR1cmVU
YXJnZXQgPSBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEU7CiAgICAgY29uZmlnLm1heFBCdWZm
ZXJXaWR0aCAgICAgPSA0MDk2OwogICAgIGNvbmZpZy5tYXhQQnVmZmVySGVpZ2h0ICAgID0gNDA5
NjsKICAgICBjb25maWcubWF4UEJ1ZmZlclBpeGVscyAgICA9IDQwOTYgKiA0MDk2OwpAQCAtMzYx
LDQxICs0MzcsMTggQEAgZWdsOjpDb25maWdTZXQgRGlzcGxheU10bDo6Z2VuZXJhdGVDb25maWdz
KCkKIAogICAgIGNvbmZpZy5jb2xvckNvbXBvbmVudFR5cGUgPSBFR0xfQ09MT1JfQ09NUE9ORU5U
X1RZUEVfRklYRURfRVhUOwogCi0gICAgY29uc3RleHByIGludCBzYW1wbGVzU3VwcG9ydGVkW10g
PSB7MCwgNH07CisgICAgLy8gQnVmZmVyIHNpemVzCisgICAgY29uZmlnLnJlZFNpemUgICAgPSA4
OworICAgIGNvbmZpZy5ncmVlblNpemUgID0gODsKKyAgICBjb25maWcuYmx1ZVNpemUgICA9IDg7
CisgICAgY29uZmlnLmFscGhhU2l6ZSAgPSA4OworICAgIGNvbmZpZy5idWZmZXJTaXplID0gY29u
ZmlnLnJlZFNpemUgKyBjb25maWcuZ3JlZW5TaXplICsgY29uZmlnLmJsdWVTaXplICsgY29uZmln
LmFscGhhU2l6ZTsKIAotICAgIGZvciAoaW50IHNhbXBsZXMgOiBzYW1wbGVzU3VwcG9ydGVkKQot
ICAgIHsKLSAgICAgICAgY29uZmlnLnNhbXBsZXMgICAgICAgPSBzYW1wbGVzOwotICAgICAgICBj
b25maWcuc2FtcGxlQnVmZmVycyA9IChzYW1wbGVzID09IDApID8gMCA6IDE7Ci0KLSAgICAgICAg
Ly8gQnVmZmVyIHNpemVzCi0gICAgICAgIGNvbmZpZy5yZWRTaXplICAgID0gODsKLSAgICAgICAg
Y29uZmlnLmdyZWVuU2l6ZSAgPSA4OwotICAgICAgICBjb25maWcuYmx1ZVNpemUgICA9IDg7Ci0g
ICAgICAgIGNvbmZpZy5hbHBoYVNpemUgID0gODsKLSAgICAgICAgY29uZmlnLmJ1ZmZlclNpemUg
PSBjb25maWcucmVkU2l6ZSArIGNvbmZpZy5ncmVlblNpemUgKyBjb25maWcuYmx1ZVNpemUgKyBj
b25maWcuYWxwaGFTaXplOwotCi0gICAgICAgIC8vIFdpdGggRFMKLSAgICAgICAgY29uZmlnLmRl
cHRoU2l6ZSAgID0gMjQ7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDg7Ci0KLSAgICAg
ICAgY29uZmlncy5hZGQoY29uZmlnKTsKLQotICAgICAgICAvLyBXaXRoIEQKLSAgICAgICAgY29u
ZmlnLmRlcHRoU2l6ZSAgID0gMjQ7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDA7Ci0g
ICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAgICAgLy8gV2l0aCBTCi0gICAgICAg
IGNvbmZpZy5kZXB0aFNpemUgICA9IDA7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDg7
Ci0gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAgICAgLy8gTm8gRFMKLSAgICAg
ICAgY29uZmlnLmRlcHRoU2l6ZSAgID0gMDsKLSAgICAgICAgY29uZmlnLnN0ZW5jaWxTaXplID0g
MDsKLSAgICAgICAgY29uZmlncy5hZGQoY29uZmlnKTsKLSAgICB9CisgICAgLy8gVGVzdHMgbGlr
ZSBkRVFQLUdMRVMyLmZ1bmN0aW9uYWwuZGVwdGhfcmFuZ2UuKiBhc3N1bWUgRUdMX0RFUFRIX1NJ
WkUgaXMgcHJvcGVybHkgc2V0IGV2ZW4gaWYKKyAgICAvLyByZW5kZXJDb25maWcgYXR0cmlidXRl
cyBhcmUgc2V0IHRvIGdsdTo6UmVuZGVyQ29uZmlnOjpET05UX0NBUkUKKyAgICBjb25maWcuZGVw
dGhTaXplICAgPSBHZXREZXB0aFNpemUoY29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAg
Y29uZmlnLnN0ZW5jaWxTaXplID0gR2V0U3RlbmNpbFNpemUoY29uZmlnLmRlcHRoU3RlbmNpbEZv
cm1hdCk7CisgICAgY29uZmlncy5hZGQoY29uZmlnKTsKIAogICAgIHJldHVybiBjb25maWdzOwog
fQpAQCAtNDA5LDI2ICs0NjIsNiBAQCBib29sIERpc3BsYXlNdGw6OmlzVmFsaWROYXRpdmVXaW5k
b3coRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3cpIGNvbnN0CiAgICAgfQogfQogCi1lZ2w6OkVy
cm9yIERpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyKGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFR0xlbnVtIGJ1ZnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVHTENsaWVudEJ1ZmZlciBjbGllbnRCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJz
KSBjb25zdAotewotICAgIHN3aXRjaCAoYnVmdHlwZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgRUdM
X0lPU1VSRkFDRV9BTkdMRToKLSAgICAgICAgICAgIGlmICghSU9TdXJmYWNlU3VyZmFjZU10bDo6
VmFsaWRhdGVBdHRyaWJ1dGVzKGNsaWVudEJ1ZmZlciwgYXR0cmlicykpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQXR0cmlidXRlKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRBdHRyaWJ1dGUo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOwotfQotCiBzdGQ6OnN0cmluZyBE
aXNwbGF5TXRsOjpnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICBBTkdMRV9N
VExfT0JKQ19TQ09QRQpAQCAtNTEyLDEwICs1NDUsMTYgQEAgdm9pZCBEaXNwbGF5TXRsOjplbnN1
cmVDYXBzSW5pdGlhbGl6ZWQoKSBjb25zdAogICAgIG1OYXRpdmVDYXBzLm1heFJlbmRlcmJ1ZmZl
clNpemUgICA9IG1OYXRpdmVDYXBzLm1heDJEVGV4dHVyZVNpemU7CiAgICAgbU5hdGl2ZUNhcHMu
bWluQWxpYXNlZFBvaW50U2l6ZSAgID0gMTsKICAgICAvLyBOT1RFKGhxbGUpOiBNZXRhbCBoYXMg
c29tZSBwcm9ibGVtcyBkcmF3aW5nIGJpZyBwb2ludCBzaXplIGV2ZW4gdGhvdWdoCi0gICAgLy8g
TWV0YWwtRmVhdHVyZS1TZXQtVGFibGVzLnBkZiBzYXlzIHRoYXQgbWF4IHN1cHBvcnRlZCBwb2lu
dCBzaXplIGlzIDUxMS4gV2UgbGltaXQgaXQgdG8gNjQgZm9yCi0gICAgLy8gbm93LgotICAgIC8v
IGh0dHA6Ly9hbmdsZWJ1Zy5jb20vNDgxNgotICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRQb2lu
dFNpemUgPSA2NDsKKyAgICAvLyBNZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmIHNheXMgdGhh
dCBtYXggc3VwcG9ydGVkIHBvaW50IHNpemUgaXMgNTExLiBXZSBsaW1pdCBpdCB0byAyNTUKKyAg
ICAvLyBvbiBJbnRlbCBhbmQgNjQgb24gQU1EIGZvciBub3cuCisgICAgaWYgKFttTWV0YWxEZXZp
Y2UuZ2V0KCkubmFtZSByYW5nZU9mU3RyaW5nOkAiSW50ZWwiXS5sb2NhdGlvbiAhPSBOU05vdEZv
dW5kKQorICAgIHsKKyAgICAgICAgbU5hdGl2ZUNhcHMubWF4QWxpYXNlZFBvaW50U2l6ZSA9IDI1
NTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU5hdGl2ZUNhcHMubWF4QWxpYXNl
ZFBvaW50U2l6ZSA9IDY0OworICAgIH0KIAogICAgIG1OYXRpdmVDYXBzLm1pbkFsaWFzZWRMaW5l
V2lkdGggPSAxLjBmOwogICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRMaW5lV2lkdGggPSAxLjBm
OwpAQCAtNjE1LDYgKzY1NCw5IEBAIHZvaWQgRGlzcGxheU10bDo6ZW5zdXJlQ2Fwc0luaXRpYWxp
emVkKCkgY29uc3QKICAgICBtTmF0aXZlQ2Fwcy5tYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRl
Q29tcG9uZW50cyA9CiAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM7CiAKKyAgICAvLyBHTF9PRVNfZ2V0X3Byb2dyYW1f
YmluYXJ5CisgICAgbU5hdGl2ZUNhcHMucHJvZ3JhbUJpbmFyeUZvcm1hdHMucHVzaF9iYWNrKEdM
X1BST0dSQU1fQklOQVJZX0FOR0xFKTsKKwogICAgIC8vIEdMX0FQUExFX2NsaXBfZGlzdGFuY2UK
ICAgICBtTmF0aXZlQ2Fwcy5tYXhDbGlwRGlzdGFuY2VzID0gODsKIApAQCAtNjQ3LDYgKzY4OSwx
NSBAQCB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNpb25zKCkgY29uc3QKICAgICBt
TmF0aXZlRXh0ZW5zaW9ucy50ZXh0dXJlQm9yZGVyQ2xhbXBPRVMgID0gZmFsc2U7ICAvLyBub3Qg
aW1wbGVtZW50ZWQgeWV0CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMudHJhbnNsYXRlZFNoYWRlclNv
dXJjZSA9IHRydWU7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZGlzY2FyZEZyYW1lYnVmZmVyICAg
ICA9IHRydWU7CisgICAgLy8gTm90IGltcGxlbWVudGVkIGJ1dCBleHBvc2UKKyAgICBtTmF0aXZl
RXh0ZW5zaW9ucy50ZXh0dXJlUmVjdGFuZ2xlID0gdHJ1ZTsKKworICAgIC8vIEVYVF9tdWx0aXNh
bXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKKyAgICBpZiAobUZlYXR1cmVzLmFsbG93TXVsdGlzYW1w
bGVTdG9yZUFuZFJlc29sdmUuZW5hYmxlZCAmJgorICAgICAgICBtRmVhdHVyZXMuaGFzRGVwdGhB
dXRvUmVzb2x2ZS5lbmFibGVkICYmIG1GZWF0dXJlcy5oYXNTdGVuY2lsQXV0b1Jlc29sdmUuZW5h
YmxlZCkKKyAgICB7CisgICAgICAgIG1OYXRpdmVFeHRlbnNpb25zLm11bHRpc2FtcGxlZFJlbmRl
clRvVGV4dHVyZSA9IHRydWU7CisgICAgfQogCiAgICAgLy8gRW5hYmxlIEVYVF9ibGVuZF9taW5t
YXgKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5ibGVuZE1pbk1heCA9IHRydWU7CkBAIC02NjIsOCAr
NzEzLDggQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0CiAg
ICAgbU5hdGl2ZUV4dGVuc2lvbnMuc2VtYXBob3JlICAgPSBmYWxzZTsKICAgICBtTmF0aXZlRXh0
ZW5zaW9ucy5zZW1hcGhvcmVGZCA9IGZhbHNlOwogCi0gICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5z
dGFuY2VkQXJyYXlzQU5HTEUgPSBtRmVhdHVyZXMuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcu
ZW5hYmxlZDsKLSAgICBtTmF0aXZlRXh0ZW5zaW9ucy5pbnN0YW5jZWRBcnJheXNFWFQgICA9IG1O
YXRpdmVFeHRlbnNpb25zLmluc3RhbmNlZEFycmF5c0FOR0xFOworICAgIG1OYXRpdmVFeHRlbnNp
b25zLmluc3RhbmNlZEFycmF5c0FOR0xFID0gdHJ1ZTsKKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5p
bnN0YW5jZWRBcnJheXNFWFQgICA9IHRydWU7CiAKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5yb2J1
c3RCdWZmZXJBY2Nlc3NCZWhhdmlvciA9IGZhbHNlOwogCkBAIC02ODYsNiArNzM3LDkgQEAgdm9p
ZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0CiAKICAgICBtTmF0aXZl
RXh0ZW5zaW9ucy5lbGVtZW50SW5kZXhVaW50T0VTID0gdHJ1ZTsKIAorICAgIC8vIEdMX09FU19n
ZXRfcHJvZ3JhbV9iaW5hcnkKKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5nZXRQcm9ncmFtQmluYXJ5
T0VTID0gdHJ1ZTsKKwogICAgIC8vIEdMX0FQUExFX2NsaXBfZGlzdGFuY2UKICAgICBtTmF0aXZl
RXh0ZW5zaW9ucy5jbGlwRGlzdGFuY2VBUFBMRSA9IHRydWU7CiAKQEAgLTcxMywxMSArNzY3LDE3
IEBAIHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZVRleHR1cmVDYXBzKCkgY29uc3QKIAogICAg
IC8vIFJlLXZlcmlmeSB0ZXh0dXJlIGV4dGVuc2lvbnMuCiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMu
c2V0VGV4dHVyZUV4dGVuc2lvblN1cHBvcnQobU5hdGl2ZVRleHR1cmVDYXBzKTsKLQorICAgIC8v
IE1vZGlmeSBleHRlbnNpb25zIGJhc2VkIG9mZiBvZiBzdXBwb3J0CiAgICAgLy8gRGlzYWJsZSBh
bGwgZGVwdGggYnVmZmVyIGFuZCBzdGVuY2lsIGJ1ZmZlciByZWFkYmFjayBleHRlbnNpb25zIHVu
dGlsIHdlIG5lZWQgdGhlbQogICAgIG1OYXRpdmVFeHRlbnNpb25zLnJlYWREZXB0aE5WICAgICAg
ICAgPSBmYWxzZTsKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5yZWFkU3RlbmNpbE5WICAgICAgID0g
ZmFsc2U7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZGVwdGhCdWZmZXJGbG9hdDJOViA9IGZhbHNl
OworICAgIG1OYXRpdmVFeHRlbnNpb25zLnRleHR1cmVDb21wcmVzc2lvbkFTVENMRFJLSFIgJj0g
c3VwcG9ydHNJT1NHUFVGYW1pbHkoMik7Cit9CisKK3ZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6
ZUxpbWl0YXRpb25zKCkKK3sKKyAgICBtTmF0aXZlTGltaXRhdGlvbnMubm9WZXJ0ZXhBdHRyaWJ1
dGVBbGlhc2luZyA9IHRydWU7CiB9CiAKIHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZUZlYXR1
cmVzKCkKQEAgLTc3OSw2ICs4MzksOSBAQCB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVGZWF0
dXJlcygpCiAgICAgQU5HTEVfRkVBVFVSRV9DT05ESVRJT04oKCZtRmVhdHVyZXMpLCBhbGxvd1Nl
cGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IWlzT1NYICYmICFpc0NhdGFseXN0ICYmICFpc1NpbXVsYXRvcik7CiAKKyAgICBtRmVhdHVyZXMu
ZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQgPQorICAgICAgICBhbmdsZTo6R2V0RW52
aXJvbm1lbnRWYXIoa0FOR0xFVHJhbnNmb3JtRmVlZGJhY2tFbnYpWzBdID09ICcxJzsKKwogICAg
IGFuZ2xlOjpQbGF0Zm9ybU1ldGhvZHMgKnBsYXRmb3JtID0gQU5HTEVQbGF0Zm9ybUN1cnJlbnQo
KTsKICAgICBwbGF0Zm9ybS0+b3ZlcnJpZGVGZWF0dXJlc010bChwbGF0Zm9ybSwgJm1GZWF0dXJl
cyk7CiAKQEAgLTc4Nyw2ICs4NTAsMjcgQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRmVh
dHVyZXMoKQogCiBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6OmluaXRpYWxpemVTaGFkZXJMaWJy
YXJ5KCkKIHsKKyAgICAjaWZkZWYgQU5HTEVfTUVUQUxfWENPREVfQlVJTERTX1NIQURFUlMKKyAg
ICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVyQXN5
bmNJbmZvTXRsKTsKKyAgICAgICAgCisgICAgCisgICAgICAgIE5TU3RyaW5nICpwYXRoID0gW05T
QnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdLmJ1bmRsZVBh
dGg7CisgICAgICAgIE5TRXJyb3IgKiBlcnJvciA9IG51bGxwdHI7CisgICAgICAgIG1EZWZhdWx0
U2hhZGVyc0FzeW5jSW5mby0+ZGVmYXVsdFNoYWRlcnMgPSBbZ2V0TWV0YWxEZXZpY2UoKSBuZXdE
ZWZhdWx0TGlicmFyeVdpdGhCdW5kbGU6W05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOnBhdGhdIGVy
cm9yOiZlcnJvcl07CisKKyAgICAgICAgaWYgKGVycm9yICYmICFtRGVmYXVsdFNoYWRlcnNBc3lu
Y0luZm8tPmRlZmF1bHRTaGFkZXJzKQorICAgICAgICB7CisgICAgICAgICAgICBBTkdMRV9NVExf
T0JKQ19TQ09QRQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigpIDw8ICJJbnRl
cm5hbCBlcnJvcjogbmV3RGVmYXVsdExpYnJhcnlXaXRoQnVuZGxlIGZhaWxlZC4gIiA8PCBlcnJv
ci5sb2NhbGl6ZWREZXNjcmlwdGlvbi5VVEY4U3RyaW5nOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLT5kZWZhdWx0U2hhZGVyc0NvbXBpbGVFcnJv
ciA9IHN0ZDo6bW92ZShlcnJvcik7CisgICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
U3RvcDsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgbURlZmF1bHRTaGFk
ZXJzQXN5bmNJbmZvLT5jb21waWxlZCA9IHRydWU7CisgICAgICAgIAorICAgICNlbHNlCiAgICAg
bURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVyQXN5bmNJbmZv
TXRsKTsKIAogICAgIC8vIENyZWF0ZSByZWZlcmVuY2VzIHRvIGFzeW5jIGluZm8gc3RydWN0IHNp
bmNlIGl0IG1pZ2h0IGJlIHJlbGVhc2VkIGluIHRlcm1pbmF0ZSgpLCBidXQgdGhlCkBAIC04MTUs
NyArODk5LDcgQEAgYW5nbGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVyTGli
cmFyeSgpCiAKICAgICAgICAgW25zU291cmNlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CiAgICAg
fQotCisgICAgI2VuZGlmCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oCmluZGV4IGI0NThiZDkxYmJl
ZmFmNmRkYjIyMjY0Yjc4MWUzZTg2YzdjM2Y3ZTYuLjVlNWNjZTljNTFjZjhmYjJiZmJhZGZmMTU3
MzM1ZWE3M2EyNDk4YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5o
CkBAIC0yMywxMiArMjMsMTQgQEAgbmFtZXNwYWNlIG10bAogY2xhc3MgUmVuZGVyQ29tbWFuZEVu
Y29kZXI7CiB9ICAvLyBuYW1lc3BhY2UgbXRsCiBjbGFzcyBDb250ZXh0TXRsOwotY2xhc3MgV2lu
ZG93U3VyZmFjZU10bDsKK2NsYXNzIFN1cmZhY2VNdGw7CiAKIGNsYXNzIEZyYW1lYnVmZmVyTXRs
IDogcHVibGljIEZyYW1lYnVmZmVySW1wbAogewogICBwdWJsaWM6Ci0gICAgRnJhbWVidWZmZXJN
dGwoY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3RhdGUgJnN0YXRlLCBib29sIGZsaXBZLCBXaW5kb3dT
dXJmYWNlTXRsICpiYWNrYnVmZmVyKTsKKyAgICBleHBsaWNpdCBGcmFtZWJ1ZmZlck10bChjb25z
dCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBmbGlwWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNlTXRsUHJv
dG9jb2wgKmJhY2tidWZmZXIpOwogICAgIH5GcmFtZWJ1ZmZlck10bCgpIG92ZXJyaWRlOwogICAg
IHZvaWQgZGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CiAKQEAg
LTk3LDcgKzk5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXJNdGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJ
bXBsCiAKICAgICBnbDo6UmVjdGFuZ2xlIGdldENvbXBsZXRlUmVuZGVyQXJlYSgpIGNvbnN0Owog
ICAgIGludCBnZXRTYW1wbGVzKCkgY29uc3Q7Ci0gICAgV2luZG93U3VyZmFjZU10bCAqZ2V0QXR0
YWNoZWRCYWNrYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUJhY2tidWZmZXI7IH0KKyAgICBTdXJm
YWNlTXRsUHJvdG9jb2wgKmdldEF0dGFjaGVkQmFja2J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1C
YWNrYnVmZmVyOyB9CiAKICAgICBib29sIHJlbmRlclBhc3NIYXNTdGFydGVkKENvbnRleHRNdGwg
KmNvbnRleHRNdGwpIGNvbnN0OwogICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuc3Vy
ZVJlbmRlclBhc3NTdGFydGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKQEAgLTE2Miw2
ICsxNjQsMTAgQEAgY2xhc3MgRnJhbWVidWZmZXJNdGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJbXBs
CiAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5kZXJQYXNzRGVzYyAmZGVz
Yyk7CiAKKyAgICB2b2lkIG92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYg
JnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMQ2xlYXJDb2xvciBjbGVh
ckNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3IgKmNvbG9y
T3V0KTsKKwogICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlQ29sb3JSZW5kZXJUYXJnZXQoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsIHNpemVfdCBjb2xvckluZGV4R0wpOwogICAgIGFuZ2xlOjpS
ZXN1bHQgdXBkYXRlRGVwdGhSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
OwogICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlU3RlbmNpbFJlbmRlclRhcmdldChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCk7CkBAIC0xNjksMTEgKzE3NSwzNyBAQCBjbGFzcyBGcmFtZWJ1ZmZl
ck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6RnJhbWVidWZmZXJBdHRhY2htZW50ICphdHRhY2ht
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldE10bCAqKmNhY2hlZFJlbmRlclRhcmdldCk7CiAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGVp
dGhlciByZXR1cm5zIHRoZSByZW5kZXIgdGFyZ2V0J3MgdGV4dHVyZSBpdHNlbGYgaWYgdGhlIHRl
eHR1cmUgaXMgcmVhZGFibGUKKyAgICAvLyBvciBjcmVhdGUgYSBjb3B5IG9mIHRoYXQgdGV4dHVy
ZSB0aGF0IGlzIHJlYWRhYmxlIGlmIG5vdC4gVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNl
ZAorICAgIC8vIGZvciBwYWNrZWQgZGVwdGggc3RlbmNpbCB3aGVyZSByZWFkaW5nIHN0ZW5jaWwg
cmVxdWlyZXMgYSBzdGVuY2lsIHZpZXcuIEhvd2V2ZXIgaWYgYSB0ZXh0dXJlCisgICAgLy8gaGFz
IGJvdGggcmVuZGVyIHRhcmdldCwgcGl4ZWwgZm9ybWF0IHZpZXcgJiBzaGFkZXIgcmVhZGFibGUg
dXNhZ2UgZmxhZ3MsIHRoZXJlIHdpbGwgYmUKKyAgICAvLyBzb21lIGdsaXRjaGVzIGhhcHBlbiBp
biBNZXRhbCBmcmFtZXdvcmsuCisgICAgLy8gU28gdGhlIHNvbHV0aW9uIGlzIGNyZWF0aW5nIGEg
ZGVwdGggc3RlbmNpbCB0ZXh0dXJlIHdpdGhvdXQgcGl4ZWwgZm9ybWF0IHZpZXcgZmxhZyBidXQg
aGFzCisgICAgLy8gcmVuZGVyIHRhcmdldCBmbGFnLCB0aGVuIGR1cmluZyBibGl0dGluZyBwcm9j
ZXNzLCB0aGlzIHRleHR1cmUgaXMgY29waWVkIHRvIGFub3RoZXIKKyAgICAvLyBpbnRlcm1pZGlh
dGUgdGV4dHVyZSBoYXZpbmcgcGl4ZWwgZm9ybWF0IHZpZXcgZmxhZywgYnV0IG5vdCByZW5kZXIg
dGFyZ2V0IGZsYWcuCisgICAgYW5nbGU6OlJlc3VsdCBnZXRSZWFkYWJsZVZpZXdGb3JSZW5kZXJU
YXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICZydHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmcmVhZEFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXRsOjpUZXh0dXJlUmVmICpyZWFkYWJsZURlcHRoVmlldywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRleHR1cmVS
ZWYgKnJlYWRhYmxlU3RlbmNpbFZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xldmVsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpyZWFkYWJs
ZVZpZXdMYXllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6UmVjdGFuZ2xlICpyZWFkYWJsZVZpZXdBcmVhKTsKKwogICAgIGFuZ2xlOjpSZXN1
bHQgcmVhZFBpeGVsc1RvUEJPKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFj
a1BpeGVsc1BhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBS
ZW5kZXJUYXJnZXRNdGwgKnJlbmRlclRhcmdldCkgY29uc3Q7CiAKKyAgICBhbmdsZTo6UmVzdWx0
IHJlYWRQaXhlbHNUb0J1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclRhcmdldE10
bCAqcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcmV2ZXJzZVJvd09yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmRzdEFuZ2xlRm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdEJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RCdWZmZXJSb3dQaXRjaCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAq
ZHN0QnVmZmVyKSBjb25zdDsKKwogICAgIC8vIE5PVEU6IHdlIGNhbm5vdCB1c2UgUmVuZGVyVGFy
Z2V0Q2FjaGUgaGVyZSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBzZXBhcmF0ZQogICAgIC8v
IGRlcHRoICYgc3RlbmNpbCBhdHRhY2htZW50cyBhcyBvZiBub3cuIFNlcGFyYXRlIGRlcHRoICYg
c3RlbmNpbCBjb3VsZCBiZSB1c2VmdWwgdG8KICAgICAvLyBzYXZlIHNwYWNlcyBvbiBpT1MgZGV2
aWNlcy4gU2VlIGRvYy9QYWNrZWREZXB0aFN0ZW5jaWxTdXBwb3J0Lm1kLgpAQCAtMTg5LDggKzIy
MSwxMCBAQCBjbGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKICAg
ICAvLyBhcyBieSBhIGNvbXB1dGUgcGFzcy4KICAgICBib29sIG1SZW5kZXJQYXNzQ2xlYW5TdGFy
dCA9IGZhbHNlOwogCi0gICAgV2luZG93U3VyZmFjZU10bCAqbUJhY2tidWZmZXIgPSBudWxscHRy
OwotICAgIGNvbnN0IGJvb2wgbUZsaXBZICAgICAgICAgICAgID0gZmFsc2U7CisgICAgU3VyZmFj
ZU10bFByb3RvY29sICptQmFja2J1ZmZlciA9IG51bGxwdHI7CisgICAgY29uc3QgYm9vbCBtRmxp
cFkgICAgICAgICAgICAgICA9IGZhbHNlOworCisgICAgbXRsOjpCdWZmZXJSZWYgbVJlYWRQaXhl
bEJ1ZmZlcjsKIH07CiB9ICAvLyBuYW1lc3BhY2UgcngKIApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRs
Lm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0ZyYW1lQnVmZmVyTXRsLm1tCmluZGV4IDg0ZTQyMjcwYTcxNTMwNzc1YTcwODZkNzI3MjRkYmY5
MTljODRhZDcuLmQ3MWRlNzJkMmRkMjUxYjI4YmE2Y2M5ZmZmYzExNTMzYzAxZDAyZTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9GcmFtZUJ1ZmZlck10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwubW0KQEAgLTMzLDEyICszMywzMCBA
QCB2b2lkIE92ZXJyaWRlTVRMQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1
cmUsCiAgICAgKmNvbG9yT3V0ID0KICAgICAgICAgbXRsOjpFbXVsYXRlZEFscGhhQ2xlYXJDb2xv
cihjbGVhckNvbG9yLnRvTVRMQ2xlYXJDb2xvcigpLCB0ZXh0dXJlLT5nZXRDb2xvcldyaXRhYmxl
TWFzaygpKTsKIH0KKworY29uc3QgZ2w6OkludGVybmFsRm9ybWF0ICZHZXRSZWFkQXR0YWNobWVu
dEluZm8oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXRNdGwgKnJlbmRlclRhcmdldCkK
K3sKKyAgICBHTGVudW0gaW1wbEZvcm1hdDsKKworICAgIGlmIChyZW5kZXJUYXJnZXQgJiYgcmVu
ZGVyVGFyZ2V0LT5nZXRGb3JtYXQoKSkKKyAgICB7CisgICAgICAgIGltcGxGb3JtYXQgPSByZW5k
ZXJUYXJnZXQtPmdldEZvcm1hdCgpLT5hY3R1YWxBbmdsZUZvcm1hdCgpLmZib0ltcGxlbWVudGF0
aW9uSW50ZXJuYWxGb3JtYXQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGltcGxG
b3JtYXQgPSBHTF9OT05FOworICAgIH0KKworICAgIHJldHVybiBnbDo6R2V0U2l6ZWRJbnRlcm5h
bEZvcm1hdEluZm8oaW1wbEZvcm1hdCk7Cit9CisKIH0KIAogLy8gRnJhbWVidWZmZXJNdGwgaW1w
bGVtZW50YXRpb24KIEZyYW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bChjb25zdCBnbDo6RnJh
bWVidWZmZXJTdGF0ZSAmc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBmbGlwWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5kb3dTdXJmYWNlTXRs
ICpiYWNrYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cmZhY2VNdGxQ
cm90b2NvbCAqYmFja2J1ZmZlcikKICAgICA6IEZyYW1lYnVmZmVySW1wbChzdGF0ZSksIG1CYWNr
YnVmZmVyKGJhY2tidWZmZXIpLCBtRmxpcFkoZmxpcFkpCiB7CiAgICAgcmVzZXQoKTsKQEAgLTU1
LDYgKzczLDggQEAgdm9pZCBGcmFtZWJ1ZmZlck10bDo6cmVzZXQoKQogICAgIG1EZXB0aFJlbmRl
clRhcmdldCA9IG1TdGVuY2lsUmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsKIAogICAgIG1SZW5kZXJQ
YXNzRmlyc3RDb2xvckF0dGFjaG1lbnRGb3JtYXQgPSBudWxscHRyOworCisgICAgbVJlYWRQaXhl
bEJ1ZmZlciA9IG51bGxwdHI7CiB9CiAKIHZvaWQgRnJhbWVidWZmZXJNdGw6OmRlc3Ryb3koY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCkBAIC0xMjIsNyArMTQyLDYgQEAgYW5nbGU6OlJlc3Vs
dCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJmdihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xm
bG9hdCAqdmFsdWVzKQogewogICAgIG10bDo6Q2xlYXJSZWN0UGFyYW1zIGNsZWFyT3B0czsKLQog
ICAgIGdsOjpEcmF3QnVmZmVyTWFzayBjbGVhckNvbG9yQnVmZmVyczsKICAgICBpZiAoYnVmZmVy
ID09IEdMX0RFUFRIKQogICAgIHsKQEAgLTEzMyw3ICsxNTIsNiBAQCBhbmdsZTo6UmVzdWx0IEZy
YW1lYnVmZmVyTXRsOjpjbGVhckJ1ZmZlcmZ2KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAog
ICAgICAgICBjbGVhckNvbG9yQnVmZmVycy5zZXQoZHJhd2J1ZmZlcik7CiAgICAgICAgIGNsZWFy
T3B0cy5jbGVhckNvbG9yID0gbXRsOjpDbGVhckNvbG9yVmFsdWUodmFsdWVzWzBdLCB2YWx1ZXNb
MV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKICAgICB9Ci0KICAgICByZXR1cm4gY2xlYXJJbXBs
KGNvbnRleHQsIGNsZWFyQ29sb3JCdWZmZXJzLCAmY2xlYXJPcHRzKTsKIH0KIGFuZ2xlOjpSZXN1
bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LApAQCAtMTQ1LDggKzE2Myw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNs
ZWFyQnVmZmVydWl2KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGNsZWFyQ29sb3JC
dWZmZXJzLnNldChkcmF3YnVmZmVyKTsKIAogICAgIG10bDo6Q2xlYXJSZWN0UGFyYW1zIGNsZWFy
T3B0czsKLSAgICBjbGVhck9wdHMuY2xlYXJDb2xvciA9IG10bDo6Q2xlYXJDb2xvclZhbHVlKHZh
bHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIHZhbHVlc1szXSk7Ci0KKyAgICBjbGVhck9w
dHMuY2xlYXJDb2xvciA9ICBtdGw6OkNsZWFyQ29sb3JWYWx1ZSh2YWx1ZXNbMF0sIHZhbHVlc1sx
XSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pOwogICAgIHJldHVybiBjbGVhckltcGwoY29udGV4dCwg
Y2xlYXJDb2xvckJ1ZmZlcnMsICZjbGVhck9wdHMpOwogfQogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1
ZmZlck10bDo6Y2xlYXJCdWZmZXJpdihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKQEAgLTE1
OSw3ICsxNzYsNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhckJ1ZmZlcml2
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGdsOjpEcmF3QnVmZmVyTWFzayBjbGVh
ckNvbG9yQnVmZmVyczsKICAgICBpZiAoYnVmZmVyID09IEdMX1NURU5DSUwpCiAgICAgewotICAg
ICAgICBjbGVhck9wdHMuY2xlYXJTdGVuY2lsID0gdmFsdWVzWzBdICYgbXRsOjprU3RlbmNpbE1h
c2tBbGw7CisgICAgICAgIGNsZWFyT3B0cy5jbGVhclN0ZW5jaWwgPSBnbDo6Y2xhbXAodmFsdWVz
WzBdLCAwLCBzdGF0aWNfY2FzdDxHTGludD4obXRsOjprU3RlbmNpbE1hc2tBbGwpKTsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKQEAgLTE3Nyw3ICsxOTQsNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1l
YnVmZmVyTXRsOjpjbGVhckJ1ZmZlcmZpKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogewog
ICAgIG10bDo6Q2xlYXJSZWN0UGFyYW1zIGNsZWFyT3B0czsKICAgICBjbGVhck9wdHMuY2xlYXJE
ZXB0aCAgID0gZGVwdGg7Ci0gICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IHN0ZW5jaWwgJiBt
dGw6OmtTdGVuY2lsTWFza0FsbDsKKyAgICBjbGVhck9wdHMuY2xlYXJTdGVuY2lsID0gZ2w6OmNs
YW1wKHN0ZW5jaWwsIDAsIHN0YXRpY19jYXN0PEdMaW50PihtdGw6OmtTdGVuY2lsTWFza0FsbCkp
OwogCiAgICAgcmV0dXJuIGNsZWFySW1wbChjb250ZXh0LCBnbDo6RHJhd0J1ZmZlck1hc2soKSwg
JmNsZWFyT3B0cyk7CiB9CkBAIC0xODUsMTIgKzIwMiw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVi
dWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiBjb25z
dCBnbDo6SW50ZXJuYWxGb3JtYXQgJkZyYW1lYnVmZmVyTXRsOjpnZXRJbXBsZW1lbnRhdGlvbkNv
bG9yUmVhZEZvcm1hdCgKICAgICBjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgY29uc3QKIHsK
LSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsICAgPSBtdGw6OkdldEltcGwoY29udGV4dCk7Ci0g
ICAgR0xlbnVtIHNpemVkRm9ybWF0ICAgICAgID0gbVN0YXRlLmdldFJlYWRBdHRhY2htZW50KCkt
PmdldEZvcm1hdCgpLmluZm8tPnNpemVkSW50ZXJuYWxGb3JtYXQ7Ci0gICAgYW5nbGU6OkZvcm1h
dElEIGZvcm1hdElEID0gYW5nbGU6OkZvcm1hdDo6SW50ZXJuYWxGb3JtYXRUb0lEKHNpemVkRm9y
bWF0KTsKLSAgICBjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0ID0gY29udGV4dE10bC0+Z2V0
RGlzcGxheSgpLT5nZXRQaXhlbEZvcm1hdChmb3JtYXRJRCk7Ci0gICAgR0xlbnVtIGltcGxGb3Jt
YXQgICAgICAgICAgICA9IG10bEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLmZib0ltcGxlbWVu
dGF0aW9uSW50ZXJuYWxGb3JtYXQ7Ci0gICAgcmV0dXJuIGdsOjpHZXRTaXplZEludGVybmFsRm9y
bWF0SW5mbyhpbXBsRm9ybWF0KTsKKyAgICByZXR1cm4gR2V0UmVhZEF0dGFjaG1lbnRJbmZvKGNv
bnRleHQsIGdldENvbG9yUmVhZFJlbmRlclRhcmdldChjb250ZXh0KSk7CiB9CiAKIGFuZ2xlOjpS
ZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJlYWRQaXhlbHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCkBAIC01OTAsNiArNjAyLDkgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6c3lu
Y1N0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICB7CiAgICAgICAgICAg
ICBjb250ZXh0TXRsLT5vbkRyYXdGcmFtZUJ1ZmZlckNoYW5nZWRTdGF0ZShjb250ZXh0LCB0aGlz
LCByZW5kZXJQYXNzQ2hhbmdlZCk7CiAgICAgICAgIH0KKworICAgICAgICAvLyBSZWNyZWF0ZSBw
aXhlbCByZWFkaW5nIGJ1ZmZlciBpZiBuZWVkZWQgaW4gZnV0dXJlLgorICAgICAgICBtUmVhZFBp
eGVsQnVmZmVyID0gbnVsbHB0cjsKICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CkBAIC03NDgsNyArNzYzLDcgQEAgdm9pZCBGcmFtZWJ1ZmZlck10bDo6b25TdGFy
dGVkRHJhd2luZ1RvRnJhbWVCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiAKIHZv
aWQgRnJhbWVidWZmZXJNdGw6Om9uRnJhbWVFbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
CiB7Ci0gICAgaWYgKCFtQmFja2J1ZmZlcikKKyAgICBpZiAoIW1CYWNrYnVmZmVyIHx8IG1CYWNr
YnVmZmVyLT5wcmVzZXJ2ZUJ1ZmZlcigpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTgxMiw2ICs4MjcsOTIgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6dXBkYXRl
Q2FjaGVkUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXgKICAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKK2FuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJN
dGw6OmdldFJlYWRhYmxlVmlld0ZvclJlbmRlclRhcmdldCgKKyAgICBjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKKyAgICBjb25zdCBSZW5kZXJUYXJnZXRNdGwgJnJ0dCwKKyAgICBjb25zdCBn
bDo6UmVjdGFuZ2xlICZyZWFkQXJlYSwKKyAgICBtdGw6OlRleHR1cmVSZWYgKnJlYWRhYmxlRGVw
dGhWaWV3T3V0LAorICAgIG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVTdGVuY2lsVmlld091dCwK
KyAgICB1aW50MzJfdCAqcmVhZGFibGVWaWV3TGV2ZWwsCisgICAgdWludDMyX3QgKnJlYWRhYmxl
Vmlld0xheWVyLAorICAgIGdsOjpSZWN0YW5nbGUgKnJlYWRhYmxlVmlld0FyZWEpCit7CisgICAg
Q29udGV4dE10bCAqY29udGV4dE10bCAgICAgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAg
bXRsOjpUZXh0dXJlUmVmIHNyY1RleHR1cmUgPSBydHQuZ2V0VGV4dHVyZSgpOworICAgIHVpbnQz
Ml90IGxldmVsICAgICAgICAgICAgID0gcnR0LmdldExldmVsSW5kZXgoKS5nZXQoKTsKKyAgICB1
aW50MzJfdCBzbGljZSAgICAgICAgICAgICA9IHJ0dC5nZXRMYXllckluZGV4KCk7CisKKyAgICAv
LyBOT1RFKGhxbGUpOiBzbGljZSBpcyBub3QgdXNlZCBhdG0uCisgICAgQVNTRVJUKHNsaWNlID09
IDApOworCisgICAgYm9vbCByZWFkU3RlbmNpbCA9IHJlYWRhYmxlU3RlbmNpbFZpZXdPdXQ7CisK
KyAgICBpZiAoIXNyY1RleHR1cmUpCisgICAgeworICAgICAgICBpZiAocmVhZGFibGVEZXB0aFZp
ZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZURlcHRoVmlld091dCA9IG51
bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlYWRhYmxlU3RlbmNpbFZpZXdPdXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgICAgICAqcmVhZGFibGVWaWV3QXJlYSA9IHJlYWRBcmVhOworICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQorCisgICAgYm9vbCBza2lw
Q29weSA9IHNyY1RleHR1cmUtPmlzU2hhZGVyUmVhZGFibGUoKTsKKyAgICBpZiAocnR0LmdldEZv
cm1hdCgpLT5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCkgJiYgcmVhZFN0ZW5jaWwpCisgICAgewor
ICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyBwYWNrZWQgZGVwdGggc3RlbmNpbCwgYW5kIHdl
IG5lZWQgc3RlbmNpbCB2aWV3LAorICAgICAgICAvLyB0aGVuIGl0IG11c3Qgc3VwcG9ydCBjcmVh
dGluZyBkaWZmZXJlbnQgZm9ybWF0IHZpZXcuCisgICAgICAgIHNraXBDb3B5ID0gc2tpcENvcHkg
JiYgc3JjVGV4dHVyZS0+c3VwcG9ydEZvcm1hdFZpZXcoKTsKKyAgICB9CisKKyAgICBpZiAoc2tp
cENvcHkpCisgICAgeworICAgICAgICAvLyBUZXh0dXJlIHN1cHBvcnRzIHN0ZW5jaWwgdmlldywg
anVzdCB1c2UgaXQgZGlyZWN0bHkKKyAgICAgICAgaWYgKHJlYWRhYmxlRGVwdGhWaWV3T3V0KQor
ICAgICAgICB7CisgICAgICAgICAgICAqcmVhZGFibGVEZXB0aFZpZXdPdXQgPSBzcmNUZXh0dXJl
OworICAgICAgICB9CisgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0KQorICAgICAg
ICB7CisgICAgICAgICAgICAqcmVhZGFibGVTdGVuY2lsVmlld091dCA9IHNyY1RleHR1cmU7Cisg
ICAgICAgIH0KKyAgICAgICAgKnJlYWRhYmxlVmlld0xldmVsID0gbGV2ZWw7CisgICAgICAgICpy
ZWFkYWJsZVZpZXdMYXllciA9IHNsaWNlOworICAgICAgICAqcmVhZGFibGVWaWV3QXJlYSAgPSBy
ZWFkQXJlYTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNyY1RleHR1
cmUtPnRleHR1cmVUeXBlKCkgIT0gTVRMVGV4dHVyZVR5cGUzRCk7CisKKyAgICAgICAgLy8gVGV4
dHVyZSBkb2Vzbid0IHN1cHBvcnQgc3RlbmNpbCB2aWV3IG9yIG5vdCBzaGFkZXIgcmVhZGFibGUs
IGNvcHkgdG8gYW4gaW50ZXJtaW5hdGUKKyAgICAgICAgLy8gdGV4dHVyZSB0aGF0IHN1cHBvcnRz
IHN0ZW5jaWwgdmlldyBhbmQgc2hhZGVyIHJlYWQuCisgICAgICAgIG10bDo6VGV4dHVyZVJlZiBm
b3JtYXRhYmxlVmlldyA9IHNyY1RleHR1cmUtPmdldFJlYWRhYmxlQ29weSgKKyAgICAgICAgICAg
IGNvbnRleHRNdGwsIGNvbnRleHRNdGwtPmdldEJsaXRDb21tYW5kRW5jb2RlcigpLCBsZXZlbCwg
c2xpY2UsCisgICAgICAgICAgICBNVExSZWdpb25NYWtlMkQocmVhZEFyZWEueCwgcmVhZEFyZWEu
eSwgcmVhZEFyZWEud2lkdGgsIHJlYWRBcmVhLmhlaWdodCkpOworCisgICAgICAgIEFOR0xFX0NI
RUNLX0dMX0FMTE9DKGNvbnRleHRNdGwsIGZvcm1hdGFibGVWaWV3KTsKKworICAgICAgICBpZiAo
cmVhZGFibGVEZXB0aFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZURl
cHRoVmlld091dCA9IGZvcm1hdGFibGVWaWV3OworICAgICAgICB9CisgICAgICAgIGlmIChyZWFk
YWJsZVN0ZW5jaWxWaWV3T3V0KQorICAgICAgICB7CisgICAgICAgICAgICAqcmVhZGFibGVTdGVu
Y2lsVmlld091dCA9IGZvcm1hdGFibGVWaWV3LT5nZXRTdGVuY2lsVmlldygpOworICAgICAgICB9
CisKKyAgICAgICAgKnJlYWRhYmxlVmlld0xldmVsID0gMDsKKyAgICAgICAgKnJlYWRhYmxlVmll
d0xheWVyID0gMDsKKyAgICAgICAgKnJlYWRhYmxlVmlld0FyZWEgID0gZ2w6OlJlY3RhbmdsZSgw
LCAwLCByZWFkQXJlYS53aWR0aCwgcmVhZEFyZWEuaGVpZ2h0KTsKKyAgICB9CisKKyAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZm
ZXJNdGw6OnByZXBhcmVSZW5kZXJQYXNzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJQ
YXNzRGVzYyAqcERlc2NPdXQpCiB7CkBAIC04MzIsOSArOTMzLDkgQEAgYW5nbGU6OlJlc3VsdCBG
cmFtZWJ1ZmZlck10bDo6cHJlcGFyZVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgIGlmIChjb2xvclJlbmRlclRhcmdldCkKICAgICAgICAgewogICAgICAgICAg
ICAgY29sb3JSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCZjb2xvckF0
dGFjaG1lbnQpOworICAgICAgICAgICAgZGVzYy5zYW1wbGVDb3VudCA9IHN0ZDo6bWF4KGRlc2Mu
c2FtcGxlQ291bnQsIGNvbG9yUmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkpOwogCiAg
ICAgICAgICAgICBkZXNjLm51bUNvbG9yQXR0YWNobWVudHMgPSBzdGQ6Om1heChkZXNjLm51bUNv
bG9yQXR0YWNobWVudHMsIGNvbG9ySW5kZXhHTCArIDEpOwotICAgICAgICAgICAgZGVzYy5zYW1w
bGVDb3VudCA9IHN0ZDo6bWF4KGRlc2Muc2FtcGxlQ291bnQsIGNvbG9yUmVuZGVyVGFyZ2V0LT5n
ZXRSZW5kZXJTYW1wbGVzKCkpOwogCiAgICAgICAgICAgICBpZiAoIW1SZW5kZXJQYXNzRmlyc3RD
b2xvckF0dGFjaG1lbnRGb3JtYXQpCiAgICAgICAgICAgICB7CkBAIC04NjIsMjIgKzk2MywyOSBA
QCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpwcmVwYXJlUmVuZGVyUGFzcyhjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgbURlcHRoUmVuZGVyVGFyZ2V0LT50b1JlbmRl
clBhc3NBdHRhY2htZW50RGVzYygmZGVzYy5kZXB0aEF0dGFjaG1lbnQpOwogICAgICAgICBkZXNj
LnNhbXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1wbGVDb3VudCwgbURlcHRoUmVuZGVyVGFy
Z2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkpOwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBkZXNjLmRlcHRoQXR0YWNobWVudC5yZXNldCgpOwotICAgIH0KIAogICAgIGlmIChtU3RlbmNp
bFJlbmRlclRhcmdldCkKICAgICB7CiAgICAgICAgIG1TdGVuY2lsUmVuZGVyVGFyZ2V0LT50b1Jl
bmRlclBhc3NBdHRhY2htZW50RGVzYygmZGVzYy5zdGVuY2lsQXR0YWNobWVudCk7CiAgICAgICAg
IGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6Om1heChkZXNjLnNhbXBsZUNvdW50LCBtU3RlbmNpbFJl
bmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxlcygpKTsKICAgICB9CisKKyAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6Q29udGludWU7Cit9CisKKy8vIE92ZXJyaWRlIGNsZWFyIGNvbG9yIGJhc2Vk
IG9uIHRleHR1cmUncyB3cml0ZSBtYXNrCit2b2lkIEZyYW1lYnVmZmVyTXRsOjpvdmVycmlkZUNs
ZWFyQ29sb3IoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3IgY2xlYXJDb2xvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExDbGVhckNvbG9yICpjb2xvck91
dCkKK3sKKyAgICBpZiAodGV4dHVyZSkKKyAgICB7CisgICAgICAgICpjb2xvck91dCA9IG10bDo6
RW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoY2xlYXJDb2xvciwgdGV4dHVyZS0+Z2V0Q29sb3JXcml0
YWJsZU1hc2soKSk7CisgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGRlc2Muc3RlbmNp
bEF0dGFjaG1lbnQucmVzZXQoKTsKKyAgICAgICAgKmNvbG9yT3V0ID0gY2xlYXJDb2xvcjsKICAg
ICB9Ci0KLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKIGFuZ2xlOjpS
ZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyV2l0aExvYWRPcChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKQEAgLTkyMyw3ICsxMDMxLDcgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10
bDo6Y2xlYXJXaXRoTG9hZE9wUmVuZGVyUGFzc05vdFN0YXJ0ZWQoCiAKICAgICAgICAgbXRsOjpS
ZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyAmY29sb3JBdHRhY2htZW50ID0KICAgICAgICAg
ICAgIHRlbXBEZXNjLmNvbG9yQXR0YWNobWVudHNbY29sb3JJbmRleEdMXTsKLSAgICAgICAgY29u
c3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50LnRleHR1cmU7Cisg
ICAgICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSA9IGNvbG9yQXR0YWNobWVudC50
ZXh0dXJlKCk7CiAKICAgICAgICAgaWYgKGNsZWFyQ29sb3JCdWZmZXJzLnRlc3QoY29sb3JJbmRl
eEdMKSkKICAgICAgICAgewpAQCAtOTY2LDcgKzEwNzQsNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1l
YnVmZmVyTXRsOjpjbGVhcldpdGhMb2FkT3BSZW5kZXJQYXNzU3RhcnRlZCgKIAogICAgICAgICBt
dGw6OlJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnREZXNjICZjb2xvckF0dGFjaG1lbnQgPQogICAg
ICAgICAgICAgbVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNbY29sb3JJbmRleEdMXTsK
LSAgICAgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50
LnRleHR1cmU7CisgICAgICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSA9IGNvbG9y
QXR0YWNobWVudC50ZXh0dXJlKCk7CiAKICAgICAgICAgaWYgKGNsZWFyQ29sb3JCdWZmZXJzLnRl
c3QoY29sb3JJbmRleEdMKSkKICAgICAgICAgewpAQCAtMTE5Myw4ICsxMzAxLDkgQEAgZ2w6OlJl
Y3RhbmdsZSBGcmFtZWJ1ZmZlck10bDo6Z2V0Q29ycmVjdEZsaXBwZWRSZWFkQXJlYShjb25zdCBn
bDo6Q29udGV4dCAqY29udGUKICAgICBnbDo6UmVjdGFuZ2xlIGZsaXBwZWRBcmVhID0gZ2xBcmVh
OwogICAgIGlmIChtRmxpcFkpCiAgICAgewotICAgICAgICBmbGlwcGVkQXJlYS55ID0gcmVhZFJU
LT5nZXRUZXh0dXJlKCktPmhlaWdodChyZWFkUlQtPmdldExldmVsSW5kZXgoKSkgLSBmbGlwcGVk
QXJlYS55IC0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZsaXBwZWRBcmVhLmhlaWdodDsKKyAg
ICAgICAgZmxpcHBlZEFyZWEueSA9CisgICAgICAgICAgICByZWFkUlQtPmdldFRleHR1cmUoKS0+
aGVpZ2h0KHJlYWRSVC0+Z2V0TGV2ZWxJbmRleCgpKSAtCisgICAgICAgICAgICBmbGlwcGVkQXJl
YS55IC0gZmxpcHBlZEFyZWEuaGVpZ2h0OwogICAgIH0KIAogICAgIHJldHVybiBmbGlwcGVkQXJl
YTsKQEAgLTEyMTEsNyArMTMyMCw2IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJl
YWRQaXhlbHNJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIHsKICAgICAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KLQogICAgIGlmIChwYWNrUGl4
ZWxzUGFyYW1zLnBhY2tCdWZmZXIpCiAgICAgewogICAgICAgICByZXR1cm4gcmVhZFBpeGVsc1Rv
UEJPKGNvbnRleHQsIGFyZWEsIHBhY2tQaXhlbHNQYXJhbXMsIHJlbmRlclRhcmdldCk7CkBAIC0x
MjYxLDcgKzEzNjksNyBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpyZWFkUGl4ZWxz
SW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgICAgICAvLyBDb252ZXJ0IHRv
IGRlc3RpbmF0aW9uIGZvcm1hdAogICAgICAgICBQYWNrUGl4ZWxzKHBhY2tQaXhlbHNSb3dQYXJh
bXMsIHJlYWRBbmdsZUZvcm1hdCwgYnVmZmVyUm93UGl0Y2gsIHJlYWRQaXhlbFJvd0J1ZmZlci5k
YXRhKCksCi0gICAgICAgICAgICAgICAgICAgcGl4ZWxzKTsKKyAgICAgICAgICAgcGl4ZWxzKTsK
ICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CkBAIC0xMjc5LDE5
ICsxMzg3LDM2IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJlYWRQaXhlbHNUb1BC
Tyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIEFOR0xFX01UTF9DSEVDSyhjb250
ZXh0TXRsLCBwYWNrUGl4ZWxzUGFyYW1zLm9mZnNldCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCksCiAgICAgICAgICAgICAgICAgICAgIEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICBjb25zdCB1aW50MzJfdCBkc3RCdWZmZXJPZmZzZXQgICAgICA9IHN0YXRpY19jYXN0
PHVpbnQzMl90PihwYWNrUGl4ZWxzUGFyYW1zLm9mZnNldCk7Ci0gICAgY29uc3QgdWludDMyX3Qg
ZHN0QnVmZmVyUm93UGl0Y2ggICAgPSBwYWNrUGl4ZWxzUGFyYW1zLm91dHB1dFBpdGNoOwotICAg
IGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmRzdEFuZ2xlRm9ybWF0ID0gKnBhY2tQaXhlbHNQYXJhbXMu
ZGVzdEZvcm1hdDsKLSAgICBjb25zdCBib29sIHJldmVyc2VSb3dPcmRlciAgICAgICAgICA9IHBh
Y2tQaXhlbHNQYXJhbXMucmV2ZXJzZVJvd09yZGVyOworICAgIHVpbnQzMl90IG9mZnNldCA9IHN0
YXRpY19jYXN0PHVpbnQzMl90PihwYWNrUGl4ZWxzUGFyYW1zLm9mZnNldCk7CiAKICAgICBCdWZm
ZXJNdGwgKnBhY2tCdWZmZXJNdGwgPSBtdGw6OkdldEltcGwocGFja1BpeGVsc1BhcmFtcy5wYWNr
QnVmZmVyKTsKICAgICBtdGw6OkJ1ZmZlclJlZiBkc3RCdWZmZXIgPSBwYWNrQnVmZmVyTXRsLT5n
ZXRDdXJyZW50QnVmZmVyKCk7CiAKKyAgICByZXR1cm4gcmVhZFBpeGVsc1RvQnVmZmVyKGNvbnRl
eHQsIGFyZWEsIHJlbmRlclRhcmdldCwgcGFja1BpeGVsc1BhcmFtcy5yZXZlcnNlUm93T3JkZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFja1BpeGVsc1BhcmFtcy5kZXN0Rm9y
bWF0LCBvZmZzZXQsIHBhY2tQaXhlbHNQYXJhbXMub3V0cHV0UGl0Y2gsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmZHN0QnVmZmVyKTsKK30KKworYW5nbGU6OlJlc3VsdCBGcmFtZWJ1
ZmZlck10bDo6cmVhZFBpeGVsc1RvQnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXZlcnNlUm93
T3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgYW5nbGU6OkZvcm1hdCAmZHN0QW5nbGVGb3JtYXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0QnVmZmVyT2Zmc2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IGRzdEJ1ZmZlclJvd1BpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICpwRHN0QnVmZmVyKSBjb25zdAorewor
ICAgIEFTU0VSVChyZW5kZXJUYXJnZXQpOworCisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9
IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKwogICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZyZWFkRm9y
bWF0ICAgICAgICA9ICpyZW5kZXJUYXJnZXQtPmdldEZvcm1hdCgpOwogICAgIGNvbnN0IGFuZ2xl
OjpGb3JtYXQgJnJlYWRBbmdsZUZvcm1hdCA9IHJlYWRGb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQo
KTsKIAogICAgIG10bDo6VGV4dHVyZVJlZiB0ZXh0dXJlID0gcmVuZGVyVGFyZ2V0LT5nZXRUZXh0
dXJlKCk7CiAKKyAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAmZHN0QnVmZmVyID0gKnBEc3RCdWZm
ZXI7CisKICAgICBpZiAoZHN0QW5nbGVGb3JtYXQuaWQgIT0gcmVhZEFuZ2xlRm9ybWF0LmlkIHx8
IHRleHR1cmUtPnNhbXBsZXMoKSA+IDEgfHwKICAgICAgICAgKGRzdEJ1ZmZlck9mZnNldCAlIGRz
dEFuZ2xlRm9ybWF0LnBpeGVsQnl0ZXMpIHx8CiAgICAgICAgIChkc3RCdWZmZXJPZmZzZXQgJSBt
dGw6OmtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCkpCkBAIC0xMzU5LDggKzE0ODQs
OCBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpyZWFkUGl4ZWxzVG9QQk8oY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAKICAgICAgICAgICAgIHVpbnQzMl90IGJ1ZmZlclJvd09m
ZnNldCA9IGRzdEJ1ZmZlck9mZnNldDsKICAgICAgICAgICAgIC8vIENvcHkgcGl4ZWxzIHJvdyBi
eSByb3cKLSAgICAgICAgICAgIGZvciAoaW50IHIgPSBzdGFydFJvdywgY29waWVkUm93cyA9IDA7
IGNvcGllZFJvd3MgPCBhcmVhLmhlaWdodDsKLSAgICAgICAgICAgICAgICAgKytjb3BpZWRSb3dz
LCAtLXIsIGJ1ZmZlclJvd09mZnNldCArPSBkc3RCdWZmZXJSb3dQaXRjaCkKKyAgICAgICAgICAg
IGZvciAoaW50IHIgPSBzdGFydFJvdywgaSA9IDA7IGkgPCBhcmVhLmhlaWdodDsKKyAgICAgICAg
ICAgICAgICAgKytpLCAtLXIsIGJ1ZmZlclJvd09mZnNldCArPSBkc3RCdWZmZXJSb3dQaXRjaCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzcmNSb3dSZWdpb24ueSA9IHI7CiAKQEAg
LTEzNzUsNSArMTUwMCw0IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OnJlYWRQaXhl
bHNUb1BCTyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKIH0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1
cmZhY2VTdXJmYWNlTXRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTU0OGU1ZGI5MDliYThiZTQ0MGUxOWY0MjE3
NzJkZGQxZjNlYTYxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmgKQEAgLTAs
MCArMSwxMjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxf
SU9TVVJGQUNFU1VSRkFDRU1UTF9IXworI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9J
T1NVUkZBQ0VTVVJGQUNFTVRMX0hfCisKKyNpbmNsdWRlIDxJT1N1cmZhY2UvSU9TdXJmYWNlUmVm
Lmg+CisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvU3VyZmFjZUltcGwuaCIKKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCisjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5oIgorCituYW1lc3BhY2UgbWV0YWwKK3sKK2Ns
YXNzIEF0dHJpYnV0ZU1hcDsKK30gIC8vIG5hbWVzcGFjZSBtZXRhbAorCituYW1lc3BhY2UgcngK
K3sKKworY2xhc3MgRGlzcGxheU1UTDsKKworY2xhc3MgSU9TdXJmYWNlU3VyZmFjZU10bCA6IHB1
YmxpYyBTdXJmYWNlTXRsUHJvdG9jb2wKK3sKKyAgcHVibGljOgorICAgIElPU3VyZmFjZVN1cmZh
Y2VNdGwoRGlzcGxheU10bCAqZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVHTENs
aWVudEJ1ZmZlciBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0
dHJpYnV0ZU1hcCAmYXR0cmlicyk7CisgICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgZGVzdHJveShjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpIG92ZXJy
aWRlOworCisgICAgZWdsOjpFcnJvciBpbml0aWFsaXplKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlz
cGxheSkgb3ZlcnJpZGU7CisgICAgRnJhbWVidWZmZXJJbXBsICpjcmVhdGVEZWZhdWx0RnJhbWVi
dWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVmZmVyU3RhdGUgJnN0YXRl
KSBvdmVycmlkZTsKKworICAgIGVnbDo6RXJyb3IgbWFrZUN1cnJlbnQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgdW5NYWtlQ3VycmVudChjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBzd2FwKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIHBvc3RT
dWJCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVHTGludCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQg
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHdpZHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFR0xpbnQgaGVpZ2h0KSBvdmVycmlkZTsKKworICAgIGVnbDo6
RXJyb3IgcXVlcnlTdXJmYWNlUG9pbnRlckFOR0xFKEVHTGludCBhdHRyaWJ1dGUsIHZvaWQgKip2
YWx1ZSkgb3ZlcnJpZGU7CisgICAgZWdsOjpFcnJvciBiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUg
KnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IGJ1ZmZlcikgb3Zl
cnJpZGU7CisgICAgZWdsOjpFcnJvciByZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsIEVHTGludCBidWZmZXIpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3IgZ2V0U3lu
Y1ZhbHVlcyhFR0x1aW50NjRLSFIgKnVzdCwgRUdMdWludDY0S0hSICptc2MsIEVHTHVpbnQ2NEtI
UiAqc2JjKSBvdmVycmlkZTsKKyAgICBlZ2w6OkVycm9yIGdldE1zY1JhdGUoRUdMaW50ICpudW1l
cmF0b3IsIEVHTGludCAqZGVub21pbmF0b3IpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3dhcElu
dGVydmFsKEVHTGludCBpbnRlcnZhbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRGaXhlZFdpZHRo
KEVHTGludCB3aWR0aCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRGaXhlZEhlaWdodChFR0xpbnQg
aGVpZ2h0KSBvdmVycmlkZTsKKworICAgIC8vIFdpZHRoIGNhbiBjaGFuZ2Ugd2hlbiB0aGUgY2xp
ZW50IHdpbmRvdyByZXNpemVzLgorICAgIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIC8vIEhlaWdodCBjYW4gY2hhbmdlIHdoZW4gdGhlIGNsaWVudCB3aW5kb3cgcmVzaXpl
cy4KKyAgICBFR0xpbnQgZ2V0SGVpZ2h0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBFR0xpbnQg
aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgRUdMaW50IGdl
dFN3YXBCZWhhdmlvcigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgYW5nbGU6OlJlc3VsdCBnZXRB
dHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gYmluZGluZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdl
SW5kZXggJmltYWdlSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgc2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92
ZXJyaWRlOworCisgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5l
ZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgICAgYW5nbGU6OlJlc3Vs
dCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Km5ld0RyYXdhYmxlT3V0KSBvdmVycmlkZTsKKyAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIDE7IH0KKyAgICBib29sIHByZXNlcnZlQnVmZmVyKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBtdGw6OlRleHR1cmVSZWYgZ2V0VGV4dHVyZShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CisgICAgYm9vbCBoYXNSb2J1c3RSZXNvdXJjZUlu
aXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGFuZ2xlOjpSZXN1bHQg
ZW5zdXJlQ29sb3JUZXh0dXJlUmVhZHlGb3JSZWFkUGl4ZWxzKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworICAgIH0KKyAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJmdldENvbG9yVGV4dHVy
ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1JT1N1cmZhY2VUZXh0dXJlOyB9CisKKyAgcHJpdmF0ZToK
KyAgICBhbmdsZTo6UmVzdWx0IGVuc3VyZVRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0KTsKKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZUJhY2tpbmdUZXh0dXJlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZVRleHR1cmUo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVu
ZGVyVGFyZ2V0T25seSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpUZXh0
dXJlUmVmICp0ZXh0dXJlT3V0KTsKKworICAgIGFuZ2xlOjpSZXN1bHQgaW5pdGlhbGl6ZUFscGhh
Q2hhbm5lbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0x1aW50IHRleHR1cmUpOworCisj
aWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1NfU0lNVUxBVE9SKQorICAgIElPU3VyZmFjZUxv
Y2tPcHRpb25zIGdldElPU3VyZmFjZUxvY2tPcHRpb25zKCkgY29uc3Q7CisjZW5kaWYKKworICAg
IENvbnRleHRNdGwgKmNvbnRleHRNVEw7CisgICAgSU9TdXJmYWNlUmVmIG1JT1N1cmZhY2U7Cisg
ICAgbXRsOjpUZXh0dXJlUmVmIG1JT1N1cmZhY2VUZXh0dXJlOworICAgIG10bDo6VGV4dHVyZVJl
ZiBtSU9TdXJmYWNlVGV4dHVyZVZpZXc7CisgICAgbXRsOjpGb3JtYXQgbUZvcm1hdDsKKyAgICBt
dGw6OkZvcm1hdCBtSW50ZXJuYWxGb3JtYXQ7CisgICAgUmVuZGVyVGFyZ2V0TXRsIG1SZW5kZXJU
YXJnZXQ7CisgICAgYm9vbCBtSU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQ7CisgICAgaW50IG1XaWR0
aDsKKyAgICBpbnQgbUhlaWdodDsKKyAgICBpbnQgbVBsYW5lOworICAgIGludCBtRm9ybWF0SW5k
ZXg7CisgICAgaW50IG1Sb3dTdHJpZGVJblBpeGVsczsKKworI2lmIGRlZmluZWQoQU5HTEVfUExB
VEZPUk1fSU9TX1NJTVVMQVRPUikKKyAgICBHTHVpbnQgbUJvdW5kVGV4dHVyZUlEOworICAgIGJv
b2wgbVVwbG9hZEZyb21JT1N1cmZhY2U7CisgICAgYm9vbCBtUmVhZGJhY2tUb0lPU3VyZmFjZTsK
KyNlbmRpZgorfTsKKworfSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNlbmRpZiAgLy8gTElCQU5HTEVf
UkVOREVSRVJfR0xfRUFHTF9JT1NVUkZBQ0VTVVJGQUNFRUFHTF9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFj
ZVN1cmZhY2VNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Yjk0ODU5YTg5
ZTVkY2M5YmMwNDE3YTUxOTUwZjRlMjg1NTQ3ZjkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1
cmZhY2VNdGwubW0KQEAgLTAsMCArMSw0NjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAxOSBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBJT1N1cmZhY2VTdXJm
YWNlTXRsLm1tOgorLy8gICAgSW1wbGVtZW50cyB0aGUgY2xhc3MgbWV0aG9kcyBmb3IgSU9TdXJm
YWNlU3VyZmFjZU10bC4KKy8vCisKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9J
T1N1cmZhY2VTdXJmYWNlTXRsLmgiCisKKyNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4K
KworI2luY2x1ZGUgImxpYkFOR0xFL0Rpc3BsYXkuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9TdXJm
YWNlLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgor
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oIgorI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaCIKKworLy8gQ29tcGlsZXIg
Y2FuIHR1cm4gb24gcHJvZ3JhbW1hdGljYWwgZnJhbWUgY2FwdHVyZSBpbiByZWxlYXNlIGJ1aWxk
IGJ5IGRlZmluaW5nCisvLyBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFIGZsYWcuCisjaWYgZGVm
aW5lZChOREVCVUcpICYmICFkZWZpbmVkKEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUpCisjICAg
IGRlZmluZSBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQgMAorI2Vsc2UKKyMgICAg
ZGVmaW5lIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRCAxCisjZW5kaWYKK25hbWVz
cGFjZSByeAoreworCituYW1lc3BhY2UKK3sKKworc3RydWN0IElPU3VyZmFjZUZvcm1hdEluZm8K
K3sKKyAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQ7CisgICAgR0xlbnVtIHR5cGU7CisgICAgYW5n
bGU6OkZvcm1hdElEIHBpeGVsRm9ybWF0OworICAgIGFuZ2xlOjpGb3JtYXRJRCBpbnRlcm5hbFBp
eGVsRm9ybWF0OworfTsKKworc3RhdGljIGNvbnN0IElPU3VyZmFjZUZvcm1hdEluZm8ga0lPU3Vy
ZmFjZUZvcm1hdHNbXSA9IHsKKyAgICB7R0xfUkVELCBHTF9VTlNJR05FRF9CWVRFLCBhbmdsZTo6
Rm9ybWF0SUQ6OlI4X1VOT1JNLCBhbmdsZTo6Rm9ybWF0SUQ6OlI4X1VOT1JNfSwKKyAgICB7R0xf
UjE2VUksIEdMX1VOU0lHTkVEX1NIT1JULCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNl9VSU5ULCBh
bmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNl9VSU5UfSwKKyAgICB7R0xfUkcsIEdMX1VOU0lHTkVEX0JZ
VEUsIGFuZ2xlOjpGb3JtYXRJRDo6UjhHOF9VTk9STSwgYW5nbGU6OkZvcm1hdElEOjpSOEc4X1VO
T1JNfSwKKyAgICB7R0xfUkdCLCBHTF9VTlNJR05FRF9CWVRFLCBhbmdsZTo6Rm9ybWF0SUQ6OlI4
RzhCOEE4X1VOT1JNLCBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNfSwKKyAgICB7R0xf
QkdSQV9FWFQsIEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5P
Uk0sCisgICAgIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk19LAorICAgIHtHTF9SR0Ix
MF9BMiwgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCBhbmdsZTo6Rm9ybWF0SUQ6OlIx
MEcxMEIxMEEyX1VOT1JNLAorICAgICBhbmdsZTo6Rm9ybWF0SUQ6OlIxMEcxMEIxMEEyX1VOT1JN
fSwKKyAgICB7R0xfUkdCQSwgR0xfSEFMRl9GTE9BVCwgYW5nbGU6OkZvcm1hdElEOjpSMTZHMTZC
MTZBMTZfRkxPQVQsCisgICAgIGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2QjE2QTE2X0ZMT0FUfSwK
K307CisKK2ludCBGaW5kSU9TdXJmYWNlRm9ybWF0SW5kZXgoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTGVudW0gdHlwZSkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRpY19jYXN0
PHNpemVfdD4oQXJyYXlTaXplKGtJT1N1cmZhY2VGb3JtYXRzKSk7ICsraSkKKyAgICB7CisgICAg
ICAgIGNvbnN0IGF1dG8gJmZvcm1hdEluZm8gPSBrSU9TdXJmYWNlRm9ybWF0c1tpXTsKKyAgICAg
ICAgaWYgKGZvcm1hdEluZm8uaW50ZXJuYWxGb3JtYXQgPT0gaW50ZXJuYWxGb3JtYXQgJiYgZm9y
bWF0SW5mby50eXBlID09IHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwor
Ly8gVE9ETyhqY3VubmluZ2hhbSkgOiByZWZhY3RvciB0aGlzIGFuZCBzdXJmYWNlbXRsIHRvIHJl
ZHVjZSBjb3B5K3Bhc3RlZCBjb2RlCisKK0FOR0xFX01UTF9VTlVTRUQKK2Jvb2wgSXNGcmFtZUNh
cHR1cmVFbmFibGVkKCkKK3sKKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVE
CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICAvLyBXZSBvbmx5IHN1cHBvcnQgZnJhbWUg
Y2FwdHVyZSBwcm9ncmFtbWF0aWNhbGx5IGlmIHRoZSBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJF
CisgICAgLy8gZW52aXJvbm1lbnQgZmxhZyBpcyBzZXQuIE90aGVyd2lzZSwgaXQgd2lsbCBzbG93
IGRvd24gdGhlIHJlbmRlcmluZy4gVGhpcyBhbGxvd3MgdXNlciB0bworICAgIC8vIGZpbmVseSBj
b250cm9sIHdoZXRoZXIgdGhleSB3YW50IHRvIGNhcHR1cmUgdGhlIGZyYW1lIGZvciBwYXJ0aWN1
bGFyIGFwcGxpY2F0aW9uIG9yIG5vdC4KKyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgID0g
c3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUiKTsKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBlbmFibGVkID0gdmFyID8gKHN0cmNtcCh2YXIsICIxIikgPT0gMCkgOiBmYWxzZTsK
KworICAgIHJldHVybiBlbmFibGVkOworI2VuZGlmCit9CisKK0FOR0xFX01UTF9VTlVTRUQKK3N0
ZDo6c3RyaW5nIEdldE1ldGFsQ2FwdHVyZUZpbGUoKQoreworI2lmICFBTkdMRV9NRVRBTF9GUkFN
RV9DQVBUVVJFX0VOQUJMRUQKKyAgICByZXR1cm4gIiI7CisjZWxzZQorICAgIGF1dG8gdmFyICAg
ICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVf
RklMRSIpOworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gdmFyID8gdmFyIDogIiI7
CisKKyAgICByZXR1cm4gZmlsZVBhdGg7CisjZW5kaWYKK30KKworQU5HTEVfTVRMX1VOVVNFRAor
c2l6ZV90IE1heEFsbG93ZWRGcmFtZUNhcHR1cmUoKQoreworI2lmICFBTkdMRV9NRVRBTF9GUkFN
RV9DQVBUVVJFX0VOQUJMRUQKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgYXV0byB2YXIgICAg
ICAgICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVS
RV9NQVgiKTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEZyYW1lcyA9IHZhciA/IHN0ZDo6
YXRvaSh2YXIpIDogMTAwOworCisgICAgcmV0dXJuIG1heEZyYW1lczsKKyNlbmRpZgorfQorCitB
TkdMRV9NVExfVU5VU0VECitzaXplX3QgTWluQWxsb3dlZEZyYW1lQ2FwdHVyZSgpCit7CisjaWYg
IUFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorICAgIHJldHVybiAwOworI2Vsc2UK
KyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfTUlOIik7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5GcmFt
ZSA9IHZhciA/IHN0ZDo6YXRvaSh2YXIpIDogMDsKKworICAgIHJldHVybiBtaW5GcmFtZTsKKyNl
bmRpZgorfQorCitBTkdMRV9NVExfVU5VU0VECitib29sIEZyYW1lQ2FwdHVyZURldmljZVNjb3Bl
KCkKK3sKKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisgICAgcmV0dXJu
IGZhbHNlOworI2Vsc2UKKyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgICAgICA9IHN0ZDo6
Z2V0ZW52KCJBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX1NDT1BFIik7CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2NvcGVEZXZpY2UgPSB2YXIgPyAoc3RyY21wKHZhciwgImRldmljZSIpID09IDAp
IDogZmFsc2U7CisKKyAgICByZXR1cm4gc2NvcGVEZXZpY2U7CisjZW5kaWYKK30KKworQU5HTEVf
TVRMX1VOVVNFRAorc3RkOjphdG9taWM8c2l6ZV90PiBnRnJhbWVDYXB0dXJlZCgwKTsKKworQU5H
TEVfTVRMX1VOVVNFRAordm9pZCBTdGFydEZyYW1lQ2FwdHVyZShpZDxNVExEZXZpY2U+IG1ldGFs
RGV2aWNlLCBpZDxNVExDb21tYW5kUXVldWU+IG1ldGFsQ21kUXVldWUpCit7CisjaWYgQU5HTEVf
TUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisgICAgaWYgKCFJc0ZyYW1lQ2FwdHVyZUVuYWJs
ZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ0ZyYW1lQ2Fw
dHVyZWQgPj0gTWF4QWxsb3dlZEZyYW1lQ2FwdHVyZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIE1UTENhcHR1cmVNYW5hZ2VyICpjYXB0dXJlTWFuYWdlciA9IFtNVExD
YXB0dXJlTWFuYWdlciBzaGFyZWRDYXB0dXJlTWFuYWdlcl07CisgICAgaWYgKGNhcHR1cmVNYW5h
Z2VyLmlzQ2FwdHVyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdG
cmFtZUNhcHR1cmVkKys7CisKKyAgICBpZiAoZ0ZyYW1lQ2FwdHVyZWQgPCBNaW5BbGxvd2VkRnJh
bWVDYXB0dXJlKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisjICAgIGlmZGVm
IF9fTUFDXzEwXzE1CisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUsIDEz
LjAsIDEzKSkKKyAgICB7CisgICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0dXJlRGVz
Y3JpcHRvciA9IFtbTVRMQ2FwdHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOworICAgICAgICBj
YXB0dXJlRGVzY3JpcHRvci5jYXB0dXJlT2JqZWN0ICAgICAgICAgPSBtZXRhbERldmljZTsKKyAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZVBhdGggICAgICAgICAgICAgID0gR2V0TWV0YWxD
YXB0dXJlRmlsZSgpOworICAgICAgICBpZiAoZmlsZVBhdGggIT0gIiIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG51bWJlcmVkUGF0aCA9CisgICAgICAgICAgICAg
ICAgZmlsZVBhdGggKyBzdGQ6OnRvX3N0cmluZyhnRnJhbWVDYXB0dXJlZCAtIDEpICsgIi5ncHV0
cmFjZSI7CisgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5kZXN0aW5hdGlvbiA9IE1UTENh
cHR1cmVEZXN0aW5hdGlvbkdQVVRyYWNlRG9jdW1lbnQ7CisgICAgICAgICAgICBjYXB0dXJlRGVz
Y3JpcHRvci5vdXRwdXRVUkwgPQorICAgICAgICAgICAgICAgIFtOU1VSTCBmaWxlVVJMV2l0aFBh
dGg6W05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm51bWJlcmVkUGF0aC5jX3N0cigpXQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXJlY3Rvcnk6ZmFsc2VdOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBhdXNl
IGV4ZWN1dGlvbiBvbmx5IGlmIGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lkZSBY
Y29kZQorICAgICAgICAgICAgY2FwdHVyZURlc2NyaXB0b3IuZGVzdGluYXRpb24gPSBNVExDYXB0
dXJlRGVzdGluYXRpb25EZXZlbG9wZXJUb29sczsKKyAgICAgICAgfQorCisgICAgICAgIE5TRXJy
b3IgKmVycm9yOworICAgICAgICBpZiAoIVtjYXB0dXJlTWFuYWdlciBzdGFydENhcHR1cmVXaXRo
RGVzY3JpcHRvcjpjYXB0dXJlRGVzY3JpcHRvciBlcnJvcjomZXJyb3JdKQorICAgICAgICB7Cisg
ICAgICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBzdGFydCBjYXB0dXJlLCBlcnJvciAlQCIsIGVy
cm9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisjICAgIGVuZGlmICAvLyBfX01BQ18x
MF8xNQorICAgICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwg
MTMpKQorICAgIHsKKyAgICAgICAgTVRMQ2FwdHVyZURlc2NyaXB0b3IgKmNhcHR1cmVEZXNjcmlw
dG9yID0gW1tNVExDYXB0dXJlRGVzY3JpcHRvciBhbGxvY10gaW5pdF07CisgICAgICAgIGNhcHR1
cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2aWNlOworCisgICAg
ICAgIE5TRXJyb3IgKmVycm9yOworICAgICAgICBpZiAoIVtjYXB0dXJlTWFuYWdlciBzdGFydENh
cHR1cmVXaXRoRGVzY3JpcHRvcjpjYXB0dXJlRGVzY3JpcHRvciBlcnJvcjomZXJyb3JdKQorICAg
ICAgICB7CisgICAgICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBzdGFydCBjYXB0dXJlLCBlcnJv
ciAlQCIsIGVycm9yKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAgLy8gQU5HTEVfTUVUQUxf
RlJBTUVfQ0FQVFVSRV9FTkFCTEVECit9CisKK3ZvaWQgU3RhcnRGcmFtZUNhcHR1cmUoQ29udGV4
dE10bCAqY29udGV4dCkKK3sKKyAgICBTdGFydEZyYW1lQ2FwdHVyZShjb250ZXh0LT5nZXRNZXRh
bERldmljZSgpLCBjb250ZXh0LT5jbWRRdWV1ZSgpLmdldCgpKTsKK30KKwordm9pZCBTdG9wRnJh
bWVDYXB0dXJlKCkKK3sKKyNpZiBBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKyAg
ICBpZiAoIUlzRnJhbWVDYXB0dXJlRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBNVExDYXB0dXJlTWFuYWdlciAqY2FwdHVyZU1hbmFnZXIgPSBbTVRMQ2FwdHVy
ZU1hbmFnZXIgc2hhcmVkQ2FwdHVyZU1hbmFnZXJdOworICAgIGlmIChjYXB0dXJlTWFuYWdlci5p
c0NhcHR1cmluZykKKyAgICB7CisgICAgICAgIFtjYXB0dXJlTWFuYWdlciBzdG9wQ2FwdHVyZV07
CisgICAgfQorI2VuZGlmCit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworSU9TdXJm
YWNlU3VyZmFjZU10bDo6SU9TdXJmYWNlU3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OlN1cmZh
Y2VTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEVHTENsaWVudEJ1ZmZlciBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQorICAgIDogU3VyZmFj
ZU10bFByb3RvY29sKHN0YXRlKQoreworICAgIC8vIEtlZXAgcmVmZXJlbmNlIHRvIHRoZSBJT1N1
cmZhY2Ugc28gaXQgZG9lc24ndCBnZXQgZGVsZXRlZCB3aGlsZSB0aGUgcGJ1ZmZlciBleGlzdHMu
CisgICAgbUlPU3VyZmFjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9TdXJmYWNlUmVmPihidWZmZXIp
OworICAgIENGUmV0YWluKG1JT1N1cmZhY2UpOworCisgICAgLy8gRXh0cmFjdCBhdHRyaWJzIHVz
ZWZ1bCBmb3IgdGhlIGNhbGwgdG8gRUFHTFRleEltYWdlSU9TdXJmYWNlMkQKKyAgICBtV2lkdGgg
ID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJzLmdldChFR0xfV0lEVEgpKTsKKyAgICBtSGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihhdHRyaWJzLmdldChFR0xfSEVJR0hUKSk7CisgICAgbVBsYW5l
ICA9IHN0YXRpY19jYXN0PGludD4oYXR0cmlicy5nZXQoRUdMX0lPU1VSRkFDRV9QTEFORV9BTkdM
RSkpOworICAgIC8vIEhvcGVmdWxseSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBlciByb3cgaXMgYWx3
YXlzIGFuIGludGVnZXIgbnVtYmVyIG9mIHBpeGVscy4gV2UgdXNlCisgICAgLy8gZ2xSZWFkUGl4
ZWxzIHRvIGZpbGwgdGhlIElPU3VyZmFjZSBpbiB0aGUgc2ltdWxhdG9yIGFuZCBpdCBjYW4gb25s
eSBzdXBwb3J0IHN0cmlkZXMgdGhhdCBhcmUKKyAgICAvLyBhbiBpbnRlZ2VyIG51bWJlciBvZiBw
aXhlbHMuCisgICAgQVNTRVJUKElPU3VyZmFjZUdldEJ5dGVzUGVyUm93T2ZQbGFuZShtSU9TdXJm
YWNlLCBtUGxhbmUpICUKKyAgICAgICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVu
dE9mUGxhbmUobUlPU3VyZmFjZSwgbVBsYW5lKSA9PQorICAgICAgICAgICAwKTsKKyAgICBtUm93
U3RyaWRlSW5QaXhlbHMgPSBzdGF0aWNfY2FzdDxpbnQ+KElPU3VyZmFjZUdldEJ5dGVzUGVyUm93
T2ZQbGFuZShtSU9TdXJmYWNlLCBtUGxhbmUpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVudE9mUGxhbmUobUlPU3Vy
ZmFjZSwgbVBsYW5lKSk7CisKKyAgICBFR0xBdHRyaWIgaW50ZXJuYWxGb3JtYXQgPSBhdHRyaWJz
LmdldChFR0xfVEVYVFVSRV9JTlRFUk5BTF9GT1JNQVRfQU5HTEUpOworICAgIEVHTEF0dHJpYiB0
eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVfQU5HTEUpOworICAg
IG1Gb3JtYXRJbmRleCA9CisgICAgICAgIEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRleChzdGF0aWNf
Y2FzdDxHTGVudW0+KGludGVybmFsRm9ybWF0KSwgc3RhdGljX2Nhc3Q8R0xlbnVtPih0eXBlKSk7
CisgICAgQVNTRVJUKG1Gb3JtYXRJbmRleCA+PSAwKTsKKyAgICBtRm9ybWF0ICAgICAgICAgPSBk
aXNwbGF5LT5nZXRQaXhlbEZvcm1hdChrSU9TdXJmYWNlRm9ybWF0c1ttRm9ybWF0SW5kZXhdLnBp
eGVsRm9ybWF0KTsKKyAgICBtSW50ZXJuYWxGb3JtYXQgPSBkaXNwbGF5LT5nZXRQaXhlbEZvcm1h
dChrSU9TdXJmYWNlRm9ybWF0c1ttRm9ybWF0SW5kZXhdLmludGVybmFsUGl4ZWxGb3JtYXQpOwor
fQorCitJT1N1cmZhY2VTdXJmYWNlTXRsOjp+SU9TdXJmYWNlU3VyZmFjZU10bCgpCit7CisgICAg
U3RvcEZyYW1lQ2FwdHVyZSgpOworICAgIGlmIChtSU9TdXJmYWNlICE9IG51bGxwdHIpCisgICAg
eworICAgICAgICBDRlJlbGVhc2UobUlPU3VyZmFjZSk7CisgICAgICAgIG1JT1N1cmZhY2UgPSBu
dWxscHRyOworICAgIH0KK30KKwordm9pZCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpkZXN0cm95KGNv
bnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkge30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJm
YWNlTXRsOjppbml0aWFsaXplKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkKK3sKKyAgICBE
aXNwbGF5TXRsICpkaXNwbGF5TXRsICAgID0gbXRsOjpHZXRJbXBsKGRpc3BsYXkpOworICAgIGlk
PE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5TXRsLT5nZXRNZXRhbERldmljZSgpOwor
CisgICAgU3RhcnRGcmFtZUNhcHR1cmUobWV0YWxEZXZpY2UsIGRpc3BsYXlNdGwtPmNtZFF1ZXVl
KCkuZ2V0KCkpOworICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKworRnJhbWVidWZmZXJJ
bXBsICpJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVEZWZhdWx0RnJhbWVidWZmZXIoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAm
c3RhdGUpCit7CisgICAgYXV0byBmYm8gPSBuZXcgRnJhbWVidWZmZXJNdGwoc3RhdGUsIC8qIGZs
aXBZICovIHRydWUsIC8qIGJhY2tidWZmZXIgKi8gdGhpcyk7CisgICAgcmV0dXJuIGZibzsKK30K
KworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjptYWtlQ3VycmVudChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpH
ZXRJbXBsKGNvbnRleHQpOworICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOworICAg
IHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKworZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNl
TXRsOjp1bk1ha2VDdXJyZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIFN0
b3BGcmFtZUNhcHR1cmUoKTsKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK2VnbDo6
RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6c3dhcChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCkKK3sKKyAgICBTdG9wRnJhbWVDYXB0dXJlKCk7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICBTdGFydEZyYW1lQ2FwdHVyZShjb250ZXh0
TXRsKTsKKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJm
YWNlU3VyZmFjZU10bDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgd2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50
IGhlaWdodCkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGVnbDo6RWdsQmFk
QWNjZXNzKCk7Cit9CisKK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6cXVlcnlTdXJm
YWNlUG9pbnRlckFOR0xFKEVHTGludCBhdHRyaWJ1dGUsIHZvaWQgKip2YWx1ZSkKK3sKKyAgICBV
TklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGVnbDo6RWdsQmFkQWNjZXNzKCk7Cit9CisKK2Vn
bDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6YmluZFRleEltYWdlKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUgKnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKQoreworCisgICAgYW5nbGU6OlJlc3VsdCByZXMg
PSBjcmVhdGVCYWNraW5nVGV4dHVyZShjb250ZXh0KTsKKyAgICBpZiAocmVzID09IGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlKQorICAgICAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKK30KKworZWdsOjpFcnJvciBJ
T1N1cmZhY2VTdXJmYWNlTXRsOjpyZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsIEVHTGludCBidWZmZXIpCit7CisgICAgLy8gVGhpcyB3aWxsIG5lZWQgaW1wbGVtZW50
YXRpb24KKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQp
OworICAgIGlmIChjb250ZXh0TXRsLT5mbHVzaChjb250ZXh0KSA9PSBhbmdsZTo6UmVzdWx0OjpD
b250aW51ZSkKKyAgICB7CisgICAgICAgIG1JT1N1cmZhY2VUZXh0dXJlQ3JlYXRlZCA9IGZhbHNl
OworICAgICAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisgICAgfQorICAgIHJldHVybiBlZ2w6
OkVnbEJhZEFjY2VzcygpOworfQorCitlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6Omdl
dFN5bmNWYWx1ZXMoRUdMdWludDY0S0hSICp1c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRUdMdWludDY0S0hSICptc2MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMdWludDY0S0hSICpzYmMpCit7CisgICAg
VU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworfQorCitl
Z2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldE1zY1JhdGUoRUdMaW50ICpudW1lcmF0
b3IsIEVHTGludCAqZGVub21pbmF0b3IpCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJl
dHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworfQorCit2b2lkIElPU3VyZmFjZVN1cmZhY2VNdGw6
OnNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCit7CisgICAgVU5JTVBMRU1FTlRFRCgp
OworfQorCit2b2lkIElPU3VyZmFjZVN1cmZhY2VNdGw6OnNldEZpeGVkV2lkdGgoRUdMaW50IHdp
ZHRoKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKK30KKwordm9pZCBJT1N1cmZhY2VTdXJmYWNl
TXRsOjpzZXRGaXhlZEhlaWdodChFR0xpbnQgaGVpZ2h0KQoreworICAgIFVOSU1QTEVNRU5URUQo
KTsKK30KKworLy8gd2lkdGggYW5kIGhlaWdodCBjYW4gY2hhbmdlIHdpdGggY2xpZW50IHdpbmRv
dyByZXNpemluZworRUdMaW50IElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFdpZHRoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RUdMaW50PihtV2lkdGgpOworfQorCitFR0xpbnQg
SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RUdMaW50PihtSGVpZ2h0KTsKK30KKworRUdMaW50IElPU3VyZmFjZVN1cmZhY2VN
dGw6OmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEVHTF9G
QUxTRTsKK30KKworRUdMaW50IElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFN3YXBCZWhhdmlvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEVHTF9CVUZGRVJfREVTVFJPWUVEOworfQorCithbmdsZTo6
UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoCisg
ICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgR0xlbnVtIGJpbmRpbmcsCisgICAg
Y29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgsCisgICAgR0xzaXplaSBzYW1wbGVzLAor
ICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KQoreworICAgIEFO
R0xFX1RSWShlbnN1cmVUZXh0dXJlQ3JlYXRlZChjb250ZXh0KSk7CisgICAgKnJ0T3V0ID0gJm1S
ZW5kZXJUYXJnZXQ7CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQorCith
bmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9i
dGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBib29sICpuZXdEcmF3YWJsZU91dCkK
K3sKKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9CithbmdsZTo6UmVzdWx0
IElPU3VyZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KQoreworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250
aW51ZTsKK30KKworYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNr
aW5nVGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBtdGw6OlRleHR1
cmVSZWYgbVRlbXBvcmFyeVN1cmZhY2VSZWY7CisgICAgQU5HTEVfVFJZKGNyZWF0ZVRleHR1cmUo
Y29udGV4dCwgbUZvcm1hdCwgbVdpZHRoLCBtSGVpZ2h0LCBmYWxzZSwgJm1UZW1wb3JhcnlTdXJm
YWNlUmVmKSk7CisgICAgLy8gQ3JlYXRlIHRleHR1cmUgdmlldyBhcm91bmQgdGhlIGJhc2UgZm9y
bWF0IG9mIHRoZSB0ZXh0dXJlLgorICAgIG1JT1N1cmZhY2VUZXh0dXJlID0KKyAgICAgICAgbVRl
bXBvcmFyeVN1cmZhY2VSZWYtPmNyZWF0ZVZpZXdXaXRoRGlmZmVyZW50Rm9ybWF0KE1UTFBpeGVs
Rm9ybWF0QkdSQThVbm9ybSk7CisgICAgbVJlbmRlclRhcmdldC5zZXQobUlPU3VyZmFjZVRleHR1
cmUsIG10bDo6a1plcm9OYXRpdmVNaXBMZXZlbCwgMCwgbUludGVybmFsRm9ybWF0KTsKKyAgICBt
SU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQgPSB0cnVlOworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0
OjpDb250aW51ZTsKK30KKworYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1
cmVUZXh0dXJlQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAo
IW1JT1N1cmZhY2VUZXh0dXJlQ3JlYXRlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVC
YWNraW5nVGV4dHVyZShjb250ZXh0KTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworfQorCittdGw6OlRleHR1cmVSZWYgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0
VGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoZW5zdXJlQ3Vy
cmVudERyYXdhYmxlT2J0YWluZWQoY29udGV4dCkgPT0gYW5nbGU6OlJlc3VsdDo6Q29udGludWUp
CisgICAgeworICAgICAgICByZXR1cm4gbUlPU3VyZmFjZVRleHR1cmU7CisgICAgfQorICAgIHJl
dHVybiBudWxscHRyOworfQorCithbmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6OmNy
ZWF0ZVRleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpGb3JtYXQgJmZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VGV4dHVyZVJlZiAqdGV4dHVyZU91
dCkKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQp
OworICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6Ok1ha2VJT1N1cmZhY2VUZXh0dXJlKGNvbnRl
eHRNdGwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgbUlPU3VyZmFjZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGxhbmUsIHRleHR1cmVPdXQpKTsK
KyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cit9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3Jh
bU10bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1Byb2dyYW1NdGwuaAppbmRleCAzODllY2U3NTBlN2NhMzI3NzAyZjczNTk1M2EyMjFjMjQ2
ZTlhYmZlLi5lYjliYjAxNTVjMmY5MTM1M2I4YjViYzk2Y2MyMTM2OWQ2Njc4YmQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UHJvZ3JhbU10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgKQEAgLTIwLDEyICsyMCwxMyBAQAogI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oIgogI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZmZXJfcG9vbC5oIgogI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiCiAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oIgogI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oIgogCiBuYW1lc3BhY2UgcngKIHsKKyNk
ZWZpbmUgU0hBREVSX0VOVFJZX05BTUUgQCJtYWluMCIKIGNsYXNzIENvbnRleHRNdGw7CiAKIHN0
cnVjdCBQcm9ncmFtQXJndW1lbnRCdWZmZXJFbmNvZGVyTXRsCkBAIC0xMzQsNiArMTM1LDEwIEBA
IGNsYXNzIFByb2dyYW1NdGwgOiBwdWJsaWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRl
clBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplCiAgICAgYm9vbCBoYXNTcGVjaWFsaXplZFNoYWRlcihn
bDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykgb3ZlcnJp
ZGU7CiAKKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZU1zbFNoYWRlckxpYihtdGw6OkNvbnRleHQg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRl
clR5cGUgc2hhZGVyVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6SW5mb0xvZyAmaW5mb0xvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkTXNsSW5mbyk7CiAgICAgLy8g
Q2FsbHMgdGhpcyBiZWZvcmUgZHJhd2luZywgY2hhbmdlZFBpcGVsaW5lRGVzYyBpcyBwYXNzZWQg
d2hlbiB2ZXJ0ZXggYXR0cmlidXRlcyBkZXNjIGFuZC9vcgogICAgIC8vIHNoYWRlciBwcm9ncmFt
IGNoYW5nZWQuCiAgICAgYW5nbGU6OlJlc3VsdCBzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQg
KmdsQ29udGV4dCwKQEAgLTE0MSw3ICsxNDYsMTIgQEAgY2xhc3MgUHJvZ3JhbU10bCA6IHB1Ymxp
YyBQcm9ncmFtSW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OlJlbmRlclBpcGVsaW5lRGVz
YyAmcGlwZWxpbmVEZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGlwZWxp
bmVEZXNjQ2hhbmdlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlVGV4
dHVyZXNTZXR0aW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5pZm9ybUJ1
ZmZlcnNEaXJ0eSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVm
ZmVyc0RpcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdHJhbnNmb3JtRmVl
ZGJhY2tEcmF3KTsKKworICAgIHN0ZDo6c3RyaW5nIGdldFhmYk1zbFNvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1YZmJNc2xTb3VyY2U7IH0KKworICAgIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZSAq
bU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZTsKIAogICBwcml2YXRlOgogICAgIHRlbXBsYXRl
IDxpbnQgY29scywgaW50IHJvd3M+CkBAIC0xNTYsNiArMTY2LDExIEBAIGNsYXNzIFByb2dyYW1N
dGwgOiBwdWJsaWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVT
cGVjaWFsaXplCiAgICAgdm9pZCBzZXRVbmlmb3JtSW1wbChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgVCAqdiwgR0xlbnVtIGVudHJ5UG9pbnRUeXBlKTsKIAogICAgIGFuZ2xl
OjpSZXN1bHQgaW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENv
bnRleHQpOworICAgIGFuZ2xlOjpSZXN1bHQgcmVzaXplRGVmYXVsdFVuaWZvcm1CbG9ja3NNZW1v
cnkoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c2l6ZV90PiAm
cmVxdWlyZWRCdWZmZXJTaXplKTsKKyAgICB2b2lkIHNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0lu
Zm8oZ2w6OkJpbmFyeU91dHB1dFN0cmVhbSAqc3RyZWFtKTsKKyAgICBhbmdsZTo6UmVzdWx0IGxv
YWREZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJpbmFy
eUlucHV0U3RyZWFtICpzdHJlYW0pOwogCiAgICAgYW5nbGU6OlJlc3VsdCBjb21taXRVbmlmb3Jt
cyhDb250ZXh0TXRsICpjb250ZXh0LCBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNv
ZGVyKTsKICAgICBhbmdsZTo6UmVzdWx0IHVwZGF0ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0
ICpnbENvbnRleHQsCkBAIC0xNzcsMjEgKzE5MiwzMyBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVi
bGljIFByb2dyYW1JbXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6
ZQogICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZibG9ja3Ms
CiAgICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpOwogCi0gICAgYW5nbGU6OlJlc3Vs
dCB1cGRhdGVYZmJCdWZmZXJzKENvbnRleHRNdGwgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlw
ZWxpbmVEZXNjICZwaXBlbGluZURlc2MpOwotCiAgICAgdm9pZCByZXNldChDb250ZXh0TXRsICpj
b250ZXh0KTsKIAorICAgIHZvaWQgc2F2ZVRyYW5zbGF0ZWRTaGFkZXJzKGdsOjpCaW5hcnlPdXRw
dXRTdHJlYW0gKnN0cmVhbSk7CisgICAgdm9pZCBsb2FkVHJhbnNsYXRlZFNoYWRlcnMoZ2w6OkJp
bmFyeUlucHV0U3RyZWFtICpzdHJlYW0pOworCisgICAgdm9pZCBzYXZlU2hhZGVySW50ZXJuYWxJ
bmZvKGdsOjpCaW5hcnlPdXRwdXRTdHJlYW0gKnN0cmVhbSk7CisgICAgdm9pZCBsb2FkU2hhZGVy
SW50ZXJuYWxJbmZvKGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtKTsKKworI2lmIEFOR0xF
X0VOQUJMRV9NRVRBTF9TUElSVgorCisgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbFNwaXJ2KGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKTsKKyNlbmRpZgor
CisgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbERpcmVjdChjb25zdCBnbDo6Q29udGV4dCAqZ2xD
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dy
YW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKTsKKwogICAgIHZvaWQgbGlua1Jlc291cmNlcyhj
b25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzKTsKICAgICBhbmdsZTo6
UmVzdWx0IGxpbmtJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3Vy
Y2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpOwog
Ci0gICAgYW5nbGU6OlJlc3VsdCBjcmVhdGVNc2xTaGFkZXJMaWIobXRsOjpDb250ZXh0ICpjb250
ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJUeXBl
IHNoYWRlclR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6Oklu
Zm9Mb2cgJmluZm9Mb2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRs
OjpUcmFuc2xhdGVkU2hhZGVySW5mbyAqdHJhbnNsYXRlZE1zbEluZm8pOworICAgIGFuZ2xlOjpS
ZXN1bHQgbGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0
U3RyZWFtICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkluZm9Mb2cgJmluZm9Mb2cpOwogCiAgICAgLy8gU3RhdGUgZm9yIHRoZSBkZWZhdWx0IHVu
aWZvcm0gYmxvY2tzLgogICAgIHN0cnVjdCBEZWZhdWx0VW5pZm9ybUJsb2NrIGZpbmFsIDogcHJp
dmF0ZSBhbmdsZTo6Tm9uQ29weWFibGUKQEAgLTIzMCw2ICsyNTcsNyBAQCBjbGFzcyBQcm9ncmFt
TXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hl
U3BlY2lhbGl6ZQogICAgIC8vIENhY2hlZCByZWZlcmVuY2VzIG9mIGN1cnJlbnQgc2hhZGVyIHZh
cmlhbnRzLgogICAgIGdsOjpTaGFkZXJNYXA8UHJvZ3JhbVNoYWRlck9ialZhcmlhbnRNdGwgKj4g
bUN1cnJlbnRTaGFkZXJWYXJpYW50czsKIAorICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxl
SW5mb01hcCBtVmFyaWFibGVJbmZvTWFwOwogICAgIC8vIFNjcmF0Y2ggZGF0YToKICAgICAvLyBM
ZWdhbGl6ZWQgYnVmZmVycyBhbmQgdGhlaXIgb2Zmc2V0cy4gRm9yIGV4YW1wbGUsIHVuaWZvcm0g
YnVmZmVyJ3Mgb2Zmc2V0PTEgaXMgbm90IGEgdmFsaWQKICAgICAvLyBvZmZzZXQsIGl0IHdpbGwg
YmUgY29udmVydGVkIHRvIGxlZ2FsIG9mZnNldCBhbmQgdGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4g
dGhpcyBhcnJheS4KQEAgLTIzOCw3ICsyNjYsMTAgQEAgY2xhc3MgUHJvZ3JhbU10bCA6IHB1Ymxp
YyBQcm9ncmFtSW1wbCwgcHVibGljIG10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemUK
ICAgICAvLyBpbnRvIGFuIGFyZ3VtZW50IGJ1ZmZlci4KICAgICBzdGQ6OnZlY3Rvcjx1aW50MzJf
dD4gbUFyZ3VtZW50QnVmZmVyUmVuZGVyU3RhZ2VVc2FnZXM7CiAKKyAgICB1aW50MzJfdCBtU2hh
ZG93Q29tcGFyZU1vZGVzW210bDo6a01heFNoYWRlclNhbXBsZXJzXSA9IHswfTsKKwogICAgIG10
bDo6UmVuZGVyUGlwZWxpbmVDYWNoZSBtTWV0YWxSZW5kZXJQaXBlbGluZUNhY2hlOworICAgIHN0
ZDo6c3RyaW5nIG1YZmJNc2xTb3VyY2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9Qcm9ncmFtTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1Byb2dyYW1NdGwubW0KaW5kZXggNTBlMmY2Mzg3ZmQ0N2U3ZmMzOWM1NzBj
NmQ3MjU2NmMzYmY1YzIzZC4uNmRhODY2NDFjYWE4NTM1NjhjMDg1YTZhMDhiYzRjZjY1ZjUwMDI3
OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL1Byb2dyYW1NdGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dyYW1NdGwubW0KQEAgLTE0LDI1ICsxNCwzMSBA
QAogI2luY2x1ZGUgPHNzdHJlYW0+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRWYXJpYWJs
ZS5oIgogI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9Q
cm9ncmFtTGlua2VkUmVzb3VyY2VzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4
dE10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIK
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmgiCi0jaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaCIKKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIKICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9yZW5kZXJlcl91dGlscy5oIgogCisjaWYgQU5HTEVfRU5BQkxFX01FVEFM
X1NQSVJWCisjICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5n
X3V0aWxzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIHJ4CiB7CiAKIG5hbWVzcGFjZQogewotCi0j
ZGVmaW5lIFNIQURFUl9FTlRSWV9OQU1FIEAibWFpbjAiCisjaWYgQU5HTEVfRU5BQkxFX01FVEFM
X1NQSVJWCiBjb25zdGV4cHIgY2hhciBrU3BpcnZDcm9zc1NwZWNDb25zdFN1ZmZpeFtdID0gIl90
bXAiOwotCisjZW5kaWYKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY2xhc3MgU2NvcGVkQXV0b0Ns
ZWFyVmVjdG9yCiB7CkBAIC03OCw2ICs4NCw3IEBAIHZvaWQgSW5pdERlZmF1bHRVbmlmb3JtQmxv
Y2soY29uc3Qgc3RkOjp2ZWN0b3I8c2g6OlVuaWZvcm0+ICZ1bmlmb3JtcywKIAogICAgIHNpemVf
dCBibG9ja1NpemUgPSBibG9ja0VuY29kZXIuZ2V0Q3VycmVudE9mZnNldCgpOwogCisgICAgLy8g
VE9ETyhqbWFkaWxsKTogSSB0aGluayB3ZSBzdGlsbCBuZWVkIGEgdmFsaWQgYmxvY2sgZm9yIHRo
ZSBwaXBlbGluZSBldmVuIGlmIHplcm8gc2l6ZWQuCiAgICAgaWYgKGJsb2NrU2l6ZSA9PSAwKQog
ICAgIHsKICAgICAgICAgKmJsb2NrU2l6ZU91dCA9IDA7CkBAIC0yMjgsMTEgKzIzNSwxNiBAQCBQ
cm9ncmFtTXRsOjpEZWZhdWx0VW5pZm9ybUJsb2NrOjpEZWZhdWx0VW5pZm9ybUJsb2NrKCkge30K
IAogUHJvZ3JhbU10bDo6RGVmYXVsdFVuaWZvcm1CbG9jazo6fkRlZmF1bHRVbmlmb3JtQmxvY2so
KSA9IGRlZmF1bHQ7CiAKLVByb2dyYW1NdGw6OlByb2dyYW1NdGwoY29uc3QgZ2w6OlByb2dyYW1T
dGF0ZSAmc3RhdGUpCi0gICAgOiBQcm9ncmFtSW1wbChzdGF0ZSksIG1NZXRhbFJlbmRlclBpcGVs
aW5lQ2FjaGUodGhpcykKLXt9CitQcm9ncmFtTXRsOjpQcm9ncmFtTXRsKGNvbnN0IGdsOjpQcm9n
cmFtU3RhdGUgJnN0YXRlKSA6IFByb2dyYW1JbXBsKHN0YXRlKSwKKyAgICBtTWV0YWxSZW5kZXJQ
aXBlbGluZUNhY2hlKHRoaXMpCit7CisgICAgbU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZSA9
IG5ldyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGUoKTsKK30KIAotUHJvZ3JhbU10bDo6flByb2dy
YW1NdGwoKSB7fQorUHJvZ3JhbU10bDo6flByb2dyYW1NdGwoKQoreworICAgIGRlbGV0ZSBtTWV0
YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlOworfQogCiB2b2lkIFByb2dyYW1NdGw6OmRlc3Ryb3ko
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7CkBAIC0yNjIsMjUgKzI3NCw0NiBAQCB2b2lk
IFByb2dyYW1NdGw6OnJlc2V0KENvbnRleHRNdGwgKmNvbnRleHQpCiAgICAgewogICAgICAgICB2
YXIucmVzZXQoY29udGV4dCk7CiAgICAgfQotCiAgICAgbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNo
ZS5jbGVhcigpOworICAgIG1NZXRhbFhmYlJlbmRlclBpcGVsaW5lQ2FjaGUtPmNsZWFyKCk7Cit9
CisKK3ZvaWQgUHJvZ3JhbU10bDo6c2F2ZVRyYW5zbGF0ZWRTaGFkZXJzKGdsOjpCaW5hcnlPdXRw
dXRTdHJlYW0gKnN0cmVhbSkKK3sKKyAgICAvLyBXcml0ZSBvdXQgc2hhZGVyIHNvdXJjZXMgZm9y
IGFsbCBzaGFkZXIgdHlwZXMKKyAgICBmb3IgKGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5
cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKyAgICB7CisgICAgICAgIHN0cmVhbS0+d3JpdGVT
dHJpbmcobU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0ubWV0YWxTaGFkZXJTb3Vy
Y2UpOworICAgIH0KKyAgICBzdHJlYW0tPndyaXRlU3RyaW5nKG1YZmJNc2xTb3VyY2UpOworfQor
Cit2b2lkIFByb2dyYW1NdGw6OmxvYWRUcmFuc2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5SW5wdXRT
dHJlYW0gKnN0cmVhbSkKK3sKKyAgICAvLyBSZWFkIGluIHNoYWRlciBzb3VyY2VzIGZvciBhbGwg
c2hhZGVyIHR5cGVzCisgICAgZm9yIChjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDog
Z2w6OkFsbFNoYWRlclR5cGVzKCkpCisgICAgeworICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRl
SW5mb1tzaGFkZXJUeXBlXS5tZXRhbFNoYWRlclNvdXJjZSA9IHN0cmVhbS0+cmVhZFN0cmluZygp
OworICAgIH0KKyAgICBtWGZiTXNsU291cmNlID0gc3RyZWFtLT5yZWFkU3RyaW5nKCk7CiB9CiAK
IHN0ZDo6dW5pcXVlX3B0cjxyeDo6TGlua0V2ZW50PiBQcm9ncmFtTXRsOjpsb2FkKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykK
IHsKLSAgICAvLyBOT1RFKGhxbGUpOiBzdXBwb3J0IGJpbmFyeSBzaGFkZXIKLSAgICBVTklNUExF
TUVOVEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TGlua0V2ZW50RG9uZT4oYW5n
bGU6OlJlc3VsdDo6U3RvcCk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxMaW5rRXZl
bnREb25lPihsaW5rVHJhbnNsYXRlZFNoYWRlcnMoY29udGV4dCwgc3RyZWFtLCBpbmZvTG9nKSk7
CiB9CiAKIHZvaWQgUHJvZ3JhbU10bDo6c2F2ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwg
Z2w6OkJpbmFyeU91dHB1dFN0cmVhbSAqc3RyZWFtKQogewotICAgIC8vIE5PVEUoaHFsZSk6IHN1
cHBvcnQgYmluYXJ5IHNoYWRlcgotICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICBzYXZlVHJhbnNs
YXRlZFNoYWRlcnMoc3RyZWFtKTsKKyAgICBzYXZlU2hhZGVySW50ZXJuYWxJbmZvKHN0cmVhbSk7
CisgICAgc2F2ZURlZmF1bHRVbmlmb3JtQmxvY2tzSW5mbyhzdHJlYW0pOwogfQogCisKIHZvaWQg
UHJvZ3JhbU10bDo6c2V0QmluYXJ5UmV0cmlldmFibGVIaW50KGJvb2wgcmV0cmlldmFibGUpCiB7
CiAgICAgVU5JTVBMRU1FTlRFRCgpOwpAQCAtMjk0LDcgKzMyNyw3IEBAIHZvaWQgUHJvZ3JhbU10
bDo6c2V0U2VwYXJhYmxlKGJvb2wgc2VwYXJhYmxlKQogc3RkOjp1bmlxdWVfcHRyPExpbmtFdmVu
dD4gUHJvZ3JhbU10bDo6bGluayhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5r
ZWRSZXNvdXJjZXMgJnJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2csCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTWVyZ2VkVmFyeWluZ3MgJiAv
KiBtZXJnZWRWYXJ5aW5ncyAqLykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1NZXJnZWRWYXJ5aW5ncyAmbWVyZ2VkVmFyeWluZ3Mp
CiB7CiAgICAgLy8gTGluayByZXNvdXJjZXMgYmVmb3JlIGNhbGxpbmcgR2V0U2hhZGVyU291cmNl
IHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSByZWFkeSBmb3IgdGhlIHNldC9iaW5kaW5nCiAgICAgLy8g
YXNzaWdubWVudCBkb25lIGluIHRoYXQgZnVuY3Rpb24uCkBAIC0zMDQsNyArMzM3LDggQEAgc3Rk
Ojp1bmlxdWVfcHRyPExpbmtFdmVudD4gUHJvZ3JhbU10bDo6bGluayhjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCwKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxMaW5rRXZlbnREb25lPihs
aW5rSW1wbChjb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpKTsKIH0KIAotYW5nbGU6OlJlc3Vs
dCBQcm9ncmFtTXRsOjpsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorI2lm
IEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpsaW5r
SW1wbFNwaXJ2KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNv
dXJjZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZp
bmZvTG9nKQogewpAQCAtMzU1LDYgKzM4OSw3NSBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6
OmxpbmtJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAKICAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6Q29udGludWU7CiB9CisjZW5kaWYKKworYW5nbGU6OlJlc3VsdCBQcm9ncmFt
TXRsOjpsaW5rSW1wbERpcmVjdChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291
cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
SW5mb0xvZyAmaW5mb0xvZykKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpH
ZXRJbXBsKGdsQ29udGV4dCk7CisKKyAgICByZXNldChjb250ZXh0TXRsKTsKKyAgICBBTkdMRV9U
UlkoaW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKGdsQ29udGV4dCkpOworICAgIFNoYWRlck1hcElu
dGVyZmFjZVZhcmlhYmxlSW5mb01hcCB2YXJpYWJsZUluZm9NYXA7CisKKyAgICBnbDo6U2hhZGVy
TWFwPHN0ZDo6c3RyaW5nPiBzaGFkZXJTb3VyY2VzOworICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpz
dHJpbmc+IHRyYW5zbGF0ZWRNc2xTaGFkZXJzOworICAgIG10bDo6TVNMR2V0U2hhZGVyU291cmNl
KG1TdGF0ZSwgcmVzb3VyY2VzLCAmc2hhZGVyU291cmNlcywgJnZhcmlhYmxlSW5mb01hcCk7CisK
KyAgICBBTkdMRV9UUlkobXRsOjpHbHNsYW5nR2V0TVNMKGdsQ29udGV4dCwgbVN0YXRlLCBjb250
ZXh0TXRsLT5nZXRDYXBzKCksIHNoYWRlclNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZUluZm9NYXAsICZtTXNsU2hhZGVyVHJhbnNsYXRlSW5mbywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2xhdGVkTXNsU2hhZGVycywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZS5nZXRFeGVjdXRhYmxlKCkuZ2V0
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJDb3VudCgpKSk7CisKKworICAgIGZvciAoZ2w6OlNoYWRl
clR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCisgICAgeworICAg
ICAgICAvLyBDcmVhdGUgYWN0dWFsIE1ldGFsIHNoYWRlcgorICAgICAgICBBTkdMRV9UUlkoCisg
ICAgICAgICAgICBjcmVhdGVNc2xTaGFkZXJMaWIoY29udGV4dE10bCwgc2hhZGVyVHlwZSwgaW5m
b0xvZywgJm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdKSk7CisgICAgfQorICAg
IHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKworYW5nbGU6OlJlc3VsdCBQcm9n
cmFtTXRsOjpsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNl
cyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5m
b0xvZyAmaW5mb0xvZykKK3sKKyAgICAvLyBUT0RPOiBXZSBuZWVkIHNvbWUgd2F5IG9mIHRvZ2ds
aW5nIHRoaXMuCisjaWYgQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCisgICAgaWYgKHNoOjpyZWFk
Qm9vbEVudlZhcigiQU5HTEVfR0VOX01UTF9XSVRIX1NQSVJWIikpCisgICAgeworICAgICAgIHJl
dHVybiBsaW5rSW1wbFNwaXJ2KGdsQ29udGV4dCwgcmVzb3VyY2VzLCBpbmZvTG9nKTsKKyAgICB9
CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgIHJldHVybiBsaW5rSW1wbERpcmVjdChn
bENvbnRleHQsIHJlc291cmNlcywgaW5mb0xvZyk7CisgICAgfQorfQorCisKK2FuZ2xlOjpSZXN1
bHQgUHJvZ3JhbU10bDo6bGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnN0IGdsOjpDb250ZXh0ICpn
bENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKQoreworICAgIENv
bnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKyAgICAvLyBO
T1RFKGhxbGUpOiBObyB0cmFuc2Zvcm0gZmVlZGJhY2tzIGZvciBub3csIHNpbmNlIHdlIG9ubHkg
c3VwcG9ydCBFUyAyLjAgYXRtCisKKyAgICByZXNldChjb250ZXh0TXRsKTsKKworICAgIGxvYWRU
cmFuc2xhdGVkU2hhZGVycyhzdHJlYW0pOworICAgIGxvYWRTaGFkZXJJbnRlcm5hbEluZm8oc3Ry
ZWFtKTsKKyAgICBBTkdMRV9UUlkobG9hZERlZmF1bHRVbmlmb3JtQmxvY2tzSW5mbyhnbENvbnRl
eHQsIHN0cmVhbSkpOworCisgICAgQU5HTEVfVFJZKGNyZWF0ZU1zbFNoYWRlckxpYihjb250ZXh0
TXRsLCBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCBpbmZvTG9nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW2dsOjpTaGFkZXJUeXBlOjpWZXJ0
ZXhdKSk7CisgICAgQU5HTEVfVFJZKGNyZWF0ZU1zbFNoYWRlckxpYihjb250ZXh0TXRsLCBnbDo6
U2hhZGVyVHlwZTo6RnJhZ21lbnQsIGluZm9Mb2csCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50XSkp
OworCisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQogCiB2b2lkIFByb2dy
YW1NdGw6OmxpbmtSZXNvdXJjZXMoY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJl
c291cmNlcykKIHsKQEAgLTM2Niw4ICs0NjksNiBAQCB2b2lkIFByb2dyYW1NdGw6OmxpbmtSZXNv
dXJjZXMoY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcykKIAogYW5n
bGU6OlJlc3VsdCBQcm9ncmFtTXRsOjppbml0RGVmYXVsdFVuaWZvcm1CbG9ja3MoY29uc3QgZ2w6
OkNvbnRleHQgKmdsQ29udGV4dCkKIHsKLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRs
OjpHZXRJbXBsKGdsQ29udGV4dCk7Ci0KICAgICAvLyBQcm9jZXNzIHZlcnRleCBhbmQgZnJhZ21l
bnQgdW5pZm9ybXMgaW50byBzdGQxNDAgcGFja2luZy4KICAgICBnbDo6U2hhZGVyTWFwPHNoOjpC
bG9ja0xheW91dE1hcD4gbGF5b3V0TWFwOwogICAgIGdsOjpTaGFkZXJNYXA8c2l6ZV90PiByZXF1
aXJlZEJ1ZmZlclNpemU7CkBAIC00MjYsNiArNTI3LDE1IEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3Jh
bU10bDo6aW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRl
eHQpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICByZXR1cm4gcmVzaXplRGVmYXVsdFVuaWZvcm1C
bG9ja3NNZW1vcnkoZ2xDb250ZXh0LCByZXF1aXJlZEJ1ZmZlclNpemUpOworfQorCithbmdsZTo6
UmVzdWx0IFByb2dyYW1NdGw6OnJlc2l6ZURlZmF1bHRVbmlmb3JtQmxvY2tzTWVtb3J5KAorICAg
IGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxz
aXplX3Q+ICZyZXF1aXJlZEJ1ZmZlclNpemUpCit7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOworCiAgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBz
aGFkZXJUeXBlIDogZ2w6OkFsbEdMRVMyU2hhZGVyVHlwZXMoKSkKICAgICB7CiAgICAgICAgIGlm
IChyZXF1aXJlZEJ1ZmZlclNpemVbc2hhZGVyVHlwZV0gPiAwKQpAQCAtNDUzLDYgKzU2Myw5IEBA
IGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFkZXIobXRsOjpDb250
ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZDxNVExGdW5jdGlvbj4gKnNoYWRlck91dCkKIHsKICAgICBzdGF0aWNfYXNzZXJ0KFlF
UyA9PSAxLCAiWUVTIHNob3VsZCBoYXZlIHZhbHVlIG9mIDEiKTsKKyAgICAjaWYgQU5HTEVfRU5B
QkxFX01FVEFMX1NQSVJWCisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHVzZVNwaXJ2ID0gc2g6
OnJlYWRCb29sRW52VmFyKCJBTkdMRV9HRU5fTVRMX1dJVEhfU1BJUlYiKTsKKyAgICAjZW5kaWYK
IAogICAgIG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gKnRyYW5zbGF0ZWRNc2xJbmZvID0gJm1N
c2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdOwogICAgIFByb2dyYW1TaGFkZXJPYmpW
YXJpYW50TXRsICpzaGFkZXJWYXJpYW50OwpAQCAtNDkwLDkgKzYwMywyMiBAQCBhbmdsZTo6UmVz
dWx0IFByb2dyYW1NdGw6OmdldFNwZWNpYWxpemVkU2hhZGVyKG10bDo6Q29udGV4dCAqY29udGV4
dCwKICAgICAgICAgICAgIEJPT0wgZW11bGF0ZURpc2NhcmQgPSByZW5kZXJQaXBlbGluZURlc2Mu
cmFzdGVyaXphdGlvblR5cGUgPT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
dGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RW11bGF0ZWREaXNjYXJkOwogCi0gICAg
ICAgICAgICBOU1N0cmluZyAqZGlzY2FyZEVuYWJsZWRTdHIgPQotICAgICAgICAgICAgICAgIFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMlcyIsIHNoOjptdGw6OmtSYXN0ZXJpemVyRGlz
Y2FyZEVuYWJsZWRDb25zdE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga1NwaXJ2Q3Jvc3NTcGVjQ29uc3RTdWZmaXhdOworICAgICAgICAgICAgTlNTdHJp
bmcgKmRpc2NhcmRFbmFibGVkU3RyOworI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorICAg
ICAgICAgICAgaWYgKHVzZVNwaXJ2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRp
c2NhcmRFbmFibGVkU3RyID0gW05TU3RyaW5nCisgICAgICAgICAgICAgICAgICAgIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlcyVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aDo6VHJhbnNsYXRvck1ldGFsOjpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5h
bWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3BpcnZDcm9zc1Nw
ZWNDb25zdFN1ZmZpeF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkaXNjYXJkRW5hYmxlZFN0ciA9CisgICAg
ICAgICAgICAgICAgICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpzaDo6VHJhbnNs
YXRvck1ldGFsRGlyZWN0OjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUo
KV07CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZ1bmNDb25zdGFudHMgPSBbW01UTEZ1
bmN0aW9uQ29uc3RhbnRWYWx1ZXMgYWxsb2NdIGluaXRdOwogICAgICAgICAgICAgW2Z1bmNDb25z
dGFudHMgc2V0Q29uc3RhbnRWYWx1ZTomZW11bGF0ZURpc2NhcmQKQEAgLTUxNSw5ICs2NDEsMjIg
QEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpnZXRTcGVjaWFsaXplZFNoYWRlcihtdGw6OkNv
bnRleHQgKmNvbnRleHQsCiAKICAgICAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICAgICAg
ewotICAgICAgICAgICAgTlNTdHJpbmcgKmNvdmVyYWdlTWFza0VuYWJsZWRTdHIgPQotICAgICAg
ICAgICAgICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJXMlcyIsIHNoOjptdGw6OmtD
b3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtTcGlydkNyb3NzU3BlY0NvbnN0U3VmZml4XTsKKyAgICAgICAgICAg
IE5TU3RyaW5nICpjb3ZlcmFnZU1hc2tFbmFibGVkU3RyOworI2lmIEFOR0xFX0VOQUJMRV9NRVRB
TF9TUElSVgorICAgICAgICAgICAgaWYgKHVzZVNwaXJ2KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvdmVyYWdlTWFza0VuYWJsZWRTdHIgPSBbTlNTdHJpbmcKKyAgICAgICAgICAg
ICAgICAgICAgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJXMiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNoOjpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0VuYWJs
ZWRDb25zdE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3Bp
cnZDcm9zc1NwZWNDb25zdFN1ZmZpeF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb3ZlcmFnZU1hc2tFbmFi
bGVkU3RyID0KKyAgICAgICAgICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3Ry
aW5nOnNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldENvdmVyYWdlTWFza0VuYWJsZWRDb25z
dE5hbWUoKV07CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZ1bmNDb25zdGFudHMgPSBb
W01UTEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZXMgYWxsb2NdIGluaXRdOwogICAgICAgICAgICAgW2Z1
bmNDb25zdGFudHMgc2V0Q29uc3RhbnRWYWx1ZTomZW11bGF0ZUNvdmVyYWdlTWFzawpAQCAtNTU1
LDYgKzY5NCw3IEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFk
ZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogfQorCiBib29sIFByb2dyYW1NdGw6Omhhc1NwZWNpYWxpemVkU2hhZGVyKGdsOjpT
aGFkZXJUeXBlIHNoYWRlclR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZyZW5kZXJQaXBlbGluZURlc2MpCiB7
CkBAIC01OTIsNiArNzMyLDkzIEBAIGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6Y3JlYXRlTXNs
U2hhZGVyTGliKG10bDo6Q29udGV4dCAqY29udGV4dCwKICAgICB9CiB9CiAKK3ZvaWQgUHJvZ3Jh
bU10bDo6c2F2ZURlZmF1bHRVbmlmb3JtQmxvY2tzSW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFt
ICpzdHJlYW0pCit7CisgICAgLy8gU2VyaWFsaXplcyB0aGUgdW5pZm9ybUxheW91dCBkYXRhIG9m
IG1EZWZhdWx0VW5pZm9ybUJsb2NrcworICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlw
ZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHVu
aWZvcm1Db3VudCA9IG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtTGF5
b3V0LnNpemUoKTsKKyAgICAgICAgc3RyZWFtLT53cml0ZUludDxzaXplX3Q+KHVuaWZvcm1Db3Vu
dCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1J
bmRleCA8IHVuaWZvcm1Db3VudDsgKyt1bmlmb3JtSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHNoOjpCbG9ja01lbWJlckluZm8gJmJsb2NrSW5mbyA9CisgICAgICAgICAgICAgICAgbURl
ZmF1bHRVbmlmb3JtQmxvY2tzW3NoYWRlclR5cGVdLnVuaWZvcm1MYXlvdXRbdW5pZm9ybUluZGV4
XTsKKyAgICAgICAgICAgIGdsOjpXcml0ZUJsb2NrTWVtYmVySW5mbyhzdHJlYW0sIGJsb2NrSW5m
byk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXJpYWxpemVzIHJlcXVpcmVkIHVuaWZv
cm0gYmxvY2sgbWVtb3J5IHNpemVzCisgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBl
IDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisgICAgeworICAgICAgICBzdHJlYW0tPndyaXRlSW50
KG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtRGF0YS5zaXplKCkpOwor
ICAgIH0KK30KKworYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpsb2FkRGVmYXVsdFVuaWZvcm1C
bG9ja3NJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0U3Ry
ZWFtICpzdHJlYW0pCit7CisgICAgZ2w6OlNoYWRlck1hcDxzaXplX3Q+IHJlcXVpcmVkQnVmZmVy
U2l6ZTsKKyAgICByZXF1aXJlZEJ1ZmZlclNpemUuZmlsbCgwKTsKKworICAgIC8vIERlc2VyaWFs
aXplcyB0aGUgdW5pZm9ybUxheW91dCBkYXRhIG9mIG1EZWZhdWx0VW5pZm9ybUJsb2NrcworICAg
IGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQor
ICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHVuaWZvcm1Db3VudCA9IHN0cmVhbS0+cmVhZElu
dDxzaXplX3Q+KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7
IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1Db3VudDsgKyt1bmlmb3JtSW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHNoOjpCbG9ja01lbWJlckluZm8gYmxvY2tJbmZvOworICAgICAgICAgICAg
Z2w6OkxvYWRCbG9ja01lbWJlckluZm8oc3RyZWFtLCAmYmxvY2tJbmZvKTsKKyAgICAgICAgICAg
IG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0LnB1c2hfYmFj
ayhibG9ja0luZm8pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gRGVzZXJpYWxpemVzIHJl
cXVpcmVkIHVuaWZvcm0gYmxvY2sgbWVtb3J5IHNpemVzCisgICAgZm9yIChnbDo6U2hhZGVyVHlw
ZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisgICAgeworICAgICAgICByZXF1
aXJlZEJ1ZmZlclNpemVbc2hhZGVyVHlwZV0gPSBzdHJlYW0tPnJlYWRJbnQ8c2l6ZV90PigpOwor
ICAgIH0KKworICAgIHJldHVybiByZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeShnbENv
bnRleHQsIHJlcXVpcmVkQnVmZmVyU2l6ZSk7Cit9CisKK3ZvaWQgUHJvZ3JhbU10bDo6c2F2ZVNo
YWRlckludGVybmFsSW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCit7CisgICAg
Zm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisg
ICAgeworICAgICAgICBzdHJlYW0tPndyaXRlSW50PGludD4obU1zbFNoYWRlclRyYW5zbGF0ZUlu
Zm9bc2hhZGVyVHlwZV0uaGFzVUJPQXJndW1lbnRCdWZmZXIpOworICAgICAgICBmb3IgKGNvbnN0
IG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOgorICAgICAgICAgICAgIG1Nc2xTaGFkZXJU
cmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmFjdHVhbFNhbXBsZXJCaW5kaW5ncykKKyAgICAgICAg
eworICAgICAgICAgICAgc3RyZWFtLT53cml0ZUludDx1aW50MzJfdD4oYmluZGluZy50ZXh0dXJl
QmluZGluZyk7CisgICAgICAgICAgICBzdHJlYW0tPndyaXRlSW50PHVpbnQzMl90PihiaW5kaW5n
LnNhbXBsZXJCaW5kaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodWludDMyX3QgdWJv
QmluZGluZyA6IG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmFjdHVhbFVCT0Jp
bmRpbmdzKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJlYW0tPndyaXRlSW50PHVpbnQzMl90
Pih1Ym9CaW5kaW5nKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBQcm9ncmFtTXRsOjps
b2FkU2hhZGVySW50ZXJuYWxJbmZvKGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtKQorewor
ICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygp
KQorICAgIHsKKyAgICAgICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0uaGFz
VUJPQXJndW1lbnRCdWZmZXIgPSBzdHJlYW0tPnJlYWRJbnQ8aW50PigpICE9IDA7CisgICAgICAg
IGZvciAobXRsOjpTYW1wbGVyQmluZGluZyAmYmluZGluZyA6CisgICAgICAgICAgICAgbU1zbFNo
YWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0uYWN0dWFsU2FtcGxlckJpbmRpbmdzKQorICAg
ICAgICB7CisgICAgICAgICAgICBiaW5kaW5nLnRleHR1cmVCaW5kaW5nID0gc3RyZWFtLT5yZWFk
SW50PHVpbnQzMl90PigpOworICAgICAgICAgICAgYmluZGluZy5zYW1wbGVyQmluZGluZyA9IHN0
cmVhbS0+cmVhZEludDx1aW50MzJfdD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodWlu
dDMyX3QgJnVib0JpbmRpbmcgOiBtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5h
Y3R1YWxVQk9CaW5kaW5ncykKKyAgICAgICAgeworICAgICAgICAgICAgdWJvQmluZGluZyA9IHN0
cmVhbS0+cmVhZEludDx1aW50MzJfdD4oKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogR0xib29s
ZWFuIFByb2dyYW1NdGw6OnZhbGlkYXRlKGNvbnN0IGdsOjpDYXBzICZjYXBzLCBnbDo6SW5mb0xv
ZyAqaW5mb0xvZykKIHsKICAgICAvLyBOby1vcC4gVGhlIHNwZWMgaXMgdmVyeSB2YWd1ZSBhYm91
dCB0aGUgYmVoYXZpb3Igb2YgdmFsaWRhdGlvbi4KQEAgLTg3NywxNCArMTEwNCwyNSBAQCBhbmds
ZTo6UmVzdWx0IFByb2dyYW1NdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5k
ZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcGlwZWxpbmVEZXNjQ2hhbmdlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VUZXh0dXJlc1NldHRpbmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHVuaWZvcm1CdWZmZXJzRGlydHkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVuaWZvcm1CdWZmZXJzRGlydHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNr
RHJhdykKIHsKICAgICBDb250ZXh0TXRsICpjb250ZXh0ID0gbXRsOjpHZXRJbXBsKGdsQ29udGV4
dCk7CiAgICAgaWYgKHBpcGVsaW5lRGVzY0NoYW5nZWQpCiAgICAgewogICAgICAgICAvLyBSZW5k
ZXIgcGlwZWxpbmUgc3RhdGUgbmVlZHMgdG8gYmUgY2hhbmdlZAotICAgICAgICBpZDxNVExSZW5k
ZXJQaXBlbGluZVN0YXRlPiBwaXBlbGluZVN0YXRlID0KLSAgICAgICAgICAgIG1NZXRhbFJlbmRl
clBpcGVsaW5lQ2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0LCBwaXBlbGluZURl
c2MpOworICAgICAgICBpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiBwaXBlbGluZVN0YXRlID0g
bmlsOworICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tEcmF3KQorICAgICAgICB7CisgICAg
ICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyB4ZmJQaXBlbGluZURlc2MgPSBtdGw6OlJl
bmRlclBpcGVsaW5lRGVzYyhwaXBlbGluZURlc2MpOworICAgICAgICAgICAgeGZiUGlwZWxpbmVE
ZXNjLnJhc3Rlcml6YXRpb25UeXBlICAgID0gbXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRp
b246OkRpc2FibGVkOworICAgICAgICAgICAgcGlwZWxpbmVTdGF0ZSA9CisgICAgICAgICAgICAg
ICAgbU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZS0+Z2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShj
b250ZXh0LCB4ZmJQaXBlbGluZURlc2MpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgcGlwZWxpbmVTdGF0ZSA9IG1NZXRhbFJlbmRlclBpcGVsaW5lQ2Fj
aGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0LCBwaXBlbGluZURlc2MpOworICAgICAg
ICB9CiAgICAgICAgIGlmICghcGlwZWxpbmVTdGF0ZSkKICAgICAgICAgewogICAgICAgICAgICAg
Ly8gRXJyb3IgYWxyZWFkeSBsb2dnZWQgaW5zaWRlIGdldFJlbmRlclBpcGVsaW5lU3RhdGUoKQpA
QCAtOTEzLDExICsxMTUxLDYgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpzZXR1cERyYXco
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICAgICAgQU5HTEVfVFJZKHVwZGF0ZVVu
aWZvcm1CdWZmZXJzKGNvbnRleHQsIGNtZEVuY29kZXIsIHBpcGVsaW5lRGVzYykpOwogICAgIH0K
IAotICAgIGlmIChwaXBlbGluZURlc2NDaGFuZ2VkKQotICAgIHsKLSAgICAgICAgQU5HTEVfVFJZ
KHVwZGF0ZVhmYkJ1ZmZlcnMoY29udGV4dCwgY21kRW5jb2RlciwgcGlwZWxpbmVEZXNjKSk7Ci0g
ICAgfQotCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCkBAIC05NDgs
MTAgKzExODEsMTIgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVUZXh0dXJlcyhj
b25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZvcmNlVXBkYXRlKQog
ewotICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsK
LSAgICBjb25zdCBhdXRvICZnbFN0YXRlICAgID0gZ2xDb250ZXh0LT5nZXRTdGF0ZSgpOworICAg
IENvbnRleHRNdGwgKmNvbnRleHRNdGwgICAgICAgICAgICAgICAgICA9IG10bDo6R2V0SW1wbChn
bENvbnRleHQpOworICAgIGNvbnN0IGF1dG8gJmdsU3RhdGUgICAgICAgICAgICAgICAgICAgICA9
IGdsQ29udGV4dC0+Z2V0U3RhdGUoKTsKKyAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUg
KmV4ZWN1dGFibGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUo
KTsKIAogICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0dXJlc0NhY2hlICZjb21wbGV0ZVRleHR1cmVz
ID0gZ2xTdGF0ZS5nZXRBY3RpdmVUZXh0dXJlc0NhY2hlKCk7CisgICAgY29uc3QgZ2w6OkFjdGl2
ZVRleHR1cmVUeXBlQXJyYXkgJnRleHR1cmVUeXBlcyAgPSBleGVjdXRhYmxlLT5nZXRBY3RpdmVT
YW1wbGVyVHlwZXMoKTsKIAogICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGds
OjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCiAgICAgewpAQCAtOTY0LDYgKzExOTksOCBAQCBhbmds
ZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVwZGF0ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0ICpn
bENvbnRleHQsCiAgICAgICAgIGNvbnN0IG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gJnNoYWRl
ckluZm8gPQogICAgICAgICAgICAgKm1DdXJyZW50U2hhZGVyVmFyaWFudHNbc2hhZGVyVHlwZV0t
PnRyYW5zbGF0ZWRTcmNJbmZvOwogCisgICAgICAgIGJvb2wgaGFzRGVwdGhTYW1wbGVyID0gZmFs
c2U7CisKICAgICAgICAgZm9yICh1aW50MzJfdCB0ZXh0dXJlSW5kZXggPSAwOyB0ZXh0dXJlSW5k
ZXggPCBtU3RhdGUuZ2V0U2FtcGxlckJpbmRpbmdzKCkuc2l6ZSgpOwogICAgICAgICAgICAgICsr
dGV4dHVyZUluZGV4KQogICAgICAgICB7CkBAIC05NzUsMTYgKzEyMTIsMTYgQEAgYW5nbGU6OlJl
c3VsdCBQcm9ncmFtTXRsOjp1cGRhdGVUZXh0dXJlcyhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBnbDo6VGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBzYW1wbGVyQmluZGluZy50ZXh0dXJl
VHlwZTsKIAogICAgICAgICAgICAgZm9yICh1aW50MzJfdCBhcnJheUVsZW1lbnQgPSAwOyBhcnJh
eUVsZW1lbnQgPCBzYW1wbGVyQmluZGluZy5ib3VuZFRleHR1cmVVbml0cy5zaXplKCk7CiAgICAg
ICAgICAgICAgICAgICsrYXJyYXlFbGVtZW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEdMdWludCB0ZXh0dXJlVW5pdCAgID0gc2FtcGxlckJpbmRpbmcuYm91bmRUZXh0dXJlVW5p
dHNbYXJyYXlFbGVtZW50XTsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9
IGNvbXBsZXRlVGV4dHVyZXNbdGV4dHVyZVVuaXRdOwotICAgICAgICAgICAgICAgIGdsOjpTYW1w
bGVyICpzYW1wbGVyID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRTYW1wbGVyKHRleHR1cmVV
bml0KTsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCB0ZXh0dXJlU2xvdCA9IG1zbEJpbmRpbmcu
dGV4dHVyZUJpbmRpbmcgKyBhcnJheUVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAgdWludDMyX3Qg
c2FtcGxlclNsb3QgPSBtc2xCaW5kaW5nLnNhbXBsZXJCaW5kaW5nICsgYXJyYXlFbGVtZW50Owor
ICAgICAgICAgICAgICAgIEdMdWludCB0ZXh0dXJlVW5pdCAgICAgICAgICA9IHNhbXBsZXJCaW5k
aW5nLmJvdW5kVGV4dHVyZVVuaXRzW2FycmF5RWxlbWVudF07CisgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUgKnRleHR1cmUgICAgICAgID0gY29tcGxldGVUZXh0dXJlc1t0ZXh0dXJlVW5pdF07
CisgICAgICAgICAgICAgICAgZ2w6OlNhbXBsZXIgKnNhbXBsZXIgICAgICAgID0gY29udGV4dE10
bC0+Z2V0U3RhdGUoKS5nZXRTYW1wbGVyKHRleHR1cmVVbml0KTsKKyAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSB0ZXh0dXJlVHlwZXNbdGV4dHVyZVVuaXRdOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHRleHR1cmVTbG90ICAgICAgICA9IG1zbEJpbmRpbmcu
dGV4dHVyZUJpbmRpbmcgKyBhcnJheUVsZW1lbnQ7CisgICAgICAgICAgICAgICAgdWludDMyX3Qg
c2FtcGxlclNsb3QgICAgICAgID0gbXNsQmluZGluZy5zYW1wbGVyQmluZGluZyArIGFycmF5RWxl
bWVudDsKICAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICBBTkdMRV9UUlkoY29udGV4dE10bC0+Z2V0SW5jb21wbGV0ZVRl
eHR1cmUoZ2xDb250ZXh0LCB0ZXh0dXJlVHlwZSwgJnRleHR1cmUpKTsKQEAgLTk5NCwyNSArMTIz
MSwyMiBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVwZGF0ZVRleHR1cmVzKGNvbnN0IGds
OjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICAgICAgVGV4dHVyZU10bCAqdGV4dHVy
ZU10bCA9IG10bDo6R2V0SW1wbCh0ZXh0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAoc2FtcGxl
ckJpbmRpbmcuZm9ybWF0ID09IGdsOjpTYW1wbGVyRm9ybWF0OjpTaGFkb3cpCiAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vYW5nbGVidWcuY29tLzUxMDcK
LSAgICAgICAgICAgICAgICAgICAgLy8gTWV0YWwgZG9lc24ndCBzdXBwb3J0IGEgY29tcGFyZSBt
b2RlIHdoZXJlIHNhbXBsaW5nIGEgc2hhZG93IHNhbXBsZXIgY291bGQKLSAgICAgICAgICAgICAg
ICAgICAgLy8gcmV0dXJuIGEgc2FtZSB2YWx1ZSBhcyBpZiBzYW1wbGluZyBmcm9tIGEgbm9ybWFs
IHNhbXBsZXIuCi0gICAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnRpbmcgdGhpcyBjb3VsZCBy
ZXF1aXJlIGhhY2tpbmcgc3BpcnYtY3Jvc3MgdG8gY2hhbmdlIHNhbXBsZV9jb21wYXJlKCkKLSAg
ICAgICAgICAgICAgICAgICAgLy8gdG8gc2FtcGxlKCkuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChBTkdMRV9VTkxJS0VMWShzYW1wbGVyU3RhdGUtPmdldENvbXBhcmVNb2RlKCkgIT0gR0xfQ09N
UEFSRV9SRUZfVE9fVEVYVFVSRSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEVSUigpIDw8ICJHTF9URVhUVVJFX0NPTVBBUkVfTU9ERSAhPSBHTF9DT01Q
QVJFX1JFRl9UT19URVhUVVJFIGlzIG5vdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAic3VwcG9ydGVkIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFOR0xFX01UTF9UUlko
Y29udGV4dE10bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxl
clN0YXRlLT5nZXRDb21wYXJlTW9kZSgpID09IEdMX0NPTVBBUkVfUkVGX1RPX1RFWFRVUkUpOwot
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGhhc0RlcHRoU2FtcGxl
ciAgICAgICAgICAgICAgICAgID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNoYWRvd0Nv
bXBhcmVNb2Rlc1t0ZXh0dXJlU2xvdF0gPSBtdGw6Ok1zbEdldFNoYWRlclNoYWRvd0NvbXBhcmVN
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlTW9k
ZSgpLCBzYW1wbGVyU3RhdGUtPmdldENvbXBhcmVGdW5jKCkpOwogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIEFOR0xFX1RSWSh0ZXh0dXJlTXRsLT5iaW5kVG9TaGFkZXIoZ2xD
b250ZXh0LCBjbWRFbmNvZGVyLCBzaGFkZXJUeXBlLCBzYW1wbGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVNsb3QsIHNhbXBsZXJT
bG90KSk7CiAgICAgICAgICAgICB9ICAvLyBmb3IgYXJyYXkgZWxlbWVudHMKICAgICAgICAgfSAg
ICAgIC8vIGZvciBzYW1wbGVyIGJpbmRpbmdzCi0gICAgfSAgICAgICAgICAvLyBmb3Igc2hhZGVy
IHR5cGVzCisKKyAgICAgICAgaWYgKGhhc0RlcHRoU2FtcGxlcikKKyAgICAgICAgeworICAgICAg
ICAgICAgY21kRW5jb2Rlci0+c2V0RGF0YShzaGFkZXJUeXBlLCBtU2hhZG93Q29tcGFyZU1vZGVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OmtTaGFkb3dTYW1wbGVyQ29t
cGFyZU1vZGVzQmluZGluZ0luZGV4KTsKKyAgICAgICAgfQorICAgIH0gIC8vIGZvciBzaGFkZXIg
dHlwZXMKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KQEAgLTEwNDAs
MTEgKzEyNzQsNiBAQCBhbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVwZGF0ZVVuaWZvcm1CdWZm
ZXJzKENvbnRleHRNdGwgKmNvbnRleHQsCiAKICAgICBmb3IgKGdsOjpTaGFkZXJUeXBlIHNoYWRl
clR5cGUgOiBnbDo6QWxsR0xFUzJTaGFkZXJUeXBlcygpKQogICAgIHsKLSAgICAgICAgaWYgKCFt
Q3VycmVudFNoYWRlclZhcmlhbnRzW3NoYWRlclR5cGVdKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmIChtQ3VycmVudFNoYWRlclZhcmlh
bnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mby0+aGFzVUJPQXJndW1lbnRCdWZmZXIp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFOR0xFX1RSWSgKQEAgLTExNDksOCArMTM3OCw2IEBA
IGFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6YmluZFVuaWZvcm1CdWZmZXJzVG9EaXNjcmV0ZVNs
b3RzKAogICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCiB7CiAgICAgY29uc3QgZ2w6OlN0
YXRlICZnbFN0YXRlID0gY29udGV4dC0+Z2V0U3RhdGUoKTsKLSAgICBjb25zdCBtdGw6OlRyYW5z
bGF0ZWRTaGFkZXJJbmZvICZzaGFkZXJJbmZvID0KLSAgICAgICAgKm1DdXJyZW50U2hhZGVyVmFy
aWFudHNbc2hhZGVyVHlwZV0tPnRyYW5zbGF0ZWRTcmNJbmZvOwogICAgIGZvciAodWludDMyX3Qg
YnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVmZmVySW5k
ZXgpCiAgICAgewogICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmJsb2NrID0gYmxv
Y2tzW2J1ZmZlckluZGV4XTsKQEAgLTExNjIsNyArMTM4OSw4IEBAIGFuZ2xlOjpSZXN1bHQgUHJv
Z3JhbU10bDo6YmluZFVuaWZvcm1CdWZmZXJzVG9EaXNjcmV0ZVNsb3RzKAogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICB1aW50MzJfdCBhY3R1YWxCdWZmZXJJZHgg
PSBzaGFkZXJJbmZvLmFjdHVhbFVCT0JpbmRpbmdzW2J1ZmZlckluZGV4XTsKKyAgICAgICAgdWlu
dDMyX3QgYWN0dWFsQnVmZmVySWR4ID0KKyAgICAgICAgICAgIG1Nc2xTaGFkZXJUcmFuc2xhdGVJ
bmZvW3NoYWRlclR5cGVdLmFjdHVhbFVCT0JpbmRpbmdzW2J1ZmZlckluZGV4XTsKIAogICAgICAg
ICBpZiAoYWN0dWFsQnVmZmVySWR4ID49IG10bDo6a01heFNoYWRlckJ1ZmZlcnMpCiAgICAgICAg
IHsKQEAgLTExOTksMTIgKzE0MjcsMTIgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjplbmNv
ZGVVbmlmb3JtQnVmZmVyc0luZm9Bcmd1bWVudEJ1ZmZlcigKICAgICBbYnVmZmVyRW5jb2Rlci5t
ZXRhbEFyZ0J1ZmZlckVuY29kZXIgc2V0QXJndW1lbnRCdWZmZXI6YXJndW1lbnRCdWZmZXItPmdl
dCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0OmFyZ3VtZW50QnVmZmVyT2Zmc2V0XTsKIAotICAgIHN0YXRpY19hc3NlcnQoTVRMUmVu
ZGVyU3RhZ2VWZXJ0ZXggPT0gKDB4MSA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ2w6OlNoYWRl
clR5cGU6OlZlcnRleCkpLAotICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGdsIFNoYWRlclR5
cGUgZW51bSBhbmQgTWV0YWwgZW51bSB0byByZWxhdGl2ZSB0byBlYWNoIG90aGVyIik7Ci0gICAg
c3RhdGljX2Fzc2VydCgKLSAgICAgICAgTVRMUmVuZGVyU3RhZ2VGcmFnbWVudCA9PSAoMHgxIDw8
IHN0YXRpY19jYXN0PHVpbnQzMl90PihnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQpKSwKLSAgICAg
ICAgIkV4cGVjdGVkIGdsIFNoYWRlclR5cGUgZW51bSBhbmQgTWV0YWwgZW51bSB0byByZWxhdGl2
ZSB0byBlYWNoIG90aGVyIik7Ci0gICAgYXV0byBtdGxSZW5kZXJTdGFnZSA9IHN0YXRpY19jYXN0
PE1UTFJlbmRlclN0YWdlcz4oMHgxIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90PihzaGFkZXJUeXBl
KSk7CisgICAgY29uc3RleHByIGdsOjpTaGFkZXJNYXA8TVRMUmVuZGVyU3RhZ2VzPiBrU2hhZGVy
U3RhZ2VNYXAgPSB7CisgICAgICAgIHtnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCBtdGw6OmtSZW5k
ZXJTdGFnZVZlcnRleH0sCisgICAgICAgIHtnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQsIG10bDo6
a1JlbmRlclN0YWdlRnJhZ21lbnR9LAorICAgIH07CisKKyAgICBhdXRvIG10bFJlbmRlclN0YWdl
ID0ga1NoYWRlclN0YWdlTWFwW3NoYWRlclR5cGVdOwogCiAgICAgZm9yICh1aW50MzJfdCBidWZm
ZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYmxvY2tzLnNpemUoKTsgKytidWZmZXJJbmRleCkK
ICAgICB7CkBAIC0xMjM5LDQ5ICsxNDY3LDQgQEAgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpl
bmNvZGVVbmlmb3JtQnVmZmVyc0luZm9Bcmd1bWVudEJ1ZmZlcigKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CiAKLWFuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6dXBkYXRl
WGZiQnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpS
ZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYykKLXsKLSAgICBjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUgICAgICAgICAgICAgICAgID0gY29udGV4dC0+Z2V0U3RhdGUoKTsKLSAgICBnbDo6
VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gZ2xTdGF0ZS5nZXRDdXJyZW50
VHJhbnNmb3JtRmVlZGJhY2soKTsKLQotICAgIGlmIChwaXBlbGluZURlc2MucmFzdGVyaXphdGlv
bkVuYWJsZWQoKSB8fCAhZ2xTdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSB8fAotICAgICAgICBBTkdMRV9VTkxJS0VMWSghdHJhbnNmb3JtRmVlZGJhY2spKQotICAgIHsK
LSAgICAgICAgLy8gWEZCIG91dHB1dCBjYW4gb25seSBiZSB1c2VkIHdpdGggcmFzdGVyaXphdGlv
biBkaXNhYmxlZC4KLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwotICAg
IH0KLQotICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCA9IGdsU3RhdGUuZ2V0UHJvZ3JhbUV4ZWN1
dGFibGUoKS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJDb3VudCgpOwotCi0gICAgQVNTRVJU
KHhmYkJ1ZmZlckNvdW50ID4gMCk7Ci0gICAgQVNTRVJUKG1TdGF0ZS5nZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKSAhPSBHTF9JTlRFUkxFQVZFRF9BVFRSSUJTIHx8Ci0gICAgICAgICAg
IHhmYkJ1ZmZlckNvdW50ID09IDEpOwotCi0gICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAw
OyBidWZmZXJJbmRleCA8IHhmYkJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQotICAgIHsKLSAg
ICAgICAgdWludDMyX3QgYWN0dWFsQnVmZmVySWR4ID0gbU1zbFhmYk9ubHlWZXJ0ZXhTaGFkZXJJ
bmZvLmFjdHVhbFhGQkJpbmRpbmdzW2J1ZmZlckluZGV4XTsKLQotICAgICAgICBpZiAoYWN0dWFs
QnVmZmVySWR4ID49IG10bDo6a01heFNoYWRlckJ1ZmZlcnMpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRp
bmdQb2ludGVyPGdsOjpCdWZmZXI+ICZidWZmZXJCaW5kaW5nID0KLSAgICAgICAgICAgIHRyYW5z
Zm9ybUZlZWRiYWNrLT5nZXRJbmRleGVkQnVmZmVyKGJ1ZmZlckluZGV4KTsKLSAgICAgICAgZ2w6
OkJ1ZmZlciAqYnVmZmVyID0gYnVmZmVyQmluZGluZy5nZXQoKTsKLSAgICAgICAgQVNTRVJUKChi
dWZmZXJCaW5kaW5nLmdldE9mZnNldCgpICUgNCkgPT0gMCk7Ci0gICAgICAgIEFTU0VSVChidWZm
ZXIgIT0gbnVsbHB0cik7Ci0KLSAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6Okdl
dEltcGwoYnVmZmVyKTsKLQotICAgICAgICAvLyBVc2Ugb2Zmc2V0PTAsIGFjdHVhbCBvZmZzZXQg
d2lsbCBiZSBzZXQgaW4gRHJpdmVyIFVuaWZvcm0gaW5zaWRlIENvbnRleHRNdGwuCi0gICAgICAg
IGNtZEVuY29kZXItPnNldEJ1ZmZlckZvcldyaXRlKGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsIGJ1
ZmZlck10bC0+Z2V0Q3VycmVudEJ1ZmZlcigpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhY3R1YWxCdWZmZXJJZHgpOwotICAgIH0KLQotICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKLX0KLQogfSAgLy8gbmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVl
cnlNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9RdWVyeU10bC5oCmluZGV4IDIxODU0ZjY4OGY5YmIwODg0MThmOGU2N2NkN2FkM2U5YWIz
Y2M5YjEuLjI3OGYxZGYxNmJlZjA0MWQ4NmUxNTY1ZmM0OThkZjk4NDYzMjFhMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9R
dWVyeU10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9RdWVyeU10bC5oCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtOTgsOCArOTgsNyBAQCBjbGFzcyBRdWVyeU10bCA6IHB1YmxpYyBRdWVyeUltcGwK
ICAgICBjb25zdCBtdGw6OkJ1ZmZlclJlZiAmZ2V0VmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcigpIGNv
bnN0IHsgcmV0dXJuIG1WaXNpYmlsaXR5UmVzdWx0QnVmZmVyOyB9CiAgICAgLy8gUmVzZXQgdGhl
IG9jY2x1c2lvbiBxdWVyeSByZXN1bHQgc3RvcmVkIGluIGJ1ZmZlciB0byB6ZXJvCiAgICAgdm9p
ZCByZXNldFZpc2liaWxpdHlSZXN1bHQoQ29udGV4dE10bCAqY29udGV4dE10bCk7Ci0KLSAgICB2
b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOwor
ICAgIHZvaWQgb25UcmFuc2Zvcm1GZWVkYmFja0VuZChHTHNpemVpcHRyIHByaW1pdGl2ZXNEcmF3
bik7CiAKICAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KQEAgLTEwOCw4ICsx
MDcsMTMgQEAgY2xhc3MgUXVlcnlNdGwgOiBwdWJsaWMgUXVlcnlJbXBsCiAgICAgLy8gTGlzdCBv
ZiBvZmZzZXRzIGluIHRoZSByZW5kZXIgcGFzcydzIG9jY2x1c2lvbiBxdWVyeSBwb29sIGJ1ZmZl
ciBhbGxvY2F0ZWQgZm9yIHRoaXMgcXVlcnkKICAgICBWaXNpYmlsaXR5QnVmZmVyT2Zmc2V0c010
bCBtVmlzaWJpbGl0eUJ1ZmZlck9mZnNldHM7CiAgICAgbXRsOjpCdWZmZXJSZWYgbVZpc2liaWxp
dHlSZXN1bHRCdWZmZXI7CisgICAgLy8gVXNlZCB3aXRoIFRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0
aXZlc1dyaXR0ZW4gd2hlbiB0cmFuc2Zvcm0gZmVlZGJhY2sgaXMgZW11bGF0ZWQuCisgICAgc2l6
ZV90IG1UcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3bjsKIAotICAgIHNpemVfdCBtVHJh
bnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd24gPSAwOworICAgIC8vIFRPRE8oamN1bm5pbmdo
YW0pOiBjdXJyZW50bHkgb25seSB1c2VkIGZvciBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVz
RHJhd24KKyAgICAvLyBidXQgY2FuIGJlIHVzZWQgZm9yIHJlc3Qgb2YgcmVzdWx0cworICAgIHVp
bnQ2NF90IG1DYWNoZWRSZXN1bHQ7CisgICAgYm9vbCBtQ2FjaGVkUmVzdWx0VmFsaWQ7CiB9Owog
CiB9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5tbSBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5tbQppbmRleCBm
NWU5YmYzYjgyN2Q4ZDMwZjFiMzY3MTRkMDY1MDIzZTE0MTVhMDkxLi5hYjBlN2JmMDgwMTE1MmMw
N2FiYjAyMDAzM2I4Y2Y1NTVjNzUzYzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW0KKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1t
CkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTMsNyArMTMsMTIg
QEAKIAogbmFtZXNwYWNlIHJ4CiB7Ci1RdWVyeU10bDo6UXVlcnlNdGwoZ2w6OlF1ZXJ5VHlwZSB0
eXBlKSA6IFF1ZXJ5SW1wbCh0eXBlKSB7fQorUXVlcnlNdGw6OlF1ZXJ5TXRsKGdsOjpRdWVyeVR5
cGUgdHlwZSkKKyAgICA6IFF1ZXJ5SW1wbCh0eXBlKSwKKyAgICAgIG1UcmFuc2Zvcm1GZWVkYmFj
a1ByaW1pdGl2ZXNEcmF3bigwKSwKKyAgICAgIG1DYWNoZWRSZXN1bHQoMCksCisgICAgICBtQ2Fj
aGVkUmVzdWx0VmFsaWQoZmFsc2UpCit7fQogCiBRdWVyeU10bDo6flF1ZXJ5TXRsKCkge30KIApA
QCAtMjIsMTMgKzI3LDE0IEBAIHZvaWQgUXVlcnlNdGw6Om9uRGVzdHJveShjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCkKICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBs
KGNvbnRleHQpOwogICAgIGlmICghZ2V0QWxsb2NhdGVkVmlzaWJpbGl0eU9mZnNldHMoKS5lbXB0
eSgpKQogICAgIHsKLSAgICAgICAgY29udGV4dE10bC0+b25PY2NsdXNpb25RdWVyeURlc3Ryb3ko
Y29udGV4dCwgdGhpcyk7CisgICAgICAgIGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVlcnlEZXN0
cm95ZWQoY29udGV4dCwgdGhpcyk7CiAgICAgfQogICAgIG1WaXNpYmlsaXR5UmVzdWx0QnVmZmVy
ID0gbnVsbHB0cjsKIH0KIAogYW5nbGU6OlJlc3VsdCBRdWVyeU10bDo6YmVnaW4oY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQpCiB7CisgICAgbUNhY2hlZFJlc3VsdFZhbGlkICAgICA9IGZhbHNl
OwogICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CiAg
ICAgc3dpdGNoIChnZXRUeXBlKCkpCiAgICAgewpAQCAtNDcsNyArNTMsNyBAQCBhbmdsZTo6UmVz
dWx0IFF1ZXJ5TXRsOjpiZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEFOR0xFX1RSWShjb250ZXh0
TXRsLT5vbk9jY2x1c2lvblF1ZXJ5QmVnaW4oY29udGV4dCwgdGhpcykpOworICAgICAgICAgICAg
QU5HTEVfVFJZKGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVlcnlCZWdhbihjb250ZXh0LCB0aGlz
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpUcmFu
c2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNXcml0dGVuOgogICAgICAgICAgICAgbVRyYW5zZm9ybUZl
ZWRiYWNrUHJpbWl0aXZlc0RyYXduID0gMDsKQEAgLTY2LDEzICs3MiwyMyBAQCBhbmdsZTo6UmVz
dWx0IFF1ZXJ5TXRsOjplbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiAgICAgewogICAg
ICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OkFueVNhbXBsZXM6CiAgICAgICAgIGNhc2UgZ2w6OlF1
ZXJ5VHlwZTo6QW55U2FtcGxlc0NvbnNlcnZhdGl2ZToKLSAgICAgICAgICAgIGNvbnRleHRNdGwt
Pm9uT2NjbHVzaW9uUXVlcnlFbmQoY29udGV4dCwgdGhpcyk7CisgICAgICAgICAgICBjb250ZXh0
TXRsLT5vbk9jY2x1c2lvblF1ZXJ5RW5kZWQoY29udGV4dCwgdGhpcyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFja1ByaW1p
dGl2ZXNXcml0dGVuOgorICAgICAgICB7CisgICAgICAgICAgICBtQ2FjaGVkUmVzdWx0ID0gbVRy
YW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduOworCiAgICAgICAgICAgICAvLyBUaGVyZSBj
b3VsZCBiZSB0cmFuc2Zvcm0gZmVlZGJhY2sgaW4gcHJvZ3Jlc3MsIHNvIGFkZCB0aGUgcHJpbWl0
aXZlcyBkcmF3biBzbyBmYXIKICAgICAgICAgICAgIC8vIGZyb20gdGhlIGN1cnJlbnQgdHJhbnNm
b3JtIGZlZWRiYWNrIG9iamVjdC4KLSAgICAgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQo
Y29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1G
ZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmdl
dFN0YXRlKCkuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICBpZiAo
dHJhbnNmb3JtRmVlZGJhY2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUNhY2hl
ZFJlc3VsdCArPSB0cmFuc2Zvcm1GZWVkYmFjay0+Z2V0UHJpbWl0aXZlc0RyYXduKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtQ2FjaGVkUmVzdWx0VmFsaWQgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTAsNyArMTI2LDcgQEAgYW5nbGU6
OlJlc3VsdCBRdWVyeU10bDo6d2FpdEFuZEdldFJlc3VsdChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgVCAqcGFyYW1zKQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW46Ci0gICAg
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8VD4obVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0
aXZlc0RyYXduKTsKKyAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxUPihtQ2FjaGVk
UmVzdWx0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOwpAQCAtMTM3LDcgKzE1Myw3IEBAIGFuZ2xlOjpSZXN1bHQgUXVl
cnlNdGw6OmlzUmVzdWx0QXZhaWxhYmxlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBib29s
ICphdmFpCiAgICAgICAgICAgICAqYXZhaWxhYmxlID0gIW1WaXNpYmlsaXR5UmVzdWx0QnVmZmVy
LT5pc0JlaW5nVXNlZEJ5R1BVKGNvbnRleHRNdGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgZ2w6OlF1ZXJ5VHlwZTo6VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzV3JpdHRl
bjoKLSAgICAgICAgICAgICphdmFpbGFibGUgPSB0cnVlOworICAgICAgICAgICAgKmF2YWlsYWJs
ZSA9IG1DYWNoZWRSZXN1bHRWYWxpZDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwpAQCAtMTc1LDEzICsxOTEsOSBAQCB2
b2lkIFF1ZXJ5TXRsOjpyZXNldFZpc2liaWxpdHlSZXN1bHQoQ29udGV4dE10bCAqY29udGV4dE10
bCkKICAgICBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlci0+c3luY0NvbnRlbnQoY29udGV4dE10bCwg
YmxpdEVuY29kZXIpOwogfQogCi12b2lkIFF1ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5k
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQordm9pZCBRdWVyeU10bDo6b25UcmFuc2Zvcm1G
ZWVkYmFja0VuZChHTHNpemVpcHRyIHByaW1pdGl2ZXNEcmF3bikKIHsKLSAgICBnbDo6VHJhbnNm
b3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0U3RhdGUoKS5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKLSAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2spCi0g
ICAgewotICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd24gKz0gdHJhbnNm
b3JtRmVlZGJhY2stPmdldFByaW1pdGl2ZXNEcmF3bigpOwotICAgIH0KKyAgICBtVHJhbnNmb3Jt
RmVlZGJhY2tQcmltaXRpdmVzRHJhd24gKz0gcHJpbWl0aXZlc0RyYXduOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyQnVmZmVyTXRsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmgKaW5kZXggNmZkN2IxYjk5NGI4OTY3
ZmJlY2NjYTg1MTU5NWY5MGM5NWY4NDA4MS4uMDUzMDIwYzVlM2E1YTg3MDkwYTJjYjJmNWFkNWRm
MDczMDc2NWU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJNdGwuaApA
QCAtNTcsNiArNTcsNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJNdGwgOiBwdWJsaWMgUmVuZGVyYnVm
ZmVySW1wbAogCiAgICAgbXRsOjpGb3JtYXQgbUZvcm1hdDsKICAgICBtdGw6OlRleHR1cmVSZWYg
bVRleHR1cmU7CisgICAgbXRsOjpUZXh0dXJlUmVmIG1JbXBsaWNpdE1TVGV4dHVyZTsKICAgICBS
ZW5kZXJUYXJnZXRNdGwgbVJlbmRlclRhcmdldDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJCdWZmZXJN
dGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyQnVmZmVyTXRsLm1tCmluZGV4IDYzZDZmNGI3MjgzOTU4MGM5MzMwNDViZWU0ZTVl
MzI5NTYyM2I0MDAuLjJmOWI1ZjYzMmQ1MGJiZDcyMTE2MWQzYzNmZTM2YjUzNjY4N2QyNzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9SZW5kZXJCdWZmZXJNdGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQpAQCAtMjcsNyArMjcs
OCBAQCB2b2lkIFJlbmRlcmJ1ZmZlck10bDo6b25EZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KQogCiB2b2lkIFJlbmRlcmJ1ZmZlck10bDo6cmVsZWFzZVRleHR1cmUoKQogewotICAg
IG1UZXh0dXJlID0gbnVsbHB0cjsKKyAgICBtVGV4dHVyZSAgICAgICAgICAgPSBudWxscHRyOwor
ICAgIG1JbXBsaWNpdE1TVGV4dHVyZSA9IG51bGxwdHI7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgUmVu
ZGVyYnVmZmVyTXRsOjpzZXRTdG9yYWdlSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwK
QEAgLTQyLDggKzQzLDkgQEAgYW5nbGU6OlJlc3VsdCBSZW5kZXJidWZmZXJNdGw6OnNldFN0b3Jh
Z2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIHsKICAgICAgICAgLy8gQ2hl
Y2sgYWdhaW5zdCB0aGUgc3RhdGUgaWYgd2UgbmVlZCB0byByZWNyZWF0ZSB0aGUgc3RvcmFnZS4K
ICAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ICE9IG1TdGF0ZS5nZXRGb3JtYXQoKS5pbmZvLT5p
bnRlcm5hbEZvcm1hdCB8fAotICAgICAgICAgICAgd2lkdGggIT0gbVN0YXRlLmdldFdpZHRoKCkg
fHwgaGVpZ2h0ICE9IG1TdGF0ZS5nZXRIZWlnaHQoKSB8fAotICAgICAgICAgICAgc2FtcGxlcyAh
PSBtU3RhdGUuZ2V0U2FtcGxlcygpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0xzaXplaT4o
d2lkdGgpICE9IG1TdGF0ZS5nZXRXaWR0aCgpIHx8CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxH
THNpemVpPihoZWlnaHQpICE9IG1TdGF0ZS5nZXRIZWlnaHQoKSB8fAorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8R0xzaXplaT4oc2FtcGxlcykgIT0gbVN0YXRlLmdldFNhbXBsZXMoKSkKICAgICAg
ICAgewogICAgICAgICAgICAgcmVsZWFzZVRleHR1cmUoKTsKICAgICAgICAgfQpAQCAtNzIsMzAg
Kzc0LDYyIEBAIGFuZ2xlOjpSZXN1bHQgUmVuZGVyYnVmZmVyTXRsOjpzZXRTdG9yYWdlSW1wbChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIGlmICgobVRleHR1cmUgPT0gbnVsbHB0
ciB8fCAhbVRleHR1cmUtPnZhbGlkKCkpICYmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwKSkK
ICAgICB7Ci0gICAgICAgIGlmIChhY3R1YWxTYW1wbGVzID09IDEpCisgICAgICAgIGlmIChhY3R1
YWxTYW1wbGVzID09IDEgfHwgKG1Gb3JtYXQuaGFzRGVwdGhBbmRTdGVuY2lsQml0cygpICYmIG1G
b3JtYXQuZ2V0Q2FwcygpLnJlc29sdmUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBBTkdMRV9U
UlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKGNvbnRleHRNdGwsIG1Gb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIDEsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtRm9ybWF0Lmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMoKSwgJm1UZXh0dXJl
KSk7CisgICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKGNv
bnRleHRNdGwsIG1Gb3JtYXQsIHN0YXRpY19jYXN0PHVpbnQzMl90Pih3aWR0aCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVp
bnQzMl90PihoZWlnaHQpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiByZW5kZXJUYXJnZXRPbmx5ICovIGZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbGxvd0Zvcm1hdFZpZXcg
Ki8gZmFsc2UsICZtVGV4dHVyZSkpOworCisgICAgICAgICAgICAvLyBVc2UgaW1wbGljaXQgcmVz
b2x2ZSBmb3IgZGVwdGggc3RlbmNpbCB0ZXh0dXJlIHdoZW5ldmVyIHBvc3NpYmxlLiBUaGlzIGlz
IGJlY2F1c2UKKyAgICAgICAgICAgIC8vIGZvciBkZXB0aCBzdGVuY2lsIHRleHR1cmUsIGlmIHN0
ZW5jaWwgbmVlZHMgdG8gYmUgYmxpdHRlZCwgYSBmb3JtYXR0ZWQgY2xvbmUgaGFzCisgICAgICAg
ICAgICAvLyB0byBiZSBjcmVhdGVkLiBBbmQgaXQgaXMgZXhwZW5zaXZlIHRvIGNsb25lIGEgbXVs
dGlzYW1wbGUgdGV4dHVyZS4KKyAgICAgICAgICAgIGlmIChhY3R1YWxTYW1wbGVzID4gMSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGZvcm1hdCBtdXN0IHN1cHBvcnRz
IGltcGxpY2l0IHJlc29sdmUKKyAgICAgICAgICAgICAgICBBU1NFUlQobUZvcm1hdC5nZXRDYXBz
KCkucmVzb2x2ZSk7CisKKyAgICAgICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpN
YWtlMkRNU1RleHR1cmUoCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRNdGwsIG1Gb3JtYXQs
IHN0YXRpY19jYXN0PHVpbnQzMl90Pih3aWR0aCksCisgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihoZWlnaHQpLCBhY3R1YWxTYW1wbGVzLAorICAgICAgICAgICAgICAg
ICAgICAvKiByZW5kZXJUYXJnZXRPbmx5ICovIHRydWUsCisgICAgICAgICAgICAgICAgICAgIC8q
IGFsbG93Rm9ybWF0VmlldyAqLyBmYWxzZSwgJm1JbXBsaWNpdE1TVGV4dHVyZSkpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAg
QU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6TWFrZTJETVNUZXh0dXJlKAotICAgICAgICAgICAgICAg
IGNvbnRleHRNdGwsIG1Gb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGFjdHVhbFNhbXBsZXMsCi0gICAg
ICAgICAgICAgICAgLyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwKLSAgICAgICAgICAgICAg
ICAvKiBhbGxvd0Zvcm1hdFZpZXcgKi8gbUZvcm1hdC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCks
ICZtVGV4dHVyZSkpOworICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6TWFrZTJE
TVNUZXh0dXJlKGNvbnRleHRNdGwsIG1Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdpZHRoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oaGVpZ2h0KSwgYWN0dWFsU2FtcGxlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZW5kZXJUYXJnZXRPbmx5
ICovIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qIGFsbG93Rm9ybWF0VmlldyAqLyBmYWxzZSwgJm1UZXh0dXJlKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBtUmVuZGVyVGFyZ2V0LnNldChtVGV4dHVyZSwgbXRsOjprWmVyb05hdGl2
ZU1pcExldmVsLCAwLCBtRm9ybWF0KTsKKyAgICAgICAgbVJlbmRlclRhcmdldC5zZXRXaXRoSW1w
bGljaXRNU1RleHR1cmUobVRleHR1cmUsIG1JbXBsaWNpdE1TVGV4dHVyZSwgbXRsOjprWmVyb05h
dGl2ZU1pcExldmVsLCAwLCBtRm9ybWF0KTsKIAogICAgICAgICAvLyBGb3IgZW11bGF0ZWQgY2hh
bm5lbHMgdGhhdCBHTCB0ZXh0dXJlIGludGVuZHMgdG8gbm90IGhhdmUsCiAgICAgICAgIC8vIHdl
IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGVpciBjb250ZW50LgogICAgICAgICBib29sIGVtdWxhdGVk
Q2hhbm5lbHMgPSBtdGw6OklzRm9ybWF0RW11bGF0ZWQobUZvcm1hdCk7CiAgICAgICAgIGlmIChl
bXVsYXRlZENoYW5uZWxzKQogICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIGluZGV4ID0gbXRs
OjpJbWFnZU5hdGl2ZUluZGV4OjpGcm9tQmFzZVplcm9HTEluZGV4KGdsOjpJbWFnZUluZGV4OjpN
YWtlMkQoMCkpOwotCi0gICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVy
ZUNvbnRlbnRzKGNvbnRleHQsIG1UZXh0dXJlLCBtRm9ybWF0LCBpbmRleCkpOwotICAgICAgICB9
CisgICAgICAgICAgICBnbDo6SW1hZ2VJbmRleCBpbmRleDsKKworICAgICAgICAgICAgaWYgKGFj
dHVhbFNhbXBsZXMgPiAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4ID0g
Z2w6OkltYWdlSW5kZXg6Ok1ha2UyRE11bHRpc2FtcGxlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5kZXggPSBnbDo6
SW1hZ2VJbmRleDo6TWFrZTJEKDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBTkdM
RV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnRleHQsIG1UZXh0dXJlLCBt
Rm9ybWF0LCBtdGw6OkltYWdlTmF0aXZlSW5kZXgoaW5kZXgsIDApKSk7CisgICAgICAgICAgICBp
ZiAobUltcGxpY2l0TVNUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFO
R0xFX1RSWShtdGw6OkluaXRpYWxpemVUZXh0dXJlQ29udGVudHMoY29udGV4dCwgbUltcGxpY2l0
TVNUZXh0dXJlLCBtRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXRsOjpJbWFnZU5hdGl2ZUluZGV4KGdsOjpJbWFnZUluZGV4
OjpNYWtlMkRNdWx0aXNhbXBsZSgpLCAwKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9ICAv
LyBpZiAoZW11bGF0ZWRDaGFubmVscykKICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CkBAIC0xMzMsNyArMTY3LDYgQEAgYW5nbGU6OlJlc3VsdCBSZW5kZXJidWZm
ZXJNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgc2FtcGxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0
T3V0KQogewotICAgIC8vIE5PVEUoaHFsZSk6IFN1cHBvcnQgTVNBQS4KICAgICBBU1NFUlQobVRl
eHR1cmUgJiYgbVRleHR1cmUtPnZhbGlkKCkpOwogICAgICpydE91dCA9ICZtUmVuZGVyVGFyZ2V0
OwogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJn
ZXRNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9SZW5kZXJUYXJnZXRNdGwuaAppbmRleCBiYWY0ZTRkMjY2OTE4MTQwY2IwMTIzMjgxYWRl
MDNmNjQxNGJlZjg5Li4wYzU3NTE3NWExMTcxOThlZGRmNWJlY2FhMmZlZGZhNDUwNzZkNzA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5oCkBAIC00NiwyMSArNDYs
MTkgQEAgY2xhc3MgUmVuZGVyVGFyZ2V0TXRsIGZpbmFsIDogcHVibGljIEZyYW1lYnVmZmVyQXR0
YWNobWVudFJlbmRlclRhcmdldAogICAgIHZvaWQgZHVwbGljYXRlRnJvbShjb25zdCBSZW5kZXJU
YXJnZXRNdGwgJnNyYyk7CiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgbXRsOjpUZXh0dXJlUmVm
IGdldFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZS5sb2NrKCk7IH0KLSAgICBtdGw6
OlRleHR1cmVSZWYgZ2V0SW1wbGljaXRNU1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtSW1wbGlj
aXRNU1RleHR1cmUubG9jaygpOyB9Ci0gICAgY29uc3QgbXRsOjpNaXBtYXBOYXRpdmVMZXZlbCAm
Z2V0TGV2ZWxJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1MZXZlbEluZGV4OyB9Ci0gICAgdWludDMy
X3QgZ2V0TGF5ZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1MYXllckluZGV4OyB9CisgICAgbXRs
OjpUZXh0dXJlUmVmIGdldFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRh
cmdldEluZm8tPmdldFRleHR1cmVSZWYoKTsgfQorICAgIG10bDo6VGV4dHVyZVJlZiBnZXRJbXBs
aWNpdE1TVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+
Z2V0SW1wbGljaXRNU1RleHR1cmVSZWYoKTsgfQorICAgIGNvbnN0IG10bDo6TWlwbWFwTmF0aXZl
TGV2ZWwgJmdldExldmVsSW5kZXgoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdl
dEluZm8tPmxldmVsOyB9CisgICAgdWludDMyX3QgZ2V0TGF5ZXJJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+c2xpY2VPckRlcHRoOyB9CiAgICAgdWludDMy
X3QgZ2V0UmVuZGVyU2FtcGxlcygpIGNvbnN0OwogICAgIGNvbnN0IG10bDo6Rm9ybWF0ICpnZXRG
b3JtYXQoKSBjb25zdCB7IHJldHVybiBtRm9ybWF0OyB9CiAKICAgICB2b2lkIHRvUmVuZGVyUGFz
c0F0dGFjaG1lbnREZXNjKG10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICpycGFEZXNjT3V0
KSBjb25zdDsKIAogICBwcml2YXRlOgotICAgIG10bDo6VGV4dHVyZVdlYWtSZWYgbVRleHR1cmU7
Ci0gICAgbXRsOjpUZXh0dXJlV2Vha1JlZiBtSW1wbGljaXRNU1RleHR1cmU7Ci0gICAgbXRsOjpN
aXBtYXBOYXRpdmVMZXZlbCBtTGV2ZWxJbmRleCA9IG10bDo6a1plcm9OYXRpdmVNaXBMZXZlbDsK
LSAgICB1aW50MzJfdCBtTGF5ZXJJbmRleCAgICAgICAgICAgICAgID0gMDsKLSAgICBjb25zdCBt
dGw6OkZvcm1hdCAqbUZvcm1hdCAgICAgICAgID0gbnVsbHB0cjsKKy8vIFRoaXMgaXMgc2hhcmVk
IHBvaW50ZXIgdG8gYXZvaWQgY3Jhc2hpbmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQgYWZ0ZXIgYm91
bmQgdG8gYSBmcmFtZSBidWZmZXIuCisgICAgc3RkOjpzaGFyZWRfcHRyPG10bDo6UmVuZGVyUGFz
c0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYz4gbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvOwor
ICAgIGNvbnN0IG10bDo6Rm9ybWF0ICptRm9ybWF0ID0gbnVsbHB0cjsKIH07CiB9ICAvLyBuYW1l
c3BhY2UgcngKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwubW0KaW5k
ZXggZTg5ZTc2MTQ4MWRkNjRkYzQ3Yzc1MDdhYWI5YmVmYTVmMjRjNGUyZi4uZTEyNmRiYjZiZWUw
MTE5YTE2NjlhMDFlN2UwOTZjMmQ4NGE3ZDgyMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5tbQor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UmVuZGVyVGFyZ2V0TXRsLm1tCkBAIC0xMSw3ICsxMSwxMCBAQAogCiBuYW1lc3BhY2UgcngKIHsK
LVJlbmRlclRhcmdldE10bDo6UmVuZGVyVGFyZ2V0TXRsKCkge30KK1JlbmRlclRhcmdldE10bDo6
UmVuZGVyVGFyZ2V0TXRsKCkgOgorICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8oc3RkOjptYWtl
X3NoYXJlZDxtdGw6OlJlbmRlclBhc3NBdHRhY2htZW50VGV4dHVyZVRhcmdldERlc2M+KCkpLAor
ICBtRm9ybWF0KG51bGxwdHIpCit7fQogCiBSZW5kZXJUYXJnZXRNdGw6On5SZW5kZXJUYXJnZXRN
dGwoKQogewpAQCAtMTksMTAgKzIyLDcgQEAgUmVuZGVyVGFyZ2V0TXRsOjp+UmVuZGVyVGFyZ2V0
TXRsKCkKIH0KIAogUmVuZGVyVGFyZ2V0TXRsOjpSZW5kZXJUYXJnZXRNdGwoUmVuZGVyVGFyZ2V0
TXRsICYmb3RoZXIpCi0gICAgOiBtVGV4dHVyZShzdGQ6Om1vdmUob3RoZXIubVRleHR1cmUpKSwK
LSAgICAgIG1JbXBsaWNpdE1TVGV4dHVyZShzdGQ6Om1vdmUob3RoZXIubUltcGxpY2l0TVNUZXh0
dXJlKSksCi0gICAgICBtTGV2ZWxJbmRleChvdGhlci5tTGV2ZWxJbmRleCksCi0gICAgICBtTGF5
ZXJJbmRleChvdGhlci5tTGF5ZXJJbmRleCkKKyAgICA6IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5m
byhzdGQ6Om1vdmUob3RoZXIubVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKSkKIHt9CiAKIHZvaWQg
UmVuZGVyVGFyZ2V0TXRsOjpzZXQoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLApAQCAt
MzksMjEgKzM5LDIxIEBAIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjpzZXRXaXRoSW1wbGljaXRNU1Rl
eHR1cmUoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsYXllciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpGb3JtYXQgJmZv
cm1hdCkKIHsKLSAgICBtVGV4dHVyZSAgICAgICAgICAgPSB0ZXh0dXJlOwotICAgIG1JbXBsaWNp
dE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOwotICAgIG1MZXZlbEluZGV4ICAgICAgICA9
IGxldmVsOwotICAgIG1MYXllckluZGV4ICAgICAgICA9IGxheWVyOworICAgIG1UZXh0dXJlUmVu
ZGVyVGFyZ2V0SW5mby0+dGV4dHVyZSAgICAgICAgICAgPSB0ZXh0dXJlOworICAgIG1UZXh0dXJl
UmVuZGVyVGFyZ2V0SW5mby0+aW1wbGljaXRNU1RleHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsK
KyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmxldmVsICAgICAgICA9IGxldmVsOworICAg
IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+c2xpY2VPckRlcHRoICAgICAgICA9IGxheWVyOwog
ICAgIG1Gb3JtYXQgICAgICAgICAgICA9ICZmb3JtYXQ7CiB9CiAKIHZvaWQgUmVuZGVyVGFyZ2V0
TXRsOjpzZXRUZXh0dXJlKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSkKIHsKLSAgICBt
VGV4dHVyZSA9IHRleHR1cmU7CisgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJl
ID0gdGV4dHVyZTsKIH0KIAogdm9pZCBSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0
dXJlKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmaW1wbGljaXRNU1RleHR1cmUpCiB7Ci0gICAgbUlt
cGxpY2l0TVNUZXh0dXJlID0gaW1wbGljaXRNU1RleHR1cmU7CisgICAgbVRleHR1cmVSZW5kZXJU
YXJnZXRJbmZvLT5pbXBsaWNpdE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOwogfQogCiB2
b2lkIFJlbmRlclRhcmdldE10bDo6ZHVwbGljYXRlRnJvbShjb25zdCBSZW5kZXJUYXJnZXRNdGwg
JnNyYykKQEAgLTY0LDI1ICs2NCwxOSBAQCB2b2lkIFJlbmRlclRhcmdldE10bDo6ZHVwbGljYXRl
RnJvbShjb25zdCBSZW5kZXJUYXJnZXRNdGwgJnNyYykKIAogdm9pZCBSZW5kZXJUYXJnZXRNdGw6
OnJlc2V0KCkKIHsKLSAgICBtVGV4dHVyZS5yZXNldCgpOwotICAgIG1JbXBsaWNpdE1TVGV4dHVy
ZS5yZXNldCgpOwotICAgIG1MZXZlbEluZGV4ID0gbXRsOjprWmVyb05hdGl2ZU1pcExldmVsOwot
ICAgIG1MYXllckluZGV4ID0gMDsKLSAgICBtRm9ybWF0ICAgICA9IG51bGxwdHI7CisgICAgbVRl
eHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJlLnJlc2V0KCk7CisgICAgbVRleHR1cmVSZW5k
ZXJUYXJnZXRJbmZvLT5pbXBsaWNpdE1TVGV4dHVyZS5yZXNldCgpOworICAgIG1UZXh0dXJlUmVu
ZGVyVGFyZ2V0SW5mby0+bGV2ZWwgICAgICAgID0gbXRsOjprWmVyb05hdGl2ZU1pcExldmVsOwor
ICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+c2xpY2VPckRlcHRoID0gMDsKKyAgICBtRm9y
bWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IG51bGxwdHI7CiB9CiAKIHVpbnQz
Ml90IFJlbmRlclRhcmdldE10bDo6Z2V0UmVuZGVyU2FtcGxlcygpIGNvbnN0CiB7Ci0gICAgbXRs
OjpUZXh0dXJlUmVmIGltcGxpY2l0TVNUZXggPSBnZXRJbXBsaWNpdE1TVGV4dHVyZSgpOwotICAg
IG10bDo6VGV4dHVyZVJlZiB0ZXggICAgICAgICAgID0gZ2V0VGV4dHVyZSgpOwotICAgIHJldHVy
biBpbXBsaWNpdE1TVGV4ID8gaW1wbGljaXRNU1RleC0+c2FtcGxlcygpIDogKHRleCA/IHRleC0+
c2FtcGxlcygpIDogMSk7CisgICAgcmV0dXJuIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+Z2V0
UmVuZGVyU2FtcGxlcygpOwogfQogdm9pZCBSZW5kZXJUYXJnZXRNdGw6OnRvUmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjKG10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICpycGFEZXNjT3V0KSBj
b25zdAogewotICAgIHJwYURlc2NPdXQtPnRleHR1cmUgICAgICAgICAgID0gbVRleHR1cmUubG9j
aygpOwotICAgIHJwYURlc2NPdXQtPmltcGxpY2l0TVNUZXh0dXJlID0gbUltcGxpY2l0TVNUZXh0
dXJlLmxvY2soKTsKLSAgICBycGFEZXNjT3V0LT5sZXZlbCAgICAgICAgICAgICA9IG1MZXZlbElu
ZGV4OwotICAgIHJwYURlc2NPdXQtPnNsaWNlT3JEZXB0aCAgICAgID0gbUxheWVySW5kZXg7Ci0g
ICAgcnBhRGVzY091dC0+YmxlbmRhYmxlICAgICAgICAgPSBtRm9ybWF0ID8gbUZvcm1hdC0+Z2V0
Q2FwcygpLmJsZW5kYWJsZSA6IGZhbHNlOworICAgIHJwYURlc2NPdXQtPnJlbmRlclRhcmdldCA9
IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbzsKIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJN
dGwuaAppbmRleCA3YjJjZmQ1MGNiZGZlNDFmZjM2ODgwZjYxMGE3OGY0NDQ2Y2FhN2UxLi41MmU5
MWFmYjZmMTMyNjViNTY2NTg5NWE3MDJhYTk3YTg3ODBkNmY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L1NoYWRlck10bC5oCkBAIC0xMSw4ICsxMSw4IEBACiAKICNpbmNsdWRlIDxtYXA+CiAKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgogI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL1NoYWRlckltcGwuaCIKLQogbmFtZXNwYWNlIHJ4CiB7CiAK
QEAgLTI2LDcgKzI2LDE5IEBAIGNsYXNzIFNoYWRlck10bCA6IHB1YmxpYyBTaGFkZXJJbXBsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaENv
bXBpbGVySW5zdGFuY2UgKmNvbXBpbGVySW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgb3B0aW9ucykgb3Zl
cnJpZGU7CiAKKyAgICBzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqZ2V0VHJhbnNsYXRv
ck1ldGFsUmVmbGVjdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gJnRyYW5zbGF0b3JNZXRh
bFJlZmxlY3Rpb247CisgICAgfQogICAgIHN0ZDo6c3RyaW5nIGdldERlYnVnSW5mbygpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gdHJhbnNsYXRv
ck1ldGFsUmVmbGVjdGlvbiA9IHt9OworCisgIHByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRy
PFdhaXRhYmxlQ29tcGlsZUV2ZW50PiBjb21waWxlSW1wbE10bChjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpTaENvbXBpbGVySW5zdGFuY2UgKmNvbXBpbGVySW5zdGFuY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyAmc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucyk7
CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW0gYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLm1t
CmluZGV4IGY5MDlmYjUwOTM4NWJjOGVjYjE4N2I1NWY1MjcwYWU5Y2EyZGY2ZmMuLmFkMDFkYmY0
NWZiOGY0NzkwNGJmZGIxZDRiODQ2ODY2ZmViOTg4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW0KKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1No
YWRlck10bC5tbQpAQCAtMTAsOCArMTAsMTMgQEAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9TaGFkZXJNdGwuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKICNpbmNsdWRlICJsaWJB
TkdMRS9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliQU5HTEUvU2hhZGVyLmgiCisjaW5jbHVkZSAi
bGliQU5HTEUvV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQ29udGV4dE10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3Bs
YXlNdGwuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCwxMCArMjUsMTAwIEBAIFNoYWRlck10
bDo6U2hhZGVyTXRsKGNvbnN0IGdsOjpTaGFkZXJTdGF0ZSAmc3RhdGUpIDogU2hhZGVySW1wbChz
dGF0ZSkge30KIAogU2hhZGVyTXRsOjp+U2hhZGVyTXRsKCkge30KIAorY2xhc3MgVHJhbnNsYXRl
VGFzayA6IHB1YmxpYyBhbmdsZTo6Q2xvc3VyZQoreworICBwdWJsaWM6CisgICAgVHJhbnNsYXRl
VGFzayhTaEhhbmRsZSBoYW5kbGUsIFNoQ29tcGlsZU9wdGlvbnMgb3B0aW9ucywgY29uc3Qgc3Rk
OjpzdHJpbmcgJnNvdXJjZSkKKyAgICAgICAgOiBtSGFuZGxlKGhhbmRsZSksIG1PcHRpb25zKG9w
dGlvbnMpLCBtU291cmNlKHNvdXJjZSksIG1SZXN1bHQoZmFsc2UpCisgICAge30KKworICAgIHZv
aWQgb3BlcmF0b3IoKSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBjaGFyICpzb3Vy
Y2UgPSBtU291cmNlLmNfc3RyKCk7CisgICAgICAgIG1SZXN1bHQgICAgICAgICAgICA9IHNoOjpD
b21waWxlKG1IYW5kbGUsICZzb3VyY2UsIDEsIG1PcHRpb25zKTsKKyAgICB9CisKKyAgICBib29s
IGdldFJlc3VsdCgpIHsgcmV0dXJuIG1SZXN1bHQ7IH0KKworICAgIFNoSGFuZGxlIGdldEhhbmRs
ZSgpIHsgcmV0dXJuIG1IYW5kbGU7IH0KKworICBwcml2YXRlOgorICAgIFNoSGFuZGxlIG1IYW5k
bGU7CisgICAgU2hDb21waWxlT3B0aW9ucyBtT3B0aW9uczsKKyAgICBzdGQ6OnN0cmluZyBtU291
cmNlOworICAgIGJvb2wgbVJlc3VsdDsKK307CisKK2NsYXNzIE1UTFdhaXRhYmxlQ29tcGlsZUV2
ZW50SW1wbCBmaW5hbCA6IHB1YmxpYyBXYWl0YWJsZUNvbXBpbGVFdmVudAoreworICBwdWJsaWM6
CisgICAgTVRMV2FpdGFibGVDb21waWxlRXZlbnRJbXBsKFNoYWRlck10bCAqc2hhZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8YW5nbGU6OldhaXRh
YmxlRXZlbnQ+IHdhaXRhYmxlRXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c2hhcmVkX3B0cjxUcmFuc2xhdGVUYXNrPiB0cmFuc2xhdGVUYXNrKQorICAgICAgICA6
IFdhaXRhYmxlQ29tcGlsZUV2ZW50KHdhaXRhYmxlRXZlbnQpLCBtVHJhbnNsYXRlVGFzayh0cmFu
c2xhdGVUYXNrKSwgbVNoYWRlcihzaGFkZXIpCisgICAge30KKworICAgIGJvb2wgZ2V0UmVzdWx0
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbVRyYW5zbGF0ZVRhc2stPmdldFJlc3VsdCgpOyB9CisKKyAg
ICBib29sIHBvc3RUcmFuc2xhdGUoc3RkOjpzdHJpbmcgKmluZm9Mb2cpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBzaDo6VFNoSGFuZGxlQmFzZSAqYmFzZSAgICA9IHN0YXRpY19jYXN0PHNoOjpU
U2hIYW5kbGVCYXNlICo+KG1UcmFuc2xhdGVUYXNrLT5nZXRIYW5kbGUoKSk7CisgICAgICAgIGF1
dG8gdHJhbnNsYXRvck1ldGFsRGlyZWN0ID0gYmFzZS0+Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJl
Y3QoKTsKKyAgICAgICAgaWYgKHRyYW5zbGF0b3JNZXRhbERpcmVjdCAhPSBudWxscHRyKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBDb3B5IHJlZmxlY3Rpb24gZnJvbSB0cmFuc2xhdGlvbi4K
KyAgICAgICAgICAgIG1TaGFkZXItPnRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gPQorICAgICAg
ICAgICAgICAgICoodHJhbnNsYXRvck1ldGFsRGlyZWN0LT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZs
ZWN0aW9uKCkpOworICAgICAgICAgICAgdHJhbnNsYXRvck1ldGFsRGlyZWN0LT5nZXRUcmFuc2xh
dG9yTWV0YWxSZWZsZWN0aW9uKCktPnJlc2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgc3RkOjpzaGFyZWRfcHRyPFRyYW5zbGF0
ZVRhc2s+IG1UcmFuc2xhdGVUYXNrOworICAgIFNoYWRlck10bCAqbVNoYWRlcjsKK307CisKK3N0
ZDo6c2hhcmVkX3B0cjxXYWl0YWJsZUNvbXBpbGVFdmVudD4gU2hhZGVyTXRsOjpjb21waWxlSW1w
bE10bCgKKyAgICBjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICBnbDo6U2hDb21waWxl
ckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZzb3Vy
Y2UsCisgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucykKK3sKKyNpZiBkZWZpbmVk
KEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRF
X0FTVDsKKyNlbmRpZgorCisgICAgYXV0byB3b3JrZXJUaHJlYWRQb29sID0gY29udGV4dC0+Z2V0
V29ya2VyVGhyZWFkUG9vbCgpOworICAgIGF1dG8gdHJhbnNsYXRlVGFzayA9CisgICAgICAgIHN0
ZDo6bWFrZV9zaGFyZWQ8VHJhbnNsYXRlVGFzaz4oY29tcGlsZXJJbnN0YW5jZS0+Z2V0SGFuZGxl
KCksIGNvbXBpbGVPcHRpb25zLCBzb3VyY2UpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFy
ZWQ8TVRMV2FpdGFibGVDb21waWxlRXZlbnRJbXBsPigKKyAgICAgICAgdGhpcywgYW5nbGU6Oldv
cmtlclRocmVhZFBvb2w6OlBvc3RXb3JrZXJUYXNrKHdvcmtlclRocmVhZFBvb2wsIHRyYW5zbGF0
ZVRhc2spLAorICAgICAgICB0cmFuc2xhdGVUYXNrKTsKK30KKwogc3RkOjpzaGFyZWRfcHRyPFdh
aXRhYmxlQ29tcGlsZUV2ZW50PiBTaGFkZXJNdGw6OmNvbXBpbGUoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hD
b21waWxlT3B0aW9ucyBvcHRpb25zKQogeworICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBt
dGw6OkdldEltcGwoY29udGV4dCk7CisgICAgaWYgKGdldFN0YXRlKCkuZ2V0U2hhZGVyVHlwZSgp
ID09IGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXggJiYKKyAgICAgICAgIWNvbnRleHRNdGwtPmdldERp
c3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4SW5zdGFuY2VkRHJhdy5lbmFibGVk
KQorICAgIHsKKyAgICAgICAgLy8gRW11bGF0ZSBnbF9JbnN0YW5jZUlECisgICAgICAgIHNoOjpU
U2hIYW5kbGVCYXNlICpiYXNlID0gc3RhdGljX2Nhc3Q8c2g6OlRTaEhhbmRsZUJhc2UgKj4oY29t
cGlsZXJJbnN0YW5jZS0+Z2V0SGFuZGxlKCkpOworICAgICAgICBhdXRvIHRyYW5zbGF0b3JNZXRh
bERpcmVjdCA9IGJhc2UtPmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0KCk7CisgICAgICAgIGlm
ICh0cmFuc2xhdG9yTWV0YWxEaXJlY3QgPT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byB0cmFuc2xhdG9yTWV0YWwgPSBzdGF0aWNfY2FzdDxzaDo6VHJhbnNsYXRvck1ldGFs
ICo+KGJhc2UtPmdldEFzQ29tcGlsZXIoKSk7CisgICAgICAgICAgICB0cmFuc2xhdG9yTWV0YWwt
PmVuYWJsZUVtdWxhdGVkSW5zdGFuY2VJRCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zbGF0b3JNZXRhbERpcmVjdC0+ZW5hYmxlRW11
bGF0ZWRJbnN0YW5jZUlEKHRydWUpOworICAgICAgICB9CisgICAgfQogICAgIFNoQ29tcGlsZU9w
dGlvbnMgY29tcGlsZU9wdGlvbnMgPSBTSF9JTklUSUFMSVpFX1VOSU5JVElBTElaRURfTE9DQUxT
OwogCiAgICAgYm9vbCBpc1dlYkdMID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLndlYmdsQ29t
cGF0aWJpbGl0eTsKQEAgLTMzLDggKzEyOCwxMSBAQCBzdGQ6OnNoYXJlZF9wdHI8V2FpdGFibGVD
b21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGlsZShjb25zdCBnbDo6Q29udGV4dCAqY29udAog
ICAgIH0KIAogICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0NMQU1QX1BPSU5UX1NJWkU7CisjaWYg
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01B
Q0NBVEFMWVNUKQorICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0NMQU1QX0ZSQUdfREVQVEg7Cisj
ZW5kaWYKIAotICAgIHJldHVybiBjb21waWxlSW1wbChjb250ZXh0LCBjb21waWxlckluc3RhbmNl
LCBtU3RhdGUuZ2V0U291cmNlKCksIGNvbXBpbGVPcHRpb25zIHwgb3B0aW9ucyk7CisgICAgcmV0
dXJuIGNvbXBpbGVJbXBsTXRsKGNvbnRleHQsIGNvbXBpbGVySW5zdGFuY2UsIGdldFN0YXRlKCku
Z2V0U291cmNlKCksIGNvbXBpbGVPcHRpb25zIHwgb3B0aW9ucyk7CiB9CiAKIHN0ZDo6c3RyaW5n
IFNoYWRlck10bDo6Z2V0RGVidWdJbmZvKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmggYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFj
ZU10bC5oCmluZGV4IDllODRmODhmNzU0ZDEwZTNiNjZjMjAyY2UyMzQ4OTZiMmQxOTFkOTAuLjBh
ZGMzNjA2MDg2YTlkODhkY2NlM2I0Y2YwMWVkNmQ2Mzk1MDA2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRs
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1N1cmZhY2VNdGwuaApAQCAtMjQsNyArMjQsMjcgQEAgbmFtZXNwYWNlIHJ4CiAKIGNsYXNz
IERpc3BsYXlNdGw7CiAKLWNsYXNzIFN1cmZhY2VNdGwgOiBwdWJsaWMgU3VyZmFjZUltcGwKK2Ns
YXNzIFN1cmZhY2VNdGxQcm90b2NvbCA6IHB1YmxpYyBTdXJmYWNlSW1wbAoreworICBwdWJsaWM6
CisgICAgU3VyZmFjZU10bFByb3RvY29sKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSkg
OiBTdXJmYWNlSW1wbChzdGF0ZSkge30KKyAgICB2aXJ0dWFsIGludCBnZXRTYW1wbGVzKCkgY29u
c3QgICAgICA9IDA7CisgICAgdmlydHVhbCBib29sIHByZXNlcnZlQnVmZmVyKCkgY29uc3QgPSAw
OworCisgICAgdmlydHVhbCBhbmdsZTo6UmVzdWx0IGdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJpbmRpbmcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdlSW5kZXgg
JmltYWdlSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBzYW1wbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAq
KnJ0T3V0KSBvdmVycmlkZSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUm9idXN0UmVzb3Vy
Y2VJbml0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJy
ZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgPSAwOworICAg
IHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCwgYm9vbCAqbmV3RHJhd2FibGVPdXQpID0gMDsKKyAgICB2
aXJ0dWFsIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ29sb3JUZXh0dXJlUmVhZHlGb3JSZWFkUGl4ZWxz
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBtdGw6
OlRleHR1cmVSZWYgJiBnZXRDb2xvclRleHR1cmUoKSA9IDA7Cit9OworCitjbGFzcyBTdXJmYWNl
TXRsIDogcHVibGljIFN1cmZhY2VNdGxQcm90b2NvbAogewogICBwdWJsaWM6CiAgICAgU3VyZmFj
ZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LApAQCAtNjcsMTEgKzg3LDExIEBAIGNsYXNzIFN1cmZh
Y2VNdGwgOiBwdWJsaWMgU3VyZmFjZUltcGwKICAgICBhbmdsZTo6UmVzdWx0IGluaXRpYWxpemVD
b250ZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCkgb3ZlcnJp
ZGU7CiAKLSAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJmdldENvbG9yVGV4dHVyZSgpIHsgcmV0
dXJuIG1Db2xvclRleHR1cmU7IH0KKyAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJmdldENvbG9y
VGV4dHVyZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1Db2xvclRleHR1cmU7IH0KICAgICBjb25zdCBt
dGw6OkZvcm1hdCAmZ2V0Q29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtQ29sb3JGb3JtYXQ7
IH0KLSAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IHsgcmV0dXJuIG1TYW1wbGVzOyB9CisgICAg
aW50IGdldFNhbXBsZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtU2FtcGxlczsgfQogCi0g
ICAgYm9vbCBoYXNSb2J1c3RSZXNvdXJjZUluaXQoKSBjb25zdCB7IHJldHVybiBtUm9idXN0UmVz
b3VyY2VJbml0OyB9CisgICAgYm9vbCBoYXNSb2J1c3RSZXNvdXJjZUluaXQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtUm9idXN0UmVzb3VyY2VJbml0OyB9CiAKICAgICBhbmdsZTo6UmVzdWx0
IGdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBiaW5kaW5n
LApAQCAtMTQ0LDEzICsxNjQsMTQgQEAgY2xhc3MgV2luZG93U3VyZmFjZU10bCA6IHB1YmxpYyBT
dXJmYWNlTXRsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
c2l6ZWkgc2FtcGxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92ZXJyaWRlOwog
CisgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CiAgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVD
dXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5ld0RyYXdh
YmxlT3V0IC8qKiBudWxsYWJsZSAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sICpuZXdEcmF3YWJsZU91dCAvKiogbnVsbGFibGUgKi8pIG92
ZXJyaWRlOwogCiAgICAgLy8gRW5zdXJlIHRoZSB0aGUgdGV4dHVyZSByZXR1cm5lZCBmcm9tIGdl
dENvbG9yVGV4dHVyZSgpIGlzIHJlYWR5IGZvciBnbFJlYWRQaXhlbHMoKS4gVGhpcwogICAgIC8v
IGltcGxpY2l0bHkgY2FsbHMgZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoKS4KLSAgICBh
bmdsZTo6UmVzdWx0IGVuc3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCk7Ci0KKyAgICBhbmdsZTo6UmVzdWx0IGVuc3VyZUNvbG9yVGV4
dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBwcmVzZXJ2ZUJ1ZmZlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1S
ZXRhaW5CdWZmZXI7IH0KICAgcHJpdmF0ZToKICAgICBhbmdsZTo6UmVzdWx0IHN3YXBJbXBsKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKICAgICBhbmdsZTo6UmVzdWx0IG9idGFpbk5leHRE
cmF3YWJsZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CkBAIC0xNjgsNiArMTg5LDggQEAg
Y2xhc3MgV2luZG93U3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlTXRsCiAgICAgLy8gZXZlbnQu
IFdlIGRvbid0IHVzZSBtTWV0YWxMYXllci5kcmF3YWJsZVNpemUgZGlyZWN0bHkgc2luY2UgaXQg
bWlnaHQgYmUgY2hhbmdlZCBpbnRlcm5hbGx5IGJ5CiAgICAgLy8gbWV0YWwgcnVudGltZS4KICAg
ICBDR1NpemUgbUN1cnJlbnRLbm93bkRyYXdhYmxlU2l6ZTsKKworICAgIGJvb2wgbVJldGFpbkJ1
ZmZlciA9IGZhbHNlOwogfTsKIAogLy8gT2Zmc2NyZWVuIHN1cmZhY2UsIGJhc2UgY2xhc3Mgb2Yg
UEJ1ZmZlciwgSU9TdXJmYWNlLgpAQCAtMjEyLDM3ICsyMzUsNSBAQCBjbGFzcyBQQnVmZmVyU3Vy
ZmFjZU10bCA6IHB1YmxpYyBPZmZzY3JlZW5TdXJmYWNlTXRsCiAgICAgdm9pZCBzZXRGaXhlZEhl
aWdodChFR0xpbnQgaGVpZ2h0KSBvdmVycmlkZTsKIH07CiAKLS8vIE9mZnNjcmVlbiBjcmVhdGVk
IGZyb20gSU9TdXJmYWNlCi1jbGFzcyBJT1N1cmZhY2VTdXJmYWNlTXRsIDogcHVibGljIE9mZnNj
cmVlblN1cmZhY2VNdGwKLXsKLSAgcHVibGljOgotICAgIElPU3VyZmFjZVN1cmZhY2VNdGwoRGlz
cGxheU10bCAqZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6U3Vy
ZmFjZVN0YXRlICZzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEVHTENsaWVudEJ1ZmZl
ciBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1h
cCAmYXR0cmlicyk7Ci0gICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBvdmVycmlkZTsKLQotICAg
IGVnbDo6RXJyb3IgYmluZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVHTGludCBidWZmZXIpIG92ZXJyaWRlOwotICAgIGVnbDo6RXJy
b3IgcmVsZWFzZVRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVm
ZmVyKSBvdmVycmlkZTsKLQotICAgIGFuZ2xlOjpSZXN1bHQgZ2V0QXR0YWNobWVudFJlbmRlclRh
cmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJpbmRpbmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHNh
bXBsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1l
YnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KSBvdmVycmlkZTsKLQotICAgIHN0
YXRpYyBib29sIFZhbGlkYXRlQXR0cmlidXRlcyhFR0xDbGllbnRCdWZmZXIgYnVmZmVyLCBjb25z
dCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicyk7Ci0KLSAgcHJpdmF0ZToKLSAgICBhbmdsZTo6
UmVzdWx0IGVuc3VyZUNvbG9yVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQpOwotCi0gICAgSU9TdXJmYWNlUmVmIG1JT1N1cmZhY2U7Ci0gICAgTlNVSW50ZWdlciBtSU9T
dXJmYWNlUGxhbmU7Ci0gICAgaW50IG1JT1N1cmZhY2VGb3JtYXRJZHg7Ci19OwotCiB9ICAvLyBu
YW1lc3BhY2UgcngKLQogI2VuZGlmIC8qIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX1NVUkZBQ0VN
VExfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwubW0KaW5kZXggMzAzZmIxNjc0
OTZlNzgwOTVhMGQxYjRiYzkyMmMxZjZjZDhiZGNhYS4uYzllZTI0YmZhYWMxZjg1NjE4Y2M3YzMx
YjE2MWNjYzhiNzdjYjRmZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwubW0KKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwubW0KQEAg
LTMzLDU1ICszMywxOSBAQCBuYW1lc3BhY2UKIHsKIAogI2RlZmluZSBBTkdMRV9UT19FR0xfVFJZ
KEVYUFIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBpZiAoQU5HTEVfVU5MSUtFTFkoKEVYUFIpICE9IGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlKSkgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkU3VyZmFj
ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCitk
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGlmIChBTkdMRV9VTkxJS0VMWSgoRVhQUikgIT0gYW5nbGU6OlJlc3VsdDo6
Q29udGludWUpKSBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkU3VyZmFjZSgpOyAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQogCiBjb25zdGV4cHIgYW5n
bGU6OkZvcm1hdElEIGtEZWZhdWx0RnJhbWVCdWZmZXJEZXB0aEZvcm1hdElkICAgPSBhbmdsZTo6
Rm9ybWF0SUQ6OkQzMl9GTE9BVDsKIGNvbnN0ZXhwciBhbmdsZTo6Rm9ybWF0SUQga0RlZmF1bHRG
cmFtZUJ1ZmZlclN0ZW5jaWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6UzhfVUlOVDsKIGNv
bnN0ZXhwciBhbmdsZTo6Rm9ybWF0SUQga0RlZmF1bHRGcmFtZUJ1ZmZlckRlcHRoU3RlbmNpbEZv
cm1hdElkID0KICAgICBhbmdsZTo6Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UOwogCi1zdHJ1
Y3QgSU9TdXJmYWNlRm9ybWF0SW5mbwotewotICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdDsKLSAg
ICBHTGVudW0gdHlwZTsKLSAgICBzaXplX3QgY29tcG9uZW50Qnl0ZXM7Ci0KLSAgICBhbmdsZTo6
Rm9ybWF0SUQgbmF0aXZlQW5nbGVGb3JtYXRJZDsKLX07Ci0KLS8vIGNsYW5nLWZvcm1hdCBvZmYK
LS8vIE5PVEUoaHFsZSk6IFN1cHBvcnQgUjE2X1VJTlQgb25jZSBHTEVTMyBpcyBjb21wbGV0ZS4K
LWNvbnN0ZXhwciBzdGQ6OmFycmF5PElPU3VyZmFjZUZvcm1hdEluZm8sIDg+IGtJT1N1cmZhY2VG
b3JtYXRzID0ge3sKLSAgICB7R0xfUkVELCAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgMSwgYW5nbGU6OkZvcm1hdElEOjpSOF9VTk9STX0sCi0gICAge0dMX1JFRCwgICAgICBH
TF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgIDIsIGFuZ2xlOjpGb3JtYXRJRDo6UjE2X1VO
T1JNfSwKLSAgICB7R0xfUkcsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAg
MiwgYW5nbGU6OkZvcm1hdElEOjpSOEc4X1VOT1JNfSwKLSAgICB7R0xfUkcsICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgNCwgYW5nbGU6OkZvcm1hdElEOjpSMTZHMTZfVU5P
Uk19LAotICAgIHtHTF9SR0IsICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICA0
LCBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNfSwKLSAgICB7R0xfQkdSQV9FWFQsIEdM
X1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgNCwgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhB
OF9VTk9STX0sCi0gICAge0dMX1JHQkEsICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAg
ICAgIDgsIGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2QjE2QTE2X0ZMT0FUfSwKLSAgICB7R0xfUkdC
MTBfQTIsIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgNCwgYW5nbGU6OkZvcm1hdElE
OjpCMTBHMTBSMTBBMl9VTk9STX0sCi19fTsKLS8vIGNsYW5nLWZvcm1hdCBvbgotCi1pbnQgRmlu
ZElPU3VyZmFjZUZvcm1hdEluZGV4KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUp
Ci17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KGtJT1N1cmZhY2VG
b3JtYXRzLnNpemUoKSk7ICsraSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGF1dG8gJmZvcm1hdElu
Zm8gPSBrSU9TdXJmYWNlRm9ybWF0c1tpXTsKLSAgICAgICAgaWYgKGZvcm1hdEluZm8uaW50ZXJu
YWxGb3JtYXQgPT0gaW50ZXJuYWxGb3JtYXQgJiYgZm9ybWF0SW5mby50eXBlID09IHR5cGUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiAtMTsKLX0KLQogYW5nbGU6OlJlc3VsdCBDcmVhdGVPclJlc2l6ZVRleHR1cmUoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdGw6OkZvcm1hdCAmZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3Qgd2lkdGgsCkBAIC0xMjgsNiArOTIsMTkgQEAgYm9vbCBJc0ZyYW1l
Q2FwdHVyZUVuYWJsZWQoKQogI2VuZGlmCiB9CiAKK0FOR0xFX01UTF9VTlVTRUQKK3N0ZDo6c3Ry
aW5nIEdldE1ldGFsQ2FwdHVyZUZpbGUoKQoreworI2lmICFBTkdMRV9NRVRBTF9GUkFNRV9DQVBU
VVJFX0VOQUJMRUQKKyAgICByZXR1cm4gIiI7CisjZWxzZQorICAgIGF1dG8gdmFyICAgICAgICAg
ICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRklMRSIp
OworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gdmFyID8gdmFyIDogIiI7CisKKyAg
ICByZXR1cm4gZmlsZVBhdGg7CisjZW5kaWYKK30KKwogQU5HTEVfTVRMX1VOVVNFRAogc2l6ZV90
IE1heEFsbG93ZWRGcmFtZUNhcHR1cmUoKQogewpAQCAtMjAyLDYgKzE3OSwyMSBAQCB2b2lkIFN0
YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UsIGlkPE1UTENvbW1hbmRR
dWV1ZT4gbWV0YWxDbWRRdQogICAgIHsKICAgICAgICAgTVRMQ2FwdHVyZURlc2NyaXB0b3IgKmNh
cHR1cmVEZXNjcmlwdG9yID0gW1tNVExDYXB0dXJlRGVzY3JpcHRvciBhbGxvY10gaW5pdF07CiAg
ICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2
aWNlOworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlUGF0aCAgICAgICAgICAgICAgPSBH
ZXRNZXRhbENhcHR1cmVGaWxlKCk7CisgICAgICAgIGlmIChmaWxlUGF0aCAhPSAiIikKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbnVtYmVyZWRQYXRoID0KKyAgICAg
ICAgICAgICAgICBmaWxlUGF0aCArIHN0ZDo6dG9fc3RyaW5nKGdGcmFtZUNhcHR1cmVkIC0gMSkg
KyAiLmdwdXRyYWNlIjsKKyAgICAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9u
ID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uR1BVVHJhY2VEb2N1bWVudDsKKyAgICAgICAgICAgIGNh
cHR1cmVEZXNjcmlwdG9yLm91dHB1dFVSTCA9CisgICAgICAgICAgICAgICAgW05TVVJMIGZpbGVV
UkxXaXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6bnVtYmVyZWRQYXRoLmNf
c3RyKCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0RpcmVjdG9yeTpmYWxzZV07Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIHdp
bGwgcGF1c2UgZXhlY3V0aW9uIG9ubHkgaWYgYXBwbGljYXRpb24gaXMgYmVpbmcgZGVidWdnZWQg
aW5zaWRlIFhjb2RlCisgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5kZXN0aW5hdGlvbiA9
IE1UTENhcHR1cmVEZXN0aW5hdGlvbkRldmVsb3BlclRvb2xzOworICAgICAgICB9CiAKICAgICAg
ICAgTlNFcnJvciAqZXJyb3I7CiAgICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2Fw
dHVyZVdpdGhEZXNjcmlwdG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCkBAIC0y
MTEsMTQgKzIwMywxNSBAQCB2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0
YWxEZXZpY2UsIGlkPE1UTENvbW1hbmRRdWV1ZT4gbWV0YWxDbWRRdQogICAgIH0KICAgICBlbHNl
CiAjICAgIGVuZGlmICAvLyBfX01BQ18xMF8xNQorICAgICAgICBpZiAoQU5HTEVfQVBQTEVfQVZB
SUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMpKQogICAgIHsKLSAgICAgICAgaWYgKEZyYW1lQ2Fw
dHVyZURldmljZVNjb3BlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFtjYXB0dXJlTWFuYWdl
ciBzdGFydENhcHR1cmVXaXRoRGV2aWNlOm1ldGFsRGV2aWNlXTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCisgICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0dXJlRGVzY3JpcHRvciA9
IFtbTVRMQ2FwdHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOworICAgICAgICBjYXB0dXJlRGVz
Y3JpcHRvci5jYXB0dXJlT2JqZWN0ICAgICAgICAgPSBtZXRhbERldmljZTsKKworICAgICAgICBO
U0Vycm9yICplcnJvcjsKKyAgICAgICAgaWYgKCFbY2FwdHVyZU1hbmFnZXIgc3RhcnRDYXB0dXJl
V2l0aERlc2NyaXB0b3I6Y2FwdHVyZURlc2NyaXB0b3IgZXJyb3I6JmVycm9yXSkKICAgICAgICAg
ewotICAgICAgICAgICAgW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhDb21tYW5kUXVl
dWU6bWV0YWxDbWRRdWV1ZV07CisgICAgICAgICAgICBOU0xvZyhAIkZhaWxlZCB0byBzdGFydCBj
YXB0dXJlLCBlcnJvciAlQCIsIGVycm9yKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAgLy8g
QU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECkBAIC0yNDUsMTEgKzIzOCwxMCBAQCB2
b2lkIFN0b3BGcmFtZUNhcHR1cmUoKQogfQogfQogCi0vLyBTdXJmYWNlTXRsIGltcGxlbWVudGF0
aW9uCiBTdXJmYWNlTXRsOjpTdXJmYWNlTXRsKERpc3BsYXlNdGwgKmRpc3BsYXksCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCi0gICAgOiBT
dXJmYWNlSW1wbChzdGF0ZSkKKyAgICA6IFN1cmZhY2VNdGxQcm90b2NvbChzdGF0ZSkKIHsKICAg
ICBtUm9idXN0UmVzb3VyY2VJbml0ID0KICAgICAgICAgYXR0cmlicy5nZXQoRUdMX1JPQlVTVF9S
RVNPVVJDRV9JTklUSUFMSVpBVElPTl9BTkdMRSwgRUdMX0ZBTFNFKSA9PSBFR0xfVFJVRTsKQEAg
LTY5Myw2ICs2ODUsMTAgQEAgYW5nbGU6OlJlc3VsdCBXaW5kb3dTdXJmYWNlTXRsOjpnZXRBdHRh
Y2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb24KICAgICByZXR1cm4gU3Vy
ZmFjZU10bDo6Z2V0QXR0YWNobWVudFJlbmRlclRhcmdldChjb250ZXh0LCBiaW5kaW5nLCBpbWFn
ZUluZGV4LCBzYW1wbGVzLCBydE91dCk7CiB9CiAKK2FuZ2xlOjpSZXN1bHQgV2luZG93U3VyZmFj
ZU10bDo6ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpCit7CisgICAgcmV0dXJuIGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnRl
eHQsIG51bGxwdHIpOworfQogYW5nbGU6OlJlc3VsdCBXaW5kb3dTdXJmYWNlTXRsOjplbnN1cmVD
dXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCAqbmV3RHJhd2FibGVPdXQpCiB7CkBAIC05NDMsMTU3ICs5MzksNSBAQCB2b2lkIFBCdWZm
ZXJTdXJmYWNlTXRsOjpzZXRGaXhlZEhlaWdodChFR0xpbnQgaGVpZ2h0KQogICAgIG1TaXplLmhl
aWdodCA9IGhlaWdodDsKIH0KIAotLy8gSU9TdXJmYWNlU3VyZmFjZU10bCBpbXBsZW1lbnRhdGlv
bi4KLUlPU3VyZmFjZVN1cmZhY2VNdGw6OklPU3VyZmFjZVN1cmZhY2VNdGwoRGlzcGxheU10bCAq
ZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKLSAg
ICA6IE9mZnNjcmVlblN1cmZhY2VNdGwoZGlzcGxheSwgc3RhdGUsIGF0dHJpYnMpLCBtSU9TdXJm
YWNlKChfX2JyaWRnZSBJT1N1cmZhY2VSZWYpKGJ1ZmZlcikpCi17Ci0gICAgQ0ZSZXRhaW4obUlP
U3VyZmFjZSk7Ci0KLSAgICBtSU9TdXJmYWNlUGxhbmUgPSBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJp
YnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUpKTsKLQotICAgIEVHTEF0dHJpYiBpbnRl
cm5hbEZvcm1hdCA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdM
RSk7Ci0gICAgRUdMQXR0cmliIHR5cGUgICAgICAgICAgID0gYXR0cmlicy5nZXQoRUdMX1RFWFRV
UkVfVFlQRV9BTkdMRSk7Ci0gICAgbUlPU3VyZmFjZUZvcm1hdElkeCA9Ci0gICAgICAgIEZpbmRJ
T1N1cmZhY2VGb3JtYXRJbmRleChzdGF0aWNfY2FzdDxHTGVudW0+KGludGVybmFsRm9ybWF0KSwg
c3RhdGljX2Nhc3Q8R0xlbnVtPih0eXBlKSk7Ci0gICAgQVNTRVJUKG1JT1N1cmZhY2VGb3JtYXRJ
ZHggPj0gMCk7Ci0KLSAgICBtQ29sb3JGb3JtYXQgPQotICAgICAgICBkaXNwbGF5LT5nZXRQaXhl
bEZvcm1hdChrSU9TdXJmYWNlRm9ybWF0c1ttSU9TdXJmYWNlRm9ybWF0SWR4XS5uYXRpdmVBbmds
ZUZvcm1hdElkKTsKLX0KLUlPU3VyZmFjZVN1cmZhY2VNdGw6On5JT1N1cmZhY2VTdXJmYWNlTXRs
KCkKLXsKLSAgICBpZiAobUlPU3VyZmFjZSAhPSBudWxscHRyKQotICAgIHsKLSAgICAgICAgQ0ZS
ZWxlYXNlKG1JT1N1cmZhY2UpOwotICAgICAgICBtSU9TdXJmYWNlID0gbnVsbHB0cjsKLSAgICB9
Ci19Ci0KLWVnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6YmluZFRleEltYWdlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKQotewotICAgIENvbnRleHRNdGwg
KmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7Ci0gICAgU3RhcnRGcmFtZUNhcHR1
cmUoY29udGV4dE10bCk7Ci0KLSAgICAvLyBJbml0aWFsaXplIG9mZnNjcmVlbiB0ZXh0dXJlIGlm
IG5lZWRlZDoKLSAgICBBTkdMRV9UT19FR0xfVFJZKGVuc3VyZUNvbG9yVGV4dHVyZUNyZWF0ZWQo
Y29udGV4dCkpOwotCi0gICAgcmV0dXJuIE9mZnNjcmVlblN1cmZhY2VNdGw6OmJpbmRUZXhJbWFn
ZShjb250ZXh0LCB0ZXh0dXJlLCBidWZmZXIpOwotfQotCi1lZ2w6OkVycm9yIElPU3VyZmFjZVN1
cmZhY2VNdGw6OnJlbGVhc2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdM
aW50IGJ1ZmZlcikKLXsKLSAgICBlZ2w6OkVycm9yIHJlID0gT2Zmc2NyZWVuU3VyZmFjZU10bDo6
cmVsZWFzZVRleEltYWdlKGNvbnRleHQsIGJ1ZmZlcik7Ci0gICAgU3RvcEZyYW1lQ2FwdHVyZSgp
OwotICAgIHJldHVybiByZTsKLX0KLQotYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRs
OjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KAotICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAotICAgIEdMZW51bSBiaW5kaW5nLAotICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFn
ZUluZGV4LAotICAgIEdMc2l6ZWkgc2FtcGxlcywKLSAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRS
ZW5kZXJUYXJnZXQgKipydE91dCkKLXsKLSAgICAvLyBJbml0aWFsaXplIG9mZnNjcmVlbiB0ZXh0
dXJlIGlmIG5lZWRlZDoKLSAgICBBTkdMRV9UUlkoZW5zdXJlQ29sb3JUZXh0dXJlQ3JlYXRlZChj
b250ZXh0KSk7Ci0KLSAgICByZXR1cm4gT2Zmc2NyZWVuU3VyZmFjZU10bDo6Z2V0QXR0YWNobWVu
dFJlbmRlclRhcmdldChjb250ZXh0LCBiaW5kaW5nLCBpbWFnZUluZGV4LCBzYW1wbGVzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0
T3V0KTsKLX0KLQotYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1cmVDb2xv
clRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQotewotICAgIGlmICht
Q29sb3JUZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOwotICAgIH0KLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNv
bnRleHQpOwotICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCi0gICAgewotICAgICAgICBhdXRvIHRl
eERlc2MgPQotICAgICAgICAgICAgW01UTFRleHR1cmVEZXNjcmlwdG9yIHRleHR1cmUyRERlc2Ny
aXB0b3JXaXRoUGl4ZWxGb3JtYXQ6bUNvbG9yRm9ybWF0Lm1ldGFsRm9ybWF0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aDptU2l6ZS53aWR0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6bVNpemUuaGVpZ2h0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pcG1hcHBlZDpOT107
Ci0KLSAgICAgICAgdGV4RGVzYy51c2FnZSA9IE1UTFRleHR1cmVVc2FnZVNoYWRlclJlYWQgfCBN
VExUZXh0dXJlVXNhZ2VSZW5kZXJUYXJnZXQ7Ci0KLSAgICAgICAgaWQ8TVRMVGV4dHVyZT4gdGV4
dHVyZSA9Ci0gICAgICAgICAgICBbY29udGV4dE10bC0+Z2V0TWV0YWxEZXZpY2UoKSBuZXdUZXh0
dXJlV2l0aERlc2NyaXB0b3I6dGV4RGVzYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zdXJmYWNlOm1JT1N1cmZhY2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFu
ZTptSU9TdXJmYWNlUGxhbmVdOwotCi0gICAgICAgIG1Db2xvclRleHR1cmUgPSBtdGw6OlRleHR1
cmU6Ok1ha2VGcm9tTWV0YWwoW3RleHR1cmUgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXSk7Ci0gICAg
fQotCi0gICAgbUNvbG9yUmVuZGVyVGFyZ2V0LnNldChtQ29sb3JUZXh0dXJlLCBtdGw6OmtaZXJv
TmF0aXZlTWlwTGV2ZWwsIDAsIG1Db2xvckZvcm1hdCk7Ci0KLSAgICBpZiAoa0lPU3VyZmFjZUZv
cm1hdHNbbUlPU3VyZmFjZUZvcm1hdElkeF0uaW50ZXJuYWxGb3JtYXQgPT0gR0xfUkdCKQotICAg
IHsKLSAgICAgICAgLy8gVGhpcyBmb3JtYXQgaGFzIGVtdWxhdGVkIGFscGhhIGNoYW5uZWwuIElu
aXRpYWxpemUgdGV4dHVyZSdzIGFscGhhIGNoYW5uZWwgdG8gMS4wLgotICAgICAgICBjb25zdCBt
dGw6OkZvcm1hdCAmcmdiQ2xlYXJGb3JtYXQgPQotICAgICAgICAgICAgY29udGV4dE10bC0+Z2V0
UGl4ZWxGb3JtYXQoYW5nbGU6OkZvcm1hdElEOjpSOEc4QjhfVU5PUk0pOwotICAgICAgICBBTkdM
RV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzR1BVKAotICAgICAgICAgICAgY29u
dGV4dCwgbUNvbG9yVGV4dHVyZSwgcmdiQ2xlYXJGb3JtYXQsCi0gICAgICAgICAgICBtdGw6Oklt
YWdlTmF0aXZlSW5kZXg6OkZyb21CYXNlWmVyb0dMSW5kZXgoZ2w6OkltYWdlSW5kZXg6Ok1ha2Uy
RCgwKSksCi0gICAgICAgICAgICBNVExDb2xvcldyaXRlTWFza0FscGhhKSk7Ci0KLSAgICAgICAg
Ly8gRGlzYWJsZSBzdWJzZXF1ZW50IHJlbmRlcmluZyB0byBhbHBoYSBjaGFubmVsLgotICAgICAg
ICBtQ29sb3JUZXh0dXJlLT5zZXRDb2xvcldyaXRhYmxlTWFzayhNVExDb2xvcldyaXRlTWFza0Fs
bCAmICh+TVRMQ29sb3JXcml0ZU1hc2tBbHBoYSkpOwotICAgIH0KLQotICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKLX0KLQotLy8gc3RhdGljCi1ib29sIElPU3VyZmFjZVN1cmZh
Y2VNdGw6OlZhbGlkYXRlQXR0cmlidXRlcyhFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1
dGVNYXAgJmF0dHJpYnMpCi17Ci0gICAgSU9TdXJmYWNlUmVmIGlvU3VyZmFjZSA9IChfX2JyaWRn
ZSBJT1N1cmZhY2VSZWYpKGJ1ZmZlcik7Ci0KLSAgICAvLyBUaGUgcGxhbmUgbXVzdCBleGlzdCBm
b3IgdGhpcyBJT1N1cmZhY2UuIElPU3VyZmFjZUdldFBsYW5lQ291bnQgY2FuIHJldHVybiAwIGZv
ciBub24tcGxhbmFyCi0gICAgLy8gaW9TdXJmYWNlcyBidXQgd2Ugd2lsbCB0cmVhdCBub24tcGxh
bmFyIGxpa2UgaXQgaXMgYSBzaW5nbGUgcGxhbmUuCi0gICAgc2l6ZV90IHN1cmZhY2VQbGFuZUNv
dW50ID0gc3RkOjptYXgoc2l6ZV90KDEpLCBJT1N1cmZhY2VHZXRQbGFuZUNvdW50KGlvU3VyZmFj
ZSkpOwotICAgIEVHTEF0dHJpYiBwbGFuZSAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9JT1NV
UkZBQ0VfUExBTkVfQU5HTEUpOwotICAgIGlmIChwbGFuZSA8IDAgfHwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihwbGFuZSkgPj0gc3VyZmFjZVBsYW5lQ291bnQpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVGhlIHdpZHRoIGhlaWdodCBzcGVjaWZpZWQgbXVzdCBi
ZSBhdCBsZWFzdCAoMSwgMSkgYW5kIGF0IG1vc3QgdGhlIHBsYW5lIHNpemUKLSAgICBFR0xBdHRy
aWIgd2lkdGggID0gYXR0cmlicy5nZXQoRUdMX1dJRFRIKTsKLSAgICBFR0xBdHRyaWIgaGVpZ2h0
ID0gYXR0cmlicy5nZXQoRUdMX0hFSUdIVCk7Ci0gICAgaWYgKHdpZHRoIDw9IDAgfHwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pih3aWR0aCkgPiBJT1N1cmZhY2VHZXRXaWR0aE9mUGxhbmUoaW9TdXJmYWNl
LCBwbGFuZSkgfHwKLSAgICAgICAgaGVpZ2h0IDw9IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90Piho
ZWlnaHQpID4gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShpb1N1cmZhY2UsIHBsYW5lKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBGaW5kIHRoaXMgSU9T
dXJmYWNlIGZvcm1hdAotICAgIEVHTEF0dHJpYiBpbnRlcm5hbEZvcm1hdCA9IGF0dHJpYnMuZ2V0
KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSk7Ci0gICAgRUdMQXR0cmliIHR5cGUg
ICAgICAgICAgID0gYXR0cmlicy5nZXQoRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSk7Ci0KLSAgICBp
bnQgZm9ybWF0SW5kZXggPQotICAgICAgICBGaW5kSU9TdXJmYWNlRm9ybWF0SW5kZXgoc3RhdGlj
X2Nhc3Q8R0xlbnVtPihpbnRlcm5hbEZvcm1hdCksIHN0YXRpY19jYXN0PEdMZW51bT4odHlwZSkp
OwotCi0gICAgaWYgKGZvcm1hdEluZGV4IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBmb3JtYXQgbWF0Y2hlcyB0aGlzIElP
U3VyZmFjZSBwbGFuZQotICAgIGlmIChJT1N1cmZhY2VHZXRCeXRlc1BlckVsZW1lbnRPZlBsYW5l
KGlvU3VyZmFjZSwgcGxhbmUpICE9Ci0gICAgICAgIGtJT1N1cmZhY2VGb3JtYXRzW2Zvcm1hdElu
ZGV4XS5jb21wb25lbnRCeXRlcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmgKaW5k
ZXggNjJmOTZlZTI4NWRiMmYzYWQ5NjM1NGFkMDMzNzk5YjMwYzY4MDE3Ny4uZjRiY2FlOTBlMzFi
OTkyMGM0OGEyOTQwZjBiZTY1YWVlODE2M2E3NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5o
CkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzMsNyArMzMsNyBA
QCBuYW1lc3BhY2UgbXRsCiAKIC8vIENvbW1vbiBjbGFzcyB0byBiZSB1c2VkIGJ5IGJvdGggU3lu
Y0ltcGwgYW5kIEVHTFN5bmNJbXBsLgogLy8gTk9URTogU2hhcmVkRXZlbnQgaXMgb25seSBkZWNs
YXJlZCBvbiBpT1MgMTIuMCsgb3IgbWFjIDEwLjE0KwotI2lmIEFOR0xFX01UTF9FVkVOVF9BVkFJ
TEFCTEUKKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQp
CiBjbGFzcyBTeW5jCiB7CiAgIHB1YmxpYzoKQEAgLTU5LDcgKzU5LDcgQEAgY2xhc3MgU3luYwog
ICAgIHN0ZDo6c2hhcmVkX3B0cjxzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZT4gbUN2OwogICAgIHN0
ZDo6c2hhcmVkX3B0cjxzdGQ6Om11dGV4PiBtTG9jazsKIH07Ci0jZWxzZSAgIC8vICNpZiBBTkdM
RV9NVExfRVZFTlRfQVZBSUxBQkxFCisjZWxzZSAgIC8vICNpZiBkZWZpbmVkKF9fSVBIT05FXzEy
XzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCiBjbGFzcyBTeW5jCiB7CiAgIHB1YmxpYzoKQEAg
LTkwLDcgKzkwLDcgQEAgY2xhc3MgU3luYwogICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
U3RvcDsKICAgICB9CiB9OwotI2VuZGlmICAvLyAjaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJM
RQorI2VuZGlmICAvLyAjaWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFD
XzEwXzE0KQogfSAgLy8gbmFtZXNwYWNlIG10bAogCiBjbGFzcyBGZW5jZU5WTXRsIDogcHVibGlj
IEZlbmNlTlZJbXBsCkBAIC05OCw5ICs5OCw3IEBAIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMg
RmVuY2VOVkltcGwKICAgcHVibGljOgogICAgIEZlbmNlTlZNdGwoKTsKICAgICB+RmVuY2VOVk10
bCgpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBvbkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpIG92ZXJyaWRlOwotCiAgICAgYW5nbGU6OlJlc3VsdCBzZXQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsIEdMZW51bSBjb25kaXRpb24pIG92ZXJyaWRlOwogICAgIGFuZ2xlOjpSZXN1
bHQgdGVzdChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgR0xib29sZWFuICpvdXRGaW5pc2hl
ZCkgb3ZlcnJpZGU7CiAgICAgYW5nbGU6OlJlc3VsdCBmaW5pc2goY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQpIG92ZXJyaWRlOwpAQCAtMTUyLDYgKzE1MCw4IEBAIGNsYXNzIEVHTFN5bmNNdGwg
ZmluYWwgOiBwdWJsaWMgRUdMU3luY0ltcGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
aW50IGZsYWdzKSBvdmVycmlkZTsKICAgICBlZ2w6OkVycm9yIGdldFN0YXR1cyhjb25zdCBlZ2w6
OkRpc3BsYXkgKmRpc3BsYXksIEVHTGludCAqb3V0U3RhdHVzKSBvdmVycmlkZTsKIAorICAgIGVn
bDo6RXJyb3IgZHVwTmF0aXZlRmVuY2VGRChjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEVH
TGludCAqcmVzdWx0KSBjb25zdCBvdmVycmlkZTsKKwogICBwcml2YXRlOgogICAgIG10bDo6U3lu
YyBtU3luYzsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLm1tCmluZGV4IGRmZjgwMDMxMjBh
OGE2Y2U0NjJiNTA2ZWY2NTc1NWI3MjRmMWYyNjIuLmY4ZjNlZTY5Nzk4YmIxYzI4ZjNlMmRhMTk1
Njk2NTI5YjdlODBjOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLm1tCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjIsNyArMjIsNyBAQCBuYW1lc3BhY2Ug
cngKIG5hbWVzcGFjZSBtdGwKIHsKIC8vIFNoYXJlZEV2ZW50IGlzIG9ubHkgYXZhaWxhYmxlIG9u
IGlPUyAxMi4wKyBvciBtYWMgMTAuMTQrCi0jaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQor
I2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNCkKIFN5bmM6
OlN5bmMoKSB7fQogU3luYzo6flN5bmMoKSB7fQogCkBAIC04Nyw3ICs4Nyw3IEBAIGFuZ2xlOjpS
ZXN1bHQgU3luYzo6Y2xpZW50V2FpdChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIC8vIG9u
RGVzdHJveSgpLCBidXQgdGhlIGNhbGxiYWNrIG1pZ2h0IHN0aWxsIG5vdCBiZSBmaXJlZCB5ZXQu
CiAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlPiBjdlJlZiA9IG1D
djsKICAgICBzdGQ6OnNoYXJlZF9wdHI8c3RkOjptdXRleD4gbG9ja1JlZiAgICAgICAgICAgID0g
bUxvY2s7Ci0KKyNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCiAgICAgQXV0b09iakNPYmo8
TVRMU2hhcmVkRXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciA9CiAgICAgICAgIGNvbnRleHRN
dGwtPmdldERpc3BsYXkoKS0+Z2V0T3JDcmVhdGVTaGFyZWRFdmVudExpc3RlbmVyKCk7CiAgICAg
W21NZXRhbFNoYXJlZEV2ZW50LmdldCgpIG5vdGlmeUxpc3RlbmVyOmV2ZW50TGlzdGVuZXIKQEAg
LTEwNiw2ICsxMDYsNyBAQCBhbmdsZTo6UmVzdWx0IFN5bmM6OmNsaWVudFdhaXQoQ29udGV4dE10
bCAqY29udGV4dE10bCwKIAogICAgIEFTU0VSVChtTWV0YWxTaGFyZWRFdmVudC5nZXQoKS5zaWdu
YWxlZFZhbHVlID49IG1TZXRDb3VudGVyKTsKICAgICAqb3V0UmVzdWx0ID0gR0xfQ09ORElUSU9O
X1NBVElTRklFRDsKKyNlbmRpZgogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwogfQpAQCAtMTE4LDcgKzExOSw3IEBAIGFuZ2xlOjpSZXN1bHQgU3luYzo6Z2V0U3RhdHVzKGJv
b2wgKnNpZ25hbGVkKQogICAgICpzaWduYWxlZCA9IG1NZXRhbFNoYXJlZEV2ZW50LmdldCgpLnNp
Z25hbGVkVmFsdWUgPj0gbVNldENvdW50ZXI7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogfQotI2VuZGlmICAvLyAjaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQorI2Vu
ZGlmICAvLyAjaWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0
KQogfSAgLy8gbmFtZXNwYWNlIG10bAogCiAvLyBGZW5jZU5WTXRsIGltcGxlbWVudGF0aW9uCkBA
IC0xMjgsNyArMTI5LDggQEAgRmVuY2VOVk10bDo6fkZlbmNlTlZNdGwoKSB7fQogCiB2b2lkIEZl
bmNlTlZNdGw6Om9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICBt
U3luYy5vbkRlc3Ryb3koKTsKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuOwogfQog
CiBhbmdsZTo6UmVzdWx0IEZlbmNlTlZNdGw6OnNldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgR0xlbnVtIGNvbmRpdGlvbikKQEAgLTMwNyw0ICszMDksMTAgQEAgZWdsOjpFcnJvciBFR0xT
eW5jTXRsOjpnZXRTdGF0dXMoY29uc3QgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBFR0xpbnQgKm91
dFN0YXR1cykKICAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CiB9CiAKK2VnbDo6RXJyb3IgRUdM
U3luY010bDo6ZHVwTmF0aXZlRmVuY2VGRChjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIEVH
TGludCAqcmVzdWx0KSBjb25zdAoreworICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGVn
bDo6RWdsQmFkRGlzcGxheSgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwu
aAppbmRleCA1YzIxNDFiZDBiYWM3NzA5MjVkN2U5ZjYxMTQ5YWY2NWVjNzkxYmRjLi41ZjRiMmQ0
MGY3MDNlNDdlZDkxZmI5YjlkNzgwYzM1NjI5YzRiOGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9U
ZXh0dXJlTXRsLmgKQEAgLTE1LDkgKzE1LDkgQEAKICNpbmNsdWRlICJjb21tb24vUGFja2VkRW51
bXMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9UZXh0dXJlSW1wbC5oIgogI2luY2x1
ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5oIgorI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCi0KIG5hbWVzcGFjZSByeAogewogCkBA
IC0zMiw2ICszMiw4IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUltcGwKIHsK
ICAgcHVibGljOgogICAgIFRleHR1cmVNdGwoY29uc3QgZ2w6OlRleHR1cmVTdGF0ZSAmc3RhdGUp
OworICAgIC8vIFRleHR1cmUgIHZpZXcKKyAgICBUZXh0dXJlTXRsKGNvbnN0IFRleHR1cmVNdGwg
Jm10bCwgR0xlbnVtIGZvcm1hdCk7CiAgICAgflRleHR1cmVNdGwoKSBvdmVycmlkZTsKICAgICB2
b2lkIG9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CiAKQEAg
LTE5Myw2ICsxOTUsNyBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1cmVJbXBsCiAg
ICAgSW1hZ2VEZWZpbml0aW9uTXRsICZnZXRJbWFnZURlZmluaXRpb24oY29uc3QgZ2w6OkltYWdl
SW5kZXggJmltYWdlSW5kZXgpOwogICAgIFJlbmRlclRhcmdldE10bCAmZ2V0UmVuZGVyVGFyZ2V0
KGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4KTsKICAgICBib29sIGlzSW5kZXhXaXRo
aW5NaW5NYXhMZXZlbHMoY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgpIGNvbnN0Owor
ICAgIG10bDo6VGV4dHVyZVJlZiAmZ2V0SW1wbGljaXRNU1RleHR1cmUoY29uc3QgZ2w6OkltYWdl
SW5kZXggJmltYWdlSW5kZXgpOwogCiAgICAgLy8gSWYgbGV2ZWxzID0gMCwgdGhpcyBmdW5jdGlv
biB3aWxsIGNyZWF0ZSBmdWxsIG1pcG1hcHMgdGV4dHVyZS4KICAgICBhbmdsZTo6UmVzdWx0IHNl
dFN0b3JhZ2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LApAQCAtMzEyLDggKzMxNSw5
IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUltcGwKICAgICBhbmdsZTo6UmVz
dWx0IGdlbmVyYXRlTWlwbWFwQ1BVKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKIAogICAg
IG10bDo6Rm9ybWF0IG1Gb3JtYXQ7CisgICAgU3VyZmFjZU10bFByb3RvY29sICptQm91bmRTdXJm
YWNlID0gbmlsOwogICAgIC8vIFRoZSByZWFsIHRleHR1cmUgdXNlZCBieSBNZXRhbCBkcmF3IGNh
bGxzLgotICAgIG10bDo6VGV4dHVyZVJlZiBtTmF0aXZlVGV4dHVyZTsKKyAgICBtdGw6OlRleHR1
cmVSZWYgbU5hdGl2ZVRleHR1cmUgICAgICAgICA9IG5pbDsKICAgICBpZDxNVExTYW1wbGVyU3Rh
dGU+IG1NZXRhbFNhbXBsZXJTdGF0ZSA9IG5pbDsKIAogICAgIC8vIE51bWJlciBvZiBzbGljZXMK
QEAgLTMyMywxOCArMzI3LDE0IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUlt
cGwKICAgICAvLyBPbmNlIHRoZSBpbWFnZXMgYXJyYXkgaXMgY29tcGxldGUsIHRoZXkgd2lsbCBi
ZSB0cmFuc2ZlcnJlZCB0byByZWFsIHRleHR1cmUgb2JqZWN0LgogICAgIC8vIE5PVEU6CiAgICAg
Ly8gIC0gVGhlIHNlY29uZCBkaW1lbnNpb24gaXMgaW5kZXhlZCBieSBjb25maWd1cmVkIGJhc2Ug
bGV2ZWwgKyBhY3R1YWwgbmF0aXZlIGxldmVsCi0gICAgLy8gIC0gRm9yIEN1YmUgbWFwLCB0aGVy
ZSB3aWxsIGJlIGF0IG1vc3QgNiBlbnRyaWVzIGluIHRoZSBtVGV4SW1hZ2VEZWZzIHRhYmxlLCBv
bmUgZm9yIGVhY2gKLSAgICAvLyAgZmFjZS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBDdWJlIG1hcCdz
IGltYWdlIGlzIGRlZmluZWQgcGVyIGZhY2UgJiBwZXIgbGV2ZWwuCisgICAgLy8gIC0gRm9yIEN1
YmUgbWFwLCB0aGVyZSB3aWxsIGJlIGF0IG1vc3QgNiBlbnRyaWVzIGluIHRoZSBtYXAgdGFibGUs
IG9uZSBmb3IgZWFjaCBmYWNlLiBUaGlzIGlzCisgICAgLy8gIGJlY2F1c2UgdGhlIEN1YmUgbWFw
J3MgaW1hZ2UgaXMgZGVmaW5lZCBwZXIgZmFjZSAmIHBlciBsZXZlbC4KICAgICAvLyAgLSBGb3Ig
b3RoZXIgdGV4dHVyZSB0eXBlcywgdGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBlbnRyeSBpbiB0aGUg
bWFwIHRhYmxlLiBBbGwgb3RoZXIgdGV4dHVyZXMKICAgICAvLyAgZXhjZXB0IEN1YmUgbWFwIGhh
cyB0ZXh0dXJlIGltYWdlIGRlZmluZWQgcGVyIGxldmVsIChhbGwgc2xpY2VzIGluY2x1ZGVkKS4K
KyAgICAvLyAgLSBUaGVzZSB0aHJlZSB2YXJpYWJsZXMnIHNlY29uZCBkaW1lbnNpb24gYXJlIGlu
ZGV4ZWQgYnkgaW1hZ2UgaW5kZXggKGJhc2UgbGV2ZWwgaW5jbHVkZWQpLgogICAgIHN0ZDo6bWFw
PGludCwgZ2w6OlRleExldmVsQXJyYXk8SW1hZ2VEZWZpbml0aW9uTXRsPj4gbVRleEltYWdlRGVm
czsKLQotICAgIC8vIFJlbmRlciBUYXJnZXQgcGVyIHNsaWNlL2RlcHRoL2N1YmUgZmFjZS4KLSAg
ICAvLyAtIEZvciAyRCB0ZXh0dXJlOiBUaGVyZSB3aWxsIGJlIG9uZSBrZXkgZW50cnkgaW4gdGhl
IG1hcC4KLSAgICAvLyAtIEZvciBDdWJlIG1hcDogVGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYga2V5
IGVudHJpZXMuCi0gICAgLy8gLSBGb3IgYXJyYXkvM0QgdGV4dHVyZTogVGhlcmUgd2lsbCBiZSBh
dCBtb3N0IHNsaWNlcy9kZXB0aHMgbnVtYmVyIG9mIGtleSBlbnRyaWVzLgotICAgIC8vIC0gVGhl
IHNlY29uZCBkaW1lbnNpb24gaXMgaW5kZXhlZCBieSBjb25maWd1cmVkIGJhc2UgbGV2ZWwgKyBh
Y3R1YWwgbmF0aXZlIGxldmVsCiAgICAgc3RkOjptYXA8aW50LCBnbDo6VGV4TGV2ZWxBcnJheTxS
ZW5kZXJUYXJnZXRNdGw+PiBtUGVyTGF5ZXJSZW5kZXJUYXJnZXRzOworICAgIHN0ZDo6bWFwPGlu
dCwgZ2w6OlRleExldmVsQXJyYXk8bXRsOjpUZXh0dXJlUmVmPj4gbUltcGxpY2l0TVNUZXh0dXJl
czsKIAogICAgIC8vIE1pcG1hcCB2aWV3cyBhcmUgaW5kZXhlZCBieSBuYXRpdmUgbGV2ZWwgKGln
bm9yZWQgYmFzZSBsZXZlbCk6CiAgICAgbXRsOjpOYXRpdmVUZXhMZXZlbEFycmF5IG1OYXRpdmVM
ZXZlbFZpZXdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5tbQppbmRleCA2MjNjMTA0
YzllOGY3MGI5MzgyNGZjNDlmNDVmOWIyN2Y2OGQyMTYwLi4zYjFjOGFmNzFlYjM1OGU3ZmFmOGEw
Y2Q0YzRhMGY0YThmNjIwZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5tbQorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5tbQpA
QCAtMjAsOCArMjAsOCBAQAogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRl
eHRNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgi
CiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCIKKyNp
bmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmgiCiAj
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2FtcGxlck10bC5oIgotI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5oIgpAQCAtNTM0LDYgKzUzNCwxMCBAQCB2b2lkIFRleHR1cmVNdGw6
OnJlbGVhc2VUZXh0dXJlKGJvb2wgcmVsZWFzZUltYWdlcywgYm9vbCByZWxlYXNlVGV4dHVyZU9i
amVjdHNPbgogCiBhbmdsZTo6UmVzdWx0IFRleHR1cmVNdGw6OmVuc3VyZVRleHR1cmVDcmVhdGVk
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogeworICAgIGlmIChtQm91bmRTdXJmYWNlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgIH0KICAg
ICBpZiAobU5hdGl2ZVRleHR1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CkBAIC0xMjA3LDI1ICsxMjExLDE1IEBAIGFuZ2xlOjpSZXN1bHQgVGV4dHVy
ZU10bDo6c2V0QmFzZUxldmVsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQgYmFz
ZUxlCiAKIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZU10bDo6YmluZFRleEltYWdlKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCiB7Ci0gICAgcmVsZWFzZVRl
eHR1cmUodHJ1ZSk7Ci0KLSAgICBhdXRvIHBCdWZmZXIgICAgID0gR2V0SW1wbEFzPE9mZnNjcmVl
blN1cmZhY2VNdGw+KHN1cmZhY2UpOwotICAgIG1OYXRpdmVUZXh0dXJlICAgPSBwQnVmZmVyLT5n
ZXRDb2xvclRleHR1cmUoKTsKLSAgICBtRm9ybWF0ICAgICAgICAgID0gcEJ1ZmZlci0+Z2V0Q29s
b3JGb3JtYXQoKTsKLSAgICBnbDo6RXh0ZW50cyBzaXplID0gbU5hdGl2ZVRleHR1cmUtPnNpemVB
dDAoKTsKLSAgICBtSXNQb3cyICAgICAgICAgID0gZ2w6OmlzUG93MihzaXplLndpZHRoKSAmJiBn
bDo6aXNQb3cyKHNpemUuaGVpZ2h0KSAmJiBnbDo6aXNQb3cyKHNpemUuZGVwdGgpOwotICAgIEFO
R0xFX1RSWShlbnN1cmVTYW1wbGVyU3RhdGVDcmVhdGVkKGNvbnRleHQpKTsKLQotICAgIC8vIFRl
bGwgY29udGV4dCB0byByZWJpbmQgdGV4dHVyZXMKLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRs
ID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOwotICAgIGNvbnRleHRNdGwtPmludmFsaWRhdGVDdXJy
ZW50VGV4dHVyZXMoKTsKLQorICAgIElPU3VyZmFjZVN1cmZhY2VNdGwgKnN1cmZhY2VNdGwgPSAo
SU9TdXJmYWNlU3VyZmFjZU10bCAqKW10bDo6R2V0SW1wbChzdXJmYWNlKTsKKyAgICBtQm91bmRT
dXJmYWNlICAgICAgICAgICAgICAgICAgID0gc3VyZmFjZU10bDsKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZU10bDo6cmVsZWFz
ZVRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewotICAgIHJlbGVhc2VUZXh0
dXJlKHRydWUpOworICAgIG1Cb3VuZFN1cmZhY2UgPSBuaWw7CisKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CiAKQEAgLTEyMzUsNiArMTIyOSwxMiBAQCBhbmdsZTo6UmVz
dWx0IFRleHR1cmVNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBzYW1wbGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAq
KnJ0T3V0KQogeworICAgIGlmIChtQm91bmRTdXJmYWNlKQorICAgIHsKKyAgICAgICAgQU5HTEVf
VFJZKAorICAgICAgICAgICAgbUJvdW5kU3VyZmFjZS0+Z2V0QXR0YWNobWVudFJlbmRlclRhcmdl
dChjb250ZXh0LCBiaW5kaW5nLCBpbWFnZUluZGV4LCBzYW1wbGVzLCBydE91dCkpOworICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgfQogICAgIEFOR0xFX1RSWShl
bnN1cmVUZXh0dXJlQ3JlYXRlZChjb250ZXh0KSk7CiAKICAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRs
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
VHJhbnNmb3JtRmVlZGJhY2tNdGwuaAppbmRleCBhYTQ1YmY5NGUwMjQ5YjExNmE4YjE0ZmVkZGZj
ZWEzZDZmMjVlN2NiLi4yMGEyYzIwZjlkYjhiZWZhZDgzMWVhZTAwYjlhNDYxMTE4NzBjZTAwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwuaApAQCAt
MTAsMTIgKzEwLDIwIEBACiAjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX1RSQU5TRk9S
TUZFRURCQUNLTVRMX0hfCiAjZGVmaW5lIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX1RSQU5TRk9S
TUZFRURCQUNLTVRMX0hfCiAKKyNpbmNsdWRlIDxNZXRhbC9NZXRhbC5oPgogI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL1RyYW5zZm9ybUZlZWRiYWNrSW1wbC5oIgorI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9yZXNvdXJjZXMuaCIKIAotbmFtZXNwYWNlIHJ4Cit0eXBlZGVmIHVpbnQ2
NF90IE10bERldmljZVNpemU7CisKK25hbWVzcGFjZSBnbAogeworY2xhc3MgUHJvZ3JhbVN0YXRl
OworfSAgLy8gbmFtZXNwYWNlIGdsCiAKLWNsYXNzIENvbnRleHRNdGw7CituYW1lc3BhY2UgcngK
K3sKIAogY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tNdGwgOiBwdWJsaWMgVHJhbnNmb3JtRmVlZGJh
Y2tJbXBsCiB7CkBAIC0zMiwxNyArNDAsMjMgQEAgY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tNdGwg
OiBwdWJsaWMgVHJhbnNmb3JtRmVlZGJhY2tJbXBsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6T2Zmc2V0QmluZGluZ1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJpbmRpbmcp
IG92ZXJyaWRlOwogCi0gICAgLy8gUGFyYW1zOgotICAgIC8vIC0gZHJhd0NhbGxGaXJzdFZlcnRl
eCBpcyBmaXJzdCB2ZXJ0ZXggdXNlZCBieSBnbERyYXdBcnJheXMqLiBUaGlzIGlzIGltcG9ydGFu
dCBiZWNhdXNlCi0gICAgLy8gZ2xfVmVydGV4SW5kZXggaXMgc3RhcnRpbmcgZnJvbSB0aGlzLgot
ICAgIC8vIC0gc2tpcHBlZFZlcnRpY2VzIGlzIG51bWJlciBvZiBza2lwcGVkIHZlcnRpY2VzICh1
c2VmdWwgZm9yIG11bHRpcGxlIG1ldGFsIGRyYXdzIHBlciBHTCBkcmF3Ci0gICAgLy8gY2FsbCku
Ci0gICAgYW5nbGU6OlJlc3VsdCBnZXRCdWZmZXJPZmZzZXRzKENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmly
c3RWZXJ0ZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNr
aXBwZWRWZXJ0aWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJf
dCAqb2Zmc2V0c091dCk7CisgICAgdm9pZCBnZXRCdWZmZXJPZmZzZXRzKENvbnRleHRNdGwgKmNv
bnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmlyc3RW
ZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKm9mZnNldHNPdXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXRzU2l6ZSkgY29uc3Q7CisKKyAg
ICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZn
ZXRCdWZmZXJIYW5kbGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtQnVmZmVySGFu
ZGxlczsKKyAgICB9CiAKICAgcHJpdmF0ZToKKyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzQXJyYXk8QnVmZmVyTXRsICo+IG1CdWZmZXJIYW5kbGVzOworICAgIGdsOjpUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNBcnJheTxNdGxEZXZpY2VTaXplPiBtQnVmZmVyT2Zmc2V0czsKKyAgICBn
bDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUJ1ZmZlclNp
emVzOworCisgICAgLy8gQWxpZ25lZCBvZmZzZXQgZm9yIGVtdWxhdGlvbi4gQ291bGQgYmUgc21h
bGxlciB0aGFuIG9mZnNldC4KKyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8
TXRsRGV2aWNlU2l6ZT4gbUFsaWduZWRCdWZmZXJPZmZzZXRzOwogfTsKIAogfSAgLy8gbmFtZXNw
YWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW0KaW5kZXggZDk0MGMzZDU2YTE0YmRhMzY0MTBjZGE2YmFmOTY4YzFkZDc1MGI2NS4uZGU3YTkw
OTM1N2I2OTI0ZjlkMGViNWJjMDJkMjI3ZTJmNjM0MjA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRi
YWNrTXRsLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010bC5tbQpAQCAtOCwxOCArOCwyNyBAQAogLy8K
IAogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRs
LmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgiCisjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUXVlcnlNdGwuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Y29tbW9uLmgiCiAKLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJsaWJBTkdM
RS9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvUXVlcnkuaCIKLSNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCi0jaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvUXVlcnlNdGwuaCIKKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCiBu
YW1lc3BhY2UgcngKIHsKIAogVHJhbnNmb3JtRmVlZGJhY2tNdGw6OlRyYW5zZm9ybUZlZWRiYWNr
TXRsKGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFja1N0YXRlICZzdGF0ZSkKLSAgICA6IFRyYW5z
Zm9ybUZlZWRiYWNrSW1wbChzdGF0ZSkKKyAgICA6IFRyYW5zZm9ybUZlZWRiYWNrSW1wbChzdGF0
ZSksCisgICAgICBtQnVmZmVySGFuZGxlc3t9LAorICAgICAgbUJ1ZmZlck9mZnNldHN7fSwKKyAg
ICAgIG1CdWZmZXJTaXplc3t9LAorICAgICAgbUFsaWduZWRCdWZmZXJPZmZzZXRze30KIHt9CiAK
IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjp+VHJhbnNmb3JtRmVlZGJhY2tNdGwoKSB7fQpAQCAtMjcs
NDAgKzM2LDc5IEBAIFRyYW5zZm9ybUZlZWRiYWNrTXRsOjp+VHJhbnNmb3JtRmVlZGJhY2tNdGwo
KSB7fQogYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6YmVnaW4oY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6UHJpbWl0aXZlTW9kZSBwcmltaXRpdmVNb2RlKQogewotICAgIG10bDo6R2V0SW1w
bChjb250ZXh0KS0+b25UcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZShjb250ZXh0LCB0aGlzKTsKKyAg
ICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworICAgIC8v
IE5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIHdpdGggbXNsIGNvbXBpbGVyCisgICAgaWYgKCFjb250
ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRi
YWNrLmVuYWJsZWQpCisgICAgeworICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsK
KyAgICB9CiAKLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgY29uc3Qg
Z2w6OlByb2dyYW1FeGVjdXRhYmxlICpleGVjdXRhYmxlID0gY29udGV4dE10bC0+Z2V0U3RhdGUo
KS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOworICAgIEFTU0VSVChleGVjdXRhYmxlKTsKKyAgICBz
aXplX3QgeGZiQnVmZmVyQ291bnQgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlckNvdW50KCk7CisKKyAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlcklu
ZGV4IDwgeGZiQnVmZmVyQ291bnQ7ICsrYnVmZmVySW5kZXgpCisgICAgeworICAgICAgICBjb25z
dCBnbDo6T2Zmc2V0QmluZGluZ1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJpbmRpbmcgPSBtU3RhdGUu
Z2V0SW5kZXhlZEJ1ZmZlcihidWZmZXJJbmRleCk7CisgICAgICAgIEFTU0VSVChiaW5kaW5nLmdl
dCgpKTsKKworICAgICAgICBCdWZmZXJNdGwgKmJ1ZmZlck10bCA9IG10bDo6R2V0SW1wbChiaW5k
aW5nLmdldCgpKTsKKworICAgICAgICBhc3NlcnQoYnVmZmVyTXRsKTsKKyAgICAgICAgbUJ1ZmZl
ck9mZnNldHNbYnVmZmVySW5kZXhdID0gYmluZGluZy5nZXRPZmZzZXQoKTsKKyAgICAgICAgbUJ1
ZmZlclNpemVzW2J1ZmZlckluZGV4XSAgID0gZ2w6OkdldEJvdW5kQnVmZmVyQXZhaWxhYmxlU2l6
ZShiaW5kaW5nKTsKKyAgICAgICAgbUJ1ZmZlckhhbmRsZXNbYnVmZmVySW5kZXhdID0gYnVmZmVy
TXRsOworCisgICAgICAgIEFTU0VSVChjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1
cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQpOworICAgICAgICBjb25zdCBN
dGxEZXZpY2VTaXplIG9mZnNldEFsaWdubWVudCA9IG10bDo6a1VuaWZvcm1CdWZmZXJTZXR0aW5n
T2Zmc2V0TWluQWxpZ25tZW50OworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzIG5vIHBv
c3NpYmxlIHVuZGVyL292ZXJmbG93IHdpdGggYmluZGluZyBzaXplLgorICAgICAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihNdGxEZXZpY2VTaXplKSA+PSBzaXplb2YoYmluZGluZy5nZXRTaXplKCkp
LAorICAgICAgICAgICAgICAgICAgICAgICJNdGxEZXZpY2VTaXplIHRvbyBzbWFsbCIpOworCisg
ICAgICAgIC8vIFNldCB0aGUgb2Zmc2V0IGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSByZXF1
ZXN0ZWQgb2Zmc2V0IHdoaWxlIHJlbWFpbmluZyBhbGlnbmVkLgorICAgICAgICBtQWxpZ25lZEJ1
ZmZlck9mZnNldHNbYnVmZmVySW5kZXhdID0KKyAgICAgICAgICAgIChtQnVmZmVyT2Zmc2V0c1ti
dWZmZXJJbmRleF0gLyBvZmZzZXRBbGlnbm1lbnQpICogb2Zmc2V0QWxpZ25tZW50OworICAgIH0K
KworICAgIHJldHVybiBjb250ZXh0TXRsLT5vbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2soeGZiQnVm
ZmVyQ291bnQsIG1CdWZmZXJIYW5kbGVzKTsKIH0KIAogYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1G
ZWVkYmFja010bDo6ZW5kKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogeworICAgIENvbnRl
eHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgLy8gTm90IGN1
cnJlbnRseSBzdXBwb3J0ZWQgd2l0aCBtc2wgY29tcGlsZXIKKyAgICBpZiAoIWNvbnRleHRNdGwt
PmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5h
YmxlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworICAgIH0K
KworICAgIC8vIElmIHRoZXJlJ3MgYW4gYWN0aXZlIHRyYW5zZm9ybSBmZWVkYmFjayBxdWVyeSwg
YWNjdW11bGF0ZSB0aGUgcHJpbWl0aXZlcyBkcmF3bi4KICAgICBjb25zdCBnbDo6U3RhdGUgJmds
U3RhdGUgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOwogICAgIGdsOjpRdWVyeSAqdHJhbnNmb3JtRmVl
ZGJhY2tRdWVyeSA9CiAgICAgICAgIGdsU3RhdGUuZ2V0QWN0aXZlUXVlcnkoZ2w6OlF1ZXJ5VHlw
ZTo6VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzV3JpdHRlbik7CisKICAgICBpZiAodHJhbnNm
b3JtRmVlZGJhY2tRdWVyeSkKICAgICB7Ci0gICAgICAgIG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1G
ZWVkYmFja1F1ZXJ5KS0+b25UcmFuc2Zvcm1GZWVkYmFja0VuZChjb250ZXh0KTsKKyAgICAgICAg
bXRsOjpHZXRJbXBsKHRyYW5zZm9ybUZlZWRiYWNrUXVlcnkpLT5vblRyYW5zZm9ybUZlZWRiYWNr
RW5kKG1TdGF0ZS5nZXRQcmltaXRpdmVzRHJhd24oKSk7CiAgICAgfQotCi0gICAgbXRsOjpHZXRJ
bXBsKGNvbnRleHQpLT5vblRyYW5zZm9ybUZlZWRiYWNrSW5hY3RpdmUoY29udGV4dCwgdGhpcyk7
Ci0KKyAgICBjb250ZXh0TXRsLT5vbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CiAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCiBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZl
ZWRiYWNrTXRsOjpwYXVzZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICAvLyBX
aGVuIFhGQiBpcyBwYXVzZWQsIE9wZW5HTCBhbGxvd3MgWEZCIGJ1ZmZlcnMgdG8gYmUgYm91bmQg
Zm9yIG90aGVyIHB1cnBvc2VzLiBXZSBuZWVkIHRvIGNhbGwKLSAgICAvLyBvblRyYW5zZm9ybUZl
ZWRiYWNrSW5hY3RpdmUoKSB0byBpc3N1ZSBhIHN5bmMuCi0gICAgbXRsOjpHZXRJbXBsKGNvbnRl
eHQpLT5vblRyYW5zZm9ybUZlZWRiYWNrSW5hY3RpdmUoY29udGV4dCwgdGhpcyk7Ci0KLSAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICByZXR1cm4gY29udGV4dE10bC0+b25QYXVz
ZVRyYW5zZm9ybUZlZWRiYWNrKCk7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJh
Y2tNdGw6OnJlc3VtZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICBtdGw6Okdl
dEltcGwoY29udGV4dCktPm9uVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoY29udGV4dCwgdGhpcyk7
Ci0KLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgQ29udGV4dE10bCAq
Y29udGV4dE10bCAgICAgICAgICAgICAgICAgID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworICAg
IGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHRNdGwtPmdl
dFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAgICBBU1NFUlQoZXhlY3V0YWJsZSk7
CisgICAgc2l6ZV90IHhmYkJ1ZmZlckNvdW50ID0gZXhlY3V0YWJsZS0+Z2V0VHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJDb3VudCgpOworICAgIHJldHVybiBjb250ZXh0TXRsLT5vbkJlZ2luVHJhbnNm
b3JtRmVlZGJhY2soeGZiQnVmZmVyQ291bnQsIG1CdWZmZXJIYW5kbGVzKTsKIH0KIAogYW5nbGU6
OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6YmluZEluZGV4ZWRCdWZmZXIoCkBAIC02OCwx
NyArMTE2LDIwIEBAIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJpbmRJbmRl
eGVkQnVmZmVyKAogICAgIHNpemVfdCBpbmRleCwKICAgICBjb25zdCBnbDo6T2Zmc2V0QmluZGlu
Z1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJpbmRpbmcpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3Ig
bm93CisgICAgVU5JTVBMRU1FTlRFRCgpOwogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogfQogCi1hbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjpnZXRCdWZm
ZXJPZmZzZXRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmlyc3RWZXJ0ZXgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IHNraXBwZWRWZXJ0aWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCkKK3ZvaWQgVHJhbnNmb3Jt
RmVlZGJhY2tNdGw6OmdldEJ1ZmZlck9mZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZHJhd0NhbGxG
aXJzdFZlcnRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzJfdCAqb2Zmc2V0c091dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IG9mZnNldHNTaXplKSBjb25zdAogewotICAgIGludDY0X3QgdmVydGlj
ZXNEcmF3biA9IHN0YXRpY19jYXN0PGludDY0X3Q+KG1TdGF0ZS5nZXRWZXJ0aWNlc0RyYXduKCkp
ICsgc2tpcHBlZFZlcnRpY2VzOworICAgIGlmICghY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5n
ZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHTHNpemVpcHRyIHZlcnRpY2VzRHJhd24gPSBtU3RhdGUuZ2V0VmVydGlj
ZXNEcmF3bigpOwogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEdMc2l6ZWk+ICZidWZmZXJTdHJpZGVz
ID0KICAgICAgICAgbVN0YXRlLmdldEJvdW5kUHJvZ3JhbSgpLT5nZXRUcmFuc2Zvcm1GZWVkYmFj
a1N0cmlkZXMoKTsKICAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1dGFibGUg
PSBjb250ZXh0TXRsLT5nZXRTdGF0ZSgpLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CkBAIC04Nywy
NyArMTM4LDI1IEBAIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmdldEJ1ZmZl
ck9mZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKIAogICAgIEFTU0VSVCh4ZmJCdWZmZXJD
b3VudCA+IDApOwogCisgICAgLy8gVGhlIGNhbGxlciBzaG91bGQgbWFrZSBzdXJlIHRoZSBvZmZz
ZXRzIGFycmF5IGhhcyBlbm91Z2ggc3BhY2UuICBUaGUgbWF4aW11bSBwb3NzaWJsZQorICAgIC8v
IG51bWJlciBvZiBvdXRwdXRzIGlzIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUlMuCisgICAgQVNTRVJUKG9mZnNldHNTaXplID49IHhmYkJ1ZmZlckNvdW50
KTsKKwogICAgIGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5kZXggPCB4ZmJC
dWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKICAgICB7Ci0gICAgICAgIGNvbnN0IGdsOjpPZmZz
ZXRCaW5kaW5nUG9pbnRlcjxnbDo6QnVmZmVyPiAmYnVmZmVyQmluZGluZyA9Ci0gICAgICAgICAg
ICBtU3RhdGUuZ2V0SW5kZXhlZEJ1ZmZlcihidWZmZXJJbmRleCk7Ci0KLSAgICAgICAgQVNTRVJU
KChidWZmZXJCaW5kaW5nLmdldE9mZnNldCgpICUgNCkgPT0gMCk7Ci0KLSAgICAgICAgLy8gT2Zm
c2V0IHRoZSBnbF9WZXJ0ZXhJbmRleCBieSBkcmF3Q2FsbEZpcnN0VmVydGV4CisgICAgICAgIGlu
dDY0X3Qgb2Zmc2V0RnJvbURlc2NyaXB0b3IgPQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
NjRfdD4obUJ1ZmZlck9mZnNldHNbYnVmZmVySW5kZXhdIC0gbUFsaWduZWRCdWZmZXJPZmZzZXRz
W2J1ZmZlckluZGV4XSk7CiAgICAgICAgIGludDY0X3QgZHJhd0NhbGxWZXJ0ZXhPZmZzZXQgPSBz
dGF0aWNfY2FzdDxpbnQ2NF90Pih2ZXJ0aWNlc0RyYXduKSAtIGRyYXdDYWxsRmlyc3RWZXJ0ZXg7
CiAKICAgICAgICAgaW50NjRfdCB3cml0ZU9mZnNldCA9Ci0gICAgICAgICAgICAoYnVmZmVyQmlu
ZGluZy5nZXRPZmZzZXQoKSArIGRyYXdDYWxsVmVydGV4T2Zmc2V0ICogYnVmZmVyU3RyaWRlc1ti
dWZmZXJJbmRleF0pIC8KKyAgICAgICAgICAgIChvZmZzZXRGcm9tRGVzY3JpcHRvciArIGRyYXdD
YWxsVmVydGV4T2Zmc2V0ICogYnVmZmVyU3RyaWRlc1tidWZmZXJJbmRleF0pIC8KICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDY0X3Q+KHNpemVvZih1aW50MzJfdCkpOwogCiAgICAgICAgIG9m
ZnNldHNPdXRbYnVmZmVySW5kZXhdID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4od3JpdGVPZmZzZXQp
OwogCi0gICAgICAgIC8vIENoZWNrIGZvciBvdmVyZmxvdy4KLSAgICAgICAgQU5HTEVfQ0hFQ0tf
R0xfQUxMT0MoY29udGV4dE10bCwgb2Zmc2V0c091dFtidWZmZXJJbmRleF0gPT0gd3JpdGVPZmZz
ZXQpOworICAgICAgICAvLyBBc3NlcnQgb24gb3ZlcmZsb3cuICBGb3Igbm93LCBzdXBwb3J0IHRy
YW5zZm9ybSBmZWVkYmFjayB1cCB0byAyR0IuCisgICAgICAgIEFTU0VSVChvZmZzZXRzT3V0W2J1
ZmZlckluZGV4XSA9PSB3cml0ZU9mZnNldCk7CiAgICAgfQotCi0gICAgcmV0dXJuIGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlOwogfQogCiB9ICAvLyBuYW1lc3BhY2UgcngKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhB
cnJheU10bC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1ZlcnRleEFycmF5TXRsLmgKaW5kZXggYzJmYjg0NmQ0MWQ5NDEyYTAwZjg3YTM3MDgz
YzU1YWRiYWM0MWRlZS4uZmU2YjVmN2E5ZTkwNmYxOTg3OTNlYWFjZDQ3NDcyNzgxZTI0Y2I3NSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1ZlcnRleEFycmF5TXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLmgKQEAgLTQzLDggKzQzLDkg
QEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVydGV4QXJyYXlJbXBsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMpOwogCiAg
ICAgLy8gdmVydGV4RGVzY0NoYW5nZWQgaXMgYm90aCBpbnB1dCBhbmQgb3V0cHV0LCB0aGUgaW5w
dXQgdmFsdWUgaWYgaXMgdHJ1ZSwgd2lsbCBmb3JjZSBuZXcKLSAgICAvLyBtdGw6OlZlcnRleERl
c2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQuIE90aGVyd2lzZSwgaXQgaXMgb25s
eSByZXR1cm5lZCB3aGVuIHRoZQotICAgIC8vIHZlcnRleCBhcnJheSBpcyBkaXJ0eQorICAgIC8v
IG10bDo6VmVydGV4RGVzYyB0byBiZSByZXR1cm5lZCB2aWEgdmVydGV4RGVzY091dC4gVGhpcyB0
eXBpY2FsbHkgaGFwcGVucyB3aGVuIGFjdGl2ZSBzaGFkZXIKKyAgICAvLyBwcm9ncmFtIGlzIGNo
YW5nZWQuCisgICAgLy8gT3RoZXJ3aXNlLCBpdCBpcyBvbmx5IHJldHVybmVkIHdoZW4gdGhlIHZl
cnRleCBhcnJheSBpcyBkaXJ0eS4KICAgICBhbmdsZTo6UmVzdWx0IHNldHVwRHJhdyhjb25zdCBn
bDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6
UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCAqdmVydGV4RGVzY0NoYW5nZWQsCkBAIC01MiwxMSArNTMsMjQgQEAgY2xhc3Mg
VmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVydGV4QXJyYXlJbXBsCiAKICAgICBhbmdsZTo6UmVz
dWx0IGdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBwcmlt
aXRpdmVNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluZGV4
Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzb3Vy
Y2VQb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJS
ZWYgKmlkeEJ1ZmZlck91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCAqaWR4QnVmZmVyT2Zmc2V0T3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGUgKmluZGV4VHlwZU91dCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSAqaW5kZXhUeXBlT3V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRleEJ1ZmZlckNvdW50T3V0KTsK
KworICAgIC8vIFVzZSB0byBlbXVsYXRlIGluc3RhbmNlZCBkcmF3IGZvciBpbnN0YW5jZSA8aW5z
dGFuY2VJZD4uCisgICAgLy8gVGhlIHR5cGljYWwgY2FsbCBzZXF1ZW5jZSBmb3IgZW11bGF0ZWQg
aW5zdGFuY2UgZHJhdyBpczoKKyAgICAvLyAtIHNldHVwRHJhdygpCisgICAgLy8gLSBkcmF3Lgor
ICAgIC8vIC0gZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoMSkKKyAgICAvLyAtIGRyYXcuCisgICAg
Ly8gLSBlbXVsYXRlSW5zdGFuY2VEcmF3U3RlcChuKQorICAgIC8vIC0gZHJhdy4KKyAgICAvLyAt
IGVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKDApCisgICAgdm9pZCBlbXVsYXRlSW5zdGFuY2VEcmF3
U3RlcChtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLCB1aW50MzJfdCBpbnN0
YW5jZUlkKTsKIAogICBwcml2YXRlOgogICAgIHZvaWQgcmVzZXQoQ29udGV4dE10bCAqY29udGV4
dCk7CkBAIC03MiwxNSArODYsMTkgQEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVy
dGV4QXJyYXlJbXBsCiAKICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlcihjb25z
dCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmlkeEJ1ZmZlck91dCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZm
ZXJPZmZzZXRPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
ICppbmRleEJ1ZmZlckNvdW50T3V0KTsKICAgICBhbmdsZTo6UmVzdWx0IHN0cmVhbUluZGV4QnVm
ZmVyRnJvbUNsaWVudChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGlu
ZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6UHJpbWl0aXZlTW9kZSBwcmltaXRpdmVUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleENvdW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZm
ZXJSZWYgKmlkeEJ1ZmZlck91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpp
ZHhCdWZmZXJDb3VudE91dCk7CiAKICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZl
ckdQVShjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKQEAgLTEx
Nyw3ICsxMzUsMjAgQEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVydGV4QXJyYXlJ
bXBsCiAgICAgZ2w6OkF0dHJpYkFycmF5PEJ1ZmZlckhvbGRlck10bCAqPiBtQ3VycmVudEFycmF5
QnVmZmVyczsKICAgICBnbDo6QXR0cmliQXJyYXk8U2ltcGxlV2Vha0J1ZmZlckhvbGRlck10bD4g
bUNvbnZlcnRlZEFycmF5QnVmZmVySG9sZGVyczsKICAgICBnbDo6QXR0cmliQXJyYXk8c2l6ZV90
PiBtQ3VycmVudEFycmF5QnVmZmVyT2Zmc2V0czsKKworICAgIC8vIFNpemUgdG8gYmUgdXBsb2Fk
ZWQgYXMgaW5saW5lIGNvbnN0YW50IGRhdGEuIFVzZWQgZm9yIGNsaWVudCB2ZXJ0ZXggYXR0cmli
dXRlJ3MgZGF0YSB0aGF0CisgICAgLy8gaXMgc21hbGwgZW5vdWdoIHRoYXQgd2UgY2FuIHNlbmQg
ZGlyZWN0bHkgYXMgaW5saW5lIGNvbnN0YW50IGRhdGEgaW5zdGVhZCBvZiBzdHJlYW1pbmcKKyAg
ICAvLyB0aHJvdWdoIGEgYnVmZmVyLgorICAgIGdsOjpBdHRyaWJBcnJheTxzaXplX3Q+IG1DdXJy
ZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXM7CisgICAgLy8gQXJyYXkgb2YgaG9zdCBidWZmZXJzIHN0
b3JpbmcgY29udmVydGVkIGRhdGEgZm9yIGNsaWVudCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNtYWxs
IGVub3VnaC4KKyAgICBnbDo6QXR0cmliQXJyYXk8YW5nbGU6Ok1lbW9yeUJ1ZmZlcj4gbUNvbnZl
cnRlZENsaWVudFNtYWxsQXJyYXlzOworICAgIGdsOjpBdHRyaWJBcnJheTxjb25zdCB1aW50OF90
ICo+IG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnM7CisgICAgLy8gTWF4IHNpemUgb2Yg
aW5saW5lIGNvbnN0YW50IGRhdGEgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY2xpZW50IHZlcnRleCBh
dHRyaWJ1dGUuCisgICAgc2l6ZV90IG1JbmxpbmVEYXRhTWF4U2l6ZTsKKworICAgIC8vIFN0cmlk
ZSBwZXIgdmVydGV4IGF0dHJpYnV0ZQogICAgIGdsOjpBdHRyaWJBcnJheTxHTHVpbnQ+IG1DdXJy
ZW50QXJyYXlCdWZmZXJTdHJpZGVzOworICAgIC8vIEZvcm1hdCBwZXIgdmVydGV4IGF0dHJpYnV0
ZQogICAgIGdsOjpBdHRyaWJBcnJheTxjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAqPiBtQ3VycmVu
dEFycmF5QnVmZmVyRm9ybWF0czsKIAogICAgIGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZtRGVm
YXVsdEZsb2F0VmVydGV4Rm9ybWF0OwpAQCAtMTI3LDYgKzE1OCw4IEBAIGNsYXNzIFZlcnRleEFy
cmF5TXRsIDogcHVibGljIFZlcnRleEFycmF5SW1wbAogICAgIG10bDo6QnVmZmVyUG9vbCBtRHlu
YW1pY1ZlcnRleERhdGE7CiAgICAgbXRsOjpCdWZmZXJQb29sIG1EeW5hbWljSW5kZXhEYXRhOwog
CisgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IG1FbXVsYXRlZEluc3RhbmNlQXR0cmliczsKKwog
ICAgIGJvb2wgbVZlcnRleEFycmF5RGlydHkgPSB0cnVlOwogfTsKIH0gIC8vIG5hbWVzcGFjZSBy
eApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLm1tCmluZGV4IGNkOTYxYzE4
MTlkOGFiNzczMWNiYmRhMmYwNTVlZTk0YWZiMmE3YjcuLjAyMTk1ZDgyNjk4MmE1OTFlNDg3OWM0
ZDc0OTI2NmFkMzM2N2Y3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5tbQorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlN
dGwubW0KQEAgLTgsNiArOCw5IEBACiAvLwogCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVmVydGV4QXJyYXlNdGwuaCIKKworI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5o
PgorCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgiCiAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgogI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKQEAgLTc2LDE1ICs3OSwxNSBAQCBh
bmdsZTo6UmVzdWx0IFN0cmVhbUluZGV4RGF0YShDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc291cmNlUG9pbnRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4
VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleENvdW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJpbWl0aXZlUmVzdGFydEVuYWJsZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqYnVmZmVyT3V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpidWZmZXJPZmZzZXRPdXQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kZXhDb3VudE91dCkKIHsK
ICAgICBkeW5hbWljQnVmZmVyLT5yZWxlYXNlSW5GbGlnaHRCdWZmZXJzKGNvbnRleHRNdGwpOwot
CiAgICAgY29uc3Qgc2l6ZV90IGFtb3VudCA9IEdldEluZGV4Q29udmVydGVkQnVmZmVyU2l6ZShp
bmRleFR5cGUsIGluZGV4Q291bnQpOwogICAgIEdMdWJ5dGUgKmRzdCAgICAgICAgPSBudWxscHRy
OwotCiAgICAgQU5HTEVfVFJZKAogICAgICAgICBkeW5hbWljQnVmZmVyLT5hbGxvY2F0ZShjb250
ZXh0TXRsLCBhbW91bnQsICZkc3QsIGJ1ZmZlck91dCwgYnVmZmVyT2Zmc2V0T3V0LCBudWxscHRy
KSk7CiAKQEAgLTEyMSw2ICsxMjQsNyBAQCBhbmdsZTo6UmVzdWx0IFN0cmVhbUluZGV4RGF0YShD
b250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIHsKICAgICAgICAgbWVtY3B5KGRzdCwgc291cmNl
UG9pbnRlciwgYW1vdW50KTsKICAgICB9CisgICAgKmluZGV4Q291bnRPdXQgPSBpbmRleENvdW50
OwogICAgIEFOR0xFX1RSWShkeW5hbWljQnVmZmVyLT5jb21taXQoY29udGV4dE10bCkpOwogCiAg
ICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwpAQCAtMjA4LDYgKzIxMiwzMCBAQCB2
b2lkIFZlcnRleEFycmF5TXRsOjpyZXNldChDb250ZXh0TXRsICpjb250ZXh0KQogICAgICAgICBm
b3JtYXQgPSAmbURlZmF1bHRGbG9hdFZlcnRleEZvcm1hdDsKICAgICB9CiAKKyAgICBmb3IgKHNp
emVfdCAmaW5saW5lRGF0YVNpemUgOiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzKQorICAg
IHsKKyAgICAgICAgaW5saW5lRGF0YVNpemUgPSAwOworICAgIH0KKworICAgIGZvciAoYW5nbGU6
Ok1lbW9yeUJ1ZmZlciAmY29udmVydGVkQ2xpZW50QXJyYXkgOiBtQ29udmVydGVkQ2xpZW50U21h
bGxBcnJheXMpCisgICAgeworICAgICAgICBjb252ZXJ0ZWRDbGllbnRBcnJheS5jbGVhcigpOwor
ICAgIH0KKworICAgIGZvciAoY29uc3QgdWludDhfdCAqJmNsaWVudFBvaW50ZXIgOiBtQ3VycmVu
dEFycmF5SW5saW5lRGF0YVBvaW50ZXJzKQorICAgIHsKKyAgICAgICAgY2xpZW50UG9pbnRlciA9
IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0RmVh
dHVyZXMoKS5hbGxvd0lubGluZUNvbnN0VmVydGV4RGF0YS5lbmFibGVkKQorICAgIHsKKyAgICAg
ICAgbUlubGluZURhdGFNYXhTaXplID0gbXRsOjprSW5saW5lQ29uc3REYXRhTWF4U2l6ZTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUlubGluZURhdGFNYXhTaXplID0gMDsKKyAg
ICB9CisKICAgICBtVmVydGV4QXJyYXlEaXJ0eSA9IHRydWU7CiB9CiAKQEAgLTMxNSwyMiArMzQz
LDI4IEBAIEFOR0xFX0lOTElORSB2b2lkIFZlcnRleEFycmF5TXRsOjpnZXRWZXJ0ZXhBdHRyaWJG
b3JtYXRBbmRBcnJheVNpemUoY29uc3Qgc2g6OlNoCiB9CiAKIC8vIHZlcnRleERlc2NDaGFuZ2Vk
IGlzIGJvdGggaW5wdXQgYW5kIG91dHB1dCwgdGhlIGlucHV0IHZhbHVlIGlmIGlzIHRydWUsIHdp
bGwgZm9yY2UgbmV3Ci0vLyBtdGw6OlZlcnRleERlc2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRl
eERlc2NPdXQuIE90aGVyd2lzZSwgaXQgaXMgb25seSByZXR1cm5lZCB3aGVuIHRoZQotLy8gdmVy
dGV4IGFycmF5IGlzIGRpcnR5CisvLyBtdGw6OlZlcnRleERlc2MgdG8gYmUgcmV0dXJuZWQgdmlh
IHZlcnRleERlc2NPdXQuIFRoaXMgdHlwaWNhbGx5IGhhcHBlbnMgd2hlbiBhY3RpdmUgc2hhZGVy
CisvLyBwcm9ncmFtIGlzIGNoYW5nZWQuCisvLyBPdGhlcndpc2UsIGl0IGlzIG9ubHkgcmV0dXJu
ZWQgd2hlbiB0aGUgdmVydGV4IGFycmF5IGlzIGRpcnR5LgogYW5nbGU6OlJlc3VsdCBWZXJ0ZXhB
cnJheU10bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqY21kRW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sICp2ZXJ0ZXhEZXNjQ2hhbmdlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtdGw6OlZlcnRleERlc2MgKnZlcnRleERlc2NPdXQpCiB7CisgICAgLy8gTk9URSho
cWxlKTogY29uc2lkZXIgb25seSB1cGRhdGluZyBkaXJ0eSBhdHRyaWJ1dGVzCiAgICAgYm9vbCBk
aXJ0eSA9IG1WZXJ0ZXhBcnJheURpcnR5IHx8ICp2ZXJ0ZXhEZXNjQ2hhbmdlZDsKIAogICAgIGlm
IChkaXJ0eSkKICAgICB7CisgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6Okdl
dEltcGwoZ2xDb250ZXh0KTsKKwogICAgICAgICBtVmVydGV4QXJyYXlEaXJ0eSA9IGZhbHNlOwor
ICAgICAgICBtRW11bGF0ZWRJbnN0YW5jZUF0dHJpYnMuY2xlYXIoKTsKIAotICAgICAgICBjb25z
dCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCku
Z2V0UHJvZ3JhbSgpLT5nZXRTdGF0ZSgpOworICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1
dGFibGUgKmV4ZWN1dGFibGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1
dGFibGUoKTsKICAgICAgICAgY29uc3QgZ2w6OkF0dHJpYnV0ZXNNYXNrICZwcm9ncmFtQWN0aXZl
QXR0cmlic01hc2sgPQotICAgICAgICAgICAgZ2xDb250ZXh0LT5nZXRTdGF0ZSgpLmdldFByb2dy
YW0oKS0+Z2V0RXhlY3V0YWJsZSgpLmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uc01hc2soKTsKKyAg
ICAgICAgICAgIGV4ZWN1dGFibGUtPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uc01hc2soKTsKKyAg
ICAgICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlID0gZ2xDb250ZXh0LT5n
ZXRTdGF0ZSgpLmdldFByb2dyYW0oKS0+Z2V0U3RhdGUoKTsKIAogICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6VmVydGV4QXR0cmlidXRlPiAmYXR0cmlicyA9IG1TdGF0ZS5nZXRWZXJ0ZXhB
dHRyaWJ1dGVzKCk7CiAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpWZXJ0ZXhCaW5kaW5n
PiAmYmluZGluZ3MgID0gbVN0YXRlLmdldFZlcnRleEJpbmRpbmdzKCk7CkBAIC0zNjAsOCArMzk0
LDcgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c2V0dXBEcmF3KGNvbnN0IGdsOjpD
b250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QmluZGluZyAm
YmluZGluZyA9IGJpbmRpbmdzW2F0dHJpYi5iaW5kaW5nSW5kZXhdOwogCiAgICAgICAgICAgICBi
b29sIGF0dHJpYkVuYWJsZWQgPSBhdHRyaWIuZW5hYmxlZDsKLSAgICAgICAgICAgIGlmIChhdHRy
aWJFbmFibGVkICYmCi0gICAgICAgICAgICAgICAgKCFtQ3VycmVudEFycmF5QnVmZmVyc1t2XSB8
fCAhbUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0tPmdldEN1cnJlbnRCdWZmZXIoKSkpCisgICAgICAg
ICAgICBpZiAoYXR0cmliRW5hYmxlZCAmJiAhbUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0gJiYgIW1D
dXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbdl0pCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgLy8gRGlzYWJsZSBpdCB0byBhdm9pZCBjcmFzaC4KICAgICAgICAgICAgICAgICBh
dHRyaWJFbmFibGVkID0gZmFsc2U7CkBAIC0zNjksMzMgKzQwMiwzMCBAQCBhbmdsZTo6UmVzdWx0
IFZlcnRleEFycmF5TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
IAogICAgICAgICAgICAgaWYgKCFhdHRyaWJFbmFibGVkKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIFVzZSBkZWZhdWx0IGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgIGRlc2Mu
YXR0cmlidXRlc1t2XS5idWZmZXJJbmRleCA9IG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0lu
ZGV4OworICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5vZmZzZXQgICAgICA9IHYg
KiBtdGw6OmtEZWZhdWx0QXR0cmlidXRlU2l6ZTsKICAgICAgICAgICAgICAgICAvLyBOZWVkIHRv
IGZpbmQgdGhlIGF0dHJpYnV0ZSBoYXZpbmcgdGhlIGV4YWN0IGJpbmRpbmcgbG9jYXRpb24gPSB2
IGluIHRoZSBwcm9ncmFtCiAgICAgICAgICAgICAgICAgLy8gaW5wdXRzIGxpc3QgdG8gcmV0cmll
dmUgaXRzIGNvcmVzcG9uZGluZyBkYXRhIHR5cGU6CiAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPiAmcHJvZ3JhbUlucHV0cyA9CiAgICAgICAgICAg
ICAgICAgICAgIHByb2dyYW1TdGF0ZS5nZXRQcm9ncmFtSW5wdXRzKCk7CiAgICAgICAgICAgICAg
ICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRlclZhcmlhYmxlPjo6Y29uc3RfaXRlcmF0b3IgYXR0cmli
SW5mb0l0ZSA9IHN0ZDo6ZmluZF9pZigKICAgICAgICAgICAgICAgICAgICAgYmVnaW4ocHJvZ3Jh
bUlucHV0cyksIGVuZChwcm9ncmFtSW5wdXRzKSwgW3ZdKGNvbnN0IHNoOjpTaGFkZXJWYXJpYWJs
ZSAmc3YpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oc3YubG9jYXRpb24pID09IHY7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN2LmxvY2F0aW9uKSA8PSB2ICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdiA8IHN0YXRpY19jYXN0PHVpbnQzMl90Pihzdi5sb2NhdGlvbikg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlZhcmlhYmxlQXR0
cmlidXRlQ291bnQoc3YudHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAg
ICAgICAgICAgaWYgKGF0dHJpYkluZm9JdGUgPT0gZW5kKHByb2dyYW1JbnB1dHMpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTW9zdCBsaWtlbHkgdGhpcyBpcyBh
cnJheSBlbGVtZW50IHdpdGggaW5kZXggPiAwLgotICAgICAgICAgICAgICAgICAgICAvLyBBbHJl
YWR5IGhhbmRsZWQgd2hlbiBlbmNvdW50ZXIgZmlyc3QgZWxlbWVudC4KLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdWlu
dDMyX3QgYXJyYXlTaXplOwotICAgICAgICAgICAgICAgIE1UTFZlcnRleEZvcm1hdCBmb3JtYXQ7
Ci0KLSAgICAgICAgICAgICAgICBnZXRWZXJ0ZXhBdHRyaWJGb3JtYXRBbmRBcnJheVNpemUoKmF0
dHJpYkluZm9JdGUsICZmb3JtYXQsICZhcnJheVNpemUpOwotCi0gICAgICAgICAgICAgICAgZm9y
ICh1aW50MzJfdCB2YUlkeCA9IHY7IHZhSWR4IDwgdiArIGFycmF5U2l6ZTsgKyt2YUlkeCkKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoYXR0cmliSW5mb0l0ZSAhPSBlbmQocHJvZ3JhbUlucHV0cykp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2w6OlZhcmlhYmxlQ29tcG9uZW50VHlwZShhdHRy
aWJJbmZvSXRlLT50eXBlKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc2MuYXR0cmlidXRlc1t2YUlkeF0uYnVmZmVySW5kZXggPSBtdGw6OmtEZWZhdWx0QXR0cmli
c0JpbmRpbmdJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgZGVzYy5hdHRyaWJ1dGVzW3ZhSWR4
XS5vZmZzZXQgICAgICA9IHZhSWR4ICogbXRsOjprRGVmYXVsdEF0dHJpYnV0ZVNpemU7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2YUlkeF0uZm9ybWF0ICAgICAgPSBmb3Jt
YXQ7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzYy5hdHRyaWJ1dGVzW3ZdLmZvcm1hdCA9IG1EZWZhdWx0SW50VmVydGV4Rm9ybWF0
Lm1ldGFsRm9ybWF0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzYy5hdHRyaWJ1dGVzW3ZdLmZvcm1hdCA9IG1EZWZhdWx0VUludFZlcnRleEZvcm1hdC5tZXRh
bEZvcm1hdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5hdHRyaWJ1dGVzW3Zd
LmZvcm1hdCA9IG1EZWZhdWx0RmxvYXRWZXJ0ZXhGb3JtYXQubWV0YWxGb3JtYXQ7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtNDE3LDE3ICs0
NDcsMzUgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c2V0dXBEcmF3KGNvbnN0IGds
OjpDb250ZXh0ICpnbENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1ti
dWZmZXJJZHhdLnN0ZXBGdW5jdGlvbiA9IE1UTFZlcnRleFN0ZXBGdW5jdGlvblBlclZlcnRleDsK
ICAgICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcFJhdGUgICAg
ID0gMTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5o
YXNCYXNlVmVydGV4SW5zdGFuY2VkRHJhdy5lbmFibGVkKQogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcEZ1bmN0aW9uID0g
TVRMVmVydGV4U3RlcEZ1bmN0aW9uUGVySW5zdGFuY2U7CiAgICAgICAgICAgICAgICAgICAgIGRl
c2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBSYXRlICAgICA9IGJpbmRpbmcuZ2V0RGl2aXNvcigp
OwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAvLyBFbXVsYXRlIGluc3RhbmNlIGF0dHJpYnV0ZQor
ICAgICAgICAgICAgICAgICAgICBtRW11bGF0ZWRJbnN0YW5jZUF0dHJpYnMucHVzaF9iYWNrKHYp
OworICAgICAgICAgICAgICAgICAgICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rp
b24gPSBNVExWZXJ0ZXhTdGVwRnVuY3Rpb25Db25zdGFudDsKKyAgICAgICAgICAgICAgICAgICAg
ZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcFJhdGUgICAgID0gMDsKKyAgICAgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgICAgICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdHJpZGUgPSBt
Q3VycmVudEFycmF5QnVmZmVyU3RyaWRlc1t2XTsKIAotICAgICAgICAgICAgICAgIGNtZEVuY29k
ZXItPnNldFZlcnRleEJ1ZmZlcihtQ3VycmVudEFycmF5QnVmZmVyc1t2XS0+Z2V0Q3VycmVudEJ1
ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZm
ZXJPZmZzZXQsIGJ1ZmZlcklkeCk7CisgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50QXJyYXlC
dWZmZXJzW3ZdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY21kRW5j
b2Rlci0+c2V0VmVydGV4QnVmZmVyKG1DdXJyZW50QXJyYXlCdWZmZXJzW3ZdLT5nZXRDdXJyZW50
QnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXJPZmZzZXQsIGJ1ZmZlcklkeCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5v
IGJ1ZmZlciBzcGVjaWZpZWQsIHVzZSB0aGUgY2xpZW50IG1lbW9yeSBkaXJlY3RseSBhcyBpbmxp
bmUgY29uc3RhbnQgZGF0YQorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobUN1cnJlbnRBcnJh
eUlubGluZURhdGFTaXplc1t2XSA8PSBtSW5saW5lRGF0YU1heFNpemUpOworICAgICAgICAgICAg
ICAgICAgICBjbWRFbmNvZGVyLT5zZXRWZXJ0ZXhCeXRlcyhtQ3VycmVudEFycmF5SW5saW5lRGF0
YVBvaW50ZXJzW3ZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW3ZdLCBidWZmZXJJZHgpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICB9ICAvLyBmb3Ig
KHYpCiAgICAgfQogCiAgICAgKnZlcnRleERlc2NDaGFuZ2VkID0gZGlydHk7CkBAIC00MzUsNiAr
NDgzLDQyIEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyhjb25zdCBn
bDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKIH0KIAordm9pZCBWZXJ0ZXhBcnJheU10bDo6ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAobXRs
OjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlSWQpCit7CisKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6VmVydGV4QXR0cmlidXRlPiAmYXR0cmlicyA9IG1TdGF0ZS5n
ZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZlcnRleEJp
bmRpbmc+ICZiaW5kaW5ncyAgPSBtU3RhdGUuZ2V0VmVydGV4QmluZGluZ3MoKTsKKworICAgIGZv
ciAodWludDMyX3QgaW5zdGFuY2VBdHRyaWJJZHggOiBtRW11bGF0ZWRJbnN0YW5jZUF0dHJpYnMp
CisgICAgeworICAgICAgICB1aW50MzJfdCBidWZmZXJJZHggICAgICAgICAgICAgICA9IG10bDo6
a1Zib0JpbmRpbmdJbmRleFN0YXJ0ICsgaW5zdGFuY2VBdHRyaWJJZHg7CisgICAgICAgIGNvbnN0
IGF1dG8gJmF0dHJpYiAgICAgICAgICAgICAgID0gYXR0cmlic1tpbnN0YW5jZUF0dHJpYklkeF07
CisgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5kaW5nICZiaW5kaW5nID0gYmluZGluZ3NbYXR0
cmliLmJpbmRpbmdJbmRleF07CisgICAgICAgIHVpbnQzMl90IG9mZnNldCA9CisgICAgICAgICAg
ICBpbnN0YW5jZUlkIC8gYmluZGluZy5nZXREaXZpc29yKCkgKiBtQ3VycmVudEFycmF5QnVmZmVy
U3RyaWRlc1tpbnN0YW5jZUF0dHJpYklkeF07CisgICAgICAgIGlmIChtQ3VycmVudEFycmF5QnVm
ZmVyc1tpbnN0YW5jZUF0dHJpYklkeF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldCAr
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbaW5zdGFu
Y2VBdHRyaWJJZHhdKTsKKworICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0VmVydGV4QnVmZmVy
KG1DdXJyZW50QXJyYXlCdWZmZXJzW2luc3RhbmNlQXR0cmliSWR4XS0+Z2V0Q3VycmVudEJ1ZmZl
cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgYnVm
ZmVySWR4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIE5vIGJ1ZmZlciBzcGVjaWZpZWQsIHVzZSB0aGUgY2xpZW50IG1lbW9yeSBkaXJlY3RseSBh
cyBpbmxpbmUgY29uc3RhbnQgZGF0YQorICAgICAgICAgICAgQVNTRVJUKG1DdXJyZW50QXJyYXlJ
bmxpbmVEYXRhU2l6ZXNbaW5zdGFuY2VBdHRyaWJJZHhdIDw9IG1JbmxpbmVEYXRhTWF4U2l6ZSk7
CisgICAgICAgICAgICBpZiAob2Zmc2V0ID4gbUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1tp
bnN0YW5jZUF0dHJpYklkeF0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbaW5z
dGFuY2VBdHRyaWJJZHhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNtZEVuY29kZXIt
PnNldFZlcnRleEJ5dGVzKG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbaW5zdGFuY2VB
dHRyaWJJZHhdICsgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1tpbnN0YW5jZUF0dHJpYklkeF0gLSBvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJJZHgpOwor
ICAgICAgICB9CisgICAgfQorfQorCiBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjp1cGRh
dGVDbGllbnRBdHRyaWJzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdFZlcnRleCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSB2ZXJ0ZXhPckluZGV4Q291bnQsCkBAIC00NjMsMTAgKzU0Nyw3IEBAIGFuZ2xlOjpSZXN1bHQg
VmVydGV4QXJyYXlNdGw6OnVwZGF0ZUNsaWVudEF0dHJpYnMoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCiAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5kaW5nICZiaW5kaW5nICA9IGJpbmRp
bmdzW2F0dHJpYi5iaW5kaW5nSW5kZXhdOwogICAgICAgICBBU1NFUlQoYXR0cmliLmVuYWJsZWQg
JiYgYmluZGluZy5nZXRCdWZmZXIoKS5nZXQoKSA9PSBudWxscHRyKTsKIAotICAgICAgICBHTHVp
bnQgc3RyaWRlOwotICAgICAgICBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0
ID0KLSAgICAgICAgICAgIEdldFZlcnRleENvbnZlcnNpb25Gb3JtYXQoY29udGV4dE10bCwgYXR0
cmliLmZvcm1hdC0+aWQsICZzdHJpZGUpOwotCisgICAgICAgIC8vIFNvdXJjZSBjbGllbnQgbWVt
b3J5IHBvaW50ZXIKICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCAqPihhdHRyaWIucG9pbnRlcik7CiAgICAgICAgIEFTU0VSVChzcmMpOwogCkBA
IC00ODQsMjIgKzU2NSw3NiBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjp1cGRhdGVD
bGllbnRBdHRyaWJzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgc3Rh
cnRFbGVtZW50ID0gMDsKICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IFVuc2lnbmVkQ2VpbERp
dmlkZShpbnN0YW5jZUNvdW50LCBiaW5kaW5nLmdldERpdmlzb3IoKSk7CiAgICAgICAgIH0KLSAg
ICAgICAgLy8gQWxsb2NhdGUgc3BhY2UgZm9yIHN0YXJ0RWxlbWVudCArIGVsZW1lbnRDb3VudCBz
byBpbmRleGluZyB3aWxsIHdvcmsuICBJZiB3ZSBkb24ndAotICAgICAgICAvLyBzdGFydCBhdCB6
ZXJvIGFsbCB0aGUgaW5kaWNlcyB3aWxsIGJlIG9mZi4KLSAgICAgICAgLy8gT25seSBlbGVtZW50
Q291bnQgdmVydGljZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSB1cGNvbWluZyBkcmF3IHNvIHRoYXQg
aXMgYWxsIHdlIGNvcHkuCi0gICAgICAgIHNpemVfdCBieXRlc1RvQWxsb2NhdGUgPSAoc3RhcnRF
bGVtZW50ICsgZWxlbWVudENvdW50KSAqIHN0cmlkZTsKLSAgICAgICAgc3JjICs9IHN0YXJ0RWxl
bWVudCAqIGJpbmRpbmcuZ2V0U3RyaWRlKCk7Ci0gICAgICAgIHNpemVfdCBkZXN0T2Zmc2V0ID0g
c3RhcnRFbGVtZW50ICogc3RyaWRlOwotCi0gICAgICAgIG1EeW5hbWljVmVydGV4RGF0YS51cGRh
dGVBbGlnbm1lbnQoY29udGV4dE10bCwgdmVydGV4Rm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCku
cGl4ZWxCeXRlcyk7Ci0gICAgICAgIEFOR0xFX1RSWShTdHJlYW1WZXJ0ZXhEYXRhKAotICAgICAg
ICAgICAgY29udGV4dE10bCwgJm1EeW5hbWljVmVydGV4RGF0YSwgc3JjLCBieXRlc1RvQWxsb2Nh
dGUsIGRlc3RPZmZzZXQsIGVsZW1lbnRDb3VudCwKLSAgICAgICAgICAgIGJpbmRpbmcuZ2V0U3Ry
aWRlKCksIHZlcnRleEZvcm1hdC52ZXJ0ZXhMb2FkRnVuY3Rpb24sCi0gICAgICAgICAgICAmbUNv
bnZlcnRlZEFycmF5QnVmZmVySG9sZGVyc1thdHRyaWJJbmRleF0sICZtQ3VycmVudEFycmF5QnVm
ZmVyT2Zmc2V0c1thdHRyaWJJbmRleF0pKTsKKyAgICAgICAgc2l6ZV90IGJ5dGVzSW50ZW5kZWRU
b1VzZSA9IChzdGFydEVsZW1lbnQgKyBlbGVtZW50Q291bnQpICogYmluZGluZy5nZXRTdHJpZGUo
KTsKIAotICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgPSAm
bUNvbnZlcnRlZEFycmF5QnVmZmVySG9sZGVyc1thdHRyaWJJbmRleF07Ci0gICAgICAgIG1DdXJy
ZW50QXJyYXlCdWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSA9ICZ2ZXJ0ZXhGb3JtYXQ7Ci0gICAg
ICAgIG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzW2F0dHJpYkluZGV4XSA9IHN0cmlkZTsKKyAg
ICAgICAgY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJmZvcm1hdCA9IGNvbnRleHRNdGwtPmdldFZl
cnRleEZvcm1hdChhdHRyaWIuZm9ybWF0LT5pZCwgZmFsc2UpOworICAgICAgICBib29sIG5lZWRT
dHJlYW1pbmcgICAgICAgICAgICAgID0gZm9ybWF0LmFjdHVhbEZvcm1hdElkICE9IGZvcm1hdC5p
bnRlbmRlZEZvcm1hdElkIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kaW5n
LmdldFN0cmlkZSgpICUgbXRsOjprVmVydGV4QXR0cmliQnVmZmVyU3RyaWRlQWxpZ25tZW50KSAh
PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kaW5nLmdldFN0cmlkZSgp
IDwgZm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcykgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnl0ZXNJbnRlbmRlZFRvVXNlID4gbUlubGluZURhdGFNYXhTaXpl
OworCisgICAgICAgIGlmICghbmVlZFN0cmVhbWluZykKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gRGF0YSB3aWxsIGJlIHVwbG9hZGVkIGRpcmVjdGx5IGFzIGlubGluZSBjb25zdGFudCBkYXRh
CisgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgICAg
ICA9IG51bGxwdHI7CisgICAgICAgICAgICBtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJz
W2F0dHJpYkluZGV4XSA9IHNyYzsKKyAgICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRh
U2l6ZXNbYXR0cmliSW5kZXhdICAgID0gYnl0ZXNJbnRlbmRlZFRvVXNlOworICAgICAgICAgICAg
bUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdICAgICAgPSAwOworICAgICAg
ICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlckZvcm1hdHNbYXR0cmliSW5kZXhdICAgICAgPSAmZm9y
bWF0OworICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNbYXR0cmliSW5kZXhd
ICAgICAgPSBiaW5kaW5nLmdldFN0cmlkZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgR0x1aW50IGNvbnZlcnRlZFN0cmlkZTsKKyAgICAgICAgICAg
IC8vIE5lZWQgdG8gc3RyZWFtIHRoZSBjbGllbnQgdmVydGV4IGRhdGEgdG8gYSBidWZmZXIuCisg
ICAgICAgICAgICBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmc3RyZWFtRm9ybWF0ID0KKyAgICAg
ICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9uRm9ybWF0KGNvbnRleHRNdGwsIGF0dHJpYi5m
b3JtYXQtPmlkLCAmY29udmVydGVkU3RyaWRlKTsKKworICAgICAgICAgICAgLy8gQWxsb2NhdGUg
c3BhY2UgZm9yIHN0YXJ0RWxlbWVudCArIGVsZW1lbnRDb3VudCBzbyBpbmRleGluZyB3aWxsIHdv
cmsuICBJZiB3ZSBkb24ndAorICAgICAgICAgICAgLy8gc3RhcnQgYXQgemVybyBhbGwgdGhlIGlu
ZGljZXMgd2lsbCBiZSBvZmYuCisgICAgICAgICAgICAvLyBPbmx5IGVsZW1lbnRDb3VudCB2ZXJ0
aWNlcyB3aWxsIGJlIHVzZWQgYnkgdGhlIHVwY29taW5nIGRyYXcgc28gdGhhdCBpcyBhbGwgd2Ug
Y29weS4KKyAgICAgICAgICAgIHNpemVfdCBieXRlc1RvQWxsb2NhdGUgPSAoc3RhcnRFbGVtZW50
ICsgZWxlbWVudENvdW50KSAqIGNvbnZlcnRlZFN0cmlkZTsKKyAgICAgICAgICAgIHNyYyArPSBz
dGFydEVsZW1lbnQgKiBiaW5kaW5nLmdldFN0cmlkZSgpOworICAgICAgICAgICAgc2l6ZV90IGRl
c3RPZmZzZXQgPSBzdGFydEVsZW1lbnQgKiBjb252ZXJ0ZWRTdHJpZGU7CisKKyAgICAgICAgICAg
IG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSA9ICZzdHJlYW1Gb3JtYXQ7
CisgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyU3RyaWRlc1thdHRyaWJJbmRleF0gPSBj
b252ZXJ0ZWRTdHJpZGU7CisKKyAgICAgICAgICAgIGlmIChieXRlc1RvQWxsb2NhdGUgPD0gbUlu
bGluZURhdGFNYXhTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSBkYXRhIGlzIHNtYWxsIGVub3VnaCwgdXNlIGhvc3QgbWVtb3J5IGluc3RlYWQgb2YgY3JlYXRp
bmcgR1BVIGJ1ZmZlci4gVG8KKyAgICAgICAgICAgICAgICAvLyBhdm9pZCBzeW5jaHJvbml6aW5n
IGFjY2VzcyB0byBHUFUgYnVmZmVyIHRoYXQgaXMgc3RpbGwgaW4gdXNlLgorICAgICAgICAgICAg
ICAgIGFuZ2xlOjpNZW1vcnlCdWZmZXIgJmNvbnZlcnRlZENsaWVudEFycmF5ID0KKyAgICAgICAg
ICAgICAgICAgICAgbUNvbnZlcnRlZENsaWVudFNtYWxsQXJyYXlzW2F0dHJpYkluZGV4XTsKKyAg
ICAgICAgICAgICAgICBpZiAoYnl0ZXNUb0FsbG9jYXRlID4gY29udmVydGVkQ2xpZW50QXJyYXku
c2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQU5HTEVfQ0hF
Q0tfR0xfQUxMT0MoY29udGV4dE10bCwgY29udmVydGVkQ2xpZW50QXJyYXkucmVzaXplKGJ5dGVz
VG9BbGxvY2F0ZSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEFTU0VS
VChzdHJlYW1Gb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICBzdHJl
YW1Gb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uKHNyYywgYmluZGluZy5nZXRTdHJpZGUoKSwgZWxl
bWVudENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udmVydGVkQ2xpZW50QXJyYXkuZGF0YSgpICsgZGVzdE9mZnNldCk7CisKKyAgICAgICAg
ICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgICAgICA9IG51
bGxwdHI7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFQb2ludGVyc1th
dHRyaWJJbmRleF0gPSBjb252ZXJ0ZWRDbGllbnRBcnJheS5kYXRhKCk7CisgICAgICAgICAgICAg
ICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFTaXplc1thdHRyaWJJbmRleF0gICAgPSBieXRlc1Rv
QWxsb2NhdGU7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0
cmliSW5kZXhdICAgICAgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFN0cmVhbSB0aGUgY2xpZW50IGRhdGEgdG8g
YSBHUFUgYnVmZmVyLiBTeW5jaHJvbml6YXRpb24gbWlnaHQgaGFwcGVuIGlmIGJ1ZmZlciBpcwor
ICAgICAgICAgICAgICAgIC8vIGluIHVzZS4KKyAgICAgICAgICAgICAgICBtRHluYW1pY1ZlcnRl
eERhdGEudXBkYXRlQWxpZ25tZW50KGNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1Gb3JtYXQuYWN0dWFsQW5nbGVGb3Jt
YXQoKS5waXhlbEJ5dGVzKTsKKyAgICAgICAgICAgICAgICBBTkdMRV9UUlkoU3RyZWFtVmVydGV4
RGF0YShjb250ZXh0TXRsLCAmbUR5bmFtaWNWZXJ0ZXhEYXRhLCBzcmMsIGJ5dGVzVG9BbGxvY2F0
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0T2Zmc2V0
LCBlbGVtZW50Q291bnQsIGJpbmRpbmcuZ2V0U3RyaWRlKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtRm9ybWF0LnZlcnRleExvYWRGdW5jdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbUNvbnZlcnRlZEFy
cmF5QnVmZmVySG9sZGVyc1thdHRyaWJJbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJm1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4
XSkpOworCisgICAgICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlcnNbYXR0cmliSW5kZXhd
ID0gJm1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0cmliSW5kZXhdOworICAgICAgICAg
ICAgfQorICAgICAgICB9ICAvLyBpZiAobmVlZFN0cmVhbWluZykKICAgICB9CiAKICAgICBtVmVy
dGV4QXJyYXlEaXJ0eSA9IHRydWU7CkBAIC01MjYsNyArNjYxLDcgQEAgYW5nbGU6OlJlc3VsdCBW
ZXJ0ZXhBcnJheU10bDo6c3luY0RpcnR5QXR0cmliKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRl
eHQsCiAgICAgICAgICAgICBib29sIG5lZWRDb252ZXJzaW9uID0KICAgICAgICAgICAgICAgICBm
b3JtYXQuYWN0dWFsRm9ybWF0SWQgIT0gZm9ybWF0LmludGVuZGVkRm9ybWF0SWQgfHwKICAgICAg
ICAgICAgICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIGZvcm1hdC5hY3R1YWxBbmdsZUZvcm1h
dCgpLnBpeGVsQnl0ZXMpICE9IDAgfHwKLSAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRPZmZz
ZXQoKSAlIG10bDo6a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMCB8fAor
ICAgICAgICAgICAgICAgIChiaW5kaW5nLmdldE9mZnNldCgpICUgNCkgIT0gMCB8fAogICAgICAg
ICAgICAgICAgIChiaW5kaW5nLmdldFN0cmlkZSgpIDwgZm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0
KCkucGl4ZWxCeXRlcykgfHwKICAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRTdHJpZGUoKSAl
IG10bDo6a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMDsKIApAQCAtNTYz
LDE5ICs2OTgsMjEgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c3luY0RpcnR5QXR0
cmliKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCiAKIGFuZ2xlOjpSZXN1bHQgVmVydGV4
QXJyYXlNdGw6OmdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50
c1R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmlkeEJ1ZmZlck91dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4
QnVmZmVyT2Zmc2V0T3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgKmluZGV4VHlwZU91dCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlICppbmRl
eFR5cGVPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgKmluZGV4QnVmZmVyQ291bnRPdXQpCiB7CiAgICAgY29uc3QgZ2w6OkJ1ZmZlciAqZ2xF
bGVtZW50QXJyYXlCdWZmZXIgPSBnZXRTdGF0ZSgpLmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwog
CiAgICAgc2l6ZV90IGNvbnZlcnRlZE9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Pihp
bmRpY2VzKTsKICAgICBpZiAoIWdsRWxlbWVudEFycmF5QnVmZmVyKQogICAgIHsKLSAgICAgICAg
QU5HTEVfVFJZKHN0cmVhbUluZGV4QnVmZmVyRnJvbUNsaWVudChjb250ZXh0LCB0eXBlLCBjb3Vu
dCwgaW5kaWNlcywgaWR4QnVmZmVyT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCkpOworICAgICAgICBBTkdMRV9UUlko
c3RyZWFtSW5kZXhCdWZmZXJGcm9tQ2xpZW50KGNvbnRleHQsIHR5cGUsIG1vZGUsIGNvdW50LCBp
bmRpY2VzLCBpZHhCdWZmZXJPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0LCBpbmRleEJ1ZmZlckNvdW50T3V0KSk7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7CkBAIC01ODMsOCArNzIwLDggQEAgYW5nbGU6OlJlc3VsdCBW
ZXJ0ZXhBcnJheU10bDo6Z2V0SW5kZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29udmVydGVkT2Zmc2V0ICUgbXRsOjpr
SW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQpICE9IDA7CiAgICAgICAgIGlmIChuZWVkQ29udmVy
c2lvbikKICAgICAgICAgewotICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnZlcnRJbmRleEJ1ZmZl
cihjb250ZXh0LCB0eXBlLCBjb252ZXJ0ZWRPZmZzZXQsIGlkeEJ1ZmZlck91dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0KSk7Cisg
ICAgICAgICAgICBBTkdMRV9UUlkoY29udmVydEluZGV4QnVmZmVyKGNvbnRleHQsIHR5cGUsIG1v
ZGUsIGNvbnZlcnRlZE9mZnNldCwgaWR4QnVmZmVyT3V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZHhCdWZmZXJPZmZzZXRPdXQsIGluZGV4QnVmZmVyQ291bnRP
dXQpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKQEAgLTU5Miw2ICs3Mjks
NyBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpnZXRJbmRleEJ1ZmZlcihjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgIEJ1ZmZlck10bCAqYnVmZmVyTXRsID0g
bXRsOjpHZXRJbXBsKGdsRWxlbWVudEFycmF5QnVmZmVyKTsKICAgICAgICAgICAgICppZHhCdWZm
ZXJPdXQgICAgICAgID0gYnVmZmVyTXRsLT5nZXRDdXJyZW50QnVmZmVyKCk7CiAgICAgICAgICAg
ICAqaWR4QnVmZmVyT2Zmc2V0T3V0ICA9IGNvbnZlcnRlZE9mZnNldDsKKyAgICAgICAgICAgICpp
bmRleEJ1ZmZlckNvdW50T3V0ID0gY291bnQ7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYwNyw5
ICs3NDUsMTEgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Z2V0SW5kZXhCdWZmZXIo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAKIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlN
dGw6OmNvbnZlcnRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxl
bWVudHNUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYgKmlk
eEJ1ZmZlck91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmlu
ZGV4QnVmZmVyQ291bnRPdXQpCiB7CiAgICAgc2l6ZV90IG9mZnNldE1vZHVsbyA9IG9mZnNldCAl
IG10bDo6a0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50OwogICAgIEFTU0VSVChvZmZzZXRNb2R1
bG8gIT0gMCB8fCBpbmRleFR5cGUgPT0gZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0
ZSk7CkBAIC02MzgsMTUgKzc3OCwxNSBAQCBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpj
b252ZXJ0SW5kZXhCdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKICAgICB9CiAK
ICAgICBzaXplX3QgaW5kZXhDb3VudCA9IEdldEluZGV4Q291bnQoaWR4QnVmZmVyLCBvZmZzZXRN
b2R1bG8sIGluZGV4VHlwZSk7Ci0KLSAgICBpZiAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+
Z2V0RmVhdHVyZXMoKS5oYXNDaGVhcFJlbmRlclBhc3MuZW5hYmxlZCAmJgotICAgICAgICBjb250
ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKQorICAgIGlmICgoIWNvbnRleHRNdGwt
PmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5icmVha1JlbmRlclBhc3NJc0NoZWFwLmVuYWJs
ZWQgJiYKKyAgICAgICAgIGNvbnRleHRNdGwtPmdldFJlbmRlckNvbW1hbmRFbmNvZGVyKCkpKQog
ICAgIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHVzZSBHUFUgdG8gY29udmVydCB3aGVuIHdl
IGFyZSBpbiBhIG1pZGRsZSBvZiBhIHJlbmRlciBwYXNzLgogICAgICAgICBBTkdMRV9UUlkoU3Ry
ZWFtSW5kZXhEYXRhKGNvbnRleHRNdGwsICZjb252ZXJzaW9uLT5kYXRhLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlci0+Z2V0Q2xpZW50U2hhZG93Q29weURhdGEo
Y29udGV4dE10bCkgKyBvZmZzZXRNb2R1bG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhUeXBlLCBpbmRleENvdW50LCBnbFN0YXRlLmlzUHJpbWl0aXZlUmVzdGFydEVu
YWJsZWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udmVyc2lvbi0+
Y29udmVydGVkQnVmZmVyLCAmY29udmVyc2lvbi0+Y29udmVydGVkT2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUeXBlLCBpbmRleENvdW50LCBtb2RlLCBn
bFN0YXRlLmlzUHJpbWl0aXZlUmVzdGFydEVuYWJsZWQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmY29udmVyc2lvbi0+Y29udmVydGVkQnVmZmVyLCAmY29udmVyc2lvbi0+
Y29udmVydGVkT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
QnVmZmVyQ291bnRPdXQpKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTY5NSwxOCArODM1
LDIwIEBAIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJyYXlNdGw6OmNvbnZlcnRJbmRleEJ1ZmZlckdQ
VShjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0CiAKIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJy
YXlNdGw6OnN0cmVhbUluZGV4QnVmZmVyRnJvbUNsaWVudChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1v
ZGUgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgaW5kZXhDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpzb3VyY2VQb2ludGVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZz
ZXRPdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJD
b3VudE91dCkKIHsKICAgICBBU1NFUlQoZ2V0U3RhdGUoKS5nZXRFbGVtZW50QXJyYXlCdWZmZXIo
KSA9PSBudWxscHRyKTsKICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBs
KGNvbnRleHQpOwogCiAgICAgYXV0byBzcmNEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhf
dCAqPihzb3VyY2VQb2ludGVyKTsKLSAgICBBTkdMRV9UUlkoU3RyZWFtSW5kZXhEYXRhKGNvbnRl
eHRNdGwsICZtRHluYW1pY0luZGV4RGF0YSwgc3JjRGF0YSwgaW5kZXhUeXBlLCBpbmRleENvdW50
LAorICAgIEFOR0xFX1RSWShTdHJlYW1JbmRleERhdGEoY29udGV4dE10bCwgJm1EeW5hbWljSW5k
ZXhEYXRhLCBzcmNEYXRhLCBpbmRleFR5cGUsIGluZGV4Q291bnQsIG1vZGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRTdGF0ZSgpLmlzUHJpbWl0aXZlUmVzdGFy
dEVuYWJsZWQoKSwgaWR4QnVmZmVyT3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWR4QnVmZmVyT2Zmc2V0T3V0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHhC
dWZmZXJPZmZzZXRPdXQsIGlkeEJ1ZmZlckNvdW50T3V0KSk7CiAKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC03NDQsNyArODg2LDYgQEAgYW5nbGU6OlJlc3VsdCBW
ZXJ0ZXhBcnJheU10bDo6Y29udmVydFZlcnRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xD
b250ZXh0LAogICAgIC8vIEhhcyB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyIGhhcyBjaGFuZ2Vk
IHNpbmNlIGxhc3QgY29udmVyc2lvbj8KICAgICBpZiAoIWNvbnZlcnNpb24tPmRpcnR5KQogICAg
IHsKLSAgICAgICAgLy8gQnVmZmVyJ3MgZGF0YSBoYXNuJ3QgYmVlbiBjaGFuZ2VkLiBSZS11c2Ug
bGFzdCBjb252ZXJ0ZWQgcmVzdWx0cwogICAgICAgICBtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xk
ZXJzW2F0dHJpYkluZGV4XS5zZXQoY29udmVyc2lvbi0+Y29udmVydGVkQnVmZmVyKTsKICAgICAg
ICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdID0gY29udmVyc2lvbi0+
Y29udmVydGVkT2Zmc2V0OwogCkBAIC03NjEsNyArOTAyLDcgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0
ZXhBcnJheU10bDo6Y29udmVydFZlcnRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAogICAgIGJvb2wgY2FuRXhwYW5kQ29tcG9uZW50c09uR1BVID0gY29udmVydGVkRm9ybWF0
LmFjdHVhbFNhbWVHTFR5cGU7CiAKICAgICBpZiAoY29udGV4dE10bC0+Z2V0UmVuZGVyQ29tbWFu
ZEVuY29kZXIoKSAmJgotICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0
dXJlcygpLmhhc0NoZWFwUmVuZGVyUGFzcy5lbmFibGVkICYmCisgICAgICAgICFjb250ZXh0TXRs
LT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQYXNzSXNDaGVhcC5lbmFi
bGVkICYmCiAgICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCku
aGFzRXhwbGljaXRNZW1CYXJyaWVyLmVuYWJsZWQpCiAgICAgewogICAgICAgICAvLyBDYW5ub3Qg
dXNlIEdQVSB0byBjb252ZXJ0IHdoZW4gd2UgYXJlIGluIGEgbWlkZGxlIG9mIGEgcmVuZGVyIHBh
c3MuCkBAIC03OTIsNiArOTMzLDkgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Y29u
dmVydFZlcnRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgIGNvbnZl
cnNpb24tPmNvbnZlcnRlZEJ1ZmZlciA9IG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnNbYXR0
cmliSW5kZXhdLmdldEN1cnJlbnRCdWZmZXIoKTsKICAgICBjb252ZXJzaW9uLT5jb252ZXJ0ZWRP
ZmZzZXQgPSBtQ3VycmVudEFycmF5QnVmZmVyT2Zmc2V0c1thdHRyaWJJbmRleF07CiAKKyAgICBB
U1NFUlQoY29udmVyc2lvbi0+ZGlydHkpOworICAgIGNvbnZlcnNpb24tPmRpcnR5ID0gZmFsc2U7
CisKICNpZm5kZWYgTkRFQlVHCiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICB7CkBAIC04
MDEsOSArOTQ1LDYgQEAgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6Y29udmVydFZlcnRl
eEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAogICAgIH0KICNlbmRpZgogCi0g
ICAgQVNTRVJUKGNvbnZlcnNpb24tPmRpcnR5KTsKLSAgICBjb252ZXJzaW9uLT5kaXJ0eSA9IGZh
bHNlOwotCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
ZG9jL0FQUExFX2NsaXBfZGlzdGFuY2UubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZG9jL0FQUExFX2NsaXBfZGlzdGFuY2UubWQKaW5kZXgg
ZmEwNzNhZTYyM2Y5YzEyZTc2MTkyMGM1Y2M4MGFkZGNlYzYzNWVkMi4uMTNhZmRjMzRkYTFkYWI3
ZjAzN2QwOGE1ODkwODVlOGE1YmE4NTIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlwX2Rpc3RhbmNl
Lm1kCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9kb2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZApAQCAtNiw2ICs2LDMxIEBAIGxldmVsIHNp
ZGUuIFdyaXRpbmcgdG8gYGdsX0NsaXBEaXN0YW5jZVtpXWAgaW4gc2hhZGVyIHdpbGwgYmUgaWdu
b3JlZCBpZiBpdCBpcyBkCiBkb2Vzbid0IGhhdmUgYW55IGVxdWl2YWxlbnQgQVBJIHRvIGRpc2Fi
bGUvZW5hYmxlIHRoZSB3cml0aW5nLCB0aG91Z2ggd3JpdGluZyB0byBhIGBjbGlwX2Rpc3RhbmNl
YAogdmFyaWFibGUgYXV0b21hdGljYWxseSBlbmFibGVzIGl0LgogCi1UbyBlbXVsYXRlIHRoaXMg
ZW5hYmxpbmcvZGlzYWJsaW5nIEFQSSwgdGhlIE1ldGFsIGJhY2stZW5kIHVzZXMgYSBzaW1pbGFy
IGltcGxlbWVudGF0aW9uIGFzIHdoYXQKLVtWdWxrYW4gYmFjay1lbmQgZG9lc10oLi4vLi4vdnVs
a2FuL2RvYy9BUFBMRV9jbGlwX2Rpc3RhbmNlLm1kKS4gUGxlYXNlIHJlZmVyIHRvIHRoYXQgZG9j
dW1lbnQgZm9yCi1tb3JlIGRldGFpbHMuCitUbyBpbXBsZW1lbnQgdGhpcyBlbmFibGluZy9kaXNh
YmxpbmcgQVBJIGluIE1ldGFsIGJhY2stZW5kOgorCistIFRoZSBzaGFkZXIgY29tcGlsZXIgd2ls
bCB0cmFuc2xhdGUgZWFjaCBgZ2xfQ2xpcERpc3RhbmNlW2ldYCBhc3NpZ25tZW50IHRvIGFuIGFz
c2lnbm1lbnQgdG8KKyAgYEFOR0xFQ2xpcERpc3RhbmNlW2ldYCB2YXJpYWJsZS4KKy0gQSBzcGVj
aWFsIGRyaXZlciB1bmlmb3JtIHZhcmlhYmxlIGBjbGlwRGlzdGFuY2VzRW5hYmxlZGAgd2lsbCBj
b250YWluIG9uZSBiaXQgZmxhZyBmb3IgZWFjaAorICBlbmFibGVkIGBnbF9DbGlwRGlzdGFuY2Vb
aV1gLiBUaGlzIHZhcmlhYmxlIHN1cHBvcnRzIHVwIHRvIDMyIGBnbF9DbGlwRGlzdGFuY2VgIGlu
ZGljZXMuCistIEF0IHRoZSBlbmQgb2YgdmVydGV4IHNoYWRlciwgdGhlIGVuYWJsZWQgYGdsX0Ns
aXBEaXN0YW5jZVtpXWAgd2lsbCBiZSBhc3NpZ25lZCB0aGUgcmVzcGVjdGl2ZQorICB2YWx1ZSBm
cm9tIGBBTkdMRUNsaXBEaXN0YW5jZVtpXWAuIE9uIHRoZSBvdGhlciBoYW5kLCB0aG9zZSBkaXNh
YmxlZCBlbGVtZW50cyB3aWxsIGJlIGFzc2lnbmVkCisgIHplcm8gdmFsdWUuIFRoaXMgc3RlcCBp
cyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBjb2RlOgorICAgIGBgYAorICAgIGZvciAoaW50
IGluZGV4IDogYXJyYXlsZW5ndGgoZ2xfQ2xpcERpc3RhbmNlKSkKKyAgICB7CisgICAgICAgIGlm
IChBTkdMRVVuaWZvcm1zLmNsaXBEaXN0YW5jZXNFbmFibGVkICYgKDB4MSA8PCBpbmRleCkpCisg
ICAgICAgICAgICBnbF9DbGlwRGlzdGFuY2VbaW5kZXhdID0gQU5HTEVDbGlwRGlzdGFuY2VbaW5k
ZXhdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnbF9DbGlwRGlzdGFuY2VbaW5kZXhdID0g
MDsKKyAgICB9CisgICAgYGBgCistIFNvbWUgbWlub3Igb3B0aW1pemF0aW9uczoKKyAgICAtIE9u
bHkgdGhvc2UgaW5kaWNlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGluIHRoZSBvcmlnaW5hbCBjb2Rl
IHdpbGwgYmUgdXNlZCBpbiBpZiBlbHNlIGJsb2NrCisgICAgICBhYm92ZS4KKyAgICAtIFRob3Nl
IGVsZW1lbnRzIHdob3NlIGluZGV4IG5vdCByZWZlcmVuY2VkIGluIHRoZSBvcmlnaW5hbCBjb2Rl
IHdpbGwgYmUgemVyb2lzZWQgaW5zdGVhZC4KKyAgICAtIElmIHRoZSBvcmlnaW5hbCBjb2RlIG9u
bHkgdXNlcyB1cCB0byBhbiBpbmRleCA8IGBnbF9NYXhDbGlwRGlzdGFuY2VzYCwgdGhlbgorICAg
ICAgdGhlIGxvb3Agd2lsbCBoYXZlIGF0IG1vc3QgYGluZGV4KzFgIGl0ZXJhdGlvbnMuIElmIHRo
ZXJlIGlzIGF0IGxlYXN0IG9uZSBpbmRleCBub3QgYmVpbmcKKyAgICAgIGludGVncmFsIGNvbnN0
YW50IHZhbHVlIGtub3duIGF0IGNvbXBpbGUgdGltZSB0aGVuIGRlY2xhcmVkIHNpemUgb2YgYGds
X0NsaXBEaXN0YW5jZWAKKyAgICAgIHdpbGwgYmUgdGhlIGxvb3Agc2l6ZS4KKyAgICAtIEZpbmFs
bHksIGlmIHRoZSBvcmlnaW5hbCBjb2RlIGRvZXNuJ3QgdXNlIGBnbF9DbGlwRGlzdGFuY2VgLCB0
aGVuIGFsbCB0aGUgc3RlcHMgYWJvdmUgd2lsbCBiZQorICAgICAgb21pdHRlZC4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9m
b3JtYXRfdGFibGUucHkKaW5kZXggM2NlMTQyZTU2YzZmNjJhMDkwNDhjNTljYmZhZTlkNGNmOTk3
NzNhMy4uNmVhYjQwOThlM2FmYjA5M2QzMDM0ZjIzODZkZDBmZGJlOTk4YmM4MyAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2dl
bl9tdGxfZm9ybWF0X3RhYmxlLnB5CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5fbXRsX2Zvcm1hdF90YWJsZS5weQpAQCAtNDgsNyAr
NDgsNiBAQCBuYW1lc3BhY2UgbXRsCiB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRs
ICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiB7ewogICAgIHRo
aXMtPmludGVuZGVkRm9ybWF0SWQgPSBpbnRlbmRlZEZvcm1hdElkXzsKLQogICAgIGlkPE1UTERl
dmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOwogCiAgICAgLy8g
QWN0dWFsIGNvbnZlcnNpb24KQEAgLTEwOSw2ICsxMDgsMjMgQEAgaW1hZ2VfZm9ybWF0X2Fzc2ln
bl90ZW1wbGF0ZTIgPSAiIiIKICAgICAgICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gPSB7
aW5pdF9mdW5jdGlvbl9mYWxsYmFja307CiAgICAgICAgICAgICB9fQogIiIiCisjRDE2IGlzIGZ1
bGx5IHN1cHBvcnRlZCBvbiAgQXBwbGUzKy4gSG93ZXZlciwgb24KKyNwcmV2aW91cyAgdmVyc2lv
bnMgb2YgQXBwbGUgaGFyZHdhcmUsIHNvbWUgb3BlcmF0aW9ucyBjYW4gY2F1c2UKKyN1bmRlZmlu
ZWQgYmVoYXZpb3IuCitpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMyA9ICIiIgorICAgICAg
ICAgICAgaWYgKFttZXRhbERldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTNd
KQorICAgICAgICAgICAge3sKKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCA9IHtt
dGxfZm9ybWF0fTsKKyAgICAgICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xl
OjpGb3JtYXRJRDo6e2FjdHVhbF9hbmdsZV9mb3JtYXR9OworICAgICAgICAgICAgICAgIHRoaXMt
PmluaXRGdW5jdGlvbiA9IHtpbml0X2Z1bmN0aW9ufTsKKyAgICAgICAgICAgIH19CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7eworICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9y
bWF0ID0ge210bF9mb3JtYXRfZmFsbGJhY2t9OworICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVh
bEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjp7YWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFj
a307CisgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2luaXRfZnVuY3Rpb25f
ZmFsbGJhY2t9OworICAgICAgICAgICAgfX0KKyIiIgogCiBjYXNlX2ltYWdlX2Zvcm1hdF90ZW1w
bGF0ZTEgPSAiIiIgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjp7YW5nbGVfZm9ybWF0fToK
ICAgICAgICAgICAgIHtpbWFnZV9mb3JtYXRfYXNzaWdufQpAQCAtMjEzLDYgKzIyOSw4IEBAIGRl
ZiBnZXRfdmVydGV4X2NvcHlfZnVuY3Rpb25fYW5kX2RlZmF1bHRfYWxwaGEoc3JjX2Zvcm1hdCwg
ZHN0X2Zvcm1hdCk6CiAKIAogIyBHZW5lcmF0ZSBmb3JtYXQgY29udmVyc2lvbiBzd2l0Y2ggY2Fz
ZSAoZ2VuZXJpYyBjYXNlKQorCisKIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9jYXNlKGFuZ2xl
X2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19tdGxfbWFwLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduX2dlbl9mdW5jKToKICAgICBpZiBpc2lu
c3RhbmNlKGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgZGljdCk6CkBAIC0yNTUsNiArMjczLDgg
QEAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5n
bGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX20KIAogCiAjIEdlbmVyYXRlIGZvcm1hdCBjb252ZXJz
aW9uIHN3aXRjaCBjYXNlIChzaW1wbGUgY2FzZSkKKworCiBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0
Y2hfc2ltcGxlX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFu
Z2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlX3Rv
X210bF9tYXApOgogCkBAIC0yNzAsNiArMjkwLDggQEAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNo
X3NpbXBsZV9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmcK
IAogCiAjIEdlbmVyYXRlIGZvcm1hdCBjb252ZXJzaW9uIHN3aXRjaCBjYXNlIChNYWMgY2FzZSkK
KworCiBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfbWFjX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1
YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFuZ2xlX3RvX210bF9tYXAsIG1hY19mYWxsYmFja3MpOgogICAgIGdsX2Zv
cm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1hdF0KQEAgLTMwMSwxMSArMzIzLDQzIEBAIGRl
ZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmds
ZV9mb3JtYXRfaW5mbywgYW5nbGVfCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2VuX2Zvcm1hdF9hc3NpZ25fY29kZSkKIAogCitkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hf
aW9zX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3Rv
X2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlX3RvX210bF9tYXAs
IGlvc19mYWxsYmFja3MpOgorICAgIGdsX2Zvcm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1h
dF0KKworICAgIGRlZiBnZW5fZm9ybWF0X2Fzc2lnbl9jb2RlKGFjdHVhbF9hbmdsZV9mb3JtYXQs
IGFuZ2xlX3RvX210bF9tYXApOgorICAgICAgICBpZiBhY3R1YWxfYW5nbGVfZm9ybWF0IGluIGlv
c19mYWxsYmFja3M6CisgICAgICAgICAgICAjIFRoaXMgZm9ybWF0IChEZXB0aDE2VW5pZm9ybSkg
cmVxdWlyZXMgZmFsbGJhY2sgd2hlbiBpT1MgaGFyZHdhcmUgZG9lcyBub3QgZnVsbHkgc3VwcG9y
dCBkZXB0aDE2LgorICAgICAgICAgICAgIyBGYWxsYmFjayBmb3JtYXQ6CisgICAgICAgICAgICBh
Y3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrID0gaW9zX2ZhbGxiYWNrc1thY3R1YWxfYW5nbGVf
Zm9ybWF0XQorICAgICAgICAgICAgIyByZXR1cm4gaWYgZWxzZSBibG9jazoKKyAgICAgICAgICAg
IHJldHVybiBpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMy5mb3JtYXQoCisgICAgICAgICAg
ICAgICAgYWN0dWFsX2FuZ2xlX2Zvcm1hdD1hY3R1YWxfYW5nbGVfZm9ybWF0LAorICAgICAgICAg
ICAgICAgIG10bF9mb3JtYXQ9YW5nbGVfdG9fbXRsX21hcFthY3R1YWxfYW5nbGVfZm9ybWF0XSwK
KyAgICAgICAgICAgICAgICBpbml0X2Z1bmN0aW9uPWFuZ2xlX2Zvcm1hdF91dGlscy5nZXRfaW50
ZXJuYWxfZm9ybWF0X2luaXRpYWxpemVyKAorICAgICAgICAgICAgICAgICAgICBnbF9mb3JtYXQs
IGFjdHVhbF9hbmdsZV9mb3JtYXQpLAorICAgICAgICAgICAgICAgIGFjdHVhbF9hbmdsZV9mb3Jt
YXRfZmFsbGJhY2s9YWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFjaywKKyAgICAgICAgICAgICAg
ICBtdGxfZm9ybWF0X2ZhbGxiYWNrPWFuZ2xlX3RvX210bF9tYXBbYWN0dWFsX2FuZ2xlX2Zvcm1h
dF9mYWxsYmFja10sCisgICAgICAgICAgICAgICAgaW5pdF9mdW5jdGlvbl9mYWxsYmFjaz1hbmds
ZV9mb3JtYXRfdXRpbHMuZ2V0X2ludGVybmFsX2Zvcm1hdF9pbml0aWFsaXplcigKKyAgICAgICAg
ICAgICAgICAgICAgZ2xfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrKSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcmV0dXJuIG9yZGluYXJ5IGJsb2NrOgorICAgICAg
ICAgICAgcmV0dXJuIGltYWdlX2Zvcm1hdF9hc3NpZ25fdGVtcGxhdGUxLmZvcm1hdCgKKyAgICAg
ICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9ybWF0PWFjdHVhbF9hbmdsZV9mb3JtYXQsCisgICAg
ICAgICAgICAgICAgbXRsX2Zvcm1hdD1hbmdsZV90b19tdGxfbWFwW2FjdHVhbF9hbmdsZV9mb3Jt
YXRdLAorICAgICAgICAgICAgICAgIGluaXRfZnVuY3Rpb249YW5nbGVfZm9ybWF0X3V0aWxzLmdl
dF9pbnRlcm5hbF9mb3JtYXRfaW5pdGlhbGl6ZXIoCisgICAgICAgICAgICAgICAgICAgIGdsX2Zv
cm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCkpCisKKyAgICByZXR1cm4gZ2VuX2ltYWdlX21hcF9z
d2l0Y2hfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nbGVf
dG9fbXRsX21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5fZm9y
bWF0X2Fzc2lnbl9jb2RlKQorCisKIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9zdHJpbmcoaW1h
Z2VfdGFibGUsIGFuZ2xlX3RvX2dsKToKICAgICBhbmdsZV9vdmVycmlkZSA9IGltYWdlX3RhYmxl
WyJvdmVycmlkZSJdCiAgICAgbWFjX292ZXJyaWRlID0gaW1hZ2VfdGFibGVbIm92ZXJyaWRlX21h
YyJdCiAgICAgaW9zX292ZXJyaWRlID0gaW1hZ2VfdGFibGVbIm92ZXJyaWRlX2lvcyJdCi0gICAg
bWFjX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJkMjRzOF9mYWxsYmFja3NfbWFjIl0KKyAgICBt
YWNfZmFsbGJhY2tzID0gaW1hZ2VfdGFibGVbImZhbGxiYWNrc19tYWMiXQorICAgIGlvc19mYWxs
YmFja3MgPSBpbWFnZV90YWJsZVsiZmFsbGJhY2tzX2lvcyJdCiAgICAgYW5nbGVfdG9fbXRsID0g
aW1hZ2VfdGFibGVbIm1hcCJdCiAgICAgbWFjX3NwZWNpZmljX21hcCA9IGltYWdlX3RhYmxlWyJt
YXBfbWFjIl0KICAgICBpb3Nfc3BlY2lmaWNfbWFwID0gaW1hZ2VfdGFibGVbIm1hcF9pb3MiXQpA
QCAtMzIyLDggKzM3Niw4IEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9zdHJpbmcoaW1hZ2Vf
dGFibGUsIGFuZ2xlX3RvX2dsKToKICAgICBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hfY29tbW9u
X2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0KToKICAgICAgICAgbWFjX2Nh
c2UgPSBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9h
bmdsZV9mb3JtYXQsIGFuZ2xlX3RvX2dsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hY19hbmdsZV90b19tdGwsIG1hY19mYWxsYmFja3MpCi0gICAg
ICAgIG5vbl9tYWNfY2FzZSA9IGdlbl9pbWFnZV9tYXBfc3dpdGNoX3NpbXBsZV9jYXNlKGFuZ2xl
X2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVfdG9fZ2wsIGFuZ2xlX3RvX210bCkK
KyAgICAgICAgbm9uX21hY19jYXNlID0gZ2VuX2ltYWdlX21hcF9zd2l0Y2hfaW9zX2Nhc2UoYW5n
bGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZV90b19nbCwgYW5nbGVfdG9fbXRsLCBp
b3NfZmFsbGJhY2tzKQogICAgICAgICBpZiBtYWNfY2FzZSA9PSBub25fbWFjX2Nhc2U6CiAgICAg
ICAgICAgICByZXR1cm4gbWFjX2Nhc2UKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZmZXJfcG9vbC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9idWZm
ZXJfcG9vbC5oCmluZGV4IDIwNzlmZDcyN2E1MTJiMjg3MjVkMzgzOTA3YTQ5M2RjZDJkY2QzN2Mu
LjIwNGViYjk0OTg3MzExMmMwMTAyNDJiMmIxNmIwODYwY2Q0MGMwMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVm
ZmVyX3Bvb2wuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgKQEAgLTgxLDcgKzgxLDcgQEAgY2xhc3MgQnVm
ZmVyUG9vbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3QnVmZmVyQWxsb2Nh
dGVkT3V0ID0gbnVsbHB0cik7CiAKICAgICAvLyBBZnRlciBhIHNlcXVlbmNlIG9mIENQVSB3cml0
ZXMsIGNhbGwgY29tbWl0IHRvIGVuc3VyZSB0aGUgZGF0YSBpcyB2aXNpYmxlIHRvIHRoZSBkZXZp
Y2UuCi0gICAgYW5nbGU6OlJlc3VsdCBjb21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCk7Cisg
ICAgYW5nbGU6OlJlc3VsdCBjb21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCwgYm9vbCBmbHVz
aEVudGlyZUJ1ZmZlciA9IGZhbHNlKTsKIAogICAgIC8vIFRoaXMgcmVsZWFzZXMgYWxsIHRoZSBi
dWZmZXJzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBzaW5jZSB0aGlzIHdhcyBsYXN0IGNhbGxl
ZC4KICAgICB2b2lkIHJlbGVhc2VJbkZsaWdodEJ1ZmZlcnMoQ29udGV4dE10bCAqY29udGV4dE10
bCk7CkBAIC0xMTQsNyArMTE0LDYgQEAgY2xhc3MgQnVmZmVyUG9vbAogICAgIGFuZ2xlOjpSZXN1
bHQgYWxsb2NhdGVOZXdCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCk7CiAgICAgdm9pZCBk
ZXN0cm95QnVmZmVyTGlzdChDb250ZXh0TXRsICpjb250ZXh0TXRsLCBzdGQ6OmRlcXVlPEJ1ZmZl
clJlZj4gKmJ1ZmZlcnMpOwogICAgIGFuZ2xlOjpSZXN1bHQgZmluYWxpemVQZW5kaW5nQnVmZmVy
KENvbnRleHRNdGwgKmNvbnRleHRNdGwpOwotCiAgICAgc2l6ZV90IG1Jbml0aWFsU2l6ZTsKICAg
ICBCdWZmZXJSZWYgbUJ1ZmZlcjsKICAgICB1aW50MzJfdCBtTmV4dEFsbG9jYXRpb25PZmZzZXQ7
CkBAIC0xMjcsNyArMTI2LDcgQEAgY2xhc3MgQnVmZmVyUG9vbAogCiAgICAgc2l6ZV90IG1CdWZm
ZXJzQWxsb2NhdGVkOwogICAgIHNpemVfdCBtTWF4QnVmZmVyczsKLSAgICBCdWZmZXJQb29sTWVt
UG9saWN5IG1NZW1Qb2xpY3k7CisgICAgQnVmZmVyUG9vbE1lbVBvbGljeSBtTWVtUG9saWN5ID0g
QnVmZmVyUG9vbE1lbVBvbGljeTo6QXV0bzsKICAgICBib29sIG1BbHdheXNBbGxvY2F0ZU5ld0J1
ZmZlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCmlu
ZGV4IDA0MjM4ZWYxZThmYWIyMTY3NjU5YjY2OGMxY2NmYjk0ZmY1YTJkMmUuLmE1OGI1YTVhM2U5
Nzc4MGY3ODc1OTIwN2EwZmExMjU1MTlhOWQ1YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wubW0K
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9idWZmZXJfcG9vbC5tbQpAQCAtMjUwLDExICsyNTAsMTggQEAgYW5nbGU6OlJlc3VsdCBC
dWZmZXJQb29sOjphbGxvY2F0ZShDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAotYW5nbGU6OlJlc3VsdCBCdWZmZXJQb29sOjpj
b21taXQoQ29udGV4dE10bCAqY29udGV4dE10bCkKK2FuZ2xlOjpSZXN1bHQgQnVmZmVyUG9vbDo6
Y29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIGJvb2wgZmx1c2hFbnRpcmVCdWZmZXIpCiB7
CiAgICAgaWYgKG1CdWZmZXIgJiYgbU5leHRBbGxvY2F0aW9uT2Zmc2V0ID4gbUxhc3RGbHVzaE9m
ZnNldCkKICAgICB7Ci0gICAgICAgIG1CdWZmZXItPmZsdXNoKGNvbnRleHRNdGwsIG1MYXN0Rmx1
c2hPZmZzZXQsIG1OZXh0QWxsb2NhdGlvbk9mZnNldCAtIG1MYXN0Rmx1c2hPZmZzZXQpOworICAg
ICAgICBpZiAoZmx1c2hFbnRpcmVCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1CdWZm
ZXItPmZsdXNoKGNvbnRleHRNdGwsIDAsIG1MYXN0Rmx1c2hPZmZzZXQpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbUJ1ZmZlci0+Zmx1c2goY29udGV4
dE10bCwgbUxhc3RGbHVzaE9mZnNldCwgbU5leHRBbGxvY2F0aW9uT2Zmc2V0IC0gbUxhc3RGbHVz
aE9mZnNldCk7CisgICAgICAgIH0KICAgICAgICAgbUxhc3RGbHVzaE9mZnNldCA9IG1OZXh0QWxs
b2NhdGlvbk9mZnNldDsKICAgICB9CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5oCmluZGV4IDU1
ZmY2NDlkYjZkNTc3NWRjZTdhYzljYTUzMGExMjViZDY1ZDI4MWYuLjNhYTgyNmFmNjdmY2QyMDFi
OWYzYjJjYzhmMWE4ZTc3YTAxMWIyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X2NvbW1hbmRfYnVmZmVyLmgKQEAgLTEwMiw3ICsxMDIsNyBAQCBjbGFzcyBDb21tYW5kQnVmZmVy
IGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmds
ZTo6TgogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgY29tbWFuZCBidWZmZXIgY2FuIGJlIGVuY29k
ZWQgaW50by4gUmV0dXJuIGZhbHNlIGlmIGl0IGhhcyBiZWVuIGNvbW1pdHRlZAogICAgIC8vIGFu
ZCBoYXNuJ3QgYmVlbiByZXN0YXJ0ZWQuCi0gICAgYm9vbCByZWFkeSgpIGNvbnN0OworICAgIGJv
b2wgdmFsaWQoKSBjb25zdDsKICAgICB2b2lkIGNvbW1pdCgpOwogICAgIC8vIHdhaXQgZm9yIGNv
bW1pdHRlZCBjb21tYW5kIGJ1ZmZlciB0byBmaW5pc2guCiAgICAgdm9pZCBmaW5pc2goKTsKQEAg
LTExNSw2ICsxMTUsOCBAQCBjbGFzcyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBw
ZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmdsZTo6TgogCiAgICAgdm9pZCBxdWV1
ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2ZW50LCB1aW50NjRfdCB2
YWx1ZSk7CiAgICAgdm9pZCBzZXJ2ZXJXYWl0RXZlbnQoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJl
ZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKTsKKworICAgIHZvaWQgaW5zZXJ0RGVidWdTaWduKGNv
bnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpOwogICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoY29uc3Qg
c3RkOjpzdHJpbmcgJm1hcmtlcik7CiAgICAgdm9pZCBwb3BEZWJ1Z0dyb3VwKCk7CiAKQEAgLTEy
OCw3ICsxMzAsNyBAQCBjbGFzcyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRP
YmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBhbmdsZTo6TgogICAgIHZvaWQgc2V0KGlkPE1U
TENvbW1hbmRCdWZmZXI+IG1ldGFsQnVmZmVyKTsKICAgICB2b2lkIGNsZWFudXAoKTsKIAotICAg
IGJvb2wgcmVhZHlJbXBsKCkgY29uc3Q7CisgICAgYm9vbCB2YWxpZEltcGwoKSBjb25zdDsKICAg
ICB2b2lkIGNvbW1pdEltcGwoKTsKICAgICB2b2lkIGZvcmNlRW5kaW5nQ3VycmVudEVuY29kZXIo
KTsKIApAQCAtMTQ5LDYgKzE1MSw3IEBAIGNsYXNzIENvbW1hbmRCdWZmZXIgZmluYWwgOiBwdWJs
aWMgV3JhcHBlZE9iamVjdDxpZDxNVExDb21tYW5kQnVmZmVyPj4sIGFuZ2xlOjpOCiAKICAgICBt
dXRhYmxlIHN0ZDo6bXV0ZXggbUxvY2s7CiAKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4g
bVBlbmRpbmdEZWJ1Z1NpZ25zOwogICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxtdGw6OlNoYXJl
ZEV2ZW50UmVmLCB1aW50NjRfdD4+IG1QZW5kaW5nU2lnbmFsRXZlbnRzOwogCiAgICAgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+IG1EZWJ1Z0dyb3VwczsKQEAgLTE3Niw2ICsxNzksOCBAQCBjbGFz
cyBDb21tYW5kRW5jb2RlciA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRFbmNv
ZGVyPj4sIGFuZ2xlOjpOb25DbwogICAgIENvbW1hbmRFbmNvZGVyICZtYXJrUmVzb3VyY2VCZWlu
Z1dyaXR0ZW5CeUdQVShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcik7CiAgICAgQ29tbWFuZEVuY29k
ZXIgJm1hcmtSZXNvdXJjZUJlaW5nV3JpdHRlbkJ5R1BVKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1
cmUpOwogCisgICAgdm9pZCBpbnNlcnREZWJ1Z1NpZ24oTlNTdHJpbmcgKmxhYmVsKTsKKwogICAg
IHZpcnR1YWwgdm9pZCBwdXNoRGVidWdHcm91cChOU1N0cmluZyAqbGFiZWwpOwogICAgIHZpcnR1
YWwgdm9pZCBwb3BEZWJ1Z0dyb3VwKCk7CiAKQEAgLTE4OSw2ICsxOTQsOCBAQCBjbGFzcyBDb21t
YW5kRW5jb2RlciA6IHB1YmxpYyBXcmFwcGVkT2JqZWN0PGlkPE1UTENvbW1hbmRFbmNvZGVyPj4s
IGFuZ2xlOjpOb25DbwogCiAgICAgdm9pZCBzZXQoaWQ8TVRMQ29tbWFuZEVuY29kZXI+IG1ldGFs
Q21kRW5jb2Rlcik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1wbChOU1N0
cmluZyAqbWFya2VyKTsKKwogICBwcml2YXRlOgogICAgIGNvbnN0IFR5cGUgbVR5cGU7CiAgICAg
Q29tbWFuZEJ1ZmZlciAmbUNtZEJ1ZmZlcjsKQEAgLTIwMSw3ICsyMDgsNyBAQCBjbGFzcyBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5s
aW5lIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gJnB1c2goY29uc3QgVCAmdmFsKQogICAgIHsK
LSAgICAgICAgY29uc3QgdWludDhfdCAqcHRyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90ICo+KCZ2YWwpOworICAgICAgICBhdXRvIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCAqPigmdmFsKTsKICAgICAgICAgbUJ1ZmZlci5pbnNlcnQobUJ1ZmZlci5lbmQoKSwg
cHRyLCBwdHIgKyBzaXplb2YoVCkpOwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAt
MjE3LDcgKzIyNCw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0KICAgICB7CiAg
ICAgICAgIEFTU0VSVChtUmVhZFB0ciA8PSBtQnVmZmVyLnNpemUoKSAtIHNpemVvZihUKSk7CiAg
ICAgICAgIFQgcmU7Ci0gICAgICAgIHVpbnQ4X3QgKnB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCAqPigmcmUpOworICAgICAgICBhdXRvIHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCAqPigmcmUpOwogICAgICAgICBzdGQ6OmNvcHkobUJ1ZmZlci5kYXRhKCkgKyBtUmVhZFB0ciwg
bUJ1ZmZlci5kYXRhKCkgKyBtUmVhZFB0ciArIHNpemVvZihUKSwgcHRyKTsKICAgICAgICAgcmV0
dXJuIHJlOwogICAgIH0KQEAgLTIyNSw3ICsyMzIsNyBAQCBjbGFzcyBJbnRlcm1lZGlhdGVDb21t
YW5kU3RyZWFtCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgaW5saW5lIFQgZmV0Y2go
KQogICAgIHsKLSAgICAgICAgVCByZSA9IHBlZWs8VD4oKTsKKyAgICAgICAgYXV0byByZSA9IHBl
ZWs8VD4oKTsKICAgICAgICAgbVJlYWRQdHIgKz0gc2l6ZW9mKFQpOwogICAgICAgICByZXR1cm4g
cmU7CiAgICAgfQpAQCAtMjMzLDcgKzI0MCw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0KICAgICBpbmxpbmUgY29uc3QgdWludDhfdCAqZmV0Y2goc2l6ZV90IGJ5dGVzKQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1SZWFkUHRyIDw9IG1CdWZmZXIuc2l6ZSgpIC0gYnl0ZXMpOwot
ICAgICAgICBzaXplX3QgY3VyID0gbVJlYWRQdHI7CisgICAgICAgIGF1dG8gY3VyID0gbVJlYWRQ
dHI7CiAgICAgICAgIG1SZWFkUHRyICs9IGJ5dGVzOwogICAgICAgICByZXR1cm4gbUJ1ZmZlci5k
YXRhKCkgKyBjdXI7CiAgICAgfQpAQCAtNDc5LDEyICs0ODYsMTYgQEAgY2xhc3MgUmVuZGVyQ29t
bWFuZEVuY29kZXIgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEVuY29kZXIKICAgICB7CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4+KENvbW1hbmRF
bmNvZGVyOjpnZXQoKSk7CiAgICAgfQorICAgIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1wbChOU1N0
cmluZyAqbGFiZWwpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBpbml0QXR0YWNobWVudFdyaXRlRGVw
ZW5kZW5jeUFuZFNjaXNzb3JSZWN0KGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmYXR0
YWNobWVudCk7CisgICAgdm9pZCBpbml0V3JpdGVEZXBlbmRlbmN5KGNvbnN0IFRleHR1cmVSZWYg
JnRleHR1cmUpOwogCiAgICAgdm9pZCBmaW5hbGl6ZUxvYWRTdG9yZUFjdGlvbihNVExSZW5kZXJQ
YXNzQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNSZW5kZXJQYXNzQXR0YWNobWVudCk7CiAKICAg
ICB2b2lkIGVuY29kZU1ldGFsRW5jb2RlcigpOworICAgIHZvaWQgc2ltdWxhdGVEaXNjYXJkRnJh
bWVidWZmZXIoKTsKKyAgICB2b2lkIGVuZEVuY29kaW5nSW1wbChib29sIGNvbnNpZGVyRGlzY2Fy
ZFNpbXVsYXRpb24pOwogCiAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJmNvbW1vblNldEJ1ZmZl
cihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBtdGxCdWZmZXIsCkBAIC01NjAsMTEgKzU3MSwy
MCBAQCBjbGFzcyBCbGl0Q29tbWFuZEVuY29kZXIgZmluYWwgOiBwdWJsaWMgQ29tbWFuZEVuY29k
ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNsaWNlQ291
bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZXZlbENv
dW50KTsKIAorICAgIEJsaXRDb21tYW5kRW5jb2RlciAmY29weVRleHR1cmUoY29uc3QgVGV4dHVy
ZVJlZiAmc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
c3JjU2xpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBz
cmNMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1
cmVSZWYgJmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IGRzdFNsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
ZHN0TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBz
bGljZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
bGV2ZWxDb3VudCk7CisKICAgICBCbGl0Q29tbWFuZEVuY29kZXIgJmZpbGxCdWZmZXIoY29uc3Qg
QnVmZmVyUmVmICZidWZmZXIsIE5TUmFuZ2UgcmFuZ2UsIHVpbnQ4X3QgdmFsdWUpOwogCiAgICAg
QmxpdENvbW1hbmRFbmNvZGVyICZnZW5lcmF0ZU1pcG1hcHNGb3JUZXh0dXJlKGNvbnN0IFRleHR1
cmVSZWYgJnRleHR1cmUpOwotICAgIEJsaXRDb21tYW5kRW5jb2RlciAmc3luY2hyb25pemVSZXNv
dXJjZShCdWZmZXIgKmJ1ZmZlclB0cik7Ci0gICAgQmxpdENvbW1hbmRFbmNvZGVyICZzeW5jaHJv
bml6ZVJlc291cmNlKFRleHR1cmUgKnRleHR1cmVQdHIpOworICAgIEJsaXRDb21tYW5kRW5jb2Rl
ciAmc3luY2hyb25pemVSZXNvdXJjZShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcik7CisgICAgQmxp
dENvbW1hbmRFbmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IFRleHR1cmVSZWYgJnRl
eHR1cmUpOwogCiAgIHByaXZhdGU6CiAgICAgaWQ8TVRMQmxpdENvbW1hbmRFbmNvZGVyPiBnZXQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIubW0KaW5kZXgg
NDQzM2IwMjIxN2MzMGFhZTIwODk2NzA4YTc0YWYyNTQ3MzVkMjM2OC4uYjRhMzM0NzQyZTYyN2Nh
MDQ5MTIxMDNlMmZhZGZjYzczMTI0N2YzMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbQor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2NvbW1hbmRfYnVmZmVyLm1tCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCiAKICNpbmNsdWRlIDxjYXNz
ZXJ0PgorI2lmIEFOR0xFX01UTF9TSU1VTEFURV9ESVNDQVJEX0ZSQU1FQlVGRkVSCisjICAgIGlu
Y2x1ZGUgPHJhbmRvbT4KKyNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgi
CkBAIC02NSw2ICs2OCw3IEBAIG5hbWVzcGFjZQogICAgIFBST0MoU2V0VmlzaWJpbGl0eVJlc3Vs
dE1vZGUpICAgICAgICBcCiAgICAgUFJPQyhVc2VSZXNvdXJjZSkgICAgICAgICAgICAgICAgICAg
IFwKICAgICBQUk9DKE1lbW9yeUJhcnJpZXJXaXRoUmVzb3VyY2UpICAgICAgXAorICAgIFBST0Mo
SW5zZXJ0RGVidWdzaWduKSAgICAgICAgICAgICAgICBcCiAgICAgUFJPQyhQdXNoRGVidWdHcm91
cCkgICAgICAgICAgICAgICAgIFwKICAgICBQUk9DKFBvcERlYnVnR3JvdXApCiAKQEAgLTg1LDQy
ICs4OSw0MiBAQCB2b2lkIEludmFsaWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKgogdm9pZCBTZXRSZW5kZXJQaXBlbGlu
ZVN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
IHsKLSAgICBpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+KCk7CisgICAgYXV0byBzdGF0ZSA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+KCk7CiAgICAgW2VuY29kZXIgc2V0UmVu
ZGVyUGlwZWxpbmVTdGF0ZTpzdGF0ZV07CiAgICAgW3N0YXRlIEFOR0xFX01UTF9SRUxFQVNFXTsK
IH0KIAogdm9pZCBTZXRUcmlhbmdsZUZpbGxNb2RlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAg
TVRMVHJpYW5nbGVGaWxsTW9kZSBtb2RlID0gc3RyZWFtLT5mZXRjaDxNVExUcmlhbmdsZUZpbGxN
b2RlPigpOworICAgIGF1dG8gbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMVHJpYW5nbGVGaWxsTW9k
ZT4oKTsKICAgICBbZW5jb2RlciBzZXRUcmlhbmdsZUZpbGxNb2RlOm1vZGVdOwogfQogCiB2b2lk
IFNldEZyb250RmFjaW5nV2luZGluZ0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5j
b2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0gKnN0cmVhbSkKIHsKLSAgICBNVExXaW5kaW5nIHdpbmRpbmcgPSBzdHJlYW0tPmZldGNo
PE1UTFdpbmRpbmc+KCk7CisgICAgYXV0byB3aW5kaW5nID0gc3RyZWFtLT5mZXRjaDxNVExXaW5k
aW5nPigpOwogICAgIFtlbmNvZGVyIHNldEZyb250RmFjaW5nV2luZGluZzp3aW5kaW5nXTsKIH0K
IAogdm9pZCBTZXRDdWxsTW9kZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2Rl
ciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1UTEN1bGxNb2Rl
IG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTEN1bGxNb2RlPigpOworICAgIGF1dG8gbW9kZSA9IHN0
cmVhbS0+ZmV0Y2g8TVRMQ3VsbE1vZGU+KCk7CiAgICAgW2VuY29kZXIgc2V0Q3VsbE1vZGU6bW9k
ZV07CiB9CiAKIHZvaWQgU2V0RGVwdGhTdGVuY2lsU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsK
LSAgICBpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlkPE1U
TERlcHRoU3RlbmNpbFN0YXRlPj4oKTsKKyAgICBhdXRvIHN0YXRlID0gc3RyZWFtLT5mZXRjaDxp
ZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+KCk7CiAgICAgW2VuY29kZXIgc2V0RGVwdGhTdGVuY2ls
U3RhdGU6c3RhdGVdOwogICAgIFtzdGF0ZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKIHZvaWQg
U2V0RGVwdGhCaWFzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgZmxvYXQgZGVwdGhCaWFzICA9
IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgc2xvcGVTY2FsZSA9IHN0cmVhbS0+
ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgY2xhbXAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8Zmxv
YXQ+KCk7CisgICAgYXV0byBkZXB0aEJpYXMgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKyAg
ICBhdXRvIHNsb3BlU2NhbGUgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworICAgIGF1dG8gY2xh
bXAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CiAgICAgW2VuY29kZXIgc2V0RGVwdGhC
aWFzOmRlcHRoQmlhcyBzbG9wZVNjYWxlOnNsb3BlU2NhbGUgY2xhbXA6Y2xhbXBdOwogfQogCkBA
IC0xMzQsMTMgKzEzOCwxMyBAQCB2b2lkIFNldFN0ZW5jaWxSZWZWYWxzQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQogCiB2b2lkIFNldFZp
ZXdwb3J0Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlh
dGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMVmlld3BvcnQgdmlld3BvcnQgPSBz
dHJlYW0tPmZldGNoPE1UTFZpZXdwb3J0PigpOworICAgIGF1dG8gdmlld3BvcnQgPSBzdHJlYW0t
PmZldGNoPE1UTFZpZXdwb3J0PigpOwogICAgIFtlbmNvZGVyIHNldFZpZXdwb3J0OnZpZXdwb3J0
XTsKIH0KIAogdm9pZCBTZXRTY2lzc29yUmVjdENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1U
TFNjaXNzb3JSZWN0IHJlY3QgPSBzdHJlYW0tPmZldGNoPE1UTFNjaXNzb3JSZWN0PigpOworICAg
IGF1dG8gcmVjdCA9IHN0cmVhbS0+ZmV0Y2g8TVRMU2Npc3NvclJlY3Q+KCk7CiAgICAgW2VuY29k
ZXIgc2V0U2Npc3NvclJlY3Q6cmVjdF07CiB9CiAKQEAgLTE1NSw5ICsxNTksOSBAQCB2b2lkIFNl
dEJsZW5kQ29sb3JDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVy
bWVkaWF0ZUNvbW1hbmRTdAogCiB2b2lkIFNldFZlcnRleEJ1ZmZlckNtZChpZDxNVExSZW5kZXJD
b21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFt
KQogewotICAgIGlkPE1UTEJ1ZmZlcj4gYnVmZmVyID0gc3RyZWFtLT5mZXRjaDxpZDxNVExCdWZm
ZXI+PigpOwotICAgIHVpbnQzMl90IG9mZnNldCAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+
KCk7CisgICAgYXV0byBidWZmZXIgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7Cisg
ICAgYXV0byBvZmZzZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5k
ZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRWZXJ0ZXhC
dWZmZXI6YnVmZmVyIG9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRleF07CiAgICAgW2J1ZmZlciBB
TkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0xNjUsMjYgKzE2OSwyNiBAQCB2b2lkIFNldFZlcnRl
eEJ1ZmZlckNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZAogdm9pZCBTZXRWZXJ0ZXhCdWZmZXJPZmZzZXRDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgdWludDMyX3Qgb2Zmc2V0ID0g
c3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgPSBzdHJlYW0t
PmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAg
ICAgW2VuY29kZXIgc2V0VmVydGV4QnVmZmVyT2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsK
IH0KIAogdm9pZCBTZXRWZXJ0ZXhCeXRlc0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIHNpemVf
dCBzaXplICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7Ci0gICAgY29uc3QgdWlu
dDhfdCAqYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOwotICAgIHVpbnQzMl90IGluZGV4ICAg
ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHNpemUgID0gc3RyZWFt
LT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBieXRlcyA9IHN0cmVhbS0+ZmV0Y2goc2l6ZSk7
CisgICAgYXV0byBpbmRleCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAgICAgW2VuY29k
ZXIgc2V0VmVydGV4Qnl0ZXM6Ynl0ZXMgbGVuZ3RoOnNpemUgYXRJbmRleDppbmRleF07CiB9CiAK
IHZvaWQgU2V0VmVydGV4U2FtcGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIGlkPE1UTFNhbXBsZXJTdGF0ZT4gc3RhdGUgPSBz
dHJlYW0tPmZldGNoPGlkPE1UTFNhbXBsZXJTdGF0ZT4+KCk7Ci0gICAgZmxvYXQgbG9kTWluQ2xh
bXAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgZmxvYXQgbG9kTWF4Q2xh
bXAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7Ci0gICAgdWludDMyX3QgaW5kZXgg
ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBzdGF0ZSAg
ICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFNhbXBsZXJTdGF0ZT4+KCk7CisgICAgZmxvYXQg
bG9kTWluQ2xhbXAgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworICAgIGZsb2F0IGxvZE1heENs
YW1wID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKyAgICBhdXRvIGluZGV4ICAgICAgICA9IHN0
cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0VmVydGV4U2FtcGxlclN0
YXRlOnN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgIGxvZE1pbkNsYW1wOmxvZE1pbkNsYW1w
CiAgICAgICAgICAgICAgICAgICAgICAgIGxvZE1heENsYW1wOmxvZE1heENsYW1wCkBAIC0xOTUs
MTcgKzE5OSwxNyBAQCB2b2lkIFNldFZlcnRleFNhbXBsZXJTdGF0ZUNtZChpZDxNVExSZW5kZXJD
b21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKIAogdm9pZCBTZXRWZXJ0ZXhUZXh0dXJlQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFt
ICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMVGV4dHVyZT4+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxN
VExUZXh0dXJlPj4oKTsKKyAgICBhdXRvIGluZGV4ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90
PigpOwogICAgIFtlbmNvZGVyIHNldFZlcnRleFRleHR1cmU6dGV4dHVyZSBhdEluZGV4OmluZGV4
XTsKICAgICBbdGV4dHVyZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKIHZvaWQgU2V0RnJhZ21l
bnRCdWZmZXJDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKIHsKLSAgICBpZDxNVExCdWZmZXI+IGJ1ZmZlciA9
IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKLSAgICB1aW50MzJfdCBvZmZzZXQgICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAg
PSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gYnVmZmVyID0gc3RyZWFtLT5m
ZXRjaDxpZDxNVExCdWZmZXI+PigpOworICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1
aW50MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
CiAgICAgW2VuY29kZXIgc2V0RnJhZ21lbnRCdWZmZXI6YnVmZmVyIG9mZnNldDpvZmZzZXQgYXRJ
bmRleDppbmRleF07CiAgICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0yMTMs
MjYgKzIxNywyNiBAQCB2b2lkIFNldEZyYWdtZW50QnVmZmVyQ21kKGlkPE1UTFJlbmRlckNvbW1h
bmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQogdm9pZCBTZXRGcmFnbWVudEJ1
ZmZlck9mZnNldENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3Ry
ZWFtKQogewotICAgIHVpbnQzMl90IG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
Ci0gICAgdWludDMyX3QgaW5kZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBh
dXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0byBpbmRleCAg
PSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIHNldEZyYWdtZW50QnVm
ZmVyT2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsKIH0KIAogdm9pZCBTZXRGcmFnbWVudEJ5
dGVzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVD
b21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgc2l6ZV90IHNpemUgICAgICAgICAgPSBzdHJl
YW0tPmZldGNoPHNpemVfdD4oKTsKLSAgICBjb25zdCB1aW50OF90ICpieXRlcyA9IHN0cmVhbS0+
ZmV0Y2goc2l6ZSk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNoPHVp
bnQzMl90PigpOworICAgIGF1dG8gc2l6ZSAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKyAg
ICBhdXRvIGJ5dGVzID0gc3RyZWFtLT5mZXRjaChzaXplKTsKKyAgICBhdXRvIGluZGV4ID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRGcmFnbWVudEJ5dGVzOmJ5
dGVzIGxlbmd0aDpzaXplIGF0SW5kZXg6aW5kZXhdOwogfQogCiB2b2lkIFNldEZyYWdtZW50U2Ft
cGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJl
YW0pCiB7Ci0gICAgaWQ8TVRMU2FtcGxlclN0YXRlPiBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8
TVRMU2FtcGxlclN0YXRlPj4oKTsKLSAgICBmbG9hdCBsb2RNaW5DbGFtcCAgICAgICAgID0gc3Ry
ZWFtLT5mZXRjaDxmbG9hdD4oKTsKLSAgICBmbG9hdCBsb2RNYXhDbGFtcCAgICAgICAgID0gc3Ry
ZWFtLT5mZXRjaDxmbG9hdD4oKTsKLSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgICAgID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHN0YXRlICAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMU2FtcGxlclN0YXRlPj4oKTsKKyAgICBmbG9hdCBsb2RNaW5DbGFtcCA9IHN0
cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgZmxvYXQgbG9kTWF4Q2xhbXAgPSBzdHJlYW0tPmZl
dGNoPGZsb2F0PigpOworICAgIGF1dG8gaW5kZXggICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKICAgICBbZW5jb2RlciBzZXRGcmFnbWVudFNhbXBsZXJTdGF0ZTpzdGF0ZQogICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvZE1pbkNsYW1wOmxvZE1pbkNsYW1wCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9kTWF4Q2xhbXA6bG9kTWF4Q2xhbXAKQEAgLTI0MiwyNiArMjQ2LDI2
IEBAIHZvaWQgU2V0RnJhZ21lbnRTYW1wbGVyU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVu
Y29kZXI+IGVuY29kZXIsCiAKIHZvaWQgU2V0RnJhZ21lbnRUZXh0dXJlQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJl
YW0pCiB7Ci0gICAgaWQ8TVRMVGV4dHVyZT4gdGV4dHVyZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRM
VGV4dHVyZT4+KCk7Ci0gICAgdWludDMyX3QgaW5kZXggICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8
dWludDMyX3Q+KCk7CisgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExUZXh0
dXJlPj4oKTsKKyAgICBhdXRvIGluZGV4ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwog
ICAgIFtlbmNvZGVyIHNldEZyYWdtZW50VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6aW5kZXhdOwog
ICAgIFt0ZXh0dXJlIEFOR0xFX01UTF9SRUxFQVNFXTsKIH0KIAogdm9pZCBEcmF3Q21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFt
ICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlID0gc3RyZWFt
LT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAgIHVpbnQzMl90IHZlcnRleFN0YXJ0ICAg
ICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgdmVydGV4
Q291bnQgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHBy
aW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CisgICAgYXV0
byB2ZXJ0ZXhTdGFydCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHZl
cnRleENvdW50ICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRy
YXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUgdmVydGV4U3RhcnQ6dmVydGV4U3RhcnQgdmVydGV4
Q291bnQ6dmVydGV4Q291bnRdOwogfQogCiB2b2lkIERyYXdJbnN0YW5jZWRDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0
cmVhbSkKIHsKLSAgICBNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZl
dGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7Ci0gICAgdWludDMyX3QgdmVydGV4U3RhcnQgICAgICAg
ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKLSAgICB1aW50MzJfdCB2ZXJ0ZXhDb3Vu
dCAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwotICAgIHVpbnQzMl90IGlu
c3RhbmNlcyAgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0
byBwcmltaXRpdmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOworICAg
IGF1dG8gdmVydGV4U3RhcnQgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgYXV0
byB2ZXJ0ZXhDb3VudCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGlu
c3RhbmNlcyAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRy
YXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUKICAgICAgICAgICAgICAgICB2ZXJ0ZXhTdGFydDp2
ZXJ0ZXhTdGFydAogICAgICAgICAgICAgICAgIHZlcnRleENvdW50OnZlcnRleENvdW50CkBAIC0y
NzAsMTEgKzI3NCwxMSBAQCB2b2lkIERyYXdJbnN0YW5jZWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAogCiB2b2lkIERyYXdJbmRl
eGVkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVD
b21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVU
eXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAgIHVpbnQzMl90IGlu
ZGV4Q291bnQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgTVRM
SW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+
KCk7Ci0gICAgaWQ8TVRMQnVmZmVyPiBpbmRleEJ1ZmZlciAgICAgID0gc3RyZWFtLT5mZXRjaDxp
ZDxNVExCdWZmZXI+PigpOwotICAgIHNpemVfdCBidWZmZXJPZmZzZXQgICAgICAgICAgICA9IHN0
cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOworICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+
ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKyAgICBhdXRvIGluZGV4Q291bnQgICAgPSBzdHJl
YW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5kZXhUeXBlICAgICA9IHN0cmVhbS0+
ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworICAgIGF1dG8gaW5kZXhCdWZmZXIgICA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKyAgICBhdXRvIGJ1ZmZlck9mZnNldCAgPSBzdHJlYW0t
PmZldGNoPHNpemVfdD4oKTsKICAgICBbZW5jb2RlciBkcmF3SW5kZXhlZFByaW1pdGl2ZXM6cHJp
bWl0aXZlVHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50
CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhUeXBlOmluZGV4VHlwZQpAQCAtMjg1LDEy
ICsyODksMTIgQEAgdm9pZCBEcmF3SW5kZXhlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmUKIAogdm9pZCBEcmF3SW5kZXhlZElu
c3RhbmNlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQogewotICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0
aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKLSAgICB1aW50MzJf
dCBpbmRleENvdW50ICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwotICAg
IE1UTEluZGV4VHlwZSBpbmRleFR5cGUgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhU
eXBlPigpOwotICAgIGlkPE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0
Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKLSAgICBzaXplX3QgYnVmZmVyT2Zmc2V0ICAgICAgICAgICAg
PSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKLSAgICB1aW50MzJfdCBpbnN0YW5jZXMgICAgICAg
ICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKyAgICBhdXRvIGluZGV4Q291
bnQgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAgIGF1dG8gaW5kZXhUeXBlICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8TVRMSW5kZXhUeXBlPigpOworICAgIGF1dG8gaW5kZXhCdWZmZXIg
ICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKyAgICBhdXRvIGJ1ZmZlck9mZnNl
dCAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKyAgICBhdXRvIGluc3RhbmNlcyAgICAgPSBz
dHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJpbWl0
aXZlczpwcmltaXRpdmVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvdW50Omlu
ZGV4Q291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5cGU6aW5kZXhUeXBlCkBA
IC0zMDMsMTMgKzMwNywxMyBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2VkQ21kKGlkPE1UTFJl
bmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDbwogdm9pZCBEcmF3SW5k
ZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXhDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1lZGlh
dGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRp
dmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOwotICAgIHVpbnQzMl90
IGluZGV4Q291bnQgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAg
TVRMSW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5
cGU+KCk7Ci0gICAgaWQ8TVRMQnVmZmVyPiBpbmRleEJ1ZmZlciAgICAgID0gc3RyZWFtLT5mZXRj
aDxpZDxNVExCdWZmZXI+PigpOwotICAgIHNpemVfdCBidWZmZXJPZmZzZXQgICAgICAgICAgICA9
IHN0cmVhbS0+ZmV0Y2g8c2l6ZV90PigpOwotICAgIHVpbnQzMl90IGluc3RhbmNlcyAgICAgICAg
ICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Ci0gICAgdWludDMyX3QgYmFzZVZlcnRl
eCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIHByaW1p
dGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CisgICAgYXV0byBp
bmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGluZGV4
VHlwZSAgICAgPSBzdHJlYW0tPmZldGNoPE1UTEluZGV4VHlwZT4oKTsKKyAgICBhdXRvIGluZGV4
QnVmZmVyICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CisgICAgYXV0byBidWZm
ZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBpbnN0YW5jZXMg
ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICBhdXRvIGJhc2VWZXJ0ZXggICAg
PSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwogICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJp
bWl0aXZlczpwcmltaXRpdmVUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvdW50
OmluZGV4Q291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFR5cGU6aW5kZXhUeXBl
CkBAIC0zMjQsMTYgKzMyOCwxNiBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2VkQmFzZVZlcnRl
eENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKIHZvaWQgU2V0VmlzaWJp
bGl0eVJlc3VsdE1vZGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0g
KnN0cmVhbSkKIHsKLSAgICBNVExWaXNpYmlsaXR5UmVzdWx0TW9kZSBtb2RlID0gc3RyZWFtLT5m
ZXRjaDxNVExWaXNpYmlsaXR5UmVzdWx0TW9kZT4oKTsKLSAgICBzaXplX3Qgb2Zmc2V0ICAgICAg
ICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisgICAgYXV0byBtb2RlICAgPSBz
dHJlYW0tPmZldGNoPE1UTFZpc2liaWxpdHlSZXN1bHRNb2RlPigpOworICAgIGF1dG8gb2Zmc2V0
ID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CiAgICAgW2VuY29kZXIgc2V0VmlzaWJpbGl0eVJl
c3VsdE1vZGU6bW9kZSBvZmZzZXQ6b2Zmc2V0XTsKIH0KIAogdm9pZCBVc2VSZXNvdXJjZUNtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
cmVhbSAqc3RyZWFtKQogewotICAgIGlkPE1UTFJlc291cmNlPiByZXNvdXJjZSA9IHN0cmVhbS0+
ZmV0Y2g8aWQ8TVRMUmVzb3VyY2U+PigpOwotICAgIE1UTFJlc291cmNlVXNhZ2UgdXNhZ2UgICA9
IHN0cmVhbS0+ZmV0Y2g8TVRMUmVzb3VyY2VVc2FnZT4oKTsKLSAgICBtdGw6OlJlbmRlclN0YWdl
cyBzdGFnZXMgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOworICAgIGF1dG8g
cmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNlPj4oKTsKKyAgICBhdXRvIHVz
YWdlICAgID0gc3RyZWFtLT5mZXRjaDxNVExSZXNvdXJjZVVzYWdlPigpOworICAgIGF1dG8gc3Rh
Z2VzICAgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOwogICAgIEFOR0xFX1VO
VVNFRF9WQVJJQUJMRShzdGFnZXMpOwogI2lmIGRlZmluZWQoX19JUEhPTkVfMTNfMCkgfHwgZGVm
aW5lZChfX01BQ18xMF8xNSkKICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4x
NSwgMTMuMCwgMTMuMCkpCkBAIC0zNTEsOSArMzU1LDkgQEAgdm9pZCBVc2VSZXNvdXJjZUNtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
cmUKIHZvaWQgTWVtb3J5QmFycmllcldpdGhSZXNvdXJjZUNtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgaWQ8TVRMUmVzb3VyY2U+IHJl
c291cmNlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExSZXNvdXJjZT4+KCk7Ci0gICAgbXRsOjpSZW5k
ZXJTdGFnZXMgYWZ0ZXIgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdlcz4oKTsKLSAg
ICBtdGw6OlJlbmRlclN0YWdlcyBiZWZvcmUgPSBzdHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3Rh
Z2VzPigpOworICAgIGF1dG8gcmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNl
Pj4oKTsKKyAgICBhdXRvIGFmdGVyICAgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdl
cz4oKTsKKyAgICBhdXRvIGJlZm9yZSAgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdl
cz4oKTsKICAgICBBTkdMRV9VTlVTRURfVkFSSUFCTEUoYWZ0ZXIpOwogICAgIEFOR0xFX1VOVVNF
RF9WQVJJQUJMRShiZWZvcmUpOwogI2lmIGRlZmluZWQoX19NQUNfMTBfMTQpICYmIChUQVJHRVRf
T1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVCkKQEAgLTM2OCw5ICszNzIsMTYgQEAgdm9p
ZCBNZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLAogICAgIFtyZXNvdXJjZSBBTkdMRV9NVExfUkVMRUFTRV07CiB9CiAKK3ZvaWQg
SW5zZXJ0RGVidWdzaWduQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJ
bnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCit7CisgICAgYXV0byBsYWJlbCA9IHN0
cmVhbS0+ZmV0Y2g8TlNTdHJpbmcgKj4oKTsKKyAgICBbZW5jb2RlciBpbnNlcnREZWJ1Z1NpZ25w
b3N0OmxhYmVsXTsKKyAgICBbbGFiZWwgQU5HTEVfTVRMX1JFTEVBU0VdOworfQorCiB2b2lkIFB1
c2hEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRl
cm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCiB7Ci0gICAgTlNTdHJpbmcgKmxhYmVsID0g
c3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworICAgIGF1dG8gbGFiZWwgPSBzdHJlYW0tPmZl
dGNoPE5TU3RyaW5nICo+KCk7CiAgICAgW2VuY29kZXIgcHVzaERlYnVnR3JvdXA6bGFiZWxdOwog
ICAgIFtsYWJlbCBBTkdMRV9NVExfUkVMRUFTRV07CiB9CkBAIC0zODgsNyArMzk5LDcgQEAgY29u
c3RleHByIENvbW1hbmRFbmNvZGVyRnVuYyBnQ29tbWFuZEVuY29kZXJzW10gPSB7QU5HTEVfTVRM
X0NNRF9YKEFOR0xFX01UTF9DTUQKIAogTlNTdHJpbmcgKmNwcExhYmVsVG9PYmpDKGNvbnN0IHN0
ZDo6c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgTlNTdHJpbmcgKmxhYmVsID0gW05TU3RyaW5nIHN0
cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5jX3N0cigpXTsKKyAgICBhdXRvIGxhYmVsID0gW05T
U3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5jX3N0cigpXTsKICAgICBpZiAoIWxh
YmVsKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBzdHJpbmcgaXMg
bm90IGEgdmFsaWQgYXNjaWkgc3RyaW5nLgpAQCAtMzk2LDcgKzQwNyw2IEBAIE5TU3RyaW5nICpj
cHBMYWJlbFRvT2JqQyhjb25zdCBzdGQ6OnN0cmluZyAmbWFya2VyKQogICAgIH0KICAgICByZXR1
cm4gbGFiZWw7CiB9Ci0KIH0KIAogLy8gQ29tbWFuZFF1ZXVlIGltcGxlbWVudGF0aW9uCkBAIC01
NjUsMTEgKzU3NSwxMSBAQCBDb21tYW5kQnVmZmVyOjp+Q29tbWFuZEJ1ZmZlcigpCiAgICAgY2xl
YW51cCgpOwogfQogCi1ib29sIENvbW1hbmRCdWZmZXI6OnJlYWR5KCkgY29uc3QKK2Jvb2wgQ29t
bWFuZEJ1ZmZlcjo6dmFsaWQoKSBjb25zdAogewogICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11
dGV4PiBsZyhtTG9jayk7CiAKLSAgICByZXR1cm4gcmVhZHlJbXBsKCk7CisgICAgcmV0dXJuIHZh
bGlkSW1wbCgpOwogfQogCiB2b2lkIENvbW1hbmRCdWZmZXI6OmNvbW1pdCgpCkBAIC01OTgsNyAr
NjA4LDcgQEAgdm9pZCBDb21tYW5kQnVmZmVyOjpzZXRXcml0ZURlcGVuZGVuY3koY29uc3QgUmVz
b3VyY2VSZWYgJnJlc291cmNlKQogCiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxn
KG1Mb2NrKTsKIAotICAgIGlmICghcmVhZHlJbXBsKCkpCisgICAgaWYgKCF2YWxpZEltcGwoKSkK
ICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC02MjAsNyArNjMwLDcgQEAgdm9pZCBD
b21tYW5kQnVmZmVyOjpzZXRSZWFkRGVwZW5kZW5jeShSZXNvdXJjZSAqcmVzb3VyY2UpCiAKICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2spOwogCi0gICAgaWYgKCFyZWFk
eUltcGwoKSkKKyAgICBpZiAoIXZhbGlkSW1wbCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTY0Nyw1NyArNjU3LDU3IEBAIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6cmVzdGFydCgp
CiAgICAgQVNTRVJUKG1ldGFsQ21kQnVmZmVyKTsKIH0KIAotdm9pZCBDb21tYW5kQnVmZmVyOjpx
dWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYgJmV2ZW50LCB1aW50NjRf
dCB2YWx1ZSkKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6aW5zZXJ0RGVidWdTaWduKGNvbnN0IHN0ZDo6
c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1M
b2NrKTsKLQotICAgIEFTU0VSVChyZWFkeUltcGwoKSk7Ci0KLSAgICBpZiAobUFjdGl2ZUNvbW1h
bmRFbmNvZGVyICYmIG1BY3RpdmVDb21tYW5kRW5jb2Rlci0+Z2V0VHlwZSgpID09IENvbW1hbmRF
bmNvZGVyOjpSRU5ERVIpCisgICAgbXRsOjpDb21tYW5kRW5jb2RlciAqY3VycmVudEVuY29kZXIg
PSBtQWN0aXZlQ29tbWFuZEVuY29kZXI7CisgICAgaWYgKGN1cnJlbnRFbmNvZGVyKQogICAgIHsK
LSAgICAgICAgLy8gV2UgY2Fubm90IHNldCBldmVudCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBy
ZW5kZXIgcGFzcywgZGVmZXIgdGhlIHNldHRpbmcgdW50aWwgdGhlCi0gICAgICAgIC8vIHBhc3Mg
ZW5kLgotICAgICAgICBtUGVuZGluZ1NpZ25hbEV2ZW50cy5wdXNoX2JhY2soe2V2ZW50LCB2YWx1
ZX0pOworICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGxhYmVsID0gY3BwTGFiZWxUb09iakMobWFya2VyKTsKKyAgICAgICAgICAgIGN1cnJl
bnRFbmNvZGVyLT5pbnNlcnREZWJ1Z1NpZ24obGFiZWwpOworICAgICAgICB9CiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIHNldEV2ZW50SW1wbChldmVudCwgdmFsdWUpOworICAgICAg
ICBtUGVuZGluZ0RlYnVnU2lnbnMucHVzaF9iYWNrKG1hcmtlcik7CiAgICAgfQogfQogCi12b2lk
IENvbW1hbmRCdWZmZXI6OnNlcnZlcldhaXRFdmVudChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVm
ICZldmVudCwgdWludDY0X3QgdmFsdWUpCit2b2lkIENvbW1hbmRCdWZmZXI6OnB1c2hEZWJ1Z0dy
b3VwKGNvbnN0IHN0ZDo6c3RyaW5nICZtYXJrZXIpCiB7Ci0gICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKLSAgICBBU1NFUlQocmVhZHlJbXBsKCkpOwotCi0gICAgd2Fp
dEV2ZW50SW1wbChldmVudCwgdmFsdWUpOworICAgIC8vIE5PVEUoaHFsZSk6IHRvIGltcGxlbWVu
dCB0aGlzCiB9CiAKLXZvaWQgQ29tbWFuZEJ1ZmZlcjo6cHVzaERlYnVnR3JvdXAoY29uc3Qgc3Rk
OjpzdHJpbmcgJm1hcmtlcikKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cG9wRGVidWdHcm91cCgpCiB7
Ci0gICAgbURlYnVnR3JvdXBzLnB1c2hfYmFjayhtYXJrZXIpOworICAgIC8vIE5PVEUoaHFsZSk6
IHRvIGltcGxlbWVudCB0aGlzCit9CiAKK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cXVldWVFdmVudFNp
Z25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUpCit7
CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKIAotICAgIGlmIChy
ZWFkeUltcGwoKSkKKyAgICBBU1NFUlQodmFsaWRJbXBsKCkpOworCisgICAgaWYgKG1BY3RpdmVD
b21tYW5kRW5jb2RlciAmJiBtQWN0aXZlQ29tbWFuZEVuY29kZXItPmdldFR5cGUoKSA9PSBDb21t
YW5kRW5jb2Rlcjo6UkVOREVSKQogICAgIHsKLSAgICAgICAgcHVzaERlYnVnR3JvdXBJbXBsKG1h
cmtlcik7CisgICAgICAgIC8vIFdlIGNhbm5vdCBzZXQgZXZlbnQgd2hlbiB0aGVyZSBpcyBhbiBh
Y3RpdmUgcmVuZGVyIHBhc3MsIGRlZmVyIHRoZSBzZXR0aW5nIHVudGlsIHRoZQorICAgICAgICAv
LyBwYXNzIGVuZC4KKyAgICAgICAgbVBlbmRpbmdTaWduYWxFdmVudHMucHVzaF9iYWNrKHtldmVu
dCwgdmFsdWV9KTsKICAgICB9Ci19Ci0KLXZvaWQgQ29tbWFuZEJ1ZmZlcjo6cG9wRGVidWdHcm91
cCgpCi17Ci0gICAgaWYgKCFtRGVidWdHcm91cHMuZW1wdHkoKSkKKyAgICBlbHNlCiAgICAgewot
ICAgICAgICBtRGVidWdHcm91cHMucG9wX2JhY2soKTsKKyAgICAgICAgc2V0RXZlbnRJbXBsKGV2
ZW50LCB2YWx1ZSk7CiAgICAgfQorfQogCit2b2lkIENvbW1hbmRCdWZmZXI6OnNlcnZlcldhaXRF
dmVudChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUpCit7
CiAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKKyAgICBBU1NFUlQo
dmFsaWRJbXBsKCkpOwogCi0gICAgaWYgKHJlYWR5SW1wbCgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICB3YWl0RXZlbnRJbXBsKGV2ZW50LCB2YWx1ZSk7CiB9CiAKIC8qKiBw
cml2YXRlIHVzZSBvbmx5ICovCkBAIC03MDksNiArNzE5LDE1IEBAIHZvaWQgQ29tbWFuZEJ1ZmZl
cjo6c2V0KGlkPE1UTENvbW1hbmRCdWZmZXI+IG1ldGFsQnVmZmVyKQogdm9pZCBDb21tYW5kQnVm
ZmVyOjpzZXRBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5kRW5jb2RlciAqZW5jb2RlcikKIHsK
ICAgICBtQWN0aXZlQ29tbWFuZEVuY29kZXIgPSBlbmNvZGVyOworICAgIGZvciAoYXV0byAmbWFy
a2VyIDogbVBlbmRpbmdEZWJ1Z1NpZ25zKQorICAgIHsKKyAgICAgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBsYWJlbCA9IGNwcExhYmVsVG9PYmpD
KG1hcmtlcik7CisgICAgICAgICAgICBlbmNvZGVyLT5pbnNlcnREZWJ1Z1NpZ24obGFiZWwpOwor
ICAgICAgICB9CisgICAgfQorICAgIG1QZW5kaW5nRGVidWdTaWducy5jbGVhcigpOwogfQogCiB2
b2lkIENvbW1hbmRCdWZmZXI6OmludmFsaWRhdGVBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5k
RW5jb2RlciAqZW5jb2RlcikKQEAgLTcyOSw3ICs3NDgsNyBAQCB2b2lkIENvbW1hbmRCdWZmZXI6
OmNsZWFudXAoKQogICAgIFBhcmVudENsYXNzOjpzZXQobmlsKTsKIH0KIAotYm9vbCBDb21tYW5k
QnVmZmVyOjpyZWFkeUltcGwoKSBjb25zdAorYm9vbCBDb21tYW5kQnVmZmVyOjp2YWxpZEltcGwo
KSBjb25zdAogewogICAgIGlmICghUGFyZW50Q2xhc3M6OnZhbGlkKCkpCiAgICAgewpAQCAtNzQx
LDcgKzc2MCw3IEBAIGJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHlJbXBsKCkgY29uc3QKIAogdm9p
ZCBDb21tYW5kQnVmZmVyOjpjb21taXRJbXBsKCkKIHsKLSAgICBpZiAoIXJlYWR5SW1wbCgpKQor
ICAgIGlmICghdmFsaWRJbXBsKCkpCiAgICAgewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
ODg5LDYgKzkwOCwxNyBAQCB2b2lkIENvbW1hbmRFbmNvZGVyOjpwb3BEZWJ1Z0dyb3VwKCkKICAg
ICBbZ2V0KCkgcG9wRGVidWdHcm91cF07CiB9CiAKK3ZvaWQgQ29tbWFuZEVuY29kZXI6Omluc2Vy
dERlYnVnU2lnbihOU1N0cmluZyAqbGFiZWwpCit7CisgICAgaW5zZXJ0RGVidWdTaWduSW1wbChs
YWJlbCk7Cit9CisKK3ZvaWQgQ29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbkltcGwoTlNT
dHJpbmcgKmxhYmVsKQoreworICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAgICBbZ2V0
KCkgaW5zZXJ0RGVidWdTaWducG9zdDpsYWJlbF07Cit9CisKIC8vIFJlbmRlckNvbW1hbmRFbmNv
ZGVyU2hhZGVyU3RhdGVzIGltcGxlbWVudGF0aW9uCiBSZW5kZXJDb21tYW5kRW5jb2RlclNoYWRl
clN0YXRlczo6UmVuZGVyQ29tbWFuZEVuY29kZXJTaGFkZXJTdGF0ZXMoKQogewpAQCAtOTUxLDYg
Kzk4MSw5IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXJTdGF0ZXM6OnJlc2V0KCkKICAgICB7
CiAgICAgICAgIHNoYWRlclN0YXRlcy5yZXNldCgpOwogICAgIH0KKworICAgIHZpc2liaWxpdHlS
ZXN1bHRNb2RlICAgICAgICAgPSBNVExWaXNpYmlsaXR5UmVzdWx0TW9kZURpc2FibGVkOworICAg
IHZpc2liaWxpdHlSZXN1bHRCdWZmZXJPZmZzZXQgPSAwOwogfQogCiAvLyBSZW5kZXJDb21tYW5k
RW5jb2RlciBpbXBsZW10YXRpb24KQEAgLTEwMTQsMTEgKzEwNDcsMTIgQEAgdm9pZCBSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6ZmluYWxpemVMb2FkU3RvcmVBY3Rpb24oCiAgICAgewogICAgICAgICBp
ZiAob2JqQ1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0aW9u
U3RvcmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIE5PVEUoaHFsZSk6IEN1cnJlbnRseSBp
ZiB0aGUgc3RvcmUgYWN0aW9uIHdpdGggaW1wbGljaXQgTVMgdGV4dHVyZSBpcwotICAgICAgICAg
ICAgLy8gTVRMU3RvcmVBY3Rpb25TdG9yZSwgaXQgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0IHRv
IHN0b3JlIGFuZCByZXNvbHZlIGFjdGlvbi4gSXQKLSAgICAgICAgICAgIC8vIG1pZ2h0IGludHJv
ZHVjZSB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gQ29uc2lkZXIgYW4gaW1wcm92ZW1lbnQgc3VjaCBh
cyBvbmx5IHN0b3JlIHRoZQotICAgICAgICAgICAgLy8gTVMgdGV4dHVyZSwgYW5kIHJlc29sdmUg
b25seSBhdCB0aGUgZW5kIG9mIHJlYWwgcmVuZGVyIHBhc3MgKG5vdCByZW5kZXIgcGFzcyB0aGUg
aXMKLSAgICAgICAgICAgIC8vIGludGVycnVwdGVkIGJ5IGNvbXB1dGUgcGFzcykgb3IgYmVmb3Jl
IGdsQmxpdEZyYW1lYnVmZmVyIG9wZXJhdGlvbiBzdGFydHMuCisgICAgICAgICAgICAvLyBOT1RF
KGhxbGUpOiBDdXJyZW50bHkgaWYgdGhlIHN0b3JlIGFjdGlvbiB3aXRoIGltcGxpY2l0IE1TIHRl
eHR1cmUgaXMgTVRMU3RvcmVBY3Rpb24sCisgICAgICAgICAgICAvLyBpdCBpcyBhdXRvbWF0aWNh
bGx5IGNvbnZlcnQgdG8gc3RvcmUgYW5kIHJlc29sdmUgYWN0aW9uLiBJdCBtaWdodCBpbnRyb2R1
Y2UKKyAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgorICAgICAgICAgICAgLy8g
Q29uc2lkZXIgYW4gaW1wcm92ZW1lbnQgc3VjaCBhcyBvbmx5IHN0b3JlIHRoZSBNUyB0ZXh0dXJl
LCBhbmQgcmVzb2x2ZSBvbmx5IGF0CisgICAgICAgICAgICAvLyB0aGUgZW5kIG9mIHJlYWwgcmVu
ZGVyIHBhc3MgKG5vdCByZW5kZXIgcGFzcyB0aGUgd2FzIGludGVycnVwdGVkIGJ5IGNvbXB1dGUg
cGFzcykKKyAgICAgICAgICAgIC8vIG9yIGJlZm9yZSBnbEJsaXRGcmFtZWJ1ZmZlciBvcGVyYXRp
b24gc3RhcnRzLgogICAgICAgICAgICAgb2JqQ1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0
aW9uID0gTVRMU3RvcmVBY3Rpb25TdG9yZUFuZE11bHRpc2FtcGxlUmVzb2x2ZTsKICAgICAgICAg
fQogICAgICAgICBlbHNlIGlmIChvYmpDUmVuZGVyUGFzc0F0dGFjaG1lbnQuc3RvcmVBY3Rpb24g
PT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkKQEAgLTEwMzYsNiArMTA3MCwxMSBAQCB2b2lkIFJl
bmRlckNvbW1hbmRFbmNvZGVyOjpmaW5hbGl6ZUxvYWRTdG9yZUFjdGlvbigKIH0KIAogdm9pZCBS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5kRW5jb2RpbmcoKQoreworICAgIGVuZEVuY29kaW5nSW1w
bCh0cnVlKTsKK30KKwordm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5kRW5jb2RpbmdJbXBs
KGJvb2wgY29uc2lkZXJEaXNjYXJkU2ltdWxhdGlvbikKIHsKICAgICBpZiAoIXZhbGlkKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTEwNTAsMTEgKzEwODksMTEgQEAgdm9pZCBSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZW5kRW5jb2RpbmcoKQogICAgICAgICBmaW5hbGl6ZUxvYWRTdG9yZUFjdGlvbihv
YmpDUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSk7CiAgICAgfQogCi0gICAgLy8g
VXBkYXRlIGRlcHRoIHN0b3JlIGFjdGlvbiBzZXQgYmV0d2VlbiByZXN0YXJ0KCkgYW5kIGVuZEVu
Y29kaW5nKCkKKyAgICAvLyBVcGRhdGUgc3RvcmUgYWN0aW9uIHNldCBiZXR3ZWVuIHJlc3RhcnQo
KSBhbmQgZW5kRW5jb2RpbmcoKQogICAgIG9iakNSZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1l
bnQuc3RvcmVBY3Rpb24gPSBtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnN0b3JlQWN0
aW9uOwogICAgIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVzYy5kZXB0
aEF0dGFjaG1lbnQpOwogCi0gICAgLy8gVXBkYXRlIHN0ZW5jaWwgc3RvcmUgYWN0aW9uIHNldCBi
ZXR3ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2RpbmcoKQorICAgIC8vIFVwZGF0ZSBzdG9yZSBh
Y3Rpb24gc2V0IGJldHdlZW4gcmVzdGFydCgpIGFuZCBlbmRFbmNvZGluZygpCiAgICAgb2JqQ1Jl
bmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uID0KICAgICAgICAgbVJl
bmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uOwogICAgIGZpbmFsaXpl
TG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudCk7CkBA
IC0xMDc1LDI2ICsxMTE0LDc4IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVuY29k
aW5nKCkKIAogICAgIENvbW1hbmRFbmNvZGVyOjplbmRFbmNvZGluZygpOwogCisjaWYgQU5HTEVf
TVRMX1NJTVVMQVRFX0RJU0NBUkRfRlJBTUVCVUZGRVIKKyAgICBpZiAoY29uc2lkZXJEaXNjYXJk
U2ltdWxhdGlvbikKKyAgICB7CisgICAgICAgIHNpbXVsYXRlRGlzY2FyZEZyYW1lYnVmZmVyKCk7
CisgICAgfQorI2VuZGlmCisKICAgICAvLyByZXNldCBzdGF0ZQogICAgIG1SZW5kZXJQYXNzRGVz
YyA9IFJlbmRlclBhc3NEZXNjKCk7CiAgICAgbVN0YXRlQ2FjaGUucmVzZXQoKTsKIH0KIAotaW5s
aW5lIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRl
bmN5QW5kU2Npc3NvclJlY3QoCi0gICAgY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZh
dHRhY2htZW50KQoraW5saW5lIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmluaXRXcml0ZURl
cGVuZGVuY3koY29uc3QgVGV4dHVyZVJlZiAmdGV4dHVyZSkKIHsKLSAgICBUZXh0dXJlUmVmIHRl
eHR1cmUgPSBhdHRhY2htZW50LnRleHR1cmU7CiAgICAgaWYgKHRleHR1cmUpCiAgICAgewogICAg
ICAgICBjbWRCdWZmZXIoKS5zZXRXcml0ZURlcGVuZGVuY3kodGV4dHVyZSk7CisgICAgfQorfQog
Ci0gICAgICAgIGNvbnN0IE1pcG1hcE5hdGl2ZUxldmVsICZtaXBMZXZlbCA9IGF0dGFjaG1lbnQu
bGV2ZWw7Cit2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjpzaW11bGF0ZURpc2NhcmRGcmFtZWJ1
ZmZlcigpCit7CisgICAgLy8gU2ltdWxhdGUgdHJ1ZSBmcmFtZWJ1ZmZlciBkaXNjYXJkIG9wZXJh
dGlvbiBieSBjbGVhcmluZyB0aGUgZnJhbWVidWZmZXIKKyNpZiBBTkdMRV9NVExfU0lNVUxBVEVf
RElTQ0FSRF9GUkFNRUJVRkZFUgorICAgIHN0ZDo6cmFuZG9tX2RldmljZSByZDsgICAvLyBXaWxs
IGJlIHVzZWQgdG8gb2J0YWluIGEgc2VlZCBmb3IgdGhlIHJhbmRvbSBudW1iZXIgZW5naW5lCisg
ICAgc3RkOjptdDE5OTM3IGdlbihyZCgpKTsgIC8vIFN0YW5kYXJkIG1lcnNlbm5lX3R3aXN0ZXJf
ZW5naW5lIHNlZWRlZCB3aXRoIHJkKCkKKyAgICBzdGQ6OnVuaWZvcm1fcmVhbF9kaXN0cmlidXRp
b248ZmxvYXQ+IGRpcygwLjAsIDEuMGYpOworICAgIGJvb2wgaGFzRGlzY2FyZCA9IGZhbHNlOwor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVyUGFzc0Rlc2MubnVtQ29sb3JBdHRh
Y2htZW50czsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0
dGFjaG1lbnRzW2ldLnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0aW9uRG9udENhcmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGhhc0Rpc2NhcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSB0cnVlOworICAgICAgICAgICAgbVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNo
bWVudHNbaV0ubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rpb25DbGVhcjsKKyAgICAgICAgICAgIG1S
ZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmNsZWFyQ29sb3IgPQorICAgICAgICAg
ICAgICAgIE1UTENsZWFyQ29sb3JNYWtlKGRpcyhnZW4pLCBkaXMoZ2VuKSwgZGlzKGdlbiksIGRp
cyhnZW4pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gPSBNVExMb2Fk
QWN0aW9uTG9hZDsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBtUmVuZGVyUGFzc01heFNj
aXNzb3JSZWN0LndpZHRoID0KLSAgICAgICAgICAgIHN0ZDo6bWluPE5TVUludGVnZXI+KG1SZW5k
ZXJQYXNzTWF4U2Npc3NvclJlY3Qud2lkdGgsIHRleHR1cmUtPndpZHRoKG1pcExldmVsKSk7Ci0g
ICAgICAgIG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0ID0KLSAgICAgICAgICAgIHN0
ZDo6bWluPE5TVUludGVnZXI+KG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0LCB0ZXh0
dXJlLT5oZWlnaHQobWlwTGV2ZWwpKTsKKyAgICBpZiAobVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0
YWNobWVudC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlKQorICAgIHsKKyAg
ICAgICAgaGFzRGlzY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gdHJ1ZTsK
KyAgICAgICAgbVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uID0gTVRM
TG9hZEFjdGlvbkNsZWFyOworICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50
LmNsZWFyRGVwdGggPSBkaXMoZ2VuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
bVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uID0gTVRMTG9hZEFjdGlv
bkxvYWQ7CisgICAgfQorCisgICAgaWYgKG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVu
dC5zdG9yZUFjdGlvbiA9PSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlKQorICAgIHsKKyAgICAgICAg
aGFzRGlzY2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHRydWU7Cisg
ICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2FkQWN0aW9uICAgPSBN
VExMb2FkQWN0aW9uQ2xlYXI7CisgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNo
bWVudC5jbGVhclN0ZW5jaWwgPSByYW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2FkQWN0aW9uID0gTVRMTG9h
ZEFjdGlvbkxvYWQ7CiAgICAgfQorCisgICAgaWYgKGhhc0Rpc2NhcmQpCisgICAgeworICAgICAg
ICBhdXRvIHRtcERlc2MgPSBtUmVuZGVyUGFzc0Rlc2M7CisgICAgICAgIHJlc3RhcnQodG1wRGVz
Yyk7CisgICAgICAgIGVuZEVuY29kaW5nSW1wbChmYWxzZSk7CisgICAgfQorI2VuZGlmICAvLyBB
TkdMRV9NVExfU0lNVUxBVEVfRElTQ0FSRF9GUkFNRUJVRkZFUgogfQogCiB2b2lkIFJlbmRlckNv
bW1hbmRFbmNvZGVyOjplbmNvZGVNZXRhbEVuY29kZXIoKQpAQCAtMTEwMiw3ICsxMTkzLDcgQEAg
dm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5jb2RlTWV0YWxFbmNvZGVyKCkKICAgICBBTkdM
RV9NVExfT0JKQ19TQ09QRQogICAgIHsKICAgICAgICAgQU5HTEVfTVRMX0xPRygiQ3JlYXRpbmcg
bmV3IHJlbmRlciBjb21tYW5kIGVuY29kZXIgd2l0aCBkZXNjOiAlQCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgbUNhY2hlZFJlbmRlclBhc3NEZXNjT2JqQy5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgW21DYWNoZWRSZW5kZXJQYXNzRGVzY09iakMgZGVzY3JpcHRpb25dKTsKIAogICAg
ICAgICBpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gbWV0YWxDbWRFbmNvZGVyID0KICAgICAg
ICAgICAgIFtjbWRCdWZmZXIoKS5nZXQoKSByZW5kZXJDb21tYW5kRW5jb2RlcldpdGhEZXNjcmlw
dG9yOm1DYWNoZWRSZW5kZXJQYXNzRGVzY09iakNdOwpAQCAtMTExMCw3ICsxMjAxLDExIEBAIHZv
aWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2RlcigpCiAgICAgICAgIHNl
dChtZXRhbENtZEVuY29kZXIpOwogCiAgICAgICAgIC8vIFZlcmlmeSB0aGF0IGl0IHdhcyBjcmVh
dGVkIHN1Y2Nlc3NmdWxseQotICAgICAgICBBU1NFUlQobWV0YWxDbWRFbmNvZGVyKTsKKyAgICAg
ICAgQVNTRVJUKGdldCgpKTsKKworICAgICAgICAvLyBXb3JrLWFyb3VuZCBkcml2ZXIgYnVnIG9u
IGlPUyBkZXZpY2VzOiBzdGVuY2lsIG11c3QgYmUgZXhwbGljaXRseSBzZXQgdG8gemVybworICAg
ICAgICAvLyBldmVuIGlmIHRoZSBkb2Mgc2F5cyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhbHJlYWR5
IHplcm8uCisgICAgICAgIFttZXRhbENtZEVuY29kZXIgc2V0U3RlbmNpbFJlZmVyZW5jZVZhbHVl
OjBdOwogCiAgICAgICAgIGlmIChtTGFiZWwpCiAgICAgICAgIHsKQEAgLTExMTksNyArMTIxNCw3
IEBAIHZvaWQgUmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2RlcigpCiAKICAg
ICAgICAgd2hpbGUgKG1Db21tYW5kcy5nb29kKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIENt
ZFR5cGUgY21kVHlwZSAgICAgICAgICAgID0gbUNvbW1hbmRzLmZldGNoPENtZFR5cGU+KCk7Cisg
ICAgICAgICAgICBhdXRvIGNtZFR5cGUgICAgICAgICAgICAgICA9IG1Db21tYW5kcy5mZXRjaDxD
bWRUeXBlPigpOwogICAgICAgICAgICAgQ29tbWFuZEVuY29kZXJGdW5jIGVuY29kZXIgPSBnQ29t
bWFuZEVuY29kZXJzW3N0YXRpY19jYXN0PGludD4oY21kVHlwZSldOwogICAgICAgICAgICAgZW5j
b2RlcihtZXRhbENtZEVuY29kZXIsICZtQ29tbWFuZHMpOwogICAgICAgICB9CkBAIC0xMTQyLDQx
ICsxMjM3LDM0IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6
cmVzdGFydChjb25zdCBSZW5kZXJQYXNzRGVzYyAmZGVzYykKICAgICAgICAgZW5kRW5jb2Rpbmco
KTsKICAgICB9CiAKLSAgICBpZiAoIWNtZEJ1ZmZlcigpLnJlYWR5KCkpCisgICAgaWYgKCFjbWRC
dWZmZXIoKS52YWxpZCgpKQogICAgIHsKICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgIH0KIAotICAgIG1MYWJlbC5yZXNldCgpOworICAgIG1SZW5kZXJQYXNzRGVz
YyA9IGRlc2M7CisgICAgbVJlY29yZGluZyAgICAgID0gdHJ1ZTsKKyAgICBtSGFzRHJhd0NhbGxz
ICAgPSBmYWxzZTsKIAotICAgIG1SZW5kZXJQYXNzRGVzYyAgICAgICAgICAgPSBkZXNjOwotICAg
IG1SZWNvcmRpbmcgICAgICAgICAgICAgICAgPSB0cnVlOwotICAgIG1IYXNEcmF3Q2FsbHMgICAg
ICAgICAgICAgPSBmYWxzZTsKLSAgICBtUmVuZGVyUGFzc01heFNjaXNzb3JSZWN0ID0gey54ICAg
ICAgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnkgICAgICA9IDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2lkdGggID0gc3RkOjpudW1lcmljX2xp
bWl0czxOU1VJbnRlZ2VyPjo6bWF4KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAuaGVpZ2h0ID0gc3RkOjpudW1lcmljX2xpbWl0czxOU1VJbnRlZ2VyPjo6bWF4KCl9OwotCi0g
ICAgLy8gU2V0IHdyaXRpbmcgZGVwZW5kZW5jeSAmIGNvbnN0cmFpbiB0aGUgc2Npc3NvciByZWN0
CisgICAgLy8gbWFzayB3cml0aW5nIGRlcGVuZGVuY3kgJiBzZXQgYXBwcm9wcmlhdGUgc3RvcmUg
b3B0aW9ucwogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVyUGFzc0Rlc2MubnVt
Q29sb3JBdHRhY2htZW50czsgKytpKQogICAgIHsKLSAgICAgICAgaW5pdEF0dGFjaG1lbnRXcml0
ZURlcGVuZGVuY3lBbmRTY2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50
c1tpXSk7CisgICAgICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNjLmNvbG9y
QXR0YWNobWVudHNbaV0udGV4dHVyZSgpKTsKICAgICB9CiAKLSAgICBpbml0QXR0YWNobWVudFdy
aXRlRGVwZW5kZW5jeUFuZFNjaXNzb3JSZWN0KG1SZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1l
bnQpOworICAgIGluaXRXcml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNo
bWVudC50ZXh0dXJlKCkpOwogCi0gICAgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRT
Y2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQpOworICAgIGluaXRX
cml0ZURlcGVuZGVuY3kobVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUo
KSk7CiAKICAgICAvLyBDb252ZXJ0IHRvIE9iamVjdGl2ZS1DIGRlc2NyaXB0b3IKICAgICBtUmVu
ZGVyUGFzc0Rlc2MuY29udmVydFRvTWV0YWxEZXNjKG1DYWNoZWRSZW5kZXJQYXNzRGVzY09iakMp
OwogCi0gICAgLy8gVGhlIGFjdHVhbCBPYmplY3RpdmUtQyBlbmNvZGVyIHdpbGwgYmUgY3JlYXRl
ZCBsYXRlciBpbiBlbmRFbmNvZGluZygpLCB3ZSBkbyBzbyBpbgotICAgIC8vIG9yZGVyIHRvIGJl
IGFibGUgdG8gc29ydCB0aGUgY29tbWFuZHMgb3IgZG8gdGhlIHByZXByb2Nlc3NpbmcgYmVmb3Jl
IHRoZSBhY3R1YWwKLSAgICAvLyBlbmNvZGluZy4KKyAgICAvLyBUaGUgYWN0dWFsIE9iamVjdGl2
ZS1DIGVuY29kZXIgd2lsbCBiZSBjcmVhdGVkIGxhdGVyIGluIGVuZEVuY29kaW5nKCksIHdlIGRv
IHNvIGluIG9yZGVyCisgICAgLy8gdG8gYmUgYWJsZSB0byBzb3J0IHRoZSBjb21tYW5kcyBvciBk
byB0aGUgcHJlcHJvY2Vzc2luZyBiZWZvcmUgdGhlIGFjdHVhbCBlbmNvZGluZy4KIAotICAgIC8v
IFNpbmNlIHdlIGRlZmVyIHRoZSBuYXRpdmUgZW5jb2RlciBjcmVhdGlvbiwgd2UgbmVlZCB0byBl
eHBsaWNpdGx5IHRlbGwgY29tbWFuZCBidWZmZXIKLSAgICAvLyB0aGF0IHRoaXMgb2JqZWN0IGlz
IHRoZSBhY3RpdmUgZW5jb2RlcjoKKyAgICAvLyBTaW5jZSB3ZSBkZWZlciB0aGUgbmF0aXZlIGVu
Y29kZXIgY3JlYXRpb24sIHdlIG5lZWQgdG8gZXhwbGljaXRseSB0ZWxsIGNvbW1hbmQgYnVmZmVy
IHRoYXQKKyAgICAvLyB0aGlzIG9iamVjdCBpcyB0aGUgYWN0aXZlIGVuY29kZXI6CiAgICAgY21k
QnVmZmVyKCkuc2V0QWN0aXZlQ29tbWFuZEVuY29kZXIodGhpcyk7CiAKICAgICByZXR1cm4gKnRo
aXM7CkBAIC0xMzAyLDE2ICsxMzkwLDYgQEAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNv
bW1hbmRFbmNvZGVyOjpzZXRTY2lzc29yUmVjdChjb25zdCBNVExTY2lzc29yUmVjdAogICAgIHsK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KLQotICAgIGlmIChBTkdMRV9VTkxJS0VMWShy
ZWN0LnggKyByZWN0LndpZHRoID4gbVJlbmRlclBhc3NNYXhTY2lzc29yUmVjdC53aWR0aCB8fAot
ICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkgKyByZWN0LmhlaWdodCA+IG1SZW5kZXJQYXNz
TWF4U2Npc3NvclJlY3QuaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIFdBUk4oKSA8PCAiT3V0IG9m
IGJvdW5kIHNjaXNzb3IgcmVjdCBkZXRlY3RlZCAiIDw8IHJlY3QueCA8PCAiICIgPDwgcmVjdC55
IDw8ICIgIgotICAgICAgICAgICAgICAgPDwgcmVjdC53aWR0aCA8PCAiICIgPDwgcmVjdC5oZWln
aHQ7Ci0gICAgICAgIC8vIE91dCBvZiBib3VuZCByZWN0IHdpbGwgY3Jhc2ggdGhlIG1ldGFsIHJ1
bnRpbWUsIGlnbm9yZSBpdC4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQogICAgIG1T
dGF0ZUNhY2hlLnNjaXNzb3JSZWN0ID0gcmVjdDsKIAogICAgIG1Db21tYW5kcy5wdXNoKENtZFR5
cGU6OlNldFNjaXNzb3JSZWN0KS5wdXNoKHJlY3QpOwpAQCAtMTM4Myw3ICsxNDYxLDcgQEAgUmVu
ZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpjb21tb25TZXRCdWZmZXIo
Z2w6OlNoYWRlclR5cGUgc2hhZGUKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAg
fQogCi0gICAgICAgIC8vIElmIGJ1ZmZlciBhbHJlYWR5IGJvdW5kIGJ1dCB3aXRoIGRpZmZlcmVu
dCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRoZSBvZmZzZXQgb25seS4KKyAgICAgICAgLy8gSWYgYnVm
ZmVyIGFscmVhZHkgYm91bmQgYnV0IHdpdGggZGlmZmVyZW50IG9mZnNldCwgdGhlbiB1cGRhdGUg
dGhlIG9mZmVyIG9ubHkuCiAgICAgICAgIHNoYWRlclN0YXRlcy5idWZmZXJPZmZzZXRzW2luZGV4
XSA9IG9mZnNldDsKIAogICAgICAgICBtQ29tbWFuZHMucHVzaChzdGF0aWNfY2FzdDxDbWRUeXBl
PihtU2V0QnVmZmVyT2Zmc2V0Q21kc1tzaGFkZXJUeXBlXSkpCkBAIC0xNDkwLDEyICsxNTY4LDYg
QEAgUmVuZGVyQ29tbWFuZEVuY29kZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpkcmF3KE1UTFBy
aW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCkK
IHsKLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkK
LSAgICB7Ci0gICAgICAgIC8vIElnbm9yZSBkcmF3IGNhbGwgaWYgdGhlcmUgaXMgbm8gcmVuZGVy
IHBpcGVsaW5lIHN0YXRlIHNldCBwcmlvciB0byB0aGlzLgotICAgICAgICByZXR1cm4gKnRoaXM7
Ci0gICAgfQotCiAgICAgbUhhc0RyYXdDYWxscyA9IHRydWU7CiAgICAgbUNvbW1hbmRzLnB1c2go
Q21kVHlwZTo6RHJhdykucHVzaChwcmltaXRpdmVUeXBlKS5wdXNoKHZlcnRleFN0YXJ0KS5wdXNo
KHZlcnRleENvdW50KTsKIApAQCAtMTUwNywxMiArMTU3OSw2IEBAIFJlbmRlckNvbW1hbmRFbmNv
ZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZHJhd0luc3RhbmNlZChNVExQcmltaXRpdmVUeXBl
IHByaW1pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2VzKQogewot
ICAgIGlmIChBTkdMRV9VTkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlwZWxpbmUpKQotICAg
IHsKLSAgICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlw
ZWxpbmUgc3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICB9Ci0KICAgICBtSGFzRHJhd0NhbGxzID0gdHJ1ZTsKICAgICBtQ29tbWFuZHMucHVzaChDbWRU
eXBlOjpEcmF3SW5zdGFuY2VkKQogICAgICAgICAucHVzaChwcmltaXRpdmVUeXBlKQpAQCAtMTUy
OSwxMyArMTU5NSw3IEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6ZHJhd0luZGV4ZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlclJlZiAm
aW5kZXhCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQpCiB7Ci0gICAgaWYgKEFOR0xFX1VOTElL
RUxZKCFtU3RhdGVDYWNoZS5yZW5kZXJQaXBlbGluZSkpCi0gICAgewotICAgICAgICAvLyBJZ25v
cmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGluZSBzdGF0ZSBzZXQgcHJp
b3IgdG8gdGhpcy4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIGlmIChBTkdM
RV9VTkxJS0VMWSghaW5kZXhCdWZmZXIpKQorICAgIGlmICghaW5kZXhCdWZmZXIpCiAgICAgewog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTU2MCwxMyArMTYyMCw3IEBAIFJlbmRl
ckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZHJhd0luZGV4ZWRJbnN0YW5j
ZWQoTVRMUHJpbWl0aXZlVHlwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGluc3RhbmNlcykKIHsKLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNh
Y2hlLnJlbmRlclBpcGVsaW5lKSkKLSAgICB7Ci0gICAgICAgIC8vIElnbm9yZSBkcmF3IGNhbGwg
aWYgdGhlcmUgaXMgbm8gcmVuZGVyIHBpcGVsaW5lIHN0YXRlIHNldCBwcmlvciB0byB0aGlzLgot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFp
bmRleEJ1ZmZlcikpCisgICAgaWYgKCFpbmRleEJ1ZmZlcikKICAgICB7CiAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICB9CkBAIC0xNTk0LDEzICsxNjQ4LDcgQEAgUmVuZGVyQ29tbWFuZEVuY29k
ZXIgJlJlbmRlckNvbW1hbmRFbmNvZGVyOjpkcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXgo
CiAgICAgdWludDMyX3QgaW5zdGFuY2VzLAogICAgIHVpbnQzMl90IGJhc2VWZXJ0ZXgpCiB7Ci0g
ICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtU3RhdGVDYWNoZS5yZW5kZXJQaXBlbGluZSkpCi0gICAg
ewotICAgICAgICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBl
bGluZSBzdGF0ZSBzZXQgcHJpb3IgdG8gdGhpcy4KLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
IH0KLQotICAgIGlmIChBTkdMRV9VTkxJS0VMWSghaW5kZXhCdWZmZXIpKQorICAgIGlmICghaW5k
ZXhCdWZmZXIpCiAgICAgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQpAQCAtMTY3Myw2
ICsxNzIxLDEyIEBAIFJlbmRlckNvbW1hbmRFbmNvZGVyICZSZW5kZXJDb21tYW5kRW5jb2Rlcjo6
bWVtb3J5QmFycmllcldpdGhSZXNvdXJjZShjb25zdCBCdWZmCiAgICAgcmV0dXJuICp0aGlzOwog
fQogCit2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1NpZ25JbXBsKE5TU3Ry
aW5nICpsYWJlbCkKK3sKKyAgICAvLyBEZWZlciB0aGUgaW5zZXJ0aW9uIHVudGlsIGVuZEVuY29k
aW5nKCkKKyAgICBtQ29tbWFuZHMucHVzaChDbWRUeXBlOjpJbnNlcnREZWJ1Z3NpZ24pLnB1c2go
W2xhYmVsIEFOR0xFX01UTF9SRVRBSU5dKTsKK30KKwogdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6cHVzaERlYnVnR3JvdXAoTlNTdHJpbmcgKmxhYmVsKQogewogICAgIC8vIERlZmVyIHRoZSBp
bnNlcnRpb24gdW50aWwgZW5kRW5jb2RpbmcoKQpAQCAtMTc5OSw3ICsxODUzLDcgQEAgQmxpdENv
bW1hbmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OnJlc3RhcnQoKQogICAgICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFjbWRCdWZmZXIoKS5yZWFk
eSgpKQorICAgICAgICBpZiAoIWNtZEJ1ZmZlcigpLnZhbGlkKCkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJlc2V0KCk7CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC0xOTYyLDYgKzIw
MTYsNjYgQEAgQmxpdENvbW1hbmRFbmNvZGVyICZCbGl0Q29tbWFuZEVuY29kZXI6OmZpbGxCdWZm
ZXIoY29uc3QgQnVmZmVyUmVmICZidWZmZXIsCiAgICAgcmV0dXJuICp0aGlzOwogfQogCitCbGl0
Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmUoY29uc3QgVGV4
dHVyZVJlZiAmc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0U2xpY2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3JjU3RhcnRMZXZlbCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
ZXh0dXJlUmVmICZkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgZHN0U3RhcnRTbGljZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RTdGFydExldmVsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHNsaWNlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCkKK3sKKyAgICBpZiAoIXNyYyB8fCAhZHN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGNtZEJ1ZmZlcigp
LnNldFJlYWREZXBlbmRlbmN5KHNyYyk7CisgICAgY21kQnVmZmVyKCkuc2V0V3JpdGVEZXBlbmRl
bmN5KGRzdCk7CisKKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEzXzApIHx8IGRlZmluZWQoX19NQUNf
MTBfMTUpCisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEz
LjApKQorICAgIHsKKyAgICAgICAgW2dldCgpIGNvcHlGcm9tVGV4dHVyZTpzcmMtPmdldCgpCisg
ICAgICAgICAgICAgICAgICAgc291cmNlU2xpY2U6c3JjU3RhcnRTbGljZQorICAgICAgICAgICAg
ICAgICAgIHNvdXJjZUxldmVsOnNyY1N0YXJ0TGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgIHRv
VGV4dHVyZTpkc3QtPmdldCgpCisgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZHN0U3Rh
cnRTbGljZQorICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRzdFN0YXJ0TGV2ZWwKKyAg
ICAgICAgICAgICAgICAgICAgc2xpY2VDb3VudDpzbGljZUNvdW50CisgICAgICAgICAgICAgICAg
ICAgIGxldmVsQ291bnQ6bGV2ZWxDb3VudF07CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAg
IHsKKyAgICAgICAgTVRMT3JpZ2luIG9yaWdpbiA9IE1UTE9yaWdpbk1ha2UoMCwgMCwgMCk7Cisg
ICAgICAgIGZvciAodWludDMyX3Qgc2xpY2UgPSAwOyBzbGljZSA8IHNsaWNlQ291bnQ7ICsrc2xp
Y2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IHNyY1NsaWNlID0gc3JjU3RhcnRT
bGljZSArIHNsaWNlOworICAgICAgICAgICAgdWludDMyX3QgZHN0U2xpY2UgPSBkc3RTdGFydFNs
aWNlICsgc2xpY2U7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGxldmVsID0gMDsgbGV2ZWwg
PCBsZXZlbENvdW50OyArK2xldmVsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG10
bDo6TWlwbWFwTmF0aXZlTGV2ZWwgc3JjTGV2ZWwgPSBtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKHNy
Y1N0YXJ0TGV2ZWwgKyBsZXZlbCk7CisgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0TGV2ZWwg
PSBkc3RTdGFydExldmVsICsgbGV2ZWw7CisgICAgICAgICAgICAgICAgTVRMU2l6ZSBzcmNTaXpl
ID0KKyAgICAgICAgICAgICAgICAgICAgTVRMU2l6ZU1ha2Uoc3JjLT53aWR0aChzcmNMZXZlbCks
IHNyYy0+aGVpZ2h0KHNyY0xldmVsKSwgc3JjLT5kZXB0aChzcmNMZXZlbCkpOworCisgICAgICAg
ICAgICAgICAgW2dldCgpIGNvcHlGcm9tVGV4dHVyZTpzcmMtPmdldCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzb3VyY2VTbGljZTpzcmNTbGljZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc291cmNlTGV2ZWw6c3JjTGV2ZWwuZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgc291cmNlT3JpZ2luOm9yaWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJj
ZVNpemU6c3JjU2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZHN0
LT5nZXQoKQorICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uU2xpY2U6ZHN0U2xpY2UK
KyAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbkxldmVsOmRzdExldmVsCisgICAgICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpvcmlnaW5dOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICp0aGlzOworfQorCiBCbGl0Q29tbWFuZEVu
Y29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6Z2VuZXJhdGVNaXBtYXBzRm9yVGV4dHVyZShjb25z
dCBUZXh0dXJlUmVmICZ0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkKQEAgLTE5NzQsNyAr
MjA4OCw3IEBAIEJsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpnZW5lcmF0
ZU1pcG1hcHNGb3JUZXh0dXJlKGNvbnN0IFRleHR1cmVSCiAKICAgICByZXR1cm4gKnRoaXM7CiB9
Ci1CbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25pemVSZXNv
dXJjZShCdWZmZXIgKmJ1ZmZlcikKK0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNv
ZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IEJ1ZmZlclJlZiAmYnVmZmVyKQogewogICAg
IGlmICghYnVmZmVyKQogICAgIHsKQEAgLTE5ODksNyArMjEwMyw3IEBAIEJsaXRDb21tYW5kRW5j
b2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKEJ1ZmZlciAqYnVm
ZmVyKQogI2VuZGlmCiAgICAgcmV0dXJuICp0aGlzOwogfQotQmxpdENvbW1hbmRFbmNvZGVyICZC
bGl0Q29tbWFuZEVuY29kZXI6OnN5bmNocm9uaXplUmVzb3VyY2UoVGV4dHVyZSAqdGV4dHVyZSkK
K0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291
cmNlKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCiB7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAg
IHsKQEAgLTIwMjgsNyArMjE0Miw3IEBAIENvbXB1dGVDb21tYW5kRW5jb2RlciAmQ29tcHV0ZUNv
bW1hbmRFbmNvZGVyOjpyZXN0YXJ0KCkKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICghY21kQnVmZmVyKCkucmVhZHkoKSkKKyAgICAgICAgaWYgKCFj
bWRCdWZmZXIoKS52YWxpZCgpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXNldCgpOwogICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKaW5k
ZXggOTdjY2I5M2Y5NmMyNmM0ZmZiOTY2OTkzZWZiYTQxYmEzZjE2ZjRmOC4uM2ZjNWUzOWQxNzhj
MDE0MGFhZTI3ODQ1MzcxMzlhOGQ0MWMwNmZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Nv
bW1vbi5oCkBAIC0yNyw5ICsyNywxOCBAQAogI2luY2x1ZGUgImxpYkFOR0xFL2FuZ2xldHlwZXMu
aCIKIAogI2lmIFRBUkdFVF9PU19JUEhPTkUKKyMgICAgaWYgIWRlZmluZWQoX19JUEhPTkVfMTFf
MCkKKyMgICAgICAgIGRlZmluZSBfX0lQSE9ORV8xMV8wIDExMDAwMAorIyAgICBlbmRpZgogIyAg
ICBpZiAhZGVmaW5lZChBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCkKICMgICAgICAgIGRlZmluZSBB
TkdMRV9JT1NfREVQTE9ZX1RBUkdFVCBfX0lQSE9ORV8xMV8wCiAjICAgIGVuZGlmCisjICAgIGlm
ICFkZWZpbmVkKF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpCisjICAgICAgICBkZWZp
bmUgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCBfX0lQSE9ORV8xMV8wCisjICAgIGVu
ZGlmCisjICAgIGlmICFkZWZpbmVkKF9fVFZfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCkKKyMgICAg
ICAgIGRlZmluZSBfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgX19JUEhPTkVfMTFfMAorIyAg
ICBlbmRpZgogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChUQVJHRVRfT1NfTUFDQ0FUQUxZU1QpCkBA
IC02Niw2ICs3NSw3IEBAIG5hbWVzcGFjZSBlZ2wKIHsKIGNsYXNzIERpc3BsYXk7CiBjbGFzcyBJ
bWFnZTsKK2NsYXNzIFN1cmZhY2U7CiB9ICAvLyBuYW1lc3BhY2UgZWdsCiAKICNkZWZpbmUgQU5H
TEVfR0xfT0JKRUNUU19YKFBST0MpIFwKQEAgLTEwMiw2ICsxMTIsNyBAQCBjbGFzcyBUZXh0dXJl
TXRsOwogY2xhc3MgUHJvZ3JhbU10bDsKIGNsYXNzIFNhbXBsZXJNdGw7CiBjbGFzcyBUcmFuc2Zv
cm1GZWVkYmFja010bDsKK2NsYXNzIFN1cmZhY2VNdGxQcm90b2NvbDsKIAogQU5HTEVfR0xfT0JK
RUNUU19YKEFOR0xFX1BSRV9ERUNMQVJFX01UTF9PQkpFQ1QpCiAKQEAgLTEyOCw3ICsxMzksOCBA
QCBjb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0QXR0cmlidXRlU2l6ZSA9IDQgKiBzaXplb2YoZmxv
YXQpOwogLy8gTWV0YWwgbGltaXRzCiBjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlckJ1ZmZl
cnMgICAgID0gMzE7CiBjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlclNhbXBsZXJzICAgID0g
MTY7Ci1jb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0gNCAqIDEwMjQ7
Citjb25zdGV4cHIgc2l6ZV90IGtJbmxpbmVDb25zdERhdGFNYXhTaXplID0gNCAqIDEwMjQ7Citj
b25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0ga0lubGluZUNvbnN0RGF0
YU1heFNpemU7CiBjb25zdGV4cHIgdWludDMyX3Qga01heFZpZXdwb3J0cyAgICAgICAgID0gMTsK
IAogY29uc3RleHByIHVpbnQzMl90IGtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQg
PSA0OwpAQCAtMTQyLDcgKzE1NCw3IEBAIGNvbnN0ZXhwciB1aW50MzJfdCBrSW5kZXhCdWZmZXJP
ZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OwogY29uc3RleHByIHVpbnQzMl90IGtBcmd1bWVudEJ1
ZmZlck9mZnNldEFsaWdubWVudCAgICA9IGtVbmlmb3JtQnVmZmVyU2V0dGluZ09mZnNldE1pbkFs
aWdubWVudDsKIGNvbnN0ZXhwciB1aW50MzJfdCBrVGV4dHVyZVRvQnVmZmVyQmxpdHRpbmdBbGln
bm1lbnQgPSAyNTY7CiAKLS8vIEZyb250IGVuZCBiaW5kaW5nIGxpbWl0cworLy8gRm9udCBlbmQg
YmluZGluZyBsaW1pdHMKIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4R0xTYW1wbGVyQmluZGluZ3Mg
PSAyICoga01heFNoYWRlclNhbXBsZXJzOwogY29uc3RleHByIHVpbnQzMl90IGtNYXhHTFVCT0Jp
bmRpbmdzICAgICA9IDIgKiBrTWF4U2hhZGVyVUJPczsKIApAQCAtMTU1LDIxICsxNjcsMjMgQEAg
Y29uc3RleHByIHVpbnQzMl90IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCA9IGtWYm9CaW5k
aW5nSW5kZXhTdGFydCArIGtNYXhWZXIKIGNvbnN0ZXhwciB1aW50MzJfdCBrRHJpdmVyVW5pZm9y
bXNCaW5kaW5nSW5kZXggPSBrRGVmYXVsdEF0dHJpYnNCaW5kaW5nSW5kZXggKyAxOwogLy8gQmlu
ZGluZyBpbmRleCBmb3IgZGVmYXVsdCB1bmlmb3JtczoKIGNvbnN0ZXhwciB1aW50MzJfdCBrRGVm
YXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4ICsg
MzsKLS8vIEJpbmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1ZmZlciBvciBzdGFydGlu
ZyBkaXNjcmV0ZSBzbG90Ci1jb25zdGV4cHIgdWludDMyX3Qga1VCT0FyZ3VtZW50QnVmZmVyQmlu
ZGluZ0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCArIDE7CisvLyBCaW5kaW5n
IGluZGV4IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sgQnVmZmVycyAoNCkKK2NvbnN0ZXhwciB1aW50
MzJfdCBrVHJhbnNmb3JtRmVlZGJhY2tCaW5kaW5nSW5kZXggPSBrRGVmYXVsdFVuaWZvcm1zQmlu
ZGluZ0luZGV4ICsgMTsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIHNoYWRvdyBzYW1wbGVycycgY29t
cGFyZSBtb2RlcworY29uc3RleHByIHVpbnQzMl90IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVz
QmluZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgNDsKKy8vIEJp
bmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1ZmZlcgorY29uc3RleHByIHVpbnQzMl90
IGtVQk9Bcmd1bWVudEJ1ZmZlckJpbmRpbmdJbmRleCA9IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1v
ZGVzQmluZGluZ0luZGV4ICsgMTsKIAotY29uc3RleHByIHVpbnQzMl90IGtTdGVuY2lsTWFza0Fs
bCA9IDB4ZmY7ICAvLyBPbmx5IDggYml0cyBzdGVuY2lsIGlzIHN1cHBvcnRlZAorY29uc3RleHBy
IHVpbnQzMl90IGtTdGVuY2lsTWFza0FsbCA9IDB4ZmY7ICAvLyBPbmx5IDggYml0IHN0ZW5jaWwg
aXMgc3VwcG9ydGVkCiAKIC8vIFRoaXMgc3BlY2lhbCBjb25zdGFudCBpcyB1c2VkIHRvIGluZGlj
YXRlIHRoYXQgYSBwYXJ0aWN1bGFyIHZlcnRleCBkZXNjcmlwdG9yJ3MgYnVmZmVyIGxheW91dAog
Ly8gaW5kZXggaXMgdW51c2VkLgogY29uc3RleHByIE1UTFZlcnRleFN0ZXBGdW5jdGlvbiBrVmVy
dGV4U3RlcEZ1bmN0aW9uSW52YWxpZCA9CiAgICAgc3RhdGljX2Nhc3Q8TVRMVmVydGV4U3RlcEZ1
bmN0aW9uPigweGZmKTsKIAotY29uc3RleHByIGludCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMTsK
LQotY29uc3RleHByIHNpemVfdCBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplID0gc2l6ZW9mKHVp
bnQ2NF90KTsKK2NvbnN0ZXhwciBmbG9hdCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMS4wZjsKIAot
Y29uc3RleHByIGdsOjpWZXJzaW9uIGtNYXhTdXBwb3J0ZWRHTFZlcnNpb24gPSBnbDo6VmVyc2lv
bigzLCAwKTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplID0g
c2l6ZW9mKHVpbnQ2NF90KTsKIAogLy8gV29yay1hcm91bmQgdGhlIGVudW0gaXMgbm90IGF2YWls
YWJsZSBvbiBtYWNPUwogI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNU
CkBAIC0xNzksMTMgKzE5MywxMSBAQCBjb25zdGV4cHIgTVRMQmxpdE9wdGlvbiBrQmxpdE9wdGlv
blJvd0xpbmVhclBWUlRDICAgICAgICAgID0gTVRMQmxpdE9wdGlvblJvd0xpbgogI2VuZGlmCiAK
ICNpZiBkZWZpbmVkKF9fSVBIT05FXzEzXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTUpCi0jICAg
IGRlZmluZSBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUgMQogdXNpbmcgVGV4dHVyZVN3aXp6
bGVDaGFubmVscyAgICAgICAgICAgICAgICAgICA9IE1UTFRleHR1cmVTd2l6emxlQ2hhbm5lbHM7
CiB1c2luZyBSZW5kZXJTdGFnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTVRMUmVu
ZGVyU3RhZ2VzOwogY29uc3RleHByIE1UTFJlbmRlclN0YWdlcyBrUmVuZGVyU3RhZ2VWZXJ0ZXgg
ICA9IE1UTFJlbmRlclN0YWdlVmVydGV4OwogY29uc3RleHByIE1UTFJlbmRlclN0YWdlcyBrUmVu
ZGVyU3RhZ2VGcmFnbWVudCA9IE1UTFJlbmRlclN0YWdlRnJhZ21lbnQ7CiAjZWxzZQotIyAgICBk
ZWZpbmUgQU5HTEVfTVRMX1NXSVpaTEVfQVZBSUxBQkxFIDAKIHVzaW5nIFRleHR1cmVTd2l6emxl
Q2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbnQ7CiB1c2luZyBSZW5k
ZXJTdGFnZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaW50Owog
Y29uc3RleHByIFJlbmRlclN0YWdlcyBrUmVuZGVyU3RhZ2VWZXJ0ZXggICAgICAgICAgICAgICAg
ICA9IDE7CkBAIC0yMTksMTIgKzIzMSwxNiBAQCBzdHJ1Y3QgSW1wbFR5cGVIZWxwZXI8ZWdsOjpE
aXNwbGF5PgogewogICAgIHVzaW5nIEltcGxUeXBlID0gRGlzcGxheU10bDsKIH07Ci0KK3RlbXBs
YXRlIDw+CitzdHJ1Y3QgSW1wbFR5cGVIZWxwZXI8ZWdsOjpTdXJmYWNlPgoreworICAgIHVzaW5n
IEltcGxUeXBlID0gU3VyZmFjZU10bFByb3RvY29sOworfTsKIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgogdXNpbmcgR2V0SW1wbFR5cGUgPSB0eXBlbmFtZSBJbXBsVHlwZUhlbHBlcjxUPjo6SW1wbFR5
cGU7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotR2V0SW1wbFR5cGU8VD4gKkdldEltcGwoY29u
c3QgVCAqX05vbm51bGwgZ2xPYmplY3QpCitHZXRJbXBsVHlwZTxUPiAqR2V0SW1wbChjb25zdCBU
ICpnbE9iamVjdCkKIHsKICAgICByZXR1cm4gR2V0SW1wbEFzPEdldEltcGxUeXBlPFQ+PihnbE9i
amVjdCk7CiB9CkBAIC0zNDYsMjEgKzM2MiwxNiBAQCB1c2luZyBBdXRvT2JqQ09iaiA9IEF1dG9P
YmpDUHRyPFQgKj47CiAKIC8vIE5PVEU6IFNoYXJlZEV2ZW50IGlzIG9ubHkgZGVjbGFyZWQgb24g
aU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKICNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRl
ZmluZWQoX19NQUNfMTBfMTQpCi0jICAgIGRlZmluZSBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxF
IDEKIHVzaW5nIFNoYXJlZEV2ZW50UmVmID0gQXV0b09iakNQdHI8aWQ8TVRMU2hhcmVkRXZlbnQ+
PjsKICNlbHNlCi0jICAgIGRlZmluZSBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFIDAKIHVzaW5n
IFNoYXJlZEV2ZW50UmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBB
dXRvT2JqQ09iajxOU09iamVjdD47CiAjZW5kaWYKIAogLy8gVGhlIG5hdGl2ZSBpbWFnZSBpbmRl
eCB1c2VkIGJ5IE1ldGFsIGJhY2stZW5kLCAgdGhlIGltYWdlIGluZGV4IHVzZXMgbmF0aXZlIG1p
cG1hcCBsZXZlbCBpbnN0ZWFkCiAvLyBvZiAidmlydHVhbCIgbGV2ZWwgbW9kaWZpZWQgYnkgT3Bl
bkdMJ3MgYmFzZSBsZXZlbC4KIHVzaW5nIE1pcG1hcE5hdGl2ZUxldmVsID0gZ2w6OkxldmVsSW5k
ZXhXcmFwcGVyPHVpbnQzMl90PjsKLQogY29uc3RleHByIE1pcG1hcE5hdGl2ZUxldmVsIGtaZXJv
TmF0aXZlTWlwTGV2ZWwoMCk7Ci0KIGNsYXNzIEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvcjsKLQog
Y2xhc3MgSW1hZ2VOYXRpdmVJbmRleCBmaW5hbAogewogICBwdWJsaWM6CkBAIC0zNzAsNTUgKzM4
MSw0MiBAQCBjbGFzcyBJbWFnZU5hdGl2ZUluZGV4IGZpbmFsCiAgICAgICAgIG1OYXRpdmVJbmRl
eCA9IGdsOjpJbWFnZUluZGV4OjpNYWtlRnJvbVR5cGUoc3JjLmdldFR5cGUoKSwgc3JjLmdldExl
dmVsSW5kZXgoKSAtIGJhc2VMZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzcmMuZ2V0TGF5ZXJJbmRleCgpLCBzcmMuZ2V0TGF5ZXJDb3Vu
dCgpKTsKICAgICB9Ci0KICAgICBzdGF0aWMgSW1hZ2VOYXRpdmVJbmRleCBGcm9tQmFzZVplcm9H
TEluZGV4KGNvbnN0IGdsOjpJbWFnZUluZGV4ICZzcmMpCiAgICAgewogICAgICAgICByZXR1cm4g
SW1hZ2VOYXRpdmVJbmRleChzcmMsIDApOwogICAgIH0KLQogICAgIE1pcG1hcE5hdGl2ZUxldmVs
IGdldE5hdGl2ZUxldmVsKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBNaXBtYXBOYXRp
dmVMZXZlbChtTmF0aXZlSW5kZXguZ2V0TGV2ZWxJbmRleCgpKTsKICAgICB9Ci0KICAgICBnbDo6
VGV4dHVyZVR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5nZXRUeXBl
KCk7IH0KICAgICBHTGludCBnZXRMYXllckluZGV4KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUlu
ZGV4LmdldExheWVySW5kZXgoKTsgfQogICAgIEdMaW50IGdldExheWVyQ291bnQoKSBjb25zdCB7
IHJldHVybiBtTmF0aXZlSW5kZXguZ2V0TGF5ZXJDb3VudCgpOyB9CiAgICAgR0xpbnQgY3ViZU1h
cEZhY2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC5jdWJlTWFwRmFjZUluZGV4
KCk7IH0KLQogICAgIGJvb2wgaXNMYXllcmVkKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4
LmlzTGF5ZXJlZCgpOyB9CiAgICAgYm9vbCBoYXNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRp
dmVJbmRleC5oYXNMYXllcigpOyB9CiAgICAgYm9vbCBoYXMzRExheWVyKCkgY29uc3QgeyByZXR1
cm4gbU5hdGl2ZUluZGV4LmhhczNETGF5ZXIoKTsgfQogICAgIGJvb2wgdXNlc1RleDNEKCkgY29u
c3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnVzZXNUZXgzRCgpOyB9Ci0KICAgICBib29sIHZhbGlk
KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnZhbGlkKCk7IH0KLQogICAgIEltYWdlTmF0
aXZlSW5kZXhJdGVyYXRvciBnZXRMYXllckl0ZXJhdG9yKEdMaW50IGxheWVyQ291bnQpIGNvbnN0
OwotCiAgIHByaXZhdGU6CiAgICAgZ2w6OkltYWdlSW5kZXggbU5hdGl2ZUluZGV4OwogfTsKLQog
Y2xhc3MgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yIGZpbmFsCiB7CiAgIHB1YmxpYzoKICAgICBJ
bWFnZU5hdGl2ZUluZGV4IG5leHQoKSB7IHJldHVybiBJbWFnZU5hdGl2ZUluZGV4KG1OYXRpdmVJ
bmRleEl0ZS5uZXh0KCksIDApOyB9CiAgICAgSW1hZ2VOYXRpdmVJbmRleCBjdXJyZW50KCkgY29u
c3QgeyByZXR1cm4gSW1hZ2VOYXRpdmVJbmRleChtTmF0aXZlSW5kZXhJdGUuY3VycmVudCgpLCAw
KTsgfQogICAgIGJvb2wgaGFzTmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleEl0ZS5o
YXNOZXh0KCk7IH0KLQogICBwcml2YXRlOgogICAgIC8vIFRoaXMgY2xhc3MgaXMgb25seSBjb25z
dHJ1Y3RhYmxlIGZyb20gSW1hZ2VOYXRpdmVJbmRleAogICAgIGZyaWVuZCBjbGFzcyBJbWFnZU5h
dGl2ZUluZGV4OwotCiAgICAgZXhwbGljaXQgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yKGNvbnN0
IGdsOjpJbWFnZUluZGV4SXRlcmF0b3IgJmJhc2VaZXJvU3JjKQogICAgICAgICA6IG1OYXRpdmVJ
bmRleEl0ZShiYXNlWmVyb1NyYykKICAgICB7fQotCiAgICAgZ2w6OkltYWdlSW5kZXhJdGVyYXRv
ciBtTmF0aXZlSW5kZXhJdGU7CiB9OwotCiB1c2luZyBDbGVhckNvbG9yVmFsdWVCeXRlcyA9IHN0
ZDo6YXJyYXk8dWludDhfdCwgNCAqIHNpemVvZihmbG9hdCk+OwotCiBjbGFzcyBDbGVhckNvbG9y
VmFsdWUKIHsKICAgcHVibGljOgpAQCAtNDM3LDIyICs0MzUsMTUgQEAgY2xhc3MgQ2xlYXJDb2xv
clZhbHVlCiAgICAgY29uc3RleHByIENsZWFyQ29sb3JWYWx1ZShjb25zdCBDbGVhckNvbG9yVmFs
dWUgJnNyYykKICAgICAgICAgOiBtVHlwZShzcmMubVR5cGUpLCBtVmFsdWVCeXRlcyhzcmMubVZh
bHVlQnl0ZXMpCiAgICAge30KLQogICAgIE1UTENsZWFyQ29sb3IgdG9NVExDbGVhckNvbG9yKCkg
Y29uc3Q7Ci0KICAgICBQaXhlbFR5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9
Ci0KICAgICBjb25zdCBDbGVhckNvbG9yVmFsdWVCeXRlcyAmZ2V0VmFsdWVCeXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1WYWx1ZUJ5dGVzOyB9Ci0KICAgICBDbGVhckNvbG9yVmFsdWUgJm9wZXJhdG9y
PShjb25zdCBDbGVhckNvbG9yVmFsdWUgJnNyYyk7Ci0KICAgICB2b2lkIHNldEFzRmxvYXQoZmxv
YXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CiAgICAgdm9pZCBzZXRBc0ludChpbnQz
Ml90IHIsIGludDMyX3QgZywgaW50MzJfdCBiLCBpbnQzMl90IGEpOwogICAgIHZvaWQgc2V0QXNV
SW50KHVpbnQzMl90IHIsIHVpbnQzMl90IGcsIHVpbnQzMl90IGIsIHVpbnQzMl90IGEpOwotCiAg
IHByaXZhdGU6CiAgICAgUGl4ZWxUeXBlIG1UeXBlOwotCiAgICAgdW5pb24KICAgICB7CiAgICAg
ICAgIHN0cnVjdApAQCAtNDY3LDcgKzQ1OCw2IEBAIGNsYXNzIENsZWFyQ29sb3JWYWx1ZQogICAg
ICAgICB7CiAgICAgICAgICAgICB1aW50MzJfdCBtUmVkVSwgbUdyZWVuVSwgbUJsdWVVLCBtQWxw
aGFVOwogICAgICAgICB9OwotCiAgICAgICAgIENsZWFyQ29sb3JWYWx1ZUJ5dGVzIG1WYWx1ZUJ5
dGVzOwogICAgIH07CiB9OwpAQCAtNDgzLDcgKzQ3Myw3IEBAIGNsYXNzIEVycm9ySGFuZGxlcgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpID0gMDsKIAotICAgIHZp
cnR1YWwgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9yICpfTnVsbGFibGUgZXJyb3IsCisgICAgdmly
dHVhbCB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IGxpbmUpID0gMDsKQEAgLTQ5Myw3ICs0ODMsNyBAQCBjbGFzcyBDb250ZXh0IDog
cHVibGljIEVycm9ySGFuZGxlcgogewogICBwdWJsaWM6CiAgICAgQ29udGV4dChEaXNwbGF5TXRs
ICpkaXNwbGF5TXRsKTsKLSAgICBfTnVsbGFibGUgaWQ8TVRMRGV2aWNlPiBnZXRNZXRhbERldmlj
ZSgpIGNvbnN0OworICAgIGlkPE1UTERldmljZT4gZ2V0TWV0YWxEZXZpY2UoKSBjb25zdDsKICAg
ICBtdGw6OkNvbW1hbmRRdWV1ZSAmY21kUXVldWUoKTsKIAogICAgIERpc3BsYXlNdGwgKmdldERp
c3BsYXkoKSBjb25zdCB7IHJldHVybiBtRGlzcGxheTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfY29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTIwYjJjZGY3NDRlNjQ2NDExZjlkOGJmYjc5YWQy
ZDIxNzcwMjI3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgKQEAgLTAsMCArMSw3MyBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8vIG10bF9jb21tb24uaDoKKy8vICAgICAgRGVjbGFyZXMgbnVtZXJpY2Fs
IGNvbnN0YW50cyB1c2VkIGluIE1ldGFsLgorLy8gICAgICBlcnJvciBoYW5kbGVyIGJhc2UgY2xh
c3MuCisvLworCisjaWZuZGVmIExJQkFOR0xFX1JFTkRFUkVSX01FVEFMX01UTF9DT05TVEFOVFNf
SAorI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9NVExfQ09OU1RBTlRTX0gKKyNpbmNs
dWRlICJsaWJBTkdMRS9Db25zdGFudHMuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9WZXJzaW9uLmgi
CisjaW5jbHVkZSAibGliQU5HTEUvYW5nbGV0eXBlcy5oIgorCituYW1lc3BhY2UgcngKK3sKK25h
bWVzcGFjZSBtdGwKK3sKKworLy8gTk9URShocWxlKTogc3VwcG9ydCB2YXJpYWJsZSBtYXggbnVt
YmVyIG9mIHZlcnRleCBhdHRyaWJ1dGVzCitjb25zdGV4cHIgdWludDMyX3Qga01heFZlcnRleEF0
dHJpYnMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOworLy8gTk9URShocWxlKTogc3VwcG9ydCB2
YXJpYWJsZSBtYXggbnVtYmVyIG9mIHJlbmRlciB0YXJnZXRzCitjb25zdGV4cHIgdWludDMyX3Qg
a01heFJlbmRlclRhcmdldHMgPSA0OworCitjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlclVC
T3MgPSAxMjsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4VUJPU2l6ZSAgICA9IDE2Mzg0OworCitj
b25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0QXR0cmlidXRlU2l6ZSA9IDQgKiBzaXplb2YoZmxvYXQp
OworCisvLyBNZXRhbCBsaW1pdHMKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyQnVmZmVy
cyAgICAgPSAzMTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyU2FtcGxlcnMgICAgPSAx
NjsKK2NvbnN0ZXhwciBzaXplX3Qga0lubGluZUNvbnN0RGF0YU1heFNpemUgPSA0ICogMTAyNDsK
K2NvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRVbmlmb3Jtc01heFNpemUgPSBrSW5saW5lQ29uc3RE
YXRhTWF4U2l6ZTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4Vmlld3BvcnRzICAgICAgICAgPSAx
OworCitjb25zdGV4cHIgdWludDMyX3Qga1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVu
dCA9IDQ7CisvLyBBbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9yIG9mZnNldCBwYXNzZWQgdG8gc2V0
VmVydGV4fEZyYWdtZW50QnVmZmVyCisjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QKK2NvbnN0ZXhwciB1aW50MzJfdCBrVW5pZm9ybUJ1ZmZlclNldHRpbmdPZmZzZXRN
aW5BbGlnbm1lbnQgPSAyNTY7CisjZWxzZQorY29uc3RleHByIHVpbnQzMl90IGtVbmlmb3JtQnVm
ZmVyU2V0dGluZ09mZnNldE1pbkFsaWdubWVudCA9IDQ7CisjZW5kaWYKK2NvbnN0ZXhwciB1aW50
MzJfdCBrSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OworY29uc3RleHByIHVp
bnQzMl90IGtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCA9IDI1NjsKKworLy8gRm9u
dCBlbmQgYmluZGluZyBsaW1pdHMKK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4R0xTYW1wbGVyQmlu
ZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOworY29uc3RleHByIHVpbnQzMl90IGtNYXhH
TFVCT0JpbmRpbmdzICAgICA9IDIgKiBrTWF4U2hhZGVyVUJPczsKKworLy8gQmluZGluZyBpbmRl
eCBzdGFydCBmb3IgdmVydGV4IGRhdGEgYnVmZmVyczoKK2NvbnN0ZXhwciB1aW50MzJfdCBrVmJv
QmluZGluZ0luZGV4U3RhcnQgPSAwOworCisvLyBCaW5kaW5nIGluZGV4IGZvciBkZWZhdWx0IGF0
dHJpYnV0ZSBidWZmZXI6Citjb25zdGV4cHIgdWludDMyX3Qga0RlZmF1bHRBdHRyaWJzQmluZGlu
Z0luZGV4ID0ga1Zib0JpbmRpbmdJbmRleFN0YXJ0ICsga01heFZlcnRleEF0dHJpYnM7CisvLyBC
aW5kaW5nIGluZGV4IGZvciBkcml2ZXIgdW5pZm9ybXM6Citjb25zdGV4cHIgdWludDMyX3Qga0Ry
aXZlclVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4ICsg
MTsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIGRlZmF1bHQgdW5pZm9ybXM6Citjb25zdGV4cHIgdWlu
dDMyX3Qga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCA9IGtEZWZhdWx0QXR0cmlic0JpbmRp
bmdJbmRleCArIDM7CisvLyBCaW5kaW5nIGluZGV4IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sgQnVm
ZmVycyAoNCkKK2NvbnN0ZXhwciB1aW50MzJfdCBrVHJhbnNmb3JtRmVlZGJhY2tCaW5kaW5nSW5k
ZXggPSBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ICsgMTsKKy8vIEJpbmRpbmcgaW5kZXgg
Zm9yIHNoYWRvdyBzYW1wbGVycycgY29tcGFyZSBtb2RlcworY29uc3RleHByIHVpbnQzMl90IGtT
aGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZlZWRiYWNr
QmluZGluZ0luZGV4ICsgNDsKKy8vIEJpbmRpbmcgaW5kZXggZm9yIFVCTydzIGFyZ3VtZW50IGJ1
ZmZlcgorY29uc3RleHByIHVpbnQzMl90IGtVQk9Bcmd1bWVudEJ1ZmZlckJpbmRpbmdJbmRleCA9
IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ICsgMTsKKworY29uc3RleHBy
IHVpbnQzMl90IGtTdGVuY2lsTWFza0FsbCA9IDB4ZmY7ICAvLyBPbmx5IDggYml0cyBzdGVuY2ls
IGlzIHN1cHBvcnRlZAorCit9ICAvLyBuYW1lc3BhY2UgbXRsCit9ICAvLyBuYW1lc3BhY2UgcngK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFwLmpzb24gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgppbmRl
eCA0YTEyYTkwNzU5YmE5NjUzMzI5ODc2MDE3Nzg2ZTZiZWRjNGRiYjNlLi4yZGE3NDIxYzUxM2Qz
NzAyNDQxMDQ1YTAzMzlmNjFiMTIyYjJlN2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2Zvcm1hdF9tYXAuanNvbgpAQCAtNzQsMTEgKzc0LDExIEBACiAgICAgICAgICAgICAiRDMy
X0ZMT0FUIjogIk1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0IiwKICAgICAgICAgICAgICJTOF9V
SU5UIjogIk1UTFBpeGVsRm9ybWF0U3RlbmNpbDgiLAogICAgICAgICAgICAgIkQzMl9GTE9BVF9T
OFgyNF9VSU5UIjogIk1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0ZW5jaWw4IiwKLSAgICAg
ICAgICAgICJCMTBHMTBSMTBBMl9VTk9STSI6ICJNVExQaXhlbEZvcm1hdEJHUjEwQTJVbm9ybSIs
CiAgICAgICAgICAgICAiUjEwRzEwQjEwQTJfVUlOVCI6ICJNVExQaXhlbEZvcm1hdFJHQjEwQTJV
aW50IiwKICAgICAgICAgICAgICJSMTBHMTBCMTBBMl9VTk9STSI6ICJNVExQaXhlbEZvcm1hdFJH
QjEwQTJVbm9ybSIsCiAgICAgICAgICAgICAiUjExRzExQjEwX0ZMT0FUIjogIk1UTFBpeGVsRm9y
bWF0UkcxMUIxMEZsb2F0IiwKLSAgICAgICAgICAgICJSOUc5QjlFNV9TSEFSRURFWFAiOiAiTVRM
UGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIKKyAgICAgICAgICAgICJSOUc5QjlFNV9TSEFSRURFWFAi
OiAiTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIsCisgICAgICAgICAgICAiRDE2X1VOT1JNIjog
Ik1UTFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtIgogICAgICAgICB9LAogICAgICAgICAibWFwX2lv
cyI6IHsKICAgICAgICAgICAgICJSNUc2QjVfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXRCNUc2UjVV
bm9ybSIsCkBAIC05Miw2ICs5Miw3IEBACiAgICAgICAgICAgICAiUFZSVEMxX1JHQl80QlBQX1VO
T1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JfNEJQUF9zUkdCIiwKICAg
ICAgICAgICAgICJQVlJUQzFfUkdCQV8yQlBQX1VOT1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxG
b3JtYXRQVlJUQ19SR0JBXzJCUFBfc1JHQiIsCiAgICAgICAgICAgICAiUFZSVEMxX1JHQkFfNEJQ
UF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQX3NSR0Ii
LAorICAgICAgICAgICAgIkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
RVRDMl9SR0I4IiwKICAgICAgICAgICAgICJFVEMyX1I4RzhCOF9VTk9STV9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEVUQzJfUkdCOCIsCiAgICAgICAgICAgICAiRVRDMl9SOEc4QjhfU1JHQl9CTE9D
SyI6ICJNVExQaXhlbEZvcm1hdEVUQzJfUkdCOF9zUkdCIiwKICAgICAgICAgICAgICJFVEMyX1I4
RzhCOEExX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4QTEiLApAQCAtMTAw
LDM5ICsxMDEsMzggQEAKICAgICAgICAgICAgICJFVEMyX1I4RzhCOEE4X1NSR0JfQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiIsCiAgICAgICAgICAgICAiRUFDX1IxMV9VTk9S
TV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9ybSIsCiAgICAgICAgICAgICAiRUFD
X1IxMV9TTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SMTFTbm9ybSIsCi0gICAgICAg
ICAgICAiRUFDX1IxMUcxMV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SRzExVW5v
cm0iLAorICAgICAgICAgICAgIkVBQ19SMTFHMTFfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRFQUNfUjExVW5vcm0iLAogICAgICAgICAgICAgIkVBQ19SMTFHMTFfU05PUk1fQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVNub3JtIiwKLSAgICAgICAgICAgICJBU1RDXzR4NF9VTk9S
TV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0X0xEUiIsCi0gICAgICAgICAgICAiQVNU
Q180eDRfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0X3NSR0IiLAotICAgICAg
ICAgICAgIkFTVENfNXg0X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfTERS
IiwKLSAgICAgICAgICAgICJBU1RDXzV4NF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNU
Q181eDRfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ181eDVfVU5PUk1fQkxPQ0siOiAiTVRMUGl4
ZWxGb3JtYXRBU1RDXzV4NV9MRFIiLAotICAgICAgICAgICAgIkFTVENfNXg1X1NSR0JfQkxPQ0si
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKLSAgICAgICAgICAgICJBU1RDXzZ4NV9V
Tk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X0xEUiIsCi0gICAgICAgICAgICAi
QVNUQ182eDVfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X3NSR0IiLAotICAg
ICAgICAgICAgIkFTVENfNng2X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZf
TERSIiwKLSAgICAgICAgICAgICJBU1RDXzZ4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0
QVNUQ182eDZfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ184eDVfVU5PUk1fQkxPQ0siOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzh4NV9MRFIiLAotICAgICAgICAgICAgIkFTVENfOHg1X1NSR0JfQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9zUkdCIiwKLSAgICAgICAgICAgICJBU1RDXzh4
Nl9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg2X0xEUiIsCi0gICAgICAgICAg
ICAiQVNUQ184eDZfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfOHg2X3NSR0IiLAot
ICAgICAgICAgICAgIkFTVENfOHg4X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ184
eDhfTERSIiwKLSAgICAgICAgICAgICJBU1RDXzh4OF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9y
bWF0QVNUQ184eDhfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg1X1VOT1JNX0JMT0NLIjog
Ik1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg1X1NS
R0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfc1JHQiIsCi0gICAgICAgICAgICAi
QVNUQ18xMHg2X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X0xEUiIsCi0g
ICAgICAgICAgICAiQVNUQ18xMHg2X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEw
eDZfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg4X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVs
Rm9ybWF0QVNUQ18xMHg4X0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMHg4X1NSR0JfQkxPQ0si
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDhfc1JHQiIsCi0gICAgICAgICAgICAiQVNUQ18xMHgx
MF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfTERSIiwKLSAgICAgICAg
ICAgICJBU1RDXzEweDEwX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX3NS
R0IiLAotICAgICAgICAgICAgIkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRBU1RDXzEyeDEwX0xEUiIsCi0gICAgICAgICAgICAiQVNUQ18xMngxMF9TUkdCX0JMT0NLIjog
Ik1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9zUkdCIiwKLSAgICAgICAgICAgICJBU1RDXzEyeDEy
X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9MRFIiLAotICAgICAgICAg
ICAgIkFTVENfMTJ4MTJfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JH
QiIKKyAgICAgICAgICAgICJBU1RDXzR4NF9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFT
VENfNHg0X3NSR0IiLAorICAgICAgICAgICAgIkFTVENfNXg0X1NSR0JfQkxPQ0siIDogIk1UTFBp
eGVsRm9ybWF0QVNUQ181eDRfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ181eDVfU1JHQl9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzZ4
NV9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNng1X3NSR0IiLAorICAgICAgICAg
ICAgIkFTVENfNng2X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZfc1JHQiIs
CisgICAgICAgICAgICAiQVNUQ184eDVfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RD
Xzh4NV9zUkdCIiwKKyAgICAgICAgICAgICJBU1RDXzh4Nl9TUkdCX0JMT0NLIiA6ICJNVExQaXhl
bEZvcm1hdEFTVENfOHg2X3NSR0IiLAorICAgICAgICAgICAgIkFTVENfOHg4X1NSR0JfQkxPQ0si
IDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDhfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ18xMHg1
X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0IiLAorICAgICAgICAg
ICAgIkFTVENfMTB4Nl9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4Nl9zUkdC
IiwKKyAgICAgICAgICAgICJBU1RDXzEweDhfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRB
U1RDXzEweDhfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ18xMHgxMF9TUkdCX0JMT0NLIiA6ICJN
VExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiIsCisgICAgICAgICAgICAiQVNUQ18xMngxMF9T
UkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfc1JHQiIsCisgICAgICAgICAg
ICAiQVNUQ18xMngxMl9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JH
QiIsCisgICAgICAgICAgICAiQVNUQ180eDRfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0
QVNUQ180eDRfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzV4NF9VTk9STV9CTE9DSyIgOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzV4NF9MRFIiLAorICAgICAgICAgICAgIkFTVENfNXg1X1VOT1JNX0JM
T0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfNXg1X0xEUiIsCisgICAgICAgICAgICAiQVNUQ182
eDVfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDVfTERSIiwKKyAgICAgICAg
ICAgICJBU1RDXzZ4Nl9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9MRFIi
LAorICAgICAgICAgICAgIkFTVENfOHg1X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFT
VENfOHg1X0xEUiIsCisgICAgICAgICAgICAiQVNUQ184eDZfVU5PUk1fQkxPQ0siIDogIk1UTFBp
eGVsRm9ybWF0QVNUQ184eDZfTERSIiwKKyAgICAgICAgICAgICJBU1RDXzh4OF9VTk9STV9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9MRFIiLAorICAgICAgICAgICAgIkFTVENfMTB4
NV9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfTERSIiwKKyAgICAgICAg
ICAgICJBU1RDXzEweDZfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X0xE
UiIsCisgICAgICAgICAgICAiQVNUQ18xMHg4X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1h
dEFTVENfMTB4OF9MRFIiLAorICAgICAgICAgICAgIkFTVENfMTB4MTBfVU5PUk1fQkxPQ0siIDog
Ik1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9MRFIiLAorICAgICAgICAgICAgIkFTVENfMTJ4MTBf
VU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMF9MRFIiLAorICAgICAgICAg
ICAgIkFTVENfMTJ4MTJfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9M
RFIiCiAgICAgICAgIH0sCiAgICAgICAgICJtYXBfbWFjIjogewotICAgICAgICAgICAgIkQxNl9V
Tk9STSI6ICJNVExQaXhlbEZvcm1hdERlcHRoMTZVbm9ybSIsCiAgICAgICAgICAgICAiRDI0X1VO
T1JNX1M4X1VJTlQiOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDI0VW5vcm1fU3RlbmNpbDgiLAogICAg
ICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QkMxX1JHQkEi
LAogICAgICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRCQzFfUkdCQV9zUkdCIiwKQEAgLTE3NSw5ICsxNzUsNyBAQAogICAgICAgICAgICAgIkQzMl9V
Tk9STSI6ICJEMzJfRkxPQVQiCiAgICAgICAgIH0sCiAgICAgICAgICJvdmVycmlkZV9pb3MiOiB7
Ci0gICAgICAgICAgICAiRDI0X1VOT1JNX1M4X1VJTlQiOiAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQi
LAotICAgICAgICAgICAgIkQxNl9VTk9STSI6ICJEMzJfRkxPQVQiLAotICAgICAgICAgICAgIkVU
QzFfUjhHOEI4X1VOT1JNX0JMT0NLIjogIkVUQzJfUjhHOEI4X1VOT1JNX0JMT0NLIgorICAgICAg
ICAgICAgIkQyNF9VTk9STV9TOF9VSU5UIjogIkQzMl9GTE9BVF9TOFgyNF9VSU5UIgogICAgICAg
ICB9LAogICAgICAgICAib3ZlcnJpZGVfbWFjIjogewogICAgICAgICAgICAgIlI1RzZCNV9VTk9S
TSI6ICJSOEc4QjhBOF9VTk9STSIsCkBAIC0yMDMsNyArMjAxLDggQEAKICAgICAgICAgICAgICJF
QUNfUjExRzExX1VOT1JNX0JMT0NLIjogIlIxNkcxNl9VTk9STSIsCiAgICAgICAgICAgICAiRUFD
X1IxMUcxMV9TTk9STV9CTE9DSyI6ICJSMTZHMTZfU05PUk0iCiAgICAgICAgIH0sCi0gICAgICAg
ICJkMjRzOF9mYWxsYmFja3NfbWFjIjogeworICAgICAgICAiZmFsbGJhY2tzX21hYyI6IHsKKyAg
ICAgICAgICAgICJCOEc4UjhBOF9VTk9STSI6ICJSOEc4QjhBOF9VTk9STSIsCiAgICAgICAgICAg
ICAiRDI0X1VOT1JNX1M4X1VJTlQiOiAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQiCiAgICAgICAgIH0s
CiAgICAgICAgICJjYXBzIjogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Zm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0KaW5kZXggYzIxYzU5M2YyMjg4NWY1ODk2ODlhNTA5Nzk3
OTgxYzZiYmI4NDNjNC4uZDNlYTViMDEyY2YwMzg5YjZhZDU0MTg2M2NlMzA0ZjU5ODAzMjQ0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF90YWJsZV9hdXRv
Z2VuLm1tCkBAIC0yNyw4ICsyNyw3IEBAIG5hbWVzcGFjZSBtdGwKIAogdm9pZCBGb3JtYXQ6Omlu
aXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9y
bWF0SWRfKQogewotICAgIHRoaXMtPmludGVuZGVkRm9ybWF0SWQgPSBpbnRlbmRlZEZvcm1hdElk
XzsKLQorICAgIHRoaXMtPmludGVuZGVkRm9ybWF0SWQgICAgPSBpbnRlbmRlZEZvcm1hdElkXzsK
ICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0TWV0YWxEZXZpY2Uo
KTsKIAogICAgIC8vIEFjdHVhbCBjb252ZXJzaW9uCkBAIC00MywxNSArNDIsMjYgQEAgdm9pZCBG
b3JtYXQ6OmluaXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGlu
dGVuZGVkRm9ybWF0SWRfKQogICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKICAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpCMTBHMTBS
MTBBMl9VTk9STToKKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAor
ICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk06CiAKLSAgICAgICAg
ICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm07Ci0g
ICAgICAgICAgICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6QjEwRzEw
UjEwQTJfVU5PUk07Ci0gICAgICAgICAgICB0aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7
CisgICAgICAgICAgICBpZiAobWV0YWxEZXZpY2UuZGVwdGgyNFN0ZW5jaWw4UGl4ZWxGb3JtYXRT
dXBwb3J0ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3Jt
YXQgICAgPSBNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm07CisgICAgICAgICAgICAgICAgdGhpcy0+
YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNOworICAgICAg
ICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5t
ZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybTsKKyAgICAgICAgICAgICAg
ICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4QThfVU5PUk07
CisgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7CiAKKyNlbHNlICAvLyBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRB
TFlTVAogICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk06CiAKICAg
ICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3Jt
OwpAQCAtNjEsNiArNzEsNyBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpk
aXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAgICAgICAgICB0
aGlzLT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKKyNlbmRpZiAgLy8g
VEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKICAgICAgICAgY2FzZSBhbmds
ZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNX1NSR0I6CiAKICAgICAgICAgICAgIHRoaXMtPm1l
dGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtX3NSR0I7CkBAIC03MCw2ICs4
MSwzNiBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmds
ZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAgICAgICAgICB0aGlzLT5zd2l6emxl
ZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRB
UkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VO
T1JNOgorCisgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0
RGVwdGgxNlVub3JtOworICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6
Rm9ybWF0SUQ6OkQxNl9VTk9STTsKKyAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0g
bnVsbHB0cjsKKworICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworCisjZWxzZSAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKKyAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STToKKworICAgICAg
ICAgICAgaWYgKFttZXRhbERldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTNd
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0g
TVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm07CisgICAgICAgICAgICAgICAgdGhpcy0+YWN0dWFs
Rm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STTsKKyAgICAgICAgICAgICAgICB0
aGlzLT5pbml0RnVuY3Rpb24gICA9IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQg
ICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdDsKKyAgICAgICAgICAgICAgICB0aGlzLT5h
Y3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUOworICAgICAgICAgICAg
ICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworCisj
ZW5kaWYgIC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCiAgICAgICAg
IGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ6CiAKICAgICAgICAgICAgIHRoaXMtPm1l
dGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQ7CkBAIC04MTUsMTUgKzg1
Niw2IEBAIHZvaWQgRm9ybWF0Ojppbml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xl
OjpGb3JtYXRJRCBpbnRlbmRlZEZvcm1hdElkXykKICAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVk
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIGFuZ2xlOjpGb3Jt
YXRJRDo6RDE2X1VOT1JNOgotCi0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1U
TFBpeGVsRm9ybWF0RGVwdGgxNlVub3JtOwotICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0
SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STTsKLSAgICAgICAgICAgIHRoaXMtPmluaXRG
dW5jdGlvbiAgID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpE
MjRfVU5PUk1fUzhfVUlOVDoKIAogICAgICAgICAgICAgaWYgKG1ldGFsRGV2aWNlLmRlcHRoMjRT
dGVuY2lsOFBpeGVsRm9ybWF0U3VwcG9ydGVkICYmCkBAIC0xMjgxLDcgKzEzMTMsNyBAQCB2b2lk
IEZvcm1hdDo6aW5pdChjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQg
aW50ZW5kZWRGb3JtYXRJZF8pCiAKICAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVBQ19S
MTFHMTFfVU5PUk1fQkxPQ0s6CiAKLSAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0g
TVRMUGl4ZWxGb3JtYXRFQUNfUkcxMVVub3JtOworICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3Jt
YXQgICAgPSBNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9ybTsKICAgICAgICAgICAgIHRoaXMtPmFj
dHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFQUNfUjExRzExX1VOT1JNX0JMT0NLOwog
ICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOwogCkBAIC0xMzA2LDYg
KzEzMzgsMTUgQEAgdm9pZCBGb3JtYXQ6OmluaXQoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSwg
YW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9ybWF0SWRfKQogICAgICAgICAgICAgdGhpcy0+c3dp
enpsZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgYW5nbGU6
OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9STV9CTE9DSzoKKworICAgICAgICAgICAgdGhpcy0+
bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdEVUQzJfUkdCODsKKyAgICAgICAgICAgIHRo
aXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9STV9C
TE9DSzsKKyAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKworICAg
ICAgICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworCiAg
ICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpFVEMyX1I4RzhCOEExX1NSR0JfQkxPQ0s6CiAK
ICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRFVEMyX1JH
QjhBMV9zUkdCOwpAQCAtMTQ1OSwxNSArMTUwMCw2IEBAIHZvaWQgRm9ybWF0Ojppbml0KGNvbnN0
IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBpbnRlbmRlZEZvcm1hdElkXykK
ICAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOgotCi0gICAgICAgICAg
ICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0OwotICAg
ICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQzMl9GTE9B
VDsKLSAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKLQotICAgICAg
ICAgICAgdGhpcy0+c3dpenpsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAg
ICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMjRfVU5PUk1fUzhfVUlOVDoKIAogICAgICAgICAg
ICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVu
Y2lsODsKQEAgLTE0NzcsMTUgKzE1MDksNiBAQCB2b2lkIEZvcm1hdDo6aW5pdChjb25zdCBEaXNw
bGF5TXRsICpkaXNwbGF5LCBhbmdsZTo6Rm9ybWF0SUQgaW50ZW5kZWRGb3JtYXRJZF8pCiAgICAg
ICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLOgotCi0g
ICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4
OwotICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkVU
QzJfUjhHOEI4X1VOT1JNX0JMT0NLOwotICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAg
PSBudWxscHRyOwotCi0gICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KICNlbmRpZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0
ICAgID0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Zm9ybWF0X3V0aWxzLmgKaW5kZXggYmJiMjdkNGZlZWQ0YzA2N2FmYWY3MjY3MWU3NmJmNGE0N2E1
NTMwOS4uZjM5NjgxZDNhOGM2NzkzYzg0ZjViNTI0MTg2YmM4ZGIwODcxZGExYSAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9mb3JtYXRfdXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oCkBAIC00OCwxMyArNDgsMTggQEAg
c3RydWN0IEZvcm1hdENhcHMKIHsKICAgICBib29sIGlzUmVuZGVyYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIGNvbG9yUmVuZGVyYWJsZSB8fCBkZXB0aFJlbmRlcmFibGU7IH0KIAotICAgIGJvb2wgZmls
dGVyYWJsZSAgICAgID0gZmFsc2U7Ci0gICAgYm9vbCB3cml0YWJsZSAgICAgICAgPSBmYWxzZTsK
LSAgICBib29sIGNvbG9yUmVuZGVyYWJsZSA9IGZhbHNlOwotICAgIGJvb2wgZGVwdGhSZW5kZXJh
YmxlID0gZmFsc2U7Ci0gICAgYm9vbCBibGVuZGFibGUgICAgICAgPSBmYWxzZTsKLSAgICBib29s
IG11bHRpc2FtcGxlICAgICA9IGZhbHNlOyAgLy8gY2FuIGJlIHVzZWQgYXMgTVNBQSB0YXJnZXQK
LSAgICBib29sIHJlc29sdmUgICAgICAgICA9IGZhbHNlOyAgLy8gQ2FuIGJlIHVzZWQgYXMgcmVz
b2x2ZSB0YXJnZXQKKyAgICBib29sIGZpbHRlcmFibGUgICAgICAgICAgID0gZmFsc2U7CisgICAg
Ym9vbCB3cml0YWJsZSAgICAgICAgICAgICA9IGZhbHNlOworICAgIGJvb2wgY29sb3JSZW5kZXJh
YmxlICAgICAgPSBmYWxzZTsKKyAgICBib29sIGRlcHRoUmVuZGVyYWJsZSAgICAgID0gZmFsc2U7
CisgICAgYm9vbCBibGVuZGFibGUgICAgICAgICAgICA9IGZhbHNlOworICAgIGJvb2wgbXVsdGlz
YW1wbGUgICAgICAgICAgPSBmYWxzZTsgIC8vIGNhbiBiZSB1c2VkIGFzIE1TQUEgdGFyZ2V0Cisg
ICAgYm9vbCByZXNvbHZlICAgICAgICAgICAgICA9IGZhbHNlOyAgLy8gQ2FuIGJlIHVzZWQgYXMg
cmVzb2x2ZSB0YXJnZXQKKyAgICBib29sIGNvbXByZXNzZWQgICAgICAgICAgID0gZmFsc2U7Cisg
ICAgTlNVSW50ZWdlciBwaXhlbEJ5dGVzICAgICA9IDA7CisgICAgTlNVSW50ZWdlciBwaXhlbEJ5
dGVzTVNBQSA9IDA7CisgICAgTlNVSW50ZWdlciBjaGFubmVscyAgICAgICA9IDA7CisgICAgdWlu
dDhfdCBhbGlnbm1lbnQgICAgICAgICA9IDA7CiB9OwogCiAvLyBQaXhlbCBmb3JtYXQKQEAgLTE0
Myw2ICsxNDgsNyBAQCBjbGFzcyBGb3JtYXRUYWJsZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJs
ZQogICBwcml2YXRlOgogICAgIHZvaWQgaW5pdE5hdGl2ZUZvcm1hdENhcHNBdXRvZ2VuKGNvbnN0
IERpc3BsYXlNdGwgKmRpc3BsYXkpOwogICAgIHZvaWQgaW5pdE5hdGl2ZUZvcm1hdENhcHMoY29u
c3QgRGlzcGxheU10bCAqZGlzcGxheSk7CisKICAgICB2b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXQgZm9ybWF0SWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKQEAgLTE1MCw2ICsxNTYs
MTcgQEAgY2xhc3MgRm9ybWF0VGFibGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZXNvbHZlLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVy
YWJsZSk7CisKKyAgICB2b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQs
CisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB3cml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVu
ZGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGUsCisgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjb2xvclJlbmRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgYnl0
ZXNQZXJDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGNoYW5uZWxz
KTsKKwogICAgIHZvaWQgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAogICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHdyaXRhYmxlLApAQCAtMTU5LDggKzE3NiwyNCBAQCBjbGFzcyBGb3JtYXRUYWJs
ZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNvbG9yUmVuZGVyYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRl
cmFibGUpOwogCisgICAgdm9pZCBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElk
LAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxl
bmRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlLAorICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHJlc29sdmUsCisgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgY29sb3JSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlcHRoUmVu
ZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBieXRlc1BlckNoYW5u
ZWwsCisgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY2hhbm5lbHMpOworCiAgICAg
dm9pZCBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwgYm9v
bCBmaWx0ZXJhYmxlKTsKIAorICAgIHZvaWQgYWRqdXN0Rm9ybWF0Q2Fwc0ZvckRldmljZShpZDxN
VExEZXZpY2U+IGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRM
UGl4ZWxGb3JtYXQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c3VwcG9ydHNpT1MyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1
cHBvcnRzaU9TNCk7CisKICAgICBzdGQ6OmFycmF5PEZvcm1hdCwgYW5nbGU6OmtOdW1BTkdMRUZv
cm1hdHM+IG1QaXhlbEZvcm1hdFRhYmxlOwogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxNVExQaXhl
bEZvcm1hdCwgRm9ybWF0Q2Fwcz4gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlOwogICAgIC8v
IE9uZSBmb3IgdGlnaHRseSBwYWNrZWQgYnVmZmVycywgb25lIGZvciBnZW5lcmFsIGNhc2VzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9mb3JtYXRfdXRpbHMubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5tbQppbmRleCBmYjFkNWNh
OGJjMmZlYmE0NDllYTM1YjQ4YTQyYjkzNTMyOGFmNjIxLi40MTZhZDVjN2ZmMTQxNjhlMDk3OGJi
YzdiN2UxYzg4NjlmNmU3YTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5tbQorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1h
dF91dGlscy5tbQpAQCAtNzcsOCArNzcsOCBAQCB2b2lkIEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAo
Y29uc3QgRm9ybWF0VGFibGUgJmZvcm1hdFRhYmxlLAogICAgICAgICAgICAgdGV4dHVyZUNhcHMu
cmVuZGVyYnVmZmVyID0KICAgICAgICAgICAgICAgICBtdGxGb3JtYXQuZ2V0Q2FwcygpLmNvbG9y
UmVuZGVyYWJsZSB8fCBtdGxGb3JtYXQuZ2V0Q2FwcygpLmRlcHRoUmVuZGVyYWJsZTsKICAgICAg
ICAgICAgIHRleHR1cmVDYXBzLnRleHR1cmFibGUgICAgICAgID0gdHJ1ZTsKLSAgICAgICAgICAg
IHRleHR1cmVDYXBzLmJsZW5kYWJsZSAgICAgICAgID0gbXRsRm9ybWF0LmdldENhcHMoKS5ibGVu
ZGFibGU7CiAgICAgICAgICAgICB0ZXh0dXJlQ2Fwcy50ZXh0dXJlQXR0YWNobWVudCA9IHRleHR1
cmVDYXBzLnJlbmRlcmJ1ZmZlcjsKKyAgICAgICAgICAgIHRleHR1cmVDYXBzLmJsZW5kYWJsZSAg
ICAgICAgID0gbXRsRm9ybWF0LmdldENhcHMoKS5ibGVuZGFibGU7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoZm9ybWF0Q2Fwcy5tdWx0aXNhbXBsZSkKQEAgLTE0OCwxMiArMTQ4LDYgQEAgYm9v
bCBGb3JtYXQ6Om5lZWRDb252ZXJzaW9uKGFuZ2xlOjpGb3JtYXRJRCBzcmNGb3JtYXRJZCkgY29u
c3QKICAgICAgICAgLy8gV2ViR0wgYWxsb3dzIHVuc3dpenpsZWQgbWFwcGluZyB3aGVuIHN3aXp6
bGluZyBpcyBub3QgYXZhaWxhYmxlLiBObyBuZWVkIHRvIGNvbnZlcnQuCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHNyY0Zvcm1hdElkID09IGFuZ2xlOjpGb3JtYXRJRDo6
RVRDMV9SOEc4QjhfVU5PUk1fQkxPQ0sgJiYKLSAgICAgICAgYWN0dWFsRm9ybWF0SWQgPT0gYW5n
bGU6OkZvcm1hdElEOjpFVEMyX1I4RzhCOF9VTk9STV9CTE9DSykKLSAgICB7Ci0gICAgICAgIC8v
IEVUQzEgUkdCICYgRVRDMiBSR0IgYXJlIHRlY2huaWNhbGx5IHRoZSBzYW1lLgotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQogICAgIHJldHVybiBzcmNGb3JtYXRJZCAhPSBhY3R1YWxGb3Jt
YXRJZDsKIH0KIApAQCAtMTkyLDggKzE4Niw3IEBAIGFuZ2xlOjpSZXN1bHQgRm9ybWF0VGFibGU6
OmluaXRpYWxpemUoY29uc3QgRGlzcGxheU10bCAqZGlzcGxheSkKICAgICAgICAgbVBpeGVsRm9y
bWF0VGFibGVbaV0uaW5pdChkaXNwbGF5LCBmb3JtYXRJZCk7CiAgICAgICAgIG1QaXhlbEZvcm1h
dFRhYmxlW2ldLmNhcHMgPSAmbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW21QaXhlbEZvcm1h
dFRhYmxlW2ldLm1ldGFsRm9ybWF0XTsKIAotICAgICAgICBpZiAoIW1QaXhlbEZvcm1hdFRhYmxl
W2ldLmNhcHMtPmRlcHRoUmVuZGVyYWJsZSAmJgotICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFi
bGVbaV0uYWN0dWFsRm9ybWF0SWQgIT0gbVBpeGVsRm9ybWF0VGFibGVbaV0uaW50ZW5kZWRGb3Jt
YXRJZCkKKyAgICAgICAgaWYgKG1QaXhlbEZvcm1hdFRhYmxlW2ldLmFjdHVhbEZvcm1hdElkICE9
IG1QaXhlbEZvcm1hdFRhYmxlW2ldLmludGVuZGVkRm9ybWF0SWQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ldLnRleHR1cmVMb2FkRnVuY3Rpb25zID0gYW5nbGU6
OkdldExvYWRGdW5jdGlvbnNNYXAoCiAgICAgICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVb
aV0uaW50ZW5kZWRBbmdsZUZvcm1hdCgpLmdsSW50ZXJuYWxGb3JtYXQsCkBAIC0yMDQsNiArMTk3
LDE5IEBAIGFuZ2xlOjpSZXN1bHQgRm9ybWF0VGFibGU6OmluaXRpYWxpemUoY29uc3QgRGlzcGxh
eU10bCAqZGlzcGxheSkKICAgICAgICAgbVZlcnRleEZvcm1hdFRhYmxlc1sxXVtpXS5pbml0KGZv
cm1hdElkLCB0cnVlKTsKICAgICB9CiAKKyAgICAvLyBOT1RFKGhxbGUpOiBXb3JrLWFyb3VuZCBB
TUQncyBpc3N1ZSB0aGF0IEQyNFM4IGZvcm1hdCBzb21ldGltZXMgcmV0dXJucyB6ZXJvIGR1cmlu
ZyBzYW1wbGluZzoKKyAgICBpZiAoZGlzcGxheS0+Z2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpLmZp
bmQoIkFNRCIpICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIHsKKyAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gRDMyX0ZMT0FUX1M4WDI0X1VJTlQuCisgICAgICAgIEZvcm1hdCAmZm9ybWF0ID0KKyAg
ICAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW3N0YXRpY19jYXN0PHVpbnQzMl90PihhbmdsZTo6
Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UKV07CisgICAgICAgIGZvcm1hdC5hY3R1YWxGb3Jt
YXRJZCAgICAgICA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ7CisgICAg
ICAgIGZvcm1hdC5tZXRhbEZvcm1hdCAgICAgICAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZs
b2F0X1N0ZW5jaWw4OworICAgICAgICBmb3JtYXQuaW5pdEZ1bmN0aW9uICAgICAgICAgPSBudWxs
cHRyOworICAgICAgICBmb3JtYXQudGV4dHVyZUxvYWRGdW5jdGlvbnMgPSBudWxscHRyOworICAg
ICAgICBmb3JtYXQuY2FwcyA9ICZtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbTVRMUGl4ZWxG
b3JtYXREZXB0aDMyRmxvYXRfU3RlbmNpbDhdOworICAgIH0KKwogICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKIH0KIApAQCAtMjM5LDEwICsyNDUsMjMgQEAgdm9pZCBGb3JtYXRU
YWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUpCiB7CiAgICAgc2V0Rm9y
bWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgd3JpdGFibGUsIGJsZW5kYWJsZSwgbXVsdGlz
YW1wbGUsIHJlc29sdmUsIGNvbG9yUmVuZGVyYWJsZSwKLSAgICAgICAgICAgICAgICAgIGZhbHNl
KTsKKyAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKK30KK3ZvaWQgRm9ybWF0VGFibGU6OnNl
dEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCB3cml0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBibGVuZGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlz
YW1wbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzb2x2ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVscykKK3sKKyAgICBz
ZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBmaWx0ZXJhYmxlLCB3cml0YWJsZSwgYmxlbmRhYmxlLCBt
dWx0aXNhbXBsZSwgcmVzb2x2ZSwgY29sb3JSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAg
ZmFsc2UsIHBpeGVsQnl0ZXMsIGNoYW5uZWxzKTsKIH0KIAotdm9pZCBGb3JtYXRUYWJsZTo6c2V0
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKK3ZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCB3cml0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVu
ZGFibGUsCkBAIC0yNTAsNiArMjY5LDIwIEBAIHZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXQgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcmVzb2x2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJl
bmRlcmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhSZW5k
ZXJhYmxlKQoreworICAgIHNldEZvcm1hdENhcHMoZm9ybWF0SWQsIGZpbHRlcmFibGUsIHdyaXRh
YmxlLCBibGVuZGFibGUsIG11bHRpc2FtcGxlLCByZXNvbHZlLCBjb2xvclJlbmRlcmFibGUsCisg
ICAgICAgICAgICAgICAgICBkZXB0aFJlbmRlcmFibGUsIDAsIDApOworfQordm9pZCBGb3JtYXRU
YWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHdyaXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGJsZW5kYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0
aXNhbXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVyYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRlcmFibGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVscykKIHsKICAgICBt
TmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmZpbHRlcmFibGUgICAgICA9IGZpbHRlcmFi
bGU7CiAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS53cml0YWJsZSAgICAgICAg
PSB3cml0YWJsZTsKQEAgLTI1OCw2ICsyOTEsMTEgQEAgdm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBpZCwKICAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFi
bGVbaWRdLmJsZW5kYWJsZSAgICAgICA9IGJsZW5kYWJsZTsKICAgICBtTmF0aXZlUGl4ZWxGb3Jt
YXRDYXBzVGFibGVbaWRdLm11bHRpc2FtcGxlICAgICA9IG11bHRpc2FtcGxlOwogICAgIG1OYXRp
dmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucmVzb2x2ZSAgICAgICAgID0gcmVzb2x2ZTsKKyAg
ICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXMgICAgICA9IHBpeGVs
Qnl0ZXM7CisgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzTVNB
QSAgPSBwaXhlbEJ5dGVzOworICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hh
bm5lbHMgICAgICAgID0gY2hhbm5lbHM7CisgICAgaWYgKGNoYW5uZWxzICE9IDApCisgICAgICAg
IG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uYWxpZ25tZW50ID0gTUFYKHBpeGVsQnl0
ZXMgLyBjaGFubmVscywgMVUpOwogfQogCiB2b2lkIEZvcm1hdFRhYmxlOjpzZXRDb21wcmVzc2Vk
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJZCwgYm9vbCBmaWx0ZXJhYmxlKQpAQCAt
MjY1LDkgKzMwMywyNzQgQEAgdm9pZCBGb3JtYXRUYWJsZTo6c2V0Q29tcHJlc3NlZEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsIGJvb2wgZmlsdGVyYWIKICAgICBzZXRGb3JtYXRD
YXBzKGZvcm1hdElkLCBmaWx0ZXJhYmxlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs
c2UsIGZhbHNlKTsKIH0KIAordm9pZCBGb3JtYXRUYWJsZTo6YWRqdXN0Rm9ybWF0Q2Fwc0ZvckRl
dmljZShpZDxNVExEZXZpY2U+IGRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTVRMUGl4ZWxGb3JtYXQgaWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNpT1MyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1cHBvcnRzaU9TNCkKK3sKKyNpZiAh
KFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUKQorCisgICAgTlNVSW50ZWdl
ciBwaXhlbEJ5dGVzUmVuZGVyICAgICA9IG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0u
cGl4ZWxCeXRlczsKKyAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXNSZW5kZXJNU0FBID0gbU5hdGl2
ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzTVNBQTsKKyAgICBOU1VJbnRlZ2Vy
IGFsaWdubWVudCAgICAgICAgICAgID0gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5h
bGlnbm1lbnQ7CisKKy8vIE92ZXJyaWRlIHRoZSBjdXJyZW50IHBpeGVsQnl0ZXNSZW5kZXIKKyMg
ICAgZGVmaW5lIFNQRUNJRklDKF9waXhlbEZvcm1hdCwgX3BpeGVsQnl0ZXNSZW5kZXIpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNhc2UgX3Bp
eGVsRm9ybWF0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAg
ICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXJNU0FBID0gX3BpeGVsQnl0
ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBhbGlnbm1lbnQgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IHN1cHBvcnRzaU9TNCA/IF9waXhlbEJ5dGVzUmVuZGVyIC8gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fw
c1RhYmxlW2lkXS5jaGFubmVscyA6IDQ7IFwKKyAgICAgICAgICAgIGJyZWFrCisvLyBPdmVycmlk
ZSB0aGUgY3VycmVudCBwaXhlbCBieXRlcyByZW5kZXIsIGFuZCBNU0FBCisjICAgIGRlZmluZSBT
UEVDSUZJQ19NU0FBKF9waXhlbEZvcm1hdCwgX3BpeGVsQnl0ZXNSZW5kZXIsIF9waXhlbEJ5dGVz
UmVuZGVyTVNBQSkgICAgICAgICAgICAgICAgXAorICAgICAgICBjYXNlIF9waXhlbEZvcm1hdDog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gX3BpeGVs
Qnl0ZXNSZW5kZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyTVNBQSA9IF9waXhlbEJ5dGVzUmVuZGVyTVNB
QTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
YWxpZ25tZW50ID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBzdXBwb3J0c2lP
UzQgPyBfcGl4ZWxCeXRlc1JlbmRlciAvIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0u
Y2hhbm5lbHMgOiA0OyBcCisgICAgICAgICAgICBicmVhaworLy8gT3ZlcnJpZGUgdGhlIGN1cnJl
bnQgcGl4ZWxCeXRlc1JlbmRlciwgYW5kIGFsaWdubWVudAorIyAgICBkZWZpbmUgU1BFQ0lGSUNf
QUxJR04oX3BpeGVsRm9ybWF0LCBfcGl4ZWxCeXRlc1JlbmRlciwgX2FsaWdubWVudCkgXAorICAg
ICAgICBjYXNlIF9waXhlbEZvcm1hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBfcGl4ZWxC
eXRlc1JlbmRlcjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcGl4ZWxCeXRlc1Jl
bmRlck1TQUEgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgYWxpZ25tZW50ICAgICAgICAgICAgPSBfYWxpZ25tZW50OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWsKKworICAgIGlmICghbU5hdGl2ZVBpeGVsRm9y
bWF0Q2Fwc1RhYmxlW2lkXS5jb21wcmVzc2VkKQorICAgIHsKKyAgICAgICAgLy8gT24gQXBwbGVH
UFVGYW1pbHk0KywgdGhlcmUgaXMgbm8gNGJ5dGUgbWluaW11bSByZXF1aXJlbWVudCBmb3IgcmVu
ZGVyIHRhcmdldHMKKyAgICAgICAgdWludDMyX3QgbWluU2l6ZSAgICAgPSBzdXBwb3J0c2lPUzQg
PyAxVSA6IDRVOworICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyICAgICA9IE1BWChtTmF0aXZlUGl4
ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXMsIG1pblNpemUpOworICAgICAgICBwaXhl
bEJ5dGVzUmVuZGVyTVNBQSA9IHBpeGVsQnl0ZXNSZW5kZXI7CisgICAgICAgIGFsaWdubWVudCA9
CisgICAgICAgICAgICBzdXBwb3J0c2lPUzQgPyBNQVgocGl4ZWxCeXRlc1JlbmRlciAvIG1OYXRp
dmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5lbHMsIDFVKSA6IDQ7CisgICAgfQorCisg
ICAgLy8gVGhpcyBsaXN0IG9mIHRhYmxlcyBzdGFydHMgZnJvbSBhIGdlbmVyYWwgbXVsdGktcGxh
dGZvcm0gdGFibGUsCisgICAgLy8gdG8gc3BlY2lmaWMgcGxhdGZvcm1zIChpLmUuIGlvczIsIGlv
czQpIGluaGVyaXRpbmcgZnJvbSB0aGUgcHJldmlvdXMgdGFibGVzCisKKyAgICAvLyBTdGFydCBv
ZmYgd2l0aCB0aGUgZ2VuZXJhbCBjYXNlCisgICAgc3dpdGNoICgoTlNVSW50ZWdlcilpZCkKKyAg
ICB7CisgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QjVHNlI1VW5vcm0sIDRVKTsKKyAg
ICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgNFUpOworICAgICAgICBT
UEVDSUZJQyhNVExQaXhlbEZvcm1hdEFCR1I0VW5vcm0sIDRVKTsKKyAgICAgICAgU1BFQ0lGSUMo
TVRMUGl4ZWxGb3JtYXRCR1I1QTFVbm9ybSwgNFUpOworCisgICAgICAgIFNQRUNJRklDKE1UTFBp
eGVsRm9ybWF0UkdCQThVbm9ybSwgNFUpOworICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1h
dEJHUkE4VW5vcm0sIDRVKTsKKworICAgICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0
UkdCQThVbm9ybV9zUkdCLCA0VSwgOFUpOworICAgICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVs
Rm9ybWF0QkdSQThVbm9ybV9zUkdCLCA0VSwgOFUpOworICAgICAgICBTUEVDSUZJQ19NU0FBKE1U
TFBpeGVsRm9ybWF0UkdCQThTbm9ybSwgNFUsIDhVKTsKKyAgICAgICAgU1BFQ0lGSUNfTVNBQShN
VExQaXhlbEZvcm1hdFJHQjEwQTJVaW50LCA0VSwgOFUpOworCisgICAgICAgIFNQRUNJRklDKE1U
TFBpeGVsRm9ybWF0UkdCMTBBMlVub3JtLCA4VSk7CisgICAgICAgIFNQRUNJRklDKE1UTFBpeGVs
Rm9ybWF0QkdSMTBBMlVub3JtLCA4VSk7CisKKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3Jt
YXRSRzExQjEwRmxvYXQsIDhVKTsKKworICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJH
QjlFNUZsb2F0LCA4VSk7CisKKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRTdGVuY2ls
OCwgMVUpOworICAgIH0KKworICAgIC8vIE92ZXJyaWRlIGJhc2VkIGlvczIKKyAgICBpZiAoc3Vw
cG9ydHNpT1MyKQorICAgIHsKKyAgICAgICAgc3dpdGNoICgoTlNVSW50ZWdlcilpZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRCNUc2UjVVbm9ybSwgOFUp
OworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgOFUpOwor
ICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBQkdSNFVub3JtLCA4VSk7CisgICAg
ICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUjVBMVVub3JtLCA4VSk7CisgICAgICAg
ICAgICBTUEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwgNFUsIDhVKTsKKyAg
ICAgICAgICAgIFNQRUNJRklDX01TQUEoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtLCA0VSwgOFUp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gT3ZlcnJpZGUgYmFzZWQgb24gaW9zNAorICAg
IGlmIChzdXBwb3J0c2lPUzQpCisgICAgeworICAgICAgICBzd2l0Y2ggKChOU1VJbnRlZ2VyKWlk
KQorICAgICAgICB7CisgICAgICAgICAgICBTUEVDSUZJQ19BTElHTihNVExQaXhlbEZvcm1hdEI1
RzZSNVVub3JtLCA2VSwgMlUpOworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRS
R0JBOFVub3JtLCA0VSk7CisgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUkE4
VW5vcm0sIDRVKTsKKworICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0JBOFVu
b3JtX3NSR0IsIDRVKTsKKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdSQThV
bm9ybV9zUkdCLCA0VSk7CisKKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdC
QThTbm9ybSwgNFUpOworCisgICAgICAgICAgICBTUEVDSUZJQ19BTElHTihNVExQaXhlbEZvcm1h
dFJHQjEwQTJVbm9ybSwgNFUsIDRVKTsKKyAgICAgICAgICAgIFNQRUNJRklDX0FMSUdOKE1UTFBp
eGVsRm9ybWF0QkdSMTBBMlVub3JtLCA0VSwgNFUpOworICAgICAgICAgICAgU1BFQ0lGSUMoTVRM
UGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgOFUpOworCisgICAgICAgICAgICBTUEVDSUZJQ19BTElH
TihNVExQaXhlbEZvcm1hdFJHMTFCMTBGbG9hdCwgNFUsIDRVKTsKKworICAgICAgICAgICAgU1BF
Q0lGSUNfQUxJR04oTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCwgNFUsIDRVKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXMg
ICAgID0gcGl4ZWxCeXRlc1JlbmRlcjsKKyAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVb
aWRdLnBpeGVsQnl0ZXNNU0FBID0gcGl4ZWxCeXRlc1JlbmRlck1TQUE7CisgICAgbU5hdGl2ZVBp
eGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5hbGlnbm1lbnQgICAgICA9IGFsaWdubWVudDsKKworIyAg
ICB1bmRlZiBTUEVDSUZJQworIyAgICB1bmRlZiBTUEVDSUZJQ19BTElHTgorIyAgICB1bmRlZiBT
UEVDSUZJQ19NU0FBCisjZW5kaWYKKyAgICAvLyBtYWNPUyBkb2VzIG5vdCBuZWVkIHRvIHBlcmZv
cm0gYW55IGFkZGl0b2luYWwgYWRqdXN0bWVudC4gVGhlc2UgdmFsdWVzIGFyZSBvbmx5IHVzZWQg
dG8gY2hlY2sKKyAgICAvLyB2YWxpZCBNUlQgc2l6ZXMgb24gaU9TLgorfQorCiB2b2lkIEZvcm1h
dFRhYmxlOjppbml0TmF0aXZlRm9ybWF0Q2Fwcyhjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5KQog
ewotICAgIGluaXROYXRpdmVGb3JtYXRDYXBzQXV0b2dlbihkaXNwbGF5KTsKKyAgICBjb25zdCBh
bmdsZTo6RmVhdHVyZXNNdGwgJmZlYXR1cmVzTXRsID0gZGlzcGxheS0+Z2V0RmVhdHVyZXMoKTsK
KyAgICAvLyBTa2lwIGF1dG8gcmVzb2x2ZSBpZiBlaXRoZXIgaGFzRGVwdGgvU3RlbmNpbEF1dG9S
ZXNvbHZlIG9yIGFsbG93TXVsdGlzYW1wbGVTdG9yZUFuZFJlc29sdmUKKyAgICAvLyBmZWF0dXJl
IGFyZSBkaXNhYmxlZC4KKyAgICBib29sIHN1cHBvcnREZXB0aEF1dG9SZXNvbHZlID0gZmVhdHVy
ZXNNdGwuaGFzRGVwdGhBdXRvUmVzb2x2ZS5lbmFibGVkICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZlYXR1cmVzTXRsLmFsbG93TXVsdGlzYW1wbGVTdG9yZUFuZFJlc29s
dmUuZW5hYmxlZDsKKyAgICBib29sIHN1cHBvcnRTdGVuY2lsQXV0b1Jlc29sdmUgPSBmZWF0dXJl
c010bC5oYXNTdGVuY2lsQXV0b1Jlc29sdmUuZW5hYmxlZCAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzTXRsLmFsbG93TXVsdGlzYW1wbGVTdG9yZUFuZFJl
c29sdmUuZW5hYmxlZDsKKyAgICBib29sIHN1cHBvcnREZXB0aFN0ZW5jaWxBdXRvUmVzb2x2ZSA9
IHN1cHBvcnREZXB0aEF1dG9SZXNvbHZlICYmIHN1cHBvcnRTdGVuY2lsQXV0b1Jlc29sdmU7CisK
KyAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9tZXRhbC9NZXRhbC1G
ZWF0dXJlLVNldC1UYWJsZXMucGRmCisgICAgLy8gY2xhbmctZm9ybWF0IG9mZgorCisgICAgLy8g
ICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8
ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8IGJ5dGVzUGVyQ2hhbm5l
bCB8IGNoYW5uZWwKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QThVbm9ybSwgICAg
ICAgIHRydWUsICAgICAgICAgICAgZmFsc2UsICAgICAgIGZhbHNlLCAgICAgICAgICBmYWxzZSwg
ICAgICAgZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgMVUsIDFV
KTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhVbm9ybSwgICAgICAgIHRydWUs
ICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1
ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgMVUsIDFVKTsKKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhTbm9ybSwgICAgICAgIHRydWUsICAgICAgICAg
ICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgdHJ1ZSwgIDFVLCAxVSk7CisgICAgc2V0Rm9ybWF0
Q2FwcyhNVExQaXhlbEZvcm1hdFIxNlVub3JtLCAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUs
ICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhl
ckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRydWUsICAyVSwgMVUpOworICAgIHNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRSMTZTbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAg
ICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJH
UFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVlLCAgMlUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0Ukc4VW5vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAg
ICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlLCAgMVUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0Ukc4U25vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUs
ICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDIs
IDEpLCAgdHJ1ZSwgIDJVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJH
MTZVbm9ybSwgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAg
ICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAg
ICAgIHRydWUsICA0VSwgMlUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2
U25vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAg
IHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAg
ICB0cnVlLCAgNFUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2
VW5vcm0sICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0
cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsIDEpLCAgICAgICAg
dHJ1ZSwgIDhVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkExNlNu
b3JtLCAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1
ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRy
dWUsICA4VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMTZGbG9h
dCwgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUs
ICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICA4VSwg
NFUpOworCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgICAg
ICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
YmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdFJHQkE4VW5vcm0sICAgICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgNFUsIDRVKTsKKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybV9zUkdCLCAgICAgdHJ1ZSwgICAg
ICAgICAgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMiksICAgICAgdHJ1ZSwgICAgICAg
ICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUsICAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThT
bm9ybSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0
aGVyR1BVRmFtaWx5KDIsIDEpLCAgICAgIHRydWUsICAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0
cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICA0
VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtX3NSR0Is
ICAgICB0cnVlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgyKSwgICAg
ICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ1ZSwgICA0VSwgNFUpOworCisgICAgLy8gICAgICAgICAgICB8ICBm
b3JtYXRJZCAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgICAgICAgICAgICAgICAgICB8ICB3
cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFIxNkZsb2F0LCAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgICAyVSwgMVUpOworICAgIHNldEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2RmxvYXQsICAgICAgdHJ1ZSwgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRy
dWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgNFUsIDJVKTsKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjMyRmxvYXQsICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRy
dWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICAgICAgIHRy
dWUsICAgIDRVLCAxVSk7CisKKyNpZiBUQVJHRVRfT1NfSU9TICYmICFUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgICAgfCBm
aWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgfCAgbXVsdGlzYW1wbGUgfCAg
cmVzb2x2ZSAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0QjVHNlI1VW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRy
dWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDNVKTsKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QUJHUjRVbm9ybSwgICAgICAgdHJ1ZSwgICAg
ICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwg
ICAgICB0cnVlLCAgMlUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkdS
NUExVW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAg
ICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsKKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0QTFCR1I1VW5vcm0sICAgICAgdHJ1ZSwgICAgICAgICAgICBm
YWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVl
LCAgMlUsIDRVKTsKKyNlbmRpZgorCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAg
ICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8ICB3cml0YWJsZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAg
fCBjb2xvclJlbmRlcmFibGUgfAorICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCR1Ix
MEEyVW5vcm0sICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFt
aWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAg
dHJ1ZSwgIDRVLCA0VSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQjEwQTJV
bm9ybSwgICAgIHRydWUsICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHko
MywgMSksICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICB0cnVl
LCAgNFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCMTBBMlVpbnQs
ICAgICAgZmFsc2UsICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgzLCAx
KSwgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgIHRydWUsICA0
VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzExQjEwRmxvYXQsICAg
ICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAg
ICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDRVLCAz
VSk7CisKKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgICAgfCBm
aWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIGJsZW5k
YWJsZSAgICAgICAgICAgICAgICAgICAgIHwgIG11bHRpc2FtcGxlICAgICAgICAgICAgICAgICAg
ICB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSAgICAg
ICAgICAgICAgICAgfAorICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9h
dCwgICAgICAgdHJ1ZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMyks
ICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgxKSwgIGRpc3BsYXktPnN1cHBvcnRzSU9T
R1BVRmFtaWx5KDEpLCBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgxKSwgZGlzcGxheS0+
c3VwcG9ydHNJT1NHUFVGYW1pbHkoMSksIDRVLCAzVSk7CisKKyAgICAvLyAgICAgICAgICAgIHwg
IGZvcm1hdElkICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRhYmxlICB8ICBi
bGVuZGFibGUgIHwgIG11bHRpc2FtcGxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgcmVzb2x2
ZSAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UjhVaW50LCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0
cnVlLCAxVSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSOFNpbnQsICAg
ICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgIHRydWUsIDFVLCAxVSk7
CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIxNlVpbnQsICAgICAgIGZhbHNlLCAg
ICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMlUsIDFVKTsKKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UjE2U2ludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVl
LCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSRzhVaW50LCAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxz
ZSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAg
ICAgIHRydWUsIDJVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHOFNp
bnQsICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0
cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMlUs
IDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjMyVWludCwgICAgICAgZmFs
c2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOwor
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSMzJTaW50LCAgICAgICBmYWxzZSwgICAg
ICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDRVLCAxVSk7CisgICAgc2V0
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMTZVaW50LCAgICAgIGZhbHNlLCAgICAgICAgICAg
dHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDJVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0UkcxNlNpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAg
ZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwg
ICAgICAgICB0cnVlLCA0VSwgMlUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRS
R0JBOFVpbnQsICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAg
ICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgIHRydWUs
IDRVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkE4U2ludCwgICAg
IGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgdHJ1ZSwgNFUsIDFVKTsKKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkczMlVpbnQsICAgICAgZmFsc2UsICAgICAg
ICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVy
R1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgMlUpOworICAgIHNldEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzMyU2ludCwgICAgICBmYWxzZSwgICAgICAgICAgIHRy
dWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1p
bHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDhVLCAyVSk7CisgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFJHQkExNlVpbnQsICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAg
ICAgIGZhbHNlLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs
c2UsICAgICAgICAgdHJ1ZSwgOFUsIDRVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UkdCQTE2U2ludCwgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0
cnVlLCA4VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMzJVaW50
LCAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxh
eS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDE2
VSwgNFUpOworICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMzJTaW50LCAgICBm
YWxzZSwgICAgICAgICAgIHRydWUsICAgICAgICBmYWxzZSwgICAgICAgICAgZGlzcGxheS0+c3Vw
cG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgIGZhbHNlLCAgICAgICAgIHRydWUsIDE2VSwgNFUp
OworCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgICB8IGZp
bHRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSAg
ICAgICAgICAgICAgICAgICAgIHwgIG11bHRpc2FtcGxlICAgICAgICAgICAgICAgICAgICAgfCAg
cmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisgICAg
c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMzJGbG9hdCwgICAgICAgZGlzcGxheS0+c3Vw
cG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwg
IGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgICAgICAgdHJ1ZSwgIDhV
LCAyVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkEzMkZsb2F0LCAgICAg
ZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVlLCAgICAgICAgZGlz
cGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMSwxKSwgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSks
ICAgICAgICAgdHJ1ZSwgIDE2VSwgNFUpOworCisgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJ
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAg
ICAgICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8IGRlcHRo
UmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgfAorICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXREZXB0aDMyRmxvYXQsICAgICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMSwxKSwgICBmYWxzZSwgICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwg
ICAgc3VwcG9ydERlcHRoQXV0b1Jlc29sdmUsICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAg
ICAgICAgICB0cnVlLCAgNFUsIDFVKTsKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
U3RlbmNpbDgsICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIGZhbHNlLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgdHJ1ZSwg
IDFVLCAxVSk7CisgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9T
dGVuY2lsOCwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgIGZh
bHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBzdXBwb3J0RGVwdGhTdGVuY2ls
QXV0b1Jlc29sdmUsICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIHRydWUsICA4VSwgMlUp
OworLy9Ub0RvOiBAYXZhaWxhYmxlIG9uIDEzLjAKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0RGVwdGgxNlVub3JtLCAgICAgICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmFsc2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBv
cnREZXB0aEF1dG9SZXNvbHZlLCAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAg
dHJ1ZSwgIDJVLCAxVSk7CisjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZ
U1QKKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgyNFVub3JtX1N0ZW5jaWw4
LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgZmFsc2UsICAg
ICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBvcnREZXB0aFN0ZW5jaWxBdXRvUmVz
b2x2ZSwgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRo
ZXJHUFVGYW1pbHkoMSwxKSwgNFUsIDJVKTsKKworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0QkMxX1JHQkEsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzJfUkdCQSwgdHJ1ZSk7CisgICAgc2V0Q29tcHJl
c3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzJfUkdCQV9zUkdCLCB0cnVlKTsKKyAgICBz
ZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDM19SR0JBLCB0cnVlKTsKKyAg
ICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDM19SR0JBX3NSR0IsIHRy
dWUpOworI2Vsc2UKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBW
UlRDX1JHQl8yQlBQLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdFBWUlRDX1JHQl8yQlBQX3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFAsIHRydWUpOworICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFBfc1JHQiwgdHJ1ZSk7
CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzJC
UFAsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZS
VENfUkdCQV8yQlBQX3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdFBWUlRDX1JHQkFfNEJQUF9zUkdCLCB0cnVlKTsKKyAgICBz
ZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SMTFVbm9ybSwgdHJ1ZSk7
CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFQUNfUjExU25vcm0s
IHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RUFDX1JH
MTFVbm9ybSwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRFQUNfUkcxMVNub3JtLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdEVBQ19SR0JBOCwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjgsIHRydWUpOworICAgIHNldENvbXByZXNz
ZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4X3NSR0IsIHRydWUpOworICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4QTEsIHRydWUpOwor
ICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4QTFfc1JH
QiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RD
XzR4NF9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdEFTVENfNXg0X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0QVNUQ181eDVfc1JHQiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCLCB0cnVlKTsKKyAgICBzZXRDb21wcmVz
c2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNng2X3NSR0IsIHRydWUpOworICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDVfc1JHQiwgdHJ1ZSk7
CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9zUkdC
LCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENf
OHg4X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0QVNUQ18xMHg1X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0QVNUQ18xMHg2X3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X3NSR0IsIHRydWUpOworICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9zUkdCLCB0cnVlKTsKKyAg
ICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfc1JHQiwg
dHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEy
eDEyX3NSR0IsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0QVNUQ180eDRfTERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdEFTVENfNXg0X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9MRFIsIHRydWUpOworICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ182eDVfTERSLCB0cnVlKTsKKyAgICBzZXRDb21w
cmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNng2X0xEUiwgdHJ1ZSk7CisgICAg
c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9MRFIsIHRydWUp
OworICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDZfTERS
LCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENf
OHg4X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3Jt
YXRBU1RDXzEweDVfTERSLCB0cnVlKTsKKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdEFTVENfMTB4Nl9MRFIsIHRydWUpOworICAgIHNldENvbXByZXNzZWRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X0xEUiwgdHJ1ZSk7CisgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX0xEUiwgdHJ1ZSk7CisgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX0xEUiwgdHJ1ZSk7
CisgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX0xE
UiwgdHJ1ZSk7CisjZW5kaWYKKyAgICAvLyBjbGFuZy1mb3JtYXQgb24KIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIG10bApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91
dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRiYzEwOTk3MzhkOWM1NjgyMjExNjdlMmUxNWM2NDU3MDExMjIz
YTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgKQEAgLTAsMCArMSw1NyBA
QAorLy8KKy8vICBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaAorLy8gIEFOR0xFCisvLworLy8gIENy
ZWF0ZWQgYnkgS3lsZSBQaWRkaW5ndG9uIG9uIDExLzEwLzIwLgorLy8KKworI2lmbmRlZiBtdGxf
Z2xzbGFuZ19tdGxfdXRpbHNfaAorI2RlZmluZSBtdGxfZ2xzbGFuZ19tdGxfdXRpbHNfaAorI2lu
Y2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9Q
cm9ncmFtSW1wbC5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBl
cl91dGlscy5oIgorI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24u
aCIKKworbmFtZXNwYWNlIHJ4Cit7CituYW1lc3BhY2UgbXRsCit7CitzdHJ1Y3QgU2FtcGxlckJp
bmRpbmcKK3sKKyAgICB1aW50MzJfdCB0ZXh0dXJlQmluZGluZyA9IDA7CisgICAgdWludDMyX3Qg
c2FtcGxlckJpbmRpbmcgPSAwOworfTsKKworc3RydWN0IFRyYW5zbGF0ZWRTaGFkZXJJbmZvCit7
CisgICAgdm9pZCByZXNldCgpOworICAgIC8vIFRyYW5zbGF0ZWQgTWV0YWwgc291cmNlIGNvZGUK
KyAgICBzdGQ6OnN0cmluZyBtZXRhbFNoYWRlclNvdXJjZTsKKyAgICAvLyBNZXRhbCBsaWJyYXJ5
IGNvbXBpbGVkIGZyb20gc291cmNlIGNvZGUgYWJvdmUuIFVzZWQgYnkgUHJvZ3JhbU10bC4KKyAg
ICBBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gbWV0YWxMaWJyYXJ5OworICAgIHN0ZDo6YXJy
YXk8U2FtcGxlckJpbmRpbmcsIGtNYXhHTFNhbXBsZXJCaW5kaW5ncz4gYWN0dWFsU2FtcGxlckJp
bmRpbmdzOworICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhHTFVCT0JpbmRpbmdzPiBhY3R1
YWxVQk9CaW5kaW5nczsKKyAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBrTWF4U2hhZGVyWEZCcz4g
YWN0dWFsWEZCQmluZGluZ3M7CisgICAgYm9vbCBoYXNVQk9Bcmd1bWVudEJ1ZmZlcjsKK307Cit2
b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3Rh
dGUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291
cmNlcyAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxz
dGQ6OnN0cmluZz4gKnNoYWRlclNvdXJjZXNPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBT
aGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCk7CisK
K2FuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldE1TTChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnBy
b2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q2FwcyAm
Z2xDYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8
c3RkOjpzdHJpbmc+ICZzaGFkZXJTb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8VHJhbnNsYXRlZFNo
YWRlckluZm8+ICptc2xTaGFkZXJJbmZvT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICptc2xDb2RlT3V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCk7CisKKy8vIEdldCBlcXVpdmFsZW50
IHNoYWRvdyBjb21wYXJlIG1vZGUgdGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0ZWQgbXNsIHNoYWRl
ci4KK3VpbnQgTXNsR2V0U2hhZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdMZW51
bSBmdW5jKTsKKworfSAgLy8gbmFtZXNwYWNlIG10bAorfSAgLy8gbmFtZXNwYWNlIHJ4CisKKyNl
bmRpZiAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHNfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210
bF91dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzVmNWJlZjQzMTAw
ZjExM2U0OTNkZDlkYjZlMGUyZmQ1NDYxNWEyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19t
dGxfdXRpbHMubW0KQEAgLTAsMCArMSwyNDEgQEAKKy8vCisvLyAgbWdsX2dsc2xhbmdfbXRsX3V0
aWxzLm0KKy8vICBBTkdMRSAoc3RhdGljKQorLy8KKy8vICBDcmVhdGVkIGJ5IEt5bGUgUGlkZGlu
Z3RvbiBvbiAxMS8xMC8yMC4KKy8vCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5o
PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qu
aCIKKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaCIKKyNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIKKwor
bmFtZXNwYWNlIHJ4Cit7CituYW1lc3BhY2UgbXRsCit7CisKK3ZvaWQgVHJhbnNsYXRlZFNoYWRl
ckluZm86OnJlc2V0KCkKK3sKKyAgICBtZXRhbFNoYWRlclNvdXJjZS5jbGVhcigpOworICAgIG1l
dGFsTGlicmFyeSAgICAgICAgID0gbmlsOworICAgIGhhc1VCT0FyZ3VtZW50QnVmZmVyID0gZmFs
c2U7CisgICAgZm9yIChtdGw6OlNhbXBsZXJCaW5kaW5nICZiaW5kaW5nIDogYWN0dWFsU2FtcGxl
ckJpbmRpbmdzKQorICAgIHsKKyAgICAgICAgYmluZGluZy50ZXh0dXJlQmluZGluZyA9IG10bDo6
a01heFNoYWRlclNhbXBsZXJzOworICAgIH0KKworICAgIGZvciAodWludDMyX3QgJmJpbmRpbmcg
OiBhY3R1YWxVQk9CaW5kaW5ncykKKyAgICB7CisgICAgICAgIGJpbmRpbmcgPSBtdGw6OmtNYXhT
aGFkZXJCdWZmZXJzOworICAgIH0KKworICAgIGZvciAodWludDMyX3QgJmJpbmRpbmcgOiBhY3R1
YWxYRkJCaW5kaW5ncykKKyAgICB7CisgICAgICAgIGJpbmRpbmcgPSBtdGw6OmtNYXhTaGFkZXJC
dWZmZXJzOworICAgIH0KK30KKworLy8gT3JpZ2luYWwgbWFwcGluZyBvZiBmcm9udCBlbmQgZnJv
bSBzYW1wbGVyIG5hbWUgdG8gbXVsdGlwbGUgc2FtcGxlciBzbG90cyAoaW4gZm9ybSBvZgorLy8g
c2xvdDpjb3VudCBwYWlyKQordXNpbmcgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCA9CisgICAg
c3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8dWlu
dDMyX3QsIHVpbnQzMl90Pj4+OworCitib29sIE1hcHBlZFNhbXBsZXJOYW1lTmVlZHNVc2VyRGVm
aW5lZFByZWZpeChjb25zdCBzdGQ6OnN0cmluZyAmb3JpZ2luYWxOYW1lKQoreworICAgIHJldHVy
biBvcmlnaW5hbE5hbWUuZmluZCgnLicpID09IHN0ZDo6c3RyaW5nOjpucG9zOworfQorCitzdGF0
aWMgc3RkOjpzdHJpbmcgTVNMR2V0TWFwcGVkU2FtcGxlck5hbWUoY29uc3Qgc3RkOjpzdHJpbmcg
Jm9yaWdpbmFsTmFtZSkKK3sKKyAgICBzdGQ6OnN0cmluZyBzYW1wbGVyTmFtZSA9IG9yaWdpbmFs
TmFtZTsKKworICAgIC8vIFNhbXBsZXJzIGluIHN0cnVjdHMgYXJlIGV4dHJhY3RlZC4KKyAgICBz
dGQ6OnJlcGxhY2Uoc2FtcGxlck5hbWUuYmVnaW4oKSwgc2FtcGxlck5hbWUuZW5kKCksICcuJywg
J18nKTsKKworICAgIC8vIFJlbW92ZSBhcnJheSBlbGVtZW50cworICAgIGF1dG8gb3V0ID0gc2Ft
cGxlck5hbWUuYmVnaW4oKTsKKyAgICBmb3IgKGF1dG8gaW4gPSBzYW1wbGVyTmFtZS5iZWdpbigp
OyBpbiAhPSBzYW1wbGVyTmFtZS5lbmQoKTsgaW4rKykKKyAgICB7CisgICAgICAgIGlmICgqaW4g
PT0gJ1snKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKmluICE9ICddJykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbisrOworICAgICAgICAgICAgICAgIEFTU0VSVChp
biAhPSBzYW1wbGVyTmFtZS5lbmQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0KysgPSAqaW47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzYW1wbGVyTmFtZS5lcmFzZShvdXQsIHNhbXBsZXJOYW1lLmVuZCgpKTsK
KworICAgIGlmIChNYXBwZWRTYW1wbGVyTmFtZU5lZWRzVXNlckRlZmluZWRQcmVmaXgob3JpZ2lu
YWxOYW1lKSkKKyAgICB7CisgICAgICAgIHNhbXBsZXJOYW1lID0gc2g6OmtVc2VyRGVmaW5lZE5h
bWVQcmVmaXggKyBzYW1wbGVyTmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gc2FtcGxlck5hbWU7
Cit9CisKK3ZvaWQgTVNMR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnBy
b2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlu
a2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hh
ZGVyTWFwPHN0ZDo6c3RyaW5nPiAqc2hhZGVyU291cmNlc091dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZvTWFw
T3V0KQoreworICAgIGZvciAoY29uc3QgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpB
bGxTaGFkZXJUeXBlcygpKQorICAgIHsKKyAgICAgICAgZ2w6OlNoYWRlciAqZ2xTaGFkZXIgICAg
ICAgICAgICA9IHByb2dyYW1TdGF0ZS5nZXRBdHRhY2hlZFNoYWRlcihzaGFkZXJUeXBlKTsKKyAg
ICAgICAgKCpzaGFkZXJTb3VyY2VzT3V0KVtzaGFkZXJUeXBlXSA9IGdsU2hhZGVyID8gZ2xTaGFk
ZXItPmdldFRyYW5zbGF0ZWRTb3VyY2UoKSA6ICIiOworICAgIH0KK30KKwordm9pZCBHZXRBc3Np
Z25lZFNhbXBsZXJCaW5kaW5ncyhjb25zdCBzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAq
cmVmbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgT3JpZ2lu
YWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjp1bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiAmc3RydWN0U2Ft
cGxlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8U2FtcGxl
ckJpbmRpbmcsIG10bDo6a01heEdMU2FtcGxlckJpbmRpbmdzPiAqYmluZGluZ3MpCit7CisgICAg
Zm9yIChhdXRvICZzYW1wbGVyIDogcmVmbGVjdGlvbi0+Z2V0U2FtcGxlckJpbmRpbmdzKCkpCisg
ICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSAgICAgICAgICA9IHNhbXBsZXIu
Zmlyc3Q7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGFjdHVhbFNhbXBsZXJTbG90ID0gKHVpbnQz
Ml90KXJlZmxlY3Rpb24tPmdldFNhbXBsZXJCaW5kaW5nKG5hbWUpOworICAgICAgICBjb25zdCB1
aW50MzJfdCBhY3R1YWxUZXh0dXJlU2xvdCA9ICh1aW50MzJfdClyZWZsZWN0aW9uLT5nZXRUZXh0
dXJlQmluZGluZyhuYW1lKTsKKworICAgICAgICAvLyBBc3NpZ24gc2VxdWVudGlhbCBpbmRleCBm
b3Igc3Vic2VxdWVudCBhcnJheSBlbGVtZW50cworICAgICAgICBjb25zdCBib29sIHN0cnVjdFNh
bXBsZXIgPSBzdHJ1Y3RTYW1wbGVycy5maW5kKG5hbWUpICE9IHN0cnVjdFNhbXBsZXJzLmVuZCgp
OworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBtYXBwZWROYW1lID0KKyAgICAgICAgICAgIHN0
cnVjdFNhbXBsZXIgPyBuYW1lIDogTVNMR2V0TWFwcGVkU2FtcGxlck5hbWUoc2g6OmtVc2VyRGVm
aW5lZE5hbWVQcmVmaXggKyBuYW1lKTsKKyAgICAgICAgYXV0byBvcmlnaW5hbCA9IG9yaWdpbmFs
QmluZGluZ3MuZmluZChtYXBwZWROYW1lKTsKKyAgICAgICAgaWYgKG9yaWdpbmFsICE9IG9yaWdp
bmFsQmluZGluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+PiAmcmVzT3JpZ25hbEJpbmRpbmdzID0K
KyAgICAgICAgICAgICAgICBvcmlnaW5hbEJpbmRpbmdzLmF0KG1hcHBlZE5hbWUpOworICAgICAg
ICAgICAgdWludDMyX3QgY3VycmVudFRleHR1cmVTbG90ID0gYWN0dWFsVGV4dHVyZVNsb3Q7Cisg
ICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50U2FtcGxlclNsb3QgPSBhY3R1YWxTYW1wbGVyU2xv
dDsKKyAgICAgICAgICAgIGZvciAoY29uc3Qgc3RkOjpwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4g
Jm9yaWdpbmFsQmluZGluZ1JhbmdlIDogcmVzT3JpZ25hbEJpbmRpbmdzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFNhbXBsZXJCaW5kaW5nICZhY3R1YWxCaW5kaW5nID0gYmluZGlu
Z3MtPmF0KG9yaWdpbmFsQmluZGluZ1JhbmdlLmZpcnN0KTsKKyAgICAgICAgICAgICAgICBhY3R1
YWxCaW5kaW5nLnRleHR1cmVCaW5kaW5nICA9IGN1cnJlbnRUZXh0dXJlU2xvdDsKKyAgICAgICAg
ICAgICAgICBhY3R1YWxCaW5kaW5nLnNhbXBsZXJCaW5kaW5nICA9IGN1cnJlbnRTYW1wbGVyU2xv
dDsKKworICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0dXJlU2xvdCArPSBvcmlnaW5hbEJpbmRp
bmdSYW5nZS5zZWNvbmQ7CisgICAgICAgICAgICAgICAgY3VycmVudFNhbXBsZXJTbG90ICs9IG9y
aWdpbmFsQmluZGluZ1JhbmdlLnNlY29uZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKworc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKmdldFJlZmxlY3Rpb25Gcm9t
U2hhZGVyKGdsOjpTaGFkZXIgKnNoYWRlcikKK3sKKyAgICBTaGFkZXJNdGwgKnNoYWRlckluc3Rh
bmNlID0gc3RhdGljX2Nhc3Q8U2hhZGVyTXRsICo+KHNoYWRlci0+Z2V0SW1wbGVtZW50YXRpb24o
KSk7CisgICAgcmV0dXJuIHNoYWRlckluc3RhbmNlLT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0
aW9uKCk7Cit9CisKK3NoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpnZXRSZWZsZWN0aW9u
RnJvbUNvbXBpbGVyKGdsOjpDb21waWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSB0eXBl
KQoreworICAgIGF1dG8gY29tcGlsZXJJbnN0YW5jZSAgICAgID0gY29tcGlsZXItPmdldEluc3Rh
bmNlKHR5cGUpOworICAgIHNoOjpUU2hIYW5kbGVCYXNlICpiYXNlICAgID0gc3RhdGljX2Nhc3Q8
c2g6OlRTaEhhbmRsZUJhc2UgKj4oY29tcGlsZXJJbnN0YW5jZS5nZXRIYW5kbGUoKSk7CisgICAg
YXV0byB0cmFuc2xhdG9yTWV0YWxEaXJlY3QgPSBiYXNlLT5nZXRBc1RyYW5zbGF0b3JNZXRhbERp
cmVjdCgpOworICAgIGNvbXBpbGVyLT5wdXRJbnN0YW5jZShzdGQ6Om1vdmUoY29tcGlsZXJJbnN0
YW5jZSkpOworICAgIHJldHVybiB0cmFuc2xhdG9yTWV0YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb24oKTsKK30KKworYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0TVNMKGNvbnN0
IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJjZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hhZGVyTWFwSW50ZXJmYWNlVmFyaWFibGVJ
bmZvTWFwICZ2YXJpYWJsZUluZm9NYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1zbFNoYWRlckluZm9PdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gKm1zbENv
ZGVPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHhmYkJ1ZmZlckNvdW50
KQoreworICAgIC8vIFJldHJpZXZlIG9yaWdpbmFsIHVuaWZvcm0gYnVmZmVyIGJpbmRpbmdzIGdl
bmVyYXRlZCBieSBmcm9udCBlbmQuIFdlIHdpbGwgbmVlZCB0byBkbyBhIHJlbWFwLgorICAgIHN0
ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+IHVib09yaWdpbmFsQmluZGlu
Z3M7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxvY2tzID0g
cHJvZ3JhbVN0YXRlLmdldFVuaWZvcm1CbG9ja3MoKTsKKyAgICBmb3IgKHVpbnQzMl90IGJ1ZmZl
cklkeCA9IDA7IGJ1ZmZlcklkeCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVmZmVySWR4KQorICAgIHsK
KyAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZibG9jayA9IGJsb2Nrc1tidWZmZXJJ
ZHhdOworICAgICAgICBpZiAoIXVib09yaWdpbmFsQmluZGluZ3MuY291bnQoYmxvY2subWFwcGVk
TmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVib09yaWdpbmFsQmluZGluZ3NbYmxvY2su
bWFwcGVkTmFtZV0gPSBidWZmZXJJZHg7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gUmV0cmll
dmUgb3JpZ2luYWwgc2FtcGxlciBiaW5kaW5ncyBwcm9kdWNlZCBieSBmcm9udCBlbmQuCisgICAg
T3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCBvcmlnaW5hbFNhbXBsZXJCaW5kaW5nczsKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6U2FtcGxlckJpbmRpbmc+ICZzYW1wbGVyQmluZGluZ3MgPSBw
cm9ncmFtU3RhdGUuZ2V0U2FtcGxlckJpbmRpbmdzKCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8
Z2w6OkxpbmtlZFVuaWZvcm0+ICZ1bmlmb3JtcyAgICAgICAgID0gcHJvZ3JhbVN0YXRlLmdldFVu
aWZvcm1zKCk7CisKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+IHN0cnVjdFNh
bXBsZXJzID0ge307CisKKyAgICBmb3IgKHVpbnQzMl90IHRleHR1cmVJbmRleCA9IDA7IHRleHR1
cmVJbmRleCA8IHNhbXBsZXJCaW5kaW5ncy5zaXplKCk7ICsrdGV4dHVyZUluZGV4KQorICAgIHsK
KyAgICAgICAgY29uc3QgZ2w6OlNhbXBsZXJCaW5kaW5nICZzYW1wbGVyQmluZGluZyA9IHNhbXBs
ZXJCaW5kaW5nc1t0ZXh0dXJlSW5kZXhdOworICAgICAgICB1aW50MzJfdCB1bmlmb3JtSW5kZXgg
PSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUluZGV4RnJvbVNhbXBsZXJJbmRleCh0ZXh0dXJlSW5k
ZXgpOworICAgICAgICBjb25zdCBnbDo6TGlua2VkVW5pZm9ybSAmc2FtcGxlclVuaWZvcm0gPSB1
bmlmb3Jtc1t1bmlmb3JtSW5kZXhdOworICAgICAgICBib29sIGlzU2FtcGxlckluU3RydWN0ICAg
ICAgICA9IHNhbXBsZXJVbmlmb3JtLm5hbWUuZmluZCgnLicpICE9IHN0ZDo6c3RyaW5nOjpucG9z
OworICAgICAgICBzdGQ6OnN0cmluZyBtYXBwZWRTYW1wbGVyTmFtZSA9IGlzU2FtcGxlckluU3Ry
dWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTVNMR2V0
TWFwcGVkU2FtcGxlck5hbWUoc2FtcGxlclVuaWZvcm0ubmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZShzYW1w
bGVyVW5pZm9ybS5tYXBwZWROYW1lKTsKKyAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBwcmVm
aXhlZCBsYXRlciBzZXBlcmF0ZWx5CisgICAgICAgIGlmIChpc1NhbXBsZXJJblN0cnVjdCkKKyAg
ICAgICAgICAgIHN0cnVjdFNhbXBsZXJzLmluc2VydChtYXBwZWRTYW1wbGVyTmFtZSk7CisgICAg
ICAgIG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzW21hcHBlZFNhbXBsZXJOYW1lXS5wdXNoX2JhY2so
CisgICAgICAgICAgICB7dGV4dHVyZUluZGV4LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc2FtcGxl
ckJpbmRpbmcuYm91bmRUZXh0dXJlVW5pdHMuc2l6ZSgpKX0pOworICAgIH0KKyAgICBmb3IgKGds
OjpTaGFkZXJUeXBlIHR5cGUgOiB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwgZ2w6OlNoYWRlclR5
cGU6OkZyYWdtZW50fSkKKyAgICB7CisgICAgICAgICgqbXNsQ29kZU91dClbdHlwZV0gICAgICAg
ICAgICAgICAgICAgICAgICAgPSBzaGFkZXJTb3VyY2VzW3R5cGVdOworICAgICAgICAoKm1zbFNo
YWRlckluZm9PdXQpW3R5cGVdLm1ldGFsU2hhZGVyU291cmNlID0gc2hhZGVyU291cmNlc1t0eXBl
XTsKKyAgICAgICAgZ2w6OlNoYWRlciAqc2hhZGVyICAgICAgICAgICAgICAgICAgICAgICAgPSBw
cm9ncmFtU3RhdGUuZ2V0QXR0YWNoZWRTaGFkZXIodHlwZSk7CisgICAgICAgIHNoOjpUcmFuc2xh
dG9yTWV0YWxSZWZsZWN0aW9uICpyZWZsZWN0aW9uID0gZ2V0UmVmbGVjdGlvbkZyb21TaGFkZXIo
c2hhZGVyKTsKKyAgICAgICAgLy8gUmV0cmlldmUgYXV0b21hdGljIHRleHR1cmUgc2xvdCBhc3Np
Z25tZW50cworICAgICAgICBpZiAob3JpZ2luYWxTYW1wbGVyQmluZGluZ3Muc2l6ZSgpID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgR2V0QXNzaWduZWRTYW1wbGVyQmluZGluZ3MocmVmbGVj
dGlvbiwgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsIHN0cnVjdFNhbXBsZXJzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1zbFNoYWRlckluZm9PdXQtPmF0KHR5cGUp
LmFjdHVhbFNhbXBsZXJCaW5kaW5ncyk7CisgICAgICAgIH0KKyAgICAgICAgcmVmbGVjdGlvbi0+
cmVzZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworfQor
Cit1aW50IE1zbEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKEdMZW51bSBtb2RlLCBHTGVudW0g
ZnVuYykKK3sKKyAgICAvLyBTZWUgU3BpcnZUb01zbENvbXBpbGVyOjplbWl0X2hlYWRlcigpCisg
ICAgaWYgKG1vZGUgPT0gR0xfTk9ORSkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKGZ1bmMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNhc2UgR0xfTEVTUzoKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
ICAgIGNhc2UgR0xfTEVRVUFMOgorICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAg
ICAgY2FzZSBHTF9HUkVBVEVSOgorICAgICAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICAg
ICAgY2FzZSBHTF9HRVFVQUw6CisgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAg
ICBjYXNlIEdMX05FVkVSOgorICAgICAgICAgICAgICAgIHJldHVybiA1OworICAgICAgICAgICAg
Y2FzZSBHTF9BTFdBWVM6CisgICAgICAgICAgICAgICAgcmV0dXJuIDY7CisgICAgICAgICAgICBj
YXNlIEdMX0VRVUFMOgorICAgICAgICAgICAgICAgIHJldHVybiA3OworICAgICAgICAgICAgY2Fz
ZSBHTF9OT1RFUVVBTDoKKyAgICAgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KK30KK30gIC8vIG5hbWVzcGFjZSBtdGwKK30gIC8v
IG5hbWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMu
aAppbmRleCAxM2M5N2VlMjQ0N2ZhNDY5MjZlZmU3OGQzMDAzMjQ0N2EyM2NiMjQ4Li5jMDI0NDZh
OTgyMDg1NWYzY2ZmNDdjYTM5NjY3NDQwMzI4ODMzYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRp
bHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaApAQCAtMTQsMzMgKzE0LDExIEBACiAjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvUHJvZ3JhbUltcGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfY29tbW9uLmgiCi0KKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCIKIG5hbWVzcGFjZSByeAogewogbmFtZXNwYWNlIG10
bAogewotCi1zdHJ1Y3QgU2FtcGxlckJpbmRpbmcKLXsKLSAgICB1aW50MzJfdCB0ZXh0dXJlQmlu
ZGluZyA9IDA7Ci0gICAgdWludDMyX3Qgc2FtcGxlckJpbmRpbmcgPSAwOwotfTsKLQotc3RydWN0
IFRyYW5zbGF0ZWRTaGFkZXJJbmZvCi17Ci0gICAgdm9pZCByZXNldCgpOwotCi0gICAgLy8gVHJh
bnNsYXRlZCBNZXRhbCBzb3VyY2UgY29kZQotICAgIHN0ZDo6c3RyaW5nIG1ldGFsU2hhZGVyU291
cmNlOwotICAgIC8vIE1ldGFsIGxpYnJhcnkgY29tcGlsZWQgZnJvbSBzb3VyY2UgY29kZSBhYm92
ZS4gVXNlZCBieSBQcm9ncmFtTXRsLgotICAgIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBt
ZXRhbExpYnJhcnk7Ci0KLSAgICBzdGQ6OmFycmF5PFNhbXBsZXJCaW5kaW5nLCBrTWF4R0xTYW1w
bGVyQmluZGluZ3M+IGFjdHVhbFNhbXBsZXJCaW5kaW5nczsKLSAgICBzdGQ6OmFycmF5PHVpbnQz
Ml90LCBrTWF4R0xVQk9CaW5kaW5ncz4gYWN0dWFsVUJPQmluZGluZ3M7Ci0gICAgc3RkOjphcnJh
eTx1aW50MzJfdCwga01heFNoYWRlclhGQnM+IGFjdHVhbFhGQkJpbmRpbmdzOwotICAgIGJvb2wg
aGFzVUJPQXJndW1lbnRCdWZmZXI7Ci19OwotCiAvLyAtIHNoYWRlclNvdXJjZXNPdXQgaXMgcmVz
dWx0IEdMU0wgY29kZSBwZXIgc2hhZGVyIHN0YWdlIHdoZW4gWEZCIGVtdWxhdGlvbiBpcyB0dXJu
ZWQgb2ZmLgogLy8gLSB4ZmJPbmx5U2hhZGVyU291cmNlT3V0IHdpbGwgY29udGFpbiB2ZXJ0ZXgg
c2hhZGVyJ3MgR0xTTCBjb2RlIHdoZW4gWEZCIGVtdWxhdGlvbiBpcyB0dXJuZWQgb24uCiB2b2lk
IEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0
YXRlLApAQCAtNTcsNiArMzUsMTMgQEAgYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0U2hhZGVyU3Bp
cnZDb2RlKEVycm9ySGFuZGxlciAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgJnZh
cmlhYmxlSW5mb01hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9yPHVpbnQzMl90Pj4gKnNoYWRlckNvZGVPdXQpOwogCith
bmdsZTo6UmVzdWx0IE1TTEdldFNoYWRlclNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6U2hhZGVyQml0
U2V0ICZsaW5rZWRTaGFkZXJTdGFnZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJjZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRl
cmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3RkOjp2ZWN0b3I8dWludDMyX3Q+PiAq
c2hhZGVyQ29kZU91dCk7CisKIC8vIFRyYW5zbGF0ZSBmcm9tIFNQSVItViBjb2RlIHRvIE1ldGFs
IHNoYWRlciBzb3VyY2UgY29kZS4KIC8vIC0gc3BpcnZTaGFkZXJDb2RlIGlzIFNQSVJWIGNvZGUg
cGVyIHNoYWRlciBzdGFnZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMgdHVybmVkIG9mZi4KIC8vIC0g
eGZiT25seVNwaXJ2Q29kZSBpcyAgdmVydGV4IHNoYWRlcidzIFNQSVJWIGNvZGUgd2hlbiBYRkIg
ZW11bGF0aW9uIGlzIHR1cm5lZCBvbi4KQEAgLTcwLDYgKzU1LDIzIEBAIGFuZ2xlOjpSZXN1bHQg
U3BpcnZDb2RlVG9Nc2woQ29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1zbFNoYWRlckluZm9P
dXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJbmZvICpt
c2xYZmJPbmx5U2hhZGVySW5mb091dCAvKiogbnVsbGFibGUgKi8pOwogCit2b2lkIE1TTEdldFNo
YWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3Vy
Y2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4g
KnNoYWRlclNvdXJjZXNPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJNYXBJbnRl
cmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCk7CisKK2FuZ2xlOjpSZXN1
bHQgR2xzbGFuZ0dldE1TTChDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpTaGFkZXJCaXRTZXQgJmxpbmtlZFNoYWRlclN0YWdlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q2FwcyAmZ2xDYXBzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFk
ZXJTb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcElu
dGVyZmFjZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8VHJhbnNsYXRlZFNoYWRlckluZm8+ICptc2xTaGFk
ZXJJbmZvT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8c3Rk
OjpzdHJpbmc+ICptc2xDb2RlT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCB4ZmJCdWZmZXJDb3VudCk7CisKKy8vIEdldCBlcXVpdmFsZW50IHNoYWRvdyBjb21wYXJlIG1v
ZGUgdGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0ZWQgbXNsIHNoYWRlci4KK3VpbnQgTXNsR2V0U2hh
ZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdMZW51bSBmdW5jKTsKKwogfSAgLy8g
bmFtZXNwYWNlIG10bAogfSAgLy8gbmFtZXNwYWNlIHJ4CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191
dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbQppbmRleCBjYWEwZTU2MTk3NDc0MWUxOGU5YTg4ZGY0
NTMxYWQ1M2VjZDhlYzFiLi40Y2Y3MTdhYTZlMmQ2MTI2YjkzODRkMjc5Y2VkNDVlNGE2YTkxZjVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLm1tCkBAIC0x
Myw2ICsxMyw3IEBACiAjaW5jbHVkZSA8c3BpcnZfbXNsLmhwcD4KIAogI2luY2x1ZGUgImNvbW1v
bi9hcHBsZV9wbGF0Zm9ybV91dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193
cmFwcGVyX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxh
eU10bC5oIgogCkBAIC0yMiwxMiArMjMsMTMgQEAgbmFtZXNwYWNlIG10bAogewogbmFtZXNwYWNl
CiB7Ci0KIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFuZ1RleHR1cmVEZXNjU2V0ICAgICAgICAg
ICAgICA9IDA7CiBjb25zdGV4cHIgdWludDMyX3Qga0dsc2xhbmdEZWZhdWx0VW5pZm9ybUFuZFhm
YkRlc2NTZXQgPSAxOwogY29uc3RleHByIHVpbnQzMl90IGtHbHNsYW5nRHJpdmVyVW5pZm9ybXNE
ZXNjU2V0ICAgICAgID0gMjsKIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFuZ1NoYWRlclJlc291
cmNlRGVzY1NldCAgICAgICA9IDM7CiAKK2NvbnN0ZXhwciBjaGFyIGtTaGFkb3dTYW1wbGVyQ29t
cGFyZU1vZGVzVmFyTmFtZVtdID0gIkFOR0xFU2hhZG93Q29tcGFyZU1vZGVzIjsKKwogLy8gT3Jp
Z2luYWwgbWFwcGluZyBvZiBmcm9udCBlbmQgZnJvbSBzYW1wbGVyIG5hbWUgdG8gbXVsdGlwbGUg
c2FtcGxlciBzbG90cyAoaW4gZm9ybSBvZgogLy8gc2xvdDpjb3VudCBwYWlyKQogdXNpbmcgT3Jp
Z2luYWxTYW1wbGVyQmluZGluZ01hcCA9CkBAIC01Niw5ICs1OCwxMyBAQCB2b2lkIFJlc2V0R2xz
bGFuZ1Byb2dyYW1JbnRlcmZhY2VJbmZvKEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJv
Z3JhbUludGVyZgogICAgIHN0YXRpY19hc3NlcnQoa0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4
ICE9IDAsICJrRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggbXVzdCBub3QgYmUgMCIpOwogfQog
CisKIEdsc2xhbmdTb3VyY2VPcHRpb25zIENyZWF0ZVNvdXJjZU9wdGlvbnMoKQogewogICAgIEds
c2xhbmdTb3VyY2VPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5lbXVsYXRlVHJhbnNmb3Jt
RmVlZGJhY2sgPSB0cnVlOworICAgIC8vIFdlIGNhbiBlYXJseSBvdXQgaW4gdGhlIE1TTCBvbmNl
IHRyYW5zZm9ybSBmZWVkYmFjayBpcyB3cml0dGVuCisgICAgb3B0aW9ucy50cmFuc2Zvcm1GZWVk
YmFja0Vhcmx5UmV0dXJuID0gdHJ1ZTsKICAgICByZXR1cm4gb3B0aW9uczsKIH0KIApAQCAtNzks
OCArODUsOCBAQCBzcHY6OkV4ZWN1dGlvbk1vZGVsIFNoYWRlclR5cGVUb1NwdkV4ZWN1dGlvbk1v
ZGVsKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCiB2b2lkIEJpbmRCdWZmZXJzKHNwaXJ2X2Ny
b3NzOjpDb21waWxlck1TTCAqY29tcGlsZXIsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHNwaXJ2
X2Nyb3NzOjpTbWFsbFZlY3RvcjxzcGlydl9jcm9zczo6UmVzb3VyY2U+ICZyZXNvdXJjZXMsCiAg
ICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCi0gICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9P
cmlnaW5hbEJpbmRpbmdzLAotICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9t
YXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKKyAgICAgICAgICAg
ICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiAmdWJvT3Jp
Z2luYWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8dWlu
dDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKICAgICAgICAgICAgICAgICAg
c3RkOjphcnJheTx1aW50MzJfdCwga01heEdMVUJPQmluZGluZ3M+ICp1Ym9CaW5kaW5nc1JlbWFw
T3V0LAogICAgICAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQzMl90LCBrTWF4U2hhZGVyWEZC
cz4gKnhmYkJpbmRpbmdSZW1hcE91dCwKICAgICAgICAgICAgICAgICAgYm9vbCAqdWJvQXJndW1l
bnRCdWZmZXJVc2VkKQpAQCAtMjUzLDMwICsyNTksNTAgQEAgdm9pZCBHZXRBc3NpZ25lZFNhbXBs
ZXJCaW5kaW5ncyhjb25zdCBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0wgJmNvbXBpbGVyTXNsLAog
ICAgIH0KIH0KIAotc3RkOjpzdHJpbmcgUG9zdFByb2Nlc3NUcmFuc2xhdGVkTXNsKGNvbnN0IHN0
ZDo6c3RyaW5nICZ0cmFuc2xhdGVkU291cmNlKQorc3RkOjpzdHJpbmcgUG9zdFByb2Nlc3NUcmFu
c2xhdGVkTXNsKGJvb2wgaGFzRGVwdGhTYW1wbGVyLCBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNs
YXRlZFNvdXJjZSkKIHsKKyAgICBzdGQ6OnN0cmluZyBzb3VyY2U7CisgICAgaWYgKGhhc0RlcHRo
U2FtcGxlcikKKyAgICB7CisgICAgICAgIC8vIEFkZCBBTkdMRVNoYWRvd0NvbXBhcmVNb2RlcyB2
YXJpYWJsZSB0byBtYWluKCksIFdlIG5lZWQgdG8gYWRkIGhlcmUgYmVjYXVzZSBpdCBpcyB0aGUK
KyAgICAgICAgLy8gb25seSB3YXkgd2l0aG91dCBtb2RpZnlpbmcgc3BpcnYtY3Jvc3MuCisgICAg
ICAgIHN0ZDo6cmVnZXggbWFpbkRlY2xhcmVSZWdleCgKKyAgICAgICAgICAgIFIiKCgodmVydGV4
fGZyYWdtZW50fGtlcm5lbClccytbX2EtekEtWjAtOTw+XStccyttYWluW15cKF0qXCgpKSIpOwor
ICAgICAgICBzdGQ6OnN0cmluZyBtYWluRGVjbGFyZVJlcGxhY2VTdHIgPSBzdGQ6OnN0cmluZygi
JDFjb25zdGFudCB1bmlmb3JtPHVpbnQ+ICoiKSArCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzVmFyTmFtZSArICJb
W2J1ZmZlcigiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyKGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4KSArICIpXV0sICI7Cisg
ICAgICAgIHNvdXJjZSA9IHN0ZDo6cmVnZXhfcmVwbGFjZSh0cmFuc2xhdGVkU291cmNlLCBtYWlu
RGVjbGFyZVJlZ2V4LCBtYWluRGVjbGFyZVJlcGxhY2VTdHIpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBzb3VyY2UgPSB0cmFuc2xhdGVkU291cmNlOworICAgIH0KKwogICAgIC8v
IEFkZCBmdW5jdGlvbl9jb25zdGFudCBhdHRyaWJ1dGUgdG8gZ2xfU2FtcGxlTWFzay4KICAgICAv
LyBFdmVuIHRob3VnaCB0aGlzIHZhcnlpbmcgaXMgb25seSB1c2VkIHdoZW4gQU5HTEVDb3ZlcmFn
ZU1hc2tFbmFibGVkIGlzIHRydWUsCiAgICAgLy8gdGhlIHNwaXJ2LWNyb3NzIGRvZXNuJ3QgYXNz
aWduIGZ1bmN0aW9uX2NvbnN0YW50IGF0dHJpYnV0ZSB0byBpdC4gVGh1cyBpdCB3b24ndCBiZSBk
ZWFkLWNvZGUKICAgICAvLyByZW1vdmVkIHdoZW4gQU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkPWZh
bHNlLgogICAgIHN0ZDo6c3RyaW5nIHNhbXBsZU1hc2tSZXBsYWNlU3RyID0gc3RkOjpzdHJpbmco
Iltbc2FtcGxlX21hc2ssIGZ1bmN0aW9uX2NvbnN0YW50KCIpICsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNoOjptdGw6OmtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3RO
YW1lICsgIildXSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDo6
VHJhbnNsYXRvck1ldGFsOjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCkgKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIildXSI7CiAKICAgICAvLyBUaGlz
IHJlcGxhY2VzICJnbF9TYW1wbGVNYXNrIFtbc2FtcGxlX21hc2tdXSIKICAgICAvLyAgICAgICAg
ICB3aXRoICJnbF9TYW1wbGVNYXNrIFtbc2FtcGxlX21hc2ssIGZ1bmN0aW9uX2NvbnN0YW50KEFO
R0xFQ292ZXJhZ2VNYXNrRW5hYmxlZCldXSIKICAgICBzdGQ6OnJlZ2V4IHNhbXBsZU1hc2tEZWNs
YXJlUmVnZXgoUiIoXFtccypcW1xzKnNhbXBsZV9tYXNrXHMqXF1ccypcXSkiKTsKLSAgICByZXR1
cm4gc3RkOjpyZWdleF9yZXBsYWNlKHRyYW5zbGF0ZWRTb3VyY2UsIHNhbXBsZU1hc2tEZWNsYXJl
UmVnZXgsIHNhbXBsZU1hc2tSZXBsYWNlU3RyKTsKKyAgICByZXR1cm4gc3RkOjpyZWdleF9yZXBs
YWNlKHNvdXJjZSwgc2FtcGxlTWFza0RlY2xhcmVSZWdleCwgc2FtcGxlTWFza1JlcGxhY2VTdHIp
OwogfQogCiAvLyBDdXN0b21pemVkIHNwaXJ2LWNyb3NzIGNvbXBpbGVyCiBjbGFzcyBTcGlydlRv
TXNsQ29tcGlsZXIgOiBwdWJsaWMgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMCiB7CiAgIHB1Ymxp
YzoKLSAgICBTcGlydlRvTXNsQ29tcGlsZXIoc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICYmc3ByaXYp
IDogc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMKHNwcml2KSB7fQorICAgIFNwaXJ2VG9Nc2xDb21w
aWxlcihDb250ZXh0ICpjb250ZXh0LCBzdGQ6OnZlY3Rvcjx1aW50MzJfdD4gJiZzcHJpdikKKyAg
ICAgICAgOiBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0woc3ByaXYpLCBtQ29udGV4dChjb250ZXh0
KQorICAgIHt9CiAKICAgICB2b2lkIGNvbXBpbGVFeChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBl
LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmlu
ZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAotICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dW5vcmRlcmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJp
bmRpbmdzLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlOjpIYXNoTWFwPHN0ZDo6c3Ry
aW5nLCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3MsCisgICAgICAgICAgICAgICAgICAg
Y29uc3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5k
aW5ncywKICAgICAgICAgICAgICAgICAgICBjb25zdCBPcmlnaW5hbFNhbXBsZXJCaW5kaW5nTWFw
ICZvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVk
U2hhZGVySW5mbyAqbXNsU2hhZGVySW5mb091dCkKICAgICB7CkBAIC0zMjgsOCArMzU0LDcgQEAg
Y2xhc3MgU3BpcnZUb01zbENvbXBpbGVyIDogcHVibGljIHNwaXJ2X2Nyb3NzOjpDb21waWxlck1T
TAogICAgICAgICAgICAgLy8gRm9yY2UgZGlzY3JldGUgc2xvdCBiaW5kaW5ncyBmb3IgdGV4dHVy
ZXMsIGRlZmF1bHQgdW5pZm9ybXMgJiBkcml2ZXIgdW5pZm9ybXMKICAgICAgICAgICAgIC8vIGlu
c3RlYWQgb2YgdXNpbmcgYXJndW1lbnQgYnVmZmVyLgogICAgICAgICAgICAgc3BpcnZfY3Jvc3M6
OkNvbXBpbGVyTVNMOjphZGRfZGlzY3JldGVfZGVzY3JpcHRvcl9zZXQoa0dsc2xhbmdUZXh0dXJl
RGVzY1NldCk7Ci0gICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmFkZF9kaXNj
cmV0ZV9kZXNjcmlwdG9yX3NldCgKLSAgICAgICAgICAgICAgICBrR2xzbGFuZ0RlZmF1bHRVbmlm
b3JtQW5kWGZiRGVzY1NldCk7CisgICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6
OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RlZmF1bHRVbmlmb3JtQW5kWGZi
RGVzY1NldCk7CiAgICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmFkZF9kaXNj
cmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RyaXZlclVuaWZvcm1zRGVzY1NldCk7CiAgICAg
ICAgIH0KICAgICAgICAgZWxzZQpAQCAtMzQwLDMxICszNjUsNzQyIEBAIGNsYXNzIFNwaXJ2VG9N
c2xDb21waWxlciA6IHB1YmxpYyBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0wKIAogICAgICAgICBz
cGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnNldF9tc2xfb3B0aW9ucyhjb21wT3B0KTsKIAorICAg
ICAgICBhZGRCdWlsdEluUmVzb3VyY2VzKCk7CisgICAgICAgIGFuYWx5emVTaGFkZXJWYXJpYWJs
ZXMoKTsKKwogICAgICAgICAvLyBBY3R1YWwgY29tcGlsYXRpb24KICAgICAgICAgbXNsU2hhZGVy
SW5mb091dC0+bWV0YWxTaGFkZXJTb3VyY2UgPQotICAgICAgICAgICAgUG9zdFByb2Nlc3NUcmFu
c2xhdGVkTXNsKHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6Y29tcGlsZSgpKTsKKyAgICAgICAg
ICAgIFBvc3RQcm9jZXNzVHJhbnNsYXRlZE1zbChtSGFzRGVwdGhTYW1wbGVyLCBzcGlydl9jcm9z
czo6Q29tcGlsZXJNU0w6OmNvbXBpbGUoKSk7CiAKICAgICAgICAgLy8gUmV0cmlldmUgYXV0b21h
dGljIHRleHR1cmUgc2xvdCBhc3NpZ25tZW50cwogICAgICAgICBHZXRBc3NpZ25lZFNhbXBsZXJC
aW5kaW5ncygqdGhpcywgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZvT3V0LT5hY3R1YWxTYW1wbGVyQmluZGlu
Z3MpOwogICAgIH0KKworICBwcml2YXRlOgorICAgIC8vIE92ZXJyaWRlIENvbXBpbGVyTVNMCisg
ICAgdm9pZCBlbWl0X2hlYWRlcigpIG92ZXJyaWRlCisgICAgeworICAgICAgICBzcGlydl9jcm9z
czo6Q29tcGlsZXJNU0w6OmVtaXRfaGVhZGVyKCk7CisgICAgICAgIGlmICghbUhhc0RlcHRoU2Ft
cGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IC8vIFdvcmsgYXJvdW5kIGNvZGUgZm9yIHRoZXNlIGlzc3VlczoKKyAgICAgICAgLy8gLSBzcHJp
dl9jcm9zcyBhbHdheXMgdHJhbnNsYXRlcyBzaGFkb3cgdGV4dHVyZSdzIHNhbXBsaW5nIHRvIHNh
bXBsZV9jb21wYXJlKCkgYW5kIGRvZXNuJ3QKKyAgICAgICAgLy8gdGFrZSBpbnRvIGFjY291bnQg
R0xfVEVYVFVSRV9DT01QQVJFX01PREU9R0xfTk9ORS4KKyAgICAgICAgLy8gLSBvbiBtYWNPUywg
ZXhwbGljaXQgbGV2ZWwgb2YgZGV0YWlsIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGluIHNh
bXBsZV9jb21wYXJlKCkuCisgICAgICAgIC8vIC0gb24gZGV2aWNlcyBwcmlvciB0byBpT1MgR1BV
IGZhbWlseSAzLCBjaGFuZ2luZyBzYW1wbGVyJ3MgY29tcGFyZSBtb2RlIG91dHNpZGUgc2hhZGVy
IGlzCisgICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQuCisgICAgICAgIGlmICghbUNvbnRleHQtPmdl
dERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd1J1bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUu
ZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGVtZW50KCIjZGVmaW5lIEFOR0xF
X01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9NT0RFIik7CisgICAgICAgIH0KKworICAg
ICAgICBzdGF0ZW1lbnQoImVudW0gY2xhc3MgQU5HTEVDb21wYXJlTW9kZSA6IHVpbnQiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIE5vbmUgPSAwLCIp
OworICAgICAgICBzdGF0ZW1lbnQoIiAgICBMZXNzLCIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICBMZXNzRXF1YWwsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIEdyZWF0ZXIsIik7CisgICAg
ICAgIHN0YXRlbWVudCgiICAgIEdyZWF0ZXJFcXVhbCwiKTsKKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgTmV2ZXIsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIEFsd2F5cywiKTsKKyAgICAgICAg
c3RhdGVtZW50KCIgICAgRXF1YWwsIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIE5vdEVxdWFs
LCIpOworICAgICAgICBzdGF0ZW1lbnQoIn07Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisK
KyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9y
bU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRWNvbXBhcmUoVCBk
ZXB0aCwgVCBkcmVmLCBVbmlmb3JtT3JVSW50IGNvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0
ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICBBTkdMRUNvbXBhcmVNb2RlIG1vZGUg
PSBzdGF0aWNfY2FzdDxBTkdMRUNvbXBhcmVNb2RlPihjb21wYXJlTW9kZSk7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgc3dpdGNoIChtb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgIHsi
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6TGVz
czoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICByZXR1cm4gZHJlZiA8IGRlcHRo
OyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpM
ZXNzRXF1YWw6Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAgcmV0dXJuIGRyZWYg
PD0gZGVwdGg7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNlIEFOR0xFQ29tcGFy
ZU1vZGU6OkdyZWF0ZXI6Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAgcmV0dXJu
IGRyZWYgPiBkZXB0aDsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVD
b21wYXJlTW9kZTo6R3JlYXRlckVxdWFsOiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAg
ICAgIHJldHVybiBkcmVmID49IGRlcHRoOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAg
Y2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpOZXZlcjoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
ICAgICAgICByZXR1cm4gMDsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5H
TEVDb21wYXJlTW9kZTo6QWx3YXlzOiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAg
IHJldHVybiAxOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBh
cmVNb2RlOjpFcXVhbDoiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgICAgICByZXR1cm4g
ZHJlZiA9PSBkZXB0aDsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVD
b21wYXJlTW9kZTo6Tm90RXF1YWw6Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAg
cmV0dXJuIGRyZWYgIT0gZGVwdGg7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBkZWZh
dWx0OiIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiAxOyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgIH0iKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAg
IHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVtZW50KCIvLyBXcmFwcGVyIGZ1bmN0aW9u
cyBmb3Igc2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7CisgICAgICAgIC8vIDJEIFBDRiBzYW1w
bGluZworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBP
cHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5l
IFQgQU5HTEV0ZXh0dXJlUENGKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIg
Y29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0
aW9ucywgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7Cisg
ICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNpZiBkZWZpbmVkKF9f
TUVUQUxfTUFDT1NfXykiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIGRpbXMgPSBm
bG9hdDIodGV4dHVyZS5nZXRfd2lkdGgoKSwgdGV4dHVyZS5nZXRfaGVpZ2h0KCkpOyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgaW1nQ29vcmQgPSBjb29yZCAqIGRpbXM7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB0ZXhlbFNpemUgPSAxLjAgLyBkaW1zOyIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgd2VpZ2h0ID0gZnJhY3QoaW1nQ29vcmQpOyIp
OworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCB0bCA9IEFOR0xFY29tcGFyZSh0ZXh0dXJl
LnNhbXBsZShzLCBjb29yZCwgb3B0aW9ucywgb2Zmc2V0KSwgIgorICAgICAgICAgICAgICAgICAg
ImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgZmxvYXQgdHIgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBm
bG9hdDIodGV4ZWxTaXplLngsIDAuMCksICIKKyAgICAgICAgICAgICAgICAgICJvcHRpb25zLCBv
ZmZzZXQpLCBjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIGZsb2F0IGJsID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNv
b3JkICsgZmxvYXQyKDAuMCwgdGV4ZWxTaXplLnkpLCAiCisgICAgICAgICAgICAgICAgICAib3B0
aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAg
ICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBiciA9IEFOR0xFY29tcGFyZSh0ZXh0dXJlLnNhbXBs
ZShzLCBjb29yZCArIHRleGVsU2l6ZSwgb3B0aW9ucywgIgorICAgICAgICAgICAgICAgICAgIm9m
ZnNldCksIGNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgZmxvYXQgdG9wID0gbWl4KHRsLCB0ciwgd2VpZ2h0LngpOyIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBib3R0b20gPSBtaXgoYmwsIGJyLCB3ZWlnaHQueCk7Iik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBtaXgodG9wLCBib3R0b20sIHdlaWdodC55
KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01B
Q09TX18pIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRWNvbXBhcmUodGV4
dHVyZS5zYW1wbGUocywgY29vcmQsIG9wdGlvbnMsIG9mZnNldCksICIKKyAgICAgICAgICAgICAg
ICAgICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRl
bWVudCgiI2VuZGlmICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKyAgICAgICAg
c3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgLy8gQ3Vi
ZSBQQ0Ygc2FtcGxpbmcKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1l
bnQoImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxl
ciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3Zh
bHVlLCBPcHQgb3B0aW9ucywgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIC8vIE5PVEUoaHFs
ZSk6IHRvIGltcGxlbWVudCIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEVj
b21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBvcHRpb25zKSwgY29tcGFyZV92YWx1ZSwg
IgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgLy8gMkQgYXJy
YXkgUENGIHNhbXBsaW5nCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVt
ZW50KAorICAgICAgICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0aDJkX2FycmF5
PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIKKyAgICAgICAgICAg
ICJhcnJheSwgZmxvYXQgY29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIGludDIgb2Zmc2V0LCBV
bmlmb3JtT3JVSW50ICIKKyAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2lmIGRlZmluZWQoX19NRVRB
TF9NQUNPU19fKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdDIgZGltcyA9IGZsb2F0
Mih0ZXh0dXJlLmdldF93aWR0aCgpLCB0ZXh0dXJlLmdldF9oZWlnaHQoKSk7Iik7CisgICAgICAg
IHN0YXRlbWVudCgiICAgIGZsb2F0MiBpbWdDb29yZCA9IGNvb3JkICogZGltczsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIHRleGVsU2l6ZSA9IDEuMCAvIGRpbXM7Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB3ZWlnaHQgPSBmcmFjdChpbWdDb29yZCk7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IHRsID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2Ft
cGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwgIgorICAgICAgICAgICAgICAg
ICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgZmxvYXQgdHIgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQg
KyBmbG9hdDIodGV4ZWxTaXplLngsIDAuMCksICIKKyAgICAgICAgICAgICAgICAgICJhcnJheSwg
b3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBibCA9IEFOR0xFY29tcGFyZSh0ZXh0dXJlLnNh
bXBsZShzLCBjb29yZCArIGZsb2F0MigwLjAsIHRleGVsU2l6ZS55KSwgIgorICAgICAgICAgICAg
ICAgICAgImFycmF5LCBvcHRpb25zLCBvZmZzZXQpLCBjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21w
YXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IGJyID0gQU5HTEVjb21w
YXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgdGV4ZWxTaXplLCBhcnJheSwgIgorICAgICAg
ICAgICAgICAgICAgIm9wdGlvbnMsIG9mZnNldCksIGNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBh
cmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdG9wID0gbWl4KHRsLCB0
ciwgd2VpZ2h0LngpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCBib3R0b20gPSBt
aXgoYmwsIGJyLCB3ZWlnaHQueCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBt
aXgodG9wLCBib3R0b20sIHdlaWdodC55KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSAg
Ly8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7CisgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQsIGFycmF5LCBvcHRp
b25zLCBvZmZzZXQpLCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgc2hhZG93
Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiAgLy8gaWYgZGVmaW5l
ZChfX01FVEFMX01BQ09TX18pIik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBz
dGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIDJEIHRleHR1cmUncyBzYW1wbGVfY29tcGFyZSgp
IHdyYXBwZXIKKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlu
bGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMs
IGZsb2F0MiBjb29yZCwgZmxvYXQgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUs
IE9wdCBvcHRpb25zLCBpbnQyIG9mZnNldCwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9k
ZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgKKyAgICAg
ICAgICAgICIjaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRM
X05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFs
dWUsIG9wdGlvbnMsIG9mZnNldCwgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVN
b2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29yZCwgY29tcGFyZV92YWx1
ZSwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAg
c3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBV
bmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVy
ZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxv
YXQgIgorICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBVbmlm
b3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsK
KyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVy
ZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAg
ICJpbnQyKDApLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIp
OworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBs
ZXIgcywgZmxvYXQyIGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92
YWx1ZSwgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7Cisg
ICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNpZiBkZWZpbmVkKEFO
R0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFSRV9NT0RFKSIpOworICAgICAgICBzdGF0
ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRleHR1cmUsIHMsIGNvb3JkLCBjb21w
YXJlX3ZhbHVlLCBsZXZlbCgwKSwgb2Zmc2V0LCAiCisgICAgICAgICAgICAgICAgICAic2hhZG93
Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlIik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBjb21w
YXJlX3ZhbHVlLCBvZmZzZXQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworICAg
ICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICAv
LyBDdWJlIHRleHR1cmUncyBzYW1wbGVfY29tcGFyZSgpIHdyYXBwZXIKKyAgICAgICAgc3RhdGVt
ZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3Jt
T3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoCisgICAgICAgICAgICAiaW5saW5lIFQgQU5H
TEV0ZXh0dXJlQ29tcGFyZShkZXB0aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDMg
Y29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywg
VW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7
Iik7CisgICAgICAgIHN0YXRlbWVudCgKKyAgICAgICAgICAgICIjaWYgZGVmaW5lZChfX01FVEFM
X01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJF
X01PREUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0Yo
dGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKyAgICAgICAgICAg
ICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiI2Vsc2Ui
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUo
cywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMpOyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiNlbmRpZiIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIi
KTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
bmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoCisgICAgICAgICAgICAiaW5saW5l
IFQgQU5HTEV0ZXh0dXJlQ29tcGFyZShkZXB0aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBm
bG9hdDMgY29vcmQsIGZsb2F0ICIKKyAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBVbmlmb3Jt
T3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIjaWYgZGVmaW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5USU1F
X0NPTVBBUkVfTU9ERSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4
dHVyZVBDRih0ZXh0dXJlLCBzLCBjb29yZCwgY29tcGFyZV92YWx1ZSwgbGV2ZWwoMCksICIKKyAg
ICAgICAgICAgICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiI2Vsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
X2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUpOyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiNlbmRpZiIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIi
KTsKKworICAgICAgICAvLyAyRCBhcnJheSB0ZXh0dXJlJ3Mgc2FtcGxlX2NvbXBhcmUoKSB3cmFw
cGVyCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9w
dCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUg
VCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDIgY29vcmQsICIKKyAgICAgICAgICAgICAgICAgICJ1aW50IGFycmF5LCBmbG9hdCBj
b21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgIgor
ICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1l
bnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KAorICAgICAgICAgICAgIiNpZiBkZWZpbmVkKF9f
TUVUQUxfTUFDT1NfXykgfHwgZGVmaW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5USU1FX0NP
TVBBUkVfTU9ERSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVy
ZVBDRih0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIK
KyAgICAgICAgICAgICAgICAgICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIjZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoCisgICAgICAgICAgICAi
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBhcnJheSwgY29tcGFy
ZV92YWx1ZSwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYi
KTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAg
ICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBl
bmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xF
dGV4dHVyZUNvbXBhcmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
MiBjb29yZCwgIgorICAgICAgICAgICAgICAgICAgInVpbnQgYXJyYXksIGZsb2F0IGNvbXBhcmVf
dmFsdWUsIE9wdCBvcHRpb25zLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFO
R0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVl
LCAiCisgICAgICAgICAgICAgICAgICAib3B0aW9ucywgaW50MigwKSwgc2hhZG93Q29tcGFyZU1v
ZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsK
KworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlm
b3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZUNv
bXBhcmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwg
IgorICAgICAgICAgICAgICAgICAgInVpbnQgYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIGlu
dDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dDb21w
YXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgi
I2lmIGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7
CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwg
cywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCBsZXZlbCgwKSwgIgorICAgICAgICAgICAg
ICAgICAgIm9mZnNldCwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiNlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZV9j
b21wYXJlKHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgb2Zmc2V0KTsiKTsKKyAgICAg
ICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAg
IHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgLy8gMkQgdGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxp
bmcgZnVuY3Rpb24KKyAgICAgICAgc3RhdGVtZW50KCIvLyBXcmFwcGVyIGZ1bmN0aW9ucyBmb3Ig
c2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7CisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVu
dCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBm
bG9hdDIgY29vcmQsIGludDIgb2Zmc2V0LCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQgY29t
cGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAg
c3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJl
TW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGNv
bXBhcmVfdmFsdWUsIG9mZnNldCwgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVN
b2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQo
IiAgICBlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb2Zmc2V0KTsiKTsK
KyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlu
bGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQy
IGNvb3JkLCBmbG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgVW5pZm9y
bU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7Cisg
ICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVyZSwgcywgY29v
cmQsIGludDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAgICAgICAgICJzaGFkb3dD
b21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBzdGF0ZW1l
bnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJp
bmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
MiBjb29yZCwgT3B0IG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJpbnQyIG9mZnNldCwg
ZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsK
KyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFk
b3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworICAgICAgICBz
dGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywg
Y29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKyAgICAgICAgICAgICAgICAgICJvZmZz
ZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHsi
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzLCBj
b29yZCwgb3B0aW9ucywgb2Zmc2V0KTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAg
ICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1l
IFVuaWZvcm1PclVJbnQ+Iik7CisgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0
dXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIE9wdCBvcHRp
b25zLCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9y
VUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVyZSwgcywgY29vcmQs
IG9wdGlvbnMsIGludDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAgICAgICAgICJz
aGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOworICAgICAgICBz
dGF0ZW1lbnQoIiIpOworCisgICAgICAgIC8vIEN1YmUgdGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxp
bmcgZnVuY3Rpb24KKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdM
RXRleHR1cmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQzIGNvb3JkLCBm
bG9hdCAiCisgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBz
aGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAgICAgIHN0
YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVy
ZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAg
ICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0i
KTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICB7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUo
cywgY29vcmQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisgICAgICAgIHN0YXRl
bWVudCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgi
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUlu
dD4iKTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGhjdWJl
PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBPcHQgIgorICAgICAgICAgICAg
ICAgICAgIm9wdGlvbnMsIGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93
Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1l
bnQoIiAgICBpZiAoc2hhZG93Q29tcGFyZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgiICAg
IHsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21w
YXJlKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisgICAgICAg
ICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICB9Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKyAgICAgICAgc3RhdGVtZW50
KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHMsIGNvb3JkLCBvcHRpb25zKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKworICAgICAg
ICAvLyAyRCBhcnJheSB0ZXh0dXJlJ3MgZ2VuZXJpYyBzYW1wbGluZyBmdW5jdGlvbgorICAgICAg
ICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50
PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkX2Fy
cmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIKKyAgICAgICAg
ICAgICAgICAgICJhcnJheSwgaW50MiBvZmZzZXQsICIKKyAgICAgICAgICAgICAgICAgICJmbG9h
dCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAg
ICAgICBzdGF0ZW1lbnQoInsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNoYWRvd0Nv
bXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisgICAgICAgIHN0YXRl
bWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0dXJlLCBzLCBjb29y
ZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsICIKKyAgICAgICAgICAgICAgICAgICJvZmZzZXQsIHNo
YWRvd0NvbXBhcmVNb2RlKTsiKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOworICAgICAg
ICBzdGF0ZW1lbnQoIiAgICBlbHNlIik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwg
YXJyYXksIG9mZnNldCk7Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAgICAgICAg
c3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAgICAgICAgc3RhdGVt
ZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4iKTsKKyAg
ICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0
ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisgICAgICAgICAgICAgICAg
ICAiYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFy
ZU1vZGUpIik7CisgICAgICAgIHN0YXRlbWVudCgieyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAg
ICByZXR1cm4gQU5HTEV0ZXh0dXJlKHRleHR1cmUsIHMsIGNvb3JkLCBhcnJheSwgaW50MigwKSwg
Y29tcGFyZV92YWx1ZSwgIgorICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsi
KTsKKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisgICAgICAgIHN0YXRlbWVudCgiIik7CisKKyAg
ICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBl
bmFtZSBVbmlmb3JtT3JVSW50PiIpOworICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xF
dGV4dHVyZShkZXB0aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3Jk
LCB1aW50ICIKKyAgICAgICAgICAgICAgICAgICJhcnJheSwgT3B0IG9wdGlvbnMsIGludDIgb2Zm
c2V0LCAiCisgICAgICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9y
VUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisgICAg
ICAgIHN0YXRlbWVudCgiICAgIGlmIChzaGFkb3dDb21wYXJlTW9kZSkiKTsKKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgeyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xF
dGV4dHVyZUNvbXBhcmUodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCAi
CisgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7
Iik7CisgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKyAgICAgICAgc3RhdGVtZW50KCIgICAg
ZWxzZSIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisgICAgICAgIHN0YXRlbWVudCgi
ICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywgY29vcmQsIGFycmF5LCBvcHRpb25zLCBv
ZmZzZXQpOyIpOworICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisgICAgICAgIHN0YXRlbWVu
dCgifSIpOworICAgICAgICBzdGF0ZW1lbnQoIiIpOworCisgICAgICAgIHN0YXRlbWVudCgidGVt
cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5pZm9ybU9yVUludD4i
KTsKKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJh
eTxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisgICAgICAgICAg
ICAgICAgICAiYXJyYXksIE9wdCBvcHRpb25zLCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBVbmlmb3Jt
T3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZSh0ZXh0dXJlLCBzLCBjb29y
ZCwgYXJyYXksIG9wdGlvbnMsIGludDIoMCksICIKKyAgICAgICAgICAgICAgICAgICJjb21wYXJl
X3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisgICAgICAgIHN0YXRlbWVudCgifSIpOwor
ICAgICAgICBzdGF0ZW1lbnQoIiIpOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmN0
aW9uX25hbWUoc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQgaW1nLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJUeXBlICZpbWdUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0ZldGNoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0dhdGhlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaXNQcm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBoYXNBcnJheU9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGhhc09mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aGFzR3JhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzRHJlZiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pbkxvZCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmICghaGFzRHJlZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHNw
aXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6dG9fZnVuY3Rpb25fbmFtZShpbWcsIGltZ1R5cGUsIGlz
RmV0Y2gsIGlzR2F0aGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc1Byb2osIGhhc0FycmF5T2Zmc2V0cywgaGFzT2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYXNHcmFkLCBoYXNEcmVmLCBsb2QsIG1pbkxvZCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBVc2UgY3VzdG9tIEFOR0xFdGV4dHVyZSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHVzaW5n
IGJ1aWx0LWluIHNhbXBsZV9jb21wYXJlKCkKKyAgICAgICAgcmV0dXJuICJBTkdMRXRleHR1cmUi
OworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmN0aW9uX2FyZ3Moc3BpcnZfY3Jvc3M6
OlZhcmlhYmxlSUQgaW1nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3BpcnZfY3Jvc3M6OlNQSVJUeXBlICZpbWdUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpc0ZldGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpc0dhdGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNQ
cm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY29vcmQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb29yZENvbXBvbmVudHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkcmVmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZ3JhZFgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBncmFkWSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90IGNvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBiaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY29tcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNhbXBsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pbmxvZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKnBGb3J3YXJkKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYm9vbCBmb3J3YXJkOworICAgICAgICBzdGQ6OnN0cmluZyBhcmdzV2l0aG91dERyZWYg
PSBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnRvX2Z1bmN0aW9uX2FyZ3MoCisgICAgICAgICAg
ICBpbWcsIGltZ1R5cGUsIGlzRmV0Y2gsIGlzR2F0aGVyLCBpc1Byb2osIGNvb3JkLCBjb29yZENv
bXBvbmVudHMsIDAsIGdyYWRYLCBncmFkWSwgbG9kLAorICAgICAgICAgICAgY29mZnNldCwgb2Zm
c2V0LCBiaWFzLCBjb21wLCBzYW1wbGUsIG1pbmxvZCwgJmZvcndhcmQpOworCisgICAgICAgIGlm
ICghZHJlZikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBGb3J3YXJkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICpwRm9yd2FyZCA9IGZvcndhcmQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gYXJnc1dpdGhvdXREcmVmOworICAgICAgICB9CisgICAgICAg
IC8vIENvbnZlcnQgdG8gYXJndW1lbnRzIHRvIEFOR0xFdGV4dHVyZS4KKyAgICAgICAgc3RkOjpz
dHJpbmcgYXJncyA9IHRvX2V4cHJlc3Npb24oaW1nKTsKKyAgICAgICAgYXJncyArPSAiLCAiOwor
ICAgICAgICBhcmdzICs9IGFyZ3NXaXRob3V0RHJlZjsKKyAgICAgICAgYXJncyArPSAiLCAiOwor
CisgICAgICAgIGZvcndhcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBmb3J3YXJk
ICYmIHNob3VsZF9mb3J3YXJkKGRyZWYpOworICAgICAgICBjb25zdCBzcGlydl9jcm9zczo6U1BJ
UlR5cGUgJmRyZWZUeXBlID0gZXhwcmVzc2lvbl90eXBlKGRyZWYpOworICAgICAgICBzdGQ6OnN0
cmluZyBkcmVmRXhwcjsKKyAgICAgICAgdWludDMyX3QgYWx0Q29vcmRDb21wb25lbnQgPSAwOwor
ICAgICAgICBzd2l0Y2ggKGltZ1R5cGUuaW1hZ2UuZGltKQorICAgICAgICB7CisgICAgICAgICAg
ICBjYXNlIHNwdjo6RGltMkQ6CisgICAgICAgICAgICAgICAgYWx0Q29vcmRDb21wb25lbnQgPSAy
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBzcHY6OkRpbTNEOgor
ICAgICAgICAgICAgY2FzZSBzcHY6OkRpbUN1YmU6CisgICAgICAgICAgICAgICAgYWx0Q29vcmRD
b21wb25lbnQgPSAzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGlmIChpc1Byb2opCisgICAgICAgICAgICBkcmVmRXhwciA9
IHNwaXJ2X2Nyb3NzOjpqb2luKHRvX2VuY2xvc2VkX2V4cHJlc3Npb24oZHJlZiksICIgLyAiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19leHRyYWN0X2NvbXBv
bmVudF9leHByZXNzaW9uKGNvb3JkLCBhbHRDb29yZENvbXBvbmVudCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBkcmVmRXhwciA9IHRvX2V4cHJlc3Npb24oZHJlZik7CisKKyAgICAgICAg
aWYgKGRyZWZUeXBlLmJhc2V0eXBlID09IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZTo6SGFsZikKKyAg
ICAgICAgICAgIGRyZWZFeHByID0gY29udmVydF90b19mMzIoZHJlZkV4cHIsIDEpOworCisgICAg
ICAgIGFyZ3MgKz0gZHJlZkV4cHI7CisgICAgICAgIGFyZ3MgKz0gIiwgIjsKKyAgICAgICAgYXJn
cyArPSB0b1NoYWRvd0NvbXBhcmVNb2RlRXhwcmVzc2lvbihpbWcpOworCisgICAgICAgIGlmIChw
Rm9yd2FyZCkKKyAgICAgICAgeworICAgICAgICAgICAgKnBGb3J3YXJkID0gZm9yd2FyZDsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBhcmdzOworICAgIH0KKworICAgIC8vIE92ZXJyaWRl
IGZ1bmN0aW9uIHByb3RvdHlwZSBlbWl0dGVyIHRvIGluc2VydCBzaGFkb3cgY29tcGFyZSBtb2Rl
IGZsYWcgdG8gY29tZQorICAgIC8vIHRvZ2V0aGVyIHdpdGggdGhlIHNoYWRvdyBzYW1wbGVyLiBO
T1RFKGhxbGUpOiBUaGlzIGlzIGp1c3QgOTAlIGNvcHkgb2Ygc3BpcnZfbXNsJ3MgY29kZS4KKyAg
ICAvLyBUaGUgYmV0dGVyIHdheSBpcyBtb2RpZnlpbmcgYW5kIGNyZWF0aW5nIGEgUFIgb24gc3Bp
cnYtY3Jvc3MgcmVwbyBkaXJlY3RseS4gQnV0IHRoaXMgc2hvdWxkCisgICAgLy8gYmUgYSB3b3Jr
IGFyb3VuZCBzb2x1dGlvbiBmb3Igbm93LgorICAgIHZvaWQgZW1pdF9mdW5jdGlvbl9wcm90b3R5
cGUoc3BpcnZfY3Jvc3M6OlNQSVJGdW5jdGlvbiAmZnVuYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpCaXRzZXQgJikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIC8vIFR1cm4gb2ZmIGNsYW5nLWZvcm1hdCB0byBlYXNpZXIgY29tcGFyZSB3aXRo
IG9yaWdpbmFsIGNvZGUKKyAgICAgICAgLy8gY2xhbmctZm9ybWF0IG9mZgorICAgICAgICB1c2lu
ZyBuYW1lc3BhY2Ugc3BpcnZfY3Jvc3M7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBzcHY7Cisg
ICAgICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKyAgICAgICAgaWYgKGZ1bmMuc2VsZiAhPSBp
ci5kZWZhdWx0X2VudHJ5X3BvaW50KQorICAgICAgICAgICAgYWRkX2Z1bmN0aW9uX292ZXJsb2Fk
KGZ1bmMpOworCisgICAgICAgIGxvY2FsX3ZhcmlhYmxlX25hbWVzID0gcmVzb3VyY2VfbmFtZXM7
CisgICAgICAgIHN0cmluZyBkZWNsOworCisgICAgICAgIHByb2Nlc3NpbmdfZW50cnlfcG9pbnQg
PSBmdW5jLnNlbGYgPT0gaXIuZGVmYXVsdF9lbnRyeV9wb2ludDsKKworICAgICAgICAvLyBNZXRh
bCBoZWxwZXIgZnVuY3Rpb25zIG11c3QgYmUgc3RhdGljIGZvcmNlLWlubGluZSBvdGhlcndpc2Ug
dGhleSB3aWxsIGNhdXNlIHByb2JsZW1zIHdoZW4gbGlua2VkIHRvZ2V0aGVyIGluIGEgc2luZ2xl
IE1ldGFsbGliLgorICAgICAgICBpZiAoIXByb2Nlc3NpbmdfZW50cnlfcG9pbnQpCisgICAgICAg
ICAgICBzdGF0ZW1lbnQoInN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGlu
ZSkpIik7CisKKyAgICAgICAgYXV0byAmdHlwZSA9IGdldDxTUElSVHlwZT4oZnVuYy5yZXR1cm5f
dHlwZSk7CisKKyAgICAgICAgaWYgKCF0eXBlLmFycmF5LmVtcHR5KCkgJiYgbXNsX29wdGlvbnMu
Zm9yY2VfbmF0aXZlX2FycmF5cykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgY2Fubm90
IHJldHVybiBuYXRpdmUgYXJyYXlzIGluIE1TTCwgc28gInJldHVybiIgdGhyb3VnaCBhbiBvdXQg
dmFyaWFibGUuCisgICAgICAgICAgICBkZWNsICs9ICJ2b2lkIjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlY2wgKz0gZnVuY190eXBlX2RlY2wodHlw
ZSk7CisgICAgICAgIH0KKworICAgICAgICBkZWNsICs9ICIgIjsKKyAgICAgICAgZGVjbCArPSB0
b19uYW1lKGZ1bmMuc2VsZik7CisgICAgICAgIGRlY2wgKz0gIigiOworCisgICAgICAgIGlmICgh
dHlwZS5hcnJheS5lbXB0eSgpICYmIG1zbF9vcHRpb25zLmZvcmNlX25hdGl2ZV9hcnJheXMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZha2UgYXJyYXlzIHJldHVybnMgYnkgd3JpdGluZyB0
byBhbiBvdXQgYXJyYXkgaW5zdGVhZC4KKyAgICAgICAgICAgIGRlY2wgKz0gInRocmVhZCAiOwor
ICAgICAgICAgICAgZGVjbCArPSB0eXBlX3RvX2dsc2wodHlwZSk7CisgICAgICAgICAgICBkZWNs
ICs9ICIgKCZTUElSVl9Dcm9zc19yZXR1cm5fdmFsdWUpIjsKKyAgICAgICAgICAgIGRlY2wgKz0g
dHlwZV90b19hcnJheV9nbHNsKHR5cGUpOworICAgICAgICAgICAgaWYgKCFmdW5jLmFyZ3VtZW50
cy5lbXB0eSgpKQorICAgICAgICAgICAgICAgIGRlY2wgKz0gIiwgIjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChwcm9jZXNzaW5nX2VudHJ5X3BvaW50KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobXNsX29wdGlvbnMuYXJndW1lbnRfYnVmZmVycykKKyAgICAgICAgICAgICAgICBkZWNs
ICs9IGVudHJ5X3BvaW50X2FyZ3NfYXJndW1lbnRfYnVmZmVyKCFmdW5jLmFyZ3VtZW50cy5lbXB0
eSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkZWNsICs9IGVudHJ5X3Bv
aW50X2FyZ3NfY2xhc3NpYyghZnVuYy5hcmd1bWVudHMuZW1wdHkoKSk7CisKKyAgICAgICAgICAg
IC8vIElmIGVudHJ5IHBvaW50IGZ1bmN0aW9uIGhhcyB2YXJpYWJsZXMgdGhhdCByZXF1aXJlIGVh
cmx5IGRlY2xhcmF0aW9uLAorICAgICAgICAgICAgLy8gZW5zdXJlIHRoZXkgZWFjaCBoYXZlIGFu
IGVtcHR5IGluaXRpYWxpemVyLCBjcmVhdGluZyBvbmUgaWYgbmVlZGVkLgorICAgICAgICAgICAg
Ly8gVGhpcyBpcyBkb25lIGF0IHRoaXMgbGF0ZSBzdGFnZSBiZWNhdXNlIHRoZSBpbml0aWFsaXph
dGlvbiBleHByZXNzaW9uCisgICAgICAgICAgICAvLyBpcyBjbGVhcmVkIGFmdGVyIGVhY2ggY29t
cGlsYXRpb24gcGFzcy4KKyAgICAgICAgICAgIGZvciAoYXV0byB2YXJfaWQgOiB2YXJzX25lZWRp
bmdfZWFybHlfZGVjbGFyYXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0
byAmZWRfdmFyID0gZ2V0PFNQSVJWYXJpYWJsZT4odmFyX2lkKTsKKyAgICAgICAgICAgICAgICBJ
RCAmaW5pdGlhbGl6ZXIgPSBlZF92YXIuaW5pdGlhbGl6ZXI7CisgICAgICAgICAgICAgICAgaWYg
KCFpbml0aWFsaXplcikKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSBpci5pbmNy
ZWFzZV9ib3VuZF9ieSgxKTsKKworICAgICAgICAgICAgICAgIC8vIERvIG5vdCBvdmVycmlkZSBw
cm9wZXIgaW5pdGlhbGl6ZXJzLgorICAgICAgICAgICAgICAgIGlmIChpci5pZHNbaW5pdGlhbGl6
ZXJdLmdldF90eXBlKCkgPT0gVHlwZU5vbmUgfHwgaXIuaWRzW2luaXRpYWxpemVyXS5nZXRfdHlw
ZSgpID09IFR5cGVFeHByZXNzaW9uKQorICAgICAgICAgICAgICAgICAgICBzZXQ8U1BJUkV4cHJl
c3Npb24+KGVkX3Zhci5pbml0aWFsaXplciwgInt9IiwgZWRfdmFyLmJhc2V0eXBlLCB0cnVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byAmYXJnIDogZnVu
Yy5hcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnQzMl90IG5hbWVfaWQgPSBh
cmcuaWQ7CisKKyAgICAgICAgICAgIGF1dG8gKnZhciA9IG1heWJlX2dldDxTUElSVmFyaWFibGU+
KGFyZy5pZCk7CisgICAgICAgICAgICBpZiAodmFyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIElmIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSwg
bWFrZSBzdXJlIHdlIG1vZGlmeSB0aGUgb3JpZ2luYWwgdmFyaWFibGUuCisgICAgICAgICAgICAg
ICAgLy8gT3VyIGFsaWFzIGlzIGp1c3QgYSBzaGFkb3cgdmFyaWFibGUuCisgICAgICAgICAgICAg
ICAgaWYgKGFyZy5hbGlhc19nbG9iYWxfdmFyaWFibGUgJiYgdmFyLT5iYXNldmFyaWFibGUpCisg
ICAgICAgICAgICAgICAgICAgIG5hbWVfaWQgPSB2YXItPmJhc2V2YXJpYWJsZTsKKworICAgICAg
ICAgICAgICAgIHZhci0+cGFyYW1ldGVyID0gJmFyZzsgLy8gSG9sZCBhIHBvaW50ZXIgdG8gdGhl
IHBhcmFtZXRlciBzbyB3ZSBjYW4gaW52YWxpZGF0ZSB0aGUgcmVhZG9ubHkgZmllbGQgaWYgbmVl
ZGVkLgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhZGRfbG9jYWxfdmFyaWFibGVfbmFt
ZShuYW1lX2lkKTsKKworICAgICAgICAgICAgZGVjbCArPSBhcmd1bWVudF9kZWNsKGFyZyk7CisK
KyAgICAgICAgICAgIGJvb2wgaXNfZHluYW1pY19pbWdfc2FtcGxlciA9IGhhc19leHRlbmRlZF9k
ZWNvcmF0aW9uKGFyZy5pZCwgU1BJUlZDcm9zc0RlY29yYXRpb25EeW5hbWljSW1hZ2VTYW1wbGVy
KTsKKworICAgICAgICAgICAgYXV0byAmYXJnX3R5cGUgPSBnZXQ8U1BJUlR5cGU+KGFyZy50eXBl
KTsKKyAgICAgICAgICAgIGlmIChhcmdfdHlwZS5iYXNldHlwZSA9PSBTUElSVHlwZTo6U2FtcGxl
ZEltYWdlICYmICFpc19keW5hbWljX2ltZ19zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIC8vIE1hbnVmYWN0dXJlIGF1dG9tYXRpYyBwbGFuZSBhcmdzIGZvciBtdWx0aXBs
YW5hciB0ZXh0dXJlCisgICAgICAgICAgICAgICAgdWludDMyX3QgcGxhbmVzID0gMTsKKyAgICAg
ICAgICAgICAgICBpZiAoYXV0byAqY29uc3RleHByX3NhbXBsZXIgPSBmaW5kX2NvbnN0ZXhwcl9z
YW1wbGVyKG5hbWVfaWQpKQorICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RleHByX3NhbXBs
ZXItPnljYmNyX2NvbnZlcnNpb25fZW5hYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcGxh
bmVzID0gY29uc3RleHByX3NhbXBsZXItPnBsYW5lczsKKyAgICAgICAgICAgICAgICBmb3IgKHVp
bnQzMl90IGkgPSAxOyBpIDwgcGxhbmVzOyBpKyspCisgICAgICAgICAgICAgICAgICAgIGRlY2wg
Kz0gam9pbigiLCAiLCBhcmd1bWVudF9kZWNsKGFyZyksIHBsYW5lX25hbWVfc3VmZml4LCBpKTsK
KworICAgICAgICAgICAgICAgIC8vIE1hbnVmYWN0dXJlIGF1dG9tYXRpYyBzYW1wbGVyIGFyZyBm
b3IgU2FtcGxlZEltYWdlIHRleHR1cmUKKyAgICAgICAgICAgICAgICBpZiAoYXJnX3R5cGUuaW1h
Z2UuZGltICE9IERpbUJ1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIs
IHRocmVhZCBjb25zdCAiLCBzYW1wbGVyX3R5cGUoYXJnX3R5cGUpLCAiICIsIHRvX3NhbXBsZXJf
ZXhwcmVzc2lvbihhcmcuaWQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFu
dWZhY3R1cmUgYXV0b21hdGljIHN3aXp6bGUgYXJnLgorICAgICAgICAgICAgaWYgKG1zbF9vcHRp
b25zLnN3aXp6bGVfdGV4dHVyZV9zYW1wbGVzICYmIGhhc19zYW1wbGVkX2ltYWdlcyAmJiBpc19z
YW1wbGVkX2ltYWdlX3R5cGUoYXJnX3R5cGUpICYmCisgICAgICAgICAgICAgICAgIWlzX2R5bmFt
aWNfaW1nX3NhbXBsZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhcmdf
aXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJyYXkuZW1wdHkoKTsKKyAgICAgICAgICAgICAgICBkZWNs
ICs9IGpvaW4oIiwgY29uc3RhbnQgdWludCIsIGFyZ19pc19hcnJheSA/ICIqICIgOiAiJiAiLCB0
b19zd2l6emxlX2V4cHJlc3Npb24oYXJnLmlkKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChidWZmZXJzX3JlcXVpcmluZ19hcnJheV9sZW5ndGguY291bnQobmFtZV9pZCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5
cGUuYXJyYXkuZW1wdHkoKTsKKyAgICAgICAgICAgICAgICBkZWNsICs9IGpvaW4oIiwgY29uc3Rh
bnQgdWludCIsIGFyZ19pc19hcnJheSA/ICIqICIgOiAiJiAiLCB0b19idWZmZXJfc2l6ZV9leHBy
ZXNzaW9uKG5hbWVfaWQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlzX3Nh
bXBsZWRfaW1hZ2VfdHlwZShhcmdfdHlwZSkgJiYgYXJnX3R5cGUuaW1hZ2UuZGVwdGgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUu
YXJyYXkuZW1wdHkoKTsKKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgc2hhZG93IGNvbXBhcmUg
bW9kZSBmbGFnIHRvIHRoZSBhcmd1bWVudCBzZXF1ZW5jZToKKyAgICAgICAgICAgICAgICBkZWNs
ICs9IGpvaW4oIiwgY29uc3RhbnQgdW5pZm9ybTx1aW50PiIsIGFyZ19pc19hcnJheSA/ICIqICIg
OiAiJiAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1NoYWRvd0NvbXBhcmVNb2Rl
RXhwcmVzc2lvbihhcmcuaWQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCZh
cmcgIT0gJmZ1bmMuYXJndW1lbnRzLmJhY2soKSkKKyAgICAgICAgICAgICAgICBkZWNsICs9ICIs
ICI7CisgICAgICAgIH0KKworICAgICAgICBkZWNsICs9ICIpIjsKKyAgICAgICAgc3RhdGVtZW50
KGRlY2wpOworCisgICAgICAgIC8vIGNsYW5nLWZvcm1hdCBvbgorICAgIH0KKworICAgIC8vIE92
ZXJyaWRlIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzIHBhc3NpbmcgZ2VuZXJhdG9yIHRvIGluc2Vy
dCBzaGFkb3cgY29tcGFyZSBtb2RlIGZsYWcgdG8gY29tZQorICAgIC8vIHRvZ2V0aGVyIHdpdGgg
dGhlIHNoYWRvdyBzYW1wbGVyCisgICAgc3RkOjpzdHJpbmcgdG9fZnVuY19jYWxsX2FyZyhjb25z
dCBzcGlydl9jcm9zczo6U1BJUkZ1bmN0aW9uOjpQYXJhbWV0ZXIgJmFyZywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlkKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgc3RkOjpzdHJpbmcgYXJnX3N0ciA9IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6dG9fZnVu
Y19jYWxsX2FyZyhhcmcsIGlkKTsKKworICAgICAgICBjb25zdCBzcGlydl9jcm9zczo6U1BJUlR5
cGUgJnR5cGUgPSBleHByZXNzaW9uX3R5cGUoaWQpOworCisgICAgICAgIGlmIChpc19zYW1wbGVk
X2ltYWdlX3R5cGUodHlwZSkgJiYgdHlwZS5pbWFnZS5kZXB0aCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1vZGUgZmxhZyB0byB0aGUgYXJndW1lbnQg
c2VxdWVuY2U6CisgICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIHRoZSBiYXNlIHZhcmlhYmxl
IGluIGNhc2Ugd2UgbmVlZCB0byBhcHBseSBhIHF1YWxpZmllZCBhbGlhcy4KKyAgICAgICAgICAg
IHVpbnQzMl90IHZhcl9pZCA9IDA7CisgICAgICAgICAgICBhdXRvICp2YXIgICAgICAgPSBtYXli
ZV9nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJWYXJpYWJsZT4oaWQpOworICAgICAgICAgICAgaWYgKHZh
cikKKyAgICAgICAgICAgICAgICB2YXJfaWQgPSB2YXItPmJhc2V2YXJpYWJsZTsKKworICAgICAg
ICAgICAgYXJnX3N0ciArPSAiLCAiICsgdG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24odmFy
X2lkID8gdmFyX2lkIDogaWQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhcmdfc3RyOwor
ICAgIH0KKworICAgIC8vIEFkZGl0aW9uYWwgZnVuY3Rpb25zCisgICAgdm9pZCBhZGRCdWlsdElu
UmVzb3VyY2VzKCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHZhcklkID0gYnVpbGRfY29uc3Rh
bnRfdWludF9hcnJheV9wb2ludGVyKCk7CisgICAgICAgIHNldF9uYW1lKHZhcklkLCBrU2hhZG93
U2FtcGxlckNvbXBhcmVNb2Rlc1Zhck5hbWUpOworICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZl
ciBtYXRjaCBhbnl0aGluZy4KKyAgICAgICAgc2V0X2RlY29yYXRpb24odmFySWQsIHNwdjo6RGVj
b3JhdGlvbkRlc2NyaXB0b3JTZXQsIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0lu
ZGV4KTsKKyAgICAgICAgc2V0X2RlY29yYXRpb24odmFySWQsIHNwdjo6RGVjb3JhdGlvbkJpbmRp
bmcsIDApOworICAgICAgICBzZXRfZXh0ZW5kZWRfZGVjb3JhdGlvbih2YXJJZCwgc3BpcnZfY3Jv
c3M6OlNQSVJWQ3Jvc3NEZWNvcmF0aW9uUmVzb3VyY2VJbmRleFByaW1hcnksIDApOworICAgICAg
ICBtQU5HTEVTaGFkb3dDb21wYXJlTW9kZXNWYXJJZCA9IHZhcklkOworICAgIH0KKworICAgIHZv
aWQgYW5hbHl6ZVNoYWRlclZhcmlhYmxlcygpCisgICAgeworICAgICAgICBpci5mb3JfZWFjaF90
eXBlZF9pZDxzcGlydl9jcm9zczo6U1BJUlZhcmlhYmxlPihbdGhpc10odWludDMyX3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzcGlydl9jcm9zczo6U1BJUlZhcmlhYmxlICZ2YXIpIHsKKyAgICAgICAgICAgIGNvbnN0IHNw
aXJ2X2Nyb3NzOjpTUElSVHlwZSAmdHlwZSA9IGdldF92YXJpYWJsZV9kYXRhX3R5cGUodmFyKTsK
KyAgICAgICAgICAgIHVpbnQzMl90IHZhcklkICAgICAgICAgICAgICAgICAgICA9IHZhci5zZWxm
OworCisgICAgICAgICAgICBpZiAodmFyLnN0b3JhZ2UgPT0gc3B2OjpTdG9yYWdlQ2xhc3NVbmlm
b3JtQ29uc3RhbnQgJiYgIWlzX2hpZGRlbl92YXJpYWJsZSh2YXIpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChpc19zYW1wbGVkX2ltYWdlX3R5cGUodHlwZSkgJiYgdHlwZS5p
bWFnZS5kZXB0aCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1IYXNE
ZXB0aFNhbXBsZXIgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gJmVudHJ5X2Z1
bmMgPSB0aGlzLT5nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJGdW5jdGlvbj4oaXIuZGVmYXVsdF9lbnRy
eV9wb2ludCk7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5X2Z1bmMuZml4dXBfaG9va3NfaW4u
cHVzaF9iYWNrKFt0aGlzLCAmdHlwZSwgJnZhciwgdmFySWRdKCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpc0FycmF5VHlwZSA9ICF0eXBlLmFycmF5LmVtcHR5KCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCgiY29uc3RhbnQgdW5pZm9ybTx1aW50PiIsIGlz
QXJyYXlUeXBlID8gIiogIiA6ICImICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24odmFySWQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzQXJyYXlUeXBlID8gIiA9ICYiIDogIiA9ICIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fbmFtZShtQU5HTEVTaGFkb3dDb21wYXJlTW9k
ZXNWYXJJZCksICJbIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGlydl9j
cm9zczo6Y29udmVydF90b19zdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldF9tZXRhbF9yZXNvdXJjZV9pbmRleCh2YXIsIHNwaXJ2X2Nyb3NzOjpTUElSVHlw
ZTo6SW1hZ2UpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXTsiKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyB0b1NoYWRvd0NvbXBhcmVNb2Rl
RXhwcmVzc2lvbih1aW50MzJfdCBpZCkKKyAgICB7CisgICAgICAgIGNvbnN0ZXhwciBjaGFyIGtD
b21wYXJlTW9kZVN1ZmZpeFtdID0gIl9Db21wTW9kZSI7CisgICAgICAgIGF1dG8gKmNvbWJpbmVk
ICAgICAgICAgICAgICAgICAgICAgID0gbWF5YmVfZ2V0PHNwaXJ2X2Nyb3NzOjpTUElSQ29tYmlu
ZWRJbWFnZVNhbXBsZXI+KGlkKTsKKworICAgICAgICBzdGQ6OnN0cmluZyBleHByID0gdG9fZXhw
cmVzc2lvbihjb21iaW5lZCA/IGNvbWJpbmVkLT5pbWFnZSA6IHNwaXJ2X2Nyb3NzOjpWYXJpYWJs
ZUlEKGlkKSk7CisgICAgICAgIGF1dG8gaW5kZXggICAgICAgPSBleHByLmZpbmRfZmlyc3Rfb2Yo
J1snKTsKKworICAgICAgICBpZiAoaW5kZXggPT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAg
ICAgICByZXR1cm4gZXhwciArIGtDb21wYXJlTW9kZVN1ZmZpeDsKKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvIGltYWdlRXhwciA9IGV4cHIuc3Vic3RyKDAsIGluZGV4
KTsKKyAgICAgICAgICAgIGF1dG8gYXJyYXlFeHByID0gZXhwci5zdWJzdHIoaW5kZXgpOworICAg
ICAgICAgICAgcmV0dXJuIGltYWdlRXhwciArIGtDb21wYXJlTW9kZVN1ZmZpeCArIGFycmF5RXhw
cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIENvbnRleHQgKm1Db250ZXh0OworICAgIHVpbnQz
Ml90IG1BTkdMRVNoYWRvd0NvbXBhcmVNb2Rlc1ZhcklkID0gMDsKKyAgICBib29sIG1IYXNEZXB0
aFNhbXBsZXIgICAgICAgICAgICAgICAgICA9IGZhbHNlOwogfTsKIAotYW5nbGU6OlJlc3VsdCBD
b252ZXJ0U3BpcnZUb01zbCgKLSAgICBDb250ZXh0ICpjb250ZXh0LAotICAgIGdsOjpTaGFkZXJU
eXBlIHNoYWRlclR5cGUsCi0gICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5n
LCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3MsCi0gICAgY29uc3Qgc3RkOjp1bm9yZGVy
ZWRfbWFwPHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmluZGluZ3MsCi0gICAgY29u
c3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCi0g
ICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICpzcHJpdkNvZGUsCi0gICAgVHJhbnNsYXRlZFNoYWRl
ckluZm8gKnRyYW5zbGF0ZWRTaGFkZXJJbmZvT3V0KQorYW5nbGU6OlJlc3VsdCBDb252ZXJ0U3Bp
cnZUb01zbChDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9Pcmln
aW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmds
ZTo6SGFzaE1hcDx1aW50MzJfdCwgdWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJpbmRpbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPcmlnaW5hbFNhbXBsZXJCaW5kaW5n
TWFwICZvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+ICpzcHJpdkNvZGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkU2hhZGVySW5m
b091dCkKIHsKICAgICBpZiAoIXNwcml2Q29kZSB8fCBzcHJpdkNvZGUtPmVtcHR5KCkpCiAgICAg
ewogICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiAgICAgfQogCi0gICAg
U3BpcnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNsKHN0ZDo6bW92ZSgqc3ByaXZDb2RlKSk7Cisg
ICAgU3BpcnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNsKGNvbnRleHQsIHN0ZDo6bW92ZSgqc3By
aXZDb2RlKSk7CiAKICAgICAvLyBOT1RFKGhxbGUpOiBzcGlydi1jcm9zcyB1c2VzIGV4Y2VwdGlv
bnMgdG8gcmVwb3J0IGVycm9yLCB3aGF0IHNob3VsZCB3ZSBkbyBoZXJlCiAgICAgLy8gaW4gY2Fz
ZSBvZiBlcnJvcj8KQEAgLTQzMSwxMiArMTE2NywxMyBAQCB2b2lkIEdsc2xhbmdHZXRTaGFkZXJT
b3VyY2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAogICAgICAgICAgICAg
b3B0aW9ucywgcHJvZ3JhbVN0YXRlLCAmeGZiT25seUludGVyZmFjZUluZm8sIHhmYk9ubHlTaGFk
ZXJTb3VyY2VPdXQsCiAgICAgICAgICAgICAmeGZiT25seVZhcmlhYmxlTWFwc1tnbDo6U2hhZGVy
VHlwZTo6VmVydGV4XSk7CiAKLSAgICAgICAgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhvcHRpb25z
LCBwcm9ncmFtU3RhdGUuZ2V0RXhlY3V0YWJsZSgpLCBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4ZmJPbmx5SW50ZXJmYWNlSW5mbywgJnhm
Yk9ubHlWYXJpYWJsZU1hcHMpOworICAgICAgICBHbHNsYW5nQXNzaWduTG9jYXRpb25zKG9wdGlv
bnMsIHByb2dyYW1TdGF0ZS5nZXRFeGVjdXRhYmxlKCksIGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgs
ICZ4ZmJPbmx5SW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
eGZiT25seVZhcmlhYmxlTWFwcyk7CiAgICAgICAgICp4ZmJPbmx5VlNWYXJpYWJsZUluZm9NYXBP
dXQgPSBzdGQ6Om1vdmUoeGZiT25seVZhcmlhYmxlTWFwc1tnbDo6U2hhZGVyVHlwZTo6VmVydGV4
XSk7CiAgICAgfQogfQogCisKIGFuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dldFNoYWRlclNwaXJ2Q29k
ZShFcnJvckhhbmRsZXIgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlNoYWRlckJpdFNldCAmbGlua2VkU2hhZGVyU3RhZ2VzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENh
cHMsCkBAIC00NzgsNyArMTIxNSw3IEBAIGFuZ2xlOjpSZXN1bHQgU3BpcnZDb2RlVG9Nc2woQ29u
dGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlZFNo
YWRlckluZm8gKm1zbFhmYk9ubHlTaGFkZXJJbmZvT3V0IC8qKiBudWxsYWJsZSAqLykKIHsKICAg
ICAvLyBSZXRyaWV2ZSBvcmlnaW5hbCB1bmlmb3JtIGJ1ZmZlciBiaW5kaW5ncyBnZW5lcmF0ZWQg
YnkgZnJvbnQgZW5kLiBXZSB3aWxsIG5lZWQgdG8gZG8gYSByZW1hcC4KLSAgICBzdGQ6OnVub3Jk
ZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiB1Ym9PcmlnaW5hbEJpbmRpbmdzOworICAg
IGFuZ2xlOjpIYXNoTWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gdWJvT3JpZ2luYWxCaW5kaW5n
czsKICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZibG9ja3MgPSBw
cm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUJsb2NrcygpOwogICAgIGZvciAodWludDMyX3QgYnVmZmVy
SWR4ID0gMDsgYnVmZmVySWR4IDwgYmxvY2tzLnNpemUoKTsgKytidWZmZXJJZHgpCiAgICAgewpA
QCAtNDg5LDcgKzEyMjYsNyBAQCBhbmdsZTo6UmVzdWx0IFNwaXJ2Q29kZVRvTXNsKENvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gUmV0cmlldmUgb3JpZ2luYWwgWEZC
IGJ1ZmZlcnMgYmluZGluZ3MgcHJvZHVjZWQgYnkgZnJvbnQgZW5kLgotICAgIHN0ZDo6dW5vcmRl
cmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+IHhmYk9yaWdpbmFsQmluZGluZ3M7CisgICAgYW5n
bGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiB4ZmJPcmlnaW5hbEJpbmRpbmdzOwogICAg
IGZvciAodWludDMyX3QgYnVmZmVySWR4ID0gMDsgYnVmZmVySWR4IDwga01heFNoYWRlclhGQnM7
ICsrYnVmZmVySWR4KQogICAgIHsKICAgICAgICAgc3RkOjpzdHJpbmcgYnVmZmVyTmFtZSA9IHJ4
OjpHZXRYZmJCdWZmZXJOYW1lKGJ1ZmZlcklkeCk7CkBAIC01MzMsNiArMTI3MCw1IEBAIGFuZ2xl
OjpSZXN1bHQgU3BpcnZDb2RlVG9Nc2woQ29udGV4dCAqY29udGV4dCwKIAogICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KLQogfSAgLy8gbmFtZXNwYWNlIG10bAogfSAgLy8g
bmFtZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lv
bl9xdWVyeV9wb29sLmgKaW5kZXggODdkYzIxNzY0NjM3YTFiMWZmZTM5YmU3MWMzZTI4NDRlODkx
MjdjYS4uZjg1NzAzNDk5ZDYxYmNlZmIxOGUwNTkxMTI1Y2NkY2Q2NzYyYTkzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaApAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9u
X3F1ZXJ5X3Bvb2wubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tCmluZGV4IDM2OGRiZjQ2Njk2
YWQyZjU0ODEyMzMyOTQwYWZiYjQyMjNlN2JmYWQuLjdjYzg5OTAwNGVjN2VhODNmZWY2ODVkZWFl
ZThjODBlMjk2NDY4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0KKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9v
Y2NsdXNpb25fcXVlcnlfcG9vbC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
MjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTUyLDE2ICs1MiwxNSBAQCBhbmdsZTo6UmVzdWx0IE9jY2x1c2lvblF1ZXJ5UG9v
bDo6YWxsb2NhdGVRdWVyeU9mZnNldChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIHsKICAg
ICAgICAgLy8gRmlyc3QgYWxsb2NhdGlvbgogICAgICAgICBBTkdMRV9UUlkoQnVmZmVyOjpNYWtl
QnVmZmVyV2l0aFJlc09wdChjb250ZXh0TXRsLCBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlUHJpdmF0
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga09jY2x1
c2lvblF1ZXJ5UmVzdWx0U2l6ZSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJm1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplLCBu
dWxscHRyLCAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOwogICAgICAgICBtUmVuZGVyUGFzc1Jl
c3VsdHNQb29sLT5nZXQoKS5sYWJlbCA9IEAiT2NjbHVzaW9uUXVlcnlQb29sIjsKICAgICB9CiAg
ICAgZWxzZSBpZiAoY3VycmVudE9mZnNldCArIGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUgPiBt
UmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5zaXplKCkpCiAgICAgewogICAgICAgICAvLyBEb3VibGUg
dGhlIGNhcGFjaXR5CiAgICAgICAgIEFOR0xFX1RSWShCdWZmZXI6Ok1ha2VCdWZmZXJXaXRoUmVz
T3B0KGNvbnRleHRNdGwsIE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQ
b29sLT5zaXplKCkgKiAyLCBudWxscHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJQYXNzUmVzdWx0c1Bvb2wtPnNpemUoKSAq
IDIsIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1SZW5k
ZXJQYXNzUmVzdWx0c1Bvb2wpKTsKICAgICAgICAgbVJlbmRlclBhc3NSZXN1bHRzUG9vbC0+Z2V0
KCkubGFiZWwgPSBAIk9jY2x1c2lvblF1ZXJ5UG9vbCI7CiAgICAgfQogCkBAIC04OCw2ICs4Nywx
MiBAQCBhbmdsZTo6UmVzdWx0IE9jY2x1c2lvblF1ZXJ5UG9vbDo6YWxsb2NhdGVRdWVyeU9mZnNl
dChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgIGlmIChjdXJyZW50T2Zmc2V0ID09IDApCiAg
ICAgewogICAgICAgICBtUmVzZXRGaXJzdFF1ZXJ5ID0gY2xlYXJPbGRWYWx1ZTsKKyAgICAgICAg
aWYgKCFjbGVhck9sZFZhbHVlICYmICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1
cmVzKCkuYWxsb3dCdWZmZXJSZWFkV3JpdGUuZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gSWYgb2xkIHZhbHVlIG9mIGZpcnN0IHF1ZXJ5IG5lZWRzIHRvIGJlIHJldGFpbmVkIGFu
ZCBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IGJ1ZmZlcgorICAgICAgICAgICAgLy8gcmVhZC13cml0
ZSwgd2UgbmVlZCBhbiBhZGRpdGlvbmFsIG9mZnNldCB0byBzdG9yZSB0aGUgb2xkIHZhbHVlIG9m
IHRoZSBxdWVyeS4KKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KGNvbnRl
eHRNdGwsIHF1ZXJ5LCBmYWxzZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6Q29udGludWU7CkBAIC0xMTIsMTAgKzExNywzNCBAQCB2b2lkIE9jY2x1c2lv
blF1ZXJ5UG9vbDo6cmVzb2x2ZVZpc2liaWxpdHlSZXN1bHRzKENvbnRleHRNdGwgKmNvbnRleHRN
dGwpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZW5kZXJVdGlscyAmdXRpbHMgPSBj
b250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFV0aWxzKCk7CisgICAgUmVuZGVyVXRpbHMgJnV0
aWxzICAgICAgICAgICAgICA9IGNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKTsK
KyAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gbnVsbHB0cjsKKyAgICAvLyBD
b21iaW5lIHRoZSB2YWx1ZXMgc3RvcmVkIGluIHRoZSBvZmZzZXRzIGFsbG9jYXRlZCBmb3IgZmly
c3QgcXVlcnkKKyAgICBpZiAobUFsbG9jYXRlZFF1ZXJpZXNbMF0pCisgICAgeworICAgICAgICBj
b25zdCBCdWZmZXJSZWYgJmRzdEJ1ZiA9IG1BbGxvY2F0ZWRRdWVyaWVzWzBdLT5nZXRWaXNpYmls
aXR5UmVzdWx0QnVmZmVyKCk7CisgICAgICAgIGNvbnN0IFZpc2liaWxpdHlCdWZmZXJPZmZzZXRz
TXRsICZhbGxvY2F0ZWRPZmZzZXRzID0KKyAgICAgICAgICAgIG1BbGxvY2F0ZWRRdWVyaWVzWzBd
LT5nZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygpOworICAgICAgICBpZiAoIW1SZXNldEZp
cnN0UXVlcnkgJiYKKyAgICAgICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZl
YXR1cmVzKCkuYWxsb3dCdWZmZXJSZWFkV3JpdGUuZW5hYmxlZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gSWYgd2UgY2Fubm90IHJlYWQgYW5kIHdyaXRlIHRvIHRoZSBzYW1lIGJ1ZmZlciBp
biBzaGFkZXIuIFdlIG5lZWQgdG8gY29weSB0aGUgb2xkCisgICAgICAgICAgICAvLyB2YWx1ZSBv
ZiBmaXJzdCBxdWVyeSB0byBmaXJzdCBvZmZzZXQgYWxsb2NhdGVkIGZvciBpdC4KKyAgICAgICAg
ICAgIGJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7Cisg
ICAgICAgICAgICBibGl0RW5jb2Rlci0+Y29weUJ1ZmZlcihkc3RCdWYsIDAsIG1SZW5kZXJQYXNz
UmVzdWx0c1Bvb2wsIGFsbG9jYXRlZE9mZnNldHMuZnJvbnQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUpOworICAgICAgICAg
ICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1bHQoY29udGV4dE10bCwgZmFsc2UsIGFsbG9j
YXRlZE9mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
UmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1bHQoY29u
dGV4dE10bCwgIW1SZXNldEZpcnN0UXVlcnksIGFsbG9jYXRlZE9mZnNldHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBk
c3RCdWYpOworICAgICAgICB9CisgICAgfQogCiAgICAgLy8gQ29tYmluZSB0aGUgdmFsdWVzIHN0
b3JlZCBpbiB0aGUgb2Zmc2V0cyBhbGxvY2F0ZWQgZm9yIGVhY2ggb2YgdGhlIHJlbWFpbmluZyBx
dWVyaWVzCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtQWxsb2NhdGVkUXVlcmllcy5zaXpl
KCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1BbGxvY2F0ZWRRdWVyaWVzLnNp
emUoKTsgKytpKQogICAgIHsKICAgICAgICAgUXVlcnlNdGwgKnF1ZXJ5ID0gbUFsbG9jYXRlZFF1
ZXJpZXNbaV07CiAgICAgICAgIGlmICghcXVlcnkpCkBAIC0xMjYsMTIgKzE1NSwxMiBAQCB2b2lk
IE9jY2x1c2lvblF1ZXJ5UG9vbDo6cmVzb2x2ZVZpc2liaWxpdHlSZXN1bHRzKENvbnRleHRNdGwg
KmNvbnRleHRNdGwpCiAgICAgICAgIGNvbnN0IEJ1ZmZlclJlZiAmZHN0QnVmID0gbUFsbG9jYXRl
ZFF1ZXJpZXNbaV0tPmdldFZpc2liaWxpdHlSZXN1bHRCdWZmZXIoKTsKICAgICAgICAgY29uc3Qg
VmlzaWJpbGl0eUJ1ZmZlck9mZnNldHNNdGwgJmFsbG9jYXRlZE9mZnNldHMgPQogICAgICAgICAg
ICAgbUFsbG9jYXRlZFF1ZXJpZXNbaV0tPmdldEFsbG9jYXRlZFZpc2liaWxpdHlPZmZzZXRzKCk7
Ci0gICAgICAgIHV0aWxzLmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KGNvbnRleHRNdGwsIC8qKiBr
ZWVwT2xkVmFsdWUgKi8gaSA9PSAwICYmICFtUmVzZXRGaXJzdFF1ZXJ5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWRPZmZzZXRzLCBtUmVuZGVyUGFzc1Jl
c3VsdHNQb29sLCBkc3RCdWYpOworICAgICAgICB1dGlscy5jb21iaW5lVmlzaWJpbGl0eVJlc3Vs
dChjb250ZXh0TXRsLCBmYWxzZSwgYWxsb2NhdGVkT2Zmc2V0cywgbVJlbmRlclBhc3NSZXN1bHRz
UG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0QnVmKTsKICAg
ICB9CiAKICAgICAvLyBSZXF1ZXN0IHN5bmNocm9uaXphdGlvbiBhbmQgY2xlYW51cAotICAgIEJs
aXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250ZXh0TXRsLT5nZXRCbGl0Q29tbWFu
ZEVuY29kZXIoKTsKKyAgICBibGl0RW5jb2RlciA9IGNvbnRleHRNdGwtPmdldEJsaXRDb21tYW5k
RW5jb2RlcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUFsbG9jYXRlZFF1ZXJpZXMu
c2l6ZSgpOyArK2kpCiAgICAgewogICAgICAgICBRdWVyeU10bCAqcXVlcnkgPSBtQWxsb2NhdGVk
UXVlcmllc1tpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5oCmlu
ZGV4IDZiOTY3ZGU4ZmQ0OTBhNDgxMzU4ODMyYTc2ZjIwNjU0ZGIwZTkxMTkuLmQwYTQ4MzcxOGZl
MDU0NGRiNTdkZmU5ZWVlZWIzYzdiNDhlNGJhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9yZW5kZXJfdXRpbHMuaApAQCAtNiw2ICs2LDggQEAKIC8vIG10bF9yZW5kZXJfdXRpbHMu
aDoKIC8vICAgIERlZmluZXMgdGhlIGNsYXNzIGludGVyZmFjZSBmb3IgUmVuZGVyVXRpbHMsIHdo
aWNoIGNvbnRhaW5zIG1hbnkgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHNoYWRlcnMKIC8vICAgIGZv
ciBjb252ZXJ0aW5nLCBibGl0dGluZywgY29weWluZyBhcyB3ZWxsIGFzIGdlbmVyYXRpbmcgZGF0
YSwgYW5kIG1hbnkgbW9yZS4KKy8vIE5PVEUoaHFsZSk6IENvbnNpZGVyIHNwbGl0dGluZyB0aGlz
IGNsYXNzIGludG8gbXVsdGlwbGUgY2xhc3NlcyBlYWNoIGRvaW5nIGRpZmZlcmVudCB1dGlsaXRp
ZXMuCisvLyBUaGlzIGNsYXNzIGhhcyBiZWNvbWUgdG9vIGJpZy4KIC8vCiAKICNpZm5kZWYgTElC
QU5HTEVfUkVOREVSRVJfTUVUQUxfTVRMX1JFTkRFUl9VVElMU19IXwpAQCAtODksNiArOTEsOCBA
QCBzdHJ1Y3QgQ29sb3JCbGl0UGFyYW1zIDogcHVibGljIEJsaXRQYXJhbXMKIHN0cnVjdCBEZXB0
aFN0ZW5jaWxCbGl0UGFyYW1zIDogcHVibGljIEJsaXRQYXJhbXMKIHsKICAgICBUZXh0dXJlUmVm
IHNyY1N0ZW5jaWw7CisgICAgdWludDMyX3Qgc3JjU3RlbmNpbExldmVsID0gMDsKKyAgICB1aW50
MzJfdCBzcmNTdGVuY2lsTGF5ZXIgPSAwOwogfTsKIAogLy8gU3RlbmNpbCBibGl0IHZpYSBhbiBp
bnRlcm1lZGlhdGUgYnVmZmVyLiBOT1RFOiBzb3VyY2UgZGVwdGggdGV4dHVyZSBwYXJhbWV0ZXIg
aXMgaWdub3JlZC4KQEAgLTMwOSwyMSArMzEzLDE3IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRp
bHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgcHVibGljOgogICAgIHZvaWQgb25EZXN0
cm95KCk7CiAKLSAgICAvLyBDb252ZXJ0IGluZGV4IGJ1ZmZlci4KICAgICBhbmdsZTo6UmVzdWx0
IGNvbnZlcnRJbmRleEJ1ZmZlckdQVShDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4Q29udmVyc2lvblBhcmFt
cyAmcGFyYW1zKTsKLSAgICAvLyBHZW5lcmF0ZSB0cmlhbmdsZSBmYW4gaW5kZXggYnVmZmVyIGZv
ciBnbERyYXdBcnJheXMoKS4KICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVy
RnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyaUZhbk9yTGluZUxvb3BGcm9tQXJy
YXlQYXJhbXMgJnBhcmFtcyk7CiAgICAgLy8gR2VuZXJhdGUgdHJpYW5nbGUgZmFuIGluZGV4IGJ1
ZmZlciBmb3IgZ2xEcmF3RWxlbWVudHMoKS4KICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJp
RmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoQ29udGV4dE10bCAqY29udGV4dE10bCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJh
bXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpOwogCi0gICAgLy8gR2VuZXJh
dGUgbGluZSBsb29wIGluZGV4IGJ1ZmZlciBmb3IgZ2xEcmF3QXJyYXlzKCkuCiAgICAgYW5nbGU6
OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250
ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVHJpRmFuT3JMaW5lTG9vcEZyb21BcnJheVBhcmFtcyAmcGFyYW1zKTsKLSAgICAv
LyBHZW5lcmF0ZSBsaW5lIGxvb3AncyBsYXN0IHNlZ21lbnQgaW5kZXggYnVmZmVyIGZvciBnbERy
YXdBcnJheXMoKS4KLSAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiBwcmltaXRpdmUgcmVzdGFydCBp
cyBub3QgZW5hYmxlZC4KICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BMYXN0U2Vn
bWVudChDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZpcnN0VmVydGV4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RWZXJ0ZXgsCkBAIC0z
NDAsNiArMzQwLDE4IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6
Tm9uQ29weWFibGUKICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BMYXN0U2VnbWVu
dEZyb21FbGVtZW50c0FycmF5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CiAKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVy
YXRlUHJpbWl0aXZlUmVzdGFydFBvaW50c0J1ZmZlcihDb250ZXh0TXRsICpjb250ZXh0TXRsLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRl
ZCk7CisKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydExpbmVzQnVm
ZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBh
cmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVy
YXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcihDb250ZXh0TXRsICpjb250ZXh0TXRs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNl
c0dlbmVyYXRlZCk7CisKICAgcHJpdmF0ZToKICAgICAvLyBJbmRleCBnZW5lcmF0b3IgY29tcHV0
ZSBwaXBlbGluZXM6CiAgICAgLy8gIC0gRmlyc3QgZGltZW5zaW9uOiBpbmRleCB0eXBlLgpAQCAt
MzQ4LDcgKzM2MCw2IEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6
Tm9uQ29weWFibGUKICAgICAgICAgc3RkOjphcnJheTxzdGQ6OmFycmF5PEF1dG9PYmpDUHRyPGlk
PE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4sIDI+LAogICAgICAgICAgICAgICAgICAgIGFuZ2xl
OjpFbnVtU2l6ZTxnbDo6RHJhd0VsZW1lbnRzVHlwZT4oKT47CiAKLSAgICAvLyBHZXQgY29tcHV0
ZSBwaXBlbGluZSB0byBjb252ZXJ0IGluZGV4IGJldHdlZW4gYnVmZmVycy4KICAgICBBdXRvT2Jq
Q1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IGdldEluZGV4Q29udmVyc2lvblBpcGVs
aW5lKAogICAgICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICBnbDo6RHJhd0Vs
ZW1lbnRzVHlwZSBzcmNUeXBlLApAQCAtMzc1LDcgKzM4Niw4IEBAIGNsYXNzIEluZGV4R2VuZXJh
dG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAgLy8gTXVzdCBiZSBt
dWx0aXBsZXMgb2Yga0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50CiAgICAgICAgIHVpbnQzMl90
IGRzdE9mZnNldCk7CiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21F
bGVtZW50c0FycmF5Q1BVKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2Vu
ZXJhdGlvblBhcmFtcyAmcGFyYW1zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZw
YXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90ICppbmRpY2VzR2VuZXJhdGVkKTsKIAogICAgIGFuZ2xlOjpSZXN1
bHQgZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21FbGVtZW50c0FycmF5R1BVKAogICAgICAgICBD
b250ZXh0TXRsICpjb250ZXh0TXRsLApAQCAtMzkzLDYgKzQwNSwxMSBAQCBjbGFzcyBJbmRleEdl
bmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCiAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFy
YW1zKTsKIAorICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVy
KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhH
ZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKwogICAgIEluZGV4
Q29udmVyc2lvblBpcGVsaW5lQXJyYXkgbUluZGV4Q29udmVyc2lvblBpcGVsaW5lQ2FjaGVzOwog
CiAgICAgSW5kZXhDb252ZXJzaW9uUGlwZWxpbmVBcnJheSBtVHJpRmFuRnJvbUVsZW1BcnJheUdl
bmVyYXRvclBpcGVsaW5lQ2FjaGVzOwpAQCAtNDI5LDcgKzQ0Niw3IEBAIGNsYXNzIE1pcG1hcFV0
aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCiAgIHB1YmxpYzoKICAgICB2b2lkIG9uRGVz
dHJveSgpOwogCi0gICAgLy8gQ29tcHV0ZSBiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbi4gT25seSBw
b3NzaWJsZSBmb3IgM0QgdGV4dHVyZSBmb3Igbm93LgorICAgIC8vIENvbXB1dGUgYmFzZWQgbWlw
bWFwIGdlbmVyYXRpb24uCiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZU1pcG1hcENTKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRleHR1cmVSZWYgJnNyY1RleHR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc1JHQk1pcG1hcCwKQEAgLTQzNyw5ICs0NTQsMTUgQEAgY2xhc3MgTWlwbWFw
VXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKIAogICBwcml2YXRlOgogICAgIHZvaWQg
ZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRl
eHRNdGwpOworICAgIHZvaWQgZW5zdXJlMkRNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVk
KENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworICAgIHZvaWQgZW5zdXJlMkRBcnJheU1pcEdlbmVy
YXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCk7CisgICAgdm9p
ZCBlbnN1cmVDdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChDb250ZXh0TXRsICpj
b250ZXh0TXRsKTsKIAogICAgIC8vIE1pcG1hcHMgZ2VuZXJhdGluZyBjb21wdXRlIHBpcGVsaW5l
OgogICAgIEF1dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gbTNETWlwR2Vu
ZXJhdG9yUGlwZWxpbmU7CisgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3Rh
dGU+PiBtMkRNaXBHZW5lcmF0b3JQaXBlbGluZTsKKyAgICBBdXRvT2JqQ1B0cjxpZDxNVExDb21w
dXRlUGlwZWxpbmVTdGF0ZT4+IG0yREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmU7CisgICAgQXV0
b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBtQ3ViZU1pcEdlbmVyYXRvclBp
cGVsaW5lOwogfTsKIAogLy8gVXRpbCBjbGFzcyBmb3IgaGFuZGxpbmcgcGl4ZWxzIGNvcHkgYmV0
d2VlbiBidWZmZXJzIGFuZCB0ZXh0dXJlcwpAQCAtNTQzLDYgKzU2NiwyMSBAQCBjbGFzcyBWZXJ0
ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICBS
ZW5kZXJQaXBlbGluZUNhY2hlIG1Db21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmVDYWNoZTsK
IH07CiAKKy8vIFV0aWwgY2xhc3MgZm9yIGhhbmRsaW5nIHRyYW5zZm9ybSBmZWVkYmFjaworICAg
IGNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrVXRpbHMKK3sKKyAgcHVibGljOgorICAgIHZvaWQgb25E
ZXN0cm95KCk7CisgICAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IGdl
dFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmUoCisgICAgICAgIENvbnRleHRNdGwgKmNv
bnRleHRNdGwsCisgICAgICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyLAorICAg
ICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKTsKKworICBwcml2YXRl
OgorICAgIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBjcmVhdGVNc2xYZmJMaWJyYXJ5KENv
bnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnRyYW5zbGF0ZWRNc2wpOworfTsK
KwogLy8gUmVuZGVyVXRpbHM6IGNvbnRhaW5lciBjbGFzcyBvZiB2YXJpb3VzIHV0aWwgY2xhc3Nl
cyBhYm92ZQogY2xhc3MgUmVuZGVyVXRpbHMgOiBwdWJsaWMgQ29udGV4dCwgYW5nbGU6Ok5vbkNv
cHlhYmxlCiB7CkBAIC01ODcsNyArNjI1LDggQEAgY2xhc3MgUmVuZGVyVXRpbHMgOiBwdWJsaWMg
Q29udGV4dCwgYW5nbGU6Ok5vbkNvcHlhYmxlCiAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21BcnJheXMoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUcmlGYW5PckxpbmVM
b29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOwogICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVU
cmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheShDb250ZXh0TXRsICpjb250ZXh0TXRsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBh
cmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CiAKICAgICBhbmdsZTo6
UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BCdWZmZXJGcm9tQXJyYXlzKENvbnRleHRNdGwgKmNvbnRl
eHRNdGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOwpAQCAtNjM5
LDYgKzY3OCwxOSBAQCBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBDb250ZXh0LCBhbmdsZTo6
Tm9uQ29weWFibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAqcmVuZGVyRW5jb2RlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZz
cmNBbmdsZUZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXRDb252ZXJ0UGFyYW1zICZwYXJhbXMpOworICAgIGFu
Z2xlOjpSZXN1bHQgY3JlYXRlVHJhbnNmb3JtRmVlZGJhY2tQU08oY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJDb21tYW5kRW5jb2RlciAqcmVuZGVyRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGlu
ZURlc2MpOworCisgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRQb2lu
dHNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJh
bXMgJnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpOworICAgIGFuZ2xlOjpSZXN1bHQg
Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJh
dGVkKTsKKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xl
c0J1ZmZlcihDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBh
cmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CiAKICAgcHJpdmF0ZToK
ICAgICAvLyBvdmVycmlkZSBFcnJvckhhbmRsZXIKQEAgLTY0Niw3ICs2OTgsNyBAQCBjbGFzcyBS
ZW5kZXJVdGlscyA6IHB1YmxpYyBDb250ZXh0LCBhbmdsZTo6Tm9uQ29weWFibGUKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5l
KSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKl9OdWxsYWJsZSBlcnJv
ciwKKyAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAogICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KmZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpIG92ZXJy
aWRlOwpAQCAtNjYyLDYgKzcxNCw3IEBAIGNsYXNzIFJlbmRlclV0aWxzIDogcHVibGljIENvbnRl
eHQsIGFuZ2xlOjpOb25Db3B5YWJsZQogICAgIE1pcG1hcFV0aWxzIG1NaXBtYXBVdGlsczsKICAg
ICBzdGQ6OmFycmF5PENvcHlQaXhlbHNVdGlscywgYW5nbGU6OkVudW1TaXplPFBpeGVsVHlwZT4o
KT4gbUNvcHlQaXhlbHNVdGlsczsKICAgICBWZXJ0ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHMgbVZl
cnRleEZvcm1hdFV0aWxzOworICAgIFRyYW5zZm9ybUZlZWRiYWNrVXRpbHMgbVRyYW5zZm9ybUZl
ZWRiYWNrVXRpbHM7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgbXRsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRl
cl91dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCmluZGV4IGQyMjQ4MDE0MjczYzM3ZDRkNGIyYmVl
NzBjZmRhYjExOTVjMThiYTYuLjMyYjMzY2FiOGZiZTkxMWJiMjZhODAyM2Y5ZmViMzFjNTdjOTE2
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCkBAIC0x
NSw2ICsxNSw3IEBACiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRs
LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgogI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgiCiAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfY29tbW9uLmgiCiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X3V0aWxzLmgiCkBAIC01NCwxMCArNTUsMTIgQEAgc3RydWN0IEJsaXRQYXJhbXNVbmlmb3JtCiAg
ICAgZmxvYXQgc3JjVGV4Q29vcmRzWzNdWzJdOwogICAgIGludCBzcmNMZXZlbCAgICAgICAgID0g
MDsKICAgICBpbnQgc3JjTGF5ZXIgICAgICAgICA9IDA7CisgICAgaW50IHNyY0xldmVsMiAgICAg
ICAgPSAwOworICAgIGludCBzcmNMYXllcjIgICAgICAgID0gMDsKICAgICB1aW50OF90IGRzdEZs
aXBYICAgICA9IDA7CiAgICAgdWludDhfdCBkc3RGbGlwWSAgICAgPSAwOwogICAgIHVpbnQ4X3Qg
ZHN0THVtaW5hbmNlID0gMDsgIC8vIGRlc3QgdGV4dHVyZSBpcyBsdW1pbmFjZQotICAgIHVpbnQ4
X3QgcGFkZGluZ1sxM107CisgICAgdWludDhfdCBwYWRkaW5nWzldOwogfTsKIAogc3RydWN0IEJs
aXRTdGVuY2lsVG9CdWZmZXJQYXJhbXNVbmlmb3JtCkBAIC05MCw3ICs5Myw3IEBAIHN0cnVjdCBJ
bmRleENvbnZlcnNpb25Vbmlmb3JtCiAgICAgdWludDhfdCBwYWRkaW5nWzddOwogfTsKIAotLy8g
U2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0eS5tZXRhbAorLy8g
U2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvbWlzYy5tZXRhbAogc3RydWN0IENv
bWJpbmVWaXNpYmlsaXR5UmVzdWx0VW5pZm9ybQogewogICAgIHVpbnQzMl90IHN0YXJ0T2Zmc2V0
OwpAQCAtOTksMTIgKzEwMiwxMSBAQCBzdHJ1Y3QgQ29tYmluZVZpc2liaWxpdHlSZXN1bHRVbmlm
b3JtCiB9OwogCiAvLyBTZWUgbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlw
bWFwLm1ldGFsCi1zdHJ1Y3QgR2VuZXJhdGVNaXBtYXBVbmlmb3JtCitzdHJ1Y3QgR2VuZXJhdGUz
RE1pcG1hcFVuaWZvcm0KIHsKICAgICB1aW50MzJfdCBzcmNMZXZlbDsKICAgICB1aW50MzJfdCBu
dW1NaXBtYXBzVG9HZW5lcmF0ZTsKLSAgICB1aW50OF90IHNSR0I7Ci0gICAgdWludDhfdCBwYWRk
aW5nWzddOworICAgIHVpbnQzMl90IHBhZGRpbmdbMl07CiB9OwogCiAvLyBTZWUgbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbApAQCAtMTU2LDE5ICsxNTgs
MzYgQEAgc3RydWN0IENvcHlWZXJ0ZXhVbmlmb3JtcwogLy8gZXhpdGluZyBibG9jay4KIHN0cnVj
dCBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkKIHsKLSAgICBTY29wZWREaXNhYmxlT2NjbHVz
aW9uUXVlcnkoQ29udGV4dE10bCAqY29udGV4dE10bCwgYW5nbGU6OlJlc3VsdCAqcmVzdWx0T3V0
KQotICAgICAgICA6IG1Db250ZXh0TXRsKGNvbnRleHRNdGwpLCBtUmVzdWx0T3V0KHJlc3VsdE91
dCkKKyAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkoQ29udGV4dE10bCAqY29udGV4dE10
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIg
KmVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlOjpSZXN1bHQg
KnJlc3VsdE91dCkKKyAgICAgICAgOiBtQ29udGV4dE10bChjb250ZXh0TXRsKSwgbUVuY29kZXIo
ZW5jb2RlciksIG1SZXN1bHRPdXQocmVzdWx0T3V0KQogICAgIHsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgIGlmIChjb250ZXh0TXRsLT5oYXNBY3RpdmVPY2NsdXNpb25RdWVyeSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBlbmNvZGVyLT5wdXNoRGVidWdHcm91cChAIkRpc2FibGVkIE9jY2x1
c2lvblF1ZXJ5Iik7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAvLyB0ZW1wb3JhcmlseSBk
aXNhYmxlIG9jY2x1c2lvbiBxdWVyeQogICAgICAgICBjb250ZXh0TXRsLT5kaXNhYmxlQWN0aXZl
T2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsKICAgICB9CiAgICAgflNjb3BlZERpc2FibGVP
Y2NsdXNpb25RdWVyeSgpCiAgICAgewogICAgICAgICAqbVJlc3VsdE91dCA9IG1Db250ZXh0TXRs
LT5yZXN0YXJ0QWN0aXZlT2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIGlmIChtQ29udGV4dE10bC0+aGFzQWN0aXZlT2NjbHVzaW9uUXVlcnkoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbUVuY29kZXItPnBvcERlYnVnR3JvdXAoKTsKKyAgICAg
ICAgfQorI2Vsc2UKKyAgICAgICAgQU5HTEVfVU5VU0VEX1ZBUklBQkxFKG1FbmNvZGVyKTsKKyNl
bmRpZgogICAgIH0KIAogICBwcml2YXRlOgogICAgIENvbnRleHRNdGwgKm1Db250ZXh0TXRsOwor
ICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICptRW5jb2RlcjsKIAogICAgIGFuZ2xlOjpSZXN1bHQg
Km1SZXN1bHRPdXQ7CiB9OwpAQCAtMjE5LDY2ICsyMzgsNDMgQEAgYW5nbGU6OlJlc3VsdCBHZW5U
cmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJpbWl0aXZlUmVzdGFydEVu
YWJsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
ICppbmRpY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQnVmZmVyUmVmICZkc3RCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCkKIHsKICAg
ICBBU1NFUlQoY291bnQgPiAyKTsKLQotICAgIHVpbnQzMl90IGdlbkluZGljZXNDb3VudDsKLSAg
ICBBTkdMRV9UUlkobXRsOjpHZXRUcmlhbmdsZUZhbkluZGljZXNDb3VudChjb250ZXh0TXRsLCBj
b3VudCwgJmdlbkluZGljZXNDb3VudCkpOwotCi0gICAgY29uc3RleHByIFQga1NyY1ByaW1pdGl2
ZVJlc3RhcnRJbmRleCAgICA9IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOwotICAgIGNv
bnN0IHVpbnQzMl90IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXggPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCk7Ci0KKyAgICBjb25zdGV4cHIgVCBrU3JjUHJpbWl0aXZlUmVz
dGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisgICAgR0xzaXplaSBk
c3RUcmlhbmdsZSAgICAgICAgICAgICAgICAgICA9IDA7CiAgICAgdWludDMyX3QgKmRzdFB0ciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVyLT5tYXAoY29udGV4dE10bCkg
KyBkc3RPZmZzZXQpOwotICAgIFQgdHJpRmlyc3RJZHggICAgPSAwOyAgLy8gVmVydGV4IGluZGV4
IG9mIHRyaWFubGdlJ3MgMXN0IHZlcnRleAotICAgIFQgc3JjUHJldklkeCAgICAgPSAwOyAgLy8g
VmVydGV4IGluZGV4IG9mIHRyaWFubGdlJ3MgMm5kIHZlcnRleAorICAgIFQgdHJpRmlyc3RJZHgs
IHNyY1ByZXZJZHg7CiAgICAgbWVtY3B5KCZ0cmlGaXJzdElkeCwgaW5kaWNlcywgc2l6ZW9mKHRy
aUZpcnN0SWR4KSk7CisgICAgbWVtY3B5KCZzcmNQcmV2SWR4LCBpbmRpY2VzICsgMSwgc2l6ZW9m
KHNyY1ByZXZJZHgpKTsKIAogICAgIGlmIChwcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCkKICAgICB7
Ci0gICAgICAgIC8vIHRyaUZpcnN0SWR4TG9jOiBMb2NhdGlvbiBvZiBjdXJyZW50IHRyaWFuZ2xl
J3MgZmlzdCB2ZXJ0ZXggaW4gc291cmNlIGJ1ZmZlci4KICAgICAgICAgR0xzaXplaSB0cmlGaXJz
dElkeExvYyA9IDA7CiAgICAgICAgIHdoaWxlICh0cmlGaXJzdElkeCA9PSBrU3JjUHJpbWl0aXZl
UmVzdGFydEluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoJmRzdFB0clt0cmlG
aXJzdElkeExvYysrXSwgJmtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXgsCi0gICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXgpKTsKKyAgICAgICAgICAgICsr
dHJpRmlyc3RJZHhMb2M7CiAgICAgICAgICAgICBtZW1jcHkoJnRyaUZpcnN0SWR4LCBpbmRpY2Vz
ICsgdHJpRmlyc3RJZHhMb2MsIHNpemVvZih0cmlGaXJzdElkeCkpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKHRyaUZpcnN0SWR4TG9jICsgMiA+PSBjb3VudCkKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gTm90IGVub3VnaCBpbmRpY2VzLgotICAgICAgICAgICAgZm9yIChHTHNpemVpIGkg
PSB0cmlGaXJzdElkeExvYzsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbWVtY3B5KCZkc3RQdHJbaV0sICZrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4LCBz
aXplb2Yoa0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKHRyaUZpcnN0SWR4TG9jICsgMSA8IGNvdW50KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtZW1jcHkoJnNyY1ByZXZJZHgsIGluZGljZXMgKyB0cmlGaXJzdElk
eExvYyArIDEsIHNpemVvZihzcmNQcmV2SWR4KSk7Ci0gICAgICAgIH0KLQogICAgICAgICBmb3Ig
KEdMc2l6ZWkgaSA9IHRyaUZpcnN0SWR4TG9jICsgMjsgaSA8IGNvdW50OyArK2kpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHVpbnQzMl90IHRyaUluZGljZXNbM107Ci0KICAgICAgICAgICAgIFQg
c3JjSWR4OwogICAgICAgICAgICAgbWVtY3B5KCZzcmNJZHgsIGluZGljZXMgKyBpLCBzaXplb2Yo
c3JjSWR4KSk7CisgICAgICAgICAgICBib29sIGNvbXBsZXRlVHJpYW5nbGUgPSB0cnVlOwogICAg
ICAgICAgICAgaWYgKHNyY1ByZXZJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCB8fCBz
cmNJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRyaWFuZ2xlLgotICAgICAgICAgICAgICAgIHRyaUlu
ZGljZXNbMF0gID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsKLSAgICAgICAgICAgICAgICB0
cmlJbmRpY2VzWzFdICA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7Ci0gICAgICAgICAgICAg
ICAgdHJpSW5kaWNlc1syXSAgPSBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4OwotICAgICAgICAg
ICAgICAgIHRyaUZpcnN0SWR4ICAgID0gc3JjSWR4OwotICAgICAgICAgICAgICAgIHRyaUZpcnN0
SWR4TG9jID0gaTsKKyAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRyaWFuZ2xlLiBNb3Zl
IHRvIG5leHQgdHJpYW5nbGUgYW5kIHNldCB0cmlGaXJzdEluZGV4CisgICAgICAgICAgICAgICAg
dHJpRmlyc3RJZHggICAgICA9IHNyY0lkeDsKKyAgICAgICAgICAgICAgICB0cmlGaXJzdElkeExv
YyAgID0gaTsKKyAgICAgICAgICAgICAgICBjb21wbGV0ZVRyaWFuZ2xlID0gZmFsc2U7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChpIDwgdHJpRmlyc3RJZHhMb2MgKyAyKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUKLSAg
ICAgICAgICAgICAgICB0cmlJbmRpY2VzWzBdID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsK
LSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzFdID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRl
eDsKLSAgICAgICAgICAgICAgICB0cmlJbmRpY2VzWzJdID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJ
bmRleDsKKyAgICAgICAgICAgICAgICAvLyBJbmNvbXBsZXRlIHRyaWFuZ2xlLCBtb3ZlIHRvIG5l
eHQgdHJpYW5nbGUKKyAgICAgICAgICAgICAgICBjb21wbGV0ZVRyaWFuZ2xlID0gZmFsc2U7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CkBAIC0yODYsMTUg
KzI4MiwxNiBAQCBhbmdsZTo6UmVzdWx0IEdlblRyaUZhbkZyb21DbGllbnRFbGVtZW50cyhDb250
ZXh0TXRsICpjb250ZXh0TXRsLAogICAgICAgICAgICAgICAgIHRyaUluZGljZXNbMV0gPSBzcmNQ
cmV2SWR4OwogICAgICAgICAgICAgICAgIHRyaUluZGljZXNbMl0gPSBzcmNJZHg7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoY29tcGxldGVUcmlhbmdsZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtZW1jcHkoZHN0UHRyICsgMyAqIGRzdFRyaWFuZ2xlLCB0cmlJbmRp
Y2VzLCBzaXplb2YodHJpSW5kaWNlcykpOworICAgICAgICAgICAgICAgICsrZHN0VHJpYW5nbGU7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzcmNQcmV2SWR4ID0gc3JjSWR4OwotCi0gICAg
ICAgICAgICBtZW1jcHkoZHN0UHRyICsgMyAqIChpIC0gMiksIHRyaUluZGljZXMsIHNpemVvZih0
cmlJbmRpY2VzKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAg
bWVtY3B5KCZzcmNQcmV2SWR4LCBpbmRpY2VzICsgMSwgc2l6ZW9mKHNyY1ByZXZJZHgpKTsKLQog
ICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDI7IGkgPCBjb3VudDsgKytpKQogICAgICAgICB7CiAg
ICAgICAgICAgICBUIHNyY0lkeDsKQEAgLTMwNiwxMSArMzAzLDY1IEBAIGFuZ2xlOjpSZXN1bHQg
R2VuVHJpRmFuRnJvbUNsaWVudEVsZW1lbnRzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAg
ICAgICAgICB0cmlJbmRpY2VzWzJdID0gc3JjSWR4OwogICAgICAgICAgICAgc3JjUHJldklkeCAg
ICA9IHNyY0lkeDsKIAotICAgICAgICAgICAgbWVtY3B5KGRzdFB0ciArIDMgKiAoaSAtIDIpLCB0
cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykpOworICAgICAgICAgICAgbWVtY3B5KGRzdFB0
ciArIDMgKiBkc3RUcmlhbmdsZSwgdHJpSW5kaWNlcywgc2l6ZW9mKHRyaUluZGljZXMpKTsKKyAg
ICAgICAgICAgICsrZHN0VHJpYW5nbGU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZHN0QnVmZmVy
LT51bm1hcEFuZEZsdXNoU3Vic2V0KGNvbnRleHRNdGwsIGRzdE9mZnNldCwgZ2VuSW5kaWNlc0Nv
dW50ICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgaWYgKGluZGljZXNHZW5lcmF0ZWQpCisgICAg
ICAgICppbmRpY2VzR2VuZXJhdGVkID0gZHN0VHJpYW5nbGUgKiAzOworICAgIGRzdEJ1ZmZlci0+
dW5tYXAoY29udGV4dE10bCk7CisKKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7
Cit9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYW5nbGU6OlJlc3VsdCBHZW5QcmltaXRpdmVS
ZXN0YXJ0QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluZGljZXNQZXJQcmltaXRpdmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCAqaW5kaWNlcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdWZmZXJSZWYgJmRzdEJ1
ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBk
c3RPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIGNvbnN0ZXhwciBUIGtTcmNQcmltaXRpdmVSZXN0
YXJ0SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsKKyAgICB1aW50MzJfdCAq
ZHN0UHRyICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVyLT5tYXAo
Y29udGV4dE10bCkgKyBkc3RPZmZzZXQpOworICAgIEdMc2l6ZWkgcmVhZFZhbHVlTG9jID0gMDsK
KyAgICBUIHJlYWRWYWx1ZSAgICAgICAgICA9IDA7CisgICAgdWludDMyX3QgZHN0SWR4ICAgICAg
PSAwOworICAgIG1lbWNweSgmcmVhZFZhbHVlLCBpbmRpY2VzLCBzaXplb2YocmVhZFZhbHVlKSk7
CisgICAgd2hpbGUgKHJlYWRWYWx1ZSA9PSBrU3JjUHJpbWl0aXZlUmVzdGFydEluZGV4KQorICAg
IHsKKworICAgICAgICArK3JlYWRWYWx1ZUxvYzsKKyAgICAgICAgbWVtY3B5KCZyZWFkVmFsdWUs
IGluZGljZXMgKyByZWFkVmFsdWVMb2MsIHNpemVvZihyZWFkVmFsdWUpKTsKKyAgICB9CisgICAg
d2hpbGUgKHJlYWRWYWx1ZUxvYyArIGluZGljZXNQZXJQcmltaXRpdmUgPD0gY291bnQpCisgICAg
eworCisgICAgICAgIHVpbnQzMl90IHByaW1JbmRpY2llc1szXTsKKyAgICAgICAgYm9vbCBmb3Vu
ZFByaW1pdGl2ZSA9IHRydWU7CisgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgaW5kaWNlc1Bl
clByaW1pdGl2ZTsgKytrKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoJnJlYWRWYWx1
ZSwgaW5kaWNlcyArIHJlYWRWYWx1ZUxvYywgc2l6ZW9mKHJlYWRWYWx1ZSkpOworICAgICAgICAg
ICAgKytyZWFkVmFsdWVMb2M7CisgICAgICAgICAgICBpZiAocmVhZFZhbHVlID09IGtTcmNQcmlt
aXRpdmVSZXN0YXJ0SW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm91bmRQ
cmltaXRpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmltSW5k
aWNpZXNba10gPSAodWludDMyX3QpcmVhZFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmIChmb3VuZFByaW1pdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVt
Y3B5KCZkc3RQdHJbZHN0SWR4XSwgcHJpbUluZGljaWVzLCAoaW5kaWNlc1BlclByaW1pdGl2ZSkg
KiBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgIGRzdElkeCArPSBpbmRpY2VzUGVyUHJp
bWl0aXZlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpbmRpY2VzR2VuZXJhdGVkKQorICAg
ICAgICAqaW5kaWNlc0dlbmVyYXRlZCA9IGRzdElkeDsKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CiB9CiAKQEAgLTMyOCwxNCArMzc5LDExIEBAIGFuZ2xlOjpSZXN1bHQgR2Vu
TGluZUxvb3BGcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKICAgICBj
b25zdCB1aW50MzJfdCBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOwogCiAgICAgdWludDMyX3QgKmRzdFB0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVyLT5tYXAoY29udGV4dE10bCkgKyBkc3RPZmZz
ZXQpOwotICAgIC8vIGxpbmVMb29wRmlyc3RJZHg6IHZhbHVlIG9mIG9mIGN1cnJlbnQgbGluZSBs
b29wJ3MgZmlyc3QgdmVydGV4IGluZGV4LiBDYW4gY2hhbmdlIHdoZW4KLSAgICAvLyBlbmNvdW50
ZXIgYSBwcmltaXRpdmUgcmVzdGFydCBpbmRleC4KICAgICBUIGxpbmVMb29wRmlyc3RJZHg7CiAg
ICAgbWVtY3B5KCZsaW5lTG9vcEZpcnN0SWR4LCBpbmRpY2VzLCBzaXplb2YobGluZUxvb3BGaXJz
dElkeCkpOwogCiAgICAgaWYgKHByaW1pdGl2ZVJlc3RhcnRFbmFibGVkKQogICAgIHsKLSAgICAg
ICAgLy8gbGluZUxvb3BGaXJzdElkeExvYzogbG9jYXRpb24gb2YgY3VycmVudCBsaW5lIGxvb3An
cyBmaXJzdCB2ZXJ0ZXggaW4gdGhlIHNvdXJjZSBidWZmZXIuCiAgICAgICAgIEdMc2l6ZWkgbGlu
ZUxvb3BGaXJzdElkeExvYyA9IDA7CiAgICAgICAgIHdoaWxlIChsaW5lTG9vcEZpcnN0SWR4ID09
IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCiAgICAgICAgIHsKQEAgLTM0NCwxNSArMzkyLDEy
IEBAIGFuZ2xlOjpSZXN1bHQgR2VuTGluZUxvb3BGcm9tQ2xpZW50RWxlbWVudHMoQ29udGV4dE10
bCAqY29udGV4dE10bCwKICAgICAgICAgICAgIG1lbWNweSgmbGluZUxvb3BGaXJzdElkeCwgaW5k
aWNlcyArIGxpbmVMb29wRmlyc3RJZHhMb2MsIHNpemVvZihsaW5lTG9vcEZpcnN0SWR4KSk7CiAg
ICAgICAgIH0KIAotICAgICAgICAvLyBkc3RJZHggOiB2YWx1ZSBvZiBpbmRleCB0byBiZSB3cml0
dGVuIHRvIGRlc3QgYnVmZmVyCiAgICAgICAgIHVpbnQzMl90IGRzdElkeCA9IGxpbmVMb29wRmly
c3RJZHg7CiAgICAgICAgIG1lbWNweSgmZHN0UHRyW2xpbmVMb29wRmlyc3RJZHhMb2NdLCAmZHN0
SWR4LCBzaXplb2YoZHN0SWR4KSk7Ci0gICAgICAgIC8vIGRzdFdyaXR0ZW46IG51bWJlciBvZiBp
bmRpY2VzIHdyaXR0ZW4gdG8gZGVzdCBidWZmZXIKICAgICAgICAgdWludDMyX3QgZHN0V3JpdHRl
biA9IGxpbmVMb29wRmlyc3RJZHhMb2MgKyAxOwogCiAgICAgICAgIGZvciAoR0xzaXplaSBpID0g
bGluZUxvb3BGaXJzdElkeExvYyArIDE7IGkgPCBjb3VudDsgKytpKQogICAgICAgICB7Ci0gICAg
ICAgICAgICAvLyBzcmNJZHggOiB2YWx1ZSBvZiBpbmRleCBmcm9tIHNvdXJjZSBidWZmZXIKICAg
ICAgICAgICAgIFQgc3JjSWR4OwogICAgICAgICAgICAgbWVtY3B5KCZzcmNJZHgsIGluZGljZXMg
KyBpLCBzaXplb2Yoc3JjSWR4KSk7CiAgICAgICAgICAgICBpZiAoc3JjSWR4ID09IGtTcmNQcmlt
aXRpdmVSZXN0YXJ0SW5kZXgpCkBAIC00MDAsNyArNDQ1LDcgQEAgYW5nbGU6OlJlc3VsdCBHZW5M
aW5lTG9vcEZyb21DbGllbnRFbGVtZW50cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAogCiAgICAg
ICAgICppbmRpY2VzR2VuZXJhdGVkID0gY291bnQgKyAxOwogICAgIH0KLSAgICBkc3RCdWZmZXIt
PnVubWFwQW5kRmx1c2hTdWJzZXQoY29udGV4dE10bCwgZHN0T2Zmc2V0LCAoKmluZGljZXNHZW5l
cmF0ZWQpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgZHN0QnVmZmVyLT51bm1hcChjb250ZXh0
TXRsKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KQEAgLTQ3Miw3
ICs1MTcsNyBAQCB2b2lkIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRpYWxpemVkKERpc3BsYXlN
dGwgKmRpc3BsYXksCiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICB7CiAgICAgICAgIGlk
PE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOwotICAg
ICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRl
cnNMaWIoKTsKKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICAgICAgICA9IGRpc3BsYXktPmdl
dERlZmF1bHRTaGFkZXJzTGliKCk7CiAgICAgICAgIE5TRXJyb3IgKmVyciAgICAgICAgICAgICAg
PSBuaWw7CiAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIgICAgPSBbc2hhZGVyTGliIG5l
d0Z1bmN0aW9uV2l0aE5hbWU6ZnVuY3Rpb25OYW1lXTsKIApAQCAtNTEyLDcgKzU1Nyw3IEBAIHZv
aWQgRW5zdXJlU3BlY2lhbGl6ZWRDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZCgKICAgICBBTkdM
RV9NVExfT0JKQ19TQ09QRQogICAgIHsKICAgICAgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmlj
ZSA9IGRpc3BsYXktPmdldE1ldGFsRGV2aWNlKCk7Ci0gICAgICAgIGlkPE1UTExpYnJhcnk+IHNo
YWRlckxpYiAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworICAgICAgICBhdXRv
IHNoYWRlckxpYiAgICAgICAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsK
ICAgICAgICAgTlNFcnJvciAqZXJyICAgICAgICAgICAgICA9IG5pbDsKIAogICAgICAgICBpZDxN
VExGdW5jdGlvbj4gc2hhZGVyID0gW3NoYWRlckxpYiBuZXdGdW5jdGlvbldpdGhOYW1lOmZ1bmN0
aW9uTmFtZQpAQCAtNTM4LDYgKzU4Myw3IEBAIHZvaWQgRW5zdXJlU3BlY2lhbGl6ZWRDb21wdXRl
UGlwZWxpbmVJbml0aWFsaXplZCgKIEFOR0xFX0lOTElORQogdm9pZCBFbnN1cmVWZXJ0ZXhTaGFk
ZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRpYWxpemVkKENvbnRleHQgKmNvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcgKnZl
cnRleEZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAq
cGlwZWxpbmVDYWNoZU91dCkKIHsKICAgICBSZW5kZXJQaXBlbGluZUNhY2hlICZwaXBlbGluZUNh
Y2hlID0gKnBpcGVsaW5lQ2FjaGVPdXQ7CkBAIC01NDksOSArNTk1LDcgQEAgdm9pZCBFbnN1cmVW
ZXJ0ZXhTaGFkZXJPbmx5UGlwZWxpbmVDYWNoZUluaXRpYWxpemVkKENvbnRleHQgKmNvbnRleHQs
CiAKICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQogICAgIHsKLSAgICAgICAgRGlzcGxheU10bCAq
ZGlzcGxheSAgICAgID0gY29udGV4dC0+Z2V0RGlzcGxheSgpOwotICAgICAgICBpZDxNVExMaWJy
YXJ5PiBzaGFkZXJMaWIgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOwotICAgICAg
ICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyICAgPSBbc2hhZGVyTGliIG5ld0Z1bmN0aW9uV2l0aE5h
bWU6dmVydGV4RnVuY3Rpb25OYW1lXTsKKyAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlciA9
IFtzaGFkZXJMaWIgbmV3RnVuY3Rpb25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlvbk5hbWVdOwogCiAg
ICAgICAgIEFTU0VSVChbc2hhZGVyIEFOR0xFX01UTF9BVVRPUkVMRUFTRV0pOwogCkBAIC01NzAs
NyArNjE0LDkgQEAgdm9pZCBFbnN1cmVTcGVjaWFsaXplZFZlcnRleFNoYWRlck9ubHlQaXBlbGlu
ZUNhY2hlSW5pdGlhbGl6ZWQoCiAgICAgaWYgKCFmdW5jQ29uc3RhbnRzKQogICAgIHsKICAgICAg
ICAgLy8gTm9uIHNwZWNpYWxpemVkIGNvbnN0YW50cyBwcm92aWRlZCwgdXNlIGRlZmF1bHQgY3Jl
YXRpb24gZnVuY3Rpb24uCi0gICAgICAgIEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNh
Y2hlSW5pdGlhbGl6ZWQoY29udGV4dCwgdmVydGV4RnVuY3Rpb25OYW1lLAorICAgICAgICBEaXNw
bGF5TXRsICpkaXNwbGF5ID0gY29udGV4dC0+Z2V0RGlzcGxheSgpOworICAgICAgICBhdXRvIHNo
YWRlckxpYiAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKKyAgICAgICAg
RW5zdXJlVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChjb250ZXh0LCB2
ZXJ0ZXhGdW5jdGlvbk5hbWUsIHNoYWRlckxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZUNhY2hlT3V0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTU4NCw5ICs2MzAsOSBAQCB2b2lkIEVuc3VyZVNwZWNpYWxpemVk
VmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZCgKIAogICAgIEFOR0xFX01U
TF9PQkpDX1NDT1BFCiAgICAgewotICAgICAgICBEaXNwbGF5TXRsICpkaXNwbGF5ICAgICAgPSBj
b250ZXh0LT5nZXREaXNwbGF5KCk7Ci0gICAgICAgIGlkPE1UTExpYnJhcnk+IHNoYWRlckxpYiA9
IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7Ci0gICAgICAgIE5TRXJyb3IgKmVyciAg
ICAgICAgICAgICA9IG5pbDsKKyAgICAgICAgRGlzcGxheU10bCAqZGlzcGxheSA9IGNvbnRleHQt
PmdldERpc3BsYXkoKTsKKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICA9IGRpc3BsYXktPmdl
dERlZmF1bHRTaGFkZXJzTGliKCk7CisgICAgICAgIE5TRXJyb3IgKmVyciAgICAgICAgPSBuaWw7
CiAKICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlciA9IFtzaGFkZXJMaWIgbmV3RnVuY3Rp
b25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlvbk5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudFZhbHVlczpmdW5jQ29uc3RhbnRzCkBAIC02
MDksMTIgKzY1NSwyOCBAQCBSZW5kZXJQaXBlbGluZURlc2MgR2V0Q29tcHV0aW5nVmVydGV4U2hh
ZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhSZW5kZXJDb21tYW5kRQogICAgIGNvbnN0IFJlbmRl
clBhc3NEZXNjICZyZW5kZXJQYXNzRGVzYyA9IGNtZEVuY29kZXItPnJlbmRlclBhc3NEZXNjKCk7
CiAKICAgICByZW5kZXJQYXNzRGVzYy5wb3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYygm
cGlwZWxpbmVEZXNjLm91dHB1dERlc2NyaXB0b3IpOwotICAgIHBpcGVsaW5lRGVzYy5yYXN0ZXJp
emF0aW9uVHlwZSAgICAgID0gUmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsK
KyAgICBwaXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5cGUgICA9IFJlbmRlclBpcGVsaW5lUmFz
dGVyaXphdGlvbjo6RGlzYWJsZWQ7CiAgICAgcGlwZWxpbmVEZXNjLmlucHV0UHJpbWl0aXZlVG9w
b2xvZ3kgPSBrUHJpbWl0aXZlVG9wb2xvZ3lDbGFzc1BvaW50OwogCiAgICAgcmV0dXJuIHBpcGVs
aW5lRGVzYzsKIH0KIAorLy8gR2V0IHBpcGVsaW5lIGRlc2NyaXB0b3IgZm9yIHJlbmRlciBwaXBl
bGluZSB0aGF0IGNvbnRhaW5zIHZlcnRleCBzaGFkZXIgYWN0aW5nIGFzIHRyYW5zZm9ybQorLy8g
ZmVlZGJhY2suCitBTkdMRV9JTkxJTkUKK1JlbmRlclBpcGVsaW5lRGVzYyBHZXRUcmFuc2Zvcm1G
ZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2Rl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKQoreworICAgIFJlbmRl
clBpcGVsaW5lRGVzYyB4ZmJQaXBlbGluZURlc2MgICA9IFJlbmRlclBpcGVsaW5lRGVzYyhwaXBl
bGluZURlc2MpOworICAgIGNvbnN0IFJlbmRlclBhc3NEZXNjICZyZW5kZXJQYXNzRGVzYyA9IGNt
ZEVuY29kZXItPnJlbmRlclBhc3NEZXNjKCk7CisKKyAgICByZW5kZXJQYXNzRGVzYy5wb3B1bGF0
ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYygmcGlwZWxpbmVEZXNjLm91dHB1dERlc2NyaXB0b3Ip
OworICAgIHhmYlBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSAgID0gUmVuZGVyUGlwZWxp
bmVSYXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsKKyAgICB4ZmJQaXBlbGluZURlc2MuaW5wdXRQcmlt
aXRpdmVUb3BvbG9neSA9IGtQcmltaXRpdmVUb3BvbG9neUNsYXNzUG9pbnQ7CisKKyAgICByZXR1
cm4geGZiUGlwZWxpbmVEZXNjOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHZvaWQgQ2xl
YXJSZW5kZXJQaXBlbGluZUNhY2hlQXJyYXkoVCAqcGlwZWxpbmVDYWNoZUFycmF5KQogewpAQCAt
NzEyLDggKzc3NCwxNCBAQCB2b2lkIFNldHVwQmxpdFdpdGhEcmF3VW5pZm9ybURhdGEoUmVuZGVy
Q29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCiAgICAgdW5pZm9ybVBhcmFtcy5zcmNMYXllciA9
IHBhcmFtcy5zcmNMYXllcjsKICAgICBpZiAoaXNDb2xvckJsaXQpCiAgICAgewotICAgICAgICBj
b25zdCBDb2xvckJsaXRQYXJhbXMgKmNvbG9yUGFyYW1zID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29s
b3JCbGl0UGFyYW1zICo+KCZwYXJhbXMpOwotICAgICAgICB1bmlmb3JtUGFyYW1zLmRzdEx1bWlu
YW5jZSAgICAgICAgID0gY29sb3JQYXJhbXMtPmRzdEx1bWluYW5jZSA/IDEgOiAwOworICAgICAg
ICBjb25zdCBhdXRvIGNvbG9yUGFyYW1zICAgICA9IHN0YXRpY19jYXN0PGNvbnN0IENvbG9yQmxp
dFBhcmFtcyAqPigmcGFyYW1zKTsKKyAgICAgICAgdW5pZm9ybVBhcmFtcy5kc3RMdW1pbmFuY2Ug
PSBjb2xvclBhcmFtcy0+ZHN0THVtaW5hbmNlID8gMSA6IDA7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGNvbnN0IGF1dG8gZHNQYXJhbXMgICAgID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
RGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKKyAgICAgICAgdW5pZm9ybVBhcmFt
cy5zcmNMZXZlbDIgPSBkc1BhcmFtcy0+c3JjU3RlbmNpbExldmVsOworICAgICAgICB1bmlmb3Jt
UGFyYW1zLnNyY0xheWVyMiA9IGRzUGFyYW1zLT5zcmNTdGVuY2lsTGF5ZXI7CiAgICAgfQogCiAg
ICAgLy8gQ29tcHV0ZSBzb3VyY2UgdGV4Q29vcmRzCkBAIC03MjcsOCArNzk1LDggQEAgdm9pZCBT
ZXR1cEJsaXRXaXRoRHJhd1VuaWZvcm1EYXRhKFJlbmRlckNvbW1hbmRFbmNvZGVyICpjbWRFbmNv
ZGVyLAogICAgIHsKICAgICAgICAgY29uc3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAqZHNQYXJh
bXMgPQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFt
cyAqPigmcGFyYW1zKTsKLSAgICAgICAgc3JjV2lkdGggID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWwt
PndpZHRoKGRzUGFyYW1zLT5zcmNMZXZlbCk7Ci0gICAgICAgIHNyY0hlaWdodCA9IGRzUGFyYW1z
LT5zcmNTdGVuY2lsLT5oZWlnaHQoZHNQYXJhbXMtPnNyY0xldmVsKTsKKyAgICAgICAgc3JjV2lk
dGggID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWwtPndpZHRoKG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwo
ZHNQYXJhbXMtPnNyY1N0ZW5jaWxMZXZlbCkpOworICAgICAgICBzcmNIZWlnaHQgPSBkc1BhcmFt
cy0+c3JjU3RlbmNpbC0+aGVpZ2h0KG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwoZHNQYXJhbXMtPnNy
Y1N0ZW5jaWxMZXZlbCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtNzM5LDggKzgwNyw4
IEBAIHZvaWQgU2V0dXBCbGl0V2l0aERyYXdVbmlmb3JtRGF0YShSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqY21kRW5jb2RlciwKICAgICBHZXRCbGl0VGV4Q29vcmRzKHNyY1dpZHRoLCBzcmNIZWlnaHQs
IHBhcmFtcy5zcmNSZWN0LCBwYXJhbXMuc3JjWUZsaXBwZWQsIHBhcmFtcy51bnBhY2tGbGlwWCwK
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bnBhY2tGbGlwWSwgJnUwLCAmdjAsICZ1MSwg
JnYxKTsKIAotICAgIGZsb2F0IGR1ID0gdTEgLSB1MDsKLSAgICBmbG9hdCBkdiA9IHYxIC0gdjA7
CisgICAgYXV0byBkdSA9IHUxIC0gdTA7CisgICAgYXV0byBkdiA9IHYxIC0gdjA7CiAKICAgICAv
LyBsb3dlciBsZWZ0CiAgICAgdW5pZm9ybVBhcmFtcy5zcmNUZXhDb29yZHNbMF1bMF0gPSB1MDsK
QEAgLTg0NCwxOSArOTEyLDIxIEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUo
Q29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAogLy8gU3RlbmNpbEJsaXRWaWFCdWZmZXJQ
YXJhbXMgaW1wbGVtZW50YXRpb24KIFN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2ls
QmxpdFZpYUJ1ZmZlclBhcmFtcygpIHt9CiAKLVN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpT
dGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyhjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1zICZz
cmNJbikKK1N0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBh
cmFtcyhjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1zICZzcmNQYXJhbXMpCiB7Ci0gICAgZHN0
VGV4dHVyZVNpemUgPSBzcmNJbi5kc3RUZXh0dXJlU2l6ZTsKLSAgICBkc3RSZWN0ICAgICAgICA9
IHNyY0luLmRzdFJlY3Q7Ci0gICAgZHN0U2Npc3NvclJlY3QgPSBzcmNJbi5kc3RTY2lzc29yUmVj
dDsKLSAgICBkc3RGbGlwWSAgICAgICA9IHNyY0luLmRzdEZsaXBZOwotICAgIGRzdEZsaXBYICAg
ICAgID0gc3JjSW4uZHN0RmxpcFg7Ci0gICAgc3JjUmVjdCAgICAgICAgPSBzcmNJbi5zcmNSZWN0
OwotICAgIHNyY1lGbGlwcGVkICAgID0gc3JjSW4uc3JjWUZsaXBwZWQ7Ci0gICAgdW5wYWNrRmxp
cFggICAgPSBzcmNJbi51bnBhY2tGbGlwWDsKLSAgICB1bnBhY2tGbGlwWSAgICA9IHNyY0luLnVu
cGFja0ZsaXBZOworICAgIGRzdFRleHR1cmVTaXplID0gc3JjUGFyYW1zLmRzdFRleHR1cmVTaXpl
OworICAgIGRzdFJlY3QgICAgICAgID0gc3JjUGFyYW1zLmRzdFJlY3Q7CisgICAgZHN0U2Npc3Nv
clJlY3QgPSBzcmNQYXJhbXMuZHN0U2Npc3NvclJlY3Q7CisgICAgZHN0RmxpcFkgICAgICAgPSBz
cmNQYXJhbXMuZHN0RmxpcFk7CisgICAgZHN0RmxpcFggICAgICAgPSBzcmNQYXJhbXMuZHN0Rmxp
cFg7CisgICAgc3JjUmVjdCAgICAgICAgPSBzcmNQYXJhbXMuc3JjUmVjdDsKKyAgICBzcmNZRmxp
cHBlZCAgICA9IHNyY1BhcmFtcy5zcmNZRmxpcHBlZDsKKyAgICB1bnBhY2tGbGlwWCAgICA9IHNy
Y1BhcmFtcy51bnBhY2tGbGlwWDsKKyAgICB1bnBhY2tGbGlwWSAgICA9IHNyY1BhcmFtcy51bnBh
Y2tGbGlwWTsKIAotICAgIHNyY1N0ZW5jaWwgPSBzcmNJbi5zcmNTdGVuY2lsOworICAgIHNyY1N0
ZW5jaWwgICAgICA9IHNyY1BhcmFtcy5zcmNTdGVuY2lsOworICAgIHNyY1N0ZW5jaWxMZXZlbCA9
IHNyY1BhcmFtcy5zcmNTdGVuY2lsTGV2ZWw7CisgICAgc3JjU3RlbmNpbExheWVyID0gc3JjUGFy
YW1zLnNyY1N0ZW5jaWxMYXllcjsKIH0KIAogLy8gUmVuZGVyVXRpbHMgaW1wbGVtZW50YXRpb24K
QEAgLTkwMyw2ICs5NzMsNyBAQCB2b2lkIFJlbmRlclV0aWxzOjpvbkRlc3Ryb3koKQogICAgIH0K
IH0KIAorCiAvLyBvdmVycmlkZSBFcnJvckhhbmRsZXIKIHZvaWQgUmVuZGVyVXRpbHM6OmhhbmRs
ZUVycm9yKEdMZW51bSBnbEVycm9yQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmZpbGUsCkBAIC0xMDE2LDkgKzEwODcsMTAgQEAgYW5nbGU6OlJlc3VsdCBS
ZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tQXJyYXlzKAogfQogYW5nbGU6OlJl
c3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheSgK
ICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAotICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBh
cmFtcyAmcGFyYW1zKQorICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAor
ICAgIHVpbnQzMl90ICppbmRpY2VzR2VuZXJhdGVkKQogewotICAgIHJldHVybiBtSW5kZXhVdGls
cy5nZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KGNvbnRleHRNdGwsIHBhcmFt
cyk7CisgICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1l
bnRzQXJyYXkoY29udGV4dE10bCwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKIH0KIAogYW5n
bGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21BcnJheXMo
CkBAIC0xMDUwLDYgKzExMjIsMjYgQEAgYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJh
dGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRzQXJyYXkoCiB7CiAgICAgcmV0dXJuIG1J
bmRleFV0aWxzLmdlbmVyYXRlTGluZUxvb3BMYXN0U2VnbWVudEZyb21FbGVtZW50c0FycmF5KGNv
bnRleHRNdGwsIHBhcmFtcyk7CiB9CithbmdsZTo6UmVzdWx0IFJlbmRlclV0aWxzOjpnZW5lcmF0
ZVByaW1pdGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
KmluZGljZXNHZW5lcmF0ZWQpCit7CisgICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVyYXRlUHJp
bWl0aXZlUmVzdGFydFBvaW50c0J1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMsIGluZGljZXNHZW5l
cmF0ZWQpOworfQorYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0TGluZXNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
ZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJh
dGVkKQoreworICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRM
aW5lc0J1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworfQorYW5n
bGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVz
QnVmZmVyKAorICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgY29uc3QgSW5kZXhHZW5l
cmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQorewor
ICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNC
dWZmZXIoY29udGV4dE10bCwgcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlc0dlbmVyYXRlZCk7Cit9CiAK
IHZvaWQgUmVuZGVyVXRpbHM6OmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KAogICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCkBAIC0xMTIxLDYgKzEyMTMsMjEgQEAgYW5nbGU6OlJlc3VsdCBSZW5k
ZXJVdGlsczo6ZXhwYW5kVmVydGV4Rm9ybWF0Q29tcG9uZW50c1ZTKGNvbnN0IGdsOjpDb250ZXh0
ICpjb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMpOwogfQogCithbmdsZTo6UmVzdWx0IFJlbmRlclV0aWxzOjpjcmVh
dGVUcmFuc2Zvcm1GZWVkYmFja1BTTyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckNv
bW1hbmRFbmNvZGVyICpyZW5kZXJFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVs
aW5lRGVzYykKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNv
bnRleHQpOworICAgIC8vIENyZWF0ZSBhbmQgY2FjaGUgdGhlIFBTTworICAgIGF1dG8gcHNvID0g
bVRyYW5zZm9ybUZlZWRiYWNrVXRpbHMuZ2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGlu
ZShjb250ZXh0TXRsLCByZW5kZXJFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZURl
c2MpOworICAgIGlmIChwc28pCisgICAgeworICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CisgICAgfQorICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworfQorCiAv
LyBDbGVhclV0aWxzIGltcGxlbWVudGF0aW9uCiBDbGVhclV0aWxzOjpDbGVhclV0aWxzKGNvbnN0
IHN0ZDo6c3RyaW5nICZmcmFnbWVudFNoYWRlck5hbWUpCiAgICAgOiBtRnJhZ21lbnRTaGFkZXJO
YW1lKGZyYWdtZW50U2hhZGVyTmFtZSkKQEAgLTEyODcsMTEgKzEzOTQsMTEgQEAgYW5nbGU6OlJl
c3VsdCBDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAogICAgIHsKICAgICAgICAgb3ZlcnJpZGVkUGFyYW1zLmNsZWFyQ29sb3IucmVzZXQoKTsKICAg
ICB9Ci0gICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZSkKKyAg
ICBpZiAoIXJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpCiAgICAgewog
ICAgICAgICBvdmVycmlkZWRQYXJhbXMuY2xlYXJEZXB0aC5yZXNldCgpOwogICAgIH0KLSAgICBp
ZiAoIXJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFy
ZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKCkpCiAgICAgewogICAgICAg
ICBvdmVycmlkZWRQYXJhbXMuY2xlYXJTdGVuY2lsLnJlc2V0KCk7CiAgICAgfQpAQCAtMTMwNyw3
ICsxNDE0LDcgQEAgYW5nbGU6OlJlc3VsdCBDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OwogICAgIHsK
ICAgICAgICAgLy8gTmVlZCB0byBkaXNhYmxlIG9jY2x1c2lvbiBxdWVyeSwgb3RoZXJ3aXNlIGNs
ZWFyaW5nIHdpbGwgYWZmZWN0IHRoZSBvY2NsdXNpb24gY291bnRpbmcKLSAgICAgICAgU2NvcGVk
RGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAm
cmVzdWx0KTsKKyAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2Ns
dXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLCAmcmVzdWx0KTsKICAgICAgICAgLy8g
RHJhdyB0aGUgc2NyZWVuIGFsaWduZWQgdHJpYW5nbGUKICAgICAgICAgY21kRW5jb2Rlci0+ZHJh
dyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOwogICAgIH0KQEAgLTE0ODEsNyArMTU4
OCw3IEBAIGFuZ2xlOjpSZXN1bHQgQ29sb3JCbGl0VXRpbHM6OmJsaXRDb2xvcldpdGhEcmF3KGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OwogICAg
IHsKICAgICAgICAgLy8gTmVlZCB0byBkaXNhYmxlIG9jY2x1c2lvbiBxdWVyeSwgb3RoZXJ3aXNl
IGJsaXR0aW5nIHdpbGwgYWZmZWN0IHRoZSBvY2NsdXNpb24gY291bnRpbmcKLSAgICAgICAgU2Nv
cGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRs
LCAmcmVzdWx0KTsKKyAgICAgICAgU2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVP
Y2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLCAmcmVzdWx0KTsKICAgICAgICAg
Ly8gRHJhdyB0aGUgc2NyZWVuIGFsaWduZWQgdHJpYW5nbGUKICAgICAgICAgY21kRW5jb2Rlci0+
ZHJhdyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOwogICAgIH0KQEAgLTE3MDMsNyAr
MTgxMCw3IEBAIGFuZ2xlOjpSZXN1bHQgRGVwdGhTdGVuY2lsQmxpdFV0aWxzOjpibGl0RGVwdGhT
dGVuY2lsV2l0aERyYXcoY29uc3QgZ2w6OkNvbnRleHQKICAgICBhbmdsZTo6UmVzdWx0IHJlc3Vs
dDsKICAgICB7CiAgICAgICAgIC8vIE5lZWQgdG8gZGlzYWJsZSBvY2NsdXNpb24gcXVlcnksIG90
aGVyd2lzZSBibGl0dGluZyB3aWxsIGFmZmVjdCB0aGUgb2NjbHVzaW9uIGNvdW50aW5nCi0gICAg
ICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVlcnkoY29u
dGV4dE10bCwgJnJlc3VsdCk7CisgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBk
aXNhYmxlT2NjbHVzaW9uUXVlcnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CiAg
ICAgICAgIC8vIERyYXcgdGhlIHNjcmVlbiBhbGlnbmVkIHRyaWFuZ2xlCiAgICAgICAgIGNtZEVu
Y29kZXItPmRyYXcoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCAwLCAzKTsKICAgICB9CkBAIC0y
MDAyLDcgKzIxMDksOCBAQCBhbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVy
YXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cygKIAogYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRv
clV0aWxzOjpnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KAogICAgIENvbnRl
eHRNdGwgKmNvbnRleHRNdGwsCi0gICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJh
bXMpCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgdWludDMy
X3QgKmluZGljZXNHZW5lcmF0ZWQpCiB7CiAgICAgY29uc3QgZ2w6OlZlcnRleEFycmF5ICp2ZXJ0
ZXhBcnJheSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0VmVydGV4QXJyYXkoKTsKICAgICBj
b25zdCBnbDo6QnVmZmVyICplbGVtZW50QnVmZmVyICAgID0gdmVydGV4QXJyYXktPmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpOwpAQCAtMjAxMywxMyArMjEyMSwxNCBAQCBhbmdsZTo6UmVzdWx0IElu
ZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXko
CiAgICAgICAgIEFOR0xFX0NIRUNLKGNvbnRleHRNdGwsIHNyY09mZnNldCA8PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCksCiAgICAgICAgICAgICAgICAgICAgICJJbmRleCBv
ZmZzZXQgaXMgdG9vIGxhcmdlIiwgR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIGlmIChwYXJh
bXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQgfHwKLSAgICAgICAgICAgICghY29udGV4dE10bC0+
Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0NoZWFwUmVuZGVyUGFzcy5lbmFibGVkICYm
CisgICAgICAgICAgICAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5i
cmVha1JlbmRlclBhc3NJc0NoZWFwLmVuYWJsZWQgJiYKICAgICAgICAgICAgICBjb250ZXh0TXRs
LT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKSkKICAgICAgICAgewogICAgICAgICAgICAgSW5k
ZXhHZW5lcmF0aW9uUGFyYW1zIGNwdVBhdGhQYXJhbXMgPSBwYXJhbXM7CiAgICAgICAgICAgICBj
cHVQYXRoUGFyYW1zLmluZGljZXMgPQogICAgICAgICAgICAgICAgIGVsZW1lbnRCdWZmZXJNdGwt
PmdldENsaWVudFNoYWRvd0NvcHlEYXRhKGNvbnRleHRNdGwpICsgc3JjT2Zmc2V0OwotICAgICAg
ICAgICAgcmV0dXJuIGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUoY29u
dGV4dE10bCwgY3B1UGF0aFBhcmFtcyk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVUcmlG
YW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShjb250ZXh0TXRsLCBjcHVQYXRoUGFyYW1zLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kaWNlc0dlbmVyYXRlZCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7
CkBAIC0yMDMwLDcgKzIxMzksNyBAQCBhbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6
OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoCiAgICAgfQogICAgIGVsc2UK
ICAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0Fy
cmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFtcyk7CisgICAgICAgIHJldHVybiBnZW5lcmF0ZVRyaUZh
bkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFtcywgaW5kaWNlc0dl
bmVyYXRlZCk7CiAgICAgfQogfQogCkBAIC0yMDc0LDIyICsyMTgzLDIzIEBAIGFuZ2xlOjpSZXN1
bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNB
cnJheUdQVSgKIAogYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKAogICAgIENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCi0gICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpCisgICAgY29uc3Qg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgdWludDMyX3QgKmdlbkluZGljZXMp
CiB7CiAgICAgc3dpdGNoIChwYXJhbXMuc3JjVHlwZSkKICAgICB7CiAgICAgICAgIGNhc2UgZ2w6
OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0ZToKICAgICAgICAgICAgIHJldHVybiBHZW5U
cmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoCiAgICAgICAgICAgICAgICAgY29udGV4dE10bCwgcGFy
YW1zLmluZGV4Q291bnQsIHBhcmFtcy5wcmltaXRpdmVSZXN0YXJ0RW5hYmxlZCwKLSAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90ICo+KHBhcmFtcy5pbmRpY2VzKSwgcGFy
YW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCk7CisgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIs
IHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOwogICAgICAgICBjYXNlIGdsOjpEcmF3RWxl
bWVudHNUeXBlOjpVbnNpZ25lZFNob3J0OgogICAgICAgICAgICAgcmV0dXJuIEdlblRyaUZhbkZy
b21DbGllbnRFbGVtZW50cygKICAgICAgICAgICAgICAgICBjb250ZXh0TXRsLCBwYXJhbXMuaW5k
ZXhDb3VudCwgcGFyYW1zLnByaW1pdGl2ZVJlc3RhcnRFbmFibGVkLAotICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQxNl90ICo+KHBhcmFtcy5pbmRpY2VzKSwgcGFyYW1zLmRz
dEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCk7CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDE2X3QgKj4ocGFyYW1zLmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJh
bXMuZHN0T2Zmc2V0LCBnZW5JbmRpY2VzKTsKICAgICAgICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRz
VHlwZTo6VW5zaWduZWRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gR2VuVHJpRmFuRnJvbUNsaWVu
dEVsZW1lbnRzKAogICAgICAgICAgICAgICAgIGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50
LCBwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCi0gICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4ocGFyYW1zLmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVy
LCBwYXJhbXMuZHN0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1
aW50MzJfdCAqPihwYXJhbXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RP
ZmZzZXQsIGdlbkluZGljZXMpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKICAgICB9CkBAIC0yMzAxLDYgKzI0MTEsNTYgQEAgYW5nbGU6OlJlc3VsdCBJbmRl
eEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZUxpbmVMb29wTGFzdFNlZ21lbnRGcm9tRWxlbWVudHNB
cnJheUMKICAgICByZXR1cm4gZ2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50KGNvbnRleHRNdGws
IGZpcnN0LCBsYXN0LCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKIH0KIAor
YW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3Rh
cnRCdWZmZXIoCisgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICB1bnNpZ25lZCBudW1W
ZXJ0aWNlc1BlclByaW1pdGl2ZSwKKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBh
cmFtcywKKyAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpCit7CisgICAgc3dpdGNoIChwYXJh
bXMuc3JjVHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVu
c2lnbmVkQnl0ZToKKyAgICAgICAgICAgIHJldHVybiBHZW5QcmltaXRpdmVSZXN0YXJ0QnVmZmVy
KGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QgKj4ocGFyYW1zLmluZGljZXMpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNl
dCwgaW5kaWNlc0dlbmVyYXRlZCk7CisgICAgICAgIGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6
OlVuc2lnbmVkU2hvcnQ6CisgICAgICAgICAgICByZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1
ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgbnVtVmVydGljZXNQZXJQcmltaXRp
dmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxjb25zdCB1aW50MTZfdCAqPihwYXJhbXMuaW5kaWNlcyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0
T2Zmc2V0LCBpbmRpY2VzR2VuZXJhdGVkKTsKKyAgICAgICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRz
VHlwZTo6VW5zaWduZWRJbnQ6CisgICAgICAgICAgICByZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFy
dEJ1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgbnVtVmVydGljZXNQZXJQcmlt
aXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxjb25zdCB1aW50MzJfdCAqPihwYXJhbXMuaW5kaWNlcyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMu
ZHN0T2Zmc2V0LCBpbmRpY2VzR2VuZXJhdGVkKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3Rv
cDsKKyAgICB9Cit9CisKK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwsCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisgICAgc2l6
ZV90ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIHJldHVybiBnZW5lcmF0ZVByaW1pdGl2ZVJl
c3RhcnRCdWZmZXIoY29udGV4dE10bCwgMywgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKK30K
KworYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJl
c3RhcnRMaW5lc0J1ZmZlcigKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgIGNvbnN0
IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorICAgIHNpemVfdCAqaW5kaWNlc0dlbmVy
YXRlZCkKK3sKKyAgICByZXR1cm4gZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKGNvbnRl
eHRNdGwsIDIsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRlZCk7Cit9CisKK2FuZ2xlOjpSZXN1bHQg
SW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVy
KAorICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9u
UGFyYW1zICZwYXJhbXMsCisgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKQoreworICAgIHJl
dHVybiBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoY29udGV4dE10bCwgMSwgcGFyYW1z
LCBpbmRpY2VzR2VuZXJhdGVkKTsKK30KKwogLy8gVmlzaWJpbGl0eVJlc3VsdFV0aWxzIGltcGxl
bWVudGF0aW9uCiB2b2lkIFZpc2liaWxpdHlSZXN1bHRVdGlsczo6b25EZXN0cm95KCkKIHsKQEAg
LTIzNzUsNyArMjUzNSwxMCBAQCB2b2lkIFZpc2liaWxpdHlSZXN1bHRVdGlsczo6Y29tYmluZVZp
c2liaWxpdHlSZXN1bHQoCiAvLyBNaXBtYXBVdGlscyBpbXBsZW1lbnRhdGlvbgogdm9pZCBNaXBt
YXBVdGlsczo6b25EZXN0cm95KCkKIHsKLSAgICBtM0RNaXBHZW5lcmF0b3JQaXBlbGluZSA9IG5p
bDsKKyAgICBtM0RNaXBHZW5lcmF0b3JQaXBlbGluZSAgICAgID0gbmlsOworICAgIG0yRE1pcEdl
bmVyYXRvclBpcGVsaW5lICAgICAgPSBuaWw7CisgICAgbTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBl
bGluZSA9IG5pbDsKKyAgICBtQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5lICAgID0gbmlsOwogfQog
CiB2b2lkIE1pcG1hcFV0aWxzOjplbnN1cmUzRE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6
ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkKQEAgLTIzODQsNjYgKzI1NDcsNzggQEAgdm9pZCBN
aXBtYXBVdGlsczo6ZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
bTNETWlwR2VuZXJhdG9yUGlwZWxpbmUpOwogfQogCit2b2lkIE1pcG1hcFV0aWxzOjplbnN1cmUy
RE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkK
K3sKKyAgICBFbnN1cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsLT5nZXRE
aXNwbGF5KCksIEAiZ2VuZXJhdGUyRE1pcG1hcHMiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZtMkRNaXBHZW5lcmF0b3JQaXBlbGluZSk7Cit9CisKK3ZvaWQgTWlwbWFw
VXRpbHM6OmVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwpCit7CisgICAgRW5zdXJlQ29tcHV0ZVBpcGVsaW5lSW5pdGlhbGl6
ZWQoY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLCBAImdlbmVyYXRlMkRBcnJheU1pcG1hcHMiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtMkRBcnJheU1pcEdlbmVyYXRv
clBpcGVsaW5lKTsKK30KKwordm9pZCBNaXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRv
clBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkKK3sKKyAgICBFbnN1
cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsLT5nZXREaXNwbGF5KCksIEAi
Z2VuZXJhdGVDdWJlTWlwbWFwcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJm1DdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmUpOworfQorCiBhbmdsZTo6UmVzdWx0IE1pcG1h
cFV0aWxzOjpnZW5lcmF0ZU1pcG1hcENTKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJnNy
Y1RleHR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc1JHQk1pcG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTmF0aXZlVGV4TGV2ZWxBcnJheSAqbWlwbWFwT3V0cHV0Vmlld3MpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZVRleExldmVsQXJyYXkgKiBtaXBt
YXBPdXRwdXRWaWV3cykKIHsKLSAgICAvLyBPbmx5IHN1cHBvcnQgM0QgdGV4dHVyZSBmb3Igbm93
LgotICAgIEFTU0VSVChzcmNUZXh0dXJlLT50ZXh0dXJlVHlwZSgpID09IE1UTFRleHR1cmVUeXBl
M0QpOworICAgIENvbXB1dGVDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciA9IGNvbnRleHRNdGwt
PmdldENvbXB1dGVDb21tYW5kRW5jb2RlcigpOworICAgIEFTU0VSVChjbWRFbmNvZGVyKTsKIAog
ICAgIE1UTFNpemUgdGhyZWFkR3JvdXBTaXplOwotICAgIHVpbnQzMl90IHNsaWNlcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAxOwotICAgIGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRl
PiBjb21wdXRlUGlwZWxpbmUgPSBuaWw7Ci0KLSAgICBlbnN1cmUzRE1pcEdlbmVyYXRvclBpcGVs
aW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bCk7Ci0gICAgY29tcHV0ZVBpcGVsaW5lID0gbTNETWlw
R2VuZXJhdG9yUGlwZWxpbmU7Ci0gICAgdGhyZWFkR3JvdXBTaXplID0KLSAgICAgICAgTVRMU2l6
ZU1ha2Uoa0dlbmVyYXRlTWlwVGhyZWFkR3JvdXBTaXplUGVyRGltLCBrR2VuZXJhdGVNaXBUaHJl
YWRHcm91cFNpemVQZXJEaW0sCi0gICAgICAgICAgICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVh
ZEdyb3VwU2l6ZVBlckRpbSk7Ci0KLSAgICAvLyBUaGUgY29tcHV0ZSBzaGFkZXIgc3VwcG9ydHMg
dXAgdG8gNCBtaXBtYXBzIGdlbmVyYXRlZCBwZXIgcGFzcy4KLSAgICAvLyBTZWUgc2hhZGVycy9n
ZW5fbWlwbWFwLm1ldGFsCi0gICAgdWludDMyX3QgbWF4TWlwc1BlckJhdGNoID0gNDsKLQotICAg
IGlmICh0aHJlYWRHcm91cFNpemUud2lkdGggKiB0aHJlYWRHcm91cFNpemUuaGVpZ2h0ICogdGhy
ZWFkR3JvdXBTaXplLmRlcHRoID4KLSAgICAgICAgICAgIGNvbXB1dGVQaXBlbGluZS5tYXhUb3Rh
bFRocmVhZHNQZXJUaHJlYWRncm91cCB8fAotICAgICAgICBBTkdMRV9VTkxJS0VMWSgKLSAgICAg
ICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYWxsb3dHZW5N
dWx0aXBsZU1pcHNQZXJQYXNzLmVuYWJsZWQpKQorICAgIHVpbnQzMl90IHNsaWNlcyA9IDE7Cisg
ICAgc3dpdGNoIChzcmNUZXh0dXJlLT50ZXh0dXJlVHlwZSgpKQogICAgIHsKLSAgICAgICAgLy8g
TXVsdGlwbGUgbWlwbWFwcyBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIGhhcmR3
YXJlJ3MgdGhyZWFkIGdyb3VwIHNpemUgbGltaXRzLgotICAgICAgICAvLyBGYWxsYmFjayB0byBn
ZW5lcmF0ZSBvbmUgbWlwIHBlciBwYXNzIGFuZCByZWR1Y2UgdGhyZWFkIGdyb3VwIHNpemUuCi0g
ICAgICAgIGlmIChBTkdMRV9VTkxJS0VMWSh0aHJlYWRHcm91cFNpemUud2lkdGggKiB0aHJlYWRH
cm91cFNpemUuaGVpZ2h0ID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVQaXBl
bGluZS5tYXhUb3RhbFRocmVhZHNQZXJUaHJlYWRncm91cCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIEV2ZW4gd2l0aCByZWR1Y2VkIHRocmVhZCBncm91cCBzaXplLCB3ZSBjYW5ub3QgcHJv
Y2VlZC4KLSAgICAgICAgICAgIC8vIEhBQ0s6IHVzZSBibGl0IGNvbW1hbmQgZW5jb2RlciB0byBn
ZW5lcmF0ZSBtaXBtYXBzIGlmIGl0IGlzIG5vdCBwb3NzaWJsZQotICAgICAgICAgICAgLy8gdG8g
dXNlIGNvbXB1dGUgc2hhZGVyIGR1ZSB0byBoYXJkd2FyZSBsaW1pdHMuCi0gICAgICAgICAgICBC
bGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1h
bmRFbmNvZGVyKCk7Ci0gICAgICAgICAgICBibGl0RW5jb2Rlci0+Z2VuZXJhdGVNaXBtYXBzRm9y
VGV4dHVyZShzcmNUZXh0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpD
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocmVhZEdyb3VwU2l6ZS5kZXB0aCA9IDE7
Ci0gICAgICAgIG1heE1pcHNQZXJCYXRjaCAgICAgICA9IDE7CisgICAgICAgIGNhc2UgTVRMVGV4
dHVyZVR5cGUyRDoKKyAgICAgICAgICAgIGVuc3VyZTJETWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0
aWFsaXplZChjb250ZXh0TXRsKTsKKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQ
aXBlbGluZVN0YXRlKG0yRE1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyAgICAgICAgICAgIHRocmVh
ZEdyb3VwU2l6ZSA9IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRp
bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtHZW5lcmF0ZU1p
cFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBNVExUZXh0dXJlVHlwZTJEQXJyYXk6CisgICAgICAgICAgICBlbnN1cmUyREFycmF5TWlw
R2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKyAgICAgICAgICAgIGNt
ZEVuY29kZXItPnNldENvbXB1dGVQaXBlbGluZVN0YXRlKG0yREFycmF5TWlwR2VuZXJhdG9yUGlw
ZWxpbmUpOworICAgICAgICAgICAgc2xpY2VzICAgICAgICAgID0gc3JjVGV4dHVyZS0+YXJyYXlM
ZW5ndGgoKTsKKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9IE1UTFNpemVNYWtlKGtHZW5l
cmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNVExUZXh0dXJlVHlwZUN1YmU6CisgICAg
ICAgICAgICBlbnN1cmVDdWJlTWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0
TXRsKTsKKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQaXBlbGluZVN0YXRlKG1D
dWJlTWlwR2VuZXJhdG9yUGlwZWxpbmUpOworICAgICAgICAgICAgc2xpY2VzICAgICAgICAgID0g
NjsKKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1p
cFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNVExUZXh0dXJlVHlwZTNEOgorICAgICAgICAgICAg
ZW5zdXJlM0RNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKGNvbnRleHRNdGwpOworICAg
ICAgICAgICAgY21kRW5jb2Rlci0+c2V0Q29tcHV0ZVBpcGVsaW5lU3RhdGUobTNETWlwR2VuZXJh
dG9yUGlwZWxpbmUpOworICAgICAgICAgICAgdGhyZWFkR3JvdXBTaXplID0KKyAgICAgICAgICAg
ICAgICBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sIGtHZW5l
cmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgIH0KIAot
ICAgIENvbXB1dGVDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciA9IGNvbnRleHRNdGwtPmdldENv
bXB1dGVDb21tYW5kRW5jb2RlcigpOwotICAgIEFTU0VSVChjbWRFbmNvZGVyKTsKLSAgICBjbWRF
bmNvZGVyLT5zZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShjb21wdXRlUGlwZWxpbmUpOwotCi0gICAg
R2VuZXJhdGVNaXBtYXBVbmlmb3JtIG9wdGlvbnM7CisgICAgR2VuZXJhdGUzRE1pcG1hcFVuaWZv
cm0gb3B0aW9uczsKKyAgICB1aW50MzJfdCBtYXhNaXBzUGVyQmF0Y2ggPSA0OwogCi0gICAgdWlu
dDMyX3QgcmVtYWluTWlwcyAgICAgICAgICAgICA9IHNyY1RleHR1cmUtPm1pcG1hcExldmVscygp
IC0gMTsKLSAgICBNaXBtYXBOYXRpdmVMZXZlbCBiYXRjaFNyY0xldmVsID0ga1plcm9OYXRpdmVN
aXBMZXZlbDsKLSAgICBvcHRpb25zLnNyY0xldmVsICAgICAgICAgICAgICAgID0gYmF0Y2hTcmNM
ZXZlbC5nZXQoKTsKLSAgICBvcHRpb25zLnNSR0IgICAgICAgICAgICAgICAgICAgID0gc1JHQk1p
cG1hcDsKKyAgICB1aW50MzJfdCByZW1haW5NaXBzID0gc3JjVGV4dHVyZS0+bWlwbWFwTGV2ZWxz
KCkgLSAxOworICAgIG9wdGlvbnMuc3JjTGV2ZWwgICAgPSAwOwogCiAgICAgY21kRW5jb2Rlci0+
c2V0VGV4dHVyZShzcmNUZXh0dXJlLCAwKTsKICAgICBjbWRFbmNvZGVyLT5tYXJrUmVzb3VyY2VC
ZWluZ1dyaXR0ZW5CeUdQVShzcmNUZXh0dXJlKTsKICAgICB3aGlsZSAocmVtYWluTWlwcykKICAg
ICB7Ci0gICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJmZpcnN0TWlwVmlldyA9IG1pcG1hcE91dHB1
dFZpZXdzLT5hdChiYXRjaFNyY0xldmVsICsgMSk7CisgICAgICAgIGNvbnN0IFRleHR1cmVSZWYg
JmZpcnN0TWlwVmlldyA9IG1pcG1hcE91dHB1dFZpZXdzLT5hdChtdGw6Ok1pcG1hcE5hdGl2ZUxl
dmVsKG9wdGlvbnMuc3JjTGV2ZWwgKyAxKSk7CiAgICAgICAgIGdsOjpFeHRlbnRzIHNpemUgICAg
ICAgICAgICAgICA9IGZpcnN0TWlwVmlldy0+c2l6ZUF0MCgpOwogICAgICAgICBib29sIGlzUG93
MiA9IGdsOjppc1BvdzIoc2l6ZS53aWR0aCkgJiYgZ2w6OmlzUG93MihzaXplLmhlaWdodCkgJiYg
Z2w6OmlzUG93MihzaXplLmRlcHRoKTsKIApAQCAtMjQ2MSwyMCArMjYzNiwxOCBAQCBhbmdsZTo6
UmVzdWx0IE1pcG1hcFV0aWxzOjpnZW5lcmF0ZU1pcG1hcENTKENvbnRleHRNdGwgKmNvbnRleHRN
dGwsCiAKICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMTsgaSA8PSBvcHRpb25zLm51bU1pcG1h
cHNUb0dlbmVyYXRlOyArK2kpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNtZEVuY29kZXItPnNl
dFRleHR1cmUobWlwbWFwT3V0cHV0Vmlld3MtPmF0KGJhdGNoU3JjTGV2ZWwgKyBpKSwgaSk7Cisg
ICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRUZXh0dXJlKG1pcG1hcE91dHB1dFZpZXdzLT5hdCht
dGw6Ok1pcG1hcE5hdGl2ZUxldmVsKG9wdGlvbnMuc3JjTGV2ZWwgKyBpKSksIGkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdWludDMyX3QgdGhyZWFkc1BlclogPSBzdGQ6Om1heChzbGljZXMsIGZp
cnN0TWlwVmlldy0+ZGVwdGhBdDAoKSk7CiAKLSAgICAgICAgRGlzcGF0Y2hDb21wdXRlKAotICAg
ICAgICAgICAgY29udGV4dE10bCwgY21kRW5jb2RlciwKLSAgICAgICAgICAgIC8qKiBhbGxvd05v
blVuaWZvcm0gKi8gZmFsc2UsCi0gICAgICAgICAgICBNVExTaXplTWFrZShmaXJzdE1pcFZpZXct
PndpZHRoQXQwKCksIGZpcnN0TWlwVmlldy0+aGVpZ2h0QXQwKCksIHRocmVhZHNQZXJaKSwKLSAg
ICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSk7CisgICAgICAgIERpc3BhdGNoQ29tcHV0ZShjb250
ZXh0TXRsLCBjbWRFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgLyoqIGFsbG93Tm9u
VW5pZm9ybSAqLyBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1UTFNpemVNYWtlKGZp
cnN0TWlwVmlldy0+d2lkdGhBdDAoKSwgZmlyc3RNaXBWaWV3LT5oZWlnaHRBdDAoKSwgdGhyZWFk
c1BlclopLAorICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkR3JvdXBTaXplKTsKIAogICAg
ICAgICByZW1haW5NaXBzIC09IG9wdGlvbnMubnVtTWlwbWFwc1RvR2VuZXJhdGU7Ci0gICAgICAg
IGJhdGNoU3JjTGV2ZWwgICAgPSBiYXRjaFNyY0xldmVsICsgb3B0aW9ucy5udW1NaXBtYXBzVG9H
ZW5lcmF0ZTsKLSAgICAgICAgb3B0aW9ucy5zcmNMZXZlbCA9IGJhdGNoU3JjTGV2ZWwuZ2V0KCk7
CisgICAgICAgIG9wdGlvbnMuc3JjTGV2ZWwgKz0gb3B0aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0
ZTsKICAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CkBAIC0yNTA0
LDggKzI2NzcsNyBAQCBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IENv
cHlQaXhlbHNVdGlsczo6Z2V0UGl4ZWxzQ29weVBpcGVsaW5lKAogICAgIGludCBzaGFkZXJUZXh0
dXJlVHlwZSA9IEdldFNoYWRlclRleHR1cmVUeXBlKHRleHR1cmUpOwogICAgIGludCBpbmRleDIg
PSBtdGxfc2hhZGVyOjprVGV4dHVyZVR5cGVDb3VudCAqIChidWZmZXJXcml0ZSA/IDEgOiAwKSAr
IHNoYWRlclRleHR1cmVUeXBlOwogCi0gICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVs
aW5lU3RhdGU+PiAmY2FjaGUgPQotICAgICAgICBtUGl4ZWxzQ29weVBpcGVsaW5lQ2FjaGVzW2Zv
cm1hdElEVmFsdWVdW2luZGV4Ml07CisgICAgYXV0byAmY2FjaGUgPSBtUGl4ZWxzQ29weVBpcGVs
aW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdW2luZGV4Ml07CiAKICAgICBpZiAoIWNhY2hlKQogICAg
IHsKQEAgLTI3ODMsNyArMjk1NSwxMCBAQCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGlu
ZVN0YXRlPj4KIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlsczo6Z2V0Q29tcG9uZW50c0V4cGFu
ZFJlbmRlclBpcGVsaW5lKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb21t
YW5kRW5jb2RlciAqY21kRW5jb2RlcikKIHsKKyAgICBEaXNwbGF5TXRsICpkaXNwbGF5ID0gY29u
dGV4dE10bC0+Z2V0RGlzcGxheSgpOworICAgIGF1dG8gc2hhZGVyTGliICAgICAgPSBkaXNwbGF5
LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOwogICAgIEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBl
bGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dE10bCwgQCJleHBhbmRWZXJ0ZXhGb3JtYXRDb21w
b25lbnRzVlMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2hhZGVyTGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJm1Db21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmVDYWNoZSk7CiAKICAg
ICBSZW5kZXJQaXBlbGluZURlc2MgcGlwZWxpbmVEZXNjID0gR2V0Q29tcHV0aW5nVmVydGV4U2hh
ZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVyKTsKQEAgLTI3OTcsOCArMjk3Miw3
IEBAIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlsczo6Z2V0RmxvYXRDb252ZXJzdGlvbkNvbXB1
dGVQaXBlbGluZShDb250ZXh0TXRsICpjb250CiB7CiAgICAgaW50IGZvcm1hdElEVmFsdWUgPSBz
dGF0aWNfY2FzdDxpbnQ+KHNyY0FuZ2xlRm9ybWF0LmlkKTsKIAotICAgIEF1dG9PYmpDUHRyPGlk
PE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gJmNhY2hlID0KLSAgICAgICAgbUNvbnZlcnRUb0Zs
b2F0Q29tcFBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdOworICAgIGF1dG8gJmNhY2hlID0g
bUNvbnZlcnRUb0Zsb2F0Q29tcFBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdOwogCiAgICAg
aWYgKCFjYWNoZSkKICAgICB7CkBAIC0yODQ5LDUgKzMwMjMsNTMgQEAgVmVydGV4Rm9ybWF0Q29u
dmVyc2lvblV0aWxzOjpnZXRGbG9hdENvbnZlcnN0aW9uUmVuZGVyUGlwZWxpbmUoQ29udGV4dE10
bCAqY29udGUKICAgICByZXR1cm4gY2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0
TXRsLCBwaXBlbGluZURlc2MpOwogfQogCitBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gVHJh
bnNmb3JtRmVlZGJhY2tVdGlsczo6Y3JlYXRlTXNsWGZiTGlicmFyeSgKKyAgICBDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFuc2xhdGVkTXNsKQorewor
ICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgeworICAgICAgICBEaXNwbGF5TXRsICpkaXNw
bGF5ICAgICA9IGNvbnRleHRNdGwtPmdldERpc3BsYXkoKTsKKyAgICAgICAgaWQ8TVRMRGV2aWNl
PiBtdGxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOworCisgICAgICAgIC8vIENv
bnZlcnQgdG8gYWN0dWFsIGJpbmFyeSBzaGFkZXIKKyAgICAgICAgbXRsOjpBdXRvT2JqQ1B0cjxO
U0Vycm9yICo+IGVyciA9IG5pbDsKKyAgICAgICAgbXRsOjpBdXRvT2JqQ1B0cjxpZDxNVExMaWJy
YXJ5Pj4gbXRsU2hhZGVyTGliID0KKyAgICAgICAgICAgIG10bDo6Q3JlYXRlU2hhZGVyTGlicmFy
eShtdGxEZXZpY2UsIHRyYW5zbGF0ZWRNc2wsICZlcnIpOworICAgICAgICBpZiAoZXJyICYmICFt
dGxTaGFkZXJMaWIpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5TTG9nKEAiJUAiLCBlcnIuZ2V0
KCkpOworICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBt
dGxTaGFkZXJMaWI7CisgICAgfQorfQorCitBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGlu
ZVN0YXRlPj4gVHJhbnNmb3JtRmVlZGJhY2tVdGlsczo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5k
ZXJQaXBlbGluZSgKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgIFJlbmRlckNvbW1h
bmRFbmNvZGVyICpjbWRFbmNvZGVyLAorICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBl
bGluZURlc2MpCit7CisgICAgY29uc3QgUHJvZ3JhbU10bCAqcHJvZ3JhbU10bCA9IG10bDo6R2V0
SW1wbChjb250ZXh0TXRsLT5nZXRTdGF0ZSgpLmdldFByb2dyYW0oKSk7CisgICAgUmVuZGVyUGlw
ZWxpbmVDYWNoZSAmY2FjaGUgICA9ICpwcm9ncmFtTXRsLT5tTWV0YWxYZmJSZW5kZXJQaXBlbGlu
ZUNhY2hlOworCisgICAgaWYgKCFjYWNoZS5nZXRWZXJ0ZXhTaGFkZXIoKSkKKyAgICB7CisgICAg
ICAgIC8vIFBpcGVsaW5lIGNhY2hlIG5vdCBpbnRpYWxpemVkLCBkbyBpdCBub3c6CisgICAgICAg
IEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc2hhZGVy
TGliID0gY3JlYXRlTXNsWGZiTGlicmFyeShjb250ZXh0TXRsLCBwcm9ncmFtTXRsLT5nZXRYZmJN
c2xTb3VyY2UoKSk7CisgICAgICAgICAgICAvLyBOb24gc3BlY2lhbGl6ZWQgY29uc3RhbnRzIHBy
b3ZpZGVkLCB1c2UgZGVmYXVsdCBjcmVhdGlvbiBmdW5jdGlvbi4KKyAgICAgICAgICAgIEVuc3Vy
ZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dE10bCwgU0hB
REVSX0VOVFJZX05BTUUsIHNoYWRlckxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFJlbmRlclBpcGVsaW5lRGVzYyB4ZmJQaXBlbGluZURlc2MgPQorICAgICAgICBHZXRU
cmFuc2Zvcm1GZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVyLCBwaXBlbGluZURl
c2MpOworCisgICAgcmV0dXJuIGNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dE10
bCwgeGZiUGlwZWxpbmVEZXNjKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIG10bAogfSAgLy8gbmFt
ZXNwYWNlIHJ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaAppbmRleCBmMjIw
NjUwOTMzODZhMGI0OWVjOWE5MGQzMDQxOGQyZjFlMjViYzRjLi4yZTMzMzRkZmUyNTJiYmYxMDlk
MzFiZWVkNjg2YjU5M2Q2OTJjYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3Vy
Y2VzLmgKQEAgLTYzLDcgKzYzLDYgQEAgY2xhc3MgUmVzb3VyY2UgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKICAgICBib29sIGlzQ1BVUmVhZE1lbU5lZWRTeW5jKCkgY29uc3QgeyByZXR1cm4gbVVzYWdl
UmVmLT5jcHVSZWFkTWVtTmVlZFN5bmM7IH0KICAgICB2b2lkIHJlc2V0Q1BVUmVhZE1lbU5lZWRT
eW5jKCkgeyBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1OZWVkU3luYyA9IGZhbHNlOyB9CiAKLSAgICAv
LyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWZ1bCBmb3IgQnVmZmVyTXRsIHRvIGtub3cgd2hldGhl
ciBpdCBzaG91bGQgdXBkYXRlIHRoZSBzaGFkb3cgY29weQogICAgIGJvb2wgaXNDUFVSZWFkTWVt
RGlydHkoKSBjb25zdCB7IHJldHVybiBtVXNhZ2VSZWYtPmNwdVJlYWRNZW1EaXJ0eTsgfQogICAg
IHZvaWQgcmVzZXRDUFVSZWFkTWVtRGlydHkoKSB7IG1Vc2FnZVJlZi0+Y3B1UmVhZE1lbURpcnR5
ID0gZmFsc2U7IH0KIApAQCAtODEsNyArODAsNyBAQCBjbGFzcyBSZXNvdXJjZSA6IGFuZ2xlOjpO
b25Db3B5YWJsZQogICAgICAgICB1aW50NjRfdCBjbWRCdWZmZXJRdWV1ZVNlcmlhbCA9IDA7CiAK
ICAgICAgICAgLy8gVGhpcyBmbGFnIG1lYW5zIHRoZSByZXNvdXJjZSB3YXMgaXNzdWVkIHRvIGJl
IG1vZGlmaWVkIGJ5IEdQVSwgaWYgQ1BVIHdhbnRzIHRvIHJlYWQKLSAgICAgICAgLy8gaXRzIGNv
bnRlbnQsIGV4cGxpY2l0IHN5bmNocm9uaXphdGlvbiBjYWxsIG11c3QgYmUgaW52b2tlZC4KKyAg
ICAgICAgLy8gaXRzIGNvbnRlbnQsIGV4cGxpY2l0IHN5bmNob3JuaXphdGlvbiBjYWxsIG11c3Qg
YmUgaW52b2tlZC4KICAgICAgICAgYm9vbCBjcHVSZWFkTWVtTmVlZFN5bmMgPSBmYWxzZTsKIAog
ICAgICAgICAvLyBUaGlzIGZsYWcgaXMgdXNlZnVsIGZvciBCdWZmZXJNdGwgdG8ga25vdyB3aGV0
aGVyIGl0IHNob3VsZCB1cGRhdGUgdGhlIHNoYWRvdyBjb3B5CkBAIC0xMTAsNiArMTA5LDEzIEBA
IGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CiAKKyAgICAv
LyBPbiBtYWNPUywgbWVtb3J5IHdpbGwgc3RpbGwgYmUgYWxsb2NhdGVkIGZvciB0aGlzIHRleHR1
cmUuCisgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZU1lbW9yeUxlc3MyRFRleHR1cmUoQ29u
dGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVJlZiAq
cmVmT3V0KTsKKwogICAgIHN0YXRpYyBhbmdsZTo6UmVzdWx0IE1ha2VDdWJlVGV4dHVyZShDb250
ZXh0TXRsICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGb3JtYXQgJmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3Qgc2l6ZSwKQEAgLTE0NywxMCArMTUzLDIxIEBAIGNsYXNzIFRleHR1
cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CiAKKyAgICBzdGF0aWMgYW5nbGU6
OlJlc3VsdCBNYWtlSU9TdXJmYWNlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmZm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJT1N1cmZhY2VSZWYgcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHBsYW5lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisKICAgICBzdGF0aWMg
VGV4dHVyZVJlZiBNYWtlRnJvbU1ldGFsKGlkPE1UTFRleHR1cmU+IG1ldGFsVGV4dHVyZSk7CiAK
ICAgICAvLyBBbGxvdyBDUFUgdG8gcmVhZCAmIHdyaXRlIGRhdGEgZGlyZWN0bHkgdG8gdGhpcyB0
ZXh0dXJlPwogICAgIGJvb2wgaXNDUFVBY2Nlc3NpYmxlKCkgY29uc3Q7CisgICAgLy8gQWxsb3cg
c2hhZGVycyB0byByZWFkL3NhbXBsZSB0aGlzIHRleHR1cmU/CisgICAgLy8gVGV4dHVyZSBjcmVh
dGVkIHdpdGggcmVuZGVyVGFyZ2V0T25seSBmbGFnIHdvbid0IGJlIHJlYWRhYmxlCisgICAgYm9v
bCBpc1NoYWRlclJlYWRhYmxlKCkgY29uc3Q7CiAKICAgICBib29sIHN1cHBvcnRGb3JtYXRWaWV3
KCkgY29uc3Q7CiAKQEAgLTIxOCwxNiArMjM1LDI5IEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBw
dWJsaWMgUmVzb3VyY2UsCiAgICAgTVRMQ29sb3JXcml0ZU1hc2sgZ2V0Q29sb3JXcml0YWJsZU1h
c2soKSBjb25zdCB7IHJldHVybiAqbUNvbG9yV3JpdGFibGVNYXNrOyB9CiAgICAgdm9pZCBzZXRD
b2xvcldyaXRhYmxlTWFzayhNVExDb2xvcldyaXRlTWFzayBtYXNrKSB7ICptQ29sb3JXcml0YWJs
ZU1hc2sgPSBtYXNrOyB9CiAKLSAgICAvLyBHZXQgbGluZWFyIGNvbG9yIHNwYWNlIHZpZXcuIE9u
bHkgdXNhYmxlIGZvciBzUkdCIHRleHR1cmVzLgotICAgIFRleHR1cmVSZWYgZ2V0TGluZWFyQ29s
b3JWaWV3KCk7CisgICAgLy8gR2V0IHJlYWRpbmcgY29weS4gVXNlZCBmb3IgcmVhZGluZyBub24t
cmVhZGFibGUgdGV4dHVyZSBvciByZWFkaW5nIHN0ZW5jaWwgdmFsdWUgZnJvbQorICAgIC8vIHBh
Y2tlZCBkZXB0aCAmIHN0ZW5jaWwgdGV4dHVyZS4KKyAgICAvLyBOT1RFOiB0aGlzIG9ubHkgY29w
aWVzIDEgZGVwdGggc2xpY2Ugb2YgdGhlIDNEIHRleHR1cmUuCisgICAgLy8gVGhlIHRleGVscyB3
aWxsIGJlIGNvcGllZCB0byByZWdpb24oMCwgMCwgMCwgYXJlYVRvQ29weS5zaXplKSBvZiB0aGUg
cmV0dXJuZWQgdGV4dHVyZS4KKyAgICAvLyBUaGUgcmV0dXJuZWQgcG9pbnRlciB3aWxsIGJlIHJl
dGFpbmVkIGJ5IHRoZSBvcmlnaW5hbCB0ZXh0dXJlIG9iamVjdC4KKyAgICAvLyBDYWxsaW5nIGdl
dFJlYWRhYmxlQ29weSgpIHdpbGwgb3ZlcndyaXRlIHByZXZpb3VzbHkgcmV0dXJuZWQgdGV4dHVy
ZS4KKyAgICBUZXh0dXJlUmVmIGdldFJlYWRhYmxlQ29weShDb250ZXh0TXRsICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpl
bmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGxl
dmVsVG9Db3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90
IHNsaWNlVG9Db3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1UTFJl
Z2lvbiAmYXJlYVRvQ29weSk7CisKKyAgICB2b2lkIHJlbGVhc2VSZWFkYWJsZUNvcHkoKTsKIAog
ICAgIC8vIEdldCBzdGVuY2lsIHZpZXcKICAgICBUZXh0dXJlUmVmIGdldFN0ZW5jaWxWaWV3KCk7
CisgICAgLy9HZXQgbGluZWFyIGNvbG9yCisgICAgVGV4dHVyZVJlZiBnZXRMaW5lYXJDb2xvclZp
ZXcoKTsKIAogICAgIC8vIENoYW5nZSB0aGUgd3JhcHBlZCBtZXRhbCBvYmplY3QuIFNwZWNpYWwg
Y2FzZSBmb3Igc3dhcGNoYWluIGltYWdlCiAgICAgdm9pZCBzZXQoaWQ8TVRMVGV4dHVyZT4gbWV0
YWxUZXh0dXJlKTsKIAotICAgIC8vIHN5bmMgY29udGVudCBiZXR3ZWVuIENQVSBhbmQgR1BVCisg
ICAgLy8gRXhwbGljaXRseSBzeW5jIGNvbnRlbnQgYmV0d2VlbiBDUFUgYW5kIEdQVQogICAgIHZv
aWQgc3luY0NvbnRlbnQoQ29udGV4dE10bCAqY29udGV4dCwgbXRsOjpCbGl0Q29tbWFuZEVuY29k
ZXIgKmVuY29kZXIpOwogCiAgIHByaXZhdGU6CkBAIC0yNDEsMTIgKzI3MSw0MSBAQCBjbGFzcyBU
ZXh0dXJlIGZpbmFsIDogcHVibGljIFJlc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CiAKKyAgICBzdGF0aWMgYW5nbGU6
OlJlc3VsdCBNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWVtb3J5TGVzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQp
OworCisgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQg
Jm10bEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExUZXh0
dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJT1N1cmZhY2VSZWYgc3VyZmFjZVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOworCiAgICAgVGV4dHVyZShpZDxNVExUZXh0
dXJlPiBtZXRhbFRleHR1cmUpOwogICAgIFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAg
ICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAogICAgICAgICAgICAgdWludDMy
X3QgbWlwcywKICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKICAgICAgICAgICAg
IGJvb2wgYWxsb3dGb3JtYXRWaWV3KTsKKyAgICBUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQs
CisgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAgIHVp
bnQzMl90IG1pcHMsCisgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisgICAgICAg
ICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKyAgICAgICAgICAgIGJvb2wgbWVtb3J5TGVzcyk7
CisKKyAgICBUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICBNVExUZXh0
dXJlRGVzY3JpcHRvciAqZGVzYywKKyAgICAgICAgICAgIElPU3VyZmFjZVJlZiBpb3N1cmZhY2Us
CisgICAgICAgICAgICBOU1VJbnRlZ2VyIHBsYW5lLAorICAgICAgICAgICAgYm9vbCByZW5kZXJU
YXJnZXRPbmx5KTsKIAogICAgIC8vIENyZWF0ZSBhIHRleHR1cmUgdmlldwogICAgIFRleHR1cmUo
VGV4dHVyZSAqb3JpZ2luYWwsIE1UTFBpeGVsRm9ybWF0IGZvcm1hdCk7CkBAIC0yNjQsOSArMzIz
LDE0IEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCiAgICAgVGV4dHVy
ZVJlZiBtTGluZWFyQ29sb3JWaWV3OwogCiAgICAgVGV4dHVyZVJlZiBtU3RlbmNpbFZpZXc7Cisg
ICAgLy9SZWFkYWJsZSBjb3B5IG9mIHRleHR1cmUKKyAgICBUZXh0dXJlUmVmIG1SZWFkQ29weTsK
KwogfTsKIAotY2xhc3MgQnVmZmVyIGZpbmFsIDogcHVibGljIFJlc291cmNlLCBwdWJsaWMgV3Jh
cHBlZE9iamVjdDxpZDxNVExCdWZmZXI+PgorY2xhc3MgQnVmZmVyIGZpbmFsIDogcHVibGljIFJl
c291cmNlLAorICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRM
QnVmZmVyPj4sCisgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgc3RkOjplbmFibGVfc2hhcmVk
X2Zyb21fdGhpczxCdWZmZXI+CiB7CiAgIHB1YmxpYzoKICAgICBzdGF0aWMgYW5nbGU6OlJlc3Vs
dCBNYWtlQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5t
bSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfcmVzb3VyY2VzLm1tCmluZGV4IDliZWU0NzVmODY2ZDY0YmIyNWM4NWIzNmVmMTc4ZWU3Y2Zh
ZWRiMTguLmQwNDc1YWU3YTM5ZjRlYTIzZjExMTk2Y2E3MzBkZjhiY2I1ODU0ZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfcmVzb3VyY2VzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLm1tCkBAIC0zNCwyMCArMzQsMjIgQEAgaW5s
aW5lIE5TVUludGVnZXIgR2V0TWlwU2l6ZShOU1VJbnRlZ2VyIGJhc2VTaXplLCBjb25zdCBNaXBt
YXBOYXRpdmVMZXZlbCBsZXZlbCkKIC8vIEFzeW5jaHJvbm91c2x5IHN5bmNocm9uaXplIHRoZSBj
b250ZW50IG9mIGEgcmVzb3VyY2UgYmV0d2VlbiBHUFUgbWVtb3J5IGFuZCBpdHMgQ1BVIGNhY2hl
LgogLy8gTk9URTogVGhpcyBvcGVyYXRpb24gZG9lc24ndCBmaW5pc2ggaW1tZWRpYXRlbHkgdXBv
biBmdW5jdGlvbidzIHJldHVybi4KIHRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBJbnZva2VDUFVN
ZW1TeW5jKENvbnRleHRNdGwgKmNvbnRleHQsIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpibGl0
RW5jb2RlciwgVCAqcmVzb3VyY2UpCit2b2lkIFN5bmNDb250ZW50KENvbnRleHRNdGwgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpibGl0RW5jb2Rl
ciwKKyAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzaGFyZWRfcHRyPFQ+ICZyZXNvdXJjZSkK
IHsKICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAogICAgIGlmIChi
bGl0RW5jb2RlcikKICAgICB7CiAgICAgICAgIGJsaXRFbmNvZGVyLT5zeW5jaHJvbml6ZVJlc291
cmNlKHJlc291cmNlKTsKKwogICAgICAgICByZXNvdXJjZS0+cmVzZXRDUFVSZWFkTWVtTmVlZFN5
bmMoKTsKICAgICB9CiAjZW5kaWYKIH0KLS8vIEVuc3VyZSB0aGF0IGEgcmVzb3VyY2UncyBDUFUg
Y2FjaGUgd2lsbCBiZSBzeW5jaHJvbml6ZWQgYWZ0ZXIgR1BVIGZpbmlzaGVzIGl0cyBtb2RpZmlj
YXRpb25zIG9uCi0vLyB0aGUgcmVzb3VyY2UuCisKIHRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBF
bnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAqcmVzb3VyY2Up
Cit2b2lkIEVuc3VyZUNvbnRlbnRTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgY29uc3Qgc3Rk
OjpzaGFyZWRfcHRyPFQ+ICZyZXNvdXJjZSkKIHsKICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdF
VF9PU19NQUNDQVRBTFlTVAogICAgIC8vIE1ha2Ugc3VyZSBHUFUgJiBDUFUgY29udGVudHMgYXJl
IHN5bmNocm9uaXplZC4KQEAgLTU2LDcgKzU4LDcgQEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVT
eW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAqcmVzb3VyY2UpCiAgICAgaWYgKHJlc291cmNl
LT5nZXQoKS5zdG9yYWdlTW9kZSA9PSBNVExTdG9yYWdlTW9kZU1hbmFnZWQgJiYgcmVzb3VyY2Ut
PmlzQ1BVUmVhZE1lbU5lZWRTeW5jKCkpCiAgICAgewogICAgICAgICBtdGw6OkJsaXRDb21tYW5k
RW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250ZXh0LT5nZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsK
LSAgICAgICAgSW52b2tlQ1BVTWVtU3luYyhjb250ZXh0LCBibGl0RW5jb2RlciwgcmVzb3VyY2Up
OworICAgICAgICBTeW5jQ29udGVudChjb250ZXh0LCBibGl0RW5jb2RlciwgcmVzb3VyY2UpOwog
ICAgIH0KICNlbmRpZgogfQpAQCAtMTIyLDYgKzEyNCwyNCBAQCBhbmdsZTo6UmVzdWx0IFRleHR1
cmU6Ok1ha2UyRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICB9ICAvLyBBTkdMRV9N
VExfT0JKQ19TQ09QRQogfQogCisvKiogc3RhdGljICovCithbmdsZTo6UmVzdWx0IFRleHR1cmU6
Ok1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCit7CisgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUK
KyAgICB7CisgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjID0KKyAgICAgICAgICAg
IFtNVExUZXh0dXJlRGVzY3JpcHRvciB0ZXh0dXJlMkREZXNjcmlwdG9yV2l0aFBpeGVsRm9ybWF0
OmZvcm1hdC5tZXRhbEZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6d2lkdGgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OmhlaWdo
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtaXBtYXBwZWQ6Tk9dOworCisgICAgICAgIHJldHVybiBNYWtlVGV4dHVyZShjb250ZXh0
LCBmb3JtYXQsIGRlc2MsIDEsIHRydWUsIGZhbHNlLCB0cnVlLCByZWZPdXQpOworICAgIH0gIC8v
IEFOR0xFX01UTF9PQkpDX1NDT1BFCit9CiAvKiogc3RhdGljICovCiBhbmdsZTo6UmVzdWx0IFRl
eHR1cmU6Ok1ha2VDdWJlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3JtYXQsCkBAIC0yMjMs
NiArMjQzLDIzIEBAIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFrZTNEVGV4dHVyZShDb250ZXh0
TXRsICpjb250ZXh0LAogICAgICAgICByZXR1cm4gTWFrZVRleHR1cmUoY29udGV4dCwgZm9ybWF0
LCBkZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZpZXcsIHJlZk91dCk7
CiAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKIH0KK2FuZ2xlOjpSZXN1bHQgVGV4dHVy
ZTo6TWFrZUlPU3VyZmFjZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPU3Vy
ZmFjZVJlZiByZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IHBsYW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCit7CisgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRl
c2MgPSBbW01UTFRleHR1cmVEZXNjcmlwdG9yIG5ld10gQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsK
KyAgICBkZXNjLnRleHR1cmVUeXBlICAgICAgICAgICA9IE1UTFRleHR1cmVUeXBlMkQ7CisgICAg
ZGVzYy5waXhlbEZvcm1hdCAgICAgICAgICAgPSBmb3JtYXQubWV0YWxGb3JtYXQ7CisgICAgZGVz
Yy53aWR0aCAgICAgICAgICAgICAgICAgPSB3aWR0aDsKKyAgICBkZXNjLmhlaWdodCAgICAgICAg
ICAgICAgICA9IGhlaWdodDsKKyAgICBkZXNjLm1pcG1hcExldmVsQ291bnQgICAgICA9IDE7Cisg
ICAgZGVzYy5zYW1wbGVDb3VudCAgICAgICAgICAgPSAxOworICAgIHJldHVybiBNYWtlVGV4dHVy
ZShjb250ZXh0LCBmb3JtYXQsIGRlc2MsIHJlZiwgcGxhbmUsIE5PLCByZWZPdXQpOworfQogCiAv
Kiogc3RhdGljICovCiBhbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0dXJlKENvbnRleHRN
dGwgKmNvbnRleHQsCkBAIC0yMzMsNyArMjcwLDQyIEBAIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6
TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKIHsKLSAgICByZWZPdXQtPnJlc2V0KG5l
dyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93Rm9y
bWF0VmlldykpOworICAgIHJldHVybiBNYWtlVGV4dHVyZShjb250ZXh0LCBtdGxGb3JtYXQsIGRl
c2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93Rm9ybWF0VmlldywgZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgIHJlZk91dCk7Cit9CisKK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6
TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZtdGxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaXBzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIG1lbW9yeUxlc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKK3sKKyAgICByZWZPdXQtPnJlc2V0
KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93
Rm9ybWF0VmlldywgbWVtb3J5TGVzcykpOworCisgICAgaWYgKCFyZWZPdXQgfHwgIXJlZk91dC0+
Z2V0KCkpCisgICAgeworICAgICAgICBBTkdMRV9NVExfQ0hFQ0soY29udGV4dCwgZmFsc2UsIEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KKyAgICBpZiAoIW10bEZvcm1hdC5oYXNEZXB0aEFuZFN0
ZW5jaWxCaXRzKCkpCisgICAgeworICAgICAgICByZWZPdXQtPmdldCgpLT5zZXRDb2xvcldyaXRh
YmxlTWFzayhHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKG10bEZvcm1hdCkpOworICAgIH0KKwor
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKworYW5nbGU6OlJlc3VsdCBU
ZXh0dXJlOjpNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQgJm10bEZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlUmVmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKK3sK
KyAgICByZWZPdXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIHN1cmZhY2VSZWYs
IHNsaWNlLCByZW5kZXJUYXJnZXRPbmx5KSk7CiAKICAgICBpZiAoISgqcmVmT3V0KSB8fCAhKCpy
ZWZPdXQpLT5nZXQoKSkKICAgICB7CkBAIC0yNjQsNiArMzM2LDE1IEBAIFRleHR1cmU6OlRleHR1
cmUoQ29udGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWlwcywK
ICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAogICAgICAgICAgICAgICAg
ICBib29sIGFsbG93Rm9ybWF0VmlldykKKyAgICA6IFRleHR1cmUoY29udGV4dCwgZGVzYywgbWlw
cywgcmVuZGVyVGFyZ2V0T25seSwgYWxsb3dGb3JtYXRWaWV3LCBmYWxzZSkKK3t9CisKK1RleHR1
cmU6OlRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgTVRMVGV4
dHVyZURlc2NyaXB0b3IgKmRlc2MsCisgICAgICAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisg
ICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFyZ2V0T25seSwKKyAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAgICAgICAgIGJvb2wgbWVtb3J5TGVzcykK
ICAgICA6IG1Db2xvcldyaXRhYmxlTWFzayhzdGQ6Om1ha2Vfc2hhcmVkPE1UTENvbG9yV3JpdGVN
YXNrPihNVExDb2xvcldyaXRlTWFza0FsbCkpCiB7CiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUK
QEAgLTI4Myw4ICszNjQsMTYgQEAgVGV4dHVyZTo6VGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0
LAogICAgICAgICAgICAgZGVzYy51c2FnZSB8PSBNVExUZXh0dXJlVXNhZ2VSZW5kZXJUYXJnZXQ7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY29udGV4dC0+Z2V0TmF0aXZlRm9ybWF0Q2Fwcyhk
ZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJlbmRlcmFibGUgfHwKLSAgICAgICAgICAgIGRlc2MudGV4
dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUyRE11bHRpc2FtcGxlKQorICAgICAgICBpZiAobWVt
b3J5TGVzcykKKyAgICAgICAgeworI2lmIChUQVJHRVRfT1NfSU9TIHx8IFRBUkdFVF9PU19UVikg
JiYgIVRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICAgICAgZGVzYy5yZXNvdXJjZU9wdGlv
bnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlTWVtb3J5bGVzczsKKyNlbHNlCisgICAgICAgICAg
ICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlOwor
I2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+Z2V0TmF0aXZlRm9y
bWF0Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJlbmRlcmFibGUgfHwKKyAgICAgICAgICAg
ICAgICAgZGVzYy50ZXh0dXJlVHlwZSA9PSBNVExUZXh0dXJlVHlwZTJETXVsdGlzYW1wbGUpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIC8vIE1ldGFsIGRvZXNuJ3Qgc3VwcG9ydCBob3N0IGFjY2Vz
cyB0byBkZXB0aCBzdGVuY2lsIHRleHR1cmUncyBkYXRhCiAgICAgICAgICAgICBkZXNjLnJlc291
cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlOwpAQCAtMzEwLDYgKzM5
OSw0NiBAQCBUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCiAgICAgfQogfQog
CitUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
IE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAgICAgICAgICAgICAgICBJT1N1cmZhY2VS
ZWYgaW9zdXJmYWNlLAorICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHBsYW5lLAorICAgICAg
ICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHkpCisgICAgOiBtQ29sb3JXcml0YWJsZU1h
c2soc3RkOjptYWtlX3NoYXJlZDxNVExDb2xvcldyaXRlTWFzaz4oTVRMQ29sb3JXcml0ZU1hc2tB
bGwpKQoreworICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgeworICAgICAgICBpZDxNVExE
ZXZpY2U+IG1ldGFsRGV2aWNlID0gY29udGV4dC0+Z2V0TWV0YWxEZXZpY2UoKTsKKworICAgICAg
ICAvLyBFdmVyeSB0ZXh0dXJlIHdpbGwgc3VwcG9ydCBiZWluZyByZW5kZXJlZCBmb3Igbm93Cisg
ICAgICAgIGRlc2MudXNhZ2UgPSBNVExUZXh0dXJlVXNhZ2VQaXhlbEZvcm1hdFZpZXc7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQtPmdldE5hdGl2ZUZvcm1hdENhcHMoZGVzYy5waXhlbEZvcm1hdCku
aXNSZW5kZXJhYmxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc2MudXNhZ2UgfD0gTVRM
VGV4dHVyZVVzYWdlUmVuZGVyVGFyZ2V0OworICAgICAgICB9CisKKyNpZiAoVEFSR0VUX09TX0lP
UyB8fCBUQVJHRVRfT1NfVFYpICYmICFUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgICAgZGVz
Yy5yZXNvdXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlU2hhcmVkOworI2Vsc2UK
KyAgICAgICAgZGVzYy5yZXNvdXJjZU9wdGlvbnMgPSBNVExSZXNvdXJjZVN0b3JhZ2VNb2RlTWFu
YWdlZDsKKyNlbmRpZgorCisgICAgICAgIGlmICghcmVuZGVyVGFyZ2V0T25seSkKKyAgICAgICAg
eworICAgICAgICAgICAgZGVzYy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VT
aGFkZXJSZWFkOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldE5hdGl2ZUZvcm1hdENhcHMo
ZGVzYy5waXhlbEZvcm1hdCkud3JpdGFibGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZGVzYy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VTaGFkZXJXcml0ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZDxNVExUZXh0dXJlPiBpb3N1cmZU
ZXh0dXJlID0gW21ldGFsRGV2aWNlIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRvcjpkZXNjCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW9zdXJmYWNlOmlvc3VyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZTpwbGFuZV07Cisg
ICAgICAgIHNldChbaW9zdXJmVGV4dHVyZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdKTsKKyAgICB9
Cit9CisKIFRleHR1cmU6OlRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIE1UTFBpeGVsRm9ybWF0
IGZvcm1hdCkKICAgICA6IFJlc291cmNlKG9yaWdpbmFsKSwKICAgICAgIG1Db2xvcldyaXRhYmxl
TWFzayhvcmlnaW5hbC0+bUNvbG9yV3JpdGFibGVNYXNrKSAgLy8gU2hhcmUgY29sb3Igd3JpdGUg
bWFzayBwcm9wZXJ0eQpAQCAtMzQxLDcgKzQ3MCw3IEBAIFRleHR1cmU6OlRleHR1cmUoVGV4dHVy
ZSAqb3JpZ2luYWwsIGNvbnN0IFRleHR1cmVTd2l6emxlQ2hhbm5lbHMgJnN3aXp6bGUpCiAgICAg
OiBSZXNvdXJjZShvcmlnaW5hbCksCiAgICAgICBtQ29sb3JXcml0YWJsZU1hc2sob3JpZ2luYWwt
Pm1Db2xvcldyaXRhYmxlTWFzaykgIC8vIFNoYXJlIGNvbG9yIHdyaXRlIG1hc2sgcHJvcGVydHkK
IHsKLSNpZiBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUKKyNpZiBkZWZpbmVkKF9fSVBIT05F
XzEzXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTUpCiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUK
ICAgICB7CiAgICAgICAgIGF1dG8gdmlldyA9IFtvcmlnaW5hbC0+Z2V0KCkKQEAgLTM2MCwxMiAr
NDg5LDEyIEBAIFRleHR1cmU6OlRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIGNvbnN0IFRleHR1
cmVTd2l6emxlQ2hhbm5lbHMgJnN3aXp6bGUpCiAKIHZvaWQgVGV4dHVyZTo6c3luY0NvbnRlbnQo
Q29udGV4dE10bCAqY29udGV4dCwgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVy
KQogewotICAgIEludm9rZUNQVU1lbVN5bmMoY29udGV4dCwgYmxpdEVuY29kZXIsIHRoaXMpOwor
ICAgIFN5bmNDb250ZW50KGNvbnRleHQsIGJsaXRFbmNvZGVyLCBzaGFyZWRfZnJvbV90aGlzKCkp
OwogfQogCiB2b2lkIFRleHR1cmU6OnN5bmNDb250ZW50SWZOZWVkZWQoQ29udGV4dE10bCAqY29u
dGV4dCkKIHsKLSAgICBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoY29udGV4dCwgdGhpcyk7Cisg
ICAgRW5zdXJlQ29udGVudFN5bmNlZChjb250ZXh0LCBzaGFyZWRfZnJvbV90aGlzKCkpOwogfQog
CiBib29sIFRleHR1cmU6OmlzQ1BVQWNjZXNzaWJsZSgpIGNvbnN0CkBAIC0zNzksNiArNTA4LDEx
IEBAIGJvb2wgVGV4dHVyZTo6aXNDUFVBY2Nlc3NpYmxlKCkgY29uc3QKICAgICByZXR1cm4gZ2V0
KCkuc3RvcmFnZU1vZGUgPT0gTVRMU3RvcmFnZU1vZGVTaGFyZWQ7CiB9CiAKK2Jvb2wgVGV4dHVy
ZTo6aXNTaGFkZXJSZWFkYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldCgpLnVzYWdlICYg
TVRMVGV4dHVyZVVzYWdlU2hhZGVyUmVhZDsKK30KKwogYm9vbCBUZXh0dXJlOjpzdXBwb3J0Rm9y
bWF0VmlldygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldCgpLnVzYWdlICYgTVRMVGV4dHVyZVVz
YWdlUGl4ZWxGb3JtYXRWaWV3OwpAQCAtNTE0LDEyICs2NDgsMTQgQEAgVGV4dHVyZVJlZiBUZXh0
dXJlOjpjcmVhdGVWaWV3V2l0aERpZmZlcmVudEZvcm1hdChNVExQaXhlbEZvcm1hdCBmb3JtYXQp
CiAgICAgQVNTRVJUKHN1cHBvcnRGb3JtYXRWaWV3KCkpOwogICAgIHJldHVybiBUZXh0dXJlUmVm
KG5ldyBUZXh0dXJlKHRoaXMsIGZvcm1hdCkpOwogfQorCiBUZXh0dXJlUmVmIFRleHR1cmU6OmNy
ZWF0ZVZpZXdXaXRoQ29tcGF0aWJsZUZvcm1hdChNVExQaXhlbEZvcm1hdCBmb3JtYXQpCiB7Ci0g
ICAgLy8gTm8gbmVlZCBmb3IgQVNTRVJUKHN1cHBvcnRGb3JtYXRWaWV3KCkpOwogICAgIHJldHVy
biBUZXh0dXJlUmVmKG5ldyBUZXh0dXJlKHRoaXMsIGZvcm1hdCkpOwogfQogCisKKwogVGV4dHVy
ZVJlZiBUZXh0dXJlOjpjcmVhdGVTd2l6emxlVmlldyhjb25zdCBUZXh0dXJlU3dpenpsZUNoYW5u
ZWxzICZzd2l6emxlKQogewogI2lmIEFOR0xFX01UTF9TV0laWkxFX0FWQUlMQUJMRQpAQCAtNjUy
LDYgKzc4OCw0OCBAQCBUZXh0dXJlUmVmIFRleHR1cmU6OmdldExpbmVhckNvbG9yVmlldygpCiAg
ICAgcmV0dXJuIG1MaW5lYXJDb2xvclZpZXc7CiB9CiAKK1RleHR1cmVSZWYgVGV4dHVyZTo6Z2V0
UmVhZGFibGVDb3B5KENvbnRleHRNdGwgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90IGxldmVsVG9Db3B5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3Qgc2xpY2VU
b0NvcHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNVExSZWdp
b24gJmFyZWFUb0NvcHkpCit7CisgICAgZ2w6OkV4dGVudHMgZmlyc3RMZXZlbFNpemUgPSBzaXpl
KGtaZXJvTmF0aXZlTWlwTGV2ZWwpOworICAgIGlmICghbVJlYWRDb3B5IHx8IG1SZWFkQ29weS0+
Z2V0KCkud2lkdGggPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGZpcnN0TGV2ZWxTaXplLndpZHRoKSB8
fAorICAgICAgICBtUmVhZENvcHktPmdldCgpLmhlaWdodCA8IHN0YXRpY19jYXN0PHNpemVfdD4o
Zmlyc3RMZXZlbFNpemUuaGVpZ2h0KSkKKyAgICB7CisgICAgICAgIC8vIENyZWF0ZSBhIHRleHR1
cmUgdGhhdCBiaWcgZW5vdWdoIHRvIHN0b3JlIHRoZSBmaXJzdCBsZXZlbCBkYXRhIGFuZCBhbnkg
c21hbGxlciBsZXZlbAorICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvIGRlc2MgICAgICAgICAgICA9IFtbTVRMVGV4dHVyZURlc2NyaXB0b3Ig
bmV3XSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICAgICAgICAgZGVzYy50ZXh0dXJlVHlw
ZSAgICAgPSBnZXQoKS50ZXh0dXJlVHlwZTsKKyAgICAgICAgICAgIGRlc2MucGl4ZWxGb3JtYXQg
ICAgID0gZ2V0KCkucGl4ZWxGb3JtYXQ7CisgICAgICAgICAgICBkZXNjLndpZHRoICAgICAgICAg
ICA9IGZpcnN0TGV2ZWxTaXplLndpZHRoOworICAgICAgICAgICAgZGVzYy5oZWlnaHQgICAgICAg
ICAgPSBmaXJzdExldmVsU2l6ZS5oZWlnaHQ7CisgICAgICAgICAgICBkZXNjLmRlcHRoICAgICAg
ICAgICA9IDE7CisgICAgICAgICAgICBkZXNjLmFycmF5TGVuZ3RoICAgICA9IDE7CisgICAgICAg
ICAgICBkZXNjLnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRl
OworICAgICAgICAgICAgZGVzYy5zYW1wbGVDb3VudCAgICAgPSBnZXQoKS5zYW1wbGVDb3VudDsK
KyAgICAgICAgICAgIGRlc2MudXNhZ2UgICAgICAgICAgID0gTVRMVGV4dHVyZVVzYWdlU2hhZGVy
UmVhZCB8IE1UTFRleHR1cmVVc2FnZVBpeGVsRm9ybWF0VmlldzsKKworICAgICAgICAgICAgaWQ8
TVRMVGV4dHVyZT4gbXRsVGV4dHVyZSA9IFtjb250ZXh0LT5nZXRNZXRhbERldmljZSgpIG5ld1Rl
eHR1cmVXaXRoRGVzY3JpcHRvcjpkZXNjXTsKKyAgICAgICAgICAgIG1SZWFkQ29weS5yZXNldChu
ZXcgVGV4dHVyZShtdGxUZXh0dXJlKSk7CisgICAgICAgIH0gIC8vIEFOR0xFX01UTF9PQkpDX1ND
T1BFCisgICAgfQorCisgICAgQVNTRVJUKGVuY29kZXIpOworCisgICAgZW5jb2Rlci0+Y29weVRl
eHR1cmUoc2hhcmVkX2Zyb21fdGhpcygpLCBzbGljZVRvQ29weSwgbGV2ZWxUb0NvcHksIG1SZWFk
Q29weSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAxKTsKKworICAgIHJldHVy
biBtUmVhZENvcHk7Cit9CisKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVJlYWRhYmxlQ29weSgpCit7
CisgICAgbVJlYWRDb3B5ID0gbnVsbHB0cjsKK30KKwogVGV4dHVyZVJlZiBUZXh0dXJlOjpnZXRT
dGVuY2lsVmlldygpCiB7CiAgICAgaWYgKG1TdGVuY2lsVmlldykKQEAgLTc5OSw3ICs5NzcsNyBA
QCBhbmdsZTo6UmVzdWx0IEJ1ZmZlcjo6cmVzZXRXaXRoUmVzT3B0KENvbnRleHRNdGwgKmNvbnRl
eHQsCiAKIHZvaWQgQnVmZmVyOjpzeW5jQ29udGVudChDb250ZXh0TXRsICpjb250ZXh0LCBtdGw6
OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIpCiB7Ci0gICAgSW52b2tlQ1BVTWVtU3lu
Yyhjb250ZXh0LCBibGl0RW5jb2RlciwgdGhpcyk7CisgICAgU3luY0NvbnRlbnQoY29udGV4dCwg
YmxpdEVuY29kZXIsIHNoYXJlZF9mcm9tX3RoaXMoKSk7CiB9CiAKIGNvbnN0IHVpbnQ4X3QgKkJ1
ZmZlcjo6bWFwUmVhZE9ubHkoQ29udGV4dE10bCAqY29udGV4dCkKQEAgLTgyMCw3ICs5OTgsNyBA
QCB1aW50OF90ICpCdWZmZXI6Om1hcFdpdGhPcHQoQ29udGV4dE10bCAqY29udGV4dCwgYm9vbCBy
ZWFkb25seSwgYm9vbCBub1N5bmMpCiAgICAgewogICAgICAgICBDb21tYW5kUXVldWUgJmNtZFF1
ZXVlID0gY29udGV4dC0+Y21kUXVldWUoKTsKIAotICAgICAgICBFbnN1cmVDUFVNZW1XaWxsQmVT
eW5jZWQoY29udGV4dCwgdGhpcyk7CisgICAgICAgIEVuc3VyZUNvbnRlbnRTeW5jZWQoY29udGV4
dCwgc2hhcmVkX2Zyb21fdGhpcygpKTsKIAogICAgICAgICBpZiAodGhpcy0+aXNCZWluZ1VzZWRC
eUdQVShjb250ZXh0KSkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0
ZV9jYWNoZS5oCmluZGV4IDc2OGMzNjk3ZTg1ZTA2YjU2OGJkNWE1NzkwM2QzMzA5ZDQ4YmFkYzEu
LmU2YmY3MWQ4MjlhMzVjZWZkODgxZDFjNDMwZTFkYzUxNzI4Mjg3YjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3Rh
dGVfY2FjaGUuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLmgKQEAgLTIyLDYgKzIyLDExIEBACiAKIHN0YXRp
YyBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1UTENsZWFyQ29sb3IgJmxocywgY29uc3Qg
TVRMQ2xlYXJDb2xvciAmcmhzKTsKIAorbmFtZXNwYWNlIGFuZ2xlCit7CitzdHJ1Y3QgRmVhdHVy
ZXNNdGw7Cit9CisKIG5hbWVzcGFjZSByeAogewogY2xhc3MgQ29udGV4dE10bDsKQEAgLTIyMyw3
ICsyMjgsOCBAQCBzdHJ1Y3QgUmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjCiB9OwogCiAvLyBTb21l
IFNESyBsZXZlbHMgZG9uJ3QgZGVjbGFyZSBNVExQcmltaXRpdmVUb3BvbG9neUNsYXNzLiBOZWVk
cyB0byBkbyBjb21waWxlIHRpbWUgY2hlY2sgaGVyZToKLSNpZiAhKFRBUkdFVF9PU19PU1ggfHwg
VEFSR0VUX09TX01BQ0NBVEFMWVNUKSAmJiBBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCA8IF9fSVBI
T05FXzEyXzAKKyNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUKSAm
JiBcCisgICAgKCFkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IEFOR0xFX0lPU19ERVBMT1lfVEFS
R0VUIDwgX19JUEhPTkVfMTJfMCkKICMgICAgZGVmaW5lIEFOR0xFX01UTF9QUklNSVRJVkVfVE9Q
T0xPR1lfQ0xBU1NfQVZBSUxBQkxFIDAKIHVzaW5nIFByaW1pdGl2ZVRvcG9sb2d5Q2xhc3MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB1aW50MzJfdDsKIGNvbnN0ZXhwciBQ
cmltaXRpdmVUb3BvbG9neUNsYXNzIGtQcmltaXRpdmVUb3BvbG9neUNsYXNzVHJpYW5nbGUgPSAw
OwpAQCAtMjY3LDkgKzI3Myw3IEBAIHN0cnVjdCBhbGlnbmFzKDQpIFJlbmRlclBpcGVsaW5lRGVz
YwogICAgIFJlbmRlclBpcGVsaW5lRGVzYyAmb3BlcmF0b3I9KGNvbnN0IFJlbmRlclBpcGVsaW5l
RGVzYyAmc3JjKTsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJQaXBlbGluZURl
c2MgJnJocykgY29uc3Q7Ci0KICAgICBzaXplX3QgaGFzaCgpIGNvbnN0OwotCiAgICAgYm9vbCBy
YXN0ZXJpemF0aW9uRW5hYmxlZCgpIGNvbnN0OwogCiAgICAgVmVydGV4RGVzYyB2ZXJ0ZXhEZXNj
cmlwdG9yOwpAQCAtMjg4LDYgKzI5MiwyNyBAQCBzdHJ1Y3QgYWxpZ25hcyg0KSBSZW5kZXJQaXBl
bGluZURlc2MKICAgICBib29sIGVtdWxhdGVDb3ZlcmFnZU1hc2sgOiAxOwogfTsKIAorc3RydWN0
IFJlbmRlclBhc3NBdHRhY2htZW50VGV4dHVyZVRhcmdldERlc2MKK3sKKyAgICBUZXh0dXJlUmVm
IGdldFRleHR1cmVSZWYoKSBjb25zdCB7IHJldHVybiB0ZXh0dXJlLmxvY2soKTsgfQorICAgIFRl
eHR1cmVSZWYgZ2V0SW1wbGljaXRNU1RleHR1cmVSZWYoKSBjb25zdCB7IHJldHVybiBpbXBsaWNp
dE1TVGV4dHVyZS5sb2NrKCk7IH0KKyAgICBib29sIGhhc0ltcGxpY2l0TVNUZXh0dXJlKCkgY29u
c3QgeyByZXR1cm4gIWltcGxpY2l0TVNUZXh0dXJlLmV4cGlyZWQoKTsgfQorICAgIHVpbnQzMl90
IGdldFJlbmRlclNhbXBsZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgVGV4dHVyZVJlZiB0ZXgg
ICA9IGdldFRleHR1cmVSZWYoKTsKKyAgICAgICAgVGV4dHVyZVJlZiBtc1RleCA9IGdldEltcGxp
Y2l0TVNUZXh0dXJlUmVmKCk7CisgICAgICAgIHJldHVybiBtc1RleCA/IG1zVGV4LT5zYW1wbGVz
KCkgOiAodGV4ID8gdGV4LT5zYW1wbGVzKCkgOiAxKTsKKyAgICB9CisKKyAgICBUZXh0dXJlV2Vh
a1JlZiB0ZXh0dXJlOworICAgIC8vIEltcGxpY2l0IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3
aWxsIGJlIHJlbmRlcmVkIGludG8gYW5kIGRpc2NhcmRlZCBhdCB0aGUgZW5kIG9mCisgICAgLy8g
YSByZW5kZXIgcGFzcy4gSXRzIHJlc3VsdCB3aWxsIGJlIHJlc29sdmVkIGludG8gbm9ybWFsIHRl
eHR1cmUgYWJvdmUuCisgICAgVGV4dHVyZVdlYWtSZWYgaW1wbGljaXRNU1RleHR1cmU7CisgICAg
TWlwbWFwTmF0aXZlTGV2ZWwgbGV2ZWwgPSBrWmVyb05hdGl2ZU1pcExldmVsOworICAgIHVpbnQz
Ml90IHNsaWNlT3JEZXB0aCAgID0gMDsKKyAgICBib29sIGJsZW5kYWJsZSAgICAgICAgICA9IHRy
dWU7Cit9OworCiBzdHJ1Y3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjCiB7CiAgICAgUmVuZGVy
UGFzc0F0dGFjaG1lbnREZXNjKCk7CkBAIC0yOTcsMTggKzMyMiwzNCBAQCBzdHJ1Y3QgUmVuZGVy
UGFzc0F0dGFjaG1lbnREZXNjCiAgICAgYm9vbCBlcXVhbElnbm9yZUxvYWRTdG9yZU9wdGlvbnMo
Y29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmb3RoZXIpIGNvbnN0Owog
Ci0gICAgQU5HTEVfSU5MSU5FIGJvb2wgaGFzSW1wbGljaXRNU1RleHR1cmUoKSBjb25zdCB7IHJl
dHVybiBpbXBsaWNpdE1TVGV4dHVyZS5nZXQoKTsgfQotCi0gICAgVGV4dHVyZVJlZiB0ZXh0dXJl
OwotICAgIC8vIEltcGxpY2l0IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRl
cmVkIGludG8gYW5kIGRpc2NhcmRlZCBhdCB0aGUgZW5kIG9mCi0gICAgLy8gYSByZW5kZXIgcGFz
cy4gSXRzIHJlc3VsdCB3aWxsIGJlIHJlc29sdmVkIGludG8gbm9ybWFsIHRleHR1cmUgYWJvdmUu
Ci0gICAgVGV4dHVyZVJlZiBpbXBsaWNpdE1TVGV4dHVyZTsKLSAgICBNaXBtYXBOYXRpdmVMZXZl
bCBsZXZlbDsKLSAgICB1aW50MzJfdCBzbGljZU9yRGVwdGg7Ci0KLSAgICAvLyBUaGlzIGF0dGFj
aG1lbnQgaXMgYmxlbmRhYmxlIG9yIG5vdC4KLSAgICBib29sIGJsZW5kYWJsZTsKKyAgICBBTkdM
RV9JTkxJTkUgVGV4dHVyZVJlZiB0ZXh0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmdldFRleHR1cmVSZWYoKSA6IG51bGxwdHI7
CisgICAgfQorICAgIEFOR0xFX0lOTElORSBUZXh0dXJlUmVmIGltcGxpY2l0TVNUZXh0dXJlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQt
PmdldEltcGxpY2l0TVNUZXh0dXJlUmVmKCkgOiBudWxscHRyOworICAgIH0KKyAgICBBTkdMRV9J
TkxJTkUgYm9vbCBoYXNJbXBsaWNpdE1TVGV4dHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5oYXNJbXBsaWNpdE1TVGV4dHVyZSgp
IDogZmFsc2U7CisgICAgfQorICAgIEFOR0xFX0lOTElORSB1aW50MzJfdCByZW5kZXJTYW1wbGVz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJn
ZXQtPmdldFJlbmRlclNhbXBsZXMoKSA6IDE7CisgICAgfQorICAgIEFOR0xFX0lOTElORSBNaXBt
YXBOYXRpdmVMZXZlbCBsZXZlbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmVuZGVy
VGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5sZXZlbCA6IGtaZXJvTmF0aXZlTWlwTGV2ZWw7CisgICAg
fQorICAgIEFOR0xFX0lOTElORSB1aW50MzJfdCBzbGljZU9yRGVwdGgoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRo
IDogMDsKKyAgICB9CisgICAgQU5HTEVfSU5MSU5FIGJvb2wgYmxlbmRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5ibGVuZGFibGUgOiBmYWxzZTsgfQog
CisgICAgLy8gVGhpcyBpcyBzaGFyZWQgcG9pbnRlciB0byBhdm9pZCBjcmFzaGluZyB3aGVuIHRl
eHR1cmUgZGVsZXRlZCBhZnRlciBib3VuZCB0byBhIGZyYW1lIGJ1ZmZlci4KKyAgICBzdGQ6OnNo
YXJlZF9wdHI8UmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYz4gcmVuZGVyVGFy
Z2V0OwogICAgIE1UTExvYWRBY3Rpb24gbG9hZEFjdGlvbjsKICAgICBNVExTdG9yZUFjdGlvbiBz
dG9yZUFjdGlvbjsKICAgICBNVExTdG9yZUFjdGlvbk9wdGlvbnMgc3RvcmVBY3Rpb25PcHRpb25z
OwpAQCAtMzU0LDYgKzM5NSwxMSBAQCBzdHJ1Y3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50
RGVzYyA6IHB1YmxpYyBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MKICAgICB1aW50MzJfdCBjbGVh
clN0ZW5jaWwgPSAwOwogfTsKIAorLy8KKy8vIFRoaXMgaXMgQysrIGVxdWl2YWxlbnQgb2YgT2Jq
ZWN0aXZlLUMgTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IuCisvLyBXZSBjb3VsZCB1c2UgTVRMUmVu
ZGVyUGFzc0Rlc2NyaXB0b3IgZGlyZWN0bHksIGhvd2V2ZXIsIHVzaW5nIEMrKyBzdHJ1Y3QgaGFz
IGJlbmVmaXRzIG9mIGZhc3QKKy8vIGNvcHksIHN0YWNrIGFsbG9jYXRpb24sIGlubGluZWQgY29t
cGFyaW5nIGZ1bmN0aW9uLCBldGMuCisvLwogc3RydWN0IFJlbmRlclBhc3NEZXNjCiB7CiAgICAg
UmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2MgY29sb3JBdHRhY2htZW50c1trTWF4UmVuZGVy
VGFyZ2V0c107CkBAIC00MTcsNyArNDYzLDYgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZVNw
ZWNpYWxpemVTaGFkZXJGYWN0b3J5CiB7CiAgIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SZW5kZXJQ
aXBlbGluZUNhY2hlU3BlY2lhbGl6ZVNoYWRlckZhY3RvcnkoKSA9IGRlZmF1bHQ7Ci0KICAgICAv
LyBHZXQgc3BlY2lhbGl6ZWQgc2hhZGVyIGZvciB0aGUgcmVuZGVyIHBpcGVsaW5lIGNhY2hlLgog
ICAgIHZpcnR1YWwgYW5nbGU6OlJlc3VsdCBnZXRTcGVjaWFsaXplZFNoYWRlcihDb250ZXh0ICpj
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLApAQCAtNDI5LDcgKzQ3NCw3IEBAIGNsYXNzIFJlbmRl
clBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJnJlbmRlclBpcGVs
aW5lRGVzYykgPSAwOwogfTsKIAotLy8gUmVuZGVyIHBpcGVsaW5lIHN0YXRlIGNhY2hlIHBlciBz
aGFkZXIgcHJvZ3JhbS4KKy8vIHJlbmRlciBwaXBlbGluZSBzdGF0ZSBjYWNoZSBwZXIgc2hhZGVy
IHByb2dyYW0KIGNsYXNzIFJlbmRlclBpcGVsaW5lQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29w
eWFibGUKIHsKICAgcHVibGljOgpAQCAtNDU5LDYgKzUwNCw3IEBAIGNsYXNzIFJlbmRlclBpcGVs
aW5lQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICBBdXRvT2JqQ1B0cjxpZDxN
VExGdW5jdGlvbj4+IG1WZXJ0ZXhTaGFkZXI7CiAgICAgLy8gTm9uLXNwZWNpYWxpemVkIGZyYWdt
ZW50IHNoYWRlcgogICAgIEF1dG9PYmpDUHRyPGlkPE1UTEZ1bmN0aW9uPj4gbUZyYWdtZW50U2hh
ZGVyOworICAgIC8vIE9uIHNoYWRlciB3aXRoIGVtdWxhdGVkIHJhc3Rlcml6YXRpb24gZGlzY2Fy
ZCwgb25lIHdpdGhvdXQKIAogICBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJQaXBlbGluZVN0YXRl
cygpOwpAQCAtNDc3LDE0ICs1MjMsMTMgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZSBmaW5h
bCA6IGFuZ2xlOjpOb25Db3B5YWJsZQogICAgIC8vIE9uZSB0YWJsZSB3aXRoIGRlZmF1bHQgYXR0
cmliIGFuZCBvbmUgdGFibGUgd2l0aG91dC4KICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8UmVuZGVy
UGlwZWxpbmVEZXNjLCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4+CiAg
ICAgICAgIG1SZW5kZXJQaXBlbGluZVN0YXRlc1syXTsKLQogICAgIFJlbmRlclBpcGVsaW5lQ2Fj
aGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSAqbVNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeTsKIH07
CiAKIGNsYXNzIFN0YXRlQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKIHsKICAgcHVi
bGljOgotICAgIFN0YXRlQ2FjaGUoKTsKKyAgICBTdGF0ZUNhY2hlKGNvbnN0IGFuZ2xlOjpGZWF0
dXJlc010bCAmZmVhdHVyZXMpOwogICAgIH5TdGF0ZUNhY2hlKCk7CiAKICAgICAvLyBOdWxsIGRl
cHRoIHN0ZW5jaWwgc3RhdGUgaGFzIGRlcHRoL3N0ZWNpbCByZWFkICYgd3JpdGUgZGlzYWJsZWQu
CkBAIC01MDIsNiArNTQ3LDggQEAgY2xhc3MgU3RhdGVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25D
b3B5YWJsZQogICAgIHZvaWQgY2xlYXIoKTsKIAogICBwcml2YXRlOgorICAgIGNvbnN0IGFuZ2xl
OjpGZWF0dXJlc010bCAmbUZlYXR1cmVzOworCiAgICAgQXV0b09iakNQdHI8aWQ8TVRMRGVwdGhT
dGVuY2lsU3RhdGU+PiBtTnVsbERlcHRoU3RlbmNpbFN0YXRlID0gbmlsOwogICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxEZXB0aFN0ZW5jaWxEZXNjLCBBdXRvT2JqQ1B0cjxpZDxNVExEZXB0aFN0ZW5j
aWxTdGF0ZT4+PiBtRGVwdGhTdGVuY2lsU3RhdGVzOwogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxT
YW1wbGVyRGVzYywgQXV0b09iakNQdHI8aWQ8TVRMU2FtcGxlclN0YXRlPj4+IG1TYW1wbGVyU3Rh
dGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW0KaW5kZXggMWNm
MjM3YWQ2NDA0MmZiNTk3NjYzM2M5OGM3YjUxMTI0MGY5Mzc0OC4uNDVjNzE5ZGQ3MTBjN2Y5YjZi
NjE1MmYzOTkxNTA3OTNmM2RjMTg1MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5tbQorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3N0
YXRlX2NhY2hlLm1tCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9yZXNvdXJjZXMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
dXRpbHMuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9GZWF0dXJlc010bC5oIgogCiAjZGVmaW5lIEFO
R0xFX09CSkNfQ1BfUFJPUEVSVFkoRFNULCBTUkMsIFBST1BFUlRZKSBcCiAgICAgKERTVCkuUFJP
UEVSVFkgPSBzdGF0aWNfY2FzdDxfX3R5cGVvZl9fKChEU1QpLlBST1BFUlRZKT4oVG9PYmpDKChT
UkMpLlBST1BFUlRZKSkKQEAgLTE4MiwxMCArMTgzLDEwIEBAIGlkPE1UTFRleHR1cmU+IFRvT2Jq
Qyhjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKQogICAgIHJldHVybiB0ZXh0dXJlUmVmID8gdGV4
dHVyZVJlZi0+Z2V0KCkgOiBuaWw7CiB9CiAKLXZvaWQgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50
RGVzY1RvT2JqQyhjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJnNyYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExSZW5kZXJQYXNzQXR0YWNobWVudERl
c2NyaXB0b3IgKmRzdCkKK3ZvaWQgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhN
VExSZW5kZXJQYXNzQXR0YWNobWVudERlc2NyaXB0b3IgKmRzdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJnNy
YykKIHsKLSAgICBjb25zdCBUZXh0dXJlUmVmICZpbXBsaWNpdE1zVGV4dHVyZSA9IHNyYy5pbXBs
aWNpdE1TVGV4dHVyZTsKKyAgICBhdXRvIGltcGxpY2l0TXNUZXh0dXJlID0gc3JjLmltcGxpY2l0
TVNUZXh0dXJlKCk7CiAKICAgICBpZiAoaW1wbGljaXRNc1RleHR1cmUpCiAgICAgewpAQCAtMTkz
LDMxICsxOTQsMzEgQEAgdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGNv
bnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3JjLAogICAgICAgICBkc3QubGV2ZWwgICAg
ICAgICAgPSAwOwogICAgICAgICBkc3Quc2xpY2UgICAgICAgICAgPSAwOwogICAgICAgICBkc3Qu
ZGVwdGhQbGFuZSAgICAgPSAwOwotICAgICAgICBkc3QucmVzb2x2ZVRleHR1cmUgPSBUb09iakMo
c3JjLnRleHR1cmUpOwotICAgICAgICBkc3QucmVzb2x2ZUxldmVsICAgPSBzcmMubGV2ZWwuZ2V0
KCk7CisgICAgICAgIGRzdC5yZXNvbHZlVGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSgpKTsK
KyAgICAgICAgZHN0LnJlc29sdmVMZXZlbCAgID0gc3JjLmxldmVsKCkuZ2V0KCk7CiAgICAgICAg
IGlmIChkc3QucmVzb2x2ZVRleHR1cmUudGV4dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUzRCkK
ICAgICAgICAgewotICAgICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBsYW5lID0gc3JjLnNsaWNl
T3JEZXB0aDsKKyAgICAgICAgICAgIGRzdC5yZXNvbHZlRGVwdGhQbGFuZSA9IHNyYy5zbGljZU9y
RGVwdGgoKTsKICAgICAgICAgICAgIGRzdC5yZXNvbHZlU2xpY2UgICAgICA9IDA7CiAgICAgICAg
IH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBkc3QucmVzb2x2ZVNsaWNl
ICAgICAgPSBzcmMuc2xpY2VPckRlcHRoOworICAgICAgICAgICAgZHN0LnJlc29sdmVTbGljZSAg
ICAgID0gc3JjLnNsaWNlT3JEZXB0aCgpOwogICAgICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBs
YW5lID0gMDsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBkc3Qu
dGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSk7Ci0gICAgICAgIGRzdC5sZXZlbCAgID0gc3Jj
LmxldmVsLmdldCgpOworICAgICAgICBkc3QudGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSgp
KTsKKyAgICAgICAgZHN0LmxldmVsICAgPSBzcmMubGV2ZWwoKS5nZXQoKTsKICAgICAgICAgaWYg
KGRzdC50ZXh0dXJlLnRleHR1cmVUeXBlID09IE1UTFRleHR1cmVUeXBlM0QpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGRzdC5kZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0aDsKKyAgICAgICAg
ICAgIGRzdC5kZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0aCgpOwogICAgICAgICAgICAgZHN0
LnNsaWNlICAgICAgPSAwOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAg
ICAgICAgICAgZHN0LnNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoOworICAgICAgICAgICAg
ZHN0LnNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoKCk7CiAgICAgICAgICAgICBkc3QuZGVw
dGhQbGFuZSA9IDA7CiAgICAgICAgIH0KICAgICAgICAgZHN0LnJlc29sdmVUZXh0dXJlICAgID0g
bmlsOwpAQCAtMjMxLDI2ICsyMzIsMjYgQEAgdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnRE
ZXNjVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3JjLAogICAgIEFOR0xF
X09CSkNfQ1BfUFJPUEVSVFkoZHN0LCBzcmMsIHN0b3JlQWN0aW9uT3B0aW9ucyk7CiB9CiAKLXZv
aWQgVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnREZXNjICZkZXNjLAotICAg
ICAgICAgICAgTVRMUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNj
KQordm9pZCBUb09iakMoTVRMUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2NyaXB0b3IgKm9i
akNEZXNjLAorICAgICAgICAgICAgY29uc3QgUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudERlc2Mg
JmRlc2MpCiB7Ci0gICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhkZXNjLCBv
YmpDRGVzYyk7CisgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhvYmpDRGVz
YywgZGVzYyk7CiAKICAgICBBTkdMRV9PQkpDX0NQX1BST1BFUlRZKG9iakNEZXNjLCBkZXNjLCBj
bGVhckNvbG9yKTsKIH0KIAotdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc0RlcHRoQXR0YWNo
bWVudERlc2MgJmRlc2MsCi0gICAgICAgICAgICBNVExSZW5kZXJQYXNzRGVwdGhBdHRhY2htZW50
RGVzY3JpcHRvciAqb2JqQ0Rlc2MpCit2b2lkIFRvT2JqQyhNVExSZW5kZXJQYXNzRGVwdGhBdHRh
Y2htZW50RGVzY3JpcHRvciAqb2JqQ0Rlc2MsCisgICAgICAgICAgICBjb25zdCBSZW5kZXJQYXNz
RGVwdGhBdHRhY2htZW50RGVzYyAmZGVzYykKIHsKLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1l
bnREZXNjVG9PYmpDKGRlc2MsIG9iakNEZXNjKTsKKyAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1l
bnREZXNjVG9PYmpDKG9iakNEZXNjLCBkZXNjKTsKIAogICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVS
VFkob2JqQ0Rlc2MsIGRlc2MsIGNsZWFyRGVwdGgpOwogfQogCi12b2lkIFRvT2JqQyhjb25zdCBS
ZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAotICAgICAgICAgICAgTVRMUmVu
ZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzY3JpcHRvciAqb2JqQ0Rlc2MpCit2b2lkIFRvT2Jq
QyhNVExSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYywKKyAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MpCiB7
Ci0gICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhkZXNjLCBvYmpDRGVzYyk7
CisgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhvYmpDRGVzYywgZGVzYyk7
CiAKICAgICBBTkdMRV9PQkpDX0NQX1BST1BFUlRZKG9iakNEZXNjLCBkZXNjLCBjbGVhclN0ZW5j
aWwpOwogfQpAQCAtNjk2LDExICs2OTcsNyBAQCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OlJl
bmRlclBhc3NBdHRhY2htZW50RGVzYygpCiAKIHZvaWQgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
OjpyZXNldCgpCiB7Ci0gICAgdGV4dHVyZS5yZXNldCgpOwotICAgIGltcGxpY2l0TVNUZXh0dXJl
LnJlc2V0KCk7Ci0gICAgbGV2ZWwgICAgICAgICAgICAgID0gbXRsOjprWmVyb05hdGl2ZU1pcExl
dmVsOwotICAgIHNsaWNlT3JEZXB0aCAgICAgICA9IDA7Ci0gICAgYmxlbmRhYmxlICAgICAgICAg
ID0gZmFsc2U7CisgICAgcmVuZGVyVGFyZ2V0ICAgICAgID0gbnVsbHB0cjsKICAgICBsb2FkQWN0
aW9uICAgICAgICAgPSBNVExMb2FkQWN0aW9uTG9hZDsKICAgICBzdG9yZUFjdGlvbiAgICAgICAg
PSBNVExTdG9yZUFjdGlvblN0b3JlOwogICAgIHN0b3JlQWN0aW9uT3B0aW9ucyA9IE1UTFN0b3Jl
QWN0aW9uT3B0aW9uTm9uZTsKQEAgLTcwOSw4ICs3MDYsOSBAQCB2b2lkIFJlbmRlclBhc3NBdHRh
Y2htZW50RGVzYzo6cmVzZXQoKQogYm9vbCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OmVxdWFs
SWdub3JlTG9hZFN0b3JlT3B0aW9ucygKICAgICBjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERl
c2MgJm90aGVyKSBjb25zdAogewotICAgIHJldHVybiB0ZXh0dXJlID09IG90aGVyLnRleHR1cmUg
JiYgaW1wbGljaXRNU1RleHR1cmUgPT0gb3RoZXIuaW1wbGljaXRNU1RleHR1cmUgJiYKLSAgICAg
ICAgICAgbGV2ZWwgPT0gb3RoZXIubGV2ZWwgJiYgc2xpY2VPckRlcHRoID09IG90aGVyLnNsaWNl
T3JEZXB0aDsKKyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID09IG90aGVyLnJlbmRlclRhcmdldCB8
fAorICAgICAgICAgICAodGV4dHVyZSgpID09IG90aGVyLnRleHR1cmUoKSAmJiBsZXZlbCgpID09
IG90aGVyLmxldmVsKCkgJiYKKyAgICAgICAgICAgIHNsaWNlT3JEZXB0aCgpID09IG90aGVyLnNs
aWNlT3JEZXB0aCgpKTsKIH0KIAogYm9vbCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6Om9wZXJh
dG9yPT0oY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikgY29uc3QKQEAgLTcy
Myw2ICs3MjEsMzAgQEAgYm9vbCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6Om9wZXJhdG9yPT0o
Y29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZvdGhlcikKICAgICByZXR1cm4gbG9hZEFj
dGlvbiA9PSBvdGhlci5sb2FkQWN0aW9uICYmIHN0b3JlQWN0aW9uID09IG90aGVyLnN0b3JlQWN0
aW9uICYmCiAgICAgICAgICAgIHN0b3JlQWN0aW9uT3B0aW9ucyA9PSBvdGhlci5zdG9yZUFjdGlv
bk9wdGlvbnM7CiB9CisvLyBDb252ZXJ0IHRvIE1ldGFsIG9iamVjdAordm9pZCBSZW5kZXJQYXNz
RGVzYzo6Y29udmVydFRvTWV0YWxEZXNjKE1UTFJlbmRlclBhc3NEZXNjcmlwdG9yICpvYmpDRGVz
YykgY29uc3QKK3sKKyAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgIHsKKyAgICAgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IG51bUNvbG9yQXR0YWNobWVudHM7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgVG9PYmpDKG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0sIGNvbG9y
QXR0YWNobWVudHNbaV0pOworICAgICAgICB9CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IG51
bUNvbG9yQXR0YWNobWVudHM7IGkgPCBrTWF4UmVuZGVyVGFyZ2V0czsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBJbmFjdGl2ZSByZW5kZXIgdGFyZ2V0CisgICAgICAgICAgICBvYmpD
RGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnRleHR1cmUgICAgID0gbmlsOworICAgICAgICAgICAg
b2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5sZXZlbCAgICAgICA9IDA7CisgICAgICAgICAg
ICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnNsaWNlICAgICAgID0gMDsKKyAgICAgICAg
ICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uZGVwdGhQbGFuZSAgPSAwOworICAgICAg
ICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5sb2FkQWN0aW9uICA9IE1UTExvYWRB
Y3Rpb25Eb250Q2FyZTsKKyAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0u
c3RvcmVBY3Rpb24gPSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlOworICAgICAgICB9CisKKyAgICAg
ICAgVG9PYmpDKG9iakNEZXNjLmRlcHRoQXR0YWNobWVudCwgZGVwdGhBdHRhY2htZW50KTsKKyAg
ICAgICAgVG9PYmpDKG9iakNEZXNjLnN0ZW5jaWxBdHRhY2htZW50LCBzdGVuY2lsQXR0YWNobWVu
dCk7CisgICAgfQorfQogCiB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1bGF0ZVJlbmRlclBpcGVs
aW5lT3V0cHV0RGVzYyhSZW5kZXJQaXBlbGluZU91dHB1dERlc2MgKm91dERlc2MpIGNvbnN0CiB7
CkBAIC03NDIsMTkgKzc2NCwxOSBAQCB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1bGF0ZVJlbmRl
clBpcGVsaW5lT3V0cHV0RGVzYyhNVExDb2xvcldyaXRlTWFzayBjb2xvcldyaQogdm9pZCBSZW5k
ZXJQYXNzRGVzYzo6cG9wdWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2MoY29uc3QgQmxlbmRE
ZXNjICZibGVuZFN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyUGlwZWxpbmVPdXRwdXREZXNjICpvdXREZXNjKSBjb25zdAog
ewotICAgIFJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyAmb3V0cHV0RGVzY3JpcHRvciA9ICpvdXRE
ZXNjOwotICAgIG91dHB1dERlc2NyaXB0b3IubnVtQ29sb3JBdHRhY2htZW50cyAgICAgICA9IHRo
aXMtPm51bUNvbG9yQXR0YWNobWVudHM7Ci0gICAgb3V0cHV0RGVzY3JpcHRvci5zYW1wbGVDb3Vu
dCAgICAgICAgICAgICAgID0gdGhpcy0+c2FtcGxlQ291bnQ7CisgICAgYXV0byAmb3V0cHV0RGVz
Y3JpcHRvciAgICAgICAgICAgICAgID0gKm91dERlc2M7CisgICAgb3V0cHV0RGVzY3JpcHRvci5u
dW1Db2xvckF0dGFjaG1lbnRzID0gdGhpcy0+bnVtQ29sb3JBdHRhY2htZW50czsKKyAgICBvdXRw
dXREZXNjcmlwdG9yLnNhbXBsZUNvdW50ICAgICAgICAgPSB0aGlzLT5zYW1wbGVDb3VudDsKICAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgdGhpcy0+bnVtQ29sb3JBdHRhY2htZW50czsgKytp
KQogICAgIHsKICAgICAgICAgYXV0byAmcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudCA9IHRoaXMt
PmNvbG9yQXR0YWNobWVudHNbaV07Ci0gICAgICAgIGF1dG8gdGV4dHVyZSAgICAgICAgICAgICAg
ICAgICAgPSByZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50LnRleHR1cmU7CisgICAgICAgIGF1dG8g
dGV4dHVyZSAgICAgICAgICAgICAgICAgICAgPSByZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50LnRl
eHR1cmUoKTsKIAogICAgICAgICBpZiAodGV4dHVyZSkKICAgICAgICAgewogICAgICAgICAgICAg
Ly8gQ29weSBwYXJhbWV0ZXJzIGZyb20gYmxlbmQgc3RhdGUKICAgICAgICAgICAgIG91dHB1dERl
c2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS51cGRhdGUoYmxlbmRTdGF0ZSk7Ci0gICAgICAg
ICAgICBpZiAoIXJlbmRlclBhc3NDb2xvckF0dGFjaG1lbnQuYmxlbmRhYmxlKQorICAgICAgICAg
ICAgaWYgKCFyZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50LmJsZW5kYWJsZSgpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIC8vIERpc2FibGUgYmxlbmRpbmcgaWYgdGhlIGF0dGFjaG1l
bnQncyByZW5kZXIgdGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBibGVuZGluZy4KICAgICAgICAgICAg
ICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0uYmxlbmRpbmdFbmFibGVk
ID0gZmFsc2U7CkBAIC03ODEsMTEgKzgwMywxMSBAQCB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1
bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhjb25zdCBCbGVuZERlc2MgJmJsZW5kU3RhdAog
ICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0ucmVzZXQoKTsKICAg
ICB9CiAKLSAgICBhdXRvIGRlcHRoVGV4dHVyZSA9IHRoaXMtPmRlcHRoQXR0YWNobWVudC50ZXh0
dXJlOworICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2htZW50LnRleHR1
cmUoKTsKICAgICBvdXRwdXREZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudFBpeGVsRm9ybWF0ID0K
ICAgICAgICAgZGVwdGhUZXh0dXJlID8gZGVwdGhUZXh0dXJlLT5waXhlbEZvcm1hdCgpIDogTVRM
UGl4ZWxGb3JtYXRJbnZhbGlkOwogCi0gICAgYXV0byBzdGVuY2lsVGV4dHVyZSA9IHRoaXMtPnN0
ZW5jaWxBdHRhY2htZW50LnRleHR1cmU7CisgICAgYXV0byBzdGVuY2lsVGV4dHVyZSA9IHRoaXMt
PnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUoKTsKICAgICBvdXRwdXREZXNjcmlwdG9yLnN0ZW5j
aWxBdHRhY2htZW50UGl4ZWxGb3JtYXQgPQogICAgICAgICBzdGVuY2lsVGV4dHVyZSA/IHN0ZW5j
aWxUZXh0dXJlLT5waXhlbEZvcm1hdCgpIDogTVRMUGl4ZWxGb3JtYXRJbnZhbGlkOwogfQpAQCAt
ODMxLDQyICs4NTMsMjEgQEAgYm9vbCBSZW5kZXJQYXNzRGVzYzo6b3BlcmF0b3I9PShjb25zdCBS
ZW5kZXJQYXNzRGVzYyAmb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIGRlcHRoQXR0YWNobWVudCA9
PSBvdGhlci5kZXB0aEF0dGFjaG1lbnQgJiYgc3RlbmNpbEF0dGFjaG1lbnQgPT0gb3RoZXIuc3Rl
bmNpbEF0dGFjaG1lbnQ7CiB9CiAKLS8vIENvbnZlcnQgdG8gTWV0YWwgb2JqZWN0Ci12b2lkIFJl
bmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERlc2MoTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3Ig
Km9iakNEZXNjKSBjb25zdAotewotICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCi0gICAgewotICAg
ICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtQ29sb3JBdHRhY2htZW50czsgKytpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBUb09iakMoY29sb3JBdHRhY2htZW50c1tpXSwgb2JqQ0Rl
c2MuY29sb3JBdHRhY2htZW50c1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1aW50MzJf
dCBpID0gbnVtQ29sb3JBdHRhY2htZW50czsgaSA8IGtNYXhSZW5kZXJUYXJnZXRzOyArK2kpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIEluYWN0aXZlIHJlbmRlciB0YXJnZXQKLSAgICAgICAg
ICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZSAgICAgPSBuaWw7Ci0gICAg
ICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxldmVsICAgICAgID0gMDsKLSAg
ICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uc2xpY2UgICAgICAgPSAwOwot
ICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXS5kZXB0aFBsYW5lICA9IDA7
Ci0gICAgICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gID0g
TVRMTG9hZEFjdGlvbkRvbnRDYXJlOwotICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2ht
ZW50c1tpXS5zdG9yZUFjdGlvbiA9IE1UTFN0b3JlQWN0aW9uRG9udENhcmU7Ci0gICAgICAgIH0K
LQotICAgICAgICBUb09iakMoZGVwdGhBdHRhY2htZW50LCBvYmpDRGVzYy5kZXB0aEF0dGFjaG1l
bnQpOwotICAgICAgICBUb09iakMoc3RlbmNpbEF0dGFjaG1lbnQsIG9iakNEZXNjLnN0ZW5jaWxB
dHRhY2htZW50KTsKLSAgICB9Ci19Ci0KIC8vIFJlbmRlclBpcGVsaW5lQ2FjaGUgaW1wbGVtZW50
YXRpb24KLVJlbmRlclBpcGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUoKSA6IFJlbmRl
clBpcGVsaW5lQ2FjaGUobnVsbHB0cikge30KK1JlbmRlclBpcGVsaW5lQ2FjaGU6OlJlbmRlclBp
cGVsaW5lQ2FjaGUoKSA6IFJlbmRlclBpcGVsaW5lQ2FjaGUobnVsbHB0cikgeworfQogCiBSZW5k
ZXJQaXBlbGluZUNhY2hlOjpSZW5kZXJQaXBlbGluZUNhY2hlKAogICAgIFJlbmRlclBpcGVsaW5l
Q2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSAqc3BlY2lhbGl6ZWRTaGFkZXJGYWN0b3J5KQog
ICAgIDogbVNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeShzcGVjaWFsaXplZFNoYWRlckZhY3Rvcnkp
Ci17fQoreworCit9CiAKIFJlbmRlclBpcGVsaW5lQ2FjaGU6On5SZW5kZXJQaXBlbGluZUNhY2hl
KCkge30KIAotdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hlOjpzZXRWZXJ0ZXhTaGFkZXIoQ29udGV4
dCAqY29udGV4dCwgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlcikKK3ZvaWQgUmVuZGVyUGlwZWxpbmVD
YWNoZTo6c2V0VmVydGV4U2hhZGVyKENvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyKQogewogICAg
IG1WZXJ0ZXhTaGFkZXIucmV0YWluQXNzaWduKHNoYWRlcik7CiAKQEAgLTg3OSw3ICs4ODAsOCBA
QCB2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OnNldFZlcnRleFNoYWRlcihDb250ZXh0ICpjb250
ZXh0LCBpZDxNVExGdW5jdGlvbj4gc2hhZAogICAgIHJlY3JlYXRlUGlwZWxpbmVTdGF0ZXMoY29u
dGV4dCk7CiB9CiAKLXZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0RnJhZ21lbnRTaGFkZXIo
Q29udGV4dCAqY29udGV4dCwgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlcikKK3ZvaWQgUmVuZGVyUGlw
ZWxpbmVDYWNoZTo6c2V0RnJhZ21lbnRTaGFkZXIoQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRl
cikKIHsKICAgICBtRnJhZ21lbnRTaGFkZXIucmV0YWluQXNzaWduKHNoYWRlcik7CiAKQEAgLTky
OSwxMCArOTMxLDYgQEAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFJl
bmRlclBpcGVsaW5lQ2FjaGU6Omluc2VydFJlbmRlclBpcGVsaW4KIHsKICAgICBBdXRvT2JqQ1B0
cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gbmV3U3RhdGUgPQogICAgICAgICBjcmVhdGVS
ZW5kZXJQaXBlbGluZVN0YXRlKGNvbnRleHQsIGRlc2MsIGluc2VydERlZmF1bHRBdHRyaWJMYXlv
dXQpOwotICAgIGlmICghbmV3U3RhdGUpCi0gICAgewotICAgICAgICByZXR1cm4gbmlsOwotICAg
IH0KIAogICAgIGludCB0YWJsZUlkeCA9IGluc2VydERlZmF1bHRBdHRyaWJMYXlvdXQgPyAxIDog
MDsKICAgICBhdXRvIHJlICAgICAgPSBtUmVuZGVyUGlwZWxpbmVTdGF0ZXNbdGFibGVJZHhdLmlu
c2VydChzdGQ6Om1ha2VfcGFpcihkZXNjLCBuZXdTdGF0ZSkpOwpAQCAtOTQ0LDYgKzk0Miw3IEBA
IEF1dG9PYmpDUHRyPGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PiBSZW5kZXJQaXBlbGluZUNh
Y2hlOjppbnNlcnRSZW5kZXJQaXBlbGluCiAgICAgcmV0dXJuIHJlLmZpcnN0LT5zZWNvbmQ7CiB9
CiAKKwogQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFJlbmRlclBpcGVs
aW5lQ2FjaGU6OmNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoCiAgICAgQ29udGV4dCAqY29udGV4
dCwKICAgICBjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJm9yaWdpbmFsRGVzYywKQEAgLTk1OSw3
ICs5NTgsNiBAQCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gUmVuZGVy
UGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbgogICAgICAgICAgICAgZGVzYy5lbXVs
YXRlQ292ZXJhZ2VNYXNrICAgID0gZmFsc2U7CiAgICAgICAgICAgICBkZXNjLmFscGhhVG9Db3Zl
cmFnZUVuYWJsZWQgPSBmYWxzZTsKICAgICAgICAgfQotCiAgICAgICAgIC8vIENob29zZSBzaGFk
ZXIgdmFyaWFudAogICAgICAgICBpZDxNVExGdW5jdGlvbj4gdmVydFNoYWRlciA9IG5pbDsKICAg
ICAgICAgaWQ8TVRMRnVuY3Rpb24+IGZyYWdTaGFkZXIgPSBuaWw7CkBAIC0xMDA0LDcgKzEwMDIs
MjUgQEAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IFJlbmRlclBpcGVs
aW5lQ2FjaGU6OmNyZWF0ZVJlbmRlclBpcGVsaW4KIAogICAgICAgICAvLyBDb252ZXJ0IHRvIE9i
amVjdGl2ZS1DIGRlc2M6CiAgICAgICAgIEF1dG9PYmpDT2JqPE1UTFJlbmRlclBpcGVsaW5lRGVz
Y3JpcHRvcj4gb2JqQ0Rlc2MgPSBUb09iakModmVydFNoYWRlciwgZnJhZ1NoYWRlciwgZGVzYyk7
Ci0KKyAgICAgICAgLy8gVmFsaWRhdGUgUmVuZGVyIFBpcGVsaW5lIFN0YXRlOgorICAgICAgICBp
ZiAoRGV2aWNlSGFzTWF4aW11bVJlbmRlclRhcmdldFNpemUobWV0YWxEZXZpY2UpKQorICAgICAg
ICB7CisgICAgICAgICAgICBOU1VJbnRlZ2VyIG1heFNpemUgPSBHZXRNYXhSZW5kZXJUYXJnZXRT
aXplRm9yRGV2aWNlSW5CeXRlcyhtZXRhbERldmljZSk7CisgICAgICAgICAgICBOU1VJbnRlZ2Vy
IHJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAgICAgICAgIENvbXB1dGVUb3RhbFNpemVVc2Vk
Rm9yTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKG9iakNEZXNjLCBjb250ZXh0LCBtZXRhbERl
dmljZSk7CisgICAgICAgICAgICBpZiAocmVuZGVyVGFyZ2V0U2l6ZSA+IG1heFNpemUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKyAgICAg
ICAgICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJUaGlzIHNldCBvZiBy
ZW5kZXIgdGFyZ2V0cyByZXF1aXJlcyAlbHUgYnl0ZXMgb2YgIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAInBpeGVsIHN0b3JhZ2UuIFRoaXMgZGV2aWNl
IHN1cHBvcnRzICVsdSBieXRlcy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZW5kZXJUYXJnZXRTaXplLCBtYXhTaXplXTsKKyAgICAgICAgICAgICAg
ICBOU0Vycm9yICplcnIgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJNVExWYWxpZGF0aW9u
RXJyb3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlOi0xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVzZXJJbmZvOkB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleSA6IGVycm9yU3RyaW5nfV07Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+aGFuZGxlRXJyb3IoZXJyLCBfX0ZJTEVfXywgQU5HTEVf
RlVOQ1RJT04sIF9fTElORV9fKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgICAgIC8vIFNwZWNpYWwgYXR0cmlidXRlIHNsb3QgZm9y
IGRlZmF1bHQgYXR0cmlidXRlCiAgICAgICAgIGlmIChpbnNlcnREZWZhdWx0QXR0cmliTGF5b3V0
KQogICAgICAgICB7CkBAIC0xMDMyLDYgKzEwNDgsNyBAQCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5k
ZXJQaXBlbGluZVN0YXRlPj4gUmVuZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxp
bgogICAgIH0KIH0KIAorCiB2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OnJlY3JlYXRlUGlwZWxp
bmVTdGF0ZXMoQ29udGV4dCAqY29udGV4dCkKIHsKICAgICBmb3IgKGludCBoYXNEZWZhdWx0QXR0
cmliID0gMDsgaGFzRGVmYXVsdEF0dHJpYiA8PSAxOyArK2hhc0RlZmF1bHRBdHRyaWIpCkBAIC0x
MDYyLDcgKzEwNzksNyBAQCB2b2lkIFJlbmRlclBpcGVsaW5lQ2FjaGU6OmNsZWFyUGlwZWxpbmVT
dGF0ZXMoKQogfQogCiAvLyBTdGF0ZUNhY2hlIGltcGxlbWVudGF0aW9uCi1TdGF0ZUNhY2hlOjpT
dGF0ZUNhY2hlKCkge30KK1N0YXRlQ2FjaGU6OlN0YXRlQ2FjaGUoY29uc3QgYW5nbGU6OkZlYXR1
cmVzTXRsICZmZWF0dXJlcykgOiBtRmVhdHVyZXMoZmVhdHVyZXMpIHt9CiAKIFN0YXRlQ2FjaGU6
On5TdGF0ZUNhY2hlKCkge30KIApAQCAtMTExMyw2ICsxMTMwLDExIEBAIEF1dG9PYmpDUHRyPGlk
PE1UTFNhbXBsZXJTdGF0ZT4+IFN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZShpZDxNVExEZXZp
Y2U+IG1ldGFsCiAgICAgICAgIGlmIChpdGUgPT0gbVNhbXBsZXJTdGF0ZXMuZW5kKCkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEF1dG9PYmpDT2JqPE1UTFNhbXBsZXJEZXNjcmlwdG9yPiBvYmpD
RGVzYyA9IFRvT2JqQyhkZXNjKTsKKyAgICAgICAgICAgIGlmICghbUZlYXR1cmVzLmFsbG93UnVu
dGltZVNhbXBsZXJDb21wYXJlTW9kZS5lbmFibGVkKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIFJ1bnRpbWUgc2FtcGxlciBjb21wYXJlIG1vZGUgaXMgbm90IHN1cHBvcnRlZCwg
ZmFsbGJhY2sgdG8gbmV2ZXIuCisgICAgICAgICAgICAgICAgb2JqQ0Rlc2MuZ2V0KCkuY29tcGFy
ZUZ1bmN0aW9uID0gTVRMQ29tcGFyZUZ1bmN0aW9uTmV2ZXI7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBBdXRvT2JqQ1B0cjxpZDxNVExTYW1wbGVyU3RhdGU+PiBuZXdTdGF0ZSA9CiAgICAg
ICAgICAgICAgICAgW1ttZXRhbERldmljZSBuZXdTYW1wbGVyU3RhdGVXaXRoRGVzY3JpcHRvcjpv
YmpDRGVzY10gQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91
dGlscy5oCmluZGV4IGE4NGFjNzNlYTAzM2ZhNmJlNGZmMjQxNDZkNTBlY2RjZGJjYzhkNzAuLjgw
NTcyOWU1OTUyNDZmMDQwY2Y1YWM0NjUwZDJlYjhmMDA5NmY0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX3V0aWxzLmgKQEAgLTEzNSwxNSArMTM1LDMwIEBAIE1UTFRleHR1cmVTd2l6emxlIEdl
dFRleHR1cmVTd2l6emxlKEdMZW51bSBzd2l6emxlKTsKIAogLy8gR2V0IGNvbG9yIHdyaXRlIG1h
c2sgZm9yIGEgc3BlY2lmaWVkIGZvcm1hdC4gU29tZSBmb3JtYXRzIHN1Y2ggYXMgUkdCNTY1IGRv
ZXNuJ3QgaGF2ZSBhbHBoYQogLy8gY2hhbm5lbCBidXQgaXMgZW11bGF0ZWQgYnkgYSBSR0JBOCBm
b3JtYXQsIHdlIG5lZWQgdG8gZGlzYWJsZSBhbHBoYSB3cml0ZSBmb3IgdGhpcyBmb3JtYXQuCi0v
LyAtIGlzRm9ybWF0RW11bGF0ZWQ6IGlmIHRoZSBmb3JtYXQgaXMgZW11bGF0ZWQsIHRoaXMgcG9p
bnRlciB3aWxsIHN0b3JlIGEgdHJ1ZSB2YWx1ZS4KLU1UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxh
dGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqaXNG
b3JtYXRFbXVsYXRlZCk7CisvLyAtIGVtdWxhdGVkQ2hhbm5lbHNPdXQ6IGlmIHRoZSBmb3JtYXQg
aXMgZW11bGF0ZWQsIHRoaXMgcG9pbnRlciB3aWxsIHN0b3JlIGEgdHJ1ZSB2YWx1ZS4KK01UTENv
bG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQg
Jm10bEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCAqZW11bGF0ZWRDaGFubmVsc091dCk7CiBNVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRl
ZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQpOwogYm9vbCBJc0Zv
cm1hdEVtdWxhdGVkKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQpOwogCitOU1VJbnRlZ2Vy
IEdldE1heFJlbmRlclRhcmdldFNpemVGb3JEZXZpY2VJbkJ5dGVzKGlkPE1UTERldmljZT4gZGV2
aWNlKTsKK05TVUludGVnZXIgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGlk
PE1UTERldmljZT4gZGV2aWNlKTsKK2Jvb2wgRGV2aWNlSGFzTWF4aW11bVJlbmRlclRhcmdldFNp
emUoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpOworCiAvLyBVc2VmdWwgdG8gc2V0IGNsZWFyIGNvbG9y
IGZvciB0ZXh0dXJlIG9yaWdpbmFsbHkgaGF2aW5nIG5vIGFscGhhIGluIEdMLCBidXQgYmFja2Vu
ZCdzIGZvcm1hdAogLy8gaGFzIGFscGhhIGNoYW5uZWwuCiBNVExDbGVhckNvbG9yIEVtdWxhdGVk
QWxwaGFDbGVhckNvbG9yKE1UTENsZWFyQ29sb3IgY29sb3IsIE1UTENvbG9yV3JpdGVNYXNrIGNv
bG9yTWFzayk7CiAKKworTlNVSW50ZWdlciBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJlbmRl
clBhc3NEZXNjcmlwdG9yKGNvbnN0IE1UTFJlbmRlclBhc3NEZXNjcmlwdG9yICpkZXNjcmlwdG9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UpOworCitO
U1VJbnRlZ2VyIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlw
dG9yKAorICAgIGNvbnN0IE1UTFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciAqZGVzY3JpcHRvciwK
KyAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorICAgIGlkPE1UTERldmljZT4gZGV2aWNlKTsK
KwogZ2w6OkJveCBNVExSZWdpb25Ub0dMQm94KGNvbnN0IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKTsK
IAogTWlwbWFwTmF0aXZlTGV2ZWwgR2V0TmF0aXZlTWlwTGV2ZWwoR0x1aW50IGxldmVsLCBHTHVp
bnQgYmFzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5tbQppbmRleCAwNzZlNjA5OGMz
YTI2MzBkOWUxYWYwNzgwY2U2N2FlMjZhMDIxZDhjLi4wMDlhZjVhZTZjMTNhM2I3OTI0YTI5ZTdj
NzIzZTc0NjM1MTY4NmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3V0aWxzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW0KQEAgLTEw
LDkgKzEwLDExIEBACiAKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRp
bHMuaCIKIAorI2luY2x1ZGUgPEF2YWlsYWJpbGl0eS5oPgogI2luY2x1ZGUgPFRhcmdldENvbmRp
dGlvbmFscy5oPgogCiAjaW5jbHVkZSAiY29tbW9uL01lbW9yeUJ1ZmZlci5oIgorI2luY2x1ZGUg
ImNvbW1vbi9zeXN0ZW1fdXRpbHMuaCIKICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUlu
Zm8uaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCiAj
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgpAQCAtMjQsNiAr
MjYsOCBAQCBuYW1lc3BhY2UgcngKIG5hbWVzcGFjZSBtdGwKIHsKIAorY29uc3RleHByIGNoYXIg
a0FOR0xFUHJpbnRNU0xFbnZbXSA9ICJBTkdMRV9NRVRBTF9QUklOVF9NU0xfRU5BQkxFIjsKKwog
bmFtZXNwYWNlCiB7CiAKQEAgLTEwMywyNCArMTA3LDQzIEBAIGFuZ2xlOjpSZXN1bHQgSW5pdGlh
bGl6ZVRleHR1cmVDb250ZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbWFnZU5hdGl2ZUluZGV4ICZp
bmRleCkKIHsKICAgICBBU1NFUlQodGV4dHVyZSAmJiB0ZXh0dXJlLT52YWxpZCgpKTsKLSAgICAv
LyBPbmx5IG9uZSBzbGljZSBjYW4gYmUgaW5pdGlhbGl6ZWQgYXQgYSB0aW1lLgotICAgIEFTU0VS
VCghaW5kZXguaXNMYXllcmVkKCkgfHwgaW5kZXguZ2V0VHlwZSgpID09IGdsOjpUZXh0dXJlVHlw
ZTo6XzNEKTsKICAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRl
eHQpOwogCisgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmYWN0dWFsQW5nbGVGb3JtYXQgICAgICAg
ICAgID0gdGV4dHVyZU9iakZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpOwogICAgIGNvbnN0IGds
OjpJbnRlcm5hbEZvcm1hdCAmaW50ZW5kZWRJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmVPYmpGb3Jt
YXQuaW50ZW5kZWRJbnRlcm5hbEZvcm1hdCgpOwogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBj
YWxsZWQgaW4gbWFueSBwbGFjZXMgdG8gaW5pdGlhbGl6ZSB0aGUgY29udGVudCBvZiBhIHRleHR1
cmUuCi0gICAgLy8gU28gaXQncyBiZXR0ZXIgd2UgZG8gdGhlIGluaXRpYWwgY2hlY2sgaGVyZSBp
bnN0ZWFkIG9mIGxldCB0aGUgY2FsbGVycyBkbyBpdCB0aGVtc2VsdmVzOgotICAgIGlmICghdGV4
dHVyZU9iakZvcm1hdC52YWxpZCgpIHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuY29tcHJlc3Nl
ZCkKKyAgICAvLyBTbyBpdCdzIGJldHRlciB3ZSBkbyB0aGUgc2FuaXR5IGNoZWNrIGhlcmUgaW5z
dGVhZCBvZiBsZXQgdGhlIGNhbGxlcnMgZG8gaXQgdGhlbXNlbHZlczoKKyAgICBpZiAoIXRleHR1
cmVPYmpGb3JtYXQudmFsaWQoKSB8fCBhY3R1YWxBbmdsZUZvcm1hdC5pc0Jsb2NrIHx8IGFjdHVh
bEFuZ2xlRm9ybWF0LmRlcHRoQml0cyA+IDAgfHwKKyAgICAgICAgYWN0dWFsQW5nbGVGb3JtYXQu
c3RlbmNpbEJpdHMgPiAwKQogICAgIHsKKyAgICAgICAgLy8gSWYgZHN0IGZvcm1hdCBpcyBjb21w
cmVzc2VkLCBpZ25vcmUuCiAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
ICAgICB9CiAKICAgICBnbDo6RXh0ZW50cyBzaXplID0gdGV4dHVyZS0+c2l6ZShpbmRleCk7CiAK
LSAgICAvLyBJbnRpaWFsaXplIHRoZSBjb250ZW50IHRvIGJsYWNrCi0gICAgR0xpbnQgbGF5ZXIs
IHN0YXJ0RGVwdGg7Ci0gICAgR2V0U2xpY2VBbmREZXB0aChpbmRleCwgJmxheWVyLCAmc3RhcnRE
ZXB0aCk7CisgICAgLy8gSW50aWFsaXplIHRoZSBjb250ZW50IHRvIGJsYWNrCisgICAgR0xpbnQg
bGF5ZXIgICAgICA9IDA7CisgICAgR0xpbnQgc3RhcnREZXB0aCA9IDA7CisgICAgaWYgKGluZGV4
Lmhhc0xheWVyKCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKGluZGV4LmdldFR5cGUoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY2FzZSBnbDo6VGV4dHVyZVR5cGU6OkN1YmVNYXA6CisgICAg
ICAgICAgICAgICAgbGF5ZXIgPSBpbmRleC5jdWJlTWFwRmFjZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXk6
CisgICAgICAgICAgICAgICAgbGF5ZXIgPSBpbmRleC5nZXRMYXllckluZGV4KCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGdsOjpUZXh0dXJlVHlwZTo6XzNEOgor
ICAgICAgICAgICAgICAgIHN0YXJ0RGVwdGggPSBpbmRleC5nZXRMYXllckluZGV4KCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CiAKICAgICBpZiAodGV4dHVyZS0+aXNDUFVBY2Nlc3NpYmxlKCkgJiYgaW5kZXguZ2V0VHlwZSgp
ICE9IGdsOjpUZXh0dXJlVHlwZTo6XzJETXVsdGlzYW1wbGUgJiYKICAgICAgICAgaW5kZXguZ2V0
VHlwZSgpICE9IGdsOjpUZXh0dXJlVHlwZTo6XzJETXVsdGlzYW1wbGVBcnJheSkKQEAgLTEzNiw2
ICsxNTksMTMgQEAgYW5nbGU6OlJlc3VsdCBJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAg
eworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlT2JqRm9ybWF0LnZhbGlkKCkgfHwgaW50ZW5kZWRJ
bnRlcm5hbEZvcm1hdC5jb21wcmVzc2VkIHx8CisgICAgICAgICAgICAgICAgaW50ZW5kZWRJbnRl
cm5hbEZvcm1hdC5kZXB0aEJpdHMgPiAwIHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuc3RlbmNp
bEJpdHMgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIElmIHNvdXJjZSBm
b3JtYXQgaXMgY29tcHJlc3NlZCwgaWdub3JlLgorICAgICAgICAgICAgICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29uc3Qg
YW5nbGU6OkZvcm1hdCAmc3JjRm9ybWF0ID0gYW5nbGU6OkZvcm1hdDo6R2V0KAogICAgICAgICAg
ICAgICAgIGludGVuZGVkSW50ZXJuYWxGb3JtYXQuYWxwaGFCaXRzID4gMCA/IGFuZ2xlOjpGb3Jt
YXRJRDo6UjhHOEI4QThfVU5PUk0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhCOF9VTk9STSk7CkBAIC0x
NjIsMTAgKzE5MiwxMCBAQCBhbmdsZTo6UmVzdWx0IEluaXRpYWxpemVUZXh0dXJlQ29udGVudHMo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAKICAgICAgICAgICAgICAgICAvLyBVcGxvYWQg
dG8gdGV4dHVyZQogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlcGxhY2UyRFJlZ2lvbihjb250
ZXh0TXRsLCBtdGxSb3dSZWdpb24sIGluZGV4LmdldE5hdGl2ZUxldmVsKCksIGxheWVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uUm93LmRhdGEo
KSwgZHN0Um93UGl0Y2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udmVyc2lvblJvdy5kYXRhKCksIGRzdFJvd1BpdGNoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgIH0KKyAgICB9ICAvLyBpZiAodGV4dHVyZS0+aXNDUFVBY2Nlc3NpYmxlKCkpCiAg
ICAgZWxzZQogICAgIHsKICAgICAgICAgQU5HTEVfVFJZKEluaXRpYWxpemVUZXh0dXJlQ29udGVu
dHNHUFUoY29udGV4dCwgdGV4dHVyZSwgdGV4dHVyZU9iakZvcm1hdCwgaW5kZXgsCkBAIC0yMTAs
NyArMjQwLDcgQEAgYW5nbGU6OlJlc3VsdCBJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzR1BVKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgIFJlbmRlclRhcmdldE10bCB0ZW1wUnR0Owog
ICAgIHRlbXBSdHQuc2V0KHRleHR1cmUsIGluZGV4LmdldE5hdGl2ZUxldmVsKCksIHNsaWNlT3JE
ZXB0aCwgdGV4dHVyZU9iakZvcm1hdCk7CiAKLSAgICBpbnQgY2xlYXJBbHBoYSA9IDA7CisgICAg
ZmxvYXQgY2xlYXJBbHBoYSA9IDA7CiAgICAgaWYgKCF0ZXh0dXJlT2JqRm9ybWF0LmludGVuZGVk
QW5nbGVGb3JtYXQoKS5hbHBoYUJpdHMpCiAgICAgewogICAgICAgICAvLyBpZiBpbnRlbmRlZCBm
b3JtYXQgZG9lc24ndCBoYXZlIGFscGhhLCBzZXQgaXQgdG8gMS4wLgpAQCAtMjQwLDExICsyNzAs
MTEgQEAgYW5nbGU6OlJlc3VsdCBJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzR1BVKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICBDbGVhckNvbG9yVmFsdWUgY2xlYXJDb2xvcjsK
ICAgICAgICAgaWYgKGFuZ2xlRm9ybWF0LmlzU2ludCgpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjbGVhckNvbG9yLnNldEFzSW50KDAsIDAsIDAsIGNsZWFyQWxwaGEpOworICAgICAgICAgICAg
Y2xlYXJDb2xvci5zZXRBc0ludCgwLCAwLCAwLCAoaW50KWNsZWFyQWxwaGEpOwogICAgICAgICB9
CiAgICAgICAgIGVsc2UgaWYgKGFuZ2xlRm9ybWF0LmlzVWludCgpKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBjbGVhckNvbG9yLnNldEFzVUludCgwLCAwLCAwLCBjbGVhckFscGhhKTsKKyAgICAg
ICAgICAgIGNsZWFyQ29sb3Iuc2V0QXNVSW50KDAsIDAsIDAsIChpbnQpY2xlYXJBbHBoYSk7CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC0yODMsMTcgKzMxMywxNyBAQCBh
bmdsZTo6UmVzdWx0IEluaXRpYWxpemVEZXB0aFN0ZW5jaWxUZXh0dXJlQ29udGVudHNHUFUoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleAogICAgIHJwRGVzYy5zYW1wbGVDb3VudCA9IHRleHR1cmUt
PnNhbXBsZXMoKTsKICAgICBpZiAoYW5nbGVGb3JtYXQuZGVwdGhCaXRzKQogICAgIHsKLSAgICAg
ICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOwotICAgICAg
ICBycERlc2MuZGVwdGhBdHRhY2htZW50LmxldmVsICAgICAgICA9IGxldmVsOwotICAgICAgICBy
cERlc2MuZGVwdGhBdHRhY2htZW50LnNsaWNlT3JEZXB0aCA9IGxheWVyOworICAgICAgICBycERl
c2MuZGVwdGhBdHRhY2htZW50LnJlbmRlclRhcmdldC0+dGV4dHVyZSAgICAgID0gdGV4dHVyZTsK
KyAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPmxldmVsICAgICAg
ICA9IGxldmVsOworICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LnJlbmRlclRhcmdldC0+
c2xpY2VPckRlcHRoID0gbGF5ZXI7CiAgICAgICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQubG9h
ZEFjdGlvbiAgID0gTVRMTG9hZEFjdGlvbkNsZWFyOwogICAgICAgICBycERlc2MuZGVwdGhBdHRh
Y2htZW50LmNsZWFyRGVwdGggICA9IDEuMDsKICAgICB9CiAgICAgaWYgKGFuZ2xlRm9ybWF0LnN0
ZW5jaWxCaXRzKQogICAgIHsKLSAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1
cmUgICAgICA9IHRleHR1cmU7Ci0gICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sZXZl
bCAgICAgICAgPSBsZXZlbDsKLSAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnNsaWNl
T3JEZXB0aCA9IGxheWVyOworICAgICAgICBycERlc2Muc3RlbmNpbEF0dGFjaG1lbnQucmVuZGVy
VGFyZ2V0LT50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOworICAgICAgICBycERlc2Muc3RlbmNpbEF0
dGFjaG1lbnQucmVuZGVyVGFyZ2V0LT5sZXZlbCAgICAgICAgPSBsZXZlbDsKKyAgICAgICAgcnBE
ZXNjLnN0ZW5jaWxBdHRhY2htZW50LnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0gbGF5ZXI7
CiAgICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5sb2FkQWN0aW9uICAgPSBNVExMb2Fk
QWN0aW9uQ2xlYXI7CiAgICAgfQogCkBAIC00NTYsNiArNDg2LDMwIEBAIEF1dG9PYmpDUHRyPGlk
PE1UTExpYnJhcnk+PiBDcmVhdGVTaGFkZXJMaWJyYXJ5KGlkPE1UTERldmljZT4gbWV0YWxEZXZp
Y2UsCiAgICAgcmV0dXJuIENyZWF0ZVNoYWRlckxpYnJhcnkobWV0YWxEZXZpY2UsIHNvdXJjZS5j
X3N0cigpLCBzb3VyY2Uuc2l6ZSgpLCBlcnJvcik7CiB9CiAKKyNpZiAwCitzdGF0aWMgTVRMTGFu
Z3VhZ2VWZXJzaW9uIEdldEhpZ2hlc3RTdXBwb3J0ZWRNU0xWZXJzaW9uKCkKK3sKKyAgICAvLyBo
dHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9tZXRhbC9tdGxsYW5ndWFn
ZXZlcnNpb24/bGFuZ3VhZ2U9b2JqYworICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJ
KDExLjAsIDE0LjAsIDE0LjApKQorICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMl8z
OworICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjE1LCAxMy4wLCAxMy4wKSkK
KyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMjsKKyAgICBpZiAoQU5HTEVfQVBQ
TEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTIuMCkpCisgICAgICAgIHJldHVybiBNVExM
YW5ndWFnZVZlcnNpb24yXzE7CisgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAu
MTMsIDEzLjAsIDExLjApKQorICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMl8wOwor
ICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjEyLCAxMy4wLCAxMC4wKSkKKyAg
ICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjFfMjsKKyAgICBpZiAoQU5HTEVfQVBQTEVf
QVZBSUxBQkxFX1hDSSgxMC4xMSwgMTMuMCwgOS4wKSkKKyAgICAgICAgcmV0dXJuIE1UTExhbmd1
YWdlVmVyc2lvbjFfMTsKKyMgICAgaWYgVEFSR0VUX09TX0lPUworICAgIGlmIChBTkdMRV9BUFBM
RV9BVkFJTEFCTEVfSSg5LjApKQorICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8w
OworIyAgICBlbmRpZgorICAgIHJldHVybiBNVExMYW5ndWFnZVZlcnNpb24xXzE7Cit9CisjZW5k
aWYKKwogQXV0b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IENyZWF0ZVNoYWRlckxpYnJhcnkoaWQ8
TVRMRGV2aWNlPiBtZXRhbERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzb3VyY2VMZW4sCkBAIC00NjksOCAr
NTIzLDI1IEBAIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBDcmVhdGVTaGFkZXJMaWJyYXJ5
KGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZVdoZW5E
b25lOk5PXTsKICAgICAgICAgYXV0byBvcHRpb25zICAgICA9IFtbW01UTENvbXBpbGVPcHRpb25z
IGFsbG9jXSBpbml0XSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICAgICAvLyBNYXJrIGFs
bCBwb3NpdGlvbnMgaW4gVlMgd2l0aCBhdHRyaWJ1dGUgaW52YXJpYW50IGFzIG5vbi1vcHRpbWl6
YWJsZQorI2lmIChkZWZpbmVkKF9fTUFDXzExXzApICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NQVhf
QUxMT1dFRCA+PSBfX01BQ18xMV8wKSB8fCAgICAgICAgXAorICAgIChkZWZpbmVkKF9fSVBIT05F
XzE0XzApICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gX19JUEhPTkVfMTRf
MCkgfHwgXAorICAgIChkZWZpbmVkKF9fVFZPU18xNF8wKSAmJiBfX1RWX09TX1ZFUlNJT05fTUFY
X0FMTE9XRUQgPj0gX19UVk9TXzE0XzApCisgICAgICAgIG9wdGlvbnMucHJlc2VydmVJbnZhcmlh
bmNlID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgIC8vIE5vIHByZXNlcnZlSW52YXJpYW5jZSBhdmFp
bGFibGUgY29tcGlsaW5nIGZyb20gc291cmNlLCBzbyBqdXN0IGRpc2FibGUgZmFzdG1hdGguCisg
ICAgICAgIG9wdGlvbnMuZmFzdE1hdGhFbmFibGVkID0gZmFsc2U7CisjZW5kaWYKKyAgICAgICAg
Ly8gVE9ETyhqY3VubmluZ2hhbSk6IHdvcmthcm91bmQgZm9yIGludGVsIGRyaXZlciBub3QgcHJl
c2VydmluZyBpbnZhcmlhbmNlIG9uIGFsbCBzaGFkZXJzCisgICAgICAgIGlmIChbbWV0YWxEZXZp
Y2UubmFtZSByYW5nZU9mU3RyaW5nOkAiSW50ZWwiXS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQor
ICAgICAgICB7CisgICAgICAgICAgICBvcHRpb25zLmZhc3RNYXRoRW5hYmxlZCA9IGZhbHNlOwor
ICAgICAgICB9CiAgICAgICAgIGF1dG8gbGlicmFyeSA9IFttZXRhbERldmljZSBuZXdMaWJyYXJ5
V2l0aFNvdXJjZTpuc1NvdXJjZSBvcHRpb25zOm9wdGlvbnMgZXJyb3I6Jm5zRXJyb3JdOwotCisg
ICAgICAgIGlmIChhbmdsZTo6R2V0RW52aXJvbm1lbnRWYXIoa0FOR0xFUHJpbnRNU0xFbnYpWzBd
ID09ICcxJykKKyAgICAgICAgeworICAgICAgICAgICAgTlNMb2coQCIlQFxuIiwgbnNTb3VyY2Up
OworICAgICAgICB9CiAgICAgICAgIFtuc1NvdXJjZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOwog
CiAgICAgICAgICplcnJvck91dCA9IHN0ZDo6bW92ZShuc0Vycm9yKTsKQEAgLTc3MiwxNSArODQz
LDE1IEBAIE1UTFRleHR1cmVTd2l6emxlIEdldFRleHR1cmVTd2l6emxlKEdMZW51bSBzd2l6emxl
KQogfQogI2VuZGlmCiAKLU1UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1h
c2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqaXNFbXVsYXRlZE91dCkKK01U
TENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3Jt
YXQgJm10bEZvcm1hdCwgYm9vbCAqZW11bGF0ZWRDaGFubmVsc091dCkKIHsKICAgICBjb25zdCBh
bmdsZTo6Rm9ybWF0ICZpbnRlbmRlZEZvcm1hdCA9IG10bEZvcm1hdC5pbnRlbmRlZEFuZ2xlRm9y
bWF0KCk7CiAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmYWN0dWFsRm9ybWF0ICAgPSBtdGxGb3Jt
YXQuYWN0dWFsQW5nbGVGb3JtYXQoKTsKLSAgICBib29sIGlzRm9ybWF0RW11bGF0ZWQgICAgICAg
ICAgICAgICA9IGZhbHNlOworICAgIGJvb2wgZW11bGF0ZWRDaGFubmVscyAgICAgICAgICAgICAg
ID0gZmFsc2U7CiAgICAgTVRMQ29sb3JXcml0ZU1hc2sgY29sb3JXcml0YWJsZU1hc2sgPSBNVExD
b2xvcldyaXRlTWFza0FsbDsKICAgICBpZiAoaW50ZW5kZWRGb3JtYXQuYWxwaGFCaXRzID09IDAg
JiYgYWN0dWFsRm9ybWF0LmFscGhhQml0cykKICAgICB7Ci0gICAgICAgIGlzRm9ybWF0RW11bGF0
ZWQgPSB0cnVlOworICAgICAgICBlbXVsYXRlZENoYW5uZWxzID0gdHJ1ZTsKICAgICAgICAgLy8g
RGlzYWJsZSBhbHBoYSB3cml0ZSB0byB0aGlzIHRleHR1cmUKICAgICAgICAgY29sb3JXcml0YWJs
ZU1hc2sgPSBjb2xvcldyaXRhYmxlTWFzayAmICh+TVRMQ29sb3JXcml0ZU1hc2tBbHBoYSk7CiAg
ICAgfQpAQCAtNzg4LDQxICs4NTksNDEgQEAgTVRMQ29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRD
b2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRsRm9ybWF0LCBib29sICoKICAgICB7
CiAgICAgICAgIGlmIChpbnRlbmRlZEZvcm1hdC5yZWRCaXRzID09IDAgJiYgYWN0dWFsRm9ybWF0
LnJlZEJpdHMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlzRm9ybWF0RW11bGF0ZWQgPSB0cnVl
OworICAgICAgICAgICAgZW11bGF0ZWRDaGFubmVscyA9IHRydWU7CiAgICAgICAgICAgICAvLyBE
aXNhYmxlIHJlZCB3cml0ZSB0byB0aGlzIHRleHR1cmUKICAgICAgICAgICAgIGNvbG9yV3JpdGFi
bGVNYXNrID0gY29sb3JXcml0YWJsZU1hc2sgJiAofk1UTENvbG9yV3JpdGVNYXNrUmVkKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoaW50ZW5kZWRGb3JtYXQuZ3JlZW5CaXRzID09IDAgJiYgYWN0
dWFsRm9ybWF0LmdyZWVuQml0cykKICAgICAgICAgewotICAgICAgICAgICAgaXNGb3JtYXRFbXVs
YXRlZCA9IHRydWU7CisgICAgICAgICAgICBlbXVsYXRlZENoYW5uZWxzID0gdHJ1ZTsKICAgICAg
ICAgICAgIC8vIERpc2FibGUgZ3JlZW4gd3JpdGUgdG8gdGhpcyB0ZXh0dXJlCiAgICAgICAgICAg
ICBjb2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYgKH5NVExDb2xvcldyaXRl
TWFza0dyZWVuKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW50ZW5kZWRGb3JtYXQuYmx1ZUJp
dHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQuYmx1ZUJpdHMpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlzRm9ybWF0RW11bGF0ZWQgPSB0cnVlOworICAgICAgICAgICAgZW11bGF0ZWRDaGFubmVscyA9
IHRydWU7CiAgICAgICAgICAgICAvLyBEaXNhYmxlIGJsdWUgd3JpdGUgdG8gdGhpcyB0ZXh0dXJl
CiAgICAgICAgICAgICBjb2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYgKH5N
VExDb2xvcldyaXRlTWFza0JsdWUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgKmlzRW11bGF0
ZWRPdXQgPSBpc0Zvcm1hdEVtdWxhdGVkOworICAgICplbXVsYXRlZENoYW5uZWxzT3V0ID0gZW11
bGF0ZWRDaGFubmVsczsKIAogICAgIHJldHVybiBjb2xvcldyaXRhYmxlTWFzazsKIH0KIAogTVRM
Q29sb3JXcml0ZU1hc2sgR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1h
dCAmbXRsRm9ybWF0KQogewotICAgIC8vIElnbm9yZSBpc0Zvcm1hdEVtdWxhdGVkIGJvb2xlYW4g
dmFsdWUKLSAgICBib29sIGlzRm9ybWF0RW11bGF0ZWQ7Ci0gICAgcmV0dXJuIEdldEVtdWxhdGVk
Q29sb3JXcml0ZU1hc2sobXRsRm9ybWF0LCAmaXNGb3JtYXRFbXVsYXRlZCk7CisgICAgLy8gSWdu
b3JlIGVtdWxhdGVkQ2hhbm5lbHMgYm9vbGVhbiB2YWx1ZQorICAgIGJvb2wgZW11bGF0ZWRDaGFu
bmVsczsKKyAgICByZXR1cm4gR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxGb3JtYXQsICZl
bXVsYXRlZENoYW5uZWxzKTsKIH0KIAogYm9vbCBJc0Zvcm1hdEVtdWxhdGVkKGNvbnN0IG10bDo6
Rm9ybWF0ICZtdGxGb3JtYXQpCiB7Ci0gICAgYm9vbCBpc0Zvcm1hdEVtdWxhdGVkOwotICAgICh2
b2lkKUdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9ybWF0LCAmaXNGb3JtYXRFbXVsYXRl
ZCk7Ci0gICAgcmV0dXJuIGlzRm9ybWF0RW11bGF0ZWQ7CisgICAgYm9vbCBlbXVsYXRlZENoYW5u
ZWxzOworICAgICh2b2lkKUdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9ybWF0LCAmZW11
bGF0ZWRDaGFubmVscyk7CisgICAgcmV0dXJuIGVtdWxhdGVkQ2hhbm5lbHM7CiB9CiAKIE1UTENs
ZWFyQ29sb3IgRW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJDb2xvciBjb2xvciwgTVRM
Q29sb3JXcml0ZU1hc2sgY29sb3JNYXNrKQpAQCAtODM3LDYgKzkwOCwxNTEgQEAgTVRMQ2xlYXJD
b2xvciBFbXVsYXRlZEFscGhhQ2xlYXJDb2xvcihNVExDbGVhckNvbG9yIGNvbG9yLCBNVExDb2xv
cldyaXRlTWFzayBjb2wKICAgICByZXR1cm4gcmU7CiB9CiAKK05TVUludGVnZXIgR2V0TWF4UmVu
ZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0ZXMoaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCit7Cisg
ICAgaWYgKFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5QXBwbGU0XSkKKyAgICB7
CisgICAgICAgIHJldHVybiA2NDsKKyAgICB9CisgICAgZWxzZSBpZiAoW2RldmljZSBzdXBwb3J0
c0ZhbWlseTpNVExHUFVGYW1pbHlBcHBsZTJdKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDMyOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMTY7CisgICAgfQorfQorCitO
U1VJbnRlZ2VyIEdldE1heE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShpZDxNVExEZXZp
Y2U+IGRldmljZSkKK3sKKyAgICBpZiAoW2RldmljZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1p
bHlBcHBsZTJdIHx8IFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5TWFjMV0pCisg
ICAgeworICAgICAgICByZXR1cm4gODsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIDQ7CisgICAgfQorfQorCitib29sIERldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRT
aXplKGlkPE1UTERldmljZT4gZGV2aWNlKQoreworICAgIHJldHVybiBbZGV2aWNlIHN1cHBvcnRz
RmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlMV07Cit9CisKK3N0YXRpYyBOU1VJbnRlZ2VyIGdldE5l
eHRMb2NhdGlvbkZvckZvcm1hdChjb25zdCBGb3JtYXRDYXBzICZjYXBzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNNU0FBLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY3VycmVudFJlbmRlclRh
cmdldFNpemUpCit7CisgICAgYXNzZXJ0KCFjYXBzLmNvbXByZXNzZWQpOworICAgIHVpbnQ4X3Qg
YWxpZ25tZW50ICAgICAgICAgPSBjYXBzLmFsaWdubWVudDsKKyAgICBOU1VJbnRlZ2VyIHBpeGVs
Qnl0ZXMgICAgID0gY2Fwcy5waXhlbEJ5dGVzOworICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlc01T
QUEgPSBjYXBzLnBpeGVsQnl0ZXNNU0FBOworICAgIHBpeGVsQnl0ZXMgICAgICAgICAgICAgICAg
PSBpc01TQUEgPyBwaXhlbEJ5dGVzTVNBQSA6IHBpeGVsQnl0ZXM7CisKKyAgICBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZSA9IChjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSArIChhbGlnbm1lbnQgLSAx
KSkgJiB+KGFsaWdubWVudCAtIDEpOworICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplICs9IHBp
eGVsQnl0ZXM7CisgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplOworfQorCitOU1VJ
bnRlZ2VyIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IoY29u
c3QgTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgKmRlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGV4dCAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZDxNVExEZXZpY2U+IGRldmljZSkKK3sKKyAgICBOU1VJbnRlZ2VyIGN1cnJl
bnRSZW5kZXJUYXJnZXRTaXplID0gMDsKKworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8
IEdldE1heE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShkZXZpY2UpOyBpKyspCisgICAg
eworICAgICAgICBNVExQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCA9IGRlc2NyaXB0b3IuY29sb3JB
dHRhY2htZW50c1tpXS50ZXh0dXJlLnBpeGVsRm9ybWF0OworICAgICAgICBib29sIGlzTXNhYSAg
ICAgICAgICAgICAgICA9IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS50ZXh0dXJlLnNh
bXBsZUNvdW50ID4gMTsKKyAgICAgICAgaWYgKHBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0
SW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9
IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhwaXhlbEZvcm1hdCk7
CisgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAg
Z2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdl
dFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNo
bWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0ID09CisgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0
dGFjaG1lbnQudGV4dHVyZS5waXhlbEZvcm1hdCkKKyAgICB7CisgICAgICAgIGJvb2wgaXNNc2Fh
ID0gZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5zYW1wbGVDb3VudCA+IDE7Cisg
ICAgICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0
ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
Rm9ybWF0Q2FwcyAmY2FwcyA9IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0
Q2FwcygKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJl
LnBpeGVsRm9ybWF0KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKyAg
ICAgICAgICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3Jt
YXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBib29s
IGlzTXNhYSAgICAgICAgICAgID0gZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5z
YW1wbGVDb3VudCA+IDE7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29u
dGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAorICAgICAgICAgICAgICAg
IGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQpOworICAgICAg
ICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorICAgICAgICAgICAgICAgIGdldE5leHRM
b2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudC50ZXh0
dXJlLnBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgYm9vbCBpc01zYWEgICAgICAgICAgICA9IGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFj
aG1lbnQudGV4dHVyZS5zYW1wbGVDb3VudCA+IDE7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRD
YXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAor
ICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZS5waXhl
bEZvcm1hdCk7CisgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAg
ICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJl
bmRlclRhcmdldFNpemUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZTsKK30KK05TVUludGVnZXIgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRGb3JNVExS
ZW5kZXJQaXBlbGluZURlc2NyaXB0b3IoCisgICAgY29uc3QgTVRMUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yICpkZXNjcmlwdG9yLAorICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQsCisgICAgaWQ8
TVRMRGV2aWNlPiBkZXZpY2UpCit7CisgICAgTlNVSW50ZWdlciBjdXJyZW50UmVuZGVyVGFyZ2V0
U2l6ZSA9IDA7CisgICAgYm9vbCBpc01zYWEgICAgICAgICAgICAgICAgICAgICAgICA9IGRlc2Ny
aXB0b3Iuc2FtcGxlQ291bnQgPiAxOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IEdl
dE1heE51bWJlck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShkZXZpY2UpOyBpKyspCisgICAgewor
ICAgICAgICBNVExSZW5kZXJQaXBlbGluZUNvbG9yQXR0YWNobWVudERlc2NyaXB0b3IgKmNvbG9y
ID0gZGVzY3JpcHRvci5jb2xvckF0dGFjaG1lbnRzW2ldOworICAgICAgICBpZiAoY29sb3IucGl4
ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRp
dmVGb3JtYXRDYXBzKGNvbG9yLnBpeGVsRm9ybWF0KTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5k
ZXJUYXJnZXRTaXplID0KKyAgICAgICAgICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQo
Y2FwcywgaXNNc2FhLCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQgPT0gZGVzY3Jp
cHRvci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0KQorICAgIHsKKyAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZh
bGlkKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0KKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMo
ZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1hdCk7CisgICAgICAgICAgICBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9y
Rm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0
YWNobWVudFBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2NyaXB0b3IuZGVwdGhB
dHRhY2htZW50UGl4ZWxGb3JtYXQpOworICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNp
emUgPQorICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01z
YWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVz
Y3JpcHRvci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52
YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBz
KGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnRQaXhlbEZvcm1hdCk7CisgICAgICAgICAgICBj
dXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9u
Rm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZTsKK30KKwogZ2w6
OkJveCBNVExSZWdpb25Ub0dMQm94KGNvbnN0IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKQogewogICAg
IHJldHVybiBnbDo6Qm94KHN0YXRpY19jYXN0PGludD4obXRsUmVnaW9uLm9yaWdpbi54KSwgc3Rh
dGljX2Nhc3Q8aW50PihtdGxSZWdpb24ub3JpZ2luLnkpLApkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvYmxpdC5t
ZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL2JsaXQubWV0YWwKaW5kZXggNDI3MmM0ZjBhODQ4MDA5YTYzMmQ0YWViYzVmYWMx
ZDQ0N2ZmYzJkNy4uMmE5YmI1ZGUzNzQ2YzJjZGFjZjMxZjJlYjEyYTQ5YTMzMTEzNzMxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL3NoYWRlcnMvYmxpdC5tZXRhbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0Lm1ldGFsCkBAIC0zMzQsNyArMzM0
LDcgQEAga2VybmVsIHZvaWQgYmxpdFN0ZW5jaWxUb0J1ZmZlckNTKHVzaG9ydDIgZ0luZGljZXMg
W1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAogfQogCiAvLyBGcmFnbWVudCdzIHN0ZW5jaWwg
b3V0cHV0IGlzIG9ubHkgYXZhaWxhYmxlIHNpbmNlIE1ldGFsIDIuMQotQEAjaWYgX19NRVRBTF9W
RVJTSU9OX18gPj0gMjEwCisjaWYgX19NRVRBTF9WRVJTSU9OX18gPj0gMjEwCiAKIHN0cnVjdCBG
cmFnbWVudFN0ZW5jaWxPdXQKIHsKQEAgLTM5Nyw0ICszOTcsNCBAQCBmcmFnbWVudCBGcmFnbWVu
dERlcHRoU3RlbmNpbE91dCBibGl0RGVwdGhTdGVuY2lsRlMoCiAgICAgICAgICAgICAgICAgICAg
ICAgc3JjU3RlbmNpbFRleHR1cmVDdWJlLCBpbnB1dC50ZXhDb29yZHMsIG9wdGlvbnMuc3JjTGV2
ZWwsIG9wdGlvbnMuc3JjTGF5ZXIpOwogICAgIHJldHVybiByZTsKIH0KLUBAI2VuZGlmICAvLyBf
X01FVEFMX1ZFUlNJT05fXyA+PSAyMTAKKyNlbmRpZiAgLy8gX19NRVRBTF9WRVJTSU9OX18gPj0g
MjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvc2hhZGVycy9jb21tb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCmluZGV4IDY4Yzc3NDUz
NzJiZGZmZTlhOGY5NTk4MTliZWY5MzYxYWZmYWFjYTAuLmU2NjczYjVkYmRmMDFkNDY5OWI2ZmYy
OWQyODYxMGJhYmUxNGNmMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1v
bi5oCkBAIC0xMCw4ICsxMCw4IEBACiAKIC8vIGNsYW5nLWZvcm1hdCBvZmYKICNpZm5kZWYgU0tJ
UF9TVERfSEVBREVSUwotQEAjICAgIGluY2x1ZGUgPHNpbWQvc2ltZC5oPgotQEAjICAgIGluY2x1
ZGUgPG1ldGFsX3N0ZGxpYj4KKyMgICAgaW5jbHVkZSA8c2ltZC9zaW1kLmg+CisjICAgIGluY2x1
ZGUgPG1ldGFsX3N0ZGxpYj4KICNlbmRpZgogCiAjaW5jbHVkZSAiY29uc3RhbnRzLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCmluZGV4
IGRmN2M0Yzk2MjVmMjc3MDEwYmIwNjEwOGEwZGUzMWVjNzk1ZWYyNTUuLjFiNDA4ZDg4OTI0YTAz
YmM3ZDBiZGFkNmZiYjQzYTY2OThjOTJlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1l
dGFsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCkBAIC00LDIyICs0LDIyIEBACiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIC8vIGNvcHlfYnVmZmVyLm1ldGFsOiBpbXBsZW1l
bnRzIGNvbXB1dGUgc2hhZGVyIHRoYXQgY29weSBmb3JtYXR0ZWQgZGF0YSBmcm9tIGJ1ZmZlciB0
byB0ZXh0dXJlLAotLy8gYW5kIGZyb20gdGV4dHVyZSB0byBidWZmZXIuCisvLyBmcm9tIHRleHR1
cmUgdG8gYnVmZmVyIGFuZCBmcm9tIGJ1ZmZlciB0byBidWZmZXIuCiAvLyBOT1RFKGhxbGUpOiBU
aGlzIGZpbGUgaXMgYSBiaXQgaGFyZCB0byByZWFkIGJ1dCB0aGVyZSBhcmUgYSBsb3Qgb2YgcmVw
ZWF0ZWQgd29ya3MsIGFuZCBpdCB3b3VsZAogLy8gYmUgYSBwYWluIHRvIGltcGxlbWVudCB3aXRo
b3V0IHRoZSB1c2Ugb2YgbWFjcm9zLgogLy8KIAotQEAjaW5jbHVkZSA8bWV0YWxfcGFjaz4KKyNp
bmNsdWRlIDxtZXRhbF9wYWNrPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAiZm9y
bWF0X2F1dG9nZW4uaCIKIAogdXNpbmcgbmFtZXNwYWNlIHJ4OjptdGxfc2hhZGVyOwogCi1jb25z
dGFudCBpbnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMTApXV07Citjb25z
dGFudCBpbnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKIAogLyog
LS0tLS0tLS0gY29weSBwaXhlbCBkYXRhIGJldHdlZW4gYnVmZmVyIGFuZCB0ZXh0dXJlIC0tLS0t
LS0tLSovCi1jb25zdGFudCBpbnQga0NvcHlUZXh0dXJlVHlwZSBbW2Z1bmN0aW9uX2NvbnN0YW50
KDIwKV1dOworY29uc3RhbnQgaW50IGtDb3B5VGV4dHVyZVR5cGUgW1tmdW5jdGlvbl9jb25zdGFu
dCgyKV1dOwogY29uc3RhbnQgYm9vbCBrQ29weVRleHR1cmVUeXBlMkQgICAgICA9IGtDb3B5VGV4
dHVyZVR5cGUgPT0ga1RleHR1cmVUeXBlMkQ7CiBjb25zdGFudCBib29sIGtDb3B5VGV4dHVyZVR5
cGUyREFycmF5ID0ga0NvcHlUZXh0dXJlVHlwZSA9PSBrVGV4dHVyZVR5cGUyREFycmF5OwogY29u
c3RhbnQgYm9vbCBrQ29weVRleHR1cmVUeXBlMkRNUyAgICA9IGtDb3B5VGV4dHVyZVR5cGUgPT0g
a1RleHR1cmVUeXBlMkRNdWx0aXNhbXBsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2Zvcm1hdF9hdXRvZ2Vu
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
c2hhZGVycy9mb3JtYXRfYXV0b2dlbi5oCmluZGV4IGExN2VhZDM0YjhkOWU0YTRmNjIzOWMzOGZh
NjlmOGE4N2M0MDU2YzQuLmI5OTFlNDhmNmE3ZGZjNGQyOWU5NGM4YTljNjgwZDI3NWQwY2UzNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL2Zvcm1hdF9hdXRvZ2VuLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aApAQCAtMjQ1LDUgKzI0NSw1IEBAIGVudW0KIAogfQogCi19ICAvLyBuYW1lc3BhY2UgbXRsX3No
YWRlcgotfSAgLy8gbmFtZXNwYWNlIHJ4Cit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5kaWNl
cy5tZXRhbCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsCmluZGV4IDJkODM1M2JhYWNkYjgyZTEzNDhk
MTIwNmFmNDMyZWZlNTBmOTIzNDYuLmVlZDYxZWE4M2JkNjM5OWMxNTNkMDJmN2U2NGJjOTllZThm
MDRmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRp
Y2VzLm1ldGFsCkBAIC01NiwxMCArNTYsMTAgQEAgaW5saW5lIHVpbnQgZ2V0SW5kZXhVbmFsaWdu
ZWRVMzIoY29uc3RhbnQgdWNoYXIgKmlucHV0LCB1aW50IG9mZnNldCwgdWludCBpZHgpCiAgICAg
cmV0dXJuIGlucHV0MCB8IChpbnB1dDEgPDwgOCkgfCAoaW5wdXQyIDw8IDE2KSB8IChpbnB1dDMg
PDwgMjQpOwogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVOFRvVTE2KHVpbnQgaWR4W1t0
aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnNbW2J1ZmZlcigwKV1dLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRbW2J1
ZmZlcigxKV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdXNob3J0
ICpvdXRwdXRbW2J1ZmZlcigyKV1dKQora2VybmVsIHZvaWQgY29udmVydEluZGV4VThUb1UxNih1
aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9ucyBbW2J1
ZmZlcigwKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hh
ciAqaW5wdXQgW1tidWZmZXIoMSldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGV2aWNlIHVzaG9ydCAqb3V0cHV0IFtbYnVmZmVyKDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NP
TlZFUlNJT05fR1VBUkQoaWR4LCBvcHRpb25zKTsKIApAQCAtNzUsMTIgKzc1LDEzIEBAIGtlcm5l
bCB2b2lkIGNvbnZlcnRJbmRleFU4VG9VMTYodWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9n
cmlkXV0sCiAgICAgfQogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMTYoCi0gICAgdWlu
dCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0gICAgY29uc3RhbnQgSW5kZXhDb252
ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAgICBjb25zdGFudCB1Y2hhciAq
aW5wdXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJVbmFsaWdu
ZWQpIF1dLAotICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRBbGlnbmVkW1sgYnVmZmVyKDEpLCBm
dW5jdGlvbl9jb25zdGFudChrU291cmNlQnVmZmVyQWxpZ25lZCkgXV0sCi0gICAgZGV2aWNlIHVz
aG9ydCAqb3V0cHV0W1tidWZmZXIoMildXSkKK2tlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFUxNih1
aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtbYnVmZmVy
KDApXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0
YW50KGtTb3VyY2VCdWZmZXJVbmFsaWduZWQpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnQgdXNob3J0ICppbnB1dEFsaWduZWQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQp
XV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVzaG9ydCAqb3V0cHV0IFtb
YnVmZmVyKDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRp
b25zKTsKIApAQCAtOTYsMTIgKzk3LDEzIEBAIGtlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFUxNigK
ICAgICBvdXRwdXRbaWR4XSA9IHZhbHVlOwogfQogCi1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhV
MzIoCi0gICAgdWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0gICAgY29uc3Rh
bnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwKLSAgICBjb25z
dGFudCB1Y2hhciAqaW5wdXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VC
dWZmZXJVbmFsaWduZWQpIF1dLAotICAgIGNvbnN0YW50IHVpbnQgKmlucHV0QWxpZ25lZFtbIGJ1
ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQpIF1dLAotICAg
IGRldmljZSB1aW50ICpvdXRwdXRbW2J1ZmZlcigyKV1dKQora2VybmVsIHZvaWQgY29udmVydElu
ZGV4VTMyKHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMg
W1tidWZmZXIoMCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hh
ciAqaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rp
b25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlclVuYWxpZ25lZCldXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudCB1aW50ICppbnB1dEFsaWduZWQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFs
aWduZWQpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVpbnQgKm91dHB1
dCBbW2J1ZmZlcigyKV1dKQogewogICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwg
b3B0aW9ucyk7CiAKQEAgLTE0MCw5ICsxNDIsOSBAQCBrZXJuZWwgdm9pZCBnZW5UcmlGYW5JbmRp
Y2VzRnJvbUFycmF5KHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKIAogaW5s
aW5lIHVpbnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50IGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1
dFU4W1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTgpXV0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2W1tmdW5jdGlvbl9jb25zdGFu
dChrVXNlU291cmNlQnVmZmVyVTE2KV1dLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rh
bnQgdWludCAqaW5wdXRVMzJbW2Z1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMzIp
XV0pCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRVOCBbW2Z1
bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVOCldXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRVMTYgW1tmdW5jdGlvbl9jb25zdGFudChrVXNl
U291cmNlQnVmZmVyVTE2KV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdWlu
dCAqaW5wdXRVMzIgW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKV1dKQog
ewogICAgIGlmIChrVXNlU291cmNlQnVmZmVyVTgpCiAgICAgewpAQCAtMTcwLDEzICsxNzIsMTUg
QEAgaW5saW5lIHVpbnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCiAvLyBOT1RFKGhxbGUpOiB0
cmlhbmdsZSBmYW4gaW5kaWNlcyBnZW5lcmF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBwcmltaXRpdmUg
cmVzdGFydC4KIC8vIEdlbmVyYXRlIHRyaWFuZ2xlIGZhbiBpbmRpY2VzIGZyb20gYW4gaW5kaWNl
cyBidWZmZXIuIGluZGV4Q291bnQgb3B0aW9ucyBpbmRpY2F0ZXMgbnVtYmVyCiAvLyBvZiBpbmRp
Y2VzIHN0YXJ0aW5nIGZyb20gdGhlIDNyZC4KLWtlcm5lbCB2b2lkIGdlblRyaUZhbkluZGljZXNG
cm9tRWxlbWVudHMoCi0gICAgdWludCBpZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCi0g
ICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZmZXIoMCldXSwK
LSAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRVOFtbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3Rh
bnQoa1VzZVNvdXJjZUJ1ZmZlclU4KSBdXSwKLSAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2
W1sgYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KSBdXSwK
LSAgICBjb25zdGFudCB1aW50ICppbnB1dFUzMltbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3Rh
bnQoa1VzZVNvdXJjZUJ1ZmZlclUzMikgXV0sCi0gICAgZGV2aWNlIHVpbnQgKm91dHB1dFtbYnVm
ZmVyKDIpXV0pCitrZXJuZWwgdm9pZCBnZW5UcmlGYW5JbmRpY2VzRnJvbUVsZW1lbnRzKHVpbnQg
aWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25z
IFtbYnVmZmVyKDApXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0YW50IHVjaGFyICppbnB1dFU4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVy
VTgpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
IHVzaG9ydCAqaW5wdXRVMTYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMTYpXV0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVpbnQg
KmlucHV0VTMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbYnVm
ZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKV1dLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdWludCAqb3V0cHV0IFtb
YnVmZmVyKDIpXV0pCiB7CiAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRp
b25zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAu
bWV0YWwKaW5kZXggYjNhMzY3NWQ5ZTVkYjliNzM0OTI3YjkyY2E3ZGQ0NzEyN2U1OWY3Ny4uZjIz
MzhiMmY4MmUwNTU2MmE2OGY1NWY3ZmI1ZmRmODBmYjVmOWY0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZ2Vu
X21pcG1hcC5tZXRhbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFsCkBAIC0yMyw4ICsyMyw2IEBA
IHVzaW5nIG5hbWVzcGFjZSByeDo6bXRsX3NoYWRlcjsKIAogI2RlZmluZSBURVhFTF9MT0FEKGlu
ZGV4KSBmbG9hdDQoc1JbaW5kZXhdLCBzR1tpbmRleF0sIHNCW2luZGV4XSwgc0FbaW5kZXhdKQog
Ci0jZGVmaW5lIFRPX0xJTkVBUih0ZXhlbCkgKG9wdGlvbnMuc1JHQiA/IHNSR0J0b0xpbmVhcih0
ZXhlbCkgOiB0ZXhlbCkKLQogI2RlZmluZSBPVVRfT0ZfQk9VTkRfQ0hFQ0soZWRnZVZhbHVlLCB0
YXJnZXRWYWx1ZSwgY29uZGl0aW9uKSBcCiAgICAgKGNvbmRpdGlvbikgPyAoZWRnZVZhbHVlKSA6
ICh0YXJnZXRWYWx1ZSkKIApAQCAtMzIsNyArMzAsNiBAQCBzdHJ1Y3QgR2VuTWlwUGFyYW1zCiB7
CiAgICAgdWludCBzcmNMZXZlbDsKICAgICB1aW50IG51bU1pcExldmVsc1RvR2VuOwotICAgIGJv
b2wgc1JHQjsKIH07CiAKIC8vIE5PVEUoaHFsZSk6IEZvciBudW1NaXBMZXZlbHNUb0dlbiA+IDEs
IHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdGV4dHVyZSBpcyBwb3dlciBvZiB0d28uIElmIGl0
CkBAIC00Niw4ICs0Myw4IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVpbnQgbElu
ZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlM2Q8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDQgW1t0ZXh0
dXJlKDQpXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCBHZW5NaXBQ
YXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSkKIHsKLSAgICB1c2hvcnQzIG1pcFNpemUgID0g
dXNob3J0Myhkc3RNaXAxLmdldF93aWR0aCgpLCBkc3RNaXAxLmdldF9oZWlnaHQoKSwgZHN0TWlw
MS5nZXRfZGVwdGgoKSk7Ci0gICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXBT
aXplLnggJiYgZ0luZGljZXMueSA8IG1pcFNpemUueSAmJiBnSW5kaWNlcy56IDwgbWlwU2l6ZS56
OworICAgIHVzaG9ydDMgbWlwU2l6ZSAgICA9IHVzaG9ydDMoZHN0TWlwMS5nZXRfd2lkdGgoKSwg
ZHN0TWlwMS5nZXRfaGVpZ2h0KCksIGRzdE1pcDEuZ2V0X2RlcHRoKCkpOworICAgIGJvb2wgdmFs
aWRUaHJlYWQgICA9IGdJbmRpY2VzLnggPCBtaXBTaXplLnggJiYgZ0luZGljZXMueSA8IG1pcFNp
emUueSAmJiBnSW5kaWNlcy56IDwgbWlwU2l6ZS56OwogCiAgICAgY29uc3RleHByIHNhbXBsZXIg
dGV4dHVyZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1p
cF9maWx0ZXI6OmxpbmVhcik7CiAKQEAgLTgzLDEwICs4MCw2IEBAIGtlcm5lbCB2b2lkIGdlbmVy
YXRlM0RNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0s
CiAgICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCiAKICAgICAvLyBXcml0ZSB0
byBzaGFyZWQgbWVtb3J5Ci0gICAgaWYgKG9wdGlvbnMuc1JHQikKLSAgICB7Ci0gICAgICAgIHRl
eGVsMSA9IGxpbmVhclRvU1JHQih0ZXhlbDEpOwotICAgIH0KICAgICBURVhFTF9TVE9SRShsSW5k
ZXgsIHRleGVsMSk7CiAKICAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3Ro
cmVhZGdyb3VwKTsKQEAgLTExOSw3ICsxMTIsNyBAQCBrZXJuZWwgdm9pZCBnZW5lcmF0ZTNETWlw
bWFwcyh1aW50IGxJbmRleCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAogCiAgICAg
ICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQgKyB0ZXhlbDUg
KyB0ZXhlbDYgKyB0ZXhlbDcgKyB0ZXhlbDgpIC8gOC4wOwogCi0gICAgICAgIGRzdE1pcDIud3Jp
dGUoVE9fTElORUFSKHRleGVsMSksIGdJbmRpY2VzID4+IDEpOworICAgICAgICBkc3RNaXAyLndy
aXRlKHRleGVsMSwgZ0luZGljZXMgPj4gMSk7CiAKICAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVk
IG1lbW9yeQogICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CkBAIC0xNjUsNyAr
MTU4LDcgQEAga2VybmVsIHZvaWQgZ2VuZXJhdGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJl
YWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwKIAogICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsg
dGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3ICsgdGV4
ZWw4KSAvIDguMDsKIAotICAgICAgICBkc3RNaXAzLndyaXRlKFRPX0xJTkVBUih0ZXhlbDEpLCBn
SW5kaWNlcyA+PiAyKTsKKyAgICAgICAgZHN0TWlwMy53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+
IDIpOwogCiAgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKICAgICAgICAgVEVYRUxf
U1RPUkUobEluZGV4LCB0ZXhlbDEpOwpAQCAtMjExLDYgKzIwNCwzNDggQEAga2VybmVsIHZvaWQg
Z2VuZXJhdGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3Jv
dXBdXSwKIAogICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4
ZWw0ICsgdGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3ICsgdGV4ZWw4KSAvIDguMDsKIAotICAgICAg
ICBkc3RNaXA0LndyaXRlKFRPX0xJTkVBUih0ZXhlbDEpLCBnSW5kaWNlcyA+PiAzKTsKKyAgICAg
ICAgZHN0TWlwNC53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDMpOworICAgIH0KK30KKwora2Vy
bmVsIHZvaWQgZ2VuZXJhdGUyRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5f
dGhyZWFkZ3JvdXBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydDIgZ0lu
ZGljZXMgW1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZTJkPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1dLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRl
PiBkc3RNaXAxIFtbdGV4dHVyZSgxKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAyIFtbdGV4dHVyZSgyKV1dLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6Ondy
aXRlPiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXA0IFtbdGV4dHVyZSg0KV1d
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZv
cHRpb25zIFtbYnVmZmVyKDApXV0pCit7CisgICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9u
cy5zcmNMZXZlbCArIDE7CisgICAgdXNob3J0MiBtaXBTaXplID0KKyAgICAgICAgdXNob3J0Mihz
cmNUZXh0dXJlLmdldF93aWR0aChmaXJzdE1pcExldmVsKSwgc3JjVGV4dHVyZS5nZXRfaGVpZ2h0
KGZpcnN0TWlwTGV2ZWwpKTsKKyAgICBib29sIHZhbGlkVGhyZWFkID0gZ0luZGljZXMueCA8IG1p
cFNpemUueCAmJiBnSW5kaWNlcy55IDwgbWlwU2l6ZS55OworCisgICAgY29uc3RleHByIHNhbXBs
ZXIgdGV4dHVyZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIs
IG1pcF9maWx0ZXI6OmxpbmVhcik7CisKKyAgICAvLyBOT1RFKGhxbGUpOiBVc2Ugc2ltZF9ncm91
cCBmdW5jdGlvbiB3aGVuZXZlciBhdmFpbGFibGUuIFRoYXQgY291bGQgYXZvaWQgYmFycmllciB1
c2UuCisKKyAgICAvLyBVc2Ugc3RydWN0IG9mIGFycmF5IHN0eWxlIHRvIGF2b2lkIGJhbmsgY29u
ZmxpY3QuCisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc1Jba1RocmVhZEdyb3VwWFldOworICAgIHRo
cmVhZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJlYWRncm91cCBmbG9h
dCBzQltrVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Fba1RocmVhZEdy
b3VwWFldOworCisgICAgLy8gLS0tLS0gRmlyc3QgbWlwIGxldmVsIC0tLS0tLS0KKyAgICBmbG9h
dDQgdGV4ZWwxOworICAgIGlmICh2YWxpZFRocmVhZCkKKyAgICB7CisgICAgICAgIGZsb2F0MiB0
ZXhDb29yZHMgPSAoZmxvYXQyKGdJbmRpY2VzKSArIGZsb2F0MigwLjUsIDAuNSkpIC8gZmxvYXQy
KG1pcFNpemUpOworICAgICAgICB0ZXhlbDEgICAgICAgICAgID0gc3JjVGV4dHVyZS5zYW1wbGUo
dGV4dHVyZVNhbXBsZXIsIHRleENvb3JkcywgbGV2ZWwob3B0aW9ucy5zcmNMZXZlbCkpOworCisg
ICAgICAgIC8vIFdyaXRlIHRvIHRleHR1cmUKKyAgICAgICAgZHN0TWlwMS53cml0ZSh0ZXhlbDEs
IGdJbmRpY2VzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxs
IGludmFsaWRhdGUgYWxsIHN1YnNlcXVlbnQgY2hlY2tzCisgICAgICAgIGxJbmRleCA9IDB4ZmZm
ZmZmZmY7CisgICAgfQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMSkK
KyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIFNlY29uZCBtaXAg
bGV2ZWwgLS0tLS0tLS0KKworICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKKyAgICBURVhF
TF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CisKKyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9m
bGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKworICAgIC8vIEluZGV4IG11c3QgYmUgZXZlbgorICAg
IGlmICgobEluZGV4ICYgMHgwOSkgPT0gMCkgIC8vIChsSW5kZXggJiBiMDAxMDAxKSA9PSAwCisg
ICAgeworICAgICAgICBib29sMiBhdEVkZ2UgPSBnSW5kaWNlcyA9PSAobWlwU2l6ZSAtIHVzaG9y
dDIoMSkpOworCisgICAgICAgIC8vICh4KzEsIHkpCisgICAgICAgIC8vIElmIHRoZSB3aWR0aCBv
ZiBtaXAgaXMgMSwgdGV4ZWwyIHdpbGwgZXF1YWwgdG8gdGV4ZWwxOgorICAgICAgICBmbG9hdDQg
dGV4ZWwyID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAx
KSwgYXRFZGdlLngpOworICAgICAgICAvLyAoeCwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWwz
ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyBrVGhyZWFk
R3JvdXBYKSwgYXRFZGdlLnkpOworICAgICAgICAvLyAoeCsxLCB5KzEpCisgICAgICAgIGZsb2F0
NCB0ZXhlbDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCAr
IChrVGhyZWFkR3JvdXBYICsgMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0RWRnZS54IHwgYXRFZGdlLnkpOworCisgICAgICAgIHRleGVsMSA9ICh0ZXhl
bDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworCisgICAgICAgIGRzdE1pcDIu
d3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAxKTsKKworICAgICAgICAvLyBXcml0ZSB0byBzaGFy
ZWQgbWVtb3J5CisgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsKKyAgICB9CisK
KyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIC0tLS0gM3JkIG1pcCBsZXZlbCAtLS0tLS0tLQorICAg
IHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworCisgICAg
Ly8gSW5kZXggbXVzdCBiZSBtdWx0aXBsZSBvZiA0CisgICAgaWYgKChsSW5kZXggJiAweDFiKSA9
PSAwKSAgLy8gKGxJbmRleCAmIGIwMTEwMTEpID09IDAKKyAgICB7CisgICAgICAgIG1pcFNpemUg
ICAgICA9IG1heChtaXBTaXplID4+IDEsIHVzaG9ydDIoMSkpOworICAgICAgICBib29sMiBhdEVk
Z2UgPSAoZ0luZGljZXMgPj4gMSkgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKworICAgICAg
ICAvLyAoeCsxLCB5KQorICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVs
MiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKyAgICAgICAgZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9C
T1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgMiksIGF0RWRnZS54KTsKKyAg
ICAgICAgLy8gKHgsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9CisgICAgICAgICAgICBP
VVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDIgKiBrVGhyZWFk
R3JvdXBYKSwgYXRFZGdlLnkpOworICAgICAgICAvLyAoeCsxLCB5KzEpCisgICAgICAgIGZsb2F0
NCB0ZXhlbDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCAr
ICgyICoga1RocmVhZEdyb3VwWCArIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKworICAgICAgICB0ZXhlbDEgPSAo
dGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKworICAgICAgICBkc3RN
aXAzLndyaXRlKHRleGVsMSwgZ0luZGljZXMgPj4gMik7CisKKyAgICAgICAgLy8gV3JpdGUgdG8g
c2hhcmVkIG1lbW9yeQorICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVsMSk7CisgICAg
fQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMykKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIDR0aCBtaXAgbGV2ZWwgLS0tLS0tLS0K
KyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKwor
ICAgIC8vIEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgOAorICAgIGlmICgobEluZGV4ICYgMHgz
ZikgPT0gMCkgIC8vIChsSW5kZXggJiBiMTExMTExKSA9PSAwCisgICAgeworICAgICAgICBtaXBT
aXplICAgICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQyKDEpKTsKKyAgICAgICAgYm9vbDIg
YXRFZGdlID0gKGdJbmRpY2VzID4+IDIpID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisKKyAg
ICAgICAgLy8gKHgrMSwgeSkKKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0
ZXhlbDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRf
T0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDQpLCBhdEVkZ2UueCk7
CisgICAgICAgIC8vICh4LCB5KzEpCisgICAgICAgIGZsb2F0NCB0ZXhlbDMgPQorICAgICAgICAg
ICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0ICoga1Ro
cmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgrMSwgeSsxKQorICAgICAgICBm
bG9hdDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5k
ZXggKyAoNCAqIGtUaHJlYWRHcm91cFggKyA0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisKKyAgICAgICAgdGV4ZWwx
ID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMyArIHRleGVsNCkgLyA0LjA7CisKKyAgICAgICAg
ZHN0TWlwNC53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDMpOworICAgIH0KK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFRleHR1cmVUeXBlUiwgdHlwZW5hbWUgVGV4dHVyZVR5cGVXPgorc3RhdGlj
IF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSB2b2lkIGdlbmVyYXRlQ3ViZU9yMkRBcnJh
eTJuZEFuZE1vcmVNaXBtYXBzKAorICAgIHVpbnQgbEluZGV4LAorICAgIHVzaG9ydDMgZ0luZGlj
ZXMsCisgICAgVGV4dHVyZVR5cGVSIHNyY1RleHR1cmUsCisgICAgVGV4dHVyZVR5cGVXIGRzdE1p
cDIsCisgICAgVGV4dHVyZVR5cGVXIGRzdE1pcDMsCisgICAgVGV4dHVyZVR5cGVXIGRzdE1pcDQs
CisgICAgdXNob3J0MiBtaXAxU2l6ZSwKKyAgICBmbG9hdDQgbWlwMVRleGVsLAorICAgIHRocmVh
ZGdyb3VwIGZsb2F0ICpzUiwKKyAgICB0aHJlYWRncm91cCBmbG9hdCAqc0csCisgICAgdGhyZWFk
Z3JvdXAgZmxvYXQgKnNCLAorICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzQSwKKyAgICBjb25zdGFu
dCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMpCit7CisgICAgdXNob3J0MiBtaXBTaXplID0gbWlwMVNp
emU7CisgICAgZmxvYXQ0IHRleGVsMSAgID0gbWlwMVRleGVsOworCisgICAgLy8gLS0tLSBTZWNv
bmQgbWlwIGxldmVsIC0tLS0tLS0tCisKKyAgICAvLyBXcml0ZSB0byBzaGFyZWQgbWVtb3J5Cisg
ICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworCisgICAgdGhyZWFkZ3JvdXBfYmFycmll
cihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisKKyAgICAvLyBJbmRleCBtdXN0IGJlIGV2
ZW4KKyAgICBpZiAoKGxJbmRleCAmIDB4MDkpID09IDApICAvLyAobEluZGV4ICYgYjAwMTAwMSkg
PT0gMAorICAgIHsKKyAgICAgICAgYm9vbDIgYXRFZGdlID0gZ0luZGljZXMueHkgPT0gKG1pcFNp
emUgLSB1c2hvcnQyKDEpKTsKKworICAgICAgICAvLyAoeCsxLCB5KQorICAgICAgICAvLyBJZiB0
aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKyAgICAg
ICAgZmxvYXQ0IHRleGVsMiA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQo
bEluZGV4ICsgMSksIGF0RWRnZS54KTsKKyAgICAgICAgLy8gKHgsIHkrMSkKKyAgICAgICAgZmxv
YXQ0IHRleGVsMyA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4
ICsga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAgLy8gKHgrMSwgeSsxKQorICAg
ICAgICBmbG9hdDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9B
RChsSW5kZXggKyAoa1RocmVhZEdyb3VwWCArIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdEVkZ2UueCB8IGF0RWRnZS55KTsKKworICAgICAgICB0ZXhl
bDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKworICAgICAg
ICBkc3RNaXAyLndyaXRlKHRleGVsMSwgZ0luZGljZXMueHkgPj4gMSwgZ0luZGljZXMueik7CisK
KyAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVkIG1lbW9yeQorICAgICAgICBURVhFTF9TVE9SRShs
SW5kZXgsIHRleGVsMSk7CiAgICAgfQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9H
ZW4gPT0gMikKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAtLS0tIDNy
ZCBtaXAgbGV2ZWwgLS0tLS0tLS0KKyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6
bWVtX3RocmVhZGdyb3VwKTsKKworICAgIC8vIEluZGV4IG11c3QgYmUgbXVsdGlwbGUgb2YgNAor
ICAgIGlmICgobEluZGV4ICYgMHgxYikgPT0gMCkgIC8vIChsSW5kZXggJiBiMDExMDExKSA9PSAw
CisgICAgeworICAgICAgICBtaXBTaXplICAgICAgPSBtYXgobWlwU2l6ZSA+PiAxLCB1c2hvcnQy
KDEpKTsKKyAgICAgICAgYm9vbDIgYXRFZGdlID0gKGdJbmRpY2VzLnh5ID4+IDEpID09IChtaXBT
aXplIC0gdXNob3J0MigxKSk7CisKKyAgICAgICAgLy8gKHgrMSwgeSkKKyAgICAgICAgLy8gSWYg
dGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhlbDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisgICAg
ICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FE
KGxJbmRleCArIDIpLCBhdEVkZ2UueCk7CisgICAgICAgIC8vICh4LCB5KzEpCisgICAgICAgIGZs
b2F0NCB0ZXhlbDMgPQorICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVY
RUxfTE9BRChsSW5kZXggKyAyICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKyAgICAgICAg
Ly8gKHgrMSwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWw0ID0gT1VUX09GX0JPVU5EX0NIRUNL
KHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAoMiAqIGtUaHJlYWRHcm91cFggKyAyKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVk
Z2UueSk7CisKKyAgICAgICAgdGV4ZWwxID0gKHRleGVsMSArIHRleGVsMiArIHRleGVsMyArIHRl
eGVsNCkgLyA0LjA7CisKKyAgICAgICAgZHN0TWlwMy53cml0ZSh0ZXhlbDEsIGdJbmRpY2VzLnh5
ID4+IDIsIGdJbmRpY2VzLnopOworCisgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkK
KyAgICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworICAgIH0KKworICAgIGlmIChv
cHRpb25zLm51bU1pcExldmVsc1RvR2VuID09IDMpCisgICAgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gLS0tLSA0dGggbWlwIGxldmVsIC0tLS0tLS0tCisgICAgdGhyZWFkZ3Jv
dXBfYmFycmllcihtZW1fZmxhZ3M6Om1lbV90aHJlYWRncm91cCk7CisKKyAgICAvLyBJbmRleCBt
dXN0IGJlIG11bHRpcGxlIG9mIDgKKyAgICBpZiAoKGxJbmRleCAmIDB4M2YpID09IDApICAvLyAo
bEluZGV4ICYgYjExMTExMSkgPT0gMAorICAgIHsKKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4
KG1pcFNpemUgPj4gMSwgdXNob3J0MigxKSk7CisgICAgICAgIGJvb2wyIGF0RWRnZSA9IChnSW5k
aWNlcy54eSA+PiAyKSA9PSAobWlwU2l6ZSAtIHVzaG9ydDIoMSkpOworCisgICAgICAgIC8vICh4
KzEsIHkpCisgICAgICAgIC8vIElmIHRoZSB3aWR0aCBvZiBtaXAgaXMgMSwgdGV4ZWwyIHdpbGwg
ZXF1YWwgdG8gdGV4ZWwxOgorICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09GX0JPVU5EX0NI
RUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0KSwgYXRFZGdlLngpOworICAgICAgICAv
LyAoeCwgeSsxKQorICAgICAgICBmbG9hdDQgdGV4ZWwzID0KKyAgICAgICAgICAgIE9VVF9PRl9C
T1VORF9DSEVDSyh0ZXhlbDEsIFRFWEVMX0xPQUQobEluZGV4ICsgNCAqIGtUaHJlYWRHcm91cFgp
LCBhdEVkZ2UueSk7CisgICAgICAgIC8vICh4KzEsIHkrMSkKKyAgICAgICAgZmxvYXQ0IHRleGVs
NCA9IE9VVF9PRl9CT1VORF9DSEVDSyh0ZXhlbDIsIFRFWEVMX0xPQUQobEluZGV4ICsgKDQgKiBr
VGhyZWFkR3JvdXBYICsgNCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF0RWRnZS54IHwgYXRFZGdlLnkpOworCisgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEg
KyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQpIC8gNC4wOworCisgICAgICAgIGRzdE1pcDQud3Jp
dGUodGV4ZWwxLCBnSW5kaWNlcy54eSA+PiAzLCBnSW5kaWNlcy56KTsKKyAgICB9Cit9CisKK2tl
cm5lbCB2b2lkIGdlbmVyYXRlQ3ViZU1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhf
aW5fdGhyZWFkZ3JvdXBdXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNob3J0
MyBnSW5kaWNlcyBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVjdWJlPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgw
KV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwg
YWNjZXNzOjp3cml0ZT4gZHN0TWlwMSBbW3RleHR1cmUoMSldXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDIg
W1t0ZXh0dXJlKDIpXV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVj
dWJlPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNjZXNzOjp3cml0
ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zIFtbYnVmZmVyKDApXV0pCit7CisgICAg
dWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7CisgICAgdXNob3J0MiBt
aXAxU2l6ZSA9CisgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lkdGgoZmlyc3RNaXBM
ZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7CisgICAgYm9vbCB2
YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXAxU2l6ZS54ICYmIGdJbmRpY2VzLnkgPCBtaXAx
U2l6ZS55OworCisgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNhbXBsZXIobWFnX2ZpbHRl
cjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6OmxpbmVhcik7CisKKyAg
ICAvLyAtLS0tLSBGaXJzdCBtaXAgbGV2ZWwgLS0tLS0tLQorICAgIGZsb2F0NCBtaXAxVGV4ZWw7
CisgICAgaWYgKHZhbGlkVGhyZWFkKQorICAgIHsKKyAgICAgICAgZmxvYXQyIHRleENvb3JkcyA9
IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkgLyBmbG9hdDIobWlwMVNp
emUpOworICAgICAgICBtaXAxVGV4ZWwgPSBzcmNUZXh0dXJlLnNhbXBsZSh0ZXh0dXJlU2FtcGxl
ciwgY3ViZVRleGNvb3Jkcyh0ZXhDb29yZHMsIGludChnSW5kaWNlcy56KSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKG9wdGlvbnMuc3JjTGV2ZWwpKTsKKwor
ICAgICAgICAvLyBXcml0ZSB0byB0ZXh0dXJlCisgICAgICAgIGRzdE1pcDEud3JpdGUobWlwMVRl
eGVsLCBnSW5kaWNlcy54eSwgZ0luZGljZXMueik7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFsbCBzdWJzZXF1ZW50IGNoZWNrcworICAg
ICAgICBsSW5kZXggPSAweGZmZmZmZmZmOworICAgIH0KKworICAgIGlmIChvcHRpb25zLm51bU1p
cExldmVsc1RvR2VuID09IDEpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gVXNlIHN0cnVjdCBvZiBhcnJheSBzdHlsZSB0byBhdm9pZCBiYW5rIGNvbmZsaWN0LgorICAg
IHRocmVhZGdyb3VwIGZsb2F0IHNSW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0aHJlYWRncm91cCBm
bG9hdCBzR1trVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Jba1RocmVh
ZEdyb3VwWFldOworICAgIHRocmVhZGdyb3VwIGZsb2F0IHNBW2tUaHJlYWRHcm91cFhZXTsKKwor
ICAgIGdlbmVyYXRlQ3ViZU9yMkRBcnJheTJuZEFuZE1vcmVNaXBtYXBzKGxJbmRleCwgZ0luZGlj
ZXMsIHNyY1RleHR1cmUsIGRzdE1pcDIsIGRzdE1pcDMsIGRzdE1pcDQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwMVNpemUsIG1pcDFUZXhlbCwgc1IsIHNH
LCBzQiwgc0EsIG9wdGlvbnMpOworfQorCitrZXJuZWwgdm9pZCBnZW5lcmF0ZTJEQXJyYXlNaXBt
YXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydDMgZ0luZGljZXMgW1t0aHJlYWRfcG9z
aXRpb25faW5fZ3JpZF1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlMmRfYXJyYXk8ZmxvYXQ+IHNyY1RleHR1cmUgW1t0ZXh0dXJlKDApXV0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwgYWNjZXNzOjp3
cml0ZT4gZHN0TWlwMSBbW3RleHR1cmUoMSldXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZTJkX2FycmF5PGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAyIFtb
dGV4dHVyZSgyKV1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
MmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDMgW1t0ZXh0dXJlKDMpXV0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZF9hcnJheTxmbG9hdCwg
YWNjZXNzOjp3cml0ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zIFtbYnVmZmVy
KDApXV0pCit7CisgICAgdWludCBmaXJzdE1pcExldmVsID0gb3B0aW9ucy5zcmNMZXZlbCArIDE7
CisgICAgdXNob3J0MiBtaXAxU2l6ZSA9CisgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRf
d2lkdGgoZmlyc3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVs
KSk7CisgICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXAxU2l6ZS54ICYmIGdJ
bmRpY2VzLnkgPCBtaXAxU2l6ZS55OworCisgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNh
bXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6
OmxpbmVhcik7CisKKyAgICAvLyAtLS0tLSBGaXJzdCBtaXAgbGV2ZWwgLS0tLS0tLQorICAgIGZs
b2F0NCBtaXAxVGV4ZWw7CisgICAgaWYgKHZhbGlkVGhyZWFkKQorICAgIHsKKyAgICAgICAgZmxv
YXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkg
LyBmbG9hdDIobWlwMVNpemUpOworICAgICAgICBtaXAxVGV4ZWwgPQorICAgICAgICAgICAgc3Jj
VGV4dHVyZS5zYW1wbGUodGV4dHVyZVNhbXBsZXIsIHRleENvb3JkcywgZ0luZGljZXMueiwgbGV2
ZWwob3B0aW9ucy5zcmNMZXZlbCkpOworCisgICAgICAgIC8vIFdyaXRlIHRvIHRleHR1cmUKKyAg
ICAgICAgZHN0TWlwMS53cml0ZShtaXAxVGV4ZWwsIGdJbmRpY2VzLnh5LCBnSW5kaWNlcy56KTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGludmFsaWRhdGUg
YWxsIHN1YnNlcXVlbnQgY2hlY2tzCisgICAgICAgIGxJbmRleCA9IDB4ZmZmZmZmZmY7CisgICAg
fQorCisgICAgaWYgKG9wdGlvbnMubnVtTWlwTGV2ZWxzVG9HZW4gPT0gMSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBVc2Ugc3RydWN0IG9mIGFycmF5IHN0eWxlIHRv
IGF2b2lkIGJhbmsgY29uZmxpY3QuCisgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc1Jba1RocmVhZEdy
b3VwWFldOworICAgIHRocmVhZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKyAgICB0
aHJlYWRncm91cCBmbG9hdCBzQltrVGhyZWFkR3JvdXBYWV07CisgICAgdGhyZWFkZ3JvdXAgZmxv
YXQgc0Fba1RocmVhZEdyb3VwWFldOworCisgICAgZ2VuZXJhdGVDdWJlT3IyREFycmF5Mm5kQW5k
TW9yZU1pcG1hcHMobEluZGV4LCBnSW5kaWNlcywgc3JjVGV4dHVyZSwgZHN0TWlwMiwgZHN0TWlw
MywgZHN0TWlwNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
aXAxU2l6ZSwgbWlwMVRleGVsLCBzUiwgc0csIHNCLCBzQSwgb3B0aW9ucyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
c2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0eS5tZXRhbAppbmRleCA5MDVj
MTk2MzUyNzU1ZTAxNDdhZTQyN2M0ODMwNGUwYzYzZmZkMmYxLi5hZDU4NjBmNzUzZjc1NzUxMzBm
NmRiNjMwNjYwMzQ3YTA4NTMyZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9z
aGFkZXJzL3Zpc2liaWxpdHkubWV0YWwKQEAgLTYsNyArNiw3IEBACiAKICNpbmNsdWRlICJjb21t
b24uaCIKIAotY29uc3RhbnQgYm9vbCBrQ29tYmluZVdpdGhFeGlzdGluZ1Jlc3VsdCBbW2Z1bmN0
aW9uX2NvbnN0YW50KDEwMDApXV07Citjb25zdGFudCBib29sIGtDb21iaW5lV2l0aEV4aXN0aW5n
UmVzdWx0IFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKIAogLy8gQ29tYmluZSB0aGUgdmlzaWJp
bGl0eSByZXN1bHQgb2YgY3VycmVudCByZW5kZXIgcGFzcyB3aXRoIHByZXZpb3VzIHZhbHVlIGZy
b20gcHJldmlvdXMgcmVuZGVyCiAvLyBwYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9lbnRyeV9wb2ludHNfZWdsLmNwcAppbmRleCA3NTVi
ZDYxZDdmMmQzMjMzODZlZWViZDc2OGQ5MmUyY2I5MWU2Y2ExLi43ZDVhYzU4NGIxNGRmMmQyMzQ5
YmM0YTk1YWY2OWZkOWViMTA1MWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbC5jcHAKQEAgLTQyOCw4ICs0
MjgsNiBAQCBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIEVHTF9EZXN0cm95Q29udGV4dChFR0xEaXNw
bGF5IGRweSwgRUdMQ29udGV4dCBjdHgpCiAKICAgICBpZiAoY29udGV4dFdhc0N1cnJlbnQpCiAg
ICAgewotICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTih0aHJlYWQsIGRpc3BsYXktPm1ha2VD
dXJyZW50KGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZWdsRGVzdHJveUNvbnRleHQiLCBHZXRDb250ZXh0SWZWYWxpZChk
aXNwbGF5LCBjb250ZXh0KSwgRUdMX0ZBTFNFKTsKICAgICAgICAgU2V0Q29udGV4dEN1cnJlbnQo
dGhyZWFkLCBudWxscHRyKTsKICAgICB9CiAKQEAgLTQ2Niw5ICs0NjQsOSBAQCBFR0xCb29sZWFu
IEVHTEFQSUVOVFJZIEVHTF9NYWtlQ3VycmVudChFR0xEaXNwbGF5IGRweSwKICAgICAvLyBPbmx5
IGNhbGwgbWFrZUN1cnJlbnQgaWYgdGhlIGNvbnRleHQgb3Igc3VyZmFjZXMgaGF2ZSBjaGFuZ2Vk
LgogICAgIGlmIChwcmV2aW91c0RyYXcgIT0gZHJhd1N1cmZhY2UgfHwgcHJldmlvdXNSZWFkICE9
IHJlYWRTdXJmYWNlIHx8IHByZXZpb3VzQ29udGV4dCAhPSBjb250ZXh0KQogICAgIHsKLSAgICAg
ICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4oCi0gICAgICAgICAgICB0aHJlYWQsIGRpc3BsYXktPm1h
a2VDdXJyZW50KHByZXZpb3VzQ29udGV4dCwgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250
ZXh0KSwKLSAgICAgICAgICAgICJlZ2xNYWtlQ3VycmVudCIsIEdldENvbnRleHRJZlZhbGlkKGRp
c3BsYXksIGNvbnRleHQpLCBFR0xfRkFMU0UpOworICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVS
Tih0aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXktPm1ha2VDdXJy
ZW50KHRocmVhZCwgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImVnbE1ha2VDdXJyZW50IiwgR2V0Q29udGV4dElmVmFsaWQo
ZGlzcGxheSwgY29udGV4dCksIEVHTF9GQUxTRSk7CiAKICAgICAgICAgU2V0Q29udGV4dEN1cnJl
bnQodGhyZWFkLCBjb250ZXh0KTsKICAgICB9CkBAIC04MTgsOSArODE2LDkgQEAgRUdMQm9vbGVh
biBFR0xBUElFTlRSWSBFR0xfUmVsZWFzZVRocmVhZCh2b2lkKQogICAgICAgICBpZiAocHJldmlv
dXNEcmF3ICE9IEVHTF9OT19TVVJGQUNFIHx8IHByZXZpb3VzUmVhZCAhPSBFR0xfTk9fU1VSRkFD
RSB8fAogICAgICAgICAgICAgcHJldmlvdXNDb250ZXh0ICE9IEVHTF9OT19DT05URVhUKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTigKLSAgICAgICAgICAgICAg
ICB0aHJlYWQsIHByZXZpb3VzRGlzcGxheS0+bWFrZUN1cnJlbnQocHJldmlvdXNDb250ZXh0LCBu
dWxscHRyLCBudWxscHRyLCBudWxscHRyKSwKLSAgICAgICAgICAgICAgICAiZWdsUmVsZWFzZVRo
cmVhZCIsIG51bGxwdHIsIEVHTF9GQUxTRSk7CisgICAgICAgICAgICBBTkdMRV9FR0xfVFJZX1JF
VFVSTih0aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Rp
c3BsYXktPm1ha2VDdXJyZW50KHRocmVhZCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWdsUmVsZWFzZVRocmVhZCIsIG51bGxw
dHIsIEVHTF9GQUxTRSk7CiAgICAgICAgIH0KICAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4o
dGhyZWFkLCBwcmV2aW91c0Rpc3BsYXktPnJlbGVhc2VUaHJlYWQoKSwgImVnbFJlbGVhc2VUaHJl
YWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXREaXNwbGF5SWZWYWxpZChwcmV2
aW91c0Rpc3BsYXkpLCBFR0xfRkFMU0UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415958</attachid>
            <date>2020-12-10 18:53:18 -0800</date>
            <delta_ts>2020-12-11 10:46:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219759-20201210185310.patch</filename>
            <type>text/plain</type>
            <size>2854922</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggNTM0MzA3Y2YxZTdhOGVjZGRjNDFkZTBjN2E2MjdlMThmMjRjZmI1YS4uYTMzOTA5MzI3ZjMy
ODJmNzYyNWJhMDRjYzg2YmEwYjEwMDY4MWMyMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEwNTIgQEAKKzIwMjAtMTItMTAgIEt5bGUgUGlkZGluZ3RvbiAgPGtwaWRk
aW5ndG9uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGRlZCBhIG5ldyBiYWNrZW5kIGZvciB0cmFu
c2xhdGluZyBHTFNMIGNvbnRlbnQgdG8gTVNMLiBBZGRlZCBmaXhlcywgdXBkYXRlcywgYW5kIHdv
cmthcm91bmRzIGluIHRoZSBvcGVuIHNvdXJjZQorICAgICAgICBtZXRhbCBiYWNrZW5kIGZvciBB
TkdMRS4KKyAgICAgICAKKwlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE5NzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworCVRoaXMgY2hh
bmdlbG9nIGluY2x1ZGVzIGEgV2ViR0wxIGNvbXBsaWFudCB0cmFuc3BpbGVyIGZvciBHTFNMIGNv
bnRlbnQuIFdpdGggdGhpcyBjaGFuZ2UsCisgICAgICAgIHdlIGNhbiBsZXZlcmFnZSB0aGUgYWxy
ZWFkeSBwcmVzZW50IG9wZW4gc291cmNlIHdvcmsgaW4gdGhlIEFOR0xFIHByb2plY3QgdG8gZW5h
YmxlIHdlYmdsIHRvIHJ1biBvbiB0b3Agb2YgTWV0YWwuIAorICAgICAgICBJbiBhZGRpdGlvbiwg
dGhpcyBwYXRjaCBjb250YWlucyBhIG51bWJlciBvZiBmaXhlcyB0byB0aGUgbWV0YWwgYmFja2Vu
ZC4gCisgICAgICAgIAorICAgICAgICBUZXN0OiBUZXN0cyB3ZXJlIHZhbGlkYXRlZCB3aXRoIHRo
ZSBkRVFQIHRlc3Qgc3VpdGUgd2l0aCBBTkdMRSwgaW4gYWRkaXRpb24gdG8gcnVubmluZyBzdGFu
ZGFyZCBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWc6
CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAgICAgICAgKiBpbmNs
dWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmg6CisgICAgICAgICogc3JjL2NvbW1vbi9Qb29sQWxs
b2MuY3BwOgorICAgICAgICAoYW5nbGU6OkFsbG9jYXRpb246OmNoZWNrQWxsb2NMaXN0IGNvbnN0
KToKKyAgICAgICAgKiBzcmMvY29tbW9uL1Bvb2xBbGxvYy5oOgorICAgICAgICAoYW5nbGU6OkFs
bG9jYXRpb246OmNoZWNrQWxsb2MgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21tb24vYXBwbGVf
cGxhdGZvcm1fdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvY29tbW9uL2RlYnVnLmg6CisgICAgICAg
ICogc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNfaW9zLm1tOiBBZGRlZC4KKyAgICAgICAgKGFuZ2xl
OjpHZXRFeGVjdXRhYmxlUGF0aCk6CisgICAgICAgIChhbmdsZTo6R2V0RXhlY3V0YWJsZURpcmVj
dG9yeSk6CisgICAgICAgIChhbmdsZTo6R2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbik6CisgICAg
ICAgIChhbmdsZTo6R2V0Q3VycmVudFRpbWUpOgorICAgICAgICAqIHNyYy9jb21tb24vdXRpbGl0
aWVzLmNwcDoKKyAgICAgICAgKGdsOjpWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAg
KiBzcmMvY29tbW9uL3V0aWxpdGllcy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL0NvZGVHZW4uY3BwOgorICAgICAgICAoc2g6OkNvbnN0cnVjdENvbXBpbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHA6CisgICAgICAgIChzaDo6VENvbXBpbGVyOjpj
aGVja0FuZFNpbXBsaWZ5QVNUKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oOgorICAgICAgICAoc2g6OlRTaEhhbmRsZUJhc2U6OmdldEFzVHJhbnNsYXRvck1l
dGFsRGlyZWN0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVu
aW9uLmNwcDoKKyAgICAgICAgKHNoOjpUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24pOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaDoKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcDoKKyAgICAgICAgKHNo
OjpUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayk6CisgICAgICAgIChzaDo6VEludGVybURlY2xh
cmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24pOgorICAgICAgICAoc2g6OlRJbnRlcm1BZ2dyZWdh
dGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlSW50ZXJuYWwpOgorICAgICAgICAoc2g6OlRJbnRlcm1B
Z2dyZWdhdGVCYXNlOjpyZXBsYWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKToKKyAgICAgICAgKHNo
OjpUSW50ZXJtQWdncmVnYXRlQmFzZTo6aW5zZXJ0Q2hpbGROb2Rlcyk6CisgICAgICAgIChzaDo6
VEludGVybUFnZ3JlZ2F0ZTo6c2hhbGxvd0NvcHkgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9TeW1ib2wuY3BwOgorICAgICAgICAoc2g6OlRGdW5jdGlvbjo6YnVpbGRNYW5nbGVk
TmFtZSBjb25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmg6
CisgICAgICAgIChzaDo6VEZ1bmN0aW9uOjppc0RlZmluZWQgY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dlbi5jcHA6CisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcDoKKyAgICAg
ICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0VuYWJsZWRDb25zdE5hbWUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRF
bmFibGVkQ29uc3ROYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6OnRyYW5zbGF0
ZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWw6Omlu
c2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6cmVwbGFjZUFsbE1haW5EaXNjYXJkVXNlcyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRv
ck1ldGFsOjpjcmVhdGVEaXNjYXJkV3JhcHBlckZ1bmMpOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbDo6ZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNo
OjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCk6CisgICAgICAg
IChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3RO
YW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OkdldFJhc3Rlcml6YXRp
b25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFs
RGlyZWN0OjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKToKKyAgICAgICAgKHNoOjpU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbik6Cisg
ICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0OjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhp
Y3NEcml2ZXJVbmlmb3JtRmllbGRzKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJl
Y3Q6OmdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJlZiBjb25zdCk6CisgICAgICAgIChzaDo6R2V0
TXNsS2V5d29yZHMpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNs
YXRlSW1wbCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0Ojp0cmFuc2xhdGUp
OgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdt
YVN0ZGdsSW52YXJpYW50QWxsKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaDogQWRkZWQuCisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsUmVmbGVjdGlvbjo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6flRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgor
ICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZE9yaWdpbmFsTmFtZSk6
CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6YWRkU2FtcGxlckJpbmRp
bmcpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb246OmFkZFRleHR1cmVC
aW5kaW5nKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjphZGRVbmlm
b3JtQnVmZmVyQmluZGluZyk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlv
bjo6Z2V0T3JpZ2luYWxOYW1lKToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0
aW9uOjpnZXRTYW1wbGVyQmluZGluZ3MgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb246OmdldFRleHR1cmVCaW5kaW5ncyBjb25zdCk6CisgICAgICAgIChzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzIGNvbnN0
KToKKyAgICAgICAgKHNoOjpUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpnZXRTYW1wbGVyQmlu
ZGluZyBjb25zdCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbjo6Z2V0
VGV4dHVyZUJpbmRpbmcgY29uc3QpOgorICAgICAgICAoc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxl
Y3Rpb246OmdldFVuaWZvcm1CdWZmZXJCaW5kaW5nIGNvbnN0KToKKyAgICAgICAgKHNoOjpUcmFu
c2xhdG9yTWV0YWxSZWZsZWN0aW9uOjpyZXNldCk6CisgICAgICAgIChzaDo6VHJhbnNsYXRvck1l
dGFsRGlyZWN0OjplbmFibGVFbXVsYXRlZEluc3RhbmNlSUQpOgorICAgICAgICAoc2g6OlRyYW5z
bGF0b3JNZXRhbERpcmVjdDo6Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxp
Y2l0VHlwZUNhc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVy
KToKKyAgICAgICAgKHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNh
c3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6Vmlld0Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgKHNoOjpDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUpOgorICAg
ICAgICAoc2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUpOgorICAgICAgICAoQWNxdWlyZUZ1bmN0
aW9uRXh0cmFzKToKKyAgICAgICAgKHNoOjpDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZCk6CisgICAg
ICAgIChzaDo6QWRkUGFyYW1ldGVyc0Zyb20pOgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb24p
OgorICAgICAgICAoc2g6OkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0pOgorICAgICAgICAo
c2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMpOgorICAgICAgICAoc2g6OkNsb25lRnVu
Y3Rpb25BbmRDaGFuZ2VSZXR1cm5UeXBlKToKKyAgICAgICAgKHNoOjpHZXRBcmcpOgorICAgICAg
ICAoc2g6OlNldEFyZyk6CisgICAgICAgIChzaDo6R2V0RmllbGRJbmRleCk6CisgICAgICAgIChz
aDo6QWNjZXNzRmllbGQpOgorICAgICAgICAoc2g6OkFjY2Vzc0ZpZWxkQnlJbmRleCk6CisgICAg
ICAgIChzaDo6QWNjZXNzSW5kZXgpOgorICAgICAgICAoc2g6OlN1YlZlY3Rvcik6CisgICAgICAg
IChzaDo6SXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoc2g6OklzVmVjdG9yQmFzaWNUeXBl
KToKKyAgICAgICAgKHNoOjpIYXNTY2FsYXJCYXNpY1R5cGUpOgorICAgICAgICAoSW5pdFR5cGUp
OgorICAgICAgICAoc2g6OkNsb25lVHlwZSk6CisgICAgICAgIChzaDo6SW5uZXJtb3N0VHlwZSk6
CisgICAgICAgIChzaDo6RHJvcENvbHVtbnMpOgorICAgICAgICAoc2g6OkRyb3BPdXRlckRpbWVu
c2lvbik6CisgICAgICAgIChTZXRUeXBlRGltc0ltcGwpOgorICAgICAgICAoc2g6OlNldFZlY3Rv
ckRpbSk6CisgICAgICAgIChzaDo6U2V0TWF0cml4Um93RGltKToKKyAgICAgICAgKHNoOjpIYXNN
YXRyaXhGaWVsZCk6CisgICAgICAgIChzaDo6SGFzQXJyYXlGaWVsZCk6CisgICAgICAgIChzaDo6
Q29lcmNlU2ltcGxlKToKKyAgICAgICAgKHNoOjpBc1R5cGUpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmg6IEFk
ZGVkLgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpTdHJpbmdPYnNlcnZlcik6CisgICAg
ICAgIChzaDo6U3RyaW5nT2JzZXJ2ZXI6Om9ic2VydmUpOgorICAgICAgICAoc2g6OlN0cmluZ09i
c2VydmVyOjpnZXROZWVkbGUgY29uc3QpOgorICAgICAgICAoc2g6OlN0cmluZ09ic2VydmVyOjpy
ZXNldCk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6RXNjYXBlZFNpbmsp
OgorICAgICAgICAoc2g6OkRlYnVnU2luazo6RXNjYXBlZFNpbms6On5Fc2NhcGVkU2luayk6Cisg
ICAgICAgIChzaDo6RGVidWdTaW5rOjpFc2NhcGVkU2luazo6Z2V0KToKKyAgICAgICAgKHNoOjpE
ZWJ1Z1Npbms6OkVzY2FwZWRTaW5rOjpvcGVyYXRvciBUSW5mb1NpbmtCYXNlICYpOgorICAgICAg
ICAoc2g6OkRlYnVnU2luazo6RGVidWdTaW5rKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6Ondh
dGNoKToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6OmVyYXNlKToKKyAgICAgICAgKHNoOjpEZWJ1
Z1Npbms6OnNpemUpOgorICAgICAgICAoc2g6OkRlYnVnU2luazo6c3RyIGNvbnN0KToKKyAgICAg
ICAgKHNoOjpEZWJ1Z1Npbms6OmNfc3RyIGNvbnN0KToKKyAgICAgICAgKHNoOjpEZWJ1Z1Npbms6
OmVzY2FwZSk6CisgICAgICAgIChzaDo6RGVidWdTaW5rOjpvcGVyYXRvcjw8KToKKyAgICAgICAg
KHNoOjpEZWJ1Z1Npbms6Om9uV3JpdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OkRpc2NvdmVyZXI6OkRpc2NvdmVyZXIpOgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRl
cGVuZGVudEZ1bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlcjo6RGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlcik6CisgICAgICAgIChEaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyOjpkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFs
LmNwcDogQWRkZWQuCisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVy
c2VyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEluZGVudGF0aW9uKToKKyAgICAgICAgKEdl
dE9wZXJhdG9yU3RyaW5nKToKKyAgICAgICAgKEdldE9wZXJhdG9yUHJlY2VkZW5jZSk6CisgICAg
ICAgIChHZXRBc3NvY2lhdGl2aXR5KToKKyAgICAgICAgKElzU3ltYm9saWNPcGVyYXRvcik6Cisg
ICAgICAgIChBc1NwZWNpZmljQmluYXJ5Tm9kZSk6CisgICAgICAgIChQYXJlbnRoZXNpemUpOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6Omdyb3VwZWRUcmF2ZXJzZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZpZXIpOgorICAgICAgICAoRW1pdE5hbWUp
OgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YpOgorICAgICAgICAoR2Vu
TWV0YWxUcmF2ZXJzZXI6OmVtaXRCYXJlVHlwZU5hbWUpOgorICAgICAgICAoR2VuTWV0YWxUcmF2
ZXJzZXI6OmVtaXRUeXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RmllbGRE
ZWNsYXJhdGlvbik6CisgICAgICAgIChCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXApOgor
ICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFN0cnVjdERlY2xhcmF0aW9uKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0VmFyaWFibGVEZWNsYXJhdGlvbik6Cisg
ICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2wpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OmVtaXRTaW5nbGVDb25zdGFudCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdENvbnN0YW50VW5pb25BcnJheSk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdENvbnN0YW50VW5pb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
Q29uc3RhbnRVbmlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l6emxl
KToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZCk6CisgICAgICAg
IChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoSXNQb3N0Zml4KToK
KyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5KToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0SWZFbHNlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFN3aXRjaCk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRDYXNlKToKKyAgICAgICAgKEdlbk1l
dGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25TaWduYXR1cmUpOgorICAgICAgICAoR2VuTWV0YWxU
cmF2ZXJzZXI6OmVtaXRGdW5jdGlvblJldHVybik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6ZW1pdEZ1bmN0aW9uUGFyYW1ldGVyKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2
aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6QnVpbGRG
dW5jVG9OYW1lKToKKyAgICAgICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZSk6
CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE9wZW5CcmFjZSk6CisgICAgICAgIChH
ZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdENsb3NlQnJhY2UpOgorICAgICAgICAoUmVxdWlyZXNTZW1p
Y29sb25UZXJtaW5hdG9yKToKKyAgICAgICAgKE5ld2xpbmVQYWQpOgorICAgICAgICAoR2VuTWV0
YWxUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZp
c2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJz
ZXI6OnZpc2l0RGVjbGFyYXRpb24pOgorICAgICAgICAoR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0
TG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGb3JMb29wKToKKyAgICAg
ICAgKEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdFdoaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRh
bFRyYXZlcnNlcjo6dmlzaXREb1doaWxlTG9vcCk6CisgICAgICAgIChHZW5NZXRhbFRyYXZlcnNl
cjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OkVtaXRNZXRhbCk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRW52aXJvbm1lbnRWYXJpYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpyZWFkQm9v
bEVudlZhcik6CisgICAgICAgIChzaDo6cmVhZFN0cmluZ0VudlZhcik6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpSZXdyaXRlcjo6cmV3cml0ZSk6CisgICAgICAgIChzaDo6SG9pc3RDb25zdGFudHMpOgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9I
b2lzdENvbnN0YW50cy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKElkR2Vu
OjpJZEdlbik6CisgICAgICAgIChJZEdlbjo6Y3JlYXRlTmV3TmFtZSk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9MYXlvdXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFJvdW5kVXBUb011bHRpcGxlT2YpOgorICAg
ICAgICAoTGF5b3V0OjpyZXF1aXJlQWxpZ25tZW50KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChMYXlvdXQ6Om9wZXJhdG9yKz0pOgorICAgICAgICAoTGF5
b3V0OjpvcGVyYXRvcio9KToKKyAgICAgICAgKExheW91dDo6b3BlcmF0b3IrIGNvbnN0KToKKyAg
ICAgICAgKExheW91dDo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFNjYWxhckxheW91dE9m
KToKKyAgICAgICAgKHNoOjpPdmVybGF5KToKKyAgICAgICAgKHNoOjpDYW5CZVBhY2tlZCk6Cisg
ICAgICAgIChzaDo6U2V0QmxvY2tTdG9yYWdlKToKKyAgICAgICAgKENvbW1vbkdsc2xTdHJ1Y3RM
YXlvdXRPZik6CisgICAgICAgIChDb21tb25HbHNsTGF5b3V0T2YpOgorICAgICAgICAoc2g6Okds
c2xMYXlvdXRPZik6CisgICAgICAgIChzaDo6R2xzbFN0cnVjdExheW91dE9mKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0Lmg6
IEFkZGVkLgorICAgICAgICAoc2g6OkxheW91dDo6SWRlbnRpdHkpOgorICAgICAgICAoc2g6Okxh
eW91dDo6SW52YWxpZCk6CisgICAgICAgIChzaDo6TGF5b3V0OjpCb3RoKToKKyAgICAgICAgKHNo
OjpNZXRhbExheW91dE9mKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5jcHA6IEFkZGVkLgor
ICAgICAgICAoTWFwcGVyOjpNYXBwZXIpOgorICAgICAgICAoc2g6Ok1hcEZ1bmN0aW9uc1RvRGVm
aW5pdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xz
LmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAg
KHNoOjpNYXBTeW1ib2xzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcDog
QWRkZWQuCisgICAgICAgIChNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmF0IGNvbnN0KToKKyAgICAgICAg
KE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmZpbmQgY29uc3QpOgorICAgICAgICAoTW9kaWZp
ZWRTdHJ1Y3RNYWNoaW5lcmllczo6aW5zZXJ0KToKKyAgICAgICAgKHNoOjpUcnlDcmVhdGVNb2Rp
ZmllZFN0cnVjdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpNb2RpZnlT
dHJ1Y3RDb25maWc6OlByZWRpY2F0ZTo6RmFsc2UpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0cnVj
dENvbmZpZzo6UHJlZGljYXRlOjpUcnVlKToKKyAgICAgICAgKHNoOjpNb2RpZnlTdHJ1Y3RDb25m
aWc6OlNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGUpOgorICAgICAgICAoc2g6Ok1vZGlmeVN0
cnVjdENvbmZpZzo6U2F0dXJhdGVWZWN0b3I6OkZ1bGx5U2F0dXJhdGUpOgorICAgICAgICAoc2g6
Ok1vZGlmeVN0cnVjdENvbmZpZzo6TW9kaWZ5U3RydWN0Q29uZmlnKToKKyAgICAgICAgKHNoOjpN
b2RpZmllZFN0cnVjdE1hY2hpbmVyeTo6Z2V0Q29udmVydGVyKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoR2V0TmFtZSk6CisgICAgICAgIChOYW1lOjpOYW1lKToKKyAgICAgICAgKE5hbWU6
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoTmFtZTo6b3BlcmF0b3IhPSBjb25zdCk6Cisg
ICAgICAgIChOYW1lOjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoTmFtZTo6ZW1wdHkgY29u
c3QpOgorICAgICAgICAoTmFtZTo6YmVnaW5zV2l0aCBjb25zdCk6CisgICAgICAgIChOYW1lOjpl
bWl0IGNvbnN0KToKKyAgICAgICAgKHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5o
OiBBZGRlZC4KKyAgICAgICAgKHNoOjpOYW1lOjpOYW1lKToKKyAgICAgICAgKHNoOjpOYW1lOjpy
YXdOYW1lIGNvbnN0KToKKyAgICAgICAgKHNoOjpOYW1lOjpzeW1ib2xUeXBlIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBpcGVsaW5lOjp1c2VzIGNvbnN0KToKKyAgICAg
ICAgKFBpcGVsaW5lOjpnZXRTdHJ1Y3RUeXBlTmFtZSBjb25zdCk6CisgICAgICAgIChQaXBlbGlu
ZTo6Z2V0U3RydWN0SW5zdGFuY2VOYW1lIGNvbnN0KToKKyAgICAgICAgKEFsbG93UGFja2luZyk6
CisgICAgICAgIChBbGxvd1BhZGRpbmcpOgorICAgICAgICAoQ29tcGFyZUJ5KToKKyAgICAgICAg
KFNhdHVyYXRlVmVjdG9yT2YpOgorICAgICAgICAoUGlwZWxpbmU6OmV4dGVybmFsU3RydWN0TW9k
aWZ5Q29uZmlnIGNvbnN0KToKKyAgICAgICAgKFBpcGVsaW5lOjphbHdheXNSZXF1aXJlc0xvY2Fs
VmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbiBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6aXNQ
aXBlbGluZU91dCBjb25zdCk6CisgICAgICAgIChQaXBlbGluZTo6ZXh0ZXJuYWxBZGRyZXNzU3Bh
Y2UgY29uc3QpOgorICAgICAgICAoUGlwZWxpbmVTdHJ1Y3RzOjptYXRjaGVzIGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlw
ZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChzaDo6UGlwZWxpbmVTY29wZWQ6Om1hdGNoZXMgY29u
c3QpOgorICAgICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1RvdGFsbHlGdWxsIGNvbnN0KToK
KyAgICAgICAgKHNoOjpQaXBlbGluZVNjb3BlZDo6aXNUb3RhbGx5RW1wdHkgY29uc3QpOgorICAg
ICAgICAoc2g6OlBpcGVsaW5lU2NvcGVkOjppc1VuaWZvcm0gY29uc3QpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVk
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6OlByb2dyYW1QcmVsdWRlOjpQcm9ncmFtUHJlbHVk
ZSk6CisgICAgICAgIChzaDo6UHJvZ3JhbVByZWx1ZGU6OmVtaXRHdWFyZCk6CisgICAgICAgIChB
TkdMRV9pc192ZWN0b3I6OlBST0dSQU1fUFJFTFVERV9ERUNMQVJFKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUu
aDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoc2g6
OlJlZHVjZXI6OlJlZHVjZXIpOgorICAgICAgICAoc2g6OlJlZHVjZUludGVyZmFjZUJsb2Nrcyk6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJlbmNlLmg6IEFkZGVkLgorICAg
ICAgICAoc2g6OlJlZjo6UmVmKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChzaDo6UmVm
OjpvcGVyYXRvcjw9IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yPj0gY29uc3Qp
OgorICAgICAgICAoc2g6OlJlZjo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6
Om9wZXJhdG9yPiBjb25zdCk6CisgICAgICAgIChzaDo6UmVmOjpnZXQpOgorICAgICAgICAoc2g6
OlJlZjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgJik6CisgICAg
ICAgIChzaDo6UmVmOjpvcGVyYXRvciBUIGNvbnN0ICYgY29uc3QpOgorICAgICAgICAoc2g6OlJl
Zjo6b3BlcmF0b3IgVCAqKToKKyAgICAgICAgKHNoOjpSZWY6Om9wZXJhdG9yIFQgY29uc3QgKiBj
b25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlQ2FzZURlY2xhcmF0aW9u
cyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlm
aWVyRGVjbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpGaW5kRGVjbGFyZWRHbG9iYWxzOjpG
aW5kRGVjbGFyZWRHbG9iYWxzKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgor
ICAgICAgICAoc2g6OlJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyk6CisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxR
dWFsaWZpZXJEZWNscy5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpJbnZhcmlhbnRzOjppbnNlcnQp
OgorICAgICAgICAoc2g6OkludmFyaWFudHM6OmNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6UmV3cml0ZXI6Om1heWJlQ3JlYXRlTmV3TmFt
ZSk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OmNyZWF0ZVJlbmFtZWQpOgorICAgICAgICAoc2g6
OlJld3JpdGVyOjp0cnlHZXRSZW5hbWVkSW1wbCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6OnRy
eUdldFJlbmFtZWQpOgorICAgICAgICAoc2g6OlJld3JpdGVyOjpnZXRSZW5hbWVkT3JPcmlnaW5h
bCk6CisgICAgICAgIChzaDo6UmV3cml0ZXI6Om5lZWRzUmVuYW1pbmdJbXBsIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjo6bmVlZHNSZW5hbWluZyBjb25zdCk6CisgICAgICAgIChzaDo6
UmV3cml0ZXI6OlJld3JpdGVyKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6dmlzaXRTeW1ib2wp
OgorICAgICAgICAoc2g6OlJld3JpdGVyOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAg
ICAgKHNoOjpSZXdyaXRlS2V5d29yZHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaDogQWRkZWQuCisgICAg
ICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVPdXRBcmdzLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZCBj
b25zdCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6bXVsdGlwbGljaXR5IGNvbnN0KToK
KyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjppbnNlcnQpOgorICAgICAgICAoc2g6OlNtYWxs
TXVsdGlTZXQ6OmNsZWFyKToKKyAgICAgICAgKHNoOjpTbWFsbE11bHRpU2V0OjplbXB0eSBjb25z
dCk6CisgICAgICAgIChzaDo6U21hbGxNdWx0aVNldDo6dW5pcXVlU2l6ZSBjb25zdCk6CisgICAg
ICAgIChzaDo6U21hbGxNdWx0aVNldDo6ZmluZE11dGFibGUpOgorICAgICAgICAoc2g6OkdldFZh
cmlhYmxlKToKKyAgICAgICAgKHNoOjpSZXdyaXRlcjo6UmV3cml0ZXIpOgorICAgICAgICAoc2g6
OlJld3JpdGVPdXRBcmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaDogQWRkZWQuCisgICAgICAgICogc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGlu
ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpQaXBlbGluZVN0cnVjdEluZm86OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkV4ZWMpOgorICAg
ICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmV4ZWMpOgorICAgICAgICAo
c2g6OkdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6OmNyZWF0ZUludGVybmFsUGlwZWxpbmVTdHJ1Y3Qp
OgorICAgICAgICAoc2g6OkNyZWF0ZVBpcGVsaW5lTWFpbkxvY2FsVmFyKToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52OjpQaXBlbGluZUZ1bmN0aW9uRW52KToKKyAgICAgICAgKHNo
OjpQaXBlbGluZUZ1bmN0aW9uRW52Ojppc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbiBjb25zdCk6
CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6aXNVcGRhdGVkUGlwZWxpbmVGdW5j
dGlvbiBjb25zdCk6CisgICAgICAgIChzaDo6UGlwZWxpbmVGdW5jdGlvbkVudjo6Z2V0VXBkYXRl
ZEZ1bmN0aW9uKToKKyAgICAgICAgKHNoOjpQaXBlbGluZUZ1bmN0aW9uRW52OjpjcmVhdGVVcGRh
dGVkRnVuY3Rpb25Qcm90b3R5cGUpOgorICAgICAgICAoc2g6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rp
b25zOjpUaHJlYWRQaXBlbGluZSk6CisgICAgICAgIChzaDo6VXBkYXRlUGlwZWxpbmVGdW5jdGlv
bnM6OlVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKToKKyAgICAgICAgKHNoOjpVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9uczo6Z2V0SW50ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAgICAgICAgKHNoOjpV
cGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6Z2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlhYmxlKToKKyAg
ICAgICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXROb25NYWluKToKKyAgICAg
ICAgKHNoOjpVcGRhdGVQaXBlbGluZUZ1bmN0aW9uczo6dmlzaXRNYWluKToKKyAgICAgICAgKHNo
OjpVcGRhdGVQaXBlbGluZVN5bWJvbHMpOgorICAgICAgICAoc2g6OlJld3JpdGVQaXBlbGluZSk6
CisgICAgICAgIChzaDo6UmV3cml0ZVBpcGVsaW5lcyk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaDogQWRk
ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHA6IEFkZGVkLgorICAgICAgICAo
c2g6OklzT3V0UGFyYW0pOgorICAgICAgICAoc2g6OklzVmVjdG9yQWNjZXNzKToKKyAgICAgICAg
KHNoOjpJc0Fzc2lnbkVxdWFsc1NpZ24pOgorICAgICAgICAoc2g6OklzQ29tcG91bmRBc3NpZ24p
OgorICAgICAgICAoc2g6OlJldHVybnNSZWZlcmVuY2UpOgorICAgICAgICAoc2g6OkRlY29tcG9z
ZUNvbXBvdW5kQXNzaWdubWVudCk6CisgICAgICAgIChzaDo6UmV3cml0ZXIxOjpSZXdyaXRlcjEp
OgorICAgICAgICAoc2g6OlJld3JpdGVyMjo6cmVxdWlyZXNBZGRyZXNzaW5nIGNvbnN0KToKKyAg
ICAgICAgKHNoOjpSZXdyaXRlcjI6OlJld3JpdGVyMik6CisgICAgICAgIChzaDo6UmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmg6
IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KHNoOjpJc0luZGV4KToKKyAgICAgICAgKHNoOjpWaWV3QmluYXJ5Q2hhaW4pOgorICAgICAgICAo
c2g6OlByZVBhc3M6OlByZVBhc3MpOgorICAgICAgICAoc2g6OlByZVBhc3M6OnJlYXNzb2NpYXRl
UmlnaHQpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6U2VwYXJhdG9yKToKKyAgICAgICAgKHNo
OjpTZXBhcmF0b3I6OnB1c2hTdG10KToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmlzVGVybWlu
YWxFeHByKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OnB1bGxNYXBwZWRFeHByKToKKyAgICAg
ICAgKHNoOjpTZXBhcmF0b3I6OmlzU3RhbmRhbG9uZUV4cHIpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaEJpbmRpbmcpOgorICAgICAgICAoc2g6OlNlcGFyYXRvcjo6cHVzaFN0YWNrcyk6
CisgICAgICAgIChzaDo6U2VwYXJhdG9yOjpwb3BTdGFja3MpOgorICAgICAgICAoc2g6OlNlcGFy
YXRvcjo6cHVzaFN0bXRzSW50b0Jsb2NrKToKKyAgICAgICAgKHNoOjpTZXBhcmF0b3I6OmJ1aWxk
QmxvY2tXaXRoVGFpbEFzc2lnbik6CisgICAgICAgIChzaDo6U2VwYXJhdGVDb21wb3VuZEV4cHJl
c3Npb25zKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChzaDo6U2VwYXJh
dG9yOjpTZXBhcmF0b3IpOgorICAgICAgICAoc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9T
a2lwcGluZ1RyYXZlcnNlci5oOiBBZGRlZC4KKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNl
cjo6U2tpcHBpbmdUcmF2ZXJzZXIpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdFN3aXp6bGUpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkpOgorICAgICAgICAoc2g6OlNr
aXBwaW5nVHJhdmVyc2VyOjp2aXNpdElmRWxzZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2
ZXJzZXI6OnZpc2l0U3dpdGNoKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlz
aXRDYXNlKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0
ZSk6CisgICAgICAgIChzaDo6U2tpcHBpbmdUcmF2ZXJzZXI6OnZpc2l0QmxvY2spOgorICAgICAg
ICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKToKKyAgICAgICAgKHNo
OjpTa2lwcGluZ1RyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpTa2lwcGluZ1Ry
YXZlcnNlcjo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoc2g6OlNraXBwaW5nVHJhdmVyc2VyOjp2
aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcDogQWRkZWQuCisg
ICAgICAgIChTdHJ1Y3RGaW5kZXI6OlN0cnVjdEZpbmRlcik6CisgICAgICAgIChTdHJ1Y3RGaW5k
ZXI6OkZpbmRTdHJ1Y3RzKToKKyAgICAgICAgKFRlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyk6Cisg
ICAgICAgIChUZW1wbGF0ZUFyZzo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChUZW1wbGF0
ZUFyZzo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1l
OjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpv
cGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmVtcHR5
IGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpjbGVhcik6CisgICAg
ICAgIChTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUgY29uc3QpOgorICAgICAgICAo
U3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmFzc2lnbik6CisgICAgICAgIChTeW1ib2xFbnY6OlN5
bWJvbEVudik6CisgICAgICAgIChTeW1ib2xFbnY6OnJlbWFwIGNvbnN0KToKKyAgICAgICAgKFN5
bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVybG9hZEltcGwpOgorICAgICAgICAoU3ltYm9sRW52Ojpn
ZXRGdW5jdGlvbk92ZXJsb2FkKToKKyAgICAgICAgKFN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3Zl
cmxvYWQpOgorICAgICAgICAoU3ltYm9sRW52OjpuZXdTdHJ1Y3R1cmUpOgorICAgICAgICAoU3lt
Ym9sRW52OjpnZXRUZXh0dXJlRW52KToKKyAgICAgICAgKFN5bWJvbEVudjo6Z2V0U2FtcGxlclN0
cnVjdCk6CisgICAgICAgIChTeW1ib2xFbnY6Om1hcmtTcGFjZSk6CisgICAgICAgIChTeW1ib2xF
bnY6OmlzU3BhY2UgY29uc3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKToK
KyAgICAgICAgKFN5bWJvbEVudjo6bWFya0FzUmVmZXJlbmNlKToKKyAgICAgICAgKFN5bWJvbEVu
djo6aXNQb2ludGVyIGNvbnN0KToKKyAgICAgICAgKFN5bWJvbEVudjo6aXNSZWZlcmVuY2UgY29u
c3QpOgorICAgICAgICAoU3ltYm9sRW52OjptYXJrQXNQYWNrZWQpOgorICAgICAgICAoU3ltYm9s
RW52Ojppc1BhY2tlZCBjb25zdCk6CisgICAgICAgIChHZXRUZXh0dXJlQmFzaWNUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUpOgorICAgICAgICAqIHNyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaDogQWRkZWQuCisgICAg
ICAgIChzaDo6VmFyRmllbGQ6OlZhckZpZWxkKToKKyAgICAgICAgKHNoOjpWYXJGaWVsZDo6dmFy
aWFibGUgY29uc3QpOgorICAgICAgICAoc2g6OlZhckZpZWxkOjpmaWVsZCBjb25zdCk6CisgICAg
ICAgIChzaDo6VmFyRmllbGQ6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoc3RkOjpoYXNo
PHNoOjpWYXJGaWVsZD46Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc2g6OlRlbXBsYXRl
QXJnOjpraW5kIGNvbnN0KToKKyAgICAgICAgKHNoOjpUZW1wbGF0ZUFyZzo6dmFsdWUgY29uc3Qp
OgorICAgICAgICAoc2g6OlN5bWJvbEVudjo6c3ltYm9sVGFibGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKHNoOjpCdWlsZEdyYXBoSW1wbCk6CisgICAgICAgIChzaDo6
VG9wb3NvcnQpOgorICAgICAgICAoc2g6OkNyZWF0ZVN0cnVjdEVxdWFsaXR5RnVuY3Rpb24pOgor
ICAgICAgICAoc2g6OkdldEFzRGVjbGFyZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoc2g6OkZpbmRT
dHJ1Y3RFcXVhbGl0eVVzZTo6RmluZFN0cnVjdEVxdWFsaXR5VXNlKToKKyAgICAgICAgKHNoOjpG
aW5kU3RydWN0RXF1YWxpdHlVc2U6OnVzZVN0cnVjdCk6CisgICAgICAgIChzaDo6VG9wb3NvcnRT
dHJ1Y3RzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoc2g6OldyYXBwZXI6OldyYXBwZXIpOgorICAgICAgICAoc2g6OldyYXBwZXI6OnZp
c2l0TWFpbik6CisgICAgICAgIChzaDo6V3JhcE1haW4pOgorICAgICAgICAqIHNyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHA6
IEFkZGVkLgorICAgICAgICAoc2g6OmdldEJhc2ljTWV0YWxTdHJpbmcpOgorICAgICAgICAoc2g6
OmdldEJ1aWx0SW5NZXRhbFR5cGVOYW1lU3RyaW5nKToKKyAgICAgICAgKHNoOjpHZXRNZXRhbFR5
cGVOYW1lKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxVdGlscy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yVnVsa2FuLmNwcDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBl
cy5oOgorICAgICAgICAoc2g6OlRUeXBlOjppc1JhbmswIGNvbnN0KToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHA6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwOgorICAg
ICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5j
cHA6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dp
dGNoRmFsbFRocm91Z2guY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwOgorICAgICAgICAoc2g6OlNpbXBsaWZ5
TG9vcENvbmRpdGlvbnMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvQXNOb2RlLmg6IEFkZGVkLgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtTm9kZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50
ZXJtVHlwZWQ+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVN5bWJv
bD46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQ29uc3RhbnRVbmlv
bj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGU+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8VEludGVybVByZXByb2Nl
c3NvckRpcmVjdGl2ZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
U3dpenpsZT46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtQmluYXJ5
Pjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1VbmFyeT46OmV4ZWMp
OgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtVGVybmFyeT46OmV4ZWMpOgorICAg
ICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJtSWZFbHNlPjo6ZXhlYyk6CisgICAgICAgIChz
aDo6cHJpdjo6QXNOb2RlPFRJbnRlcm1Td2l0Y2g+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2
OjpBc05vZGU8VEludGVybUNhc2U+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpBc05vZGU8
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbj46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFz
Tm9kZTxUSW50ZXJtQWdncmVnYXRlPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2Rl
PFRJbnRlcm1CbG9jaz46OmV4ZWMpOgorICAgICAgICAoc2g6OnByaXY6OkFzTm9kZTxUSW50ZXJt
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24+OjpleGVjKToKKyAgICAgICAgKHNoOjpwcml2OjpB
c05vZGU8VEludGVybURlY2xhcmF0aW9uPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNO
b2RlPFRJbnRlcm1Mb29wPjo6ZXhlYyk6CisgICAgICAgIChzaDo6cHJpdjo6QXNOb2RlPFRJbnRl
cm1CcmFuY2g+OjpleGVjKToKKyAgICAgICAgKHNoOjphc05vZGUpOgorICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3Bw
OgorICAgICAgICAoc2g6OkludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbCBj
b25zdCk6CisgICAgICAgIChzaDo6SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaCBjb25z
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5v
ZGVQYXR0ZXJuTWF0Y2hlci5oOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaDoKKyAgICAgICAgKiBzcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoc2g6OkFsbEJpdHMpOgorICAgICAgICAoc2g6OkFueUJpdHMpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRHJvcCBjb25zdCk6CisgICAgICAgIChzaDo6VEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQ6OnNpbmdsZSBjb25zdCk6CisgICAgICAgIChzaDo6IGNvbnN0KToK
KyAgICAgICAgKHNoOjpQcmVSZXN1bHQ6OlByZVJlc3VsdCk6CisgICAgICAgIChzaDo6UHJlUmVz
dWx0OjpvcGVyYXRvcj0pOgorICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6OlBvc3RSZXN1bHQpOgor
ICAgICAgICAoc2g6OlBvc3RSZXN1bHQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OlRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
flRJbnRlcm1SZWJ1aWxkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50
RnVuY3Rpb24gY29uc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnRO
b2RlIGNvbnN0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6cmVidWlsZFJvb3QpOgor
ICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZSk6CisgICAgICAgIChz
aDo6VEludGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlSW1wbCk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnJlYnVpbGQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2
ZXJzZUFueUFzKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdh
dGVCYXNlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2RlU3RhY2tH
dWFyZDo6Tm9kZVN0YWNrR3VhcmQpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjpOb2Rl
U3RhY2tHdWFyZDo6fk5vZGVTdGFja0d1YXJkKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dHJhdmVyc2VBbnkpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBy
ZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQ2hpbGRyZW4pOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCbG9ja0NoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dHJhdmVyc2VVbmFyeUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4pOgorICAgICAgICAoc2g6OlRJbnRlcm1S
ZWJ1aWxkOjp0cmF2ZXJzZUlmRWxzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVi
dWlsZDo6dHJhdmVyc2VTd2l0Y2hDaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlQ2FzZUNoaWxkcmVuKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbik6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbik6Cisg
ICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxkcmVuKToKKyAgICAg
ICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbik6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUHJlKToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJt
UmVidWlsZDo6dmlzaXRGdW5jdGlvblByb3RvdHlwZVByZSk6CisgICAgICAgIChzaDo6VEludGVy
bVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QmluYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRU
ZXJuYXJ5UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l6emxlUHJl
KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRJZkVsc2VQcmUpOgorICAgICAg
ICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0Q2FzZVByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OnZpc2l0TG9vcFByZSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QnJhbmNo
UHJlKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZSk6
CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUpOgorICAgICAgICAo
c2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZSk6CisgICAgICAgIChzaDo6VElu
dGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSk6CisgICAg
ICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0Q29uc3RhbnRVbmlvblBvc3QpOgorICAgICAgICAoc2g6OlRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdCk6CisgICAgICAgIChzaDo6
VEludGVybVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdCk6CisgICAgICAg
IChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0VW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50
ZXJtUmVidWlsZDo6dmlzaXRCaW5hcnlQb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWls
ZDo6dmlzaXRUZXJuYXJ5UG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
U3dpenpsZVBvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXRjaFBvc3QpOgorICAg
ICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQb3N0KToKKyAgICAgICAgKHNoOjpU
SW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVp
bGQ6OnZpc2l0QnJhbmNoUG9zdCk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OnZpc2l0
RGVjbGFyYXRpb25Qb3N0KToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9j
a1Bvc3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVBvc3Qp
OgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBv
c3QpOgorICAgICAgICAoc2g6OlRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uUG9zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVJlYnVpbGQuaDogQWRkZWQuCisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6
OkJhc2VSZXN1bHQ6Ok11bHRpKToKKyAgICAgICAgKHNoOjpUSW50ZXJtUmVidWlsZDo6UHJlUmVz
dWx0OjpNdWx0aSk6CisgICAgICAgIChzaDo6VEludGVybVJlYnVpbGQ6OlBvc3RSZXN1bHQ6Ok11
bHRpKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvTm9kZVR5
cGUuaDogQWRkZWQuCisgICAgICAgIChzaDo6R2V0Tm9kZVR5cGU6OkdldE5vZGVUeXBlKToKKyAg
ICAgICAgKHNoOjpHZXROb2RlVHlwZTo6b3BlcmF0b3IoKSk6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdXRpbC5jcHA6CisgICAgICAgIChzaDo6SXNPdXRwdXRNZXRhbERpcmVj
dCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oOgorICAgICAgICAq
IHNyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW06CisgICAgICAgIChhbmdsZTo6
R2V0U3lzdGVtSW5mbyk6CisgICAgICAgICogc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19p
b3MuY3BwOgorICAgICAgICAoYW5nbGU6OkdldFN5c3RlbUluZm9faW9zKToKKyAgICAgICAgKiBz
cmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29zLm1tOgorICAgICAgICAoYW5nbGU6Okdl
dFN5c3RlbUluZm9fbWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvQ2Fwcy5jcHA6CisgICAg
ICAgIChnbDo6R2V0Rm9ybWF0U3VwcG9ydEJhc2UpOgorICAgICAgICAoZ2w6OkRldGVybWluZUFT
VENMRFJUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChnbDo6RGV0ZXJtaW5lRGVwdGhUZXh0dXJl
QU5HTEVTdXBwb3J0KToKKyAgICAgICAgKGdsOjpEZXRlcm1pbmVEZXB0aFRleHR1cmVPRVNTdXBw
b3J0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5jcHA6CisgICAgICAgIChlZ2w6
OkRpc3BsYXk6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvRGlzcGxheS5o
OgorICAgICAgICAqIHNyYy9saWJBTkdMRS9Qcm9ncmFtLmg6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL1Byb2dyYW1FeGVjdXRhYmxlLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2RyaXZlcl91dGlscy5jcHA6CisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5oOgorICAgICAgICAocng6Oklz
TWFjKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5t
bTogQ29waWVkIGZyb20gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2RyaXZlcl91dGlsc19tYWMubW0uCisgICAgICAgIChyeDo6R2V0aU9TVmVyc2lvbik6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMubW06CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmg6IEFkZGVk
LgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNw
cDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5j
dGlvbnMuaDogQWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9E
aXNwbGF5Q0dMLm1tOgorICAgICAgICAocng6OkRpc3BsYXlDR0w6OmluaXRpYWxpemUpOgorICAg
ICAgICAocng6OkRpc3BsYXlDR0w6OmlzVmFsaWROYXRpdmVXaW5kb3cgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tOgorICAgICAg
ICAocng6OkRpc3BsYXlFQUdMOjppbml0aWFsaXplKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFH
TDo6dGVybWluYXRlKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5RUFHTDo6aXNWYWxpZE5hdGl2ZVdp
bmRvdyBjb25zdCk6CisgICAgICAgIChyeDo6RGlzcGxheUVBR0w6OmdlbmVyYXRlRXh0ZW5zaW9u
cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1
bmN0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9FQUdMRnVuY3Rpb25zLm1tOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbToKKyAgICAgICAgKHJ4OjpJT1N1cmZh
Y2VTdXJmYWNlRUFHTDo6SU9TdXJmYWNlU3VyZmFjZUVBR0wpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VFQUdMOjpiaW5kVGV4SW1hZ2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VFQUdMOjpyZWxlYXNlVGV4SW1hZ2UpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcDoKKyAgICAgICAgKGFu
Z2xlOjpHZXRMb2FkRnVuY3Rpb25zTWFwKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQlVJTEQuZ246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0J1ZmZlck10bC5oOgorICAgICAgICAocng6OkJ1ZmZlck10bDo6Z2V0Q2xpZW50U2hhZG93Q29w
eURhdGEpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwu
bW06CisgICAgICAgIChyeDo6QnVmZmVyTXRsOjpzZXREYXRhKToKKyAgICAgICAgKHJ4OjpCdWZm
ZXJNdGw6Om1hcFJhbmdlKToKKyAgICAgICAgKHJ4OjpCdWZmZXJNdGw6OnNldERhdGFJbXBsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwubW06Cisg
ICAgICAgIChyeDo6Q29tcGlsZXJNdGw6OmdldFRyYW5zbGF0b3JPdXRwdXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oOgorICAg
ICAgICAocng6OkNvbnRleHRNdGw6OmdldFByb2dyYW0gY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OkNvbnRleHRNdGwpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmluaXRpYWxpemUp
OgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmVuc3VyZUluY29tcGxldGVUZXh0dXJlc0NyZWF0
ZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmRyYXdUcmlGYW5BcnJheXNXaXRoQmFzZVZl
cnRleCk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c0xlZ2FjeSk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0xpbmVMb29wQXJyYXlzKToKKyAgICAgICAg
KHJ4OjpDb250ZXh0TXRsOjpkcmF3QXJyYXlzSW1wbCk6CisgICAgICAgIChyeDo6Q29udGV4dE10
bDo6ZHJhd1RyaUZhbkVsZW1lbnRzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3TGlu
ZUxvb3BFbGVtZW50cyk6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZHJhd0VsZW1lbnRzU2lt
cGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
RWxlbWVudHNJbXBsKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNCYXNl
VmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5jZWRC
YXNlVmVydGV4KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbnN0YW5j
ZWRCYXNlVmVydGV4QmFzZUluc3RhbmNlKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpkcmF3
UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmV4ZWNE
cmF3SW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Omluc2VydEV2ZW50TWFya2VyKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpwdXNoR3JvdXBNYXJrZXIpOgorICAgICAgICAocng6
OkNvbnRleHRNdGw6OmludmFsaWRhdGVDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKToK
KyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6OnBvcHVsYXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJT
ZXQpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uRW5kVHJhbnNmb3JtRmVlZGJhY2spOgor
ICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAg
ICAgIChyeDo6Q29udGV4dE10bDo6Z2V0TmF0aXZlRm9ybWF0Q2FwcyBjb25zdCk6CisgICAgICAg
IChyeDo6Q29udGV4dE10bDo6ZW5kUmVuZGVyRW5jb2RpbmcpOgorICAgICAgICAocng6OkNvbnRl
eHRNdGw6OmZsdXNoQ29tbWFuZEJ1ZmVyKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpnZXRS
ZW5kZXJQYXNzQ29tbWFuZEVuY29kZXIpOgorICAgICAgICAocng6OkNvbnRleHRNdGw6OmdldFRl
eHR1cmVSZW5kZXJDb21tYW5kRW5jb2Rlcik6CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6ZW5z
dXJlQ29tbWFuZEJ1ZmZlclJlYWR5KToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbkJhY2ti
dWZmZXJSZXNpemVkKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5
QmVnYW4pOgorICAgICAgICAocng6OkNvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlFbmRlZCk6
CisgICAgICAgIChyeDo6Q29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeURlc3Ryb3llZCk6Cisg
ICAgICAgIChyeDo6Q29udGV4dE10bDo6c2V0dXBEcmF3KToKKyAgICAgICAgKHJ4OjpDb250ZXh0
TXRsOjpoYW5kbGVEaXJ0eUFjdGl2ZVRleHR1cmVzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRs
OjpoYW5kbGVEaXJ0eURlZmF1bHRBdHRyaWJzKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpo
YW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKToKKyAgICAgICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5k
bGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzRW11bGF0aW9uKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKToKKyAgICAg
ICAgKHJ4OjpDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKToKKyAgICAgICAgKiBz
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tOgorICAgICAgICAocng6OkdldERl
cHRoU2l6ZSk6CisgICAgICAgIChyeDo6R2V0U3RlbmNpbFNpemUpOgorICAgICAgICAocng6OkRp
c3BsYXlNdGw6OkRpc3BsYXlNdGwpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxp
emVJbXBsKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjp0ZXJtaW5hdGUpOgorICAgICAgICAo
cng6OkRpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKHJ4
OjpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyU3VyZmFjZSk6CisgICAgICAgIChyeDo6RGlzcGxh
eU10bDo6Y3JlYXRlUGJ1ZmZlckZyb21DbGllbnRCdWZmZXIpOgorICAgICAgICAocng6OkRpc3Bs
YXlNdGw6OmdldE1heFN1cHBvcnRlZEVTVmVyc2lvbiBjb25zdCk6CisgICAgICAgIChyeDo6RGlz
cGxheU10bDo6Y3JlYXRlU2hhcmVHcm91cCk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6Z2Vu
ZXJhdGVDb25maWdzKToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjplbnN1cmVDYXBzSW5pdGlh
bGl6ZWQgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNp
b25zIGNvbnN0KToKKyAgICAgICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplVGV4dHVyZUNh
cHMgY29uc3QpOgorICAgICAgICAocng6OkRpc3BsYXlNdGw6OmluaXRpYWxpemVMaW1pdGF0aW9u
cyk6CisgICAgICAgIChyeDo6RGlzcGxheU10bDo6aW5pdGlhbGl6ZUZlYXR1cmVzKToKKyAgICAg
ICAgKHJ4OjpEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVyTGlicmFyeSk6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmg6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmdldEF0dGFjaGVkQmFja2J1ZmZlciBjb25zdCk6CisgICAgICAg
ICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tOgorICAgICAg
ICAocng6OkZyYW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bCk6CisgICAgICAgIChyeDo6RnJh
bWVidWZmZXJNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJC
dWZmZXJmdik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVydWl2KToK
KyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJpdik6CisgICAgICAgIChy
eDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpnZXRJbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCBjb25zdCk6CisgICAgICAg
IChyeDo6RnJhbWVidWZmZXJNdGw6OnN5bmNTdGF0ZSk6CisgICAgICAgIChyeDo6RnJhbWVidWZm
ZXJNdGw6Om9uRnJhbWVFbmQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpnZXRSZWFk
YWJsZVZpZXdGb3JSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVyTXRsOjpw
cmVwYXJlUmVuZGVyUGFzcyk6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6Om92ZXJyaWRl
Q2xlYXJDb2xvcik6CisgICAgICAgIChyeDo6RnJhbWVidWZmZXJNdGw6OmNsZWFyV2l0aExvYWRP
cFJlbmRlclBhc3NOb3RTdGFydGVkKToKKyAgICAgICAgKHJ4OjpGcmFtZWJ1ZmZlck10bDo6Y2xl
YXJXaXRoTG9hZE9wUmVuZGVyUGFzc1N0YXJ0ZWQpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpnZXRDb3JyZWN0RmxpcHBlZFJlYWRBcmVhIGNvbnN0KToKKyAgICAgICAgKHJ4OjpGcmFt
ZWJ1ZmZlck10bDo6cmVhZFBpeGVsc0ltcGwgY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVm
ZmVyTXRsOjpyZWFkUGl4ZWxzVG9QQk8gY29uc3QpOgorICAgICAgICAocng6OkZyYW1lYnVmZmVy
TXRsOjpyZWFkUGl4ZWxzVG9CdWZmZXIgY29uc3QpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLmg6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLm1tOiBBZGRlZC4K
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKToK
KyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjp+SU9TdXJmYWNlU3VyZmFjZU10bCk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZGVzdHJveSk6CisgICAgICAgIChy
eDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChyeDo6SU9TdXJm
YWNlU3VyZmFjZU10bDo6Y3JlYXRlRGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKHJ4OjpJ
T1N1cmZhY2VTdXJmYWNlTXRsOjptYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNl
U3VyZmFjZU10bDo6dW5NYWtlQ3VycmVudCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6c3dhcCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cG9zdFN1YkJ1
ZmZlcik6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6cXVlcnlTdXJmYWNlUG9p
bnRlckFOR0xFKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpiaW5kVGV4SW1h
Z2UpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OnJlbGVhc2VUZXhJbWFnZSk6
CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0U3luY1ZhbHVlcyk6CisgICAg
ICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0TXNjUmF0ZSk6CisgICAgICAgIChyeDo6
SU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0U3dhcEludGVydmFsKToKKyAgICAgICAgKHJ4OjpJT1N1
cmZhY2VTdXJmYWNlTXRsOjpzZXRGaXhlZFdpZHRoKToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VT
dXJmYWNlTXRsOjpzZXRGaXhlZEhlaWdodCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFj
ZU10bDo6Z2V0V2lkdGggY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6
OmdldEhlaWdodCBjb25zdCk6CisgICAgICAgIChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQ
b3N0U3ViQnVmZmVyU3VwcG9ydGVkIGNvbnN0KToKKyAgICAgICAgKHJ4OjpJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IgY29uc3QpOgorICAgICAgICAocng6OklPU3VyZmFjZVN1
cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAocng6OklPU3Vy
ZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKToKKyAgICAgICAg
KHJ4OjpJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNraW5nVGV4dHVyZSk6CisgICAgICAg
IChyeDo6SU9TdXJmYWNlU3VyZmFjZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAg
ICAocng6OklPU3VyZmFjZVN1cmZhY2VNdGw6OmdldFRleHR1cmUpOgorICAgICAgICAocng6OklP
U3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmg6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6
Z2V0WGZiTXNsU291cmNlIGNvbnN0KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUHJvZ3JhbU10bC5tbToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpQcm9ncmFtTXRs
KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCk6CisgICAgICAgIChyeDo6
UHJvZ3JhbU10bDo6cmVzZXQpOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNhdmVUcmFuc2xh
dGVkU2hhZGVycyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bG9hZFRyYW5zbGF0ZWRTaGFk
ZXJzKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsb2FkKToKKyAgICAgICAgKHJ4OjpQcm9n
cmFtTXRsOjpzYXZlKToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRsOjpsaW5rKToKKyAgICAgICAg
KHJ4OjpQcm9ncmFtTXRsOjpsaW5rSW1wbFNwaXJ2KToKKyAgICAgICAgKHJ4OjpQcm9ncmFtTXRs
OjpsaW5rSW1wbERpcmVjdCk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6bGlua0ltcGwpOgor
ICAgICAgICAocng6OlByb2dyYW1NdGw6OmxpbmtUcmFuc2xhdGVkU2hhZGVycyk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6aW5pdERlZmF1bHRVbmlmb3JtQmxvY2tzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpyZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nrc01lbW9yeSk6CisgICAgICAg
IChyeDo6UHJvZ3JhbU10bDo6Z2V0U3BlY2lhbGl6ZWRTaGFkZXIpOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OmxvYWREZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8pOgorICAgICAgICAocng6OlBy
b2dyYW1NdGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1N
dGw6OmxvYWRTaGFkZXJJbnRlcm5hbEluZm8pOgorICAgICAgICAocng6OlByb2dyYW1NdGw6OnNl
dHVwRHJhdyk6CisgICAgICAgIChyeDo6UHJvZ3JhbU10bDo6dXBkYXRlVGV4dHVyZXMpOgorICAg
ICAgICAocng6OlByb2dyYW1NdGw6OnVwZGF0ZVVuaWZvcm1CdWZmZXJzKToKKyAgICAgICAgKHJ4
OjpQcm9ncmFtTXRsOjpiaW5kVW5pZm9ybUJ1ZmZlcnNUb0Rpc2NyZXRlU2xvdHMpOgorICAgICAg
ICAocng6OlByb2dyYW1NdGw6OmVuY29kZVVuaWZvcm1CdWZmZXJzSW5mb0FyZ3VtZW50QnVmZmVy
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaDoKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW06CisgICAgICAg
IChyeDo6UXVlcnlNdGw6OlF1ZXJ5TXRsKToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6b25EZXN0
cm95KToKKyAgICAgICAgKHJ4OjpRdWVyeU10bDo6YmVnaW4pOgorICAgICAgICAocng6OlF1ZXJ5
TXRsOjplbmQpOgorICAgICAgICAocng6OlF1ZXJ5TXRsOjp3YWl0QW5kR2V0UmVzdWx0KToKKyAg
ICAgICAgKHJ4OjpRdWVyeU10bDo6aXNSZXN1bHRBdmFpbGFibGUpOgorICAgICAgICAocng6OlF1
ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5kKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbToKKyAgICAgICAgKHJ4OjpSZW5kZXJi
dWZmZXJNdGw6OnJlbGVhc2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6
OnNldFN0b3JhZ2VJbXBsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJidWZmZXJNdGw6OmdldEF0dGFj
aG1lbnRSZW5kZXJUYXJnZXQpOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9SZW5kZXJUYXJnZXRNdGwuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvUmVuZGVyVGFyZ2V0TXRsLm1tOgorICAgICAgICAocng6OlJlbmRlclRhcmdldE10bDo6UmVu
ZGVyVGFyZ2V0TXRsKToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldFdpdGhJbXBs
aWNpdE1TVGV4dHVyZSk6CisgICAgICAgIChyeDo6UmVuZGVyVGFyZ2V0TXRsOjpzZXRUZXh0dXJl
KToKKyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0dXJlKToK
KyAgICAgICAgKHJ4OjpSZW5kZXJUYXJnZXRNdGw6OnJlc2V0KToKKyAgICAgICAgKHJ4OjpSZW5k
ZXJUYXJnZXRNdGw6OmdldFJlbmRlclNhbXBsZXMgY29uc3QpOgorICAgICAgICAocng6OlJlbmRl
clRhcmdldE10bDo6dG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MgY29uc3QpOgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwuaDoKKyAgICAgICAgKHJ4OjpT
aGFkZXJNdGw6OmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24pOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW06CisgICAgICAgIChyeDo6VHJhbnNs
YXRlVGFzazo6VHJhbnNsYXRlVGFzayk6CisgICAgICAgIChyeDo6VHJhbnNsYXRlVGFzazo6Z2V0
UmVzdWx0KToKKyAgICAgICAgKHJ4OjpUcmFuc2xhdGVUYXNrOjpnZXRIYW5kbGUpOgorICAgICAg
ICAocng6OlNoYWRlck10bDo6Y29tcGlsZUltcGxNdGwpOgorICAgICAgICAocng6OlNoYWRlck10
bDo6Y29tcGlsZSk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZh
Y2VNdGwuaDoKKyAgICAgICAgKHJ4OjpTdXJmYWNlTXRsUHJvdG9jb2w6OlN1cmZhY2VNdGxQcm90
b2NvbCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwu
bW06CisgICAgICAgIChyeDo6U3VyZmFjZU10bDo6U3VyZmFjZU10bCk6CisgICAgICAgIChyeDo6
V2luZG93U3VyZmFjZU10bDo6ZW5zdXJlQ3VycmVudERyYXdhYmxlT2J0YWluZWQpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW06CisgICAgICAgIChyeDo6bXRsOjpT
eW5jOjpjbGllbnRXYWl0KToKKyAgICAgICAgKHJ4OjpGZW5jZU5WTXRsOjpvbkRlc3Ryb3kpOgor
ICAgICAgICAocng6OkVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQgY29uc3QpOgorICAgICAg
ICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmg6CisgICAgICAgICog
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW06CisgICAgICAgIChyeDo6
VGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQpOgorICAgICAgICAocng6OlRleHR1cmVN
dGw6OmJpbmRUZXhJbWFnZSk6CisgICAgICAgIChyeDo6VGV4dHVyZU10bDo6cmVsZWFzZVRleElt
YWdlKToKKyAgICAgICAgKHJ4OjpUZXh0dXJlTXRsOjpnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJh
Y2tNdGwuaDoKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6IGNvbnN0KToKKyAg
ICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW06CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OlRyYW5zZm9ybUZlZWRiYWNr
TXRsKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6YmVnaW4pOgorICAgICAg
ICAocng6OlRyYW5zZm9ybUZlZWRiYWNrTXRsOjplbmQpOgorICAgICAgICAocng6OlRyYW5zZm9y
bUZlZWRiYWNrTXRsOjpwYXVzZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6
OnJlc3VtZSk6CisgICAgICAgIChyeDo6VHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJpbmRJbmRleGVk
QnVmZmVyKToKKyAgICAgICAgKHJ4OjpUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zm
c2V0cyBjb25zdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRl
eEFycmF5TXRsLm1tOgorICAgICAgICAocng6OlZlcnRleEFycmF5TXRsOjpyZXNldCk6CisgICAg
ICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OnNldHVwRHJhdyk6CisgICAgICAgIChyeDo6VmVydGV4
QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhB
cnJheU10bDo6dXBkYXRlQ2xpZW50QXR0cmlicyk6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlN
dGw6OnN5bmNEaXJ0eUF0dHJpYik6CisgICAgICAgIChyeDo6VmVydGV4QXJyYXlNdGw6OmdldElu
ZGV4QnVmZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydEluZGV4QnVm
ZmVyKToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6c3RyZWFtSW5kZXhCdWZmZXJGcm9t
Q2xpZW50KToKKyAgICAgICAgKHJ4OjpWZXJ0ZXhBcnJheU10bDo6Y29udmVydFZlcnRleEJ1ZmZl
cik6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlw
X2Rpc3RhbmNlLm1kOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5f
bXRsX2Zvcm1hdF90YWJsZS5weToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2J1ZmZlcl9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9idWZmZXJfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6OkJ1ZmZlclBvb2w6OmNv
bW1pdCk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5k
X2J1ZmZlci5oOgorICAgICAgICAocng6Om10bDo6SW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbTo6
cHVzaCk6CisgICAgICAgIChyeDo6bXRsOjpJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtOjpwZWVr
KToKKyAgICAgICAgKHJ4OjptdGw6OkludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW06OmZldGNoKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVy
Lm1tOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6dmFsaWQgY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZlcjo6c2V0V3JpdGVEZXBlbmRlbmN5KToKKyAgICAg
ICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNldFJlYWREZXBlbmRlbmN5KToKKyAgICAgICAg
KHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6Omluc2VydERlYnVnU2lnbik6CisgICAgICAgIChyeDo6
bXRsOjpDb21tYW5kQnVmZmVyOjpwdXNoRGVidWdHcm91cCk6CisgICAgICAgIChyeDo6bXRsOjpD
b21tYW5kQnVmZmVyOjpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRC
dWZmZXI6OnF1ZXVlRXZlbnRTaWduYWwpOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEJ1ZmZl
cjo6c2VydmVyV2FpdEV2ZW50KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6OnNl
dEFjdGl2ZUNvbW1hbmRFbmNvZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRCdWZmZXI6
OnZhbGlkSW1wbCBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpDb21tYW5kQnVmZmVyOjpjb21t
aXRJbXBsKToKKyAgICAgICAgKHJ4OjptdGw6OkNvbW1hbmRFbmNvZGVyOjppbnNlcnREZWJ1Z1Np
Z24pOgorICAgICAgICAocng6Om10bDo6Q29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbklt
cGwpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXJTdGF0ZXM6OnJlc2V0
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyOjpmaW5hbGl6ZUxvYWRT
dG9yZUFjdGlvbik6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6ZW5k
RW5jb2RpbmcpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6OmVuZEVu
Y29kaW5nSW1wbCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5p
dFdyaXRlRGVwZW5kZW5jeSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5kRW5jb2Rl
cjo6c2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmVuY29kZU1ldGFsRW5jb2Rlcik6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJD
b21tYW5kRW5jb2Rlcjo6c2V0U2Npc3NvclJlY3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVy
Q29tbWFuZEVuY29kZXI6OmNvbW1vblNldEJ1ZmZlcik6CisgICAgICAgIChyeDo6bXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2Rlcjo6ZHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luc3RhbmNlZCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJDb21tYW5k
RW5jb2Rlcjo6ZHJhd0luZGV4ZWQpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyQ29tbWFuZEVu
Y29kZXI6OmRyYXdJbmRleGVkSW5zdGFuY2VkKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlckNv
bW1hbmRFbmNvZGVyOjpkcmF3SW5kZXhlZEluc3RhbmNlZEJhc2VWZXJ0ZXgpOgorICAgICAgICAo
cng6Om10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXI6Omluc2VydERlYnVnU2lnbkltcGwpOgorICAg
ICAgICAocng6Om10bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpyZXN0YXJ0KToKKyAgICAgICAgKHJ4
OjptdGw6OkJsaXRDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmUpOgorICAgICAgICAocng6Om10
bDo6QmxpdENvbW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKToKKyAgICAgICAgKHJ4
OjptdGw6OkNvbXB1dGVDb21tYW5kRW5jb2Rlcjo6cmVzdGFydCk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24uaDoKKyAgICAgICAgKHJ4OjptdGw6Okdl
dEltcGwpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpDbGVhckNvbG9yVmFs
dWUpOgorICAgICAgICAocng6Om10bDo6Q2xlYXJDb2xvclZhbHVlOjpnZXRUeXBlIGNvbnN0KToK
KyAgICAgICAgKHJ4OjptdGw6OkNsZWFyQ29sb3JWYWx1ZTo6Z2V0VmFsdWVCeXRlcyBjb25zdCk6
CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25zdGFudHMuaDog
QWRkZWQuCisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRf
bWFwLmpzb246CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3Jt
YXRfdGFibGVfYXV0b2dlbi5tbToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6aW5pdCk6Cisg
ICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMuaDoK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5t
bToKKyAgICAgICAgKHJ4OjptdGw6OkZvcm1hdDo6bmVlZENvbnZlcnNpb24gY29uc3QpOgorICAg
ICAgICAocng6Om10bDo6Rm9ybWF0VGFibGU6OmluaXRpYWxpemUpOgorICAgICAgICAocng6Om10
bDo6Rm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMpOgorICAgICAgICAocng6Om10bDo6Rm9ybWF0
VGFibGU6OmFkanVzdEZvcm1hdENhcHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6Rm9y
bWF0VGFibGU6OmluaXROYXRpdmVGb3JtYXRDYXBzKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmg6IEFkZGVkLgorICAgICAgICAq
IHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW06IEFk
ZGVkLgorICAgICAgICAocng6Om10bDo6VHJhbnNsYXRlZFNoYWRlckluZm86OnJlc2V0KToKKyAg
ICAgICAgKHJ4OjptdGw6Ok1hcHBlZFNhbXBsZXJOYW1lTmVlZHNVc2VyRGVmaW5lZFByZWZpeCk6
CisgICAgICAgIChyeDo6bXRsOjpNU0xHZXRNYXBwZWRTYW1wbGVyTmFtZSk6CisgICAgICAgIChy
eDo6bXRsOjpNU0xHZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAocng6Om10bDo6R2V0QXNzaWdu
ZWRTYW1wbGVyQmluZGluZ3MpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21T
aGFkZXIpOgorICAgICAgICAocng6Om10bDo6Z2V0UmVmbGVjdGlvbkZyb21Db21waWxlcik6Cisg
ICAgICAgIChyeDo6bXRsOjpHbHNsYW5nR2V0TVNMKToKKyAgICAgICAgKHJ4OjptdGw6Ok1zbEdl
dFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpHbHNs
YW5nR2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKHJ4OjptdGw6OlNwaXJ2Q29kZVRvTXNsKToK
KyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVy
eV9wb29sLmg6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2Ns
dXNpb25fcXVlcnlfcG9vbC5tbToKKyAgICAgICAgKHJ4OjptdGw6Ok9jY2x1c2lvblF1ZXJ5UG9v
bDo6YWxsb2NhdGVRdWVyeU9mZnNldCk6CisgICAgICAgIChyeDo6bXRsOjpPY2NsdXNpb25RdWVy
eVBvb2w6OnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyk6CisgICAgICAgICogc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9yZW5kZXJfdXRpbHMuaDoKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zOjpTdGVuY2lsQmxpdFZpYUJ1ZmZlclBhcmFtcyk6
CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9t
RWxlbWVudHNBcnJheSk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQ
cmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0
aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZlcik6CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVy
KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclV0aWxzOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFj
a1BTTyk6CisgICAgICAgIChyeDo6bXRsOjpDbGVhclV0aWxzOjpjbGVhcldpdGhEcmF3KToKKyAg
ICAgICAgKHJ4OjptdGw6OkNvbG9yQmxpdFV0aWxzOjpibGl0Q29sb3JXaXRoRHJhdyk6CisgICAg
ICAgIChyeDo6bXRsOjpEZXB0aFN0ZW5jaWxCbGl0VXRpbHM6OmJsaXREZXB0aFN0ZW5jaWxXaXRo
RHJhdyk6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVRy
aUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2Vu
ZXJhdG9yVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUpOgor
ICAgICAgICAocng6Om10bDo6SW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0QnVmZmVyKToKKyAgICAgICAgKHJ4OjptdGw6OkluZGV4R2VuZXJhdG9yVXRpbHM6Omdl
bmVyYXRlUHJpbWl0aXZlUmVzdGFydFRyaWFuZ2xlc0J1ZmZlcik6CisgICAgICAgIChyeDo6bXRs
OjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRMaW5lc0J1ZmZl
cik6CisgICAgICAgIChyeDo6bXRsOjpJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5lcmF0ZVByaW1p
dGl2ZVJlc3RhcnRQb2ludHNCdWZmZXIpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6
Om9uRGVzdHJveSk6CisgICAgICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlMkRNaXBH
ZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKToKKyAgICAgICAgKHJ4OjptdGw6Ok1pcG1hcFV0
aWxzOjplbnN1cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZCk6CisgICAg
ICAgIChyeDo6bXRsOjpNaXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5l
SW5pdGlhbGl6ZWQpOgorICAgICAgICAocng6Om10bDo6TWlwbWFwVXRpbHM6OmdlbmVyYXRlTWlw
bWFwQ1MpOgorICAgICAgICAocng6Om10bDo6Q29weVBpeGVsc1V0aWxzOjpnZXRQaXhlbHNDb3B5
UGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxz
OjpnZXRDb21wb25lbnRzRXhwYW5kUmVuZGVyUGlwZWxpbmUpOgorICAgICAgICAocng6Om10bDo6
VmVydGV4Rm9ybWF0Q29udmVyc2lvblV0aWxzOjpnZXRGbG9hdENvbnZlcnN0aW9uQ29tcHV0ZVBp
cGVsaW5lKToKKyAgICAgICAgKHJ4OjptdGw6OlRyYW5zZm9ybUZlZWRiYWNrVXRpbHM6OmNyZWF0
ZU1zbFhmYkxpYnJhcnkpOgorICAgICAgICAocng6Om10bDo6VHJhbnNmb3JtRmVlZGJhY2tVdGls
czo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMuaDoKKyAgICAgICAgKiBzcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbToKKyAgICAgICAgKHJ4OjptdGw6
OlRleHR1cmU6Ok1ha2VNZW1vcnlMZXNzMkRUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRl
eHR1cmU6Ok1ha2VJT1N1cmZhY2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6
Ok1ha2VUZXh0dXJlKToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OlRleHR1cmUpOgorICAg
ICAgICAocng6Om10bDo6VGV4dHVyZTo6c3luY0NvbnRlbnQpOgorICAgICAgICAocng6Om10bDo6
VGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
Ojppc1NoYWRlclJlYWRhYmxlIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlRleHR1cmU6OmNy
ZWF0ZVZpZXdXaXRoQ29tcGF0aWJsZUZvcm1hdCk6CisgICAgICAgIChyeDo6bXRsOjpUZXh0dXJl
OjpnZXRSZWFkYWJsZUNvcHkpOgorICAgICAgICAocng6Om10bDo6VGV4dHVyZTo6cmVsZWFzZVJl
YWRhYmxlQ29weSk6CisgICAgICAgIChyeDo6bXRsOjpCdWZmZXI6OnN5bmNDb250ZW50KToKKyAg
ICAgICAgKHJ4OjptdGw6OkJ1ZmZlcjo6bWFwV2l0aE9wdCk6CisgICAgICAgICogc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oOgorICAgICAgICAocng6Om10bDo6
UmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYzo6Z2V0VGV4dHVyZVJlZiBjb25z
dCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXRE
ZXNjOjpnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZiBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpS
ZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjOjpoYXNJbXBsaWNpdE1TVGV4dHVy
ZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVU
YXJnZXREZXNjOjpnZXRSZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBhc3NBdHRhY2htZW50RGVzYzo6dGV4dHVyZSBjb25zdCk6CisgICAgICAgIChyeDo6bXRs
OjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OmltcGxpY2l0TVNUZXh0dXJlIGNvbnN0KToKKyAg
ICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6aGFzSW1wbGljaXRNU1Rl
eHR1cmUgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
OjpyZW5kZXJTYW1wbGVzIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NBdHRh
Y2htZW50RGVzYzo6bGV2ZWwgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjOjpzbGljZU9yRGVwdGggY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGFzc0F0dGFjaG1lbnREZXNjOjpibGVuZGFibGUgY29uc3QpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW06CisgICAgICAgIChyeDo6
bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudERlc2M6OnJlc2V0KToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6ZXF1YWxJZ25vcmVMb2FkU3RvcmVPcHRpb25zIGNv
bnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERl
c2MgY29uc3QpOgorICAgICAgICAocng6Om10bDo6UmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVu
ZGVyUGlwZWxpbmVPdXRwdXREZXNjIGNvbnN0KToKKyAgICAgICAgKHJ4OjptdGw6OlJlbmRlclBp
cGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUpOgorICAgICAgICAocng6Om10bDo6UmVu
ZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6OlJl
bmRlclBpcGVsaW5lQ2FjaGU6OnNldEZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKHJ4OjptdGw6
OlJlbmRlclBpcGVsaW5lQ2FjaGU6Omluc2VydFJlbmRlclBpcGVsaW5lU3RhdGUpOgorICAgICAg
ICAocng6Om10bDo6UmVuZGVyUGlwZWxpbmVDYWNoZTo6Y3JlYXRlUmVuZGVyUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChyeDo6bXRsOjpTdGF0ZUNhY2hlOjpTdGF0ZUNhY2hlKToKKyAgICAgICAg
KHJ4OjptdGw6OlN0YXRlQ2FjaGU6OmdldFNhbXBsZXJTdGF0ZSk6CisgICAgICAgICogc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGlscy5oOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW06CisgICAgICAgIChyeDo6bXRsOjpJbml0aWFs
aXplVGV4dHVyZUNvbnRlbnRzKToKKyAgICAgICAgKHJ4OjptdGw6OkluaXRpYWxpemVUZXh0dXJl
Q29udGVudHNHUFUpOgorICAgICAgICAocng6Om10bDo6SW5pdGlhbGl6ZURlcHRoU3RlbmNpbFRl
eHR1cmVDb250ZW50c0dQVSk6CisgICAgICAgIChyeDo6bXRsOjpHZXRIaWdoZXN0U3VwcG9ydGVk
TVNMVmVyc2lvbik6CisgICAgICAgIChyeDo6bXRsOjpDcmVhdGVTaGFkZXJMaWJyYXJ5KToKKyAg
ICAgICAgKHJ4OjptdGw6OkdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2spOgorICAgICAgICAocng6
Om10bDo6SXNGb3JtYXRFbXVsYXRlZCk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhSZW5kZXJU
YXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyk6CisgICAgICAgIChyeDo6bXRsOjpHZXRNYXhOdW1i
ZXJPZlJlbmRlclRhcmdldHNGb3JEZXZpY2UpOgorICAgICAgICAocng6Om10bDo6RGV2aWNlSGFz
TWF4aW11bVJlbmRlclRhcmdldFNpemUpOgorICAgICAgICAocng6Om10bDo6Z2V0TmV4dExvY2F0
aW9uRm9yRm9ybWF0KToKKyAgICAgICAgKHJ4OjptdGw6OkNvbXB1dGVUb3RhbFNpemVVc2VkRm9y
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IpOgorICAgICAgICAocng6Om10bDo6Q29tcHV0ZVRvdGFs
U2l6ZVVzZWRGb3JNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpOgorICAgICAgICAqIHNyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0YWw6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29tbW9uLmg6CisgICAgICAgICogc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0YWw6CisgICAg
ICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5faW5k
aWNlcy5tZXRhbDoKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVy
cy9nZW5fbWlwbWFwLm1ldGFsOgorICAgICAgICAqIHNyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9zaGFkZXJzL3Zpc2liaWxpdHkubWV0YWw6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9lbnRy
eV9wb2ludHNfZWdsLmNwcDoKKwogMjAyMC0xMi0wNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTW9yZSBGQUxMQkFDS19QTEFURk9STSBhZG9wdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNDU2ZTUxNzg4MzIwM2VkZGQ1NzcwNTJmNGZjZjA3MDE1ZDU5YTNlOS4uZjJi
YzdiODQ5YmViZTYxOTUxYThmZGE1MjdkNTU3YTJjZTNiOGQ5YyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMTgwLDYgKzExODAsMTQxIEBACiAJCUEzRDMyOTE1MjNDRkNCNzcwMDM3NTY1NyAvKiBSZXdy
aXRlUm93TWFqb3JNYXRyaWNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTNEMzI5MEYyM0NGQ0I3NjAwMzc1NjU3IC8qIFJld3JpdGVSb3dNYWpvck1h
dHJpY2VzLmggKi87IH07CiAJCUEzRDMyOTE4MjNDRkNCNzcwMDM3NTY1NyAvKiBSZW1vdmVJbmFj
dGl2ZUludGVyZmFjZVZhcmlhYmxlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBM0QzMjkxMjIzQ0ZDQjc2MDAzNzU2NTcgLyogUmVtb3ZlSW5hY3Rp
dmVJbnRlcmZhY2VWYXJpYWJsZXMuY3BwICovOyB9OwogCQlBM0QzMjkxOTIzQ0ZDQjc3MDAzNzU2
NTcgLyogUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEzRDMyOTEzMjNDRkNCNzYwMDM3NTY1NyAv
KiBSZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oICovOyB9OworCQlGRjgxRkVEMDI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfdXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTgwMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZ2xzbGFuZ191dGlscy5oICovOyB9OworCQlGRjgxRkVEMTI1ODE4RDY4MDA4OTRFMjQgLyog
UHJvZ3JhbU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkY4MUZFODEyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwuaCAqLzsgfTsKKwkJRkY4
MUZFRDIyNTgxOEQ2ODAwODk0RTI0IC8qIERpc3BsYXlNdGxfYXBpLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4MjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bF9hcGkuaCAqLzsgfTsKKwkJRkY4MUZFRDMyNTgxOEQ2ODAwODk0RTI0IC8q
IFN5bmNNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRjgxRkU4MzI1ODE4RDY4MDA4OTRFMjQgLyogU3luY010bC5tbSAqLzsgfTsKKwkJRkY4MUZF
RDQyNTgxOEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4NDI1ODE4RDY4MDA4OTRFMjQgLyogUXVlcnlN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRDUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRp
bHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU4NTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5tbSAqLzsgfTsKKwkJRkY4
MUZFRDYyNTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTg2MjU4MThENjgwMDg5NEUy
NCAvKiBSZW5kZXJCdWZmZXJNdGwubW0gKi87IH07CisJCUZGODFGRUQ3MjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkU4ODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1vbi5oICovOyB9Owor
CQlGRjgxRkVEODI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2NvbnN0YW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFODkyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9jb25zdGFudHMuaCAqLzsgfTsKKwkJRkY4MUZFRDkyNTgxOEQ2OTAwODk0RTI0
IC8qIFNhbXBsZXJNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRThBMjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVyTXRsLmggKi87IH07CisJ
CUZGODFGRURBMjU4MThENjkwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU4QjI1ODE4RDY4MDA4OTRFMjQg
LyogRGlzcGxheU10bC5oICovOyB9OworCQlGRjgxRkVEQjI1ODE4RDY5MDA4OTRFMjQgLyogU3lu
Y010bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZFOEMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLzsgfTsKKwkJRkY4MUZFREMyNTgx
OEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEQyNTgxOEQ2ODAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1t
ICovOyB9OworCQlGRjgxRkVERDI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEUy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZFREUy
NTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOEYyNTgxOEQ2ODAwODk0RTI0IC8qIFJl
bmRlckJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVERjI1ODE4RDY5MDA4OTRFMjQgLyogVHJh
bnNmb3JtRmVlZGJhY2tNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010
bC5oICovOyB9OworCQlGRjgxRkVFMDI1ODE4RDY5MDA4OTRFMjQgLyogQnVmZmVyTXRsLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTEyNTgx
OEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTEyNTgxOEQ2OTAw
ODk0RTI0IC8qIG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTkyMjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfZm9ybWF0X3RhYmxlX2F1dG9nZW4ubW0gKi87IH07CisJCUZGODFGRUUyMjU4MThENjkwMDg5
NEUyNCAvKiBSZW5kZXJUYXJnZXRNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTkzMjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJUYXJnZXRN
dGwuaCAqLzsgfTsKKwkJRkY4MUZFRTMyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5NDI1
ODE4RDY4MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRTQyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9nbHNsYW5nX210bF91dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOTUyNTgxOEQ2ODAwODk0RTI0IC8qIG10
bF9nbHNsYW5nX210bF91dGlscy5oICovOyB9OworCQlGRjgxRkVFNTI1ODE4RDY5MDA4OTRFMjQg
LyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOTYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb21tYW5kX2J1
ZmZlci5tbSAqLzsgfTsKKwkJRkY4MUZFRTYyNTgxOEQ2OTAwODk0RTI0IC8qIFZlcnRleEFycmF5
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkU5NzI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RTcyNTgxOEQ2OTAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRTk4MjU4MThENjgwMDg5NEUyNCAvKiBTdXJm
YWNlTXRsLmggKi87IH07CisJCUZGODFGRUU4MjU4MThENjkwMDg5NEUyNCAvKiBSZW5kZXJUYXJn
ZXRNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkU5OTI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovOyB9OworCQlG
RjgxRkVFOTI1ODE4RDY5MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5QTI1ODE4RDY4MDA4OTRF
MjQgLyogVmVydGV4QXJyYXlNdGwubW0gKi87IH07CisJCUZGODFGRUVBMjU4MThENjkwMDg5NEUy
NCAvKiBtdGxfY29tbWFuZF9idWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRTlCMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9i
dWZmZXIuaCAqLzsgfTsKKwkJRkY4MUZFRUIyNTgxOEQ2OTAwODk0RTI0IC8qIEJ1ZmZlck10bC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFOUMy
NTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5oICovOyB9OworCQlGRjgxRkVFQzI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAq
LzsgfTsKKwkJRkY4MUZFRUQyNTgxOEQ2OTAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5
RTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5tbSAqLzsgfTsKKwkJRkY4
MUZFRUUyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkU5RjI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX3Jlc291cmNlcy5tbSAqLzsgfTsKKwkJRkY4MUZFRUYyNTgxOEQ2OTAwODk0RTI0IC8q
IG10bF9yZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRUEwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmggKi87IH07
CisJCUZGODFGRUYwMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfc3RhdGVfY2FjaGUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBMTI1ODE4RDY4
MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tICovOyB9OworCQlGRjgxRkVGMjI1ODE4RDY5
MDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUEzMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVu
ZGVyX3V0aWxzLm1tICovOyB9OworCQlGRjgxRkVGMzI1ODE4RDY5MDA4OTRFMjQgLyogVHJhbnNm
b3JtRmVlZGJhY2tNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkVBNDI1ODE4RDY4MDA4OTRFMjQgLyogVHJhbnNmb3JtRmVlZGJhY2tNdGwu
bW0gKi87IH07CisJCUZGODFGRUY0MjU4MThENjkwMDg5NEUyNCAvKiBJT1N1cmZhY2VTdXJmYWNl
TXRsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVBNTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3VyZmFjZU10bC5oICovOyB9OworCQlG
RjgxRkVGNTI1ODE4RDY5MDA4OTRFMjQgLyogVGV4dHVyZU10bC5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLm1tICovOyB9OworCQlGRjgxRkVGNjI1ODE4RDY5MDA4OTRFMjQgLyogVGV4
dHVyZU10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZFQTcyNTgxOEQ2ODAwODk0RTI0IC8qIFRleHR1cmVNdGwuaCAqLzsgfTsKKwkJRkY4MUZF
RjcyNTgxOEQ2OTAwODk0RTI0IC8qIFNhbXBsZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBODI1ODE4RDY4MDA4OTRFMjQgLyogU2Ft
cGxlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZFRkEyNTgxOEQ2OTAwODk0RTI0IC8qIGNvbnN0YW50
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZF
QUMyNTgxOEQ2ODAwODk0RTI0IC8qIGNvbnN0YW50cy5oICovOyB9OworCQlGRjgxRkVGQjI1ODE4
RDY5MDA4OTRFMjQgLyogY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29tbW9uLmggKi87IH07
CisJCUZGODFGRUZFMjU4MThENjkwMDg5NEUyNCAvKiBmb3JtYXRfYXV0b2dlbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQjAyNTgxOEQ2ODAw
ODk0RTI0IC8qIGZvcm1hdF9hdXRvZ2VuLmggKi87IH07CisJCUZGODFGRjAyMjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVCQjI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X29jY2x1c2lvbl9xdWVyeV9wb29sLm1tICovOyB9OworCQlGRjgxRkYwMzI1ODE4RDY5MDA4OTRF
MjQgLyogRnJhbWVCdWZmZXJNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRUJDMjU4MThENjgwMDg5NEUyNCAvKiBGcmFtZUJ1ZmZlck10bC5o
ICovOyB9OworCQlGRjgxRkYwNDI1ODE4RDY5MDA4OTRFMjQgLyogQ29tcGlsZXJNdGwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUJEMjU4MThE
NjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5oICovOyB9OworCQlGRjgxRkYwNTI1ODE4RDY5MDA4
OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQkUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9n
bHNsYW5nX210bF91dGlscy5tbSAqLzsgfTsKKwkJRkY4MUZGMDYyNTgxOEQ2OTAwODk0RTI0IC8q
IENvbnRleHRNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkVCRjI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSAqLzsgfTsKKwkJ
RkY4MUZGMDcyNTgxOEQ2OTAwODk0RTI0IC8qIENvbXBpbGVyTXRsLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzAyNTgxOEQ2ODAwODk0RTI0
IC8qIENvbXBpbGVyTXRsLm1tICovOyB9OworCQlGRjgxRkYwODI1ODE4RDY5MDA4OTRFMjQgLyog
bXRsX2J1ZmZlcl9wb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2J1ZmZlcl9wb29sLmggKi87
IH07CisJCUZGODFGRjA5MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfdXRpbHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUMyMjU4MThENjgwMDg5
NEUyNCAvKiBtdGxfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZGMEEyNTgxOEQ2OTAwODk0RTI0IC8q
IENvbnRleHRNdGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZGODFGRUM0MjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLmggKi87IH07CisJCUZG
ODFGRjBCMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDNTI1ODE4RDY4MDA4OTRF
MjQgLyogbXRsX2J1ZmZlcl9wb29sLm1tICovOyB9OworCQlGRjgxRkYwQzI1ODE4RDZBMDA4OTRF
MjQgLyogbXRsX2NvbW1vbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbW9uLm1tICovOyB9
OworCQlGRjgxRkYwRDI1ODE4RDZBMDA4OTRFMjQgLyogbXRsX3JlbmRlcl91dGlscy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzcyNTgxOEQ2
ODAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMuaCAqLzsgfTsKKwkJRkY4MUZGMEUyNTgxOEQ2
QTAwODk0RTI0IC8qIG10bF9zdGF0ZV9jYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQzgyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9zdGF0
ZV9jYWNoZS5oICovOyB9OworCQlGRjgxRkYwRjI1ODE4RDZBMDA4OTRFMjQgLyogRnJhbWVCdWZm
ZXJNdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJNdGwubW0gKi87IH07CisJCUZG
ODFGRjEwMjU4MThENkEwMDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRUNBMjU4MThE
NjgwMDg5NEUyNCAvKiBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaCAqLzsgfTsKKwkJRkY4MUZG
MTEyNTgxOEQ2QTAwODk0RTI0IC8qIFNoYWRlck10bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQ0IyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRl
ck10bC5oICovOyB9OworCQlGRjgxRkYxMjI1ODE4RDZBMDA4OTRFMjQgLyogU2hhZGVyTXRsLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQ0My
NTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5tbSAqLzsgfTsKKwkJRkY4MUZGMTMyNTgxOEQ2
QTAwODk0RTI0IC8qIFByb2dyYW1NdGwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDRDI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5t
bSAqLzsgfTsKKwkJRkY4MUZGMTQyNTgxOEQ2QTAwODk0RTI0IC8qIERpc3BsYXlNdGwubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVDRTI1ODE4
RDY4MDA4OTRFMjQgLyogRGlzcGxheU10bC5tbSAqLzsgfTsKKwkJRkY4MUZGMUIyNTgxOTBDQTAw
ODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMTUyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5z
bGF0b3JNZXRhbERpcmVjdC5oICovOyB9OworCQlGRjgxRkYxQzI1ODE5MENBMDA4OTRFMjQgLyog
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0
YWxEaXJlY3QuY3BwICovOyB9OworCQlGRjgxRkYxRDI1ODE5MENBMDA4OTRFMjQgLyogU3RhdGlj
VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMTcyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUuaCAqLzsgfTsKKwkJRkY4MUZGMUUy
NTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjE5MjU4MTkwQ0EwMDg5NEUy
NCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAgKi87IH07CisJCUZGODFGRjFGMjU4MTkwQ0Ew
MDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMUEyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5z
bGF0b3JNZXRhbFV0aWxzLmggKi87IH07CisJCUZGODFGRjVCMjU4MTkxOTcwMDg5NEUyNCAvKiBO
YW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCAqLzsgfTsKKwkJRkY4MUZGNUMyNTgx
OTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyMjI1ODE5MTk3MDA4OTRF
MjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCAqLzsgfTsKKwkJRkY4MUZGNUQyNTgx
OTE5NzAwODk0RTI0IC8qIERlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkYyMzI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCAqLzsgfTsK
KwkJRkY4MUZGNUUyNTgxOTE5NzAwODk0RTI0IC8qIE5hbWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI0MjU4MTkxOTcwMDg5NEUyNCAvKiBO
YW1lLmggKi87IH07CisJCUZGODFGRjVGMjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjI1MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCAqLzsgfTsKKwkJRkY4MUZGNjAyNTgxOTE5NzAwODk0
RTI0IC8qIE1vZGlmeVN0cnVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRjgxRkYyNjI1ODE5MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNw
cCAqLzsgfTsKKwkJRkY4MUZGNjEyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJs
b2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMjcyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nrcy5oICovOyB9Owor
CQlGRjgxRkY2MjI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMjgyNTgxOTE5
NzAwODk0RTI0IC8qIEVudmlyb25tZW50VmFyaWFibGUuaCAqLzsgfTsKKwkJRkY4MUZGNjMyNTgx
OTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI5MjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHAgKi87IH07CisJCUZGODFGRjY0
MjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQTI1
ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oICov
OyB9OworCQlGRjgxRkY2NTI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWdTaW5rLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQjI1ODE5MTk3MDA4
OTRFMjQgLyogRGVidWdTaW5rLmggKi87IH07CisJCUZGODFGRjY2MjU4MTkxOTcwMDg5NEUyNCAv
KiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyQzI1ODE5MTk3MDA4OTRFMjQgLyog
U2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oICovOyB9OworCQlGRjgxRkY2NzI1
ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjJEMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0
YWwuY3BwICovOyB9OworCQlGRjgxRkY2ODI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZU91dEFy
Z3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjJFMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5oICovOyB9OworCQlGRjgxRkY2
OTI1ODE5MTk4MDA4OTRFMjQgLyogTWFwU3ltYm9scy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYyRjI1ODE5MTk3MDA4OTRFMjQgLyogTWFw
U3ltYm9scy5jcHAgKi87IH07CisJCUZGODFGRjZBMjU4MTkxOTgwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4
MUZGMzAyNTgxOTE5NzAwODk0RTI0IC8qIFN5bWJvbEVudi5jcHAgKi87IH07CisJCUZGODFGRjZC
MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjMxMjU4MTkxOTcwMDg5NEUyNCAvKiBS
ZXdyaXRlS2V5d29yZHMuaCAqLzsgfTsKKwkJRkY4MUZGNkMyNTgxOTE5ODAwODk0RTI0IC8qIExh
eW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RjgxRkYzMjI1ODE5MTk3MDA4OTRFMjQgLyogTGF5b3V0LmNwcCAqLzsgfTsKKwkJRkY4MUZGNkQy
NTgxOTE5ODAwODk0RTI0IC8qIFRvcG9zb3J0U3RydWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzMzI1ODE5MTk3MDA4OTRFMjQgLyog
VG9wb3NvcnRTdHJ1Y3RzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNkUyNTgxOTE5ODAwODk0RTI0IC8q
IE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjM0MjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmggKi87IH07CisJCUZGODFGRjZGMjU4MTkxOTgwMDg5NEUyNCAvKiBT
a2lwcGluZ1RyYXZlcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkY4MUZGMzUyNTgxOTE5NzAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmgg
Ki87IH07CisJCUZGODFGRjcwMjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzNjI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3MuY3BwICovOyB9OworCQlGRjgxRkY3MTI1
ODE5MTk4MDA4OTRFMjQgLyogUGlwZWxpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzcyNTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5l
LmNwcCAqLzsgfTsKKwkJRkY4MUZGNzIyNTgxOTE5ODAwODk0RTI0IC8qIElkR2VuLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzODI1ODE5MTk3
MDA4OTRFMjQgLyogSWRHZW4uaCAqLzsgfTsKKwkJRkY4MUZGNzMyNTgxOTE5ODAwODk0RTI0IC8q
IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGMzkyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRl
Q29tcG91bmRFeHByZXNzaW9ucy5oICovOyB9OworCQlGRjgxRkY3NDI1ODE5MTk4MDA4OTRFMjQg
LyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGM0EyNTgxOTE5NzAwODk0RTI0IC8qIEFkZEV4cGxpY2l0
VHlwZUNhc3RzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzUyNTgxOTE5ODAwODk0RTI0IC8qIE1hcFN5
bWJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjNCMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmggKi87IH07CisJCUZGODFGRjc2
MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAv
KiBSZXdyaXRlUGlwZWxpbmVzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzcyNTgxOTE5ODAwODk0RTI0
IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzRDI1ODE5MTk3MDA4OTRFMjQgLyogUmVkdWNlSW50
ZXJmYWNlQmxvY2tzLmNwcCAqLzsgfTsKKwkJRkY4MUZGNzgyNTgxOTE5ODAwODk0RTI0IC8qIEFz
dEhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkY4MUZGM0UyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBlcnMuY3BwICovOyB9OworCQlG
RjgxRkY3OTI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2Vz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYz
RjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmggKi87
IH07CisJCUZGODFGRjdBMjU4MTkxOTgwMDg5NEUyNCAvKiBMYXlvdXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQwMjU4MTkxOTcwMDg5NEUy
NCAvKiBMYXlvdXQuaCAqLzsgfTsKKwkJRkY4MUZGN0IyNTgxOTE5ODAwODk0RTI0IC8qIERpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNDEyNTgxOTE5NzAwODk0RTI0IC8qIERpc2Nv
dmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIuY3BwICovOyB9OworCQlGRjgxRkY3QzI1ODE5
MTk4MDA4OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQyMjU4MTkxOTcwMDg5NEUyNCAvKiBQcm9ncmFt
UHJlbHVkZS5oICovOyB9OworCQlGRjgxRkY3RDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUds
b2JhbFF1YWxpZmllckRlY2xzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkY0MzI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzLmggKi87IH07CisJCUZGODFGRjdFMjU4MTkxOTgwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFG
RjQ0MjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xFbnYuaCAqLzsgfTsKKwkJRkY4MUZGN0YyNTgx
OTE5ODAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0NTI1ODE5MTk3MDA4
OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmNwcCAqLzsgfTsKKwkJRkY4MUZG
ODAyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0NjI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmNwcCAqLzsg
fTsKKwkJRkY4MUZGODEyNTgxOTE5ODAwODk0RTI0IC8qIEFzdEhlbHBlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQ3MjU4MTkxOTcwMDg5
NEUyNCAvKiBBc3RIZWxwZXJzLmggKi87IH07CisJCUZGODFGRjgyMjU4MTkxOTgwMDg5NEUyNCAv
KiBIb2lzdENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRjgxRkY0ODI1ODE5MTk3MDA4OTRFMjQgLyogSG9pc3RDb25zdGFudHMuY3Bw
ICovOyB9OworCQlGRjgxRkY4MzI1ODE5MTk4MDA4OTRFMjQgLyogUGlwZWxpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjQ5MjU4MTkxOTcw
MDg5NEUyNCAvKiBQaXBlbGluZS5oICovOyB9OworCQlGRjgxRkY4NDI1ODE5MTk4MDA4OTRFMjQg
LyogUmV3cml0ZVBpcGVsaW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkY4MUZGNEEyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMu
aCAqLzsgfTsKKwkJRkY4MUZGODUyNTgxOTE5ODAwODk0RTI0IC8qIFJlZmVyZW5jZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEIyNTgxOTE5
NzAwODk0RTI0IC8qIFJlZmVyZW5jZS5oICovOyB9OworCQlGRjgxRkY4NjI1ODE5MTk4MDA4OTRF
MjQgLyogSG9pc3RDb25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRjRDMjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5o
ICovOyB9OworCQlGRjgxRkY4NzI1ODE5MTk4MDA4OTRFMjQgLyogV3JhcE1haW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEQyNTgxOTE5
NzAwODk0RTI0IC8qIFdyYXBNYWluLmNwcCAqLzsgfTsKKwkJRkY4MUZGODgyNTgxOTE5ODAwODk0
RTI0IC8qIENvbnN0YW50TmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZGODFGRjRFMjU4MTkxOTcwMDg5NEUyNCAvKiBDb25zdGFudE5hbWVzLmgg
Ki87IH07CisJCUZGODFGRjg5MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNEYy
NTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVLZXl3b3Jkcy5jcHAgKi87IH07CisJCUZGODFGRjhB
MjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY1MDI1ODE5MTk3MDA4OTRFMjQgLyog
UHJvZ3JhbVByZWx1ZGUuY3BwICovOyB9OworCQlGRjgxRkY4QjI1ODE5MTk4MDA4OTRFMjQgLyog
SWRHZW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLzsgfTsKKwkJRkY4MUZGOEMy
NTgxOTE5ODAwODk0RTI0IC8qIEVtaXRNZXRhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTIyNTgxOTE5NzAwODk0RTI0IC8qIEVtaXRNZXRh
bC5oICovOyB9OworCQlGRjgxRkY4RDI1ODE5MTk4MDA4OTRFMjQgLyogV3JhcE1haW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjUzMjU4MTkx
OTcwMDg5NEUyNCAvKiBXcmFwTWFpbi5oICovOyB9OworCQlGRjgxRkY4RTI1ODE5MTk4MDA4OTRF
MjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU0MjU4MTkxOTcwMDg5NEUyNCAvKiBBZGRFeHBsaWNp
dFR5cGVDYXN0cy5oICovOyB9OworCQlGRjgxRkY4RjI1ODE5MTk4MDA4OTRFMjQgLyogU2VwYXJh
dGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZGODFGRjU1MjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuY3BwICovOyB9OworCQlGRjgxRkY5MDI1ODE5MTk4MDA4OTRFMjQgLyog
TW9kaWZ5U3RydWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRjgxRkY1NjI1ODE5MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmggKi87IH07CisJ
CUZGODFGRjkxMjU4MTkxOTgwMDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU3MjU4MTkxOTcwMDg5
NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCAqLzsgfTsKKwkJRkY4MUZGOTIyNTgxOTE5ODAwODk0
RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjU4MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi87IH07CisJCUZGODFGRjkzMjU4MTkxOTgwMDg5NEUy
NCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGNTkyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVD
YXNlRGVjbGFyYXRpb25zLmggKi87IH07CisJCUZGODFGRjk0MjU4MTkxOTgwMDg5NEUyNCAvKiBN
YXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjVBMjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmNwcCAqLzsgfTsKKwkJRkY4MUZGOTYyNTgxQTM5NzAwODk0RTI0IC8q
IE1ldGFsLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZGODFGRjk1MjU4MUEzOTcwMDg5NEUyNCAvKiBNZXRhbC5mcmFtZXdvcmsgKi87
IH07CisJCUZGODFGRjlCMjU4MUEzQzIwMDg5NEUyNCAvKiBOb2RlVHlwZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGOTcyNTgxQTNDMTAwODk0
RTI0IC8qIE5vZGVUeXBlLmggKi87IH07CisJCUZGODFGRjlDMjU4MUEzQzIwMDg5NEUyNCAvKiBB
c05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZG
ODFGRjk4MjU4MUEzQzEwMDg5NEUyNCAvKiBBc05vZGUuaCAqLzsgfTsKKwkJRkY4MUZGOUQyNTgx
QTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0IC8qIEludGVy
bVJlYnVpbGQuY3BwICovOyB9OworCQlGRjgxRkY5RTI1ODFBM0MyMDA4OTRFMjQgLyogSW50ZXJt
UmVidWlsZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkY4MUZGOUEyNTgxQTNDMjAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuaCAqLzsgfTsKKwkJRkY4
MUZGOUYyNTgxQUQwNDAwODk0RTI0IC8qIGJsaXQubWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkVBQTI1ODE4RDY4MDA4OTRFMjQgLyogYmxp
dC5tZXRhbCAqLzsgfTsKKwkJRkY4MUZGQTAyNTgxQUQwNDAwODk0RTI0IC8qIHZpc2liaWxpdHku
bWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgx
RkVBQjI1ODE4RDY4MDA4OTRFMjQgLyogdmlzaWJpbGl0eS5tZXRhbCAqLzsgfTsKKwkJRkY4MUZG
QTEyNTgxQUQwNDAwODk0RTI0IC8qIGNvcHlfYnVmZmVyLm1ldGFsIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQUYyNTgxOEQ2ODAwODk0RTI0IC8q
IGNvcHlfYnVmZmVyLm1ldGFsICovOyB9OworCQlGRjgxRkZBMjI1ODFBRDA0MDA4OTRFMjQgLyog
Y2xlYXIubWV0YWwgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRjgxRkVCMTI1ODE4RDY4MDA4OTRFMjQgLyogY2xlYXIubWV0YWwgKi87IH07CisJCUZGODFG
RkEzMjU4MUFEMDQwMDg5NEUyNCAvKiBnZW5fbWlwbWFwLm1ldGFsIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkY4MUZFQjIyNTgxOEQ2ODAwODk0RTI0IC8q
IGdlbl9taXBtYXAubWV0YWwgKi87IH07CisJCUZGODFGRkE0MjU4MUFEMDQwMDg5NEUyNCAvKiBn
ZW5faW5kaWNlcy5tZXRhbCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRUIzMjU4MThENjgwMDg5NEUyNCAvKiBnZW5faW5kaWNlcy5tZXRhbCAqLzsg
fTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhCdWlsZFJ1
bGUgc2VjdGlvbiAqLwpAQCAtMjAzMCw2ICsyMTY1LDE0MyBAQAogCQlBM0QzMjkxMzIzQ0ZDQjc2
MDAzNzU2NTcgLyogUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3ZlSW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQwRDExMjAwRjBFMzAwMDg4RTY5
IC8qIGxpYkFOR0xFLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxl
VHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYkFOR0xFLmE7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlEMkJGMTIwMEYzRTYw
MDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBTaGFkZXJMYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTgwMjU4
MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ191dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBtdGxfZ2xzbGFuZ191dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkU4MTI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9ncmFtTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZGODFGRTgyMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsX2FwaS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TXRsX2FwaS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4MzI1ODE4RDY4MDA4OTRFMjQgLyogU3lu
Y010bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFN5bmNNdGwu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTg0MjU4MThENjgwMDg5NEUy
NCAvKiBRdWVyeU10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWVyeU10
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4NTI1ODE4RDY4MDA4OTRF
MjQgLyogbXRsX2Zvcm1hdF91dGlscy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IG10bF9mb3JtYXRfdXRpbHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRTg2MjU4MThENjgwMDg5NEUyNCAvKiBSZW5kZXJCdWZmZXJNdGwubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW5kZXJCdWZmZXJNdGwubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRTg4MjU4MThENjgwMDg5NEUyNCAvKiBt
dGxfY29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9jb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFODkyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9jb25zdGFudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRs
X2NvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4QTI1ODE4
RDY4MDA4OTRFMjQgLyogU2FtcGxlck10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTYW1wbGVyTXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRThC
MjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IERpc3BsYXlNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZFOEMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3luY010bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkU4RDI1ODE4RDY4MDA4OTRFMjQgLyogUXVlcnlNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBRdWVyeU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOEUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gbXRsX2Zvcm1hdF91dGlscy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU4RjI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVy
QnVmZmVyTXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckJ1ZmZl
ck10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5MDI1ODE4RDY4MDA4
OTRFMjQgLyogVHJhbnNmb3JtRmVlZGJhY2tNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVHJhbnNmb3JtRmVlZGJhY2tNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOTEyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEJ1ZmZlck10bC5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRf
dGFibGVfYXV0b2dlbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFOTMyNTgxOEQ2ODAwODk0RTI0IC8qIFJlbmRlclRhcmdldE10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUYXJnZXRNdGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTQyNTgxOEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTdXJmYWNlTXRsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5NTI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IG10bF9nbHNsYW5nX210bF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkU5NjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX2NvbW1hbmRfYnVmZmVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5NzI1ODE4RDY4MDA4OTRFMjQg
LyogVmVydGV4QXJyYXlNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVy
dGV4QXJyYXlNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOTgyNTgx
OEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3VyZmFjZU10bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5
OTI1ODE4RDY4MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVuZGVyVGFyZ2V0TXRsLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkU5QTI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlN
dGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBWZXJ0ZXhBcnJh
eU10bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOUIyNTgxOEQ2ODAw
ODk0RTI0IC8qIG10bF9jb21tYW5kX2J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBtdGxfY29tbWFuZF9idWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFOUMyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCdWZmZXJNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF91dGlscy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFOUUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1
cmZhY2VNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJT1N1
cmZhY2VTdXJmYWNlTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkU5
RjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3Jlc291cmNlcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10bF9yZXNvdXJjZXMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUZGODFGRUEwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9yZXNvdXJjZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTEyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9z
dGF0ZV9jYWNoZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IG10
bF9zdGF0ZV9jYWNoZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTMy
NTgxOEQ2ODAwODk0RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtdGxfcmVuZGVyX3V0aWxzLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkVBNDI1ODE4RDY4MDA4OTRFMjQgLyogVHJhbnNmb3JtRmVl
ZGJhY2tNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUcmFu
c2Zvcm1GZWVkYmFja010bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZF
QTUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZhY2VNdGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSU9TdXJmYWNlU3VyZmFjZU10bC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlGRjgxRkVBNjI1ODE4RDY4MDA4OTRFMjQgLyogVGV4dHVyZU10bC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHR1cmVNdGwubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUE3MjU4MThENjgwMDg5NEUyNCAv
KiBUZXh0dXJlTXRsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHR1cmVN
dGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQTgyNTgxOEQ2ODAwODk0
RTI0IC8qIFNhbXBsZXJNdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTYW1wbGVyTXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVB
QTI1ODE4RDY4MDA4OTRFMjQgLyogYmxpdC5tZXRhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWV0
YWw7IHBhdGggPSBibGl0Lm1ldGFsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkVBQjI1ODE4RDY4MDA4OTRFMjQgLyogdmlzaWJpbGl0eS5tZXRhbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUubWV0YWw7IHBhdGggPSB2aXNpYmlsaXR5Lm1ldGFsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVBQzI1ODE4RDY4MDA4OTRFMjQgLyogY29uc3RhbnRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29tbW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVBRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2RlZmF1bHRfc2hhZGVy
c19zcmNfYXV0b2dlbi5pbmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnBhc2NhbDsgcGF0aCA9IG10
bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4uaW5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkVBRjI1ODE4RDY4MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLm1ldGFsOyBwYXRoID0gY29weV9idWZmZXIubWV0YWw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUIwMjU4MThENjgwMDg5NEUyNCAvKiBmb3Jt
YXRfYXV0b2dlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmb3JtYXRfYXV0
b2dlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVCMTI1ODE4RDY4MDA4
OTRFMjQgLyogY2xlYXIubWV0YWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1ldGFsOyBwYXRoID0g
Y2xlYXIubWV0YWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUIyMjU4MThE
NjgwMDg5NEUyNCAvKiBnZW5fbWlwbWFwLm1ldGFsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5tZXRh
bDsgcGF0aCA9IGdlbl9taXBtYXAubWV0YWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUZGODFGRUIzMjU4MThENjgwMDg5NEUyNCAvKiBnZW5faW5kaWNlcy5tZXRhbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUubWV0YWw7IHBhdGggPSBnZW5faW5kaWNlcy5tZXRhbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQkIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9vY2NsdXNp
b25fcXVlcnlfcG9vbC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZFQkMyNTgxOEQ2ODAwODk0RTI0IC8qIEZyYW1lQnVmZmVyTXRsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZyYW1lQnVmZmVyTXRsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRUJEMjU4MThENjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21waWxlck10bC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVCRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2ds
c2xhbmdfbXRsX3V0aWxzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkVCRjI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbnRleHRNdGwubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRUMwMjU4MThENjgwMDg5NEUyNCAvKiBDb21waWxlck10bC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvbXBpbGVyTXRsLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQg
LyogbXRsX2J1ZmZlcl9wb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG10
bF9idWZmZXJfcG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDMjI1
ODE4RDY4MDA4OTRFMjQgLyogbXRsX3V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IG10bF91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVD
NDI1ODE4RDY4MDA4OTRFMjQgLyogQ29udGV4dE10bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDb250ZXh0TXRsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZG
ODFGRUM1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBtdGxfYnVmZmVyX3Bvb2wubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29t
bW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gbXRsX2NvbW1v
bi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQzcyNTgxOEQ2ODAwODk0
RTI0IC8qIG10bF9yZW5kZXJfdXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gbXRsX3JlbmRlcl91dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkVDODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IG10bF9zdGF0ZV9jYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGRjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJNdGwubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBGcmFtZUJ1ZmZlck10bC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQ0EyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBtdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZFQ0IyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkZXJNdGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRkY4MUZFQ0MyNTgxOEQ2ODAwODk0RTI0IC8qIFNoYWRlck10bC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNoYWRlck10bC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZFQ0QyNTgxOEQ2ODAwODk0RTI0IC8qIFByb2dy
YW1NdGwubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcm9ncmFt
TXRsLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkVDRTI1ODE4RDY4MDA4
OTRFMjQgLyogRGlzcGxheU10bC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IERpc3BsYXlNdGwubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjE1MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhbnNsYXRvck1ldGFsRGlyZWN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xh
dG9yTWV0YWxEaXJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZGMTcyNTgxOTBDQTAwODk0RTI0IC8qIFN0YXRpY1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkYxODI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsRGlyZWN0ICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFRyYW5zbGF0b3JNZXRhbERpcmVjdDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMTkyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JN
ZXRhbFV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5z
bGF0b3JNZXRhbFV0aWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZG
MUEyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbFV0aWxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zbGF0b3JNZXRhbFV0aWxzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hbWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyMjI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJE
ZXBlbmRlbnRGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlz
Y292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RkY4MUZGMjMyNTgxOTE5NzAwODk0RTI0IC8qIERlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjI0MjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMjUyNTgx
OTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VwYXJhdGVDb21wb3VuZFN0cnVj
dERlY2xhcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjI2
MjU4MTkxOTcwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9kaWZ5U3RydWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMjcyNTgxOTE5NzAwODk0RTI0IC8qIFJlZHVjZUludGVyZmFjZUJsb2Nr
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWR1Y2VJbnRlcmZhY2VCbG9j
a3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMjgyNTgxOTE5NzAwODk0
RTI0IC8qIEVudmlyb25tZW50VmFyaWFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRW52aXJvbm1lbnRWYXJpYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlGRjgxRkYyOTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGlzY292ZXJEZXBlbmRl
bnRGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYyQTI1
ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9u
VHJhdmVyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjJCMjU4MTkx
OTcwMDg5NEUyNCAvKiBEZWJ1Z1NpbmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGVidWdTaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjJDMjU4
MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMkQyNTgxOTE5
NzAwODk0RTI0IC8qIEVtaXRNZXRhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFbWl0TWV0YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkYyRTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmV3cml0ZU91dEFyZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGMkYyNTgxOTE5NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwU3ltYm9scy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjMwMjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xF
bnYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sRW52LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzEyNTgxOTE5NzAwODk0RTI0
IC8qIFJld3JpdGVLZXl3b3Jkcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZXdyaXRlS2V5d29yZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGMzIy
NTgxOTE5NzAwODk0RTI0IC8qIExheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkYzMzI1ODE5MTk3MDA4OTRFMjQgLyogVG9wb3NvcnRTdHJ1Y3RzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRvcG9zb3J0U3RydWN0cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM0MjU4MTkxOTcwMDg5NEUyNCAvKiBNYXBGdW5jdGlv
bnNUb0RlZmluaXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEZ1
bmN0aW9uc1RvRGVmaW5pdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZGMzUyNTgxOTE5NzAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNraXBwaW5nVHJhdmVyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRjM2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJn
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlT3V0QXJn
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM3MjU4MTkxOTcwMDg5
NEUyNCAvKiBQaXBlbGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQaXBlbGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjM4MjU4
MTkxOTcwMDg5NEUyNCAvKiBJZEdlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJZEdlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzOTI1ODE5MTk3
MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzQTI1ODE5MTk3MDA4OTRFMjQgLyogQWRkRXhw
bGljaXRUeXBlQ2FzdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlG
RjgxRkYzQjI1ODE5MTk3MDA4OTRFMjQgLyogTWFwU3ltYm9scy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYXBTeW1ib2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJld3JpdGVQaXBlbGluZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzRDI1ODE5MTk3MDA4OTRFMjQgLyog
UmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRjNFMjU4MTkxOTcwMDg5NEUyNCAvKiBBc3RIZWxwZXJzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFzdEhlbHBlcnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkYzRjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlGRjgxRkY0MDI1ODE5MTk3MDA4OTRFMjQgLyogTGF5b3V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY0MTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlv
blRyYXZlcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNj
b3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGNDIyNTgxOTE5NzAwODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2dyYW1QcmVsdWRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQzMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRl
R2xvYmFsUXVhbGlmaWVyRGVjbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZGODFGRjQ0MjU4MTkxOTcwMDg5NEUyNCAvKiBTeW1ib2xFbnYuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sRW52Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZGODFGRjQ1MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVy
RGVjbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmV3cml0ZUds
b2JhbFF1YWxpZmllckRlY2xzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4
MUZGNDYyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlVW5hZGRyZXNz
YWJsZVJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY0
NzI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBc3RIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZG
ODFGRjQ4MjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIb2lzdENvbnN0YW50cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjQ5MjU4MTkxOTcwMDg5NEUyNCAvKiBQaXBlbGluZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaXBlbGluZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY0QTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVBp
cGVsaW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXdyaXRlUGlwZWxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRCMjU4MTkxOTcwMDg5
NEUyNCAvKiBSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVm
ZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjRDMjU4MTkxOTcw
MDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIb2lzdENvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgx
RkY0RDI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1haW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV3JhcE1haW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY0RTI1ODE5MTk3MDA4OTRFMjQgLyogQ29uc3RhbnROYW1lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUZGODFGRjRGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmV3cml0ZUtleXdv
cmRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGNTAyNTgxOTE5NzAw
ODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFByb2dyYW1QcmVsdWRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElkR2VuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkY4MUZGNTIyNTgxOTE5NzAwODk0RTI0IC8qIEVtaXRNZXRhbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFbWl0TWV0YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRkY4MUZGNTMyNTgxOTE5NzAwODk0RTI0IC8qIFdyYXBNYWluLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyYXBNYWluLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUZGODFGRjU0MjU4MTkxOTcwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBZGRFeHBsaWNpdFR5cGVDYXN0
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRjgxRkY1NTI1ODE5MTk3MDA4OTRF
MjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU2MjU4MTkxOTcwMDg5NEUyNCAvKiBNb2Rp
ZnlTdHJ1Y3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kaWZ5U3RydWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU3MjU4MTkxOTcwMDg5NEUy
NCAvKiBUb3Bvc29ydFN0cnVjdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VG9wb3NvcnRTdHJ1Y3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU4
MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFGRjU5MjU4MTkxOTcwMDg5NEUyNCAv
KiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRjgxRkY1QTI1ODE5MTk3MDA4OTRFMjQgLyogTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBGdW5jdGlvbnNU
b0RlZmluaXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTUy
NTgxQTM5NzAwODk0RTI0IC8qIE1ldGFsLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gTWV0
YWwuZnJhbWV3b3JrOyBwYXRoID0gU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9NZXRhbC5mcmFt
ZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OworCQlGRjgxRkY5NzI1ODFBM0MxMDA4OTRF
MjQgLyogTm9kZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9kZVR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTgyNTgxQTNDMTAwODk0
RTI0IC8qIEFzTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc05vZGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0
IC8qIEludGVybVJlYnVpbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW50ZXJtUmVidWlsZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZGODFG
RjlBMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEludGVybVJlYnVpbGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJh
bWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMjA0NSw2ICsyMzE3LDcgQEAKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQk1Q0IzMDQ5NDFE
RTQxNTcyMDBEMkM0MDUgLyogQ29yZUdyYXBoaWNzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
LAorCQkJCUZGODFGRjk2MjU4MUEzOTcwMDg5NEUyNCAvKiBNZXRhbC5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLywKIAkJCQk1Q0IzMDQ5MzFERTQxNTZCMDBEMkM0MDUgLyogUXVhcnR6Q29yZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTIwNTUsNiArMjMyOCw4IEBACiAJCTMxMDEyRDlGMThC
OTdCOUIwMDM5MDYyRiAvKiB0cmFuc2xhdG9yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlGRjgxRkYyMDI1ODE5MTk3MDA4OTRFMjQgLyogVHJhbnNsYXRv
ck1ldGFsRGlyZWN0ICovLAorCQkJCUZGODFGRjE4MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xh
dG9yTWV0YWxEaXJlY3QgKi8sCiAJCQkJNUNCRDU5NjkyMjgyNkEwMDAwMkIyMkFBIC8qIHRyZWVv
cHMgKi8sCiAJCQkJNUM1NUQ2RUEyMjgyNkM5ODAwQjVCQTJDIC8qIHRyZWV1dGlsICovLAogCQkJ
CTVDMURCQkZCMUIwNDM3NUYwMDIzNTU1MiAvKiBBU1RNZXRhZGF0YUhMU0wuY3BwICovLApAQCAt
MjE0NCw2ICsyNDE5LDcgQEAKIAkJCQkzMUEzMzFEMTFFQTVFRERBMDBGRDIyMDMgLyogU2V2ZXJp
dHkuaCAqLywKIAkJCQkzMTAxMkRGMjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFuZy5jcHAg
Ki8sCiAJCQkJNUMxREJDMUExQjA0Mzc1RjAwMjM1NTUyIC8qIFNoYWRlclZhcnMuY3BwICovLAor
CQkJCUZGODFGRjE3MjU4MTkwQ0EwMDg5NEUyNCAvKiBTdGF0aWNUeXBlLmggKi8sCiAJCQkJMzE1
RUJENDcxRkNFNDQyODAwQUM3QTg5IC8qIFN0cnVjdHVyZUhMU0wuY3BwICovLAogCQkJCTMxNUVC
RDczMUZDRTQ0MzQwMEFDN0E4OSAvKiBTdHJ1Y3R1cmVITFNMLmggKi8sCiAJCQkJNUM1NUQ2RDky
MjgyNkM3ODAwQjVCQTJDIC8qIFN5bWJvbC5jcHAgKi8sCkBAIC0yMTYwLDYgKzI0MzYsMTAgQEAK
IAkJCQkzMTAxMkRGQzE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCAqLywKIAkJ
CQkzMTAxMkRGRDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwICovLAogCQkJ
CTMxMDEyREZFMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oICovLAorCQkJCUZG
ODFGRjE2MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwICovLAor
CQkJCUZGODFGRjE1MjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCAq
LywKKwkJCQlGRjgxRkYxOTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRpbHMu
Y3BwICovLAorCQkJCUZGODFGRjFBMjU4MTkwQ0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxV
dGlscy5oICovLAogCQkJCTMxNUVCRDQwMUZDRTQ0MjYwMEFDN0E4OSAvKiBUcmFuc2xhdG9yVnVs
a2FuLmNwcCAqLywKIAkJCQkzMTVFQkQ2NjFGQ0U0NDMxMDBBQzdBODkgLyogVHJhbnNsYXRvclZ1
bGthbi5oICovLAogCQkJCTVDMURCQzFEMUIwNDM3NUYwMDIzNTU1MiAvKiBUeXBlcy5jcHAgKi8s
CkBAIC0yNTIyLDYgKzI4MDIsNyBAQAogCQk1QzU1RDZFQTIyODI2Qzk4MDBCNUJBMkMgLyogdHJl
ZXV0aWwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUZG
ODFGRjk4MjU4MUEzQzEwMDg5NEUyNCAvKiBBc05vZGUuaCAqLywKIAkJCQlBMzAzMDZGRTIzMDVG
NjM2MDAyREE5NzIgLyogRmluZEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlBMzAzMDZGRjIzMDVGNjM2
MDAyREE5NzIgLyogRmluZEZ1bmN0aW9uLmggKi8sCiAJCQkJNUM1NUQ2RUQyMjgyNkNCMjAwQjVC
QTJDIC8qIEZpbmRNYWluLmNwcCAqLywKQEAgLTI1MzIsOSArMjgxMywxMiBAQAogCQkJCTVDNTVE
NkVFMjI4MjZDQjIwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlX3V0aWwuaCAqLywKIAkJCQk1QzU1RDZG
NDIyODI2Q0IyMDBCNUJBMkMgLyogSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcCAqLywKIAkJ
CQk1QzU1RDZGODIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmgg
Ki8sCisJCQkJRkY4MUZGOTkyNTgxQTNDMTAwODk0RTI0IC8qIEludGVybVJlYnVpbGQuY3BwICov
LAorCQkJCUZGODFGRjlBMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggKi8sCiAJ
CQkJNUM1NUQ2RjIyMjgyNkNCMjAwQjVCQTJDIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJ
CQk1QzU1RDZGMTIyODI2Q0IyMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuaCAqLywKIAkJCQk1
QzU1RDZGNzIyODI2Q0IzMDBCNUJBMkMgLyogTm9kZVNlYXJjaC5oICovLAorCQkJCUZGODFGRjk3
MjU4MUEzQzEwMDg5NEUyNCAvKiBOb2RlVHlwZS5oICovLAogCQkJCUEzQzNGRTEyMjU1REREOTIw
MEI3MzAxOCAvKiBSZXBsYWNlQXJyYXlPZk1hdHJpeFZhcnlpbmcuY3BwICovLAogCQkJCUEzQzNG
RTExMjU1REREOTIwMEI3MzAxOCAvKiBSZXBsYWNlQXJyYXlPZk1hdHJpeFZhcnlpbmcuaCAqLywK
IAkJCQk2RUIwMUMxRjI0NzcyN0E5MDBFNTBCMzUgLyogUmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlh
YmxlLmNwcCAqLywKQEAgLTI1OTAsNiArMjg3NCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTVDQjMwMERGMURFMzlGMDMwMEQyQzQwNSAvKiBnbCAqLywKKwkJ
CQlGRjgxRkU3RjI1ODE4RDY4MDA4OTRFMjQgLyogbWV0YWwgKi8sCiAJCQkJNkUzM0U4RTcyNEQw
RDE5NjAwMjMwOUFDIC8qIEJ1ZmZlckltcGwuY3BwICovLAogCQkJCTVDQjMwNEFBMURFNDE2NDgw
MEQyQzQwNSAvKiBCdWZmZXJJbXBsLmggKi8sCiAJCQkJNUNCMzA0QUIxREU0MTY0ODAwRDJDNDA1
IC8qIENvbXBpbGVySW1wbC5oICovLApAQCAtMjc0NSw2ICszMDMwLDcgQEAKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNUNCMzA0OEIxREU0MTQzNTAwRDJDNDA1IC8q
IENvcmVHcmFwaGljcy5mcmFtZXdvcmsgKi8sCisJCQkJRkY4MUZGOTUyNTgxQTM5NzAwODk0RTI0
IC8qIE1ldGFsLmZyYW1ld29yayAqLywKIAkJCQk1Q0IzMDQ4RDFERTQxNDQ0MDBEMkM0MDUgLyog
T3BlbkdMLmZyYW1ld29yayAqLywKIAkJCQk1Q0IzMDQ4RjFERTQxNDU1MDBEMkM0MDUgLyogUXVh
cnR6Q29yZS5mcmFtZXdvcmsgKi8sCiAJCQkpOwpAQCAtMzE4Nyw2ICszNDczLDE1NCBAQAogCQkJ
cGF0aCA9IGluY2x1ZGUvR0xTTEFORzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CisJCUZGODFGRTdGMjU4MThENjgwMDg5NEUyNCAvKiBtZXRhbCAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkY4MUZFQTkyNTgxOEQ2ODAwODk0RTI0IC8q
IHNoYWRlcnMgKi8sCisJCQkJRkY4MUZFOUMyNTgxOEQ2ODAwODk0RTI0IC8qIEJ1ZmZlck10bC5o
ICovLAorCQkJCUZGODFGRTkxMjU4MThENjgwMDg5NEUyNCAvKiBCdWZmZXJNdGwubW0gKi8sCisJ
CQkJRkY4MUZFQkQyNTgxOEQ2ODAwODk0RTI0IC8qIENvbXBpbGVyTXRsLmggKi8sCisJCQkJRkY4
MUZFQzAyNTgxOEQ2ODAwODk0RTI0IC8qIENvbXBpbGVyTXRsLm1tICovLAorCQkJCUZGODFGRUM0
MjU4MThENjgwMDg5NEUyNCAvKiBDb250ZXh0TXRsLmggKi8sCisJCQkJRkY4MUZFQkYyNTgxOEQ2
ODAwODk0RTI0IC8qIENvbnRleHRNdGwubW0gKi8sCisJCQkJRkY4MUZFOEIyNTgxOEQ2ODAwODk0
RTI0IC8qIERpc3BsYXlNdGwuaCAqLywKKwkJCQlGRjgxRkVDRTI1ODE4RDY4MDA4OTRFMjQgLyog
RGlzcGxheU10bC5tbSAqLywKKwkJCQlGRjgxRkU4MjI1ODE4RDY4MDA4OTRFMjQgLyogRGlzcGxh
eU10bF9hcGkuaCAqLywKKwkJCQlGRjgxRkVCQzI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZm
ZXJNdGwuaCAqLywKKwkJCQlGRjgxRkVDOTI1ODE4RDY4MDA4OTRFMjQgLyogRnJhbWVCdWZmZXJN
dGwubW0gKi8sCisJCQkJRkY4MUZFQTUyNTgxOEQ2ODAwODk0RTI0IC8qIElPU3VyZmFjZVN1cmZh
Y2VNdGwuaCAqLywKKwkJCQlGRjgxRkU5RTI1ODE4RDY4MDA4OTRFMjQgLyogSU9TdXJmYWNlU3Vy
ZmFjZU10bC5tbSAqLywKKwkJCQlGRjgxRkVDMTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2J1ZmZl
cl9wb29sLmggKi8sCisJCQkJRkY4MUZFQzUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9idWZmZXJf
cG9vbC5tbSAqLywKKwkJCQlGRjgxRkU5QjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRf
YnVmZmVyLmggKi8sCisJCQkJRkY4MUZFOTYyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9jb21tYW5k
X2J1ZmZlci5tbSAqLywKKwkJCQlGRjgxRkU4ODI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2NvbW1v
bi5oICovLAorCQkJCUZGODFGRUM2MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29tbW9uLm1tICov
LAorCQkJCUZGODFGRTg5MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfY29uc3RhbnRzLmggKi8sCisJ
CQkJRkY4MUZFOTIyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5t
bSAqLywKKwkJCQlGRjgxRkU4RTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2Zvcm1hdF91dGlscy5o
ICovLAorCQkJCUZGODFGRTg1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZm9ybWF0X3V0aWxzLm1t
ICovLAorCQkJCUZGODFGRTk1MjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRp
bHMuaCAqLywKKwkJCQlGRjgxRkVCRTI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRs
X3V0aWxzLm1tICovLAorCQkJCUZGODFGRTgwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFu
Z191dGlscy5oICovLAorCQkJCUZGODFGRUNBMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfb2NjbHVz
aW9uX3F1ZXJ5X3Bvb2wuaCAqLywKKwkJCQlGRjgxRkVCQjI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X29jY2x1c2lvbl9xdWVyeV9wb29sLm1tICovLAorCQkJCUZGODFGRUM3MjU4MThENjgwMDg5NEUy
NCAvKiBtdGxfcmVuZGVyX3V0aWxzLmggKi8sCisJCQkJRkY4MUZFQTMyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9yZW5kZXJfdXRpbHMubW0gKi8sCisJCQkJRkY4MUZFQTAyNTgxOEQ2ODAwODk0RTI0
IC8qIG10bF9yZXNvdXJjZXMuaCAqLywKKwkJCQlGRjgxRkU5RjI1ODE4RDY4MDA4OTRFMjQgLyog
bXRsX3Jlc291cmNlcy5tbSAqLywKKwkJCQlGRjgxRkVDODI1ODE4RDY4MDA4OTRFMjQgLyogbXRs
X3N0YXRlX2NhY2hlLmggKi8sCisJCQkJRkY4MUZFQTEyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9z
dGF0ZV9jYWNoZS5tbSAqLywKKwkJCQlGRjgxRkVDMjI1ODE4RDY4MDA4OTRFMjQgLyogbXRsX3V0
aWxzLmggKi8sCisJCQkJRkY4MUZFOUQyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF91dGlscy5tbSAq
LywKKwkJCQlGRjgxRkU4MTI1ODE4RDY4MDA4OTRFMjQgLyogUHJvZ3JhbU10bC5oICovLAorCQkJ
CUZGODFGRUNEMjU4MThENjgwMDg5NEUyNCAvKiBQcm9ncmFtTXRsLm1tICovLAorCQkJCUZGODFG
RTg0MjU4MThENjgwMDg5NEUyNCAvKiBRdWVyeU10bC5oICovLAorCQkJCUZGODFGRThEMjU4MThE
NjgwMDg5NEUyNCAvKiBRdWVyeU10bC5tbSAqLywKKwkJCQlGRjgxRkU4RjI1ODE4RDY4MDA4OTRF
MjQgLyogUmVuZGVyQnVmZmVyTXRsLmggKi8sCisJCQkJRkY4MUZFODYyNTgxOEQ2ODAwODk0RTI0
IC8qIFJlbmRlckJ1ZmZlck10bC5tbSAqLywKKwkJCQlGRjgxRkU5MzI1ODE4RDY4MDA4OTRFMjQg
LyogUmVuZGVyVGFyZ2V0TXRsLmggKi8sCisJCQkJRkY4MUZFOTkyNTgxOEQ2ODAwODk0RTI0IC8q
IFJlbmRlclRhcmdldE10bC5tbSAqLywKKwkJCQlGRjgxRkU4QTI1ODE4RDY4MDA4OTRFMjQgLyog
U2FtcGxlck10bC5oICovLAorCQkJCUZGODFGRUE4MjU4MThENjgwMDg5NEUyNCAvKiBTYW1wbGVy
TXRsLm1tICovLAorCQkJCUZGODFGRUNCMjU4MThENjgwMDg5NEUyNCAvKiBTaGFkZXJNdGwuaCAq
LywKKwkJCQlGRjgxRkVDQzI1ODE4RDY4MDA4OTRFMjQgLyogU2hhZGVyTXRsLm1tICovLAorCQkJ
CUZGODFGRTk4MjU4MThENjgwMDg5NEUyNCAvKiBTdXJmYWNlTXRsLmggKi8sCisJCQkJRkY4MUZF
OTQyNTgxOEQ2ODAwODk0RTI0IC8qIFN1cmZhY2VNdGwubW0gKi8sCisJCQkJRkY4MUZFOEMyNTgx
OEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwuaCAqLywKKwkJCQlGRjgxRkU4MzI1ODE4RDY4MDA4OTRF
MjQgLyogU3luY010bC5tbSAqLywKKwkJCQlGRjgxRkVBNzI1ODE4RDY4MDA4OTRFMjQgLyogVGV4
dHVyZU10bC5oICovLAorCQkJCUZGODFGRUE2MjU4MThENjgwMDg5NEUyNCAvKiBUZXh0dXJlTXRs
Lm1tICovLAorCQkJCUZGODFGRTkwMjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFj
a010bC5oICovLAorCQkJCUZGODFGRUE0MjU4MThENjgwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVk
YmFja010bC5tbSAqLywKKwkJCQlGRjgxRkU5NzI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJy
YXlNdGwuaCAqLywKKwkJCQlGRjgxRkU5QTI1ODE4RDY4MDA4OTRFMjQgLyogVmVydGV4QXJyYXlN
dGwubW0gKi8sCisJCQkpOworCQkJcGF0aCA9IG1ldGFsOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJRkY4MUZFQTkyNTgxOEQ2ODAwODk0RTI0IC8qIHNoYWRlcnMgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUZGODFGRUFBMjU4MThE
NjgwMDg5NEUyNCAvKiBibGl0Lm1ldGFsICovLAorCQkJCUZGODFGRUIxMjU4MThENjgwMDg5NEUy
NCAvKiBjbGVhci5tZXRhbCAqLywKKwkJCQlGRjgxRkVBRDI1ODE4RDY4MDA4OTRFMjQgLyogY29t
bW9uLmggKi8sCisJCQkJRkY4MUZFQUMyNTgxOEQ2ODAwODk0RTI0IC8qIGNvbnN0YW50cy5oICov
LAorCQkJCUZGODFGRUFGMjU4MThENjgwMDg5NEUyNCAvKiBjb3B5X2J1ZmZlci5tZXRhbCAqLywK
KwkJCQlGRjgxRkVCMDI1ODE4RDY4MDA4OTRFMjQgLyogZm9ybWF0X2F1dG9nZW4uaCAqLywKKwkJ
CQlGRjgxRkVCMzI1ODE4RDY4MDA4OTRFMjQgLyogZ2VuX2luZGljZXMubWV0YWwgKi8sCisJCQkJ
RkY4MUZFQjIyNTgxOEQ2ODAwODk0RTI0IC8qIGdlbl9taXBtYXAubWV0YWwgKi8sCisJCQkJRkY4
MUZFQUUyNTgxOEQ2ODAwODk0RTI0IC8qIG10bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4u
aW5jICovLAorCQkJCUZGODFGRUFCMjU4MThENjgwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFs
ICovLAorCQkJKTsKKwkJCXBhdGggPSBzaGFkZXJzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJRkY4MUZGMjAyNTgxOTE5NzAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERp
cmVjdCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJRkY4
MUZGM0EyNTgxOTE5NzAwODk0RTI0IC8qIEFkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcCAqLywKKwkJ
CQlGRjgxRkY1NDI1ODE5MTk3MDA4OTRFMjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCAqLywK
KwkJCQlGRjgxRkYzRTI1ODE5MTk3MDA4OTRFMjQgLyogQXN0SGVscGVycy5jcHAgKi8sCisJCQkJ
RkY4MUZGNDcyNTgxOTE5NzAwODk0RTI0IC8qIEFzdEhlbHBlcnMuaCAqLywKKwkJCQlGRjgxRkY0
RTI1ODE5MTk3MDA4OTRFMjQgLyogQ29uc3RhbnROYW1lcy5oICovLAorCQkJCUZGODFGRjIzMjU4
MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Zy5oICovLAorCQkJCUZGODFGRjJCMjU4MTkxOTcwMDg5NEUy
NCAvKiBEZWJ1Z1NpbmsuaCAqLywKKwkJCQlGRjgxRkYyOTI1ODE5MTk3MDA4OTRFMjQgLyogRGlz
Y292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjIyMjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oICovLAorCQkJCUZGODFGRjQxMjU4
MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcCAq
LywKKwkJCQlGRjgxRkYyQTI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5j
dGlvblRyYXZlcnNlci5oICovLAorCQkJCUZGODFGRjJEMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0
TWV0YWwuY3BwICovLAorCQkJCUZGODFGRjUyMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0YWwu
aCAqLywKKwkJCQlGRjgxRkYyODI1ODE5MTk3MDA4OTRFMjQgLyogRW52aXJvbm1lbnRWYXJpYWJs
ZS5oICovLAorCQkJCUZGODFGRjQ4MjU4MTkxOTcwMDg5NEUyNCAvKiBIb2lzdENvbnN0YW50cy5j
cHAgKi8sCisJCQkJRkY4MUZGNEMyNTgxOTE5NzAwODk0RTI0IC8qIEhvaXN0Q29uc3RhbnRzLmgg
Ki8sCisJCQkJRkY4MUZGNTEyNTgxOTE5NzAwODk0RTI0IC8qIElkR2VuLmNwcCAqLywKKwkJCQlG
RjgxRkYzODI1ODE5MTk3MDA4OTRFMjQgLyogSWRHZW4uaCAqLywKKwkJCQlGRjgxRkYzMjI1ODE5
MTk3MDA4OTRFMjQgLyogTGF5b3V0LmNwcCAqLywKKwkJCQlGRjgxRkY0MDI1ODE5MTk3MDA4OTRF
MjQgLyogTGF5b3V0LmggKi8sCisJCQkJRkY4MUZGNUEyNTgxOTE5NzAwODk0RTI0IC8qIE1hcEZ1
bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjM0MjU4MTkxOTcwMDg5NEUy
NCAvKiBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmggKi8sCisJCQkJRkY4MUZGMkYyNTgxOTE5
NzAwODk0RTI0IC8qIE1hcFN5bWJvbHMuY3BwICovLAorCQkJCUZGODFGRjNCMjU4MTkxOTcwMDg5
NEUyNCAvKiBNYXBTeW1ib2xzLmggKi8sCisJCQkJRkY4MUZGMjYyNTgxOTE5NzAwODk0RTI0IC8q
IE1vZGlmeVN0cnVjdC5jcHAgKi8sCisJCQkJRkY4MUZGNTYyNTgxOTE5NzAwODk0RTI0IC8qIE1v
ZGlmeVN0cnVjdC5oICovLAorCQkJCUZGODFGRjIxMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNw
cCAqLywKKwkJCQlGRjgxRkYyNDI1ODE5MTk3MDA4OTRFMjQgLyogTmFtZS5oICovLAorCQkJCUZG
ODFGRjM3MjU4MTkxOTcwMDg5NEUyNCAvKiBQaXBlbGluZS5jcHAgKi8sCisJCQkJRkY4MUZGNDky
NTgxOTE5NzAwODk0RTI0IC8qIFBpcGVsaW5lLmggKi8sCisJCQkJRkY4MUZGNTAyNTgxOTE5NzAw
ODk0RTI0IC8qIFByb2dyYW1QcmVsdWRlLmNwcCAqLywKKwkJCQlGRjgxRkY0MjI1ODE5MTk3MDA4
OTRFMjQgLyogUHJvZ3JhbVByZWx1ZGUuaCAqLywKKwkJCQlGRjgxRkYzRDI1ODE5MTk3MDA4OTRF
MjQgLyogUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcCAqLywKKwkJCQlGRjgxRkYyNzI1ODE5MTk3
MDA4OTRFMjQgLyogUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmggKi8sCisJCQkJRkY4MUZGNEIyNTgx
OTE5NzAwODk0RTI0IC8qIFJlZmVyZW5jZS5oICovLAorCQkJCUZGODFGRjU4MjU4MTkxOTcwMDg5
NEUyNCAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgKi8sCisJCQkJRkY4MUZGNTkyNTgx
OTE5NzAwODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmggKi8sCisJCQkJRkY4MUZG
NDUyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAgKi8s
CisJCQkJRkY4MUZGNDMyNTgxOTE5NzAwODk0RTI0IC8qIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJE
ZWNscy5oICovLAorCQkJCUZGODFGRjRGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuY3BwICovLAorCQkJCUZGODFGRjMxMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29y
ZHMuaCAqLywKKwkJCQlGRjgxRkYzNjI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZU91dEFyZ3Mu
Y3BwICovLAorCQkJCUZGODFGRjJFMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5o
ICovLAorCQkJCUZGODFGRjNDMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNw
cCAqLywKKwkJCQlGRjgxRkY0QTI1ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVBpcGVsaW5lcy5o
ICovLAorCQkJCUZGODFGRjQ2MjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJs
ZVJlZmVyZW5jZXMuY3BwICovLAorCQkJCUZGODFGRjNGMjU4MTkxOTcwMDg5NEUyNCAvKiBSZXdy
aXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCAqLywKKwkJCQlGRjgxRkY1NTI1ODE5MTk3MDA4
OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmNwcCAqLywKKwkJCQlGRjgxRkYz
OTI1ODE5MTk3MDA4OTRFMjQgLyogU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggKi8sCisJ
CQkJRkY4MUZGMjUyNTgxOTE5NzAwODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMuY3BwICovLAorCQkJCUZGODFGRjJDMjU4MTkxOTcwMDg5NEUyNCAvKiBTZXBhcmF0
ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggKi8sCisJCQkJRkY4MUZGMzUyNTgxOTE5NzAw
ODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggKi8sCisJCQkJRkY4MUZGMzAyNTgxOTE5NzAw
ODk0RTI0IC8qIFN5bWJvbEVudi5jcHAgKi8sCisJCQkJRkY4MUZGNDQyNTgxOTE5NzAwODk0RTI0
IC8qIFN5bWJvbEVudi5oICovLAorCQkJCUZGODFGRjMzMjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bv
c29ydFN0cnVjdHMuY3BwICovLAorCQkJCUZGODFGRjU3MjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bv
c29ydFN0cnVjdHMuaCAqLywKKwkJCQlGRjgxRkY0RDI1ODE5MTk3MDA4OTRFMjQgLyogV3JhcE1h
aW4uY3BwICovLAorCQkJCUZGODFGRjUzMjU4MTkxOTcwMDg5NEUyNCAvKiBXcmFwTWFpbi5oICov
LAorCQkJKTsKKwkJCXBhdGggPSBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KIAogLyogQmVn
aW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMzYxMSw2ICs0MDQ1LDcgQEAK
IAkJCWZpbGVzID0gKAogCQkJCUEzQzQ5QzE1MjU1REY4NjUwMDVFOERGNyAvKiBBZGRBbmRUcnVl
VG9Mb29wQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY5NzIyODI2QjlGMDBC
NUJBMkMgLyogQWRkRGVmYXVsdFJldHVyblN0YXRlbWVudHMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZGODFGRjhFMjU4MTkxOTgwMDg5NEUyNCAvKiBBZGRFeHBsaWNpdFR5cGVDYXN0cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUM1NUQ3MjQyMjgyNzQ3NzAwQjVCQTJDIC8qIGFsaWduZWRfbWVtb3J5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDdBMTIzMDYyNUM2MDAyREE5NzIgLyogYW5kcm9p
ZF91dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDc5OTIzMDYwMjUzMDAyREE5NzIgLyog
YW5nbGVfZ2wuaCBpbiBIZWFkZXJzICovLApAQCAtMzYxOCw2ICs0MDUzLDggQEAKIAkJCQk1Q0M3
RDQ2QjE5MTAyNjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTA4QzNDREQxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUM1NUQ2OEEyMjgyNkI5RjAwQjVCQTJDIC8qIEFycmF5UmV0dXJuVmFsdWVU
b091dFBhcmFtZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGOUMyNTgxQTNDMjAwODk0
RTI0IC8qIEFzTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGODEyNTgxOTE5ODAwODk0
RTI0IC8qIEFzdEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCQzIzMUIwNDM3NUYw
MDIzNTU1MiAvKiBBU1RNZXRhZGF0YUhMU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREQ2
MUIwNDM4RDMwMDIzNTU1MiAvKiBBdHRyaWJ1dGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
MDEyRTEyMThCOTdCOUIwMDM5MDYyRiAvKiBCYXNlVHlwZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
MzYzMSw2ICs0MDY4LDcgQEAKIAkJCQk1QzFEQkREOTFCMDQzOEQzMDAyMzU1NTIgLyogQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDExOTFERTM5RjFBMDBEMkM0MDUgLyogQnVmZmVy
R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNERCMURFNDE2NDgwMEQyQzQwNSAvKiBCdWZm
ZXJJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVFQjI1ODE4RDY5MDA4OTRFMjQgLyog
QnVmZmVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCQzI5
MUIwNDM3NUYwMDIzNTU1MiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvckdMU0wuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxNUVCRDdEMUZDRTQ0MzYwMEFDN0E4OSAvKiBCdWlsdEluRnVuY3Rpb25F
bXVsYXRvckhMU0wuaCBpbiBIZWFkZXJzICovLApAQCAtMzY0MywxMyArNDA4MSwxNyBAQAogCQkJ
CTMxNUVCRDlBMUZDRTQ0MzYwMEFDN0E4OSAvKiBDb2xsZWN0VmFyaWFibGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1Q0NEODE4RTFEQkZFQTEwMDA2MDY2QjggLyogQ29sb3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUZGODFGRUZCMjU4MThENjkwMDg5NEUyNCAvKiBjb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDMURCREREMUIwNDM4RDMwMDIzNTU1MiAvKiBDb21waWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUMxREJDMkMxQjA0Mzc1RjAwMjM1NTUyIC8qIENvbXBpbGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1Q0IzMDExQjFERTM5RjFBMDBEMkM0MDUgLyogQ29tcGlsZXJHTC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0REMxREU0MTY0ODAwRDJDNDA1IC8qIENvbXBpbGVySW1w
bC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMDQyNTgxOEQ2OTAwODk0RTI0IC8qIENvbXBp
bGVyTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0OUJGMzI1NURGNjk3MDA1RThERjcgLyog
Y29tcHJlc3Npb25fdXRpbHNfcG9ydGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMURCREUw
MUIwNDM4RDMwMDIzNTU1MiAvKiBDb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjg4
MjU4MTkxOTgwMDg5NEUyNCAvKiBDb25zdGFudE5hbWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzFEQkRFMTFCMDQzOEQzMDAyMzU1NTIgLyogQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRjgxRkVGQTI1ODE4RDY5MDA4OTRFMjQgLyogY29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTAxMkUxQTE4Qjk3QjlCMDAzOTA2MkYgLyogQ29uc3RhbnRVbmlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUMxREJERTMxQjA0MzhEMzAwMjM1NTUyIC8qIENvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUEzMDMwNzI3MjMwNUY3QzQwMDJEQTk3MiAvKiBDb250ZXh0LmlubC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNjU3LDkgKzQwOTksMTIgQEAKIAkJCQkzMTNCQ0U1RjIzNjExMzNB
MDBGQzM5RTUgLyogQ29udGV4dEVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFEMURF
MzlGMUEwMEQyQzQwNSAvKiBDb250ZXh0R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNERF
MURFNDE2NDgwMEQyQzQwNSAvKiBDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZGMEEyNTgxOEQ2OTAwODk0RTI0IC8qIENvbnRleHRNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDQ0Q1OThFMjI4NEZDNDAwMDE4RjJEOCAvKiBjb3B5aW1hZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDQ0Q4MTczMURCRkU5OTkwMDYwNjZCOCAvKiBEZWJ1Zy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNDN0Q0NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlGRjgxRkY1RDI1ODE5MTk3MDA4OTRFMjQgLyogRGVidWcuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUZGODFGRjY1MjU4MTkxOTcwMDg5NEUyNCAvKiBEZWJ1Z1NpbmsuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDNTVENzM0MjI4Mjc0REUwMEI1QkEyQyAvKiBEZWNsYXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzU1RDY1RTIyODI2QjlGMDBCNUJBMkMgLyogRGVjbGFyZUFuZEluaXRCdWlsdGlu
c0Zvckluc3RhbmNlZE11bHRpdmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2ODkyMjgy
NkI5RjAwQjVCQTJDIC8qIERlZmVyR2xvYmFsSW5pdGlhbGl6ZXJzLmggaW4gSGVhZGVycyAqLywK
QEAgLTM2NzIsNiArNDExNyw4IEBACiAJCQkJMzEwMTJFMjkxOEI5N0I5QjAwMzkwNjJGIC8qIERp
cmVjdGl2ZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEFGMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4
QjExNjk3NERFRDAwNkZBQTVBIC8qIERpcmVjdGl2ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkY4MUZGNUMyNTgxOTE5NzAwODk0RTI0IC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY2NDI1ODE5MTk3MDA4OTRFMjQgLyogRGlzY292
ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJE
QkMxRkNFNDRCRjAwQUM3QTg5IC8qIERpc3BhdGNoVGFibGVHTF9hdXRvZ2VuLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1QzFEQkRFOTFCMDQzOEQzMDAyMzU1NTIgLyogRGlzcGxheS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTNDNDlDMUUyNTVERjg4RTAwNUU4REY3IC8qIERpc3BsYXlBcHBsZV9hcGku
aCBpbiBIZWFkZXJzICovLApAQCAtMzY3OSw2ICs0MTI2LDggQEAKIAkJCQkzMTNCQ0U1NDIzNjEx
MzNBMDBGQzM5RTUgLyogRGlzcGxheUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTFG
MURFMzlGMUEwMEQyQzQwNSAvKiBEaXNwbGF5R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMw
NEUyMURFNDE2NDgwMEQyQzQwNSAvKiBEaXNwbGF5SW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RkY4MUZFREEyNTgxOEQ2OTAwODk0RTI0IC8qIERpc3BsYXlNdGwuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZGODFGRUQyMjU4MThENjgwMDg5NEUyNCAvKiBEaXNwbGF5TXRsX2FwaS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE1RUJEQzkxRkNFNDRFNDAwQUM3QTg5IC8qIGRyaXZlcl91dGlscy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkVCMDFDMUQyNDc3Mjc5QTAwRTUwQjM1IC8qIEVhcmx5RnJhZ21l
bnRUZXN0c09wdGltaXphdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQjc5NTgyNDkxQzg0
NTAwOTgyODc4IC8qIGVnbC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNjg5LDYgKzQxMzgsNyBAQAog
CQkJCUEzQzQ5QkY5MjU1REY2RTUwMDVFOERGNyAvKiBFR0xSZXVzYWJsZVN5bmMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQ0Q1OTY3MjI4NEY3OTYwMDE4RjJEOCAvKiBFR0xTeW5jLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBM0M0OUJGQTI1NURGNkU1MDA1RThERjcgLyogRUdMU3luY0ltcGwuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRjhDMjU4MTkxOTgwMDg5NEUyNCAvKiBFbWl0TWV0YWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjZBMjI4MjZCOUYwMEI1QkEyQyAvKiBFbXVsYXRl
R0xGcmFnQ29sb3JCcm9hZGNhc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNkY3MjMwNUY1
RUUwMDJEQTk3MiAvKiBFbXVsYXRlTXVsdGlEcmF3U2hhZGVyQnVpbHRpbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTVDNTVENkEzMjI4MjZCOUYwMEI1QkEyQyAvKiBFbXVsYXRlUHJlY2lzaW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM3MDEsNiArNDE1MSw3IEBACiAJCQkJQTMwQjU4MkIyMzhERjgy
NjAwNzlGRERDIC8qIGVudHJ5X3BvaW50c19nbGVzXzNfMl9hdXRvZ2VuLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMURCNzk2QzI0OTFDOEY1MDA5ODI4NzggLyogZW50cnlfcG9pbnRzX2dsZXNfZXh0
X2F1dG9nZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzI1MjMwNUY3QzQwMDJEQTk3MiAv
KiBlbnRyeV9wb2ludHNfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjYyMjU4MTkx
OTcwMDg5NEUyNCAvKiBFbnZpcm9ubWVudFZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
QzFEQkRFQjFCMDQzOEQzMDAyMzU1NTIgLyogRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
NUVCREU5MUZDRTQ1MkQwMEFDN0E4OSAvKiBFcnJvclN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzcyMiw2ICs0MTczLDcgQEAKIAkJCQk1QzlGRkY0RjE5MTAyQTAwMDAyNUI4RkEg
LyogRmxhZ1N0ZDE0MFN0cnVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkE0MjI4MjZC
OUYwMEI1QkEyQyAvKiBGb2xkRXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMw
NEU4MURFNDE2NDgwMEQyQzQwNSAvKiBGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFG
RUZFMjU4MThENjkwMDg5NEUyNCAvKiBmb3JtYXRfYXV0b2dlbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUMxREJERjIxQjA0MzhEMzAwMjM1NTUyIC8qIGZvcm1hdHV0aWxzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1Q0IzMDEyNjFERTM5RjFBMDBEMkM0MDUgLyogZm9ybWF0dXRpbHNnbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkUzM0U4RUUyNEQwRDIwOTAwMjMwOUFDIC8qIGZyYW1lX2NhcHR1cmVf
dXRpbHMuaCBpbiBIZWFkZXJzICovLApAQCAtMzczMSw2ICs0MTgzLDcgQEAKIAkJCQk1Q0IzMDEy
ODFERTM5RjFBMDBEMkM0MDUgLyogRnJhbWVidWZmZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUNCMzA0RUIxREU0MTY0ODAwRDJDNDA1IC8qIEZyYW1lYnVmZmVySW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUNCMzA0RUExREU0MTY0ODAwRDJDNDA1IC8qIEZyYW1lYnVmZmVySW1wbF9tb2Nr
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwMzI1ODE4RDY5MDA4OTRFMjQgLyogRnJhbWVC
dWZmZXJNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkU5MjI4MjZDNzkwMEI1QkEyQyAv
KiBGdW5jdGlvbkxvb2t1cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTNDNDlDMDAyNTVERjcxMTAw
NUU4REY3IC8qIEZ1bmN0aW9uc0NHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTNDNDlDMDUyNTVE
RjczNTAwNUU4REY3IC8qIEZ1bmN0aW9uc0VBR0wuaCBpbiBIZWFkZXJzICovLApAQCAtMzc2MCw2
ICs0MjEzLDggQEAKIAkJCQk1QzU1RDcyQzIyODI3NDc3MDBCNUJBMkMgLyogaGFzaF91dGlscy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzMxOEI5N0I5QjAwMzkwNjJGIC8qIEhhc2hOYW1l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJERkExQjA0MzhEMzAwMjM1NTUyIC8qIGhpc3Rv
Z3JhbV9tYWNyb3MuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjg2MjU4MTkxOTgwMDg5NEUy
NCAvKiBIb2lzdENvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNzIyNTgxOTE5
ODAwODk0RTI0IC8qIElkR2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NEODE3NzFEQkZFOTk5
MDA2MDY2QjggLyogSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTkzMjI4NEZDNDAw
MDE4RjJEOCAvKiBpbWFnZWZvcm1hdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRDk2MUZD
RTQ0MzYwMEFDN0E4OSAvKiBJbWFnZUZ1bmN0aW9uSExTTC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NzgwLDExICs0MjM1LDE0IEBACiAJCQkJNUMxREJDMzExQjA0Mzc1RjAwMjM1NTUyIC8qIEludGVy
bU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENkZFMjI4MjZDQjMwMEI1QkEyQyAvKiBJ
bnRlcm1Ob2RlX3V0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzA4MjI4MjZDQjMwMEI1
QkEyQyAvKiBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjlFMjU4MUEzQzIwMDg5NEUyNCAvKiBJbnRlcm1SZWJ1aWxkLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1QzU1RDcwMTIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtVHJhdmVyc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVDQ0Q1OTc3MjI4NEZBODMwMDE4RjJEOCAvKiBJT1N1cmZhY2VTdXJmYWNl
Q0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1NTIzNjExMzNBMDBGQzM5RTUgLyogSU9T
dXJmYWNlU3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUY0MjU4MThENjkw
MDg5NEUyNCAvKiBJT1N1cmZhY2VTdXJmYWNlTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVF
QkQ4RTFGQ0U0NDM2MDBBQzdBODkgLyogSXNBU1REZXB0aEJlbG93TGltaXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxREI3OTY2MjQ5MUM4ODIwMDk4Mjg3OCAvKiBraHJwbGF0Zm9ybS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRkY4MUZGN0EyNTgxOTE5ODAwODk0RTI0IC8qIExheW91dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMxREJDMzIxQjA0Mzc1RjAwMjM1NTUyIC8qIGxlbmd0aF9saW1pdHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI3MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjAxREU0MTY0ODAwRDJDNDA1IC8qIGxvYWRfZnVu
Y3Rpb25zX3RhYmxlLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTIsNiArNDI1MCw4IEBACiAJCQkJ
MzE1RUJERjExRkNFNDUyRDAwQUM3QTg5IC8qIExvZ2dpbmdBbm5vdGF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUEyNjRGOEI5MTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTI2NEY4QkIxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvRXhwYW5kZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRjZFMjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBGdW5jdGlvbnNU
b0RlZmluaXRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkY3NTI1ODE5MTk4MDA4OTRF
MjQgLyogTWFwU3ltYm9scy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDN0Q0NzMxOTEwMjYyMTAw
MEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NEODE5MDFEQkZFQTEw
MDA2MDY2QjggLyogbWF0cml4X3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGMjFC
MDQzNkVDMDAyMzU1NTIgLyogTWVtb3J5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM3OTks
OSArNDI1OSwyNCBAQAogCQkJCUEzMDMwNzhDMjMwNUY4RjAwMDJEQTk3MiAvKiBNZW1vcnlPYmpl
Y3RHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNDRDU5ODIyMjg0RkI5MDAwMThGMkQ4IC8qIE1l
bW9yeU9iamVjdEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREVEMUZDRTQ1MkQwMEFD
N0E4OSAvKiBNZW1vcnlQcm9ncmFtQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjkw
MjU4MTkxOTgwMDg5NEUyNCAvKiBNb2RpZnlTdHJ1Y3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjA4MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZGODFGRUVBMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfY29tbWFuZF9idWZmZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRUQ3MjU4MThENjkwMDg5NEUyNCAvKiBtdGxfY29tbW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVEODI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Nv
bnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFREQyNTgxOEQ2OTAwODk0RTI0IC8q
IG10bF9mb3JtYXRfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUU0MjU4MThENjkw
MDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ19tdGxfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRUQwMjU4MThENjgwMDg5NEUyNCAvKiBtdGxfZ2xzbGFuZ191dGlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZGMTAyNTgxOEQ2QTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVlcnlf
cG9vbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMEQyNTgxOEQ2QTAwODk0RTI0IC8qIG10
bF9yZW5kZXJfdXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUVGMjU4MThENjkwMDg5
NEUyNCAvKiBtdGxfcmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkYwRTI1ODE4
RDZBMDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgx
RkYwOTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlG
RjgxRkY1RTI1ODE5MTk3MDA4OTRFMjQgLyogTmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2NjkyMjgyNkI5RjAwQjVCQTJDIC8qIE5hbWVFbWJlZGRlZFVuaWZvcm1TdHJ1Y3RzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMzAzMDcwQjIzMDVGNkI1MDAyREE5NzIgLyogbm9fZGVzdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MDcyMjgyNkNCMzAwQjVCQTJDIC8qIE5vZGVT
ZWFyY2guaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjlCMjU4MUEzQzIwMDg5NEUyNCAvKiBO
b2RlVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEQzIxRkNFNDRCRjAwQUM3QTg5IC8q
IG51bGxfZnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCQzE2OTc0REVEMDA2
RkFBNUEgLyogbnVtZXJpY19sZXguaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTY2MjI4NEY3
OTYwMDE4RjJEOCAvKiBPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODIxLDYgKzQyOTYs
NyBAQAogCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDQjMwMTUxMURFMzlGNDcwMEQyQzQwNSAvKiBQYnVmZmVyU3VyZmFj
ZUNHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzQkNFNUQyMzYxMTMzQTAwRkMzOUU1IC8qIFBi
dWZmZXJTdXJmYWNlRUFHTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGODMyNTgxOTE5ODAw
ODk0RTI0IC8qIFBpcGVsaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGNTFCMDQzNkVD
MDAyMzU1NTIgLyogcGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCRTI5MUZDRjgw
OEMwMEFDN0E4OSAvKiBQTXVySGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ3MjcyMjgy
NzQ3NzAwQjVCQTJDIC8qIFBvb2xBbGxvYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODM0LDkgKzQz
MTAsMTEgQEAKIAkJCQk1Q0IzMDRGMzFERTQxNjQ4MDBEMkM0MDUgLyogUHJvZ3JhbUltcGwuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDQjMwNEYyMURFNDE2NDgwMEQyQzQwNSAvKiBQcm9ncmFtSW1w
bF9tb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRFNjFGQ0U0NTJEMDBBQzdBODkgLyog
UHJvZ3JhbUxpbmtlZFJlc291cmNlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZFRDEyNTgx
OEQ2ODAwODk0RTI0IC8qIFByb2dyYW1NdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREVF
MUZDRTQ1MkQwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxNUVCREJCMUZDRTQ0QkYwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmVHTC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE1RUJEQzgxRkNFNDRFNDAwQUM3QTg5IC8qIFByb2dyYW1QaXBlbGluZUlt
cGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjdDMjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9n
cmFtUHJlbHVkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2NzcyMjgyNkI5RjAwQjVCQTJD
IC8qIFBydW5lRW1wdHlDYXNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2QTUyMjgyNkI5
RjAwQjVCQTJDIC8qIFBydW5lTm9PcHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MUI2MURC
RkVBNUMwMDYwNjZCOCAvKiBRdWFsaWZpZXJUeXBlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODQ0
LDEwICs0MzIyLDEzIEBACiAJCQkJNUMxREJFMDQxQjA0MzhEMzAwMjM1NTUyIC8qIHF1ZXJ5Y29u
dmVyc2lvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTMyMURFMzlGMUEwMEQyQzQwNSAv
KiBRdWVyeUdMLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGNDFERTQxNjQ4MDBEMkM0MDUg
LyogUXVlcnlJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVENDI1ODE4RDY5MDA4OTRF
MjQgLyogUXVlcnlNdGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q4MTdEMURCRkU5OTkwMDYw
NjZCOCAvKiBxdWVyeXV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY3QzIyODI2QjlG
MDBCNUJBMkMgLyogUmVjb3JkQ29uc3RhbnRQcmVjaXNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUEzQzQ5QzEzMjU1REY4NjUwMDVFOERGNyAvKiBSZWNvcmRVbmlmb3JtQmxvY2tzVHJhbnNsYXRl
ZFRvU3RydWN0dXJlZEJ1ZmZlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjYxMjU4MTkx
OTcwMDg5NEUyNCAvKiBSZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDMURCRTA2MUIwNDM4RDMwMDIzNTU1MiAvKiBSZWZDb3VudE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkY4MUZGODUyNTgxOTE5ODAwODk0RTI0IC8qIFJlZmVyZW5jZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNUM1NUQ2NUMyMjgyNkI5RjAwQjVCQTJDIC8qIFJlZ2VuZXJhdGVTdHJ1Y3RO
YW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OUEyMjgyNkI5RjAwQjVCQTJDIC8qIFJl
bW92ZUFycmF5TGVuZ3RoTWV0aG9kLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUQ3QkRGMTI0MzJD
Q0M0MDBFMDE1MDMgLyogUmVtb3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmggaW4gSGVhZGVycyAq
LywKQEAgLTM4NjEsMTEgKzQzNDIsMTMgQEAKIAkJCQk1Q0IzMDEzNDFERTM5RjFBMDBEMkM0MDUg
LyogUmVuZGVyYnVmZmVyR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEY2MURFNDE2NDgw
MEQyQzQwNSAvKiBSZW5kZXJidWZmZXJJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDRG
NTFERTQxNjQ4MDBEMkM0MDUgLyogUmVuZGVyYnVmZmVySW1wbF9tb2NrLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRjgxRkVERTI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyQnVmZmVyTXRsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1Q0IzMDRGODFERTQxNjQ4MDBEMkM0MDUgLyogcmVuZGVyZXJfdXRp
bHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTdDMjI4NEZBODMwMDE4RjJEOCAvKiBSZW5k
ZXJlckNHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzQkNFNTcyMzYxMTMzQTAwRkMzOUU1IC8q
IFJlbmRlcmVyRUFHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxMzgxREUzOUYxQTAwRDJD
NDA1IC8qIFJlbmRlcmVyR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwMTM2MURFMzlGMUEw
MEQyQzQwNSAvKiByZW5kZXJlcmdsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVF
MjI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBM0M0OUMxQTI1NURGODZGMDA1RThERjcgLyogUmVwbGFjZUFycmF5T2ZNYXRyaXhWYXJ5aW5n
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RUIwMUMyMjI0NzcyN0E5MDBFNTBCMzUgLyogUmVwbGFj
ZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDcwNzIzMDVG
NjM2MDAyREE5NzIgLyogUmVwbGFjZVNoYWRvd2luZ1ZhcmlhYmxlcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zODc2LDE2ICs0MzU5LDIyIEBACiAJCQkJMzE1RUJERjkxRkNFNDUyRDAwQUM3QTg5IC8q
IFJlc291cmNlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMzAzMDZGNjIzMDVGNUVFMDAyREE5
NzIgLyogUmV3cml0ZUF0b21pY0NvdW50ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDY1
NzIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0ZUF0b21pY0Z1bmN0aW9uRXhwcmVzc2lvbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCUZGODFGRjkzMjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlQ2Fz
ZURlY2xhcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTMwMzA2RjkyMzA1RjVFRTAwMkRB
OTcyIC8qIFJld3JpdGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUEzMDMwNkY4MjMwNUY1RUUwMDJEQTk3MiAvKiBSZXdyaXRlRGZkeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUM1NUQ2NEUyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3JpdGVEb1doaWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QzU1RDY5MTIyODI2QjlGMDBCNUJBMkMgLyogUmV3cml0ZUVsc2VC
bG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjlFMjI4MjZCOUYwMEI1QkEyQyAvKiBS
ZXdyaXRlRXhwcmVzc2lvbnNXaXRoU2hhZGVyU3RvcmFnZUJsb2NrLmggaW4gSGVhZGVycyAqLywK
KwkJCQlGRjgxRkY3RDI1ODE5MTk4MDA4OTRFMjQgLyogUmV3cml0ZUdsb2JhbFF1YWxpZmllckRl
Y2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0M0OUMxNDI1NURGODY1MDA1RThERjcgLyogUmV3
cml0ZUludGVycG9sYXRlQXRPZmZzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjZCMjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlS2V5d29yZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjY4MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlT3V0QXJncy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGODQyNTgxOTE5ODAwODk0RTI0IC8qIFJld3JpdGVQaXBlbGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDNTVENjY4MjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlUmVwZWF0
ZWRBc3NpZ25Ub1N3aXp6bGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0QzMjkxNTIzQ0ZDQjc3
MDAzNzU2NTcgLyogUmV3cml0ZVJvd01ham9yTWF0cmljZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTVDNTVENjRGMjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlU3RydWN0U2FtcGxlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDNTVENjg3MjI4MjZCOUYwMEI1QkEyQyAvKiBSZXdyaXRlVGV4ZWxG
ZXRjaE9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGNzkyNTgxOTE5ODAwODk0RTI0
IC8qIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUM1NUQ2ODQyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3JpdGVVbmFyeU1pbnVzT3BlcmF0b3JGbG9h
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2ODUyMjgyNkI5RjAwQjVCQTJDIC8qIFJld3Jp
dGVVbmFyeU1pbnVzT3BlcmF0b3JJbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENzBBMjI4
MjZDQjMwMEI1QkEyQyAvKiBSdW5BdFRoZUVuZE9mU2hhZGVyLmggaW4gSGVhZGVycyAqLywKQEAg
LTM4OTYsMTIgKzQzODUsMTUgQEAKIAkJCQk1QzFEQkYyODFCMDQzOEQzMDAyMzU1NTIgLyogU2Ft
cGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxM0ExREUzOUYxQTAwRDJDNDA1IC8qIFNh
bXBsZXJHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RjkxREU0MTY0ODAwRDJDNDA1IC8q
IFNhbXBsZXJJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVEOTI1ODE4RDY5MDA4OTRF
MjQgLyogU2FtcGxlck10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OEUyMjgyNkI5RjAw
QjVCQTJDIC8qIFNjYWxhcml6ZVZlY0FuZE1hdENvbnN0cnVjdG9yQXJncy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTMwMzA3MjkyMzA1RjdDNDAwMkRBOTcyIC8qIFNlbWFwaG9yZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTMwMzA3OEQyMzA1RjhGMDAwMkRBOTcyIC8qIFNlbWFwaG9yZUdMLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMzAzMDcyQjIzMDVGODAwMDAyREE5NzIgLyogU2VtYXBob3JlSW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2N0QyMjgyNkI5RjAwQjVCQTJDIC8qIFNlcGFy
YXRlQXJyYXlDb25zdHJ1Y3RvclN0YXRlbWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVE
Njk2MjI4MjZCOUYwMEI1QkEyQyAvKiBTZXBhcmF0ZUFycmF5SW5pdGlhbGl6YXRpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCUZGODFGRjczMjU4MTkxOTgwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjY2MjU4MTkxOTcwMDg5
NEUyNCAvKiBTZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1QzU1RDY3MDIyODI2QjlGMDBCNUJBMkMgLyogU2VwYXJhdGVEZWNsYXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjRDMjI4MjZCOUYwMEI1QkEyQyAvKiBTZXBhcmF0
ZUV4cHJlc3Npb25zUmV0dXJuaW5nQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBM0QzMjkw
MzIzQ0ZDNUEzMDAzNzU2NTcgLyogc2VyaWFsX3V0aWxzLmggaW4gSGVhZGVycyAqLywKQEAgLTM5
MTAsMTQgKzQ0MDIsMTcgQEAKIAkJCQk1Q0IzMDEzQzFERTM5RjFBMDBEMkM0MDUgLyogU2hhZGVy
R0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNEZBMURFNDE2NDgwMEQyQzQwNSAvKiBTaGFk
ZXJJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMURCNzk2NDI0OTFDODc2MDA5ODI4NzggLyog
U2hhZGVyTGFuZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4MUZGMTEyNTgxOEQ2QTAwODk0RTI0
IC8qIFNoYWRlck10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFEQjc5NjUyNDkxQzg3NjAwOTgy
ODc4IC8qIFNoYWRlclZhcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDNTVENjYxMjI4MjZCOUYw
MEI1QkEyQyAvKiBTaW1wbGlmeUxvb3BDb25kaXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTVFQkRGMDFGQ0U0NTJEMDBBQzdBODkgLyogU2l6ZWRNUlVDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkY4MUZGNkYyNTgxOTE5ODAwODk0RTI0IC8qIFNraXBwaW5nVHJhdmVyc2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBM0M0OUMwMzI1NURGNzE5MDA1RThERjcgLyogU29mdExpbmtpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEMwMTY5NzRERUQwMDZGQUE1QSAvKiBTb3VyY2VM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1NUQ2OUIyMjgyNkI5RjAwQjVCQTJDIC8q
IFNwbGl0U2VxdWVuY2VPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxREJGMkMxQjA0
MzhEMzAwMjM1NTUyIC8qIFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDEzRTFERTM5
RjFBMDBEMkM0MDUgLyogU3RhdGVNYW5hZ2VyR0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFG
RjFEMjU4MTkwQ0EwMDg5NEUyNCAvKiBTdGF0aWNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0NEODE4MTFEQkZFOTk5MDA2MDY2QjggLyogU3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
Q0IzMDRGQjFERTQxNjQ4MDBEMkM0MDUgLyogU3RyZWFtUHJvZHVjZXJJbXBsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1Q0NEODE5MjFEQkZFQTEwMDA2MDY2QjggLyogc3RyaW5nX3V0aWxzLmggaW4g
SGVhZGVycyAqLywKQEAgLTM5MjUsMTIgKzQ0MjAsMTUgQEAKIAkJCQk1QzFEQkYyRjFCMDQzOEQz
MDAyMzU1NTIgLyogU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzAxNDAxREUzOUYx
QTAwRDJDNDA1IC8qIFN1cmZhY2VHTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RkQxREU0
MTY0ODAwRDJDNDA1IC8qIFN1cmZhY2VJbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRjgxRkVF
NzI1ODE4RDY5MDA4OTRFMjQgLyogU3VyZmFjZU10bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM1
NUQ2RTYyMjgyNkM3OTAwQjVCQTJDIC8qIFN5bWJvbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkY4
MUZGN0UyNTgxOTE5ODAwODk0RTI0IC8qIFN5bWJvbEVudi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNjUxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1QzU1RDcwRDIyODI3NDE0MDBCNUJBMkMgLyogU3ltYm9sVGFibGVfYXV0b2dlbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzE1RUJEODUxRkNFNDQzNjAwQUM3QTg5IC8qIFN5bWJvbFVuaXF1
ZUlkLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRCOTFGQ0U0NEJGMDBBQzdBODkgLyogU3lu
Y0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRDQjFGQ0U0NEU0MDBBQzdBODkgLyogU3lu
Y0ltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRURCMjU4MThENjkwMDg5NEUyNCAvKiBT
eW5jTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEzMzFDNzFFQTVFRDVGMDBGRDIyMDMgLyog
c3lzdGVtX3V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0NENTk5QzIyODRGQzc1MDAxOEYy
RDggLyogU3lzdGVtSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFCMTU3MjIyMzZCODAzMzAw
Q0FBNEZEIC8qIFN5c3RlbUluZm9faW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtMzkzOSwx
OCArNDQzNywyMyBAQAogCQkJCTVDQjMwMTQyMURFMzlGMUEwMEQyQzQwNSAvKiBUZXh0dXJlR0wu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQjMwNTAwMURFNDE2NDgwMEQyQzQwNSAvKiBUZXh0dXJl
SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCMzA0RkUxREU0MTY0ODAwRDJDNDA1IC8qIFRl
eHR1cmVJbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRUY2MjU4MThENjkwMDg5
NEUyNCAvKiBUZXh0dXJlTXRsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTVFQkRGNDFGQ0U0NTJE
MDBBQzdBODkgLyogVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkJGNzFCMDQzNkVD
MDAyMzU1NTIgLyogdGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDMjE2OTc0REVEMDA2
RkFBNUEgLyogVG9rZW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEM0MTY5NzRERUQwMDZG
QUE1QSAvKiBUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjkxMjU4MTkxOTgw
MDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMDMwNzIw
MjMwNUY3QzQwMDJEQTk3MiAvKiB0cmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMzMxRTIx
RUE1RUZCODAwRkQyMjAzIC8qIHRyYWNlX2V2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzFE
QkYzNDFCMDQzOEQzMDAyMzU1NTIgLyogVHJhbnNmb3JtRmVlZGJhY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTVDQjMwMTQ0MURFMzlGMUEwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0dMLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDUwMjFERTQxNjQ4MDBEMkM0MDUgLyogVHJhbnNmb3Jt
RmVlZGJhY2tJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0IzMDUwMTFERTQxNjQ4MDBEMkM0
MDUgLyogVHJhbnNmb3JtRmVlZGJhY2tJbXBsX21vY2suaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRURGMjU4MThENjkwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVkYmFja010bC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU2RDE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRv
ckdMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjFCMjU4MTkwQ0EwMDg5NEUyNCAvKiBU
cmFuc2xhdG9yTWV0YWxEaXJlY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUZGODFGRjFGMjU4MTkw
Q0EwMDg5NEUyNCAvKiBUcmFuc2xhdG9yTWV0YWxVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzE1RUJEOUQxRkNFNDQzNjAwQUM3QTg5IC8qIFRyYW5zbGF0b3JWdWxrYW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUM1NUQ2ODYyMjgyNkI5RjAwQjVCQTJDIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDEwLDExICs0NTEzLDEzIEBACiAJCQkJNUMxREJGNDAx
QjA0MzhEMzAwMjM1NTUyIC8qIFZlcnRleEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0Iz
MDE0NjFERTM5RjFBMDBEMkM0MDUgLyogVmVydGV4QXJyYXlHTC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNUNCMzA1MDMxREU0MTY0ODAwRDJDNDA1IC8qIFZlcnRleEFycmF5SW1wbC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRkY4MUZFRTYyNTgxOEQ2OTAwODk0RTI0IC8qIFZlcnRleEFycmF5TXRsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1QzFEQkY0MjFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXR0
cmlidXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzU1RDcwMDIyODI2Q0IzMDBCNUJBMkMgLyog
VmlzaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzMUI2MTgzMjMwQjc0N0YwMDE2MTBENyAvKiBX
aW5kb3dTdXJmYWNlQ0dMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTNCQ0U1RTIzNjExMzNBMDBG
QzM5RTUgLyogV2luZG93U3VyZmFjZUVBR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNUVCREZB
MUZDRTQ1MkQwMEFDN0E4OSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCUZG
ODFGRjhEMjU4MTkxOTgwMDg5NEUyNCAvKiBXcmFwTWFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NUM1NUQ2NzUyMjgyNkI5RjAwQjVCQTJDIC8qIFdyYXBTd2l0Y2hTdGF0ZW1lbnRzSW5CbG9ja3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDQ0Q1OTUxMjI4NEVDRDEwMDE4RjJEOCAvKiB4eGhhc2gu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKQEAgLTQxMzcsMTQgKzQ2NDIsMTcgQEAKIAkJCWZpbGVz
ID0gKAogCQkJCUEzQzQ5QzBFMjU1REY4NUYwMDVFOERGNyAvKiBBZGRBbmRUcnVlVG9Mb29wQ29u
ZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkE5MjI4MjZCQzgwMEI1QkEyQyAv
KiBBZGREZWZhdWx0UmV0dXJuU3RhdGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkY3NDI1ODE5MTk4MDA4OTRFMjQgLyogQWRkRXhwbGljaXRUeXBlQ2FzdHMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUM1NUQ3MjEyMjgyNzQ3NzAwQjVCQTJDIC8qIGFsaWduZWRfbWVtb3J5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwN0EwMjMwNjI1QzYwMDJEQTk3MiAvKiBhbmRyb2lk
X3V0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERDMxQjA0MzhEMzAwMjM1NTUyIC8q
IGFuZ2xldHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJCRjAxQjA0MzZFQzAwMjM1
NTUyIC8qIGFuZ2xldXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTA4QzNDREMxNkQ2Q0I2
MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzU1RDZBQTIyODI2QkM4MDBCNUJBMkMgLyogQXJyYXlSZXR1cm5WYWx1ZVRvT3V0UGFyYW1ldGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjc4MjU4MTkxOTgwMDg5NEUyNCAvKiBBc3RI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCQzIyMUIwNDM3NUYwMDIzNTU1MiAv
KiBBU1RNZXRhZGF0YUhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERDUxQjA0MzhE
MzAwMjM1NTUyIC8qIEF0dHJpYnV0ZU1hcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY5
RjI1ODFBRDA0MDA4OTRFMjQgLyogYmxpdC5tZXRhbCBpbiBTb3VyY2VzICovLAogCQkJCTVDQjMw
MTE2MURFMzlGMUEwMEQyQzQwNSAvKiBCbGl0R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUND
RDU5NjEyMjg0Rjc5NjAwMThGMkQ4IC8qIEJsb2JDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzFEQkMyNDFCMDQzNzVGMDAyMzU1NTIgLyogYmxvY2tsYXlvdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC00MTUzLDYgKzQ2NjEsNyBAQAogCQkJCTVDMURCREQ4MUIwNDM4RDMwMDIzNTU1MiAv
KiBCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMTgxREUzOUYxQTAwRDJDNDA1
IC8qIEJ1ZmZlckdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFMzNFOEU4MjREMEQxRUIwMDIz
MDlBQyAvKiBCdWZmZXJJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUUwMjU4MThE
NjkwMDg5NEUyNCAvKiBCdWZmZXJNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxMzE4
Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUMxREJDMjgxQjA0Mzc1RjAwMjM1NTUyIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yR0xTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkQ4NDFGQ0U0NDM2MDBBQzdBODkg
LyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3JITFNMLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDE2
MSwxMiArNDY3MCwxNCBAQAogCQkJCTVDMURCRERBMUIwNDM4RDMwMDIzNTU1MiAvKiBDYXBzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkFDMjI4MjZCQzgwMEI1QkEyQyAvKiBDbGFtcEZy
YWdEZXB0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZBRDIyODI2QkM4MDBCNUJBMkMg
LyogQ2xhbXBQb2ludFNpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGQTIyNTgxQUQw
NDAwODk0RTI0IC8qIGNsZWFyLm1ldGFsIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQkQxRkNF
NDRCRjAwQUM3QTg5IC8qIENsZWFyTXVsdGl2aWV3R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzE1RUJEOEMxRkNFNDQzNjAwQUM3QTg5IC8qIENvbGxlY3RWYXJpYWJsZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDMURCRERDMUIwNDM4RDMwMDIzNTU1MiAvKiBDb21waWxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDExQTFERTM5RjFBMDBEMkM0MDUgLyogQ29tcGls
ZXJHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYwNzI1ODE4RDY5MDA4OTRFMjQgLyog
Q29tcGlsZXJNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUJGMjI1NURGNjk3MDA1RThE
RjcgLyogY29tcHJlc3Npb25fdXRpbHNfcG9ydGFibGUuY2MgaW4gU291cmNlcyAqLywKIAkJCQk1
QzFEQkRERjFCMDQzOEQzMDAyMzU1NTIgLyogQ29uZmlnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQ0Q4MUIwMURCRkVBNUMwMDYwNjZCOCAvKiBDb25zdGFudFVuaW9uLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNDE3Nyw2ICs0Njg4LDggQEAKIAkJCQkzMTNCQ0U1ODIzNjExMzNBMDBGQzM5RTUg
LyogQ29udGV4dEVBR0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMUMxREUzOUYxQTAw
RDJDNDA1IC8qIENvbnRleHRHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRERDFERTQx
NjQ4MDBEMkM0MDUgLyogQ29udGV4dEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZG
MDYyNTgxOEQ2OTAwODk0RTI0IC8qIENvbnRleHRNdGwubW0gaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkZBMTI1ODFBRDA0MDA4OTRFMjQgLyogY29weV9idWZmZXIubWV0YWwgaW4gU291cmNlcyAq
LywKIAkJCQk1Q0NENTk4RjIyODRGQzQwMDAxOEYyRDggLyogY29weWltYWdlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQ0Q4MTcyMURCRkU5OTkwMDYwNjZCOCAvKiBEZWJ1Zy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYgLyogZGVidWcuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC00MTkyLDYgKzQ3MDUsOCBAQAogCQkJCTMxMDEyRTI4MThCOTdCOUIwMDM5
MDYyRiAvKiBEaXJlY3RpdmVIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEFF
MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMjY0RjhCMDE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUZGODFGRjYzMjU4MTkxOTcwMDg5NEUyNCAvKiBEaXNjb3ZlckRl
cGVuZGVudEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY3QjI1ODE5MTk4
MDA4OTRFMjQgLyogRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMTVFQkRCRTFGQ0U0NEJGMDBBQzdBODkgLyogRGlzcGF0Y2hUYWJsZUdM
X2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJERTgxQjA0MzhEMzAwMjM1NTUy
IC8qIERpc3BsYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTNDNDlDMUMyNTVERjg4OTAwNUU4
REY3IC8qIERpc3BsYXlBcHBsZV9hcGkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTk5LDEyICs0
NzE0LDE0IEBACiAJCQkJMzEzQkNFNjEyMzYxMTMzQTAwRkMzOUU1IC8qIERpc3BsYXlFQUdMLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMUUxREUzOUYxQTAwRDJDNDA1IC8qIERpc3BsYXlH
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRFMTFERTQxNjQ4MDBEMkM0MDUgLyogRGlz
cGxheUltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGMTQyNTgxOEQ2QTAwODk0RTI0
IC8qIERpc3BsYXlNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRDQzFGQ0U0NEU0MDBB
QzdBODkgLyogZHJpdmVyX3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNzlEMjMw
NjI1NjUwMDJEQTk3MiAvKiBkcml2ZXJfdXRpbHNfbWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NkVCMDFDMUUyNDc3Mjc5QTAwRTUwQjM1IC8qIEVhcmx5RnJhZ21lbnRUZXN0c09wdGltaXphdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBM0M0OUJGNzI1NURGNkRGMDA1RThERjcgLyogRUdM
UmV1c2FibGVTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTZBMjI4NEY3OTYwMDE4
RjJEOCAvKiBFR0xTeW5jLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QkY4MjU1REY2RTEw
MDVFOERGNyAvKiBFR0xTeW5jSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY2NzI1
ODE5MTk3MDA4OTRFMjQgLyogRW1pdE1ldGFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVC
RDk3MUZDRTQ0MzYwMEFDN0E4OSAvKiBlbXVsYXRlZF9idWlsdGluX2Z1bmN0aW9uc19obHNsX2F1
dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QjEyMjgyNkJDODAwQjVCQTJDIC8q
IEVtdWxhdGVHTEZyYWdDb2xvckJyb2FkY2FzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMzAz
MDZGQzIzMDVGNUVFMDAyREE5NzIgLyogRW11bGF0ZU11bHRpRHJhd1NoYWRlckJ1aWx0aW5zLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNDI0MiwxMSArNDc1OSwxNCBAQAogCQkJCTVDMURCREYzMUIw
NDM4RDMwMDIzNTU1MiAvKiBGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFE
QkRGNTFCMDQzOEQzMDAyMzU1NTIgLyogRnJhbWVidWZmZXJBdHRhY2htZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQjMwMTI3MURFMzlGMUEwMEQyQzQwNSAvKiBGcmFtZWJ1ZmZlckdMLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjBGMjU4MThENkEwMDg5NEUyNCAvKiBGcmFtZUJ1
ZmZlck10bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTZFQTBENjkzMjM1MTVBNUMwMEI4NjUxRiAv
KiBGcmFtZUNhcHR1cmVfbW9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZFNDIyODI2
Qzc5MDBCNUJBMkMgLyogRnVuY3Rpb25Mb29rdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTND
NDlDMDIyNTVERjcxNDAwNUU4REY3IC8qIEZ1bmN0aW9uc0NHTC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBM0M0OUMwNzI1NURGNzM5MDA1RThERjcgLyogRnVuY3Rpb25zRUFHTC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDQjMwMTJCMURFMzlGMUEwMEQyQzQwNSAvKiBGdW5jdGlvbnNHTC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkZBNDI1ODFBRDA0MDA4OTRFMjQgLyogZ2VuX2luZGlj
ZXMubWV0YWwgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkZBMzI1ODFBRDA0MDA4OTRFMjQgLyog
Z2VuX21pcG1hcC5tZXRhbCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTZCMjI4NEY3OTYwMDE4
RjJEOCAvKiBHTEVTMVJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTYzMjI4
NEY3OTYwMDE4RjJEOCAvKiBHTEVTMVN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMUJB
QUIxMURGQjZGMzMwMDI5MDZCQiAvKiBnbG9iYWxfc3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00MjU0LDYgKzQ3NzQsOCBAQAogCQkJCUEzRDMyOTBCMjNDRkNCNEQwMDM3NTY1NyAvKiBnbHNs
YW5nX3RhYl9hdXRvZ2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCREY4MUIwNDM4RDMw
MDIzNTU1MiAvKiBIYW5kbGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJE
ODYxRkNFNDQzNjAwQUM3QTg5IC8qIEhhc2hOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlG
RjgxRkY4MjI1ODE5MTk4MDA4OTRFMjQgLyogSG9pc3RDb25zdGFudHMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkY4MUZGOEIyNTgxOTE5ODAwODk0RTI0IC8qIElkR2VuLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQ0Q4MTc2MURCRkU5OTkwMDYwNjZCOCAvKiBJbWFnZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1Q0NENTk5MTIyODRGQzQwMDAxOEYyRDggLyogaW1hZ2Vmb3JtYXRzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMxNUVCRDgzMUZDRTQ0MzYwMEFDN0E4OSAvKiBJbWFnZUZ1bmN0
aW9uSExTTC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQyNzAsMTAgKzQ3OTIsMTMgQEAKIAkJCQk1
QzFEQkMzMDFCMDQzNzVGMDAyMzU1NTIgLyogSW50ZXJtTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1QzU1RDcwOTIyODI2Q0IzMDBCNUJBMkMgLyogSW50ZXJtTm9kZV91dGlsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDNTVENzA0MjI4MjZDQjMwMEI1QkEyQyAvKiBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOUQyNTgxQTNDMjAwODk0
RTI0IC8qIEludGVybVJlYnVpbGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MDIyMjgy
NkNCMzAwQjVCQTJDIC8qIEludGVybVRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVD
Q0Q1OTc5MjI4NEZBODMwMDE4RjJEOCAvKiBJT1N1cmZhY2VTdXJmYWNlQ0dMLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxM0JDRTVDMjM2MTEzM0EwMEZDMzlFNSAvKiBJT1N1cmZhY2VTdXJmYWNl
RUFHTC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUVEMjU4MThENjkwMDg5NEUyNCAvKiBJ
T1N1cmZhY2VTdXJmYWNlTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEOUMxRkNFNDQz
NjAwQUM3QTg5IC8qIElzQVNURGVwdGhCZWxvd0xpbWl0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZGODFGRjZDMjU4MTkxOTgwMDg5NEUyNCAvKiBMYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTI2NEY4QjYxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDQjMwNEVGMURFNDE2NDgwMEQyQzQwNSAvKiBsb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRv
Z2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQ0Q1OTk1MjI4NEZDNDAwMDE4RjJEOCAvKiBs
b2FkaW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MjgxLDEyICs0ODA2LDI3IEBACiAJCQkJ
MzE1RUJERTgxRkNFNDUyRDAwQUM3QTg5IC8qIExvZ2dpbmdBbm5vdGF0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTI2NEY4QjgxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUEyNjRGOEJBMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjk0MjU4MTkxOTgwMDg5NEUyNCAvKiBNYXBGdW5j
dGlvbnNUb0RlZmluaXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjY5MjU4MTkx
OTgwMDg5NEUyNCAvKiBNYXBTeW1ib2xzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDQzdENDcy
MTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1
RDcyNTIyODI3NDc3MDBCNUJBMkMgLyogbWF0cml4X3V0aWxzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTVDMURCQkYxMUIwNDM2RUMwMDIzNTU1MiAvKiBNZW1vcnlCdWZmZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUNDRDU5NjQyMjg0Rjc5NjAwMThGMkQ4IC8qIE1lbW9yeU9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMzAzMDc4QjIzMDVGOEYwMDAyREE5NzIgLyogTWVtb3J5T2Jq
ZWN0R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJERjMxRkNFNDUyRDAwQUM3QTg5IC8q
IE1lbW9yeVByb2dyYW1DYWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkY2MDI1ODE5
MTk3MDA4OTRFMjQgLyogTW9kaWZ5U3RydWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFG
RjBCMjU4MThENjkwMDg5NEUyNCAvKiBtdGxfYnVmZmVyX3Bvb2wubW0gaW4gU291cmNlcyAqLywK
KwkJCQlGRjgxRkVFNTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2NvbW1hbmRfYnVmZmVyLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGMEMyNTgxOEQ2QTAwODk0RTI0IC8qIG10bF9jb21tb24u
bW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFMTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2Zv
cm1hdF90YWJsZV9hdXRvZ2VuLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRDUyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9mb3JtYXRfdXRpbHMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkYwNTI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkY4MUZGMDIyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5tbSBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUYyMjU4MThENjkwMDg5NEUyNCAv
KiBtdGxfcmVuZGVyX3V0aWxzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRUUyNTgxOEQ2
OTAwODk0RTI0IC8qIG10bF9yZXNvdXJjZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVG
MDI1ODE4RDY5MDA4OTRFMjQgLyogbXRsX3N0YXRlX2NhY2hlLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJRkY4MUZFRUMyNTgxOEQ2OTAwODk0RTI0IC8qIG10bF91dGlscy5tbSBpbiBTb3VyY2VzICov
LAorCQkJCUZGODFGRjVCMjU4MTkxOTcwMDg5NEUyNCAvKiBOYW1lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDNTVENkI2MjI4MjZCQzgwMEI1QkEyQyAvKiBOYW1lRW1iZWRkZWRVbmlmb3JtU3Ry
dWN0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRCRjFGQ0U0NEJGMDBBQzdBODkgLyog
bnVsbF9mdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNDRDU5NjkyMjg0Rjc5NjAw
MThGMkQ4IC8qIE9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDMwNiw2ICs0ODQ2LDcg
QEAKIAkJCQkzMTAxMkU1NDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDQ0Q1OTZGMjI4NEY5NTUwMDE4RjJEOCAvKiBQYnVmZmVyU3VyZmFj
ZUNHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTNCQ0U1NjIzNjExMzNBMDBGQzM5RTUgLyog
UGJ1ZmZlclN1cmZhY2VFQUdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjcxMjU4MTkx
OTgwMDg5NEUyNCAvKiBQaXBlbGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkRGRTFC
MDQzOEQzMDAyMzU1NTIgLyogUGxhdGZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJF
MjgxRkNGODA4QzAwQUM3QTg5IC8qIFBNdXJIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
MDEyRTU2MThCOTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC00MzE4LDkgKzQ4NTksMTEgQEAKIAkJCQk2RUQ3QkRGNjI0MzJDRDYyMDBFMDE1MDMgLyogUHJv
Z3JhbUV4ZWN1dGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCMzAxMkYxREUzOUYxQTAw
RDJDNDA1IC8qIFByb2dyYW1HTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRFQzFGQ0U0
NTJEMDBBQzdBODkgLyogUHJvZ3JhbUxpbmtlZFJlc291cmNlcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlGRjgxRkYxMzI1ODE4RDZBMDA4OTRFMjQgLyogUHJvZ3JhbU10bC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxNUVCREU1MUZDRTQ1MkQwMEFDN0E4OSAvKiBQcm9ncmFtUGlwZWxpbmUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQkExRkNFNDRCRjAwQUM3QTg5IC8qIFByb2dyYW1Q
aXBlbGluZUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZFQjAxQzI0MjQ3NzI3QzIwMEU1MEIz
NSAvKiBQcm9ncmFtUGlwZWxpbmVJbXBsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjhB
MjU4MTkxOTgwMDg5NEUyNCAvKiBQcm9ncmFtUHJlbHVkZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzU1RDZCNzIyODI2QkM4MDBCNUJBMkMgLyogUHJ1bmVFbXB0eUNhc2VzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNTVENkI4MjI4MjZCQzgwMEI1QkEyQyAvKiBQcnVuZU5vT3BzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDQ0Q4MUI1MURCRkVBNUMwMDYwNjZCOCAvKiBRdWFsaWZpZXJU
eXBlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzMjgsOSArNDg3MSwxMSBAQAogCQkJCTVDMURC
RTAzMUIwNDM4RDMwMDIzNTU1MiAvKiBxdWVyeWNvbnZlcnNpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDQjMwMTMxMURFMzlGMUEwMEQyQzQwNSAvKiBRdWVyeUdMLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQ0Q1OTgwMjI4NEZCOTAwMDE4RjJEOCAvKiBRdWVyeUltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZFREMyNTgxOEQ2OTAwODk0RTI0IC8qIFF1ZXJ5TXRsLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUNDRDgxN0MxREJGRTk5OTAwNjA2NkI4IC8qIHF1ZXJ5dXRpbHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QjkyMjgyNkJDODAwQjVCQTJDIC8qIFJlY29y
ZENvbnN0YW50UHJlY2lzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQzQ5QzBDMjU1REY4
NUYwMDVFOERGNyAvKiBSZWNvcmRVbmlmb3JtQmxvY2tzVHJhbnNsYXRlZFRvU3RydWN0dXJlZEJ1
ZmZlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzcyNTgxOTE5ODAwODk0RTI0IC8q
IFJlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZCQTIy
ODI2QkM4MDBCNUJBMkMgLyogUmVnZW5lcmF0ZVN0cnVjdE5hbWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTVDNTVENkJCMjI4MjZCQzgwMEI1QkEyQyAvKiBSZW1vdmVBcnJheUxlbmd0aE1ldGhv
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RUQ3QkRGMDI0MzJDQ0M0MDBFMDE1MDMgLyogUmVt
b3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDM0MiwxMSAr
NDg4NywxMyBAQAogCQkJCTVDNTVENkMwMjI4MjZCQzgwMEI1QkEyQyAvKiBSZW1vdmVVbnJlZmVy
ZW5jZWRWYXJpYWJsZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJFMDcxQjA0MzhEMzAw
MjM1NTUyIC8qIFJlbmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzMzFE
RTM5RjFBMDBEMkM0MDUgLyogUmVuZGVyYnVmZmVyR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
RkY4MUZFRDYyNTgxOEQ2OTAwODk0RTI0IC8qIFJlbmRlckJ1ZmZlck10bC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTVDQjMwNEY3MURFNDE2NDgwMEQyQzQwNSAvKiByZW5kZXJlcl91dGlscy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk3QTIyODRGQTgzMDAxOEYyRDggLyogUmVuZGVyZXJD
R0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEzQkNFNTkyMzYxMTMzQTAwRkMzOUU1IC8qIFJl
bmRlcmVyRUFHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzNzFERTM5RjFBMDBEMkM0
MDUgLyogUmVuZGVyZXJHTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzNTFERTM5RjFB
MDBEMkM0MDUgLyogcmVuZGVyZXJnbF91dGlscy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgx
RkVFODI1ODE4RDY5MDA4OTRFMjQgLyogUmVuZGVyVGFyZ2V0TXRsLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTNDNDlDMTkyNTVERjg2QzAwNUU4REY3IC8qIFJlcGxhY2VBcnJheU9mTWF0cml4VmFy
eWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RUIwMUMyMTI0NzcyN0E5MDBFNTBCMzUgLyog
UmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMw
NzA1MjMwNUY2MzYwMDJEQTk3MiAvKiBSZXBsYWNlU2hhZG93aW5nVmFyaWFibGVzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNDM1NCwyNyArNDkwMSwzNiBAQAogCQkJCTVDMURCRjI1MUIwNDM4RDMw
MDIzNTU1MiAvKiBSZXNvdXJjZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTMwMzA2
RkIyMzA1RjVFRTAwMkRBOTcyIC8qIFJld3JpdGVBdG9taWNDb3VudGVycy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1QzU1RDZDMTIyODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZUF0b21pY0Z1bmN0
aW9uRXhwcmVzc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGOTIyNTgxOTE5ODAw
ODk0RTI0IC8qIFJld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUEzMDMwNkZEMjMwNUY1RUUwMDJEQTk3MiAvKiBSZXdyaXRlQ3ViZU1hcFNhbXBsZXJzQXMyREFy
cmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzMDMwNkZBMjMwNUY1RUUwMDJEQTk3MiAvKiBS
ZXdyaXRlRGZkeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDMjIyODI2QkM4MDBCNUJB
MkMgLyogUmV3cml0ZURvV2hpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzMyMjgy
NkJDODAwQjVCQTJDIC8qIFJld3JpdGVFbHNlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNTVENkM0MjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlRXhwcmVzc2lvbnNXaXRoU2hhZGVy
U3RvcmFnZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjdGMjU4MTkxOTgwMDg5
NEUyNCAvKiBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTNDNDlDMEQyNTVERjg1RjAwNUU4REY3IC8qIFJld3JpdGVJbnRlcnBvbGF0ZUF0T2Zmc2V0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjg5MjU4MTkxOTgwMDg5NEUyNCAvKiBSZXdy
aXRlS2V5d29yZHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNzAyNTgxOTE5ODAwODk0
RTI0IC8qIFJld3JpdGVPdXRBcmdzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjc2MjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlUGlwZWxpbmVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDNTVENkM1MjI4MjZCQzgwMEI1QkEyQyAvKiBSZXdyaXRlUmVwZWF0ZWRBc3NpZ25Ub1N3aXp6
bGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzRDMyOTE0MjNDRkNCNzcwMDM3NTY1NyAvKiBS
ZXdyaXRlUm93TWFqb3JNYXRyaWNlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDNjIy
ODI2QkM4MDBCNUJBMkMgLyogUmV3cml0ZVN0cnVjdFNhbXBsZXJzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxQ0QwMENDMjQ5MTk2QTUwMDQ4NkYyNyAvKiBSZXdyaXRlU3RydWN0U2FtcGxlcnNP
bGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzcyMjgyNkJDODAwQjVCQTJDIC8qIFJl
d3JpdGVUZXhlbEZldGNoT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjgwMjU4
MTkxOTgwMDg5NEUyNCAvKiBSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUM1NUQ2QzgyMjgyNkJDODAwQjVCQTJDIC8qIFJld3JpdGVVbmFyeU1p
bnVzT3BlcmF0b3JGbG9hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDOTIyODI2QkM4
MDBCNUJBMkMgLyogUmV3cml0ZVVuYXJ5TWludXNPcGVyYXRvckludC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1QzU1RDZGQzIyODI2Q0IzMDBCNUJBMkMgLyogUnVuQXRUaGVFbmRPZlNoYWRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzFEQkYyNzFCMDQzOEQzMDAyMzU1NTIgLyogU2FtcGxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDEzOTFERTM5RjFBMDBEMkM0MDUgLyogU2Ft
cGxlckdMLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRUY3MjU4MThENjkwMDg5NEUyNCAv
KiBTYW1wbGVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2Q0EyMjgyNkJDODAwQjVC
QTJDIC8qIFNjYWxhcml6ZVZlY0FuZE1hdENvbnN0cnVjdG9yQXJncy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBMzAzMDcyODIzMDVGN0M0MDAyREE5NzIgLyogU2VtYXBob3JlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUEzMDMwNzhBMjMwNUY4RjAwMDJEQTk3MiAvKiBTZW1hcGhvcmVHTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZDQjIyODI2QkM4MDBCNUJBMkMgLyogU2VwYXJhdGVB
cnJheUNvbnN0cnVjdG9yU3RhdGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1RDZD
QzIyODI2QkM4MDBCNUJBMkMgLyogU2VwYXJhdGVBcnJheUluaXRpYWxpemF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZGODFGRjhGMjU4MTkxOTgwMDg5NEUyNCAvKiBTZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZGNUYyNTgxOTE5NzAw
ODk0RTI0IC8qIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNUM1NUQ2Q0QyMjgyNkJDODAwQjVCQTJDIC8qIFNlcGFyYXRlRGVjbGFyYXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkNFMjI4MjZCQzgwMEI1QkEyQyAvKiBT
ZXBhcmF0ZUV4cHJlc3Npb25zUmV0dXJuaW5nQXJyYXlzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQ0Q1OTg0MjI4NEZCRTcwMDE4RjJEOCAvKiBzaGExLmNjIGluIFNvdXJjZXMgKi8sCkBAIC00
MzgyLDYgKzQ5MzgsNyBAQAogCQkJCTVDQjMwMTNCMURFMzlGMUEwMEQyQzQwNSAvKiBTaGFkZXJH
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk4MTIyODRGQjkwMDAxOEYyRDggLyogU2hh
ZGVySW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYg
LyogU2hhZGVyTGFuZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkYxMjI1ODE4RDZBMDA4
OTRFMjQgLyogU2hhZGVyTXRsLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJDNDExQjA0Mzc1
RjAwMjM1NTUyIC8qIFNoYWRlclZhcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ2Q0Yy
MjgyNkJDODAwQjVCQTJDIC8qIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNUM1NUQ2RDAyMjgyNkJDODAwQjVCQTJDIC8qIFNwbGl0U2VxdWVuY2VPcGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQzOTMsMTEgKzQ5NTAsMTQgQEAKIAkJCQk1QzFEQkYy
RTFCMDQzOEQzMDAyMzU1NTIgLyogU3VyZmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0Iz
MDEzRjFERTM5RjFBMDBEMkM0MDUgLyogU3VyZmFjZUdMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwNEZDMURFNDE2NDgwMEQyQzQwNSAvKiBTdXJmYWNlSW1wbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlGRjgxRkVFMzI1ODE4RDY5MDA4OTRFMjQgLyogU3VyZmFjZU10bC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDNTVENkUzMjI4MjZDNzkwMEI1QkEyQyAvKiBTeW1ib2wuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRkY4MUZGNkEyNTgxOTE5ODAwODk0RTI0IC8qIFN5bWJvbEVudi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NDE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFi
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM1NUQ3MEUyMjgyNzQxNDAwQjVCQTJDIC8qIFN5
bWJvbFRhYmxlX2F1dG9nZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJEQUUxRkNFNDQz
NjAwQUM3QTg5IC8qIFN5bWJvbFVuaXF1ZUlkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxNUVC
REMwMUZDRTQ0QkYwMEFDN0E4OSAvKiBTeW5jR0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4
MUZFRDMyNTgxOEQ2ODAwODk0RTI0IC8qIFN5bmNNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlB
M0M0OUMyMTI1NURGOTczMDA1RThERjcgLyogc3lzdGVtX3V0aWxzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxQTMzMUM2MUVBNUVENUYwMEZEMjIwMyAvKiBzeXN0ZW1fdXRpbHNfbWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDNTVENzMwMjI4Mjc0NzcwMEI1QkEyQyAvKiBzeXN0ZW1fdXRp
bHNfcG9zaXguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00NDA5LDEzICs0OTY5LDE4IEBACiAJCQkJ
MzE1RUJEOTkxRkNFNDQzNjAwQUM3QTg5IC8qIFRleHR1cmVGdW5jdGlvbkhMU0wuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUNCMzAxNDExREUzOUYxQTAwRDJDNDA1IC8qIFRleHR1cmVHTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDRGRjFERTQxNjQ4MDBEMkM0MDUgLyogVGV4dHVyZUlt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZFRjUyNTgxOEQ2OTAwODk0RTI0IC8qIFRl
eHR1cmVNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRGMjFGQ0U0NTJEMDBBQzdBODkg
LyogVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCQkY2MUIwNDM2RUMwMDIzNTU1
MiAvKiB0bHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QzExNjk3NERFRDAwNkZBQTVB
IC8qIFRva2VuLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjZEMjU4MTkxOTgwMDg5NEUy
NCAvKiBUb3Bvc29ydFN0cnVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJGMzMxQjA0
MzhEMzAwMjM1NTUyIC8qIFRyYW5zZm9ybUZlZWRiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQjMwMTQzMURFMzlGMUEwMEQyQzQwNSAvKiBUcmFuc2Zvcm1GZWVkYmFja0dMLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUZGODFGRUYzMjU4MThENjkwMDg5NEUyNCAvKiBUcmFuc2Zvcm1GZWVk
YmFja010bC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTZBMThCOTdCOUIwMDM5MDYyRiAv
KiBUcmFuc2xhdG9yRVNTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2QzE4Qjk3QjlC
MDAzOTA2MkYgLyogVHJhbnNsYXRvckdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkY4MUZG
MUMyNTgxOTBDQTAwODk0RTI0IC8qIFRyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlGRjgxRkYxRTI1ODE5MENBMDA4OTRFMjQgLyogVHJhbnNsYXRvck1ldGFsVXRp
bHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE1RUJENzgxRkNFNDQzNjAwQUM3QTg5IC8qIFRy
YW5zbGF0b3JWdWxrYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxREJDNDQxQjA0Mzc1RjAw
MjM1NTUyIC8qIFR5cGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDNTVENkQxMjI4MjZCQzgw
MEI1QkEyQyAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
NDY2LDEwICs1MDMxLDEzIEBACiAJCQkJMzEwMTJFN0YxOEI5N0I5QjAwMzkwNjJGIC8qIFZlcnNp
b25HTFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMURCRjNGMUIwNDM4RDMwMDIzNTU1MiAv
KiBWZXJ0ZXhBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0IzMDE0NTFERTM5RjFBMDBE
MkM0MDUgLyogVmVydGV4QXJyYXlHTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRjgxRkVFOTI1
ODE4RDY5MDA4OTRFMjQgLyogVmVydGV4QXJyYXlNdGwubW0gaW4gU291cmNlcyAqLywKIAkJCQk1
QzFEQkY0MTFCMDQzOEQzMDAyMzU1NTIgLyogVmVydGV4QXR0cmlidXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUZGODFGRkEwMjU4MUFEMDQwMDg5NEUyNCAvKiB2aXNpYmlsaXR5Lm1ldGFsIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTMxQjYxODQyMzBCNzQ3RjAwMTYxMEQ3IC8qIFdpbmRvd1N1cmZh
Y2VDR0wubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMUIxNTcyMzIzNkI4MkJCMDBDQUE0RkQgLyog
V2luZG93U3VyZmFjZUVBR0wubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTVFQkRFNzFGQ0U0NTJE
MDBBQzdBODkgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZGODFGRjg3
MjU4MTkxOTgwMDg5NEUyNCAvKiBXcmFwTWFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzU1
RDZENTIyODI2QkM4MDBCNUJBMkMgLyogV3JhcFN3aXRjaFN0YXRlbWVudHNJbkJsb2Nrcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1Q0NENTk1MDIyODRFQ0QxMDAxOEYyRDggLyogeHhoYXNoLmMg
aW4gU291cmNlcyAqLywKIAkJCSk7CkBAIC00NTUyLDYgKzUxMjAsMTcgQEAKIAkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAzMUNE
RkRFRjI0OTE3Rjg5MDA0ODZGMjcgLyogQU5HTEUtc3RhdGljLnhjY29uZmlnICovOwogCQkJYnVp
bGRTZXR0aW5ncyA9IHsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJ
CQkiJChERUJVR19ERUZJTkVTKSIsCisJCQkJCUxJQkdMRVNWMl9JTVBMRU1FTlRBVElPTiwKKwkJ
CQkJTElCQU5HTEVfSU1QTEVNRU5UQVRJT04sCisJCQkJCUFOR0xFX0VOQUJMRV9PUEVOR0wsCisJ
CQkJCUFOR0xFX0VOQUJMRV9HTFNMLAorCQkJCQlBTkdMRV9FTkFCTEVfRVNTTCwKKwkJCQkJR0xf
U0lMRU5DRV9ERVBSRUNBVElPTiwKKwkJCQkJR0xFU19TSUxFTkNFX0RFUFJFQ0FUSU9OLAorCQkJ
CQlBTkdMRV9FTkFCTEVfTUVUQUwsCisJCQkJKTsKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlv
bjsKIAkJfTsKQEAgLTQ1NzQsNiArNTE1MywxNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDMxQ0RGREVGMjQ5MTdGODkw
MDQ4NkYyNyAvKiBBTkdMRS1zdGF0aWMueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0g
eworCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSIkKERFQlVHX0RF
RklORVMpIiwKKwkJCQkJTElCR0xFU1YyX0lNUExFTUVOVEFUSU9OLAorCQkJCQlMSUJBTkdMRV9J
TVBMRU1FTlRBVElPTiwKKwkJCQkJQU5HTEVfRU5BQkxFX09QRU5HTCwKKwkJCQkJQU5HTEVfRU5B
QkxFX0dMU0wsCisJCQkJCUFOR0xFX0VOQUJMRV9FU1NMLAorCQkJCQlHTF9TSUxFTkNFX0RFUFJF
Q0FUSU9OLAorCQkJCQlHTEVTX1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUFOR0xFX0VOQUJM
RV9NRVRBTCwKKwkJCQkpOwogCQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsKIAkJfTsKQEAgLTQ1ODEs
NiArNTE3MSwxNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IDMxQ0RGREVGMjQ5MTdGODkwMDQ4NkYyNyAvKiBBTkdMRS1z
dGF0aWMueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0geworCQkJCUdDQ19QUkVQUk9D
RVNTT1JfREVGSU5JVElPTlMgPSAoCisJCQkJCSIkKERFQlVHX0RFRklORVMpIiwKKwkJCQkJTElC
R0xFU1YyX0lNUExFTUVOVEFUSU9OLAorCQkJCQlMSUJBTkdMRV9JTVBMRU1FTlRBVElPTiwKKwkJ
CQkJQU5HTEVfRU5BQkxFX09QRU5HTCwKKwkJCQkJQU5HTEVfRU5BQkxFX0dMU0wsCisJCQkJCUFO
R0xFX0VOQUJMRV9FU1NMLAorCQkJCQlHTF9TSUxFTkNFX0RFUFJFQ0FUSU9OLAorCQkJCQlHTEVT
X1NJTEVOQ0VfREVQUkVDQVRJT04sCisJCQkJCUFOR0xFX0VOQUJMRV9NRVRBTCwKKwkJCQkpOwog
CQkJfTsKIAkJCW5hbWUgPSBSZWxlYXNlOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ29uZmlndXJhdGlvbnMvQU5HTEUtZHluYW1pYy54Y2NvbmZpZyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0NvbmZpZ3VyYXRpb25zL0FOR0xFLWR5bmFtaWMueGNjb25maWcK
aW5kZXggNmNiYmUxN2JlZjE5YTg1ODVjZGUxYjljNGVjYmIwNjk4NjRlNTFkNC4uYzU0ZDI3M2Ew
MjgyOGExYjZjNWQ3OTg3OTYzMjIxM2UyMGVmZThhMiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvQ29uZmlndXJhdGlvbnMvQU5HTEUtZHluYW1pYy54Y2NvbmZpZworKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9Db25maWd1cmF0aW9ucy9BTkdMRS1keW5hbWljLnhjY29u
ZmlnCkBAIC00LDcgKzQsNyBAQAogUFJPRFVDVF9OQU1FID0gQU5HTEUtc2hhcmVkOwogRVhFQ1VU
QUJMRV9QUkVGSVggPSBsaWI7CiAKLUFOR0xFX09USEVSX0xERkxBR1MgPSAtYWxsb3dhYmxlX2Ns
aWVudCBXZWJDb3JlIC1hbGxvd2FibGVfY2xpZW50IFdlYkNvcmVUZXN0U3VwcG9ydCAtZnJhbWV3
b3JrIFF1YXJ0ekNvcmUgLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29yayBGb3VuZGF0
aW9uIC1mcmFtZXdvcmsgSU9TdXJmYWNlICQoQU5HTEVfT1RIRVJfTERGTEFHU18kKFdLX1BMQVRG
T1JNX05BTUUpKSAkKEFOR0xFX1NUQVRJQ19MSUJfT1RIRVJfTERGTEFHUyk7CitBTkdMRV9PVEhF
Ul9MREZMQUdTID0gLWFsbG93YWJsZV9jbGllbnQgV2ViQ29yZSAtYWxsb3dhYmxlX2NsaWVudCBX
ZWJDb3JlVGVzdFN1cHBvcnQgLWZyYW1ld29yayBRdWFydHpDb3JlIC1mcmFtZXdvcmsgQ29yZUdy
YXBoaWNzIC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3JrIElPU3VyZmFjZSAtZnJhbWV3
b3JrIE1ldGFsICQoQU5HTEVfT1RIRVJfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKSAkKEFO
R0xFX1NUQVRJQ19MSUJfT1RIRVJfTERGTEFHUyk7CiBBTkdMRV9PVEhFUl9MREZMQUdTX2lwaG9u
ZW9zID0gLWx6OwogQU5HTEVfT1RIRVJfTERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAkKEFOR0xF
X09USEVSX0xERkxBR1NfaXBob25lb3MpOwogQU5HTEVfT1RIRVJfTERGTEFHU193YXRjaG9zID0g
JChBTkdMRV9PVEhFUl9MREZMQUdTX2lwaG9uZW9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZiBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2NoYW5n
ZXMuZGlmZgppbmRleCBhODMwMTRhZWM4M2VmZjM5YTJjZmZmYWE0ZmQ3MThjZmRjNDQ0MWIwLi4w
N2FkYjFjYmRmYmQyZTZiNDZkZWMzNDE2ZjMwMDE5NjdjZjg2NTZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9jaGFuZ2VzLmRpZmYKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvY2hhbmdlcy5kaWZmCkBAIC0xMCw2ICsxMCwxOTggQEAgaW5kZXggNmQ5MDQwYS4uYzhj
OWI2YyAxMDA2NDQKICAvdG9vbHMvY2xhbmcKICAvdG9vbHMvZmxleC1iaXNvbi9saW51eC9iaXNv
bgogIC90b29scy9mbGV4LWJpc29uL2xpbnV4L2ZsZXgKK2RpZmYgLS1naXQgYS9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oIGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAoraW5kZXgg
ZTEwZDExMi4uNmY2YTcyYiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5n
LmgKKysrKyBiL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKK0BAIC03Myw2ICs3Myw5IEBA
IGVudW0gU2hTaGFkZXJPdXRwdXQKKyAgICAgLy8gT3V0cHV0IHNwZWNpYWxpemVkIEdMU0wgdG8g
YmUgZmVkIHRvIGdsc2xhbmcgZm9yIFZ1bGthbiBTUElSIHRvIGJlIGNyb3NzIGNvbXBpbGVkIHRv
IE1ldGFsCisgICAgIC8vIGxhdGVyLgorICAgICBTSF9HTFNMX01FVEFMX09VVFBVVCA9IDB4OEI0
QywKKysKKysgICAgLy8gT3V0cHV0IGZvciBNU0wKKysgICAgU0hfTVNMX01FVEFMX09VVFBVVCA9
IDB4OEI0RCwKKyB9OworIAorIC8vIENvbXBpbGUgb3B0aW9ucy4KK2RpZmYgLS1naXQgYS9pbmNs
dWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmggYi9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRs
LmgKK2luZGV4IGZlNWU4YWIuLjlhMGJlZTAgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3BsYXRmb3Jt
L0ZlYXR1cmVzTXRsLmgKKysrKyBiL2luY2x1ZGUvcGxhdGZvcm0vRmVhdHVyZXNNdGwuaAorQEAg
LTI3LDcgKzI3LDcgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAgICAg
ICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZGVwdGggdGV4dHVyZSdzIGZpbHRlcmluZyBvdGhl
ciB0aGFuIG5lYXJlc3QiLCAmbWVtYmVyc307CisgCisgICAgIC8vIFN1cHBvcnQgZXhwbGljaXQg
bWVtb3J5IGJhcnJpZXIKKy0gICAgRmVhdHVyZSBoYXNFeHBsaWNpdE1lbUJhcnJpZXIgPSB7Imhh
c19leHBsaWNpdF9tZW1fYmFycmllcl9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVy
ZXMsCisrICAgIEZlYXR1cmUgaGFzRXhwbGljaXRNZW1CYXJyaWVyID0geyJoYXNfZXhwbGljaXRf
bWVtX2JhcnJpZXIiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZXhwbGlj
aXQgbWVtb3J5IGJhcnJpZXIiLCAmbWVtYmVyc307CisgCisgICAgIC8vIFNvbWUgcmVuZGVyZXIg
Y2FuIGJyZWFrIHJlbmRlciBwYXNzIGNoZWFwbHksIGkuZS4gZGVza3RvcCBjbGFzcyBHUFVzLgor
QEAgLTQwLDcgKzQwLDcgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAg
ICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgbm9uIHVuaWZvcm0gY29tcHV0ZSBzaGFkZXIg
ZGlzcGF0Y2gncyBncm91cCBzaXplIiwgJm1lbWJlcnN9OworIAorICAgICAvLyBmcmFnbWVudCBz
dGVuY2lsIG91dHB1dCBzdXBwb3J0CistICAgIEZlYXR1cmUgaGFzU3RlbmNpbE91dHB1dCA9IHsi
aGFzX3NoYWRlcl9zdGVuY2lsX291dHB1dCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJl
cywKKysgICAgRmVhdHVyZSBoYXNTdGVuY2lsT3V0cHV0ID0geyJoYXNfc3RlbmNpbF9vdXRwdXQi
LCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHN0ZW5jaWwgb3V0cHV0IGZyb20gZnJh
Z21lbnQgc2hhZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJz
fTsKKyAKK0BAIC01OSw2ICs1OSwxMCBAQCBzdHJ1Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJlU2V0
QmFzZQorICAgICBGZWF0dXJlIGhhc0V2ZW50cyA9IHsiaGFzX210bF9ldmVudHMiLCBGZWF0dXJl
Q2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUg
cmVuZGVyZXIgc3VwcG9ydHMgTVRMKFNoYXJlZClFdmVudCIsICZtZW1iZXJzfTsKKyAKKysgICAg
RmVhdHVyZSBhbGxvd0lubGluZUNvbnN0VmVydGV4RGF0YSA9IHsKKysgICAgICAgICJhbGxvd19p
bmxpbmVfY29uc3RfdmVydGV4X2RhdGEiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CisrICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIHVzaW5nIGlubGluZSBjb25zdGFudCBk
YXRhIGZvciBzbWFsbCBjbGllbnQgdmVydGV4IGRhdGEiLCAmbWVtYmVyc307CisrCisgICAgIC8v
IE9uIG1hY29zLCBzZXBhcmF0ZSBkZXB0aCAmIHN0ZW5jaWwgYnVmZmVycyBhcmUgbm90IHN1cHBy
b3RlZC4gSG93ZXZlciwgb24gaU9TIGRldmljZXMsCisgICAgIC8vIHRoZXkgYXJlIHN1cHByb3Rl
ZDoKKyAgICAgRmVhdHVyZSBhbGxvd1NlcGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMgPSB7CitA
QCAtNjcsNiArNzEsMjEgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNldEJhc2UKKyAg
ICAgICAgICJ3aGVyZWFzIG90aGVycyBzdWNoIGFzIG1hY09TIGRvbid0IiwKKyAgICAgICAgICZt
ZW1iZXJzfTsKKyAKKysgICAgRmVhdHVyZSBhbGxvd1J1bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUg
PSB7CisrICAgICAgICAiYWxsb3dfcnVudGltZV9zYW1wbGVyX2NvbXBhcmVfbW9kZSIsIEZlYXR1
cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9y
dHMgY2hhbmdpbmcgc2FtcGxlcidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlcnMiLCAmbWVt
YmVyc307CisrCisrICAgIEZlYXR1cmUgYWxsb3dTYW1wbGVyQ29tcGFyZUdyYWRpZW50ID0gewor
KyAgICAgICAgImFsbG93X3NhbXBsZXJfY29tcGFyZV9ncmFkaWVudCIsIEZlYXR1cmVDYXRlZ29y
eTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgc2FtcGxl
X2NvbXBhcmUgd2l0aCBncmFkaWVudHMiLCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUgYWxs
b3dTYW1wbGVyQ29tcGFyZUxvZCA9IHsiYWxsb3dfc2FtcGxlcl9jb21wYXJlX2xvZCIsIEZlYXR1
cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgc2FtcGxlX2NvbXBhcmUgd2l0aCBsb2Qi
LCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUgYWxsb3dCdWZmZXJSZWFkV3JpdGUgPSB7ImFs
bG93X2J1ZmZlcl9yZWFkX3dyaXRlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9y
dHMgYnVmZmVyIHJlYWQgJiB3cml0ZSBpbiB0aGUgc2FtZSBzaGFkZXIiLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1iZXJzfTsKKysKKyAgICAgRmVhdHVyZSBhbGxv
d011bHRpc2FtcGxlU3RvcmVBbmRSZXNvbHZlID0geworICAgICAgICAgImFsbG93X21zYWFfc3Rv
cmVfYW5kX3Jlc29sdmUiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAg
ICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRzIE1TQUEgc3RvcmUgYW5kIHJlc29sdmUgaW4gdGhlIHNh
bWUgcGFzcyIsICZtZW1iZXJzfTsKK0BAIC03NSwxNCArOTQsMjcgQEAgc3RydWN0IEZlYXR1cmVz
TXRsIDogRmVhdHVyZVNldEJhc2UKKyAgICAgICAgICJnZW5fbXVsdGlwbGVfbWlwc19wZXJfcGFz
cyIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgICJUaGUgcmVuZGVy
ZXIgc3VwcG9ydHMgZ2VuZXJhdGluZyBtdWx0aXBsZSBtaXBtYXBzIHBlciBwYXNzIiwgJm1lbWJl
cnN9OworIAorKyAgICBGZWF0dXJlIGZvcmNlRDI0UzhBc1Vuc3VwcG9ydGVkID0geyJmb3JjZV9k
MjRzOF9hc191bnN1cHBvcnRlZCIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm9yY2UgRGVwdGgyNFN0ZW5j
aWw4IGZvcm1hdCBhcyB1bnN1cHBvcnRlZC4iLCAmbWVtYmVyc307CisrCisrICAgIEZlYXR1cmUg
YnJlYWtSZW5kZXJQYXNzSXNDaGVhcCA9IHsiYnJlYWtfcmVuZGVyX3Bhc3NfaXNfY2hlYXAiLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiQnJlYWtpbmcgcmVuZGVyIHBhc3MgaXMgYSBjaGVhcCBvcGVyYXRpb24i
LCAmbWVtYmVyc307CisrCisgICAgIEZlYXR1cmUgZm9yY2VCdWZmZXJHUFVTdG9yYWdlID0gewor
LSAgICAgICAgImZvcmNlX2J1ZmZlcl9ncHVfc3RvcmFnZV9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6
Ok1ldGFsRmVhdHVyZXMsCistICAgICAgICAiT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgYm90aCBi
dWZmZXIncyBtZW1vcnkgYWxsb2NhdGlvbiBvbiBHUFUgYW5kIHNoYXJlZCBtZW1vcnkgKHN1Y2gg
YXMgIgorLSAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9yeSBhbGxvY2F0aW9u
IGZvciBidWZmZXJzLiIsCisrICAgICAgICAiZm9yY2VfYnVmZmVyX2dwdV9zdG9yYWdlIiwgRmVh
dHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorKyAgICAgICAgIk9uIHN5c3RlbXMgdGhhdCBz
dXBwb3J0IGJvdGggYnVmZmVyJyBtZW1vcnkgYWxsb2NhdGlvbiBvbiBHUFUgYW5kIHNoYXJlZCBt
ZW1vcnkgKHN1Y2ggYXMgIgorKyAgICAgICAgIm1hY09TKSwgZm9yY2UgdXNpbmcgR1BVIG1lbW9y
eSBhbGxvY2F0aW9uIGZvciBidWZmZXJzIGV2ZXJ5dGltZSBvciBub3QuIiwKKyAgICAgICAgICZt
ZW1iZXJzfTsKKyAKKy0gICAgRmVhdHVyZSBmb3JjZUQyNFM4QXNVbnN1cHBvcnRlZCA9IHsiZm9y
Y2VfZDI0czhfYXNfdW5zdXBwb3J0ZWQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZvcmNlIERlcHRoMjRT
dGVuY2lsOCBmb3JtYXQgYXMgdW5zdXBwb3J0ZWQuIiwgJm1lbWJlcnN9OworKyAgICBGZWF0dXJl
IGZvcmNlTm9uQ1NCYXNlTWlwbWFwR2VuZXJhdGlvbiA9IHsKKysgICAgICAgICJmb3JjZV9ub25f
Y3NfbWlwbWFwX2dlbiIsIEZlYXR1cmVDYXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKysgICAgICAg
ICJUdXJuIHRoaXMgZmVhdHVyZSBvbiB0byBkaXNhbGxvdyBDb21wdXRlIFNoYWRlciBiYXNlZCBt
aXBtYXAgZ2VuZXJhdGlvbi4gQ29tcHV0ZSBTaGFkZXIgIgorKyAgICAgICAgImJhc2VkIG1pcG1h
cCBnZW5lcmF0aW9uIG1pZ2h0IGNhdXNlIEdQVSBoYW5nIG9uIHNvbWUgb2xkZXIgaU9TIGRldmlj
ZXMuIiwKKysgICAgICAgICZtZW1iZXJzfTsKKysKKysgICAgRmVhdHVyZSBlbXVsYXRlVHJhbnNm
b3JtRmVlZGJhY2sgPSB7CisrICAgICAgICAiZW11bGF0ZV90cmFuc2Zvcm1fZmVlZGJhY2siLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisrICAgICAgICAiVHVybiB0aGlzIG9uIHRv
IGFsbG93IHRyYW5zZm9ybSBmZWVkYmFjayBpbiBNZXRhbCB1c2luZyBhIDItcGFzcyBWUyBmb3Ig
R0xFUzMuIiwgJm1lbWJlcnN9OworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIGFuZ2xlCitkaWZm
IC0tZ2l0IGEvc3JjL2NvbW1vbi9Qb29sQWxsb2MuY3BwIGIvc3JjL2NvbW1vbi9Qb29sQWxsb2Mu
Y3BwCitpbmRleCAyN2RkOTMwLi4zYmRjYzMwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9Qb29s
QWxsb2MuY3BwCisrKysgYi9zcmMvY29tbW9uL1Bvb2xBbGxvYy5jcHAKK0BAIC0zMzUsNyArMzM1
LDcgQEAgdm9pZCBQb29sQWxsb2NhdG9yOjp1bmxvY2soKQorIHZvaWQgQWxsb2NhdGlvbjo6Y2hl
Y2tBbGxvY0xpc3QoKSBjb25zdAorIHsKKyAgICAgZm9yIChjb25zdCBBbGxvY2F0aW9uICphbGxv
YyA9IHRoaXM7IGFsbG9jICE9IDA7IGFsbG9jID0gYWxsb2MtPm1QcmV2QWxsb2MpCistICAgICAg
ICBhbGxvYy0+Y2hlY2soKTsKKysgICAgICAgIGFsbG9jLT5jaGVja0FsbG9jKCk7CisgfQorIAor
IH0gIC8vIG5hbWVzcGFjZSBhbmdsZQorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vUG9vbEFsbG9j
LmggYi9zcmMvY29tbW9uL1Bvb2xBbGxvYy5oCitpbmRleCA2OTI5OTJjLi5jZDI2NmEwIDEwMDY0
NAorLS0tIGEvc3JjL2NvbW1vbi9Qb29sQWxsb2MuaAorKysrIGIvc3JjL2NvbW1vbi9Qb29sQWxs
b2MuaAorQEAgLTY1LDcgKzY1LDcgQEAgY2xhc3MgQWxsb2NhdGlvbgorICNlbmRpZgorICAgICB9
CisgCistICAgIHZvaWQgY2hlY2soKSBjb25zdAorKyAgICB2b2lkIGNoZWNrQWxsb2MoKSBjb25z
dAorICAgICB7CisgICAgICAgICBjaGVja0d1YXJkQmxvY2socHJlR3VhcmQoKSwga0d1YXJkQmxv
Y2tCZWdpblZhbCwgImJlZm9yZSIpOworICAgICAgICAgY2hlY2tHdWFyZEJsb2NrKHBvc3RHdWFy
ZCgpLCBrR3VhcmRCbG9ja0VuZFZhbCwgImFmdGVyIik7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1v
bi9hcHBsZV9wbGF0Zm9ybV91dGlscy5oIGIvc3JjL2NvbW1vbi9hcHBsZV9wbGF0Zm9ybV91dGls
cy5oCitpbmRleCA1NWViYjdhLi44M2FiNTMyIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9hcHBs
ZV9wbGF0Zm9ybV91dGlscy5oCisrKysgYi9zcmMvY29tbW9uL2FwcGxlX3BsYXRmb3JtX3V0aWxz
LmgKK0BAIC0xNSwyNCArMTUsMzIgQEAKKyAKKyAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1Qgb25s
eSBhdmFpbGFibGUgaW4gTWFjU0RLIDEwLjE1CisgCisrI2lmIFRBUkdFVF9PU19NQUNDQVRBTFlT
VAorIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0k6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUg
MyBwbGF0Zm9ybXMgKE9TWC9DYXRhbHlzdC9pT1MpIG1pbiB2ZXJpb25zIGlzCisgLy8gYXZhaWxh
YmxlOgorLSNpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAjICAgIGRlZmluZSBBTkdMRV9BUFBM
RV9BVkFJTEFCTEVfWENJKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorICAgICAg
ICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIG1hY0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCBp
T1MgaU9TVmVyLCAqKQorIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQzogY2hlY2sgaWYgZWl0
aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoT1NYL0NhdGFseXN0KSBtaW4gdmVyaW9ucyBpcworIC8v
IGF2YWlsYWJsZToKKyAjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEMobWFjVmVy
LCBtYWNDYXRhbHlzdFZlcikgXAorICAgICAgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIG1h
Y0NhdGFseXN0IG1hY0NhdGFseXN0VmVyLCAqKQorKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9D
STogY2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoQ2F0YWx5c3QvaU9TKSBtaW4g
dmVyaW9ucyBpcworKy8vIGF2YWlsYWJsZToKKysjICAgIGRlZmluZSBBTkdMRV9BUFBMRV9BVkFJ
TEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAorKyAgICAgICAgQGF2YWlsYWJsZSht
YWNDYXRhbHlzdCBtYWNDYXRhbHlzdFZlciwgaU9TIGlPU1ZlciwgKikKKyAjZWxzZQorICMgICAg
ZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0kobWFjVmVyLCBtYWNDYXRhbHlzdFZlciwg
aU9TVmVyKSBcCisgICAgICAgICBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NW
ZXIpCistLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDOiBjaGVjayBpZiBlaXRoZXIgb2YgdGhl
IDIgcGxhdGZvcm1zIChPU1gvQ2F0YWx5c3QpIG1pbiB2ZXJpb25zIGlzCistLy8gYXZhaWxhYmxl
OgorKworICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQyhtYWNWZXIsIG1hY0Nh
dGFseXN0VmVyKSBAYXZhaWxhYmxlKG1hY09TIG1hY1ZlciwgKikKKysjICAgIGRlZmluZSBBTkdM
RV9BUFBMRV9BVkFJTEFCTEVfQ0kobWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgQGF2YWlsYWJsZShp
T1MgaU9TVmVyLCB0dk9TIGlPU1ZlciwgKikKKyAjZW5kaWYKKyAKKyAvLyBBTkdMRV9BUFBMRV9B
VkFJTEFCTEVfWEk6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUgMiBwbGF0Zm9ybXMgKE9TWC9pT1Mp
IG1pbiB2ZXJpb25zIGlzIGF2YWlsYWJsZToKKy0jZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJM
RV9YSShtYWNWZXIsIGlPU1ZlcikgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIs
ICopCisrI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NWZXIpIFwK
KysgICAgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIsIHR2T1MgaU9TVmVyLCAq
KQorKworKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9JOiBjaGVjayBpZiBhIHBhcnRpY3VsYXIg
aU9TIHZlcnNpb24gaXMgYXZhaWxhYmxlCisrI2RlZmluZSBBTkdMRV9BUFBMRV9BVkFJTEFCTEVf
SShpT1NWZXIpIEBhdmFpbGFibGUoaU9TIGlPU1ZlciwgdHZPUyBpT1NWZXIsICopCisgCisgI2Vu
ZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9kZWJ1Zy5oIGIvc3JjL2NvbW1vbi9kZWJ1Zy5o
CitpbmRleCBlMDAzN2E0Li4yODE3MGE1IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9kZWJ1Zy5o
CisrKysgYi9zcmMvY29tbW9uL2RlYnVnLmgKK0BAIC0zMTQsOSArMzE0LDE1IEBAIHN0ZDo6b3N0
cmVhbSAmRm10SGV4KHN0ZDo6b3N0cmVhbSAmb3MsIFQgdmFsdWUpCisgLy8gQSBtYWNybyBhc3Nl
cnRpbmcgYSBjb25kaXRpb24gYW5kIG91dHB1dHRpbmcgZmFpbHVyZXMgdG8gdGhlIGRlYnVnIGxv
ZworICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICMgICAgZGVmaW5lIEFTU0VS
VChleHByZXNzaW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICAgICAgKGV4cHJlc3Npb24gPyBzdGF0aWNfY2FzdDx2b2lkPigwKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAg
ICAgICAgICAgICAgICA6IChGQVRBTCgpIDw8ICJcdCEgQXNzZXJ0IGZhaWxlZCBpbiAiIDw8IF9f
RlVOQ1RJT05fXyA8PCAiICgiIDw8IF9fRklMRV9fIFwKKy0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgIjoiIDw8IF9fTElORV9fIDw8ICIpOiAiIDw8ICNleHByZXNzaW9uKSkKKysg
ICAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg
ICAgICAgICBpZiAoIShleHByZXNzaW9uKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg
ICAgICAgICAgX19idWlsdGluX2RlYnVndHJhcCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg
ICBpbnQgeCA9IDA7IC8qIFRoaXMgZm9yY2VzIHNhbmUgYnJlYWtwb2ludCBsb2NhdGlvbiBhdCBj
YWxsIHNpdGUuICovIFwKKysgICAgICAgICAgICAodm9pZCl4OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gd2hp
bGUgKGZhbHNlKQorICNlbHNlCisgIyAgICBkZWZpbmUgQVNTRVJUKGNvbmRpdGlvbikgQU5HTEVf
RUFUX1NUUkVBTV9QQVJBTUVURVJTIDw8ICEoY29uZGl0aW9uKQorICNlbmRpZiAgLy8gZGVmaW5l
ZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKIGRpZmYgLS1naXQgYS9zcmMvY29tbW9uL2dsL2NnbC9G
dW5jdGlvbnNDR0wuY3BwIGIvc3JjL2NvbW1vbi9nbC9jZ2wvRnVuY3Rpb25zQ0dMLmNwcAogaW5k
ZXggYjU3ZjQyYi4uM2U1YTM3YSAxMDA2NDQKIC0tLSBhL3NyYy9jb21tb24vZ2wvY2dsL0Z1bmN0
aW9uc0NHTC5jcHAKQEAgLTM0LDIyICsyMjYsMTMyIEBAIGluZGV4IDkxMTI2NTkuLjM5ZGY2ZmUg
MTAwNjQ0CiAgU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTFNldEN1cnJlbnRD
b250ZXh0LCBDR0xFcnJvciwgKENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCiAgU09GVF9MSU5L
X0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xT
ZXRWaXJ0dWFsU2NyZWVuLAorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lv
cy5tbSBiL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbQorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLmEzNmJlYTQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21t
b24vc3lzdGVtX3V0aWxzX2lvcy5tbQorQEAgLTAsMCArMSw1MyBAQAorKy8vCisrLy8gQ29weXJp
Z2h0IDIwMTUgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLwor
KworKy8vIHN5c3RlbV91dGlsc19pb3MubW06IEltcGxlbWVudGF0aW9uIG9mIGlPUy1zcGVjaWZp
YyBmdW5jdGlvbnMgZm9yIE9TWAorKworKyNpbmNsdWRlICJzeXN0ZW1fdXRpbHMuaCIKKysKKysj
aW5jbHVkZSA8dW5pc3RkLmg+CisrCisrI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2Vydmlj
ZXMuaD4KKysjaW5jbHVkZSA8bWFjaC1vL2R5bGQuaD4KKysjaW5jbHVkZSA8bWFjaC9tYWNoLmg+
CisrI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CisrI2luY2x1ZGUgPGFycmF5PgorKyNpbmNs
dWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisrCisrbmFtZXNwYWNlIGFuZ2xlCisreworK3N0ZDo6c3RyaW5nIEdl
dEV4ZWN1dGFibGVQYXRoKCkKKyt7CisrCisrICAgIE5TU3RyaW5nICpleGVjdXRhYmxlU3RyaW5n
ID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBleGVjdXRhYmxlUGF0aF07CisrICAgIHN0ZDo6c3Ry
aW5nIHJlc3VsdChbZXhlY3V0YWJsZVN0cmluZyBVVEY4U3RyaW5nXSk7CisrICAgIHJldHVybiBy
ZXN1bHQ7CisrfQorKworK3N0ZDo6c3RyaW5nIEdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKQorK3sK
KysgICAgc3RkOjpzdHJpbmcgZXhlY3V0YWJsZVBhdGggPSBHZXRFeGVjdXRhYmxlUGF0aCgpOwor
KyAgICBzaXplX3QgbGFzdFBhdGhTZXBMb2MgICAgICA9IGV4ZWN1dGFibGVQYXRoLmZpbmRfbGFz
dF9vZigiLyIpOworKyAgICByZXR1cm4gKGxhc3RQYXRoU2VwTG9jICE9IHN0ZDo6c3RyaW5nOjpu
cG9zKSA/IGV4ZWN1dGFibGVQYXRoLnN1YnN0cigwLCBsYXN0UGF0aFNlcExvYykgOiAiIjsKKyt9
CisrCisrY29uc3QgY2hhciAqR2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbigpCisreworKyAgICBy
ZXR1cm4gImR5bGliIjsKKyt9CisrCisrZG91YmxlIEdldEN1cnJlbnRUaW1lKCkKKyt7CisrICAg
IG1hY2hfdGltZWJhc2VfaW5mb19kYXRhX3QgdGltZWJhc2VJbmZvOworKyAgICBtYWNoX3RpbWVi
YXNlX2luZm8oJnRpbWViYXNlSW5mbyk7CisrCisrICAgIGRvdWJsZSBzZWNvbmRDb2VmZiA9IHRp
bWViYXNlSW5mby5udW1lciAqIDFlLTkgLyB0aW1lYmFzZUluZm8uZGVub207CisrICAgIHJldHVy
biBzZWNvbmRDb2VmZiAqIG1hY2hfYWJzb2x1dGVfdGltZSgpOworK30KKyt9ICAvLyBuYW1lc3Bh
Y2UgYW5nbGUKIGRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAgYi9zcmMvY29t
bW9uL3V0aWxpdGllcy5jcHAKLWluZGV4IGM5NTNmZjkuLjYzYjNhNTkgMTAwNjQ0CitpbmRleCBj
OTUzZmY5Li5kMDllMjcwIDEwMDY0NAogLS0tIGEvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCiAr
KysgYi9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAKLUBAIC02LDYgKzYsMTEgQEAKLSAKLSAvLyB1
dGlsaXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0
aW5lcy4KK0BAIC00NzEsNiArNDcxLDUwIEBAIGludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51
bSB0eXBlKQogIAotKy8vIE9sZGVyIGNsYW5nIHZlcnNpb25zIGhhdmUgYSBmYWxzZSBwb3NpdGl2
ZSBvbiB0aGlzIHdhcm5pbmcgaGVyZS4KLSsjaWYgZGVmaW5lZChfX2NsYW5nX18pCi0rI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZ2xvYmFsLWNvbnN0cnVjdG9ycyIKLSsjZW5k
aWYKKyAgICAgcmV0dXJuIDA7CisgfQorKy8qKgorK0RldGVybWluZSB0aGUgbnVtYmVyIG9mIGF0
dHJpYnV0ZSBzbG90cyB1c2VkIGJ5IGEgdmFyaWFibGUgdHlwZQorKyovCisraW50IFZhcmlhYmxl
QXR0cmlidXRlQ291bnQoR0xlbnVtIHR5cGUpCisreworKyAgICBzd2l0Y2ggKHR5cGUpCisrICAg
IHsKKysgICAgICAgIGNhc2UgR0xfTk9ORToKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAg
ICAgIGNhc2UgR0xfQk9PTDoKKysgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisrICAgICAgICBjYXNl
IEdMX0lOVDoKKysgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorKyAgICAgICAgY2FzZSBH
TF9CT09MX1ZFQzI6CisrICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisrICAgICAgICBjYXNl
IEdMX0lOVF9WRUMyOgorKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKysgICAg
ICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorKyAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorKyAg
ICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKysgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZF
QzM6CisrICAgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKysgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDNDoKKysgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisrICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVF9WRUM0OgorKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorKyAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6CisrICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDJ4NDoKKysgICAgICAgICAgICByZXR1cm4gMjsKKysgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMzoKKysgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorKyAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisrICAgICAgICAgICAgcmV0dXJuIDM7CisrICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDQ6CisrICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKysgICAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgorKyAgICAgICAgICAgIHJldHVybiA0OworKyAgICAg
ICAgZGVmYXVsdDoKKysgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICB9CiArCi0gI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKLSAjaW5jbHVkZSAiR0xFUzMvZ2wzLmgiCi0gI2lu
Y2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorKyAgICByZXR1cm4gMDsKKyt9CisgCisgYm9vbCBJ
c1NhbXBsZXJUeXBlKEdMZW51bSB0eXBlKQorIHsKK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uL3V0
aWxpdGllcy5oIGIvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAoraW5kZXggMGM3ZDgxMS4uYmE2OTNh
MiAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vdXRpbGl0aWVzLmgKKysrKyBiL3NyYy9jb21tb24v
dXRpbGl0aWVzLmgKK0BAIC0zNyw2ICszNyw3IEBAIHNpemVfdCBWYXJpYWJsZUludGVybmFsU2l6
ZShHTGVudW0gdHlwZSk7Cisgc2l6ZV90IFZhcmlhYmxlRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBl
KTsKKyBpbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSk7CisgaW50IFZhcmlhYmxlQ29s
dW1uQ291bnQoR0xlbnVtIHR5cGUpOworK2ludCBWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KEdMZW51
bSB0eXBlKTsKKyBib29sIElzU2FtcGxlclR5cGUoR0xlbnVtIHR5cGUpOworIGJvb2wgSXNTYW1w
bGVyQ3ViZVR5cGUoR0xlbnVtIHR5cGUpOworIGJvb2wgSXNJbWFnZVR5cGUoR0xlbnVtIHR5cGUp
OwogZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX3Rh
Yl9hdXRvZ2VuLmNwcCBiL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX3Rh
Yl9hdXRvZ2VuLmNwcAogaW5kZXggNDcxMTc3NC4uY2YyNWU0OCAxMDA2NDQKIC0tLSBhL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzc29yX3RhYl9hdXRvZ2VuLmNwcApAQCAtNjIs
MjM4ICszNjQsMjE2ODYgQEAgaW5kZXggNDcxMTc3NC4uY2YyNWU0OCAxMDA2NDQKICAvKiBCaXNv
biBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogIAogICAgIENvcHly
aWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTUsIDIwMTgtMjAxOSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sCi1kaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZ190YWJfYXV0b2dlbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3Rh
Yl9hdXRvZ2VuLmNwcAotaW5kZXggMTMwYjk4YS4uMzNiODNkYiAxMDA2NDQKLS0tLSBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4uY3BwCi0rKysgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmNwcAotQEAgLTEsNSArMSw3IEBA
Ci0gLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KK2RpZmYg
LS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcCBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCitpbmRleCBhNDQ0NDk5Li5jYWM5ZjQ5IDEwMDY0NAor
LS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAKKysrKyBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCitAQCAtMjEsOCArMjEsMTEgQEAKKyAjZW5kaWYg
IC8vIEFOR0xFX0VOQUJMRV9WVUxLQU4KICAKLSsvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lk
YW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCisgI2lmZGVmIEFOR0xFX0VOQUJMRV9N
RVRBTAorLSMgICAgaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwu
aCIKKysjICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0LmgiCisgI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUwKKysjaWZkZWYgQU5HTEVfRU5B
QkxFX01FVEFMX1NQSVJWCisrIyAgICBpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbC5oIgorKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCisgCisg
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorIAorQEAgLTY0LDExICs2Nywx
NyBAQCBUQ29tcGlsZXIgKkNvbnN0cnVjdENvbXBpbGVyKHNoOjpHTGVudW0gdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0CisgICAgIH0KKyAjZW5kaWYgIC8vIEFOR0xFX0VO
QUJMRV9WVUxLQU4KKyAKKy0jaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisrI2lmZGVmIEFOR0xF
X0VOQUJMRV9NRVRBTF9TUElSVgorICAgICBpZiAoSXNPdXRwdXRNZXRhbChvdXRwdXQpKQorICAg
ICB7CisgICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JNZXRhbCh0eXBlLCBzcGVjKTsKKyAg
ICAgfQorKyNlbmRpZgorKyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgaWYgKElzT3V0
cHV0TWV0YWxEaXJlY3Qob3V0cHV0KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUcmFu
c2xhdG9yTWV0YWxEaXJlY3QodHlwZSwgc3BlYywgb3V0cHV0KTsKKysgICAgfQorICNlbmRpZiAg
Ly8gQU5HTEVfRU5BQkxFX01FVEFMCisgCisgICAgIC8vIFVuc3VwcG9ydGVkIGNvbXBpbGVyIG9y
IHVua25vd24gZm9ybWF0LiBSZXR1cm4gbnVsbHB0ciBwZXIgdGhlIHNoOjpDb25zdHJ1Y3RDb21w
aWxlciBBUEkuCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAoraW5kZXggODM1YzkwYS4uMWMwOWNk
YSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAorQEAgLTMxLDYgKzMxLDggQEAgc3RydWN0
IFRTb3VyY2VMb2MKKyAgICAgaW50IGxhc3RfbGluZTsKKyB9OworIAorK2NvbnN0ZXhwciBUU291
cmNlTG9jIGtOb1NvdXJjZUxvY3stMSwgLTEsIC0xLCAtMX07CiArCi0gLyogQmlzb24gaW1wbGVt
ZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAvLworIC8vIFB1dCBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFIGluIGJhc2UgY2xhc3NlcyB0byBtYWtlIHRoZW0gdXNlIHRoaXMg
c2NoZW1lLgorIC8vCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwCitpbmRleCAzNGQ4
ZTEyLi45MzE2ZTJlIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGls
ZXIuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKK0BAIC03
MjIsNyArNzIyLDcgQEAgYm9vbCBUQ29tcGlsZXI6OmNoZWNrQW5kU2ltcGxpZnlBU1QoVEludGVy
bUJsb2NrICpyb290LAorICAgICAgICAgfQorICAgICB9CiAgCi0gICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwKLWRpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9h
dXRvZ2VuLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgK
LWluZGV4IDUzMDYwMzIuLjAyNTAzMDAgMTAwNjQ0Ci0tLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgKLSsrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2dsc2xhbmdfdGFiX2F1dG9nZW4uaAotQEAgLTEsNSArMSw3IEBACi0gLyogQSBCaXNvbiBwYXJz
ZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMy4yLiAgKi8KKy0gICAgaW50IHNpbXBsaWZ5U2NhbGFy
aXplZCA9IChjb21waWxlT3B0aW9ucyAmIFNIX1NDQUxBUklaRV9WRUNfQU5EX01BVF9DT05TVFJV
Q1RPUl9BUkdTKQorKyAgICB1bnNpZ25lZCBpbnQgc2ltcGxpZnlTY2FsYXJpemVkID0gKGNvbXBp
bGVPcHRpb25zICYgU0hfU0NBTEFSSVpFX1ZFQ19BTkRfTUFUX0NPTlNUUlVDVE9SX0FSR1MpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXI6OmtTY2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvcgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKICAKLSsvKiBBcHBsZSBOb3RlOiBG
b3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhp
cyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgKK2luZGV4IGQwYjI0YmEuLjA0M2RkZDUgMTAwNjQ0CistLS0gYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21waWxlci5oCitAQCAtMzUsNiArMzUsOSBAQCBjbGFzcyBUUGFyc2VDb250ZXh0
OworICNpZmRlZiBBTkdMRV9FTkFCTEVfSExTTAorIGNsYXNzIFRyYW5zbGF0b3JITFNMOworICNl
bmRpZiAgLy8gQU5HTEVfRU5BQkxFX0hMU0wKKysjaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisr
Y2xhc3MgVHJhbnNsYXRvck1ldGFsRGlyZWN0OworKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01F
VEFMCisgCisgLy8KKyAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHNoYWRlciB0
eXBlIGlzIEdMU0wuCitAQCAtNjMsNiArNjYsOSBAQCBjbGFzcyBUU2hIYW5kbGVCYXNlCisgI2lm
ZGVmIEFOR0xFX0VOQUJMRV9ITFNMCisgICAgIHZpcnR1YWwgVHJhbnNsYXRvckhMU0wgKmdldEFz
VHJhbnNsYXRvckhMU0woKSB7IHJldHVybiAwOyB9CisgI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVf
SExTTAorKyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgdmlydHVhbCBUcmFuc2xhdG9y
TWV0YWxEaXJlY3QgKmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0KCkgeyByZXR1cm4gbnVsbHB0
cjsgfQorKyNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX01FVEFMCisgCisgICBwcm90ZWN0ZWQ6Cisg
ICAgIC8vIE1lbW9yeSBhbGxvY2F0b3IuIEFsbG9jYXRlcyBhbmQgdHJhY2tzIG1lbW9yeSByZXF1
aXJlZCBieSB0aGUgY29tcGlsZXIuCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29uc3RhbnRVbmlvbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVu
aW9uLmNwcAoraW5kZXggMDMzNTE3MS4uMTA0YWZmYiAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Db25zdGFudFVuaW9uLmNwcAorQEAgLTY3LDExICs2NywxNSBAQCBib29sIElzVmFsaWRT
aGlmdE9mZnNldChjb25zdCBUQ29uc3RhbnRVbmlvbiAmcmhzKQorIAorIH0gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKKyAKKy1UQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oKQorLXsKKy0g
ICAgaUNvbnN0ID0gMDsKKy0gICAgdHlwZSAgID0gRWJ0Vm9pZDsKKy19CisrVENvbnN0YW50VW5p
b246OlRDb25zdGFudFVuaW9uKCkgOiBpQ29uc3QoMCksIHR5cGUoRWJ0Vm9pZCkge30KICsKLSAv
KiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKytUQ29uc3RhbnRV
bmlvbjo6VENvbnN0YW50VW5pb24oaW50IGkpIDogaUNvbnN0KGkpLCB0eXBlKEVidEludCkge30K
KysKKytUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24odW5zaWduZWQgaW50IHUpIDogdUNv
bnN0KHUpLCB0eXBlKEVidFVJbnQpIHt9CisrCisrVENvbnN0YW50VW5pb246OlRDb25zdGFudFVu
aW9uKGZsb2F0IGYpIDogZkNvbnN0KGYpLCB0eXBlKEVidEZsb2F0KSB7fQorKworK1RDb25zdGFu
dFVuaW9uOjpUQ29uc3RhbnRVbmlvbihib29sIGIpIDogYkNvbnN0KGIpLCB0eXBlKEVidEJvb2wp
IHt9CiAgCi0gICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSwgMjAx
OC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLWRpZmYgLS1naXQgYS9zcmMvZ3B1X2lu
Zm9fdXRpbC9TeXN0ZW1JbmZvLmNwcCBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3Bw
Ci1pbmRleCBmNzQ4OTQ5Li41NGMzZGI1IDEwMDY0NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwv
U3lzdGVtSW5mby5jcHAKLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCi1A
QCAtNDcsNiArNDcsOCBAQCBzdGQ6OnN0cmluZyBWZW5kb3JOYW1lKFZlbmRvcklEIHZlbmRvcikK
LSAgICAgICAgICAgICByZXR1cm4gIlZpdmFudGUiOwotICAgICAgICAgY2FzZSBrVmVuZG9ySURf
Vk1XYXJlOgotICAgICAgICAgICAgIHJldHVybiAiVk1XYXJlIjsKLSsgICAgICAgIGNhc2Uga1Zl
bmRvcklEX0FwcGxlOgotKyAgICAgICAgICAgIHJldHVybiAiQXBwbGUiOwotICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gKCIgKyBzdGQ6OnRvX3N0cmluZyh2
ZW5kb3IpICsgIikiOworIGludCBUQ29uc3RhbnRVbmlvbjo6Z2V0SUNvbnN0KCkgY29uc3QKKyB7
CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCitpbmRleCBhNjIzZDY1Li5k
ZjUzODU3IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlv
bi5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKK0BAIC0y
MCw2ICsyMCwxMCBAQCBjbGFzcyBUQ29uc3RhbnRVbmlvbgorICAgcHVibGljOgorICAgICBQT09M
X0FMTE9DQVRPUl9ORVdfREVMRVRFCisgICAgIFRDb25zdGFudFVuaW9uKCk7CisrICAgIFRDb25z
dGFudFVuaW9uKGludCBpKTsKKysgICAgVENvbnN0YW50VW5pb24odW5zaWduZWQgaW50IHUpOwor
KyAgICBUQ29uc3RhbnRVbmlvbihmbG9hdCBmKTsKKysgICAgVENvbnN0YW50VW5pb24oYm9vbCBi
KTsKKyAKKyAgICAgYm9vbCBjYXN0KFRCYXNpY1R5cGUgbmV3VHlwZSwgY29uc3QgVENvbnN0YW50
VW5pb24gJmNvbnN0YW50KTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9JbnRlcm1Ob2RlLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuY3Bw
CitpbmRleCBiYmRmODY2Li41MTM2ZDIwIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSW50ZXJtTm9kZS5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVy
bU5vZGUuY3BwCitAQCAtNDEsNyArNDEsNyBAQCBUUHJlY2lzaW9uIEdldEhpZ2hlclByZWNpc2lv
bihUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24gcmlnaHQpCisgVENvbnN0YW50VW5pb24gKlZl
Y3Rvcml6ZShjb25zdCBUQ29uc3RhbnRVbmlvbiAmY29uc3RhbnQsIHNpemVfdCBzaXplKQorIHsK
KyAgICAgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24gPSBuZXcgVENvbnN0YW50VW5pb25bc2l6
ZV07CistICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgIGNvbnN0VW5pb25baV0g
PSBjb25zdGFudDsKKyAKKyAgICAgcmV0dXJuIGNvbnN0VW5pb247CitAQCAtNDE1LDYgKzQxNSwx
NCBAQCBUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhjb25zdCBUSW50ZXJtQmxvY2sgJm5vZGUp
CiAgICAgIH0KLUBAIC0xNjAsNiArMTYyLDExIEBAIGJvb2wgSXNWaXZhbnRlKFZlbmRvcklEIHZl
bmRvcklkKQotICAgICByZXR1cm4gdmVuZG9ySWQgPT0ga1ZlbmRvcklEX1ZpdmFudGU7CiAgfQog
IAotK2Jvb2wgSXNBcHBsZShWZW5kb3JJRCB2ZW5kb3JJZCkKKytUSW50ZXJtQmxvY2s6OlRJbnRl
cm1CbG9jayhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VEludGVybU5vZGUgKj4gc3RtdHMpCiArewot
KyAgICByZXR1cm4gdmVuZG9ySWQgPT0ga1ZlbmRvcklEX0FwcGxlOworKyAgICBmb3IgKFRJbnRl
cm1Ob2RlICpzdG10IDogc3RtdHMpCisrICAgIHsKKysgICAgICAgIGFwcGVuZFN0YXRlbWVudChz
dG10KTsKKysgICAgfQogK30KICsKLSBib29sIFBhcnNlQU1EQnJhaG1hRHJpdmVyVmVyc2lvbihj
b25zdCBzdGQ6OnN0cmluZyAmY29udGVudCwgc3RkOjpzdHJpbmcgKnZlcnNpb24pCisgc2l6ZV90
IFRJbnRlcm1CbG9jazo6Z2V0Q2hpbGRDb3VudCgpIGNvbnN0CiAgewotICAgICBjb25zdCBzaXpl
X3QgYmVnaW4gPSBjb250ZW50LmZpbmRfZmlyc3Rfb2YoIjAxMjM0NTY3ODkiKTsKLWRpZmYgLS1n
aXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmggYi9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvLmgKLWluZGV4IGFkMTc2OTguLjUwOWExZTkgMTAwNjQ0Ci0tLS0gYS9zcmMvZ3B1
X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUlu
Zm8uaAotQEAgLTY3LDkgKzY3LDggQEAgc3RydWN0IFN5c3RlbUluZm8KLSAgICAgYm9vbCBpc0FN
RFN3aXRjaGFibGUgPSBmYWxzZTsKLSAgICAgLy8gT25seSB0cnVlIG9uIGR1YWwtR1BVIE1hYyBs
YXB0b3BzLgotICAgICBib29sIGlzTWFjU3dpdGNoYWJsZSA9IGZhbHNlOwotLSAgICAvLyBPbmx5
IHRydWUgb24gQXBwbGUgU2lsaWNvbiBNYWNzIHdoZW4gcnVubmluZyBpT1MgYmluYXJpZXMuCi0t
ICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9mb3Vu
ZGF0aW9uL25zcHJvY2Vzc2luZm8vMzYwODU1Ni1pb3NhcHBvbm1hYwotLSAgICBib29sIGlzaU9T
QXBwT25NYWMgPSBmYWxzZTsKLSsgICAgLy8gT25seSB0cnVlIG9uIEFwcGxlIFNpbGljb24gTWFj
cyB3aGVuIHJ1bm5pbmcgaW4gbWFjQ2F0YWx5c3QuCi0rICAgIGJvb2wgbmVlZHNFQUdMT25NYWMg
ICA9IGZhbHNlOwotIAotICAgICAvLyBPbmx5IGF2YWlsYWJsZSBvbiBBbmRyb2lkCi0gICAgIHN0
ZDo6c3RyaW5nIG1hY2hpbmVNYW51ZmFjdHVyZXI7Ci1AQCAtOTksNiArOTgsNyBAQCBjb25zdGV4
cHIgVmVuZG9ySUQga1ZlbmRvcklEX0ludGVsICAgID0gMHg4MDg2OwotIGNvbnN0ZXhwciBWZW5k
b3JJRCBrVmVuZG9ySURfTlZJRElBICAgPSAweDEwREU7Ci0gY29uc3RleHByIFZlbmRvcklEIGtW
ZW5kb3JJRF9RdWFsY29tbSA9IDB4NTE0MzsKLSBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklE
X1ZNV2FyZSAgID0gMHgxNWFkOwotK2NvbnN0ZXhwciBWZW5kb3JJRCBrVmVuZG9ySURfQXBwbGUg
ICAgPSAweDEwNkI7Ci0gCi0gLy8gS25vd24gbm9uLVBDSSAoaS5lLiBLaHJvbm9zLXJlZ2lzdGVy
ZWQpIHZlbmRvciBJRHMKLSBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX1ZpdmFudGUgICAg
ID0gMHgxMDAwMTsKLUBAIC0xMjQsNiArMTI0LDcgQEAgYm9vbCBJc1N3aWZ0c2hhZGVyKFZlbmRv
cklEIHZlbmRvcklkKTsKLSBib29sIElzVmVyaVNpbGljb24oVmVuZG9ySUQgdmVuZG9ySWQpOwot
IGJvb2wgSXNWTVdhcmUoVmVuZG9ySUQgdmVuZG9ySWQpOwotIGJvb2wgSXNWaXZhbnRlKFZlbmRv
cklEIHZlbmRvcklkKTsKLStib29sIElzQXBwbGUoVmVuZG9ySUQgdmVuZG9ySWQpOworICAgICBy
ZXR1cm4gbVN0YXRlbWVudHMuc2l6ZSgpOworQEAgLTQ0Niw2ICs0NTQsMzcgQEAgYm9vbCBUSW50
ZXJtRnVuY3Rpb25Qcm90b3R5cGU6OnJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKm9yaWdp
bmFsLCBUSW50ZXJtTm8KKyAgICAgcmV0dXJuIGZhbHNlOworIH0KICAKLSAvLyBVc2UgYSBoZXVy
aXN0aWMgdG8gYXR0ZW1wdCB0byBmaW5kIHRoZSBHUFUgdXNlZCBmb3IgM0QgZ3JhcGhpY3MuIFNl
dHMgYWN0aXZlR1BVSW5kZXgsCi0gLy8gaXNPcHRpbXVzLCBhbmQgaXNBTURTd2l0Y2hhYmxlLgot
ZGlmZiAtLWdpdCBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW0gYi9zcmMv
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCi1pbmRleCBjNzc1NmY2Li5hNDlkYzUy
IDEwMDY0NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQotKysr
IGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQotQEAgLTE5LDI1ICsxOSw3
IEBAIG5hbWVzcGFjZSBhbmdsZQorK1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0
aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHByKQorK3sKKysg
ICAgaWYgKGluaXRFeHByKQorKyAgICB7CisrICAgICAgICBhcHBlbmREZWNsYXJhdG9yKAorKyAg
ICAgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZSwgbmV3
IFRJbnRlcm1TeW1ib2wodmFyKSwgaW5pdEV4cHIpKTsKKysgICAgfQorKyAgICBlbHNlCisrICAg
IHsKKysgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJbnRlcm1TeW1ib2wodmFyKSk7Cisr
ICAgIH0KKyt9CisrCisrVEludGVybURlY2xhcmF0aW9uOjpUSW50ZXJtRGVjbGFyYXRpb24oc3Rk
Ojppbml0aWFsaXplcl9saXN0PGNvbnN0IFRWYXJpYWJsZSAqPiBkZWNsYXJhdG9ycykKKysgICAg
OiBUSW50ZXJtRGVjbGFyYXRpb24oKQorK3sKKysgICAgZm9yIChhdXRvICpkIDogZGVjbGFyYXRv
cnMpCisrICAgIHsKKysgICAgICAgIGFwcGVuZERlY2xhcmF0b3IobmV3IFRJbnRlcm1TeW1ib2wo
ZCkpOworKyAgICB9CisrfQorKworK1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0
aW9uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJtVHlwZWQgKj4gZGVjbGFyYXRvcnMpCisr
ICAgIDogVEludGVybURlY2xhcmF0aW9uKCkKKyt7CisrICAgIGZvciAoYXV0byAqZCA6IGRlY2xh
cmF0b3JzKQorKyAgICB7CisrICAgICAgICBhcHBlbmREZWNsYXJhdG9yKGQpOworKyAgICB9Cisr
fQorKworIHNpemVfdCBUSW50ZXJtRGVjbGFyYXRpb246OmdldENoaWxkQ291bnQoKSBjb25zdAor
IHsKKyAgICAgcmV0dXJuIG1EZWNsYXJhdG9ycy5zaXplKCk7CitAQCAtNDYzLDkgKzUwMiwxMCBA
QCBib29sIFRJbnRlcm1EZWNsYXJhdGlvbjo6cmVwbGFjZUNoaWxkTm9kZShUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZQogIAotIGJvb2wgR2V0U3lzdGVtSW5mbyhTeXN0ZW1J
bmZvICppbmZvKQorIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxhY2VDaGlsZE5vZGVJ
bnRlcm5hbChUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkK
ICB7Ci0tIyAgICBpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZp
bmVkKEFOR0xFX0NQVV9BUk02NCkKLS0gICAgc3RhdGljIGJvb2wgaXNpT1NBcHBPbk1hYyA9IGZh
bHNlOwotLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7Ci0tICAgIGRpc3BhdGNoX29u
Y2UoJm9uY2UsIF57Ci0tICAgICAgaXNpT1NBcHBPbk1hYyA9IFtbTlNQcm9jZXNzSW5mbyBwcm9j
ZXNzSW5mb10gaXNpT1NBcHBPbk1hY107Ci0tICAgIH0pOwotLQotLSAgICBpZiAoaXNpT1NBcHBP
bk1hYykKLS0gICAgewotLSAgICAgICAgR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7Ci0tICAgICAg
ICBpZiAoaW5mbykKLS0gICAgICAgIHsKLS0gICAgICAgICAgICBpbmZvLT5pc2lPU0FwcE9uTWFj
ID0gdHJ1ZTsKLS0gICAgICAgIH0KLS0gICAgICAgIHJldHVybiBpbmZvOwotLSAgICB9Ci0tCi0t
ICAgIHJldHVybiBHZXRTeXN0ZW1JbmZvX21hYyhpbmZvKTsKLS0jICAgIGVsaWYgZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlT
VCkKLSsjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9NQUNDQVRBTFlTVCkKLSAgICAgcmV0dXJuIEdldFN5c3RlbUluZm9fbWFjKGluZm8p
OwotICMgICAgZWxzZQotICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7Ci1kaWZm
IC0tZ2l0IGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwIGIvc3JjL2dwdV9p
bmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCi1pbmRleCAzMjNhZjJjLi5lNTJlY2IzIDEwMDY0
NAotLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCi0rKysgYi9zcmMv
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lvcy5jcHAKLUBAIC0xOCw4ICsxOCw5IEBAIG5hbWVz
cGFjZSBhbmdsZQotIGJvb2wgR2V0U3lzdGVtSW5mb19pb3MoU3lzdGVtSW5mbyAqaW5mbykKKy0g
ICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IGdldFNlcXVlbmNlKCktPnNpemUoKTsgKytpaSkK
KysgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNlKCk7CisrICAgIGZvciAoYXV0byAqJm5vZGUg
OiBzZXEpCisgICAgIHsKKy0gICAgICAgIFJFUExBQ0VfSUZfSVMoKCpnZXRTZXF1ZW5jZSgpKVtp
aV0sIFRJbnRlcm1Ob2RlLCBvcmlnaW5hbCwgcmVwbGFjZW1lbnQpOworKyAgICAgICAgUkVQTEFD
RV9JRl9JUyhub2RlLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50KTsKKyAgICAg
fQorICAgICByZXR1cm4gZmFsc2U7CisgfQorQEAgLTQ3MywxMiArNTEzLDEzIEBAIGJvb2wgVElu
dGVybUFnZ3JlZ2F0ZUJhc2U6OnJlcGxhY2VDaGlsZE5vZGVJbnRlcm5hbChUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlCisgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxk
Tm9kZVdpdGhNdWx0aXBsZShUSW50ZXJtTm9kZSAqb3JpZ2luYWwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSW50ZXJtU2Vx
dWVuY2UgJnJlcGxhY2VtZW50cykKICB7CistICAgIGZvciAoYXV0byBpdCA9IGdldFNlcXVlbmNl
KCktPmJlZ2luKCk7IGl0IDwgZ2V0U2VxdWVuY2UoKS0+ZW5kKCk7ICsraXQpCisrICAgIGF1dG8g
JnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworKyAgICBmb3IgKGF1dG8gaXQgPSBzZXEuYmVnaW4oKTsg
aXQgPCBzZXEuZW5kKCk7ICsraXQpCiAgICAgIHsKLS0gICAgICAgIC8vIFRPRE8oYW5nbGVidWcu
Y29tLzQyNzUpOiBHZXQgdGhlIGFjdHVhbCBzeXN0ZW0gdmVyc2lvbi4KLSsgICAgICAgIC8vIFRP
RE8oYW5nbGVidWcuY29tLzQyNzUpOiBHZXQgdGhlIGFjdHVhbCBzeXN0ZW0gdmVyc2lvbiBhbmQg
R1BVIGluZm8uCi0gICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Ci0r
ICAgICAgICBpbmZvLT5ncHVzLmVtcGxhY2VfYmFjaygpLnZlbmRvcklkID0ga1ZlbmRvcklEX0Fw
cGxlOworICAgICAgICAgaWYgKCppdCA9PSBvcmlnaW5hbCkKKyAgICAgICAgIHsKKy0gICAgICAg
ICAgICBpdCA9IGdldFNlcXVlbmNlKCktPmVyYXNlKGl0KTsKKy0gICAgICAgICAgICBnZXRTZXF1
ZW5jZSgpLT5pbnNlcnQoaXQsIHJlcGxhY2VtZW50cy5iZWdpbigpLCByZXBsYWNlbWVudHMuZW5k
KCkpOworKyAgICAgICAgICAgIGl0ID0gc2VxLmVyYXNlKGl0KTsKKysgICAgICAgICAgICBzZXEu
aW5zZXJ0KGl0LCByZXBsYWNlbWVudHMuYmVnaW4oKSwgcmVwbGFjZW1lbnRzLmVuZCgpKTsKKyAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgIH0KICAgICAgfQotIAotICAgICByZXR1
cm4gdHJ1ZTsKLWRpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX21hY29z
Lm1tIGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWNvcy5tbQotaW5kZXggYjFjZDA1
NS4uYzVlMDM5ZSAxMDA2NDQKLS0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFj
b3MubW0KLSsrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3MubW0KLUBAIC0z
MjIsNiArMzIyLDEwIEBAIGJvb2wgR2V0U3lzdGVtSW5mb19tYWMoU3lzdGVtSW5mbyAqaW5mbykK
LSAgICAgICAgIGluZm8tPmlzTWFjU3dpdGNoYWJsZSA9IHRydWU7CitAQCAtNDg4LDEyICs1Mjks
MTMgQEAgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxkTm9kZVdpdGhNdWx0
aXBsZShUSW50ZXJtTm9kZSAqb3JpZ2luYWwsCisgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6
aW5zZXJ0Q2hpbGROb2RlcyhUSW50ZXJtU2VxdWVuY2U6OnNpemVfdHlwZSBwb3NpdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1T
ZXF1ZW5jZSAmaW5zZXJ0aW9ucykKKyB7CistICAgIGlmIChwb3NpdGlvbiA+IGdldFNlcXVlbmNl
KCktPnNpemUoKSkKKysgICAgYXV0byAmc2VxID0gKmdldFNlcXVlbmNlKCk7CisrICAgIGlmIChw
b3NpdGlvbiA+IHNlcS5zaXplKCkpCisgICAgIHsKKyAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgfQotICAgICAKLSsjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgJiYg
ZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpCi0rICAgIGluZm8tPm5lZWRzRUFHTE9uTWFjID0gdHJ1
ZTsKLSsjZW5kaWYKLSsKKy0gICAgYXV0byBpdCA9IGdldFNlcXVlbmNlKCktPmJlZ2luKCkgKyBw
b3NpdGlvbjsKKy0gICAgZ2V0U2VxdWVuY2UoKS0+aW5zZXJ0KGl0LCBpbnNlcnRpb25zLmJlZ2lu
KCksIGluc2VydGlvbnMuZW5kKCkpOworKyAgICBhdXRvIGl0ID0gc2VxLmJlZ2luKCkgKyBwb3Np
dGlvbjsKKysgICAgc2VxLmluc2VydChpdCwgaW5zZXJ0aW9ucy5iZWdpbigpLCBpbnNlcnRpb25z
LmVuZCgpKTsKICAgICAgcmV0dXJuIHRydWU7CiAgfQogIAotZGlmZiAtLWdpdCBhL3NyYy9saWJB
TkdMRS9DYXBzLmNwcCBiL3NyYy9saWJBTkdMRS9DYXBzLmNwcAotaW5kZXggZjkwNjc4My4uMWRk
ZGQ0ZCAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdMRS9DYXBzLmNwcAotKysrIGIvc3JjL2xpYkFO
R0xFL0NhcHMuY3BwCi1AQCAtNjMwLDcgKzYzMCwxMiBAQCBzdGF0aWMgYm9vbCBEZXRlcm1pbmVE
ZXB0aFRleHR1cmVBTkdMRVN1cHBvcnQoY29uc3QgVGV4dHVyZUNhcHNNYXAgJnRleHR1cmVDYXBz
KQotIHsKLSAgICAgY29uc3RleHByIEdMZW51bSByZXF1aXJlZEZvcm1hdHNbXSA9IHsKLSAgICAg
ICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LAotKyNpZiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9J
T1MpICYmICghZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgfHwgIWRlZmluZWQo
QU5HTEVfQ1BVX0FSTTY0KSkKLSsgICAgICAgIC8vIFRPRE8oZGlubyk6IFRlbXBvcmFyaWx5IFJl
bW92aW5nIHRoZSBuZWVkIGZvciBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMKLSsgICAgICAgIC8v
IGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBvbiBpT1MuCi0rICAgICAgICAvLyBUT0RPKGRp
bm8pOiBJIHRoaW5rIHRoaXMgbmVlZHMgdG8gYmUgYSBydW50aW1lIGNoZWNrIHdoZW4gcnVubmlu
ZyBhbiBpT1MgYXBwIG9uIE1hYy4KLSAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywK
LSsjZW5kaWYKLSAgICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLAotICAgICB9OworQEAg
LTEwNDAsOCArMTA4Miw4IEBAIFRJbnRlcm1BZ2dyZWdhdGU6OlRJbnRlcm1BZ2dyZWdhdGUoY29u
c3QgVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSkKICAKLUBAIC02NDIsNyArNjQ3LDEyIEBAIHN0YXRp
YyBib29sIERldGVybWluZURlcHRoVGV4dHVyZU9FU1N1cHBvcnQoY29uc3QgVGV4dHVyZUNhcHNN
YXAgJnRleHR1cmVDYXBzKQorIFRJbnRlcm1BZ2dyZWdhdGUgKlRJbnRlcm1BZ2dyZWdhdGU6OnNo
YWxsb3dDb3B5KCkgY29uc3QKICB7Ci0gICAgIGNvbnN0ZXhwciBHTGVudW0gcmVxdWlyZWRGb3Jt
YXRzW10gPSB7Ci0gICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQxNiwKLSsjaWYgIWRlZmluZWQo
QU5HTEVfUExBVEZPUk1fSU9TKSAmJiAoIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZ
U1QpIHx8ICFkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCi0rICAgICAgICAvLyBUT0RPKGRpbm8p
OiBUZW1wb3JhcmlseSBSZW1vdmluZyB0aGUgbmVlZCBmb3IgR0xfREVQVEhfQ09NUE9ORU5UMzJf
T0VTCi0rICAgICAgICAvLyBiZWNhdXNlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgb24gaU9TLgotKyAg
ICAgICAgLy8gVE9ETyhkaW5vKTogSSB0aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgcnVudGltZSBj
aGVjayB3aGVuIHJ1bm5pbmcgYW4gaU9TIGFwcCBvbiBNYWMuCi0gICAgICAgICBHTF9ERVBUSF9D
T01QT05FTlQzMl9PRVMsCi0rI2VuZGlmCi0gICAgIH07CistICAgIFRJbnRlcm1TZXF1ZW5jZSAq
Y29weVNlcSA9IG5ldyBUSW50ZXJtU2VxdWVuY2UoKTsKKy0gICAgY29weVNlcS0+aW5zZXJ0KGNv
cHlTZXEtPmJlZ2luKCksIGdldFNlcXVlbmNlKCktPmJlZ2luKCksIGdldFNlcXVlbmNlKCktPmVu
ZCgpKTsKKysgICAgYXV0byAmc2VxICAgICAgICAgICAgICAgICAgPSAqZ2V0U2VxdWVuY2UoKTsK
KysgICAgVEludGVybVNlcXVlbmNlICpjb3B5U2VxICAgPSBuZXcgVEludGVybVNlcXVlbmNlKHNl
cS5iZWdpbigpLCBzZXEuZW5kKCkpOworICAgICBUSW50ZXJtQWdncmVnYXRlICpjb3B5Tm9kZSA9
IG5ldyBUSW50ZXJtQWdncmVnYXRlKG1GdW5jdGlvbiwgbVR5cGUsIG1PcCwgY29weVNlcSk7Cisg
ICAgIGNvcHlOb2RlLT5zZXRMaW5lKG1MaW5lKTsKKyAgICAgcmV0dXJuIGNvcHlOb2RlOworZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaCBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaAoraW5kZXggMzY0Mzg0Ny4uM2I2Zjg3MiAxMDA2
NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaAorKysrIGIvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oCitAQCAtNjc0LDYgKzY3NCw3IEBAIGNs
YXNzIFRJbnRlcm1CbG9jayA6IHB1YmxpYyBUSW50ZXJtTm9kZSwgcHVibGljIFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlCisgeworICAgcHVibGljOgorICAgICBUSW50ZXJtQmxvY2soKSA6IFRJbnRlcm1O
b2RlKCkge30KKysgICAgVEludGVybUJsb2NrKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJt
Tm9kZSAqPiBzdG10cyk7CisgICAgIH5USW50ZXJtQmxvY2soKSBvdmVycmlkZSB7fQogIAotICAg
ICByZXR1cm4gR2V0Rm9ybWF0U3VwcG9ydCh0ZXh0dXJlQ2FwcywgcmVxdWlyZWRGb3JtYXRzLCB0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSk7Ci1kaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xF
L1N0YXRlLmNwcCBiL3NyYy9saWJBTkdMRS9TdGF0ZS5jcHAKLWluZGV4IDdiMDhkOGQuLmE4MDQ0
ODYgMTAwNjQ0Ci0tLS0gYS9zcmMvbGliQU5HTEUvU3RhdGUuY3BwCi0rKysgYi9zcmMvbGliQU5H
TEUvU3RhdGUuY3BwCi1AQCAtNiw2ICs2LDkgQEAKKyAgICAgVEludGVybUJsb2NrICpnZXRBc0Js
b2NrKCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorQEAgLTc3Niw2ICs3NzcsOSBAQCBjbGFz
cyBUSW50ZXJtRGVjbGFyYXRpb24gOiBwdWJsaWMgVEludGVybU5vZGUsIHB1YmxpYyBUSW50ZXJt
QWdncmVnYXRlQmFzZQorIHsKKyAgIHB1YmxpYzoKKyAgICAgVEludGVybURlY2xhcmF0aW9uKCkg
OiBUSW50ZXJtTm9kZSgpIHt9CisrICAgIFRJbnRlcm1EZWNsYXJhdGlvbihjb25zdCBUVmFyaWFi
bGUgKnZhciwgVEludGVybVR5cGVkICppbml0RXhwcik7CisrICAgIFRJbnRlcm1EZWNsYXJhdGlv
bihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgVFZhcmlhYmxlICo+IGRlY2xhcmF0b3JzKTsK
KysgICAgVEludGVybURlY2xhcmF0aW9uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUSW50ZXJtVHlw
ZWQgKj4gZGVjbGFyYXRvcnMpOworICAgICB+VEludGVybURlY2xhcmF0aW9uKCkgb3ZlcnJpZGUg
e30KICAKLSAvLyBTdGF0ZS5jcHA6IEltcGxlbWVudHMgdGhlIFN0YXRlIGNsYXNzLCBlbmNhcHN1
bGF0aW5nIHJhdyBHTCBzdGF0ZS4KKyAgICAgVEludGVybURlY2xhcmF0aW9uICpnZXRBc0RlY2xh
cmF0aW9uTm9kZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
U3ltYm9sLmNwcAoraW5kZXggZDAzODlhZi4uZmUyZTE5YiAxMDA2NDQKKy0tLSBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbC5jcHAKK0BAIC0xOTYsNyArMTk2LDggQEAgdm9pZCBURnVuY3Rpb246OnNoYXJlUGFy
YW1ldGVycyhjb25zdCBURnVuY3Rpb24gJnBhcmFtZXRlcnNTb3VyY2UpCiAgCi0rLy8gT2xkZXIg
Y2xhbmcgdmVyc2lvbnMgaGF2ZSBhIGZhbHNlIHBvc2l0aXZlIG9uIHRoaXMgd2FybmluZyBoZXJl
LgotKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2dsb2JhbC1jb25zdHJ1Y3Rv
cnMiCi0rCi0gI2luY2x1ZGUgImxpYkFOR0xFL1N0YXRlLmgiCisgSW1tdXRhYmxlU3RyaW5nIFRG
dW5jdGlvbjo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0CisgeworLSAgICBzdGQ6OnN0cmluZyBu
ZXdOYW1lKG5hbWUoKS5kYXRhKCksIG5hbWUoKS5sZW5ndGgoKSk7CisrICAgIEltbXV0YWJsZVN0
cmluZyBuYW1lID0gdGhpcy0+bmFtZSgpOworKyAgICBzdGQ6OnN0cmluZyBuZXdOYW1lKG5hbWUu
ZGF0YSgpLCBuYW1lLmxlbmd0aCgpKTsKKyAgICAgbmV3TmFtZSArPSBrRnVuY3Rpb25NYW5nbGVk
TmFtZVNlcGFyYXRvcjsKICAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci1kaWZmIC0tZ2l0IGEvc3Jj
L2xpYkFOR0xFL2Zvcm1hdHV0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9mb3JtYXR1dGlscy5jcHAK
LWluZGV4IDNmOWYzN2QuLjVlNjI4ZjIgMTAwNjQ0Ci0tLS0gYS9zcmMvbGliQU5HTEUvZm9ybWF0
dXRpbHMuY3BwCi0rKysgYi9zcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwCi1AQCAtMTAzNCw3
ICsxMDM0LDcgQEAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEludGVybmFsRm9y
bWF0SW5mb01hcCgpCi0gICAgIGFuZ2xlOjpTeXN0ZW1JbmZvIGluZm87Ci0gICAgIGlmIChhbmds
ZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCi0gICAgIHsKLS0gICAgICAgIGlmIChpbmZvLmlzaU9T
QXBwT25NYWMpCi0rICAgICAgICBpZiAoaW5mby5uZWVkc0VBR0xPbk1hYykKLSAgICAgICAgIHsK
LSAgICAgICAgICAgICAvLyBVc2luZyBPcGVuR0xFUy5mcmFtZXdvcmsuCi0gICAgICAgICAgICAg
QWRkUkdCQUZvcm1hdCgmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgZmFsc2UsICA4LCAgOCwgIDgs
ICA4LCAwLCBHTF9CR1JBX0VYVCwgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgUmVxdWlyZUVTPDIsIDA+LCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQsIFJlcXVpcmVFUzwyLCAw
PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldmVyU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCk7Ci1kaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rp
c3BsYXlBcHBsZV9hcGkuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rpc3Bs
YXlBcHBsZV9hcGkuY3BwCi1pbmRleCBkZTIxNmZiLi5lNjNhOGI2IDEwMDY0NAotLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL0Rpc3BsYXlBcHBsZV9hcGkuY3BwCi0rKysgYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKLUBAIC0z
Nyw3ICszNyw3IEBAIERpc3BsYXlJbXBsICpDcmVhdGVEaXNwbGF5Q0dMT3JFQUdMKGNvbnN0IGVn
bDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKLSAgICAgICAgIGJyZWFrOwotICAgICB9CisgICAgIGZv
ciAoc2l6ZV90IGkgPSAwdTsgaSA8IG1QYXJhbUNvdW50OyArK2kpCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9T
eW1ib2wuaAoraW5kZXggYjljZjkwOC4uMGFiYjFkNCAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbC5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2wuaAorQEAgLTIyMiw3ICsyMjIsNyBAQCBjbGFzcyBURnVuY3Rpb24gOiBwdWJsaWMgVFN5bWJv
bAorICAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gbU9wOyB9CiAg
Ci0tICAgIGlmIChpbmZvLmlzaU9TQXBwT25NYWMpCi0rICAgIGlmIChpbmZvLm5lZWRzRUFHTE9u
TWFjKQotICAgICB7Ci0gICAgICAgICByZXR1cm4gbmV3IHJ4OjpEaXNwbGF5RUFHTChzdGF0ZSk7
Ci0gICAgIH0KLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NvbnRl
eHRDR0wuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9Db250ZXh0Q0dMLmNwcAot
aW5kZXggYmRmNTU5Ny4uYmU5OWI4NSAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKLSsrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9j
Z2wvQ29udGV4dENHTC5jcHAKLUBAIC0xMyw2ICsxMyw4IEBACi0gI2luY2x1ZGUgImxpYkFOR0xF
L0Rpc3BsYXkuaCIKLSAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlD
R0wuaCIKKyAgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQorLSAgICBi
b29sIGlzRGVmaW5lZCgpIHsgcmV0dXJuIGRlZmluZWQ7IH0KKysgICAgYm9vbCBpc0RlZmluZWQo
KSBjb25zdCB7IHJldHVybiBkZWZpbmVkOyB9CisgICAgIHZvaWQgc2V0SGFzUHJvdG90eXBlRGVj
bGFyYXRpb24oKSB7IG1IYXNQcm90b3R5cGVEZWNsYXJhdGlvbiA9IHRydWU7IH0KKyAgICAgYm9v
bCBoYXNQcm90b3R5cGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1IYXNQcm90b3R5cGVE
ZWNsYXJhdGlvbjsgfQogIAotKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQotKwotIG5hbWVzcGFjZSByeAorZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5jcHAgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwCitpbmRleCBhMWZjZjhj
Li5lYTU2NmIxIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
LmNwcAorQEAgLTQxLDggKzQxLDE0IEBAIGNvbnN0IGNoYXIga1Jhc3Rlcml6ZXJEaXNjYXJkRW5h
YmxlZENvbnN0TmFtZVtdID0gIkFOR0xFUmFzdGVyaXplckRpc2FibGVkIjsKKyBuYW1lc3BhY2UK
ICB7CiAgCi1AQCAtNjMsMyArNjUsNSBAQCB2b2lkIENvbnRleHRDR0w6Om9uRGVzdHJveShjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkKKytjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtSYXN0
ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUgPQorKyAgICBJbW11dGFibGVTdHJpbmco
IkFOR0xFUmFzdGVyaXphdGlvbkRpc2FibGVkIik7CisrY29uc3RleHByIEltbXV0YWJsZVN0cmlu
ZyBrQ292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSA9CisrICAgIEltbXV0YWJsZVN0cmluZygi
QU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkIik7CisgY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBr
Q292ZXJhZ2VNYXNrRmllbGQgICAgICAgPSBJbW11dGFibGVTdHJpbmcoImNvdmVyYWdlTWFzayIp
OworK2NvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0VtdUluc3RhbmNlSURGaWVsZCAgICAgID0g
SW1tdXRhYmxlU3RyaW5nKCJlbXVsYXRlZEluc3RhbmNlSUQiKTsKKyBjb25zdGV4cHIgSW1tdXRh
YmxlU3RyaW5nIGtTYW1wbGVNYXNrV3JpdGVGdW5jTmFtZSA9IEltbXV0YWJsZVN0cmluZygiQU5H
TEVXcml0ZVNhbXBsZU1hc2siKTsKKytjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtEaXNjYXJk
V3JhcHBlckZ1bmNOYW1lICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVEaXNjYXJkV3JhcHBlciIp
OworIAorIFRJbnRlcm1CaW5hcnkgKkNyZWF0ZURyaXZlclVuaWZvcm1SZWYoY29uc3QgVFZhcmlh
YmxlICpkcml2ZXJVbmlmb3JtcywgY29uc3QgY2hhciAqZmllbGROYW1lKQorIHsKK0BAIC04Niw2
ICs5MiwyMSBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyUG9zaXRp
b25ZQ29ycmVjdGlvblRvTWFpbihUQ29tcGlsZXIgKmNvbQorICAgICByZXR1cm4gUnVuQXRUaGVF
bmRPZlNoYWRlcihjb21waWxlciwgcm9vdCwgYXNzaWdubWVudCwgc3ltYm9sVGFibGUpOwogIH0K
ICAKLSB9ICAvLyBuYW1lc3BhY2UgcngKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgRW11bGF0ZUlu
c3RhbmNlSUQoVENvbXBpbGVyICpjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICpyb290LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKmRyaXZlclVu
aWZvcm1zKQorK3sKKysgICAgLy8gZW11SW5zdGFuY2VJRAorKyAgICBUSW50ZXJtQmluYXJ5ICpl
bXVJbnN0YW5jZUlEID0KKysgICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5p
Zm9ybXMsIGtFbXVJbnN0YW5jZUlERmllbGQuZGF0YSgpKTsKICsKLSsjZW5kaWYgIC8vIGRlZmlu
ZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FU
QUxZU1QpCi1cIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysgICAgLy8gQ3JlYXRlIGEgc3lt
Ym9sIHJlZmVyZW5jZSB0byAiZ2xfSW5zdGFuY2VJbmRleCIKKysgICAgY29uc3QgVFZhcmlhYmxl
ICppbnN0YW5jZUlEID0gQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisrCisr
ICAgIHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRoVHlwZWQoY29tcGlsZXIsIHJvb3QsIGluc3Rh
bmNlSUQsIGVtdUluc3RhbmNlSUQpOworK30KKysKKyAvLyBJbml0aWFsaXplIHVudXNlZCB2YXJ5
aW5nIG91dHB1dHMuCisgQU5HTEVfTk9fRElTQ0FSRCBib29sIEluaXRpYWxpemVVbnVzZWRPdXRw
dXRzKFRJbnRlcm1CbG9jayAqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKK0BAIC0xMjMsNiArMTQ0
LDE4IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBJbml0aWFsaXplVW51c2VkT3V0cHV0cyhUSW50
ZXJtQmxvY2sgKnJvb3QsCisgCisgfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorIAorKy8qKiBz
dGF0aWMgKi8KKytjb25zdCBjaGFyICpUcmFuc2xhdG9yTWV0YWw6OkdldENvdmVyYWdlTWFza0Vu
YWJsZWRDb25zdE5hbWUoKQorK3sKKysgICAgcmV0dXJuIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29u
c3ROYW1lLmRhdGEoKTsKKyt9CisrCisrLyoqIHN0YXRpYyAqLworK2NvbnN0IGNoYXIgKlRyYW5z
bGF0b3JNZXRhbDo6R2V0UmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKCkKKyt7
CisrICAgIHJldHVybiBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lLmRhdGEo
KTsKKyt9CisrCisgVHJhbnNsYXRvck1ldGFsOjpUcmFuc2xhdG9yTWV0YWwoc2g6OkdMZW51bSB0
eXBlLCBTaFNoYWRlclNwZWMgc3BlYykgOiBUcmFuc2xhdG9yVnVsa2FuKHR5cGUsIHNwZWMpCisg
e30KKyAKK0BAIC0xNTMsMjAgKzE4Niw1OCBAQCBib29sIFRyYW5zbGF0b3JNZXRhbDo6dHJhbnNs
YXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKKyAgICAgeworICAgICAgICAgYXV0byBuZWdGbGlwWSA9
IGdldERyaXZlclVuaWZvcm1OZWdGbGlwWVJlZihkcml2ZXJVbmlmb3Jtcyk7CisgCisrICAgICAg
ICBpZiAobUVtdWxhdGVkSW5zdGFuY2VJRCkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBF
bXVsYXRlIGdsX0luc3RhbmNlSUQKKysgICAgICAgICAgICBpZiAoIUVtdWxhdGVJbnN0YW5jZUlE
KHRoaXMsIHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBkcml2ZXJVbmlmb3JtcykpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgfQorKworICAgICAgICAgLy8gQXBwZW5kIGdsX1Bvc2l0aW9uLnkgY29ycmVjdGlv
biB0byBtYWluCisgICAgICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlclBvc2l0aW9uWUNvcnJl
Y3Rpb25Ub01haW4odGhpcywgcm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIG5lZ0ZsaXBZKSkKKyAg
ICAgICAgIHsKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgCistICAg
ICAgICAvLyBJbnNlcnQgcmFzdGVyaXplciBkaXNjYXJkIGxvZ2ljCistICAgICAgICBpZiAoIWlu
c2VydFJhc3Rlcml6ZXJEaXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICAvLyBJbnNlcnQgcmFz
dGVyaXphdGlvbiBkaXNjYXJkIGxvZ2ljCisrICAgICAgICBpZiAoIWluc2VydFJhc3Rlcml6YXRp
b25EaXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8vIEluaXRpYWxpemUgdW51c2VkIHZh
cnlpbmcgb3V0cHV0cyB0byBhdm9pZCBzcGlydi1jcm9zcyBkZWFkLWNvZGUgcmVtb3ZpbmcgdGhl
bSBpbiBsYXRlcgorKyAgICAvLyBzdGFnZS4gT25seSBkbyB0aGlzIGlmIFNIX0lOSVRfT1VUUFVU
X1ZBUklBQkxFUyBpcyBub3Qgc3BlY2lmaWVkLgorKyAgICBpZiAoKGdldFNoYWRlclR5cGUoKSA9
PSBHTF9WRVJURVhfU0hBREVSIHx8IGdldFNoYWRlclR5cGUoKSA9PSBHTF9HRU9NRVRSWV9TSEFE
RVJfRVhUKSAmJgorKyAgICAgICAgIShjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfT1VUUFVUX1ZB
UklBQkxFUykpCisrICAgIHsKKysgICAgICAgIEluaXRWYXJpYWJsZUxpc3QgbGlzdDsKKysgICAg
ICAgIGZvciAoY29uc3Qgc2g6OlNoYWRlclZhcmlhYmxlICZ2YXIgOiBtT3V0cHV0VmFyeWluZ3Mp
CisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCF2YXIuYWN0aXZlKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgbGlzdC5wdXNoX2JhY2sodmFyKTsKKysgICAgICAgICAgICB9
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIUluaXRpYWxpemVVbnVzZWRPdXRwdXRzKHJv
b3QsICZnZXRTeW1ib2xUYWJsZSgpLCBsaXN0KSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgICAgIH0KKyAgICAgZWxzZSBpZiAoZ2V0U2hhZGVy
VHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikKKyAgICAgeworKyAgICAgICAgLy8gRm9yIG5v
biB2b2lkIE1TTCBmcmFnbWVudCBmdW5jdGlvbnMgcmVwbGFjZSBkaXNjYXJkCisrICAgICAgICAv
LyB3aXRoIEFOR0xFRGlzY2FyZFdyYXBwZXIoKQorKyAgICAgICAgaWYgKG1PdXRwdXRWYXJpYWJs
ZXMuc2l6ZSgpID4gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIXJlcGxhY2VBbGxN
YWluRGlzY2FyZFVzZXMocm9vdCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorICAgICAgICAgaWYgKCFp
bnNlcnRTYW1wbGVNYXNrV3JpdGluZ0xvZ2ljKHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKyAgICAg
ICAgIHsKKyAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CitAQCAtMjM1LDYgKzMwNiwxMyBAQCB2
b2lkIFRyYW5zbGF0b3JNZXRhbDo6Y3JlYXRlQWRkaXRpb25hbEdyYXBoaWNzRHJpdmVyVW5pZm9y
bUZpZWxkcyhzdGQ6OnZlY3RvcjxURgorICAgICBURmllbGQgKmNvdmVyYWdlTWFza0ZpZWxkID0K
KyAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKEVidFVJbnQpLCBrQ292ZXJhZ2VNYXNrRmll
bGQsIFRTb3VyY2VMb2MoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgIGZpZWxk
c091dC0+cHVzaF9iYWNrKGNvdmVyYWdlTWFza0ZpZWxkKTsKKysKKysgICAgaWYgKG1FbXVsYXRl
ZEluc3RhbmNlSUQpCisrICAgIHsKKysgICAgICAgIFRGaWVsZCAqZW11SW5zdGFuY2VJREZpZWxk
ID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0SW50KSwga0VtdUluc3RhbmNlSURGaWVsZCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU291cmNlTG9j
KCksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworKyAgICAgICAgZmllbGRzT3V0LT5wdXNo
X2JhY2soZW11SW5zdGFuY2VJREZpZWxkKTsKKysgICAgfQorIH0KKyAKKyAvLyBBZGQgc2FtcGxl
X21hc2sgd3JpdGluZyB0byBtYWluLCBndWFyZGVkIGJ5IHRoZSBzcGVjaWFsaXphdGlvbiBjb25z
dGFudAorQEAgLTI5MywyNCArMzcxLDI0IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xh
dG9yTWV0YWw6Omluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMoVEludGVybUJsb2NrCisgICAg
IHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKHRoaXMsIHJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFi
bGUpOworIH0KKyAKKy1BTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNl
cnRSYXN0ZXJpemVyRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAqcm9vdCkKKytBTkdMRV9OT19E
SVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExv
Z2ljKFRJbnRlcm1CbG9jayAqcm9vdCkKKyB7CisgICAgIFRJbmZvU2lua0Jhc2UgJnNpbmsgICAg
ICAgPSBnZXRJbmZvU2luaygpLm9iajsKKyAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9
ICZnZXRTeW1ib2xUYWJsZSgpOworIAorICAgICAvLyBJbnNlcnQgcmFzdGVyaXphdGlvbkRpc2Fi
bGVkIHNwZWNpYWxpemF0aW9uIGNvbnN0YW50LgorLSAgICBzaW5rIDw8ICJsYXlvdXQgKGNvbnN0
YW50X2lkPTApIGNvbnN0IGJvb2wgIiA8PCBtdGw6OmtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRD
b25zdE5hbWU7CisrICAgIHNpbmsgPDwgImxheW91dCAoY29uc3RhbnRfaWQ9MCkgY29uc3QgYm9v
bCAiIDw8IGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CisgICAgIHNpbmsg
PDwgIiA9IGZhbHNlO1xuIjsKKyAKKy0gICAgLy8gQ3JlYXRlIGtSYXN0ZXJpemVyRGlzY2FyZEVu
YWJsZWRDb25zdE5hbWUgdmFyaWFibGUgcmVmZXJlbmNlLgorKyAgICAvLyBDcmVhdGUga1Jhc3Rl
cml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSBhbmQga1Jhc3Rlcml6YXRpb25EaXNjYXJk
RnVuY05hbWUgdmFyaWFibGUKKysgICAgLy8gcmVmZXJlbmNlcy4KKyAgICAgVFR5cGUgKmJvb2xU
eXBlID0gbmV3IFRUeXBlKEVidEJvb2wpOworICAgICBib29sVHlwZS0+c2V0UXVhbGlmaWVyKEV2
cUNvbnN0KTsKKy0gICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9CistICAgICAgICBu
ZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcobXRsOjprUmFzdGVyaXpl
ckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKSwKKysgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxl
ZFZhciA9IG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVu
YWJsZWRDb25zdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2xUeXBlLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAKKyAgICAg
Ly8gSW5zZXJ0IHRoaXMgY29kZSB0byB0aGUgZW5kIG9mIG1haW4oKQorLSAgICAvLyBpZiAoQU5H
TEVSYXN0ZXJpemVyRGlzYWJsZWQpCisrICAgIC8vIGlmIChBTkdMRVJhc3Rlcml6YXRpb25EaXNh
YmxlZCkKKyAgICAgLy8geworICAgICAvLyAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgtMy4wLCAt
My4wLCAtMy4wLCAxLjApOworICAgICAvLyB9CitAQCAtMzQxLDQgKzQxOSw3OSBAQCBBTkdMRV9O
T19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsOjppbnNlcnRSYXN0ZXJpemVyRGlzY2FyZExv
Z2ljKFRJbnRlcm1CbG9jaworICAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcih0aGlzLCBy
b290LCBpZkNhbGwsIHN5bWJvbFRhYmxlKTsKKyB9CisgCisrLy8gSWYgdGhlIE1TTCBmcmFnbWVu
dCBzaGFkZXIgaXMgbm9uLXZvaWQsIHdlIG5lZWQgdG8gZW5zdXJlCisrLy8gdGhhdCB0aGVyZSBp
cyBhIHJldHVybiBhdCB0aGUgZW5kLiBUaGUgTVNMIGNvbXBpbGVyCisrLy8gd2lsbCBlcnJvciBv
dXQgaWYgdGhlcmUncyBubyByZXR1cm4gYXQgdGhlIGVuZCwgZXZlbiBpZiBhbGwKKysvLyBwYXRo
cyBsZWFkIHRvIGRpc2NhcmRfZnJhZ21lbnQoKS4gU28gd3JhcCBkaXNjYXJkIGluIGEgd3JhcHBl
ciBmdW5jdGlvbi4KKysvLyBGaXhlcyBkRVFQLUdMRVMzLmZ1bmN0aW9uYWwuc2hhZGVycy5kaXNj
YXJkLmJhc2ljX2Fsd2F5cworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6
OnJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMoVEludGVybUJsb2NrICpyb290KQorK3sKKysgICAg
Ly8gYmVmb3JlCisrICAgIC8vIHZvaWQgbWFpbiAodm9pZCkKKysgICAgLy8geworKyAgICAvLyAg
ICAgb19jb2xvciA9IHZfY29sb3I7CisrICAgIC8vICAgICBkaXNjYXJkOworKyAgICAvLyB9Cisr
CisrICAgIC8vIGFmdGVyCisrICAgIC8vIHZvaWQgQU5HTEVEaXNjYXJkV3JhcHBlcigpCisrICAg
IC8vIHsKKysgICAgLy8gICAgZGlzY2FyZDsKKysgICAgLy8gfQorKyAgICAvLyB2b2lkIG1haW4g
KHZvaWQpCisrICAgIC8vIHsKKysgICAgLy8gICAgIG9fY29sb3IgPSB2X2NvbG9yOworKyAgICAv
LyAgICAgQU5HTEVEaXNjYXJkV3JhcHBlcigpOworKyAgICAvLyB9CisrCisrICAgIFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24gKm1haW4gICA9IEZpbmRNYWluKHJvb3QpOworKyAgICBUSW50ZXJt
QmxvY2sgKm1haW5Cb2R5ICAgICAgICAgICAgPSBtYWluLT5nZXRCb2R5KCk7CisrICAgIFRJbnRl
cm1TZXF1ZW5jZSAqZnVuY3Rpb25TZXF1ZW5jZSA9IG1haW5Cb2R5LT5nZXRTZXF1ZW5jZSgpOwor
KyAgICBUSW50ZXJtQWdncmVnYXRlICpkaXNjYXJkRnVuYyAgICAgPSBudWxscHRyOworKyAgICAv
LyBJdGVyYXRlIG92ZXIgYWxsIGJyYW5jaGVzIGluIG1haW4gZnVuY3Rpb24sIGFuZCByZXBsYWNl
IGFsbCB1c2VzCisrICAgIC8vIG9mIGRpc2NhcmQgd2l0aCBBTkdMRURpc2NhcmRXcmFwcGVyKCku
CisrICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBmdW5jdGlvblNlcXVlbmNlLT5z
aXplKCk7ICsraW5kZXgpCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1Ob2RlICpmdW5jdGlvbk5v
ZGUgPSAoKmZ1bmN0aW9uU2VxdWVuY2UpW2luZGV4XTsKKysgICAgICAgIFRJbnRlcm1CcmFuY2gg
KmJyYW5jaE5vZGUgPSBmdW5jdGlvbk5vZGUtPmdldEFzQnJhbmNoTm9kZSgpOworKyAgICAgICAg
aWYgKGJyYW5jaE5vZGUgIT0gbnVsbHB0cikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAo
YnJhbmNoTm9kZS0+Z2V0Rmxvd09wKCkgPT0gRU9wS2lsbCkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIGlmIChkaXNjYXJkRnVuYyA9PSBudWxscHRyKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBkaXNjYXJkRnVuYyA9IGNyZWF0ZURpc2NhcmRXcmFw
cGVyRnVuYyhyb290KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBib29s
IHJlcGxhY2VkID0gbWFpbkJvZHktPnJlcGxhY2VDaGlsZE5vZGUoYnJhbmNoTm9kZSwgZGlzY2Fy
ZEZ1bmMpOworKyAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VkKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHZhbGlk
YXRlQVNUKHJvb3QpOworK30KKysKKysvLyBDcmVhdGUgZGlzY2FyZF93cmFwcGVyIGZ1bmN0aW9u
IHRvIGVuc3VyZSB0aGF0IFNQSVJWLUNyb3NzIHdpbGwgYWx3YXlzIGhhdmUgYSByZXR1cm4gYXQg
dGhlIGVuZAorKy8vIG9mIGZyYWdtZW50IHNoYWRlcnMKKytBTkdMRV9OT19ESVNDQVJEIFRJbnRl
cm1BZ2dyZWdhdGUgKlRyYW5zbGF0b3JNZXRhbDo6Y3JlYXRlRGlzY2FyZFdyYXBwZXJGdW5jKFRJ
bnRlcm1CbG9jayAqcm9vdCkKKyt7CisrICAgIFRJbmZvU2lua0Jhc2UgJnNpbmsgICAgICAgPSBn
ZXRJbmZvU2luaygpLm9iajsKKysgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9ICZnZXRT
eW1ib2xUYWJsZSgpOworKworKyAgICBzaW5rIDw8ICJ2b2lkICIgPDwga0Rpc2NhcmRXcmFwcGVy
RnVuY05hbWUgPDwgIigpXG4iOworKyAgICBzaW5rIDw8ICJ7XG4iOworKyAgICBzaW5rIDw8ICIg
ICBkaXNjYXJkO1xuIjsKKysgICAgc2luayA8PCAifVxuIjsKKysKKysgICAgVEZ1bmN0aW9uICpk
aXNjYXJkV3JhcHBlckZ1bmMgPQorKyAgICAgICAgbmV3IFRGdW5jdGlvbihzeW1ib2xUYWJsZSwg
a0Rpc2NhcmRXcmFwcGVyRnVuY05hbWUsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisrICAg
ICAgICAgICAgICAgICAgICAgIFN0YXRpY1R5cGU6OkdldEJhc2ljPEVidFZvaWQ+KCksIHRydWUp
OworKworKyAgICBUSW50ZXJtQWdncmVnYXRlICpjYWxsRGlzY2FyZFdyYXBwZXJGdW5jID0KKysg
ICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgqZGlzY2FyZFdyYXBw
ZXJGdW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpOworKyAgICByZXR1cm4gY2FsbERpc2NhcmRX
cmFwcGVyRnVuYzsKKyt9CisrCisgfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmggYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaAoraW5kZXggMGY0ZjFjYy4uYmNjMzE4NyAxMDA2NDQK
Ky0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaAorQEAgLTI1LDYgKzI1LDEx
IEBAIGNsYXNzIFRyYW5zbGF0b3JNZXRhbCA6IHB1YmxpYyBUcmFuc2xhdG9yVnVsa2FuCisgICBw
dWJsaWM6CisgICAgIFRyYW5zbGF0b3JNZXRhbChzaDo6R0xlbnVtIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjKTsKKyAKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJs
ZWRDb25zdE5hbWUoKTsKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldFJhc3Rlcml6YXRpb25E
aXNjYXJkRW5hYmxlZENvbnN0TmFtZSgpOworKworKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5z
dGFuY2VJRChib29sIGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKysKKyAgIHByb3Rl
Y3RlZDoKKyAgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHRyYW5zbGF0ZShUSW50ZXJtQmxvY2sg
KnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0
aW9ucyBjb21waWxlT3B0aW9ucywKK0BAIC0zNyw3ICs0MiwxMyBAQCBjbGFzcyBUcmFuc2xhdG9y
TWV0YWwgOiBwdWJsaWMgVHJhbnNsYXRvclZ1bGthbgorIAorICAgICBBTkdMRV9OT19ESVNDQVJE
IGJvb2wgaW5zZXJ0U2FtcGxlTWFza1dyaXRpbmdMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5pZm9ybXMpOworLSAgICBBTkdMRV9OT19ESVNDQVJEIGJv
b2wgaW5zZXJ0UmFzdGVyaXplckRpc2NhcmRMb2dpYyhUSW50ZXJtQmxvY2sgKnJvb3QpOworKyAg
ICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgaW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dpYyhU
SW50ZXJtQmxvY2sgKnJvb3QpOworKworKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVwbGFj
ZUFsbE1haW5EaXNjYXJkVXNlcyhUSW50ZXJtQmxvY2sgKnJvb3QpOworKworKyAgICBBTkdMRV9O
T19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKmNyZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhUSW50
ZXJtQmxvY2sgKnJvb3QpOworKworKyAgICBib29sIG1FbXVsYXRlZEluc3RhbmNlSUQgPSBmYWxz
ZTsKKyB9OworIAorIH0gIC8vIG5hbWVzcGFjZSBzaAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAor
aW5kZXggMDAwMDAwMC4uNGUxMDIyOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcAorQEAgLTAsMCArMSwxNDM5IEBA
CisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0LmgiCisrCisrI2luY2x1ZGUgImFuZ2xlX2dsLmgiCisrI2luY2x1ZGUg
ImNvbW1vbi91dGlsaXRpZXMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CdWls
dGluc1dvcmthcm91bmRHTFNMLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1t
dXRhYmxlU3RyaW5nQnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL091
dHB1dFZ1bGthbkdMU0wuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TdGF0aWNU
eXBlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0
YWwuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvSG9pc3RDb25zdGFudHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VE
ZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlT3V0QXJncy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJl
bmNlcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERl
Y2xhcmF0aW9ucy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmgiCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9Jbml0aWFsaXplVmFyaWFibGVzLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvTmFtZUVtYmVkZGVkVW5pZm9y
bVN0cnVjdHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1v
dmVBdG9taWNDb3VudGVyQnVpbHRpbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX29wcy9SZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVBdG9taWNDb3VudGVycy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jld3JpdGVDdWJlTWFwU2Ft
cGxlcnNBczJEQXJyYXkuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29w
cy9SZXdyaXRlRGZkeS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1Jld3JpdGVTdHJ1Y3RTYW1wbGVycy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9CdWlsdEluLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ZpbmRGdW5jdGlvbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9GaW5kTWFpbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9GaW5kU3ltYm9sTm9kZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci90cmVlX3V0aWwvUmVwbGFjZUNsaXBEaXN0YW5jZVZhcmlhYmxlLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL1JlcGxhY2VWYXJpYWJsZS5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9SdW5BdFRoZUVuZE9mU2hhZGVyLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgorKworK25hbWVzcGFjZSBzaAor
K3sKKysKKytuYW1lc3BhY2UKKyt7CisrCisrY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0Zp
ZWxkKCJjb3ZlcmFnZU1hc2siLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisrY29uc3RleHBy
IE5hbWUga0VtdUluc3RhbmNlSURGaWVsZCgiZW11bGF0ZWRJbnN0YW5jZUlEIiwgU3ltYm9sVHlw
ZTo6VXNlckRlZmluZWQpOworKyNpZiAwCisrY29uc3RleHByIE5hbWUga1NhbXBsZU1hc2tXcml0
ZUZ1bmNOYW1lKCJXcml0ZVNhbXBsZU1hc2siKTsKKytjb25zdGV4cHIgTmFtZSBrRGlzY2FyZFdy
YXBwZXJGdW5jTmFtZSgiRGlzY2FyZFdyYXBwZXIiKTsKKysjZW5kaWYKKytjb25zdGV4cHIgTmFt
ZSBrRW11bGF0ZWREZXB0aFJhbmdlUGFyYW1zKCJEZXB0aFJhbmdlUGFyYW1zIik7CisrY29uc3Rl
eHByIE5hbWUga1VuaWZvcm1zQmxvY2tOYW1lKCJBbmdsZVVuaWZvcm1zIik7CisrY29uc3RleHBy
IE5hbWUga1VuaWZvcm1zVmFyTmFtZSgiYW5nbGVVbmlmb3JtcyIpOworK2NvbnN0ZXhwciBOYW1l
IGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZsaXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6
VXNlckRlZmluZWQpOworK2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSgiZmxp
cHBlZEZyYWdDb29yZCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysKKytjb25zdGV4cHIg
Y29uc3QgY2hhciBrVmlld3BvcnRbXSAgICAgICAgICAgICA9ICJ2aWV3cG9ydCI7CisrY29uc3Rl
eHByIGNvbnN0IGNoYXIga0hhbGZSZW5kZXJBcmVhW10gICAgICAgPSAiaGFsZlJlbmRlckFyZWEi
OworK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtGbGlwWFlbXSAgICAgICAgICAgICAgID0gImZsaXBY
WSI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga05lZ0ZsaXBYWVtdICAgICAgICAgICAgPSAibmVn
RmxpcFhZIjsKKytjb25zdGV4cHIgY29uc3QgY2hhciBrQ2xpcERpc3RhbmNlc0VuYWJsZWRbXSA9
ICJjbGlwRGlzdGFuY2VzRW5hYmxlZCI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga1hmYkFjdGl2
ZVVucGF1c2VkW10gICAgPSAieGZiQWN0aXZlVW5wYXVzZWQiOworK2NvbnN0ZXhwciBjb25zdCBj
aGFyIGtYZmJWZXJ0aWNlc1BlckRyYXdbXSAgID0gInhmYlZlcnRpY2VzUGVyRHJhdyI7CisrY29u
c3RleHByIGNvbnN0IGNoYXIga1hmYkJ1ZmZlck9mZnNldHNbXSAgICAgPSAieGZiQnVmZmVyT2Zm
c2V0cyI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga0FjYkJ1ZmZlck9mZnNldHNbXSAgICAgPSAi
YWNiQnVmZmVyT2Zmc2V0cyI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga0RlcHRoUmFuZ2VbXSAg
ICAgICAgICAgPSAiZGVwdGhSYW5nZSI7CisrY29uc3RleHByIGNvbnN0IGNoYXIga1ByZVJvdGF0
aW9uW10gICAgICAgICAgPSAicHJlUm90YXRpb24iOworK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtG
cmFnUm90YXRpb25bXSAgICAgICAgID0gImZyYWdSb3RhdGlvbiI7CisrCisrY29uc3RleHByIGNv
bnN0IFRWYXJpYWJsZSBrZ2xfVmVydGV4SW5kZXhNZXRhbCgKKysgICAgQnVpbHRJbklkOjpnbF9W
ZXJ0ZXhJbmRleCwKKysgICAgSW1tdXRhYmxlU3RyaW5nKCJnbF9WZXJ0ZXhJbmRleCIpLAorKyAg
ICBTeW1ib2xUeXBlOjpCdWlsdEluLAorKyAgICBURXh0ZW5zaW9uOjpVTkRFRklORUQsCisrICAg
IFN0YXRpY1R5cGU6OkdldDxFYnRVSW50LCBFYnBIaWdoLCBFdnFWZXJ0ZXhJRCwgMSwgMT4oKSk7
CisrCisrY29uc3RleHByIHNpemVfdCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3JtcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTI7CisrY29uc3RleHBy
IHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3Jtcz4ga0dy
YXBoaWNzRHJpdmVyVW5pZm9ybU5hbWVzID0geworKyAgICB7a1ZpZXdwb3J0LCBrSGFsZlJlbmRl
ckFyZWEsIGtGbGlwWFksIGtOZWdGbGlwWFksIGtDbGlwRGlzdGFuY2VzRW5hYmxlZCwga1hmYkFj
dGl2ZVVucGF1c2VkLAorKyAgICAga1hmYlZlcnRpY2VzUGVyRHJhdywga1hmYkJ1ZmZlck9mZnNl
dHMsIGtBY2JCdWZmZXJPZmZzZXRzLCBrRGVwdGhSYW5nZSwga1ByZVJvdGF0aW9uLAorKyAgICAg
a0ZyYWdSb3RhdGlvbn19OworKworK2NvbnN0ZXhwciBzaXplX3Qga051bUNvbXB1dGVEcml2ZXJV
bmlmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAx
OworK2NvbnN0ZXhwciBzdGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwga051bUNvbXB1dGVEcml2ZXJV
bmlmb3Jtcz4ga0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFtZXMgPSB7CisrICAgIHtrQWNiQnVmZmVy
T2Zmc2V0c319OworKworK2NsYXNzIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCisreworKyAgcHVibGljOgorKyAgICBleHBsaWNpdCBEZWNsYXJl
U3RydWN0VHlwZXNUcmF2ZXJzZXIoVE91dHB1dE1TTCAqb3V0cHV0TVNMKQorKyAgICAgICAgOiBU
SW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSksIG1PdXRwdXRNU0wob3V0cHV0TVNM
KQorKyAgICB7fQorKworKyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQgdmlzaXQsIFRJ
bnRlcm1EZWNsYXJhdGlvbiAqbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgQVNTRVJU
KHZpc2l0ID09IFByZVZpc2l0KTsKKysgICAgICAgIGlmICghbUluR2xvYmFsU2NvcGUpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAgICAg
ICAgY29uc3QgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKmRlY2xhcmF0b3IgICAgICAgID0gc2VxdWVuY2Uu
ZnJvbnQoKS0+Z2V0QXNUeXBlZCgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAg
ICAgICAgICA9IGRlY2xhcmF0b3ItPmdldFR5cGUoKTsKKysKKysgICAgICAgIGlmICh0eXBlLmlz
U3RydWN0U3BlY2lmaWVyKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFN0cnVj
dHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKysKKysgICAgICAgICAgICAvLyBF
bWJlZGRlZCBzdHJ1Y3RzIHNob3VsZCBiZSBwYXJzZWQgYXdheSBieSBub3cuCisrICAgICAgICAg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+c3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsK
KysgICAgICAgICAgICAvLyBvdXRwdXRNU0wtPndyaXRlU3RydWN0VHlwZShzdHJ1Y3R1cmUpOwor
KworKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBkZWNsYXJhdG9yLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKysgICAgICAgICAgICBpZiAoc3ltYm9sTm9kZSAmJiBzeW1ib2xO
b2RlLT52YXJpYWJsZSgpLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc3RydWN0IHNwZWNpZmll
ciBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0IGlzbid0IHBhcnNlZCBhZ2Fpbi4KKysg
ICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIGVtcHR5UmVwbGFjZW1lbnQ7CisrICAgICAg
ICAgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5lbXBsYWNlX2JhY2soZ2V0UGFyZW50Tm9kZSgp
LT5nZXRBc0Jsb2NrKCksIG5vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKyAgICAgICAgLy8gVE9ETzogUkVNT1ZFLCB1c2VkIHRvIHJlbW92ZSAndW5zdWVkJyB3
YXJuaW5nCisrICAgICAgICBtT3V0cHV0TVNMID0gbnVsbHB0cjsKKysKKysgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgVE91dHB1dE1TTCAqbU91dHB1
dE1TTDsKKyt9OworKworK2NsYXNzIERlY2xhcmVEZWZhdWx0VW5pZm9ybXNUcmF2ZXJzZXIgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgorK3sKKysgIHB1YmxpYzoKKysgICAgRGVjbGFyZURlZmF1
bHRVbmlmb3Jtc1RyYXZlcnNlcihUSW5mb1NpbmtCYXNlICpzaW5rLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAgKm5hbWVNYXApCisrICAg
ICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisrICAgICAgICAgIG1T
aW5rKHNpbmspLAorKyAgICAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCisrICAg
ICAgICAgIG1OYW1lTWFwKG5hbWVNYXApLAorKyAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybShm
YWxzZSkKKysgICAge30KKysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNv
bnN0IFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSAqKG5vZGUtPmdldFNlcXVlbmNlKCkpOwor
KworKyAgICAgICAgLy8gVE9ETyhqbWFkaWxsKTogQ29tcG91bmQgZGVjbGFyYXRpb25zLgorKyAg
ICAgICAgQVNTRVJUKHNlcXVlbmNlLnNpemUoKSA9PSAxKTsKKysKKysgICAgICAgIFRJbnRlcm1U
eXBlZCAqdmFyaWFibGUgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisrICAgICAg
ICBjb25zdCBUVHlwZSAmdHlwZSAgICAgID0gdmFyaWFibGUtPmdldFR5cGUoKTsKKysgICAgICAg
IGJvb2wgaXNVbmlmb3JtICAgICAgICAgPSB0eXBlLmdldFF1YWxpZmllcigpID09IEV2cVVuaWZv
cm0gJiYgIXR5cGUuaXNJbnRlcmZhY2VCbG9jaygpICYmCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICFJc09wYXF1ZVR5cGUodHlwZS5nZXRCYXNpY1R5cGUoKSk7CisrCisrICAgICAgICBpZiAo
dmlzaXQgPT0gUHJlVmlzaXQpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGlzVW5pZm9y
bSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICgqbVNpbmspIDw8ICIgICAgIiA8
PCBHZXRUeXBlTmFtZSh0eXBlLCBtSGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkgPDwgIiAiOworKyAg
ICAgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IHRydWU7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IGlzVW5pZm9ybTsKKysgICAgICAg
IH0KKysgICAgICAgIGVsc2UgaWYgKHZpc2l0ID09IFBvc3RWaXNpdCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBpZiAoaXNVbmlmb3JtKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgKCptU2luaykgPDwgIjtcbiI7CisrCisrICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUg
dW5pZm9ybSBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0IGlzbid0IHBhcnNlZCBhZ2Fp
bi4KKysgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIGVtcHR5UmVwbGFjZW1lbnQ7Cisr
ICAgICAgICAgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5lbXBsYWNlX2JhY2soZ2V0UGFyZW50
Tm9kZSgpLT5nZXRBc0Jsb2NrKCksIG5vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7CisrICAgICAgICAgICAgfQor
KworKyAgICAgICAgICAgIG1JbkRlZmF1bHRVbmlmb3JtID0gZmFsc2U7CisrICAgICAgICB9Cisr
ICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKG1JbkRl
ZmF1bHRVbmlmb3JtKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0
cmluZyAmbmFtZSA9IHN5bWJvbC0+dmFyaWFibGUoKS5uYW1lKCk7CisrICAgICAgICAgICAgQVNT
RVJUKCFuYW1lLmJlZ2luc1dpdGgoImdsXyIpKTsKKysgICAgICAgICAgICAoKm1TaW5rKSA8PCBI
YXNoTmFtZSgmc3ltYm9sLT52YXJpYWJsZSgpLCBtSGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkKKysg
ICAgICAgICAgICAgICAgICAgICA8PCBBcnJheVN0cmluZyhzeW1ib2wtPmdldFR5cGUoKSk7Cisr
ICAgICAgICB9CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIFRJbmZvU2lua0Jhc2UgKm1T
aW5rOworKyAgICBTaEhhc2hGdW5jdGlvbjY0IG1IYXNoRnVuY3Rpb247CisrICAgIE5hbWVNYXAg
Km1OYW1lTWFwOworKyAgICBib29sIG1JbkRlZmF1bHRVbmlmb3JtOworK307CisrCisrVEludGVy
bUJpbmFyeSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihjb25zdCBUVmFyaWFibGUgJmRyaXZlclVu
aWZvcm1zLCBjb25zdCBjaGFyICpmaWVsZE5hbWUpCisreworKyAgICBzaXplX3QgZmllbGRJbmRl
eCA9IEZpbmRGaWVsZEluZGV4KGRyaXZlclVuaWZvcm1zLmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+
ZmllbGRzKCksIGZpZWxkTmFtZSk7CisrCisrICAgIFRJbnRlcm1TeW1ib2wgKmFuZ2xlVW5pZm9y
bXNSZWYgPSBuZXcgVEludGVybVN5bWJvbCgmZHJpdmVyVW5pZm9ybXMpOworKyAgICBUQ29uc3Rh
bnRVbmlvbiAqdW5pZm9ybUluZGV4ICAgID0gbmV3IFRDb25zdGFudFVuaW9uOworKyAgICB1bmlm
b3JtSW5kZXgtPnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KGZpZWxkSW5kZXgpKTsKKysgICAg
VEludGVybUNvbnN0YW50VW5pb24gKmluZGV4UmVmID0KKysgICAgICAgIG5ldyBUSW50ZXJtQ29u
c3RhbnRVbmlvbih1bmlmb3JtSW5kZXgsICpTdGF0aWNUeXBlOjpHZXRCYXNpYzxFYnRJbnQ+KCkp
OworKyAgICByZXR1cm4gbmV3IFRJbnRlcm1CaW5hcnkoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsIGFu
Z2xlVW5pZm9ybXNSZWYsIGluZGV4UmVmKTsKKyt9CisrCisrI2lmIDAKKysvLyBVbmxpa2UgVnVs
a2FuIGhhdmluZyBhdXRvIHZpZXdwb3J0IGZsaXBwaW5nIGV4dGVuc2lvbiwgaW4gTWV0YWwgd2Ug
aGF2ZSB0byBmbGlwIGdsX1Bvc2l0aW9uLnkKKysvLyBtYW51YWxseS4KKysvLyBUaGlzIG9wZXJh
dGlvbiBwZXJmb3JtcyBmbGlwcGluZyB0aGUgZ2xfUG9zaXRpb24ueSB1c2luZyB0aGlzIGV4cHJl
c3Npb246CisrLy8gZ2xfUG9zaXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgKiBuZWdWaWV3cG9ydFNj
YWxlWQorK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllD
b3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Td2l6emxlICZuZWdGbGlwWSkKKyt7CisrICAg
IFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOwor
KworKyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNlIHRvICJnbF9Qb3NpdGlvbiIKKysg
ICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0
aW9uKCk7CisrICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJbnRlcm1TeW1i
b2wocG9zaXRpb24pOworKworKyAgICAvLyBDcmVhdGUgYSBzd2l6emxlIHRvICJnbF9Qb3NpdGlv
bi55IgorKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFk7CisrICAgIHN3aXp6bGVPZmZz
ZXRZLnB1c2hfYmFjaygxKTsKKysgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWSA9IG5ldyBU
SW50ZXJtU3dpenpsZShwb3NpdGlvblJlZiwgc3dpenpsZU9mZnNldFkpOworKworKyAgICAvLyBD
cmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0aW9uLnkgKiBuZWdGbGlwWSIKKysgICAgVElu
dGVybUJpbmFyeSAqaW52ZXJzZVkgPSBuZXcgVEludGVybUJpbmFyeShFT3BNdWwsIHBvc2l0aW9u
WS0+ZGVlcENvcHkoKSwgJm5lZ0ZsaXBZKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25t
ZW50ICJnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCisr
ICAgIFRJbnRlcm1UeXBlZCAqcG9zaXRpb25ZTEhTID0gcG9zaXRpb25ZLT5kZWVwQ29weSgpOwor
KyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICA9IG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVy
YXRvcjo6RU9wQXNzaWduLCBwb3NpdGlvbllMSFMsIGludmVyc2VZKTsKKysKKysgICAgLy8gQXBw
ZW5kIHRoZSBhc3NpZ25tZW50IGFzIGEgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNoYWRl
ci4KKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAmcm9vdCwgYXNz
aWdubWVudCwgJnN5bWJvbFRhYmxlKTsKKyt9CisrI2VuZGlmCisrCisrI2lmIDAKKysvLyBJbml0
aWFsaXplIHVudXNlZCB2YXJ5aW5nIG91dHB1dHMuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIElu
aXRpYWxpemVVbnVzZWRPdXRwdXRzKFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
SW5pdFZhcmlhYmxlTGlzdCAmdW51c2VkVmFycykKKyt7CisrICAgIGlmICh1bnVzZWRWYXJzLmVt
cHR5KCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrCisrICAgIFRJ
bnRlcm1TZXF1ZW5jZSAqaW5zZXJ0U2VxdWVuY2UgPSBuZXcgVEludGVybVNlcXVlbmNlOworKwor
KyAgICBmb3IgKGNvbnN0IHNoOjpTaGFkZXJWYXJpYWJsZSAmdmFyIDogdW51c2VkVmFycykKKysg
ICAgeworKyAgICAgICAgQVNTRVJUKCF2YXIuYWN0aXZlKTsKKysgICAgICAgIGNvbnN0IFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCA9IEZpbmRTeW1ib2xOb2RlKCZyb290LCB2YXIubmFtZSk7CisrICAg
ICAgICBBU1NFUlQoc3ltYm9sKTsKKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAqaW5pdENv
ZGUgPSBDcmVhdGVJbml0Q29kZShzeW1ib2wsIGZhbHNlLCBmYWxzZSwgJnN5bWJvbFRhYmxlKTsK
KysKKysgICAgICAgIGluc2VydFNlcXVlbmNlLT5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UtPmVuZCgp
LCBpbml0Q29kZS0+YmVnaW4oKSwgaW5pdENvZGUtPmVuZCgpKTsKKysgICAgfQorKworKyAgICBp
ZiAoaW5zZXJ0U2VxdWVuY2UpCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gKm1haW4gPSBGaW5kTWFpbigmcm9vdCk7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2Ug
Km1haW5TZXF1ZW5jZSAgID0gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworKworKyAg
ICAgICAgLy8gSW5zZXJ0IGluaXQgY29kZSBhdCB0aGUgc3RhcnQgb2YgbWFpbigpCisrICAgICAg
ICBtYWluU2VxdWVuY2UtPmluc2VydChtYWluU2VxdWVuY2UtPmJlZ2luKCksIGluc2VydFNlcXVl
bmNlLT5iZWdpbigpLCBpbnNlcnRTZXF1ZW5jZS0+ZW5kKCkpOworKyAgICB9CisrCisrICAgIHJl
dHVybiB0cnVlOworK30KKysjZW5kaWYKKysKKytjb25zdCBUVmFyaWFibGUgKkFkZENvbXB1dGVE
cml2ZXJVbmlmb3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJvbFRhYmxlICZz
eW1ib2xUYWJsZSkKKyt7CisrICAgIC8vIFRoaXMgZmllbGQgbGlzdCBtaXJyb3JzIHRoZSBzdHJ1
Y3R1cmUgb2YgQ29tcHV0ZURyaXZlclVuaWZvcm1zIGluIENvbnRleHRWay5jcHAuCisrICAgIFRG
aWVsZExpc3QgKmRyaXZlckZpZWxkTGlzdCA9IG5ldyBURmllbGRMaXN0OworKworKyAgICBjb25z
dCBzdGQ6OmFycmF5PFRUeXBlICosIGtOdW1Db21wdXRlRHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJV
bmlmb3JtVHlwZXMgPSB7eworKyAgICAgICAgbmV3IFRUeXBlKEVidFVJbnQsIDQpLAorKyAgICB9
fTsKKysKKysgICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwg
a051bUNvbXB1dGVEcml2ZXJVbmlmb3JtczsgKyt1bmlmb3JtSW5kZXgpCisrICAgIHsKKysgICAg
ICAgIFRGaWVsZCAqZHJpdmVyVW5pZm9ybUZpZWxkID0KKysgICAgICAgICAgICBuZXcgVEZpZWxk
KGtEcml2ZXJVbmlmb3JtVHlwZXNbdW5pZm9ybUluZGV4XSwKKysgICAgICAgICAgICAgICAgICAg
ICAgIEltbXV0YWJsZVN0cmluZyhrQ29tcHV0ZURyaXZlclVuaWZvcm1OYW1lc1t1bmlmb3JtSW5k
ZXhdKSwga05vU291cmNlTG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCk7CisrICAgICAgICBkcml2ZXJGaWVsZExpc3QtPnB1c2hfYmFjayhkcml2
ZXJVbmlmb3JtRmllbGQpOworKyAgICB9CisrCisrICAgIHJldHVybiBEZWNsYXJlU3RydWN0dXJl
KCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwgRXZxVW5pZm9ybSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1YWxpZmllcjo6Q3JlYXRlKCksIDAsIGtV
bmlmb3Jtc0Jsb2NrTmFtZS5yYXdOYW1lKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKysgICAgICAgIC5zZWNvbmQ7CisrfQorKwor
Ky8vIFRoZSBBZGQqRHJpdmVyVW5pZm9ybXNUb1NoYWRlciBvcGVyYXRpb24gYWRkcyBhbiBpbnRl
cm5hbCB1bmlmb3JtIGJsb2NrIHRvIGEgc2hhZGVyLiBUaGUgZHJpdmVyCisrLy8gYmxvY2sgaXMg
dXNlZCB0byBpbXBsZW1lbnQgVnVsa2FuLXNwZWNpZmljIGZlYXR1cmVzIGFuZCB3b3JrYXJvdW5k
cy4gUmV0dXJucyB0aGUgZHJpdmVyIHVuaWZvcm1zCisrLy8gdmFyaWFibGUuCisrLy8KKysvLyBU
aGVyZSBhcmUgR3JhcGhpY3MgYW5kIENvbXB1dGUgdmFyaWF0aW9ucyBhcyB0aGV5IHJlcXVpcmUg
ZGlmZmVyZW50IHVuaWZvcm1zLgorK2NvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJV
bmlmb3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiAmYWRkaXRpb25hbEZpZWxkcykKKyt7CisrICAgIC8v
IEluaXQgdGhlIGRlcHRoIHJhbmdlIHR5cGUuCisrICAgIFRGaWVsZExpc3QgKmRlcHRoUmFuZ2VQ
YXJhbXNGaWVsZHMgPSBuZXcgVEZpZWxkTGlzdCgpOworKyAgICBkZXB0aFJhbmdlUGFyYW1zRmll
bGRzLT5wdXNoX2JhY2sobmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2
cUdsb2JhbCwgMSwgMSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEltbXV0YWJsZVN0cmluZygibmVhciIpLCBrTm9Tb3VyY2VMb2MsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpKTsKKysgICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5l
dyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW11dGFi
bGVTdHJpbmcoImZhciIpLCBrTm9Tb3VyY2VMb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpKTsKKysg
ICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoImRpZmYiKSwg
a05vU291cmNlTG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisrICAgIC8vIFRoaXMgYWRkaXRp
b25hbCBmaWVsZCBtaWdodCBiZSB1c2VkIGJ5IHN1YmNsYXNzIHN1Y2ggYXMgVHJhbnNsYXRvck1l
dGFsLgorKyAgICBkZXB0aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNoX2JhY2sobmV3IFRGaWVsZChu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSwgMSksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygi
cmVzZXJ2ZWQiKSwga05vU291cmNlTG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisrCisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKmVtdWxhdGVkRGVwdGhSYW5nZVBhcmFtcyA9CisrICAgICAgICBE
ZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRlcHRoUmFuZ2VQYXJhbXNGaWVs
ZHMsIEV2cUdsb2JhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1YWxpZmll
cjo6Q3JlYXRlKCksIDAsIGtFbXVsYXRlZERlcHRoUmFuZ2VQYXJhbXMucmF3TmFtZSgpLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyKQorKyAgICAgICAgICAgIC5maXJzdC0+Z2V0
VHlwZSgpCisrICAgICAgICAgICAgLmdldFN0cnVjdCgpOworKworKyAgICAvLyBUaGlzIGZpZWxk
IGxpc3QgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9mIEdyYXBoaWNzRHJpdmVyVW5pZm9ybXMgaW4g
Q29udGV4dFZrLmNwcC4KKysgICAgVEZpZWxkTGlzdCAqZHJpdmVyRmllbGRMaXN0ID0gbmV3IFRG
aWVsZExpc3Q7CisrCisrICAgIGNvbnN0IHN0ZDo6YXJyYXk8VFR5cGUgKiwga051bUdyYXBoaWNz
RHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7eworKyAgICAgICAgbmV3IFRU
eXBlKEVidEZsb2F0LCA0KSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRGbG9hdCwgMiksCisrICAg
ICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorKyAgICAgICAgbmV3IFRUeXBlKEVidEZsb2F0
LCAyKSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwgIC8vIHVpbnQgY2xpcERpc3RhbmNl
c0VuYWJsZWQ7ICAvLyAzMiBiaXRzIGZvciAzMiBjbGlwIGRpc3RhbmNlcyBtYXgKKysgICAgICAg
IG5ldyBUVHlwZShFYnRVSW50KSwKKysgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwKKysgICAg
ICAgIC8vIE5PVEU6IFRoZXJlJ3MgYSB2ZWMzIGdhcCBoZXJlIHRoYXQgY2FuIGJlIHVzZWQgaW4g
dGhlIGZ1dHVyZQorKyAgICAgICAgbmV3IFRUeXBlKEVidEludCwgNCksCisrICAgICAgICBuZXcg
VFR5cGUoRWJ0VUludCwgNCksCisrICAgICAgICBuZXcgVFR5cGUoZW11bGF0ZWREZXB0aFJhbmdl
UGFyYW1zLCBmYWxzZSksCisrICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQpLAorKyAg
ICAgICAgbmV3IFRUeXBlKEVidEZsb2F0LCAyLCA0KSwKKysgICAgfX07CisrCisrICAgIGZvciAo
c2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IGtOdW1HcmFwaGljc0RyaXZl
clVuaWZvcm1zOyArK3VuaWZvcm1JbmRleCkKKysgICAgeworKyAgICAgICAgVEZpZWxkICpkcml2
ZXJVbmlmb3JtRmllbGQgPQorKyAgICAgICAgICAgIG5ldyBURmllbGQoa0RyaXZlclVuaWZvcm1U
eXBlc1t1bmlmb3JtSW5kZXhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgSW1tdXRhYmxlU3Ry
aW5nKGtHcmFwaGljc0RyaXZlclVuaWZvcm1OYW1lc1t1bmlmb3JtSW5kZXhdKSwga05vU291cmNl
TG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisrICAgICAgICBkcml2ZXJGaWVsZExpc3QtPnB1c2hfYmFjayhkcml2ZXJVbmlmb3JtRmllbGQp
OworKyAgICB9CisrCisrICAgIC8vIEJhY2stZW5kIHNwZWNpZmljIGZpZWxkcworKyAgICBkcml2
ZXJGaWVsZExpc3QtPmluc2VydChkcml2ZXJGaWVsZExpc3QtPmVuZCgpLCBhZGRpdGlvbmFsRmll
bGRzLmJlZ2luKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVs
ZHMuZW5kKCkpOworKworKyAgICAvLyBEZWZpbmUgYSBkcml2ZXIgdW5pZm9ybSBibG9jayAiQU5H
TEVVbmlmb3JtQmxvY2siIHdpdGggaW5zdGFuY2UgbmFtZSAiQU5HTEVVbmlmb3JtcyIuCisrICAg
IHJldHVybiBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxk
TGlzdCwgRXZxVW5pZm9ybSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE1lbW9yeVF1
YWxpZmllcjo6Q3JlYXRlKCksIDAsIGtVbmlmb3Jtc0Jsb2NrTmFtZS5yYXdOYW1lKCksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKysg
ICAgICAgIC5zZWNvbmQ7CisrfQorKworKy8vIERlY2xhcmVzIGEgbmV3IHZhcmlhYmxlIHRvIHJl
cGxhY2UgZ2xfRGVwdGhSYW5nZSwgaXRzIHZhbHVlcyBhcmUgZmVkIGZyb20gYSBkcml2ZXIgdW5p
Zm9ybS4KKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmVwbGFjZUdMRGVwdGhSYW5nZVdpdGhEcml2
ZXJVbmlmb3JtKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgVFN5bWJvbFRhYmxl
ICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrCisrICAgIC8vIENy
ZWF0ZSBhIHN5bWJvbCByZWZlcmVuY2UgdG8gImdsX0RlcHRoUmFuZ2UiCisrICAgIGNvbnN0IFRW
YXJpYWJsZSAqZGVwdGhSYW5nZVZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSAqPigK
KysgICAgICAgIHN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKEltbXV0YWJsZVN0cmluZygiZ2xfRGVw
dGhSYW5nZSIpLCAwKSk7CisrCisrICAgIC8vIEFOR0xFVW5pZm9ybXMuZGVwdGhSYW5nZQorKyAg
ICBUSW50ZXJtQmluYXJ5ICphbmdsZUVtdWxhdGVkRGVwdGhSYW5nZVJlZiA9IENyZWF0ZURyaXZl
clVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtEZXB0aFJhbmdlKTsKKysKKysgICAgLy8gVXNl
IHRoaXMgdmFyaWFibGUgaW5zdGVhZCBvZiBnbF9EZXB0aFJhbmdlIGV2ZXJ5d2hlcmUuCisrICAg
IHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgZGVwdGhS
YW5nZVZhciwgYW5nbGVFbXVsYXRlZERlcHRoUmFuZ2VSZWYpOworK30KKysKKytUSW50ZXJtU2Vx
dWVuY2UgKkdldE1haW5TZXF1ZW5jZShUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBUSW50
ZXJtRnVuY3Rpb25EZWZpbml0aW9uICptYWluID0gRmluZE1haW4oJnJvb3QpOworKyAgICByZXR1
cm4gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworK30KKysKKytBTkdMRV9OT19ESVND
QVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyVHJhbnNmb3JtRmVlZGJhY2tPdXRwdXRUb01haW4o
VENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KQor
K3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdldFN5bWJvbFRh
YmxlKCk7CisrICAgIFRWYXJpYWJsZSAqeGZiUGxhY2Vob2xkZXIgPSBuZXcgVFZhcmlhYmxlKCZz
eW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCJAQCBYRkItT1VUIEBAIiksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZSgpLCBTeW1ib2xU
eXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAgLy8gQXBwZW5kIHRoZSBhc3NpZ25tZW50IGFz
IGEgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIHNoYWRlci4KKysgICAgcmV0dXJuIFJ1bkF0
VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVyLCAmcm9vdCwgbmV3IFRJbnRlcm1TeW1ib2woeGZiUGxh
Y2Vob2xkZXIpLCAmc3ltYm9sVGFibGUpOworK30KKysKKysvLyBUaGlzIG9wZXJhdGlvbiBwZXJm
b3JtcyB0aGUgdmlld3BvcnQgZGVwdGggdHJhbnNsYXRpb24gbmVlZGVkIGJ5IFZ1bGthbi4gSW4g
R0wgdGhlIHZpZXdwb3J0CisrLy8gdHJhbnNmb3JtYXRpb24gaXMgc2xpZ2h0bHkgZGlmZmVyZW50
IC0gc2VlIHRoZSBHTCAyLjAgc3BlYyBzZWN0aW9uICIyLjEyLjEgQ29udHJvbGxpbmcgdGhlCisr
Ly8gVmlld3BvcnQiLiBJbiBWdWxrYW4gdGhlIGNvcnJlc3BvbmRpbmcgc3BlYyBzZWN0aW9uIGlz
IGN1cnJlbnRseSAiMjMuNC4gQ29vcmRpbmF0ZQorKy8vIFRyYW5zZm9ybWF0aW9ucyIuCisrLy8g
VGhlIGVxdWF0aW9ucyByZWR1Y2UgdG8gYW4gZXhwcmVzc2lvbjoKKysvLworKy8vICAgICB6X3Zr
ID0gMC41ICogKHdfZ2wgKyB6X2dsKQorKy8vCisrLy8gd2hlcmUgel92ayBpcyB0aGUgZGVwdGgg
b3V0cHV0IG9mIGEgVnVsa2FuIHZlcnRleCBzaGFkZXIgYW5kIHpfZ2wgaXMgdGhlIHNhbWUgZm9y
IEdMLgorK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJEZXB0aENvcnJl
Y3Rpb25Ub01haW4oVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9v
dCkKKyt7CisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1i
b2xUYWJsZSgpOworKworKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0SW5W
YXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKysgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYg
PSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisrCisrICAgIFRWZWN0b3I8aW50PiBzd2l6
emxlT2Zmc2V0WiA9IHsyfTsKKysgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWiAgID0gbmV3
IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zmc2V0Wik7CisrCisrICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uICpvbmVIYWxmID0gQ3JlYXRlRmxvYXROb2RlKDAuNWYpOworKwor
KyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFcgPSB7M307CisrICAgIFRJbnRlcm1Td2l6
emxlICpwb3NpdGlvblcgICA9IG5ldyBUSW50ZXJtU3dpenpsZShwb3NpdGlvblJlZi0+ZGVlcENv
cHkoKSwgc3dpenpsZU9mZnNldFcpOworKworKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24g
IihnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjUiLgorKyAgICBUSW50ZXJtQmlu
YXJ5ICp6UGx1c1cgPSBuZXcgVEludGVybUJpbmFyeShFT3BBZGQsIHBvc2l0aW9uWi0+ZGVlcENv
cHkoKSwgcG9zaXRpb25XLT5kZWVwQ29weSgpKTsKKysgICAgVEludGVybUJpbmFyeSAqaGFsZlpQ
bHVzVyA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE11bCwgelBsdXNXLCBvbmVIYWxmLT5kZWVwQ29w
eSgpKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi56ID0g
KGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNSIKKysgICAgVEludGVybVR5cGVk
ICpwb3NpdGlvblpMSFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisrICAgIFRJbnRlcm1CaW5h
cnkgKmFzc2lnbm1lbnQgID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24s
IHBvc2l0aW9uWkxIUywgaGFsZlpQbHVzVyk7CisrCisrICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdu
bWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisrICAgIHJldHVy
biBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZzeW1i
b2xUYWJsZSk7CisrfQorKworKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIEFuZHJvaWQgcHJl
LXJvdGF0aW9uIGFuZCB5LWZsaXAuICBGb3IgQW5kcm9pZCAoYW5kIHBvdGVudGlhbGx5IG90aGVy
CisrLy8gcGxhdGZvcm1zKSwgdGhlIGRldmljZSBtYXkgcm90YXRlLCBzdWNoIHRoYXQgdGhlIG9y
aWVudGF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyByb3RhdGVkCisrLy8gcmVsYXRpdmUgdG8g
dGhlIG5hdGl2ZSBvcmllbnRhdGlvbiBvZiB0aGUgZGV2aWNlLiAgVGhpcyBpcyBjb3JyZWN0ZWQg
aW4gcGFydCBieSBtdWx0aXBseWluZworKy8vIGdsX1Bvc2l0aW9uIGJ5IGEgbWF0Mi4KKysvLyBU
aGUgZXF1YXRpb25zIHJlZHVjZSB0byBhbiBleHByZXNzaW9uOgorKy8vCisrLy8gICAgIGdsX1Bv
c2l0aW9uLnh5ID0gZ2xfUG9zaXRpb24ueHkgKiBwcmVSb3RhdGlvbgorK0FOR0xFX05PX0RJU0NB
UkQgYm9vbCBBcHBlbmRQcmVSb3RhdGlvbihUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJp
dmVyVW5pZm9ybXMpCisreworKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlICAgICA9IGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrICAgIFRJbnRlcm1CaW5hcnkgKnByZVJvdGF0aW9u
UmVmID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga1ByZVJvdGF0aW9u
KTsKKysgICAgVEludGVybVN5bWJvbCAqZ2xQb3MgICAgICAgICAgPSBuZXcgVEludGVybVN5bWJv
bChCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCkpOworKyAgICBUVmVjdG9yPGludD4gc3dp
enpsZU9mZnNldFhZICA9IHswLCAxfTsKKysgICAgVEludGVybVN3aXp6bGUgKmdsUG9zWFkgICAg
ICAgPSBuZXcgVEludGVybVN3aXp6bGUoZ2xQb3MsIHN3aXp6bGVPZmZzZXRYWSk7CisrCisrICAg
IC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24p
IgorKyAgICBUSW50ZXJtQmluYXJ5ICp6Um90YXRlZCA9CisrICAgICAgICBuZXcgVEludGVybUJp
bmFyeShFT3BNYXRyaXhUaW1lc1ZlY3RvciwgcHJlUm90YXRpb25SZWYtPmRlZXBDb3B5KCksIGds
UG9zWFktPmRlZXBDb3B5KCkpOworKworKyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImds
X1Bvc2l0aW9uLnh5ID0gKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24pIgorKyAgICBUSW50
ZXJtQmluYXJ5ICphc3NpZ25tZW50ID0KKysgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVy
YXRvcjo6RU9wQXNzaWduLCBnbFBvc1hZLT5kZWVwQ29weSgpLCB6Um90YXRlZCk7CisrCisrICAg
IC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRo
ZSBzaGFkZXIuCisrICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJv
b3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7CisrfQorKworK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBSb3RhdGVBbmRGbGlwQnVpbHRpblZhcmlhYmxlKFRDb21waWxlciAmY29tcGlsZXIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bUJsb2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmaW5zZXJ0U2VxdWVuY2UsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZmbGlw
WFksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZidWlsdGluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgJmZsaXBwZWRWYXJpYWJsZU5hbWUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkICZwaXZvdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmZyYWdSb3RhdGlvbikKKyt7CisrICAgIFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKworKyAgICAv
LyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNlIHRvICdidWlsdGluJy4KKysgICAgVEludGVybVN5
bWJvbCAqYnVpbHRpblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKCZidWlsdGluKTsKKysKKysgICAg
Ly8gQ3JlYXRlIGEgc3dpenpsZSB0byAiYnVpbHRpbi54eSIKKysgICAgVFZlY3RvcjxpbnQ+IHN3
aXp6bGVPZmZzZXRYWSA9IHswLCAxfTsKKysgICAgVEludGVybVN3aXp6bGUgKmJ1aWx0aW5YWSAg
ICA9IG5ldyBUSW50ZXJtU3dpenpsZShidWlsdGluUmVmLCBzd2l6emxlT2Zmc2V0WFkpOworKwor
KyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVmZXJlbmNlIHRvIG91ciBuZXcgdmFyaWFibGUgdGhh
dCB3aWxsIGhvbGQgdGhlIG1vZGlmaWVkIGJ1aWx0aW4uCisrICAgIGNvbnN0IFRUeXBlICp0eXBl
ID0gU3RhdGljVHlwZTo6R2V0Rm9yVmVjPEVidEZsb2F0PigKKysgICAgICAgIEV2cUdsb2JhbCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYnVpbHRpbi5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNp
emUoKSkpOworKyAgICBUVmFyaWFibGUgKnJlcGxhY2VtZW50VmFyID0gbmV3IFRWYXJpYWJsZSgm
c3ltYm9sVGFibGUsIGZsaXBwZWRWYXJpYWJsZU5hbWUucmF3TmFtZSgpLCB0eXBlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGlwcGVkVmFyaWFibGVO
YW1lLnN5bWJvbFR5cGUoKSk7CisrICAgIERlY2xhcmVHbG9iYWxWYXJpYWJsZSgmcm9vdCwgcmVw
bGFjZW1lbnRWYXIpOworKyAgICBUSW50ZXJtU3ltYm9sICpmbGlwcGVkQnVpbHRpblJlZiA9IG5l
dyBUSW50ZXJtU3ltYm9sKHJlcGxhY2VtZW50VmFyKTsKKysKKysgICAgLy8gVXNlIHRoaXMgbmV3
IHZhcmlhYmxlIGluc3RlYWQgb2YgJ2J1aWx0aW4nIGV2ZXJ5d2hlcmUuCisrICAgIGlmICghUmVw
bGFjZVZhcmlhYmxlKCZjb21waWxlciwgJnJvb3QsICZidWlsdGluLCByZXBsYWNlbWVudFZhcikp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICAvLyBDcmVh
dGUgdGhlIGV4cHJlc3Npb24gIihidWlsdGluLnh5ICogZnJhZ1JvdGF0aW9uKSIKKysgICAgVElu
dGVybVR5cGVkICpyb3RhdGVkWFk7CisrICAgIGlmIChmcmFnUm90YXRpb24pCisrICAgIHsKKysg
ICAgICAgIHJvdGF0ZWRYWSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE1hdHJpeFRpbWVzVmVjdG9y
LCBmcmFnUm90YXRpb24tPmRlZXBDb3B5KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBidWlsdGluWFktPmRlZXBDb3B5KCkpOworKyAgICB9CisrICAgIGVsc2UKKysg
ICAgeworKyAgICAgICAgLy8gTm8gcm90YXRpb24gYXBwbGllZCwgdXNlIG9yaWdpbmFsIHZhcmlh
YmxlLgorKyAgICAgICAgcm90YXRlZFhZID0gYnVpbHRpblhZLT5kZWVwQ29weSgpOworKyAgICB9
CisrCisrICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGJ1aWx0aW4ueHkgLSBwaXZvdCkg
KiBmbGlwWFkgKyBwaXZvdAorKyAgICBUSW50ZXJtQmluYXJ5ICpyZW1vdmVQaXZvdCA9IG5ldyBU
SW50ZXJtQmluYXJ5KEVPcFN1Yiwgcm90YXRlZFhZLCAmcGl2b3QpOworKyAgICBUSW50ZXJtQmlu
YXJ5ICppbnZlcnNlWFkgICA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcE11bCwgcmVtb3ZlUGl2b3Qs
ICZmbGlwWFkpOworKyAgICBUSW50ZXJtQmluYXJ5ICpwbHVzUGl2b3QgICA9IG5ldyBUSW50ZXJt
QmluYXJ5KEVPcEFkZCwgaW52ZXJzZVhZLCBwaXZvdC5kZWVwQ29weSgpKTsKKysKKysgICAgLy8g
Q3JlYXRlIHRoZSBjb3JyZWN0ZWQgdmFyaWFibGUgYW5kIGNvcHkgdGhlIHZhbHVlIG9mIHRoZSBv
cmlnaW5hbCBidWlsdGluLgorKyAgICBUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlID0gbmV3IFRJ
bnRlcm1TZXF1ZW5jZSgpOworKyAgICBzZXF1ZW5jZS0+cHVzaF9iYWNrKGJ1aWx0aW5SZWYtPmRl
ZXBDb3B5KCkpOworKyAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUgPSBUSW50ZXJtQWdn
cmVnYXRlOjpDcmVhdGVDb25zdHJ1Y3RvcihidWlsdGluLmdldFR5cGUoKSwgc2VxdWVuY2UpOwor
KyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICAgPSBuZXcgVEludGVybUJpbmFyeShFT3BJ
bml0aWFsaXplLCBmbGlwcGVkQnVpbHRpblJlZiwgYWdncmVnYXRlKTsKKysKKysgICAgLy8gQ3Jl
YXRlIGFuIGFzc2lnbm1lbnQgdG8gdGhlIHJlcGxhY2VkIHZhcmlhYmxlJ3MgLnh5LgorKyAgICBU
SW50ZXJtU3dpenpsZSAqY29ycmVjdGVkWFkgPQorKyAgICAgICAgbmV3IFRJbnRlcm1Td2l6emxl
KGZsaXBwZWRCdWlsdGluUmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0WFkpOworKyAgICBU
SW50ZXJtQmluYXJ5ICphc3NpZ25Ub1kgPSBuZXcgVEludGVybUJpbmFyeShFT3BBc3NpZ24sIGNv
cnJlY3RlZFhZLCBwbHVzUGl2b3QpOworKworKyAgICAvLyBBZGQgdGhpcyBhc3NpZ21lbnQgYXQg
dGhlIGJlZ2lubmluZyBvZiB0aGUgbWFpbiBmdW5jdGlvbgorKyAgICB7CisrICAgICAgICBUSW50
ZXJtQmluYXJ5ICpub2Rlc1tdID0ge2Fzc2lnbm1lbnQsIGFzc2lnblRvWX07CisrICAgICAgICBp
bnNlcnRTZXF1ZW5jZS5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UuYmVnaW4oKSwgc3RkOjpiZWdpbihu
b2RlcyksIHN0ZDo6ZW5kKG5vZGVzKSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbXBpbGVy
LnZhbGlkYXRlQVNUKCZyb290KTsKKyt9CisrCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIEluc2Vy
dEZyYWdDb29yZENvcnJlY3Rpb24oVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaENvbXBpbGVPcHRpb25zIGNvbXBp
bGVPcHRpb25zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmluc2VydFNlcXVlbmNlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJs
ZSAmZHJpdmVyVW5pZm9ybXMpCisreworKyAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAg
PSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0ZsaXBYWSk7CisrICAg
IFRJbnRlcm1CaW5hcnkgJnBpdm90ICAgICAgICA9ICpDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRy
aXZlclVuaWZvcm1zLCBrSGFsZlJlbmRlckFyZWEpOworKyAgICBUSW50ZXJtQmluYXJ5ICpmcmFn
Um90YXRpb24gPSAoY29tcGlsZU9wdGlvbnMgJiBTSF9BRERfUFJFX1JPVEFUSU9OKQorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVm
KGRyaXZlclVuaWZvcm1zLCBrRnJhZ1JvdGF0aW9uKQorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBudWxscHRyOworKyAgICByZXR1cm4gUm90YXRlQW5kRmxpcEJ1aWx0
aW5WYXJpYWJsZShjb21waWxlciwgcm9vdCwgaW5zZXJ0U2VxdWVuY2UsIGZsaXBYWSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xf
RnJhZ0Nvb3JkKCksIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGl2b3QsIGZyYWdSb3RhdGlvbik7CisrfQorKworK1RJbnRl
cm1CaW5hcnkgKkdldERyaXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihjb25z
dCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgVEludGVybUJpbmFyeSAqZGVw
dGhSYW5nZSA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtEZXB0aFJh
bmdlKTsKKysKKysgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KEVPcEluZGV4RGlyZWN0U3Ry
dWN0LCBkZXB0aFJhbmdlLCBDcmVhdGVJbmRleE5vZGUoMykpOworK30KKysKKyt2b2lkIERlY2xh
cmVSaWdodEJlZm9yZU1haW4oVEludGVybUJsb2NrICZyb290LCBjb25zdCBUVmFyaWFibGUgJnZh
cikKKyt7CisrICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFpbkluZGV4KCZyb290KSwg
e25ldyBUSW50ZXJtRGVjbGFyYXRpb257JnZhcn19KTsKKyt9CisrCisrdm9pZCBBZGRGcmFnQ29s
b3JEZWNsYXJhdGlvbihUSW50ZXJtQmxvY2sgJnJvb3QsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFi
bGUpCisreworKyAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmluZE1haW5JbmRleCgmcm9vdCks
CisrICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2V7bmV3IFRJbnRlcm1E
ZWNsYXJhdGlvbntCdWlsdEluVmFyaWFibGU6OmdsX0ZyYWdDb2xvcigpfX0pOworK30KKysKKyt2
b2lkIEFkZEZyYWdEZXB0aERlY2xhcmF0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJvbFRh
YmxlICZzeW1ib2xUYWJsZSkKKyt7CisrICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFp
bkluZGV4KCZyb290KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZXtuZXcgVEludGVybURlY2xhcmF0aW9ue0J1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0RlcHRoKCl9
fSk7CisrfQorKworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBBZGRGcmFnRGF0YURlY2xhcmF0aW9u
KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCkKKyt7CisrICAgIFRTeW1i
b2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKyAgICBj
b25zdCBpbnQgbWF4RHJhd0J1ZmZlcnMgID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCkuTWF4RHJh
d0J1ZmZlcnM7CisrICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGUgICAgPSBuZXcgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEpOworKyAgICBzdGQ6OnZlY3Rvcjxj
b25zdCBUVmFyaWFibGUgKj4gZ2xGcmFnRGF0YVNsb3RzOworKyAgICBUSW50ZXJtU2VxdWVuY2Ug
ZGVjbGFyZUdMRnJhZ2RhdGFTZXF1ZW5jZTsKKysKKysgICAgLy8gQ3JlYXRlIGdsX0ZyYWdEYXRh
XzAsMSwyLDMKKysgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhEcmF3QnVmZmVyczsgaSsrKQor
KyAgICB7CisrICAgICAgICBJbW11dGFibGVTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoc3RybGVuKCJn
bF9GcmFnRGF0YV8iKSArIDIpOworKyAgICAgICAgYnVpbGRlciA8PCAiZ2xfRnJhZ0RhdGFfIjsK
KysgICAgICAgIGJ1aWxkZXIuYXBwZW5kRGVjaW1hbChpKTsKKysgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAqZ2xGcmFnRGF0YSA9CisrICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFi
bGUsIGJ1aWxkZXIsIGdsX0ZyYWdEYXRhVHlwZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgIFRFeHRlbnNpb246OlVOREVGSU5FRCk7CisrICAg
ICAgICBnbEZyYWdEYXRhU2xvdHMucHVzaF9iYWNrKGdsRnJhZ0RhdGEpOworKyAgICAgICAgZGVj
bGFyZUdMRnJhZ2RhdGFTZXF1ZW5jZS5wdXNoX2JhY2sobmV3IFRJbnRlcm1EZWNsYXJhdGlvbntn
bEZyYWdEYXRhfSk7CisrICAgIH0KKysgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWlu
SW5kZXgoJnJvb3QpLCBkZWNsYXJlR0xGcmFnZGF0YVNlcXVlbmNlKTsKKysKKysgICAgLy8gQ3Jl
YXRlIGFuIGludGVybmFsIGdsX0ZyYWdEYXRhIGFycmF5IHR5cGUsIGNvbXBhdGlibGUgd2l0aCBp
bmRleGluZyBzeW50YXguCisrICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGVBcnJheSA9IG5ldyBU
VHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsIDQsIDEpOworKyAgICBnbF9GcmFn
RGF0YVR5cGVBcnJheS0+bWFrZUFycmF5KG1heERyYXdCdWZmZXJzKTsKKysgICAgY29uc3QgVFZh
cmlhYmxlICpnbEZyYWdEYXRhR2xvYmFsID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIElt
bXV0YWJsZVN0cmluZygiZ2xfRnJhZ0RhdGEiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9GcmFnRGF0YVR5cGVBcnJheSwgU3ltYm9s
VHlwZTo6QnVpbHRJbik7CisrCisrICAgIERlY2xhcmVHbG9iYWxWYXJpYWJsZSgmcm9vdCwgZ2xG
cmFnRGF0YUdsb2JhbCk7CisrICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wgKm9yaWdpbmFsR0xGcmFn
RGF0YSA9IEZpbmRTeW1ib2xOb2RlKCZyb290LCBJbW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRh
IikpOworKyAgICBBU1NFUlQob3JpZ2luYWxHTEZyYWdEYXRhKTsKKysKKysgICAgLy8gUmVwbGFj
ZSBnbF9GcmFnRGF0YSgpIHdpdGggb3VyIGdsb2JhbGx5IGRlZmluZWQgZnJhZ2RhdGEKKysgICAg
aWYgKCFSZXBsYWNlVmFyaWFibGUoJmNvbXBpbGVyLCAmcm9vdCwgJihvcmlnaW5hbEdMRnJhZ0Rh
dGEtPnZhcmlhYmxlKCkpLCBnbEZyYWdEYXRhR2xvYmFsKSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIC8vIEFzc2lnbiBlYWNoIGFycmF5IGF0dHJpYnV0
ZSB0byBhbiBvdXRwdXQKKysgICAgVEludGVybUJsb2NrICppbnNlcnRTZXF1ZW5jZSA9IG5ldyBU
SW50ZXJtQmxvY2soKTsKKysgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhEcmF3QnVmZmVyczsg
aSsrKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKmdsRnJhZ0RhdGFTbG90ICAgICAg
ICAgPSBuZXcgVEludGVybVN5bWJvbChnbEZyYWdEYXRhU2xvdHNbaV0pOworKyAgICAgICAgVElu
dGVybVR5cGVkICpnbEZyYWdEYXRhR2xvYmFsU3ltYm9sID0gbmV3IFRJbnRlcm1TeW1ib2woZ2xG
cmFnRGF0YUdsb2JhbCk7CisrICAgICAgICBhdXRvICZhY2Nlc3MgICAgICAgICAgICAgICAgICAg
ICAgICAgPSBBY2Nlc3NJbmRleCgqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCwgaSk7CisrICAgICAg
ICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ID0KKysgICAgICAgICAgICBuZXcgVEludGVybUJp
bmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgZ2xGcmFnRGF0YVNsb3QsICZhY2Nlc3MpOworKyAg
ICAgICAgaW5zZXJ0U2VxdWVuY2UtPmFwcGVuZFN0YXRlbWVudChhc3NpZ25tZW50KTsKKysgICAg
fQorKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcigmY29tcGlsZXIsICZyb290LCBpbnNl
cnRTZXF1ZW5jZSwgJnN5bWJvbFRhYmxlKTsKKyt9CisrCisrQU5HTEVfTk9fRElTQ0FSRCBib29s
IEVtdWxhdGVJbnN0YW5jZUlEKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlm
b3JtcykKKyt7CisrICAgIFRJbnRlcm1CaW5hcnkgKmVtdUluc3RhbmNlSUQgPQorKyAgICAgICAg
Q3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0VtdUluc3RhbmNlSURGaWVs
ZC5yYXdOYW1lKCkuZGF0YSgpKTsKKysgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlEID0g
QnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisrICAgIHJldHVybiBSZXBsYWNl
VmFyaWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgaW5zdGFuY2VJRCwgZW11SW5zdGFu
Y2VJRCk7CisrfQorKworKy8vIFVubGlrZSBWdWxrYW4gaGF2aW5nIGF1dG8gdmlld3BvcnQgZmxp
cHBpbmcgZXh0ZW5zaW9uLCBpbiBNZXRhbCB3ZSBoYXZlIHRvIGZsaXAgZ2xfUG9zaXRpb24ueQor
Ky8vIG1hbnVhbGx5LgorKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIGZsaXBwaW5nIHRoZSBn
bF9Qb3NpdGlvbi55IHVzaW5nIHRoaXMgZXhwcmVzc2lvbjoKKysvLyBnbF9Qb3NpdGlvbi55ID0g
Z2xfUG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCisrQU5HTEVfTk9fRElTQ0FSRCBib29s
IEFwcGVuZFZlcnRleFNoYWRlclBvc2l0aW9uWUNvcnJlY3Rpb25Ub01haW4oVENvbXBpbGVyICZj
b21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVN3aXp6bGUgJm5lZ0ZsaXBZKQorK3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9
IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9z
aXRpb24gID0gQnVpbHRJblZhcmlhYmxlOjpnbF9Qb3NpdGlvbigpOworKyAgICBUSW50ZXJtU3lt
Ym9sICpwb3NpdGlvblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHBvc2l0aW9uKTsKKysKKysgICAg
VFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRZOworKyAgICBzd2l6emxlT2Zmc2V0WS5wdXNoX2Jh
Y2soMSk7CisrICAgIFRJbnRlcm1Td2l6emxlICpwb3NpdGlvblkgPSBuZXcgVEludGVybVN3aXp6
bGUocG9zaXRpb25SZWYsIHN3aXp6bGVPZmZzZXRZKTsKKysKKysgICAgLy8gQ3JlYXRlIHRoZSBl
eHByZXNzaW9uICJnbF9Qb3NpdGlvbi55ICogbmVnRmxpcFkiCisrICAgIFRJbnRlcm1CaW5hcnkg
KmludmVyc2VZID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wTXVsLCBwb3NpdGlvblktPmRlZXBDb3B5
KCksICZuZWdGbGlwWSk7CisrCisrICAgIC8vIENyZWF0ZSB0aGUgYXNzaWdubWVudCAiZ2xfUG9z
aXRpb24ueSA9IGdsX1Bvc2l0aW9uLnkgKiBuZWdWaWV3cG9ydFNjYWxlWQorKyAgICBUSW50ZXJt
VHlwZWQgKnBvc2l0aW9uWUxIUyA9IHBvc2l0aW9uWS0+ZGVlcENvcHkoKTsKKysgICAgVEludGVy
bUJpbmFyeSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFz
c2lnbiwgcG9zaXRpb25ZTEhTLCBpbnZlcnNlWSk7CisrCisrICAgIC8vIEFwcGVuZCB0aGUgYXNz
aWdubWVudCBhcyBhIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisrICAgIHJl
dHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZz
eW1ib2xUYWJsZSk7CisrfQorKworK30gIC8vIG5hbWVzcGFjZQorKworK1RyYW5zbGF0b3JNZXRh
bERpcmVjdDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0KHNoOjpHTGVudW0gdHlwZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlclNwZWMgc3BlYywK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaFNoYWRlck91
dHB1dCBvdXRwdXQpCisrICAgIDogVENvbXBpbGVyKHR5cGUsIHNwZWMsIG91dHB1dCkKKyt7fQor
KworKy8vIHN0YXRpYworK2NvbnN0IGNoYXIgKlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6R2V0Q292
ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpCisreworKyAgICByZXR1cm4gY29uc3RhbnRfbmFt
ZXM6OmtDb3ZlcmFnZU1hc2tFbmFibGVkLnJhd05hbWUoKS5kYXRhKCk7CisrfQorKworKy8vIHN0
YXRpYworK2NvbnN0IGNoYXIgKlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6R2V0UmFzdGVyaXphdGlv
bkRpc2NhcmRFbmFibGVkQ29uc3ROYW1lKCkKKyt7CisrICAgIHJldHVybiBjb25zdGFudF9uYW1l
czo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCkuZGF0YSgpOworK30KKysK
KytBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsRGlyZWN0OjppbnNlcnRSYXN0
ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCkKKyt7CisrICAgIFRTeW1i
b2xUYWJsZSAqc3ltYm9sVGFibGUgPSAmZ2V0U3ltYm9sVGFibGUoKTsKKysKKysgICAgVFR5cGUg
KmJvb2xUeXBlID0gbmV3IFRUeXBlKEVidEJvb2wpOworKyAgICBib29sVHlwZS0+c2V0UXVhbGlm
aWVyKEV2cUNvbnN0KTsKKysgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9CisrICAg
ICAgICBuZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxlLCBjb25zdGFudF9uYW1lczo6a1Jhc3Rlcml6
YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCksIGJvb2xUeXBlLAorKyAgICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5zeW1i
b2xUeXBlKCkpOworKworKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9IEJ1aWx0SW5W
YXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKysgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYg
PSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisrCisrICAgIC8vIENyZWF0ZSB2ZWM0KC0z
LCAtMywgLTMsIDEpOgorKyAgICBhdXRvIHZlYzRUeXBlICAgICAgICAgICAgID0gbmV3IFRUeXBl
KEVidEZsb2F0LCA0KTsKKysgICAgVEludGVybVNlcXVlbmNlICp2ZWM0QXJncyA9IG5ldyBUSW50
ZXJtU2VxdWVuY2UoKTsKKysgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUo
LTMuMGYpKTsKKysgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYp
KTsKKysgICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKysg
ICAgdmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoMS4wZikpOworKyAgICBUSW50
ZXJtQWdncmVnYXRlICpjb25zdFZhckNvbnN0cnVjdG9yID0KKysgICAgICAgIFRJbnRlcm1BZ2dy
ZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKCp2ZWM0VHlwZSwgdmVjNEFyZ3MpOworKworKyAgICAv
LyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uID0gdmVjNCgtMywgLTMsIC0zLCAx
KSIKKysgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCA9CisrICAgICAgICBuZXcgVEludGVy
bUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25SZWYtPmRlZXBDb3B5KCksIGNv
bnN0VmFyQ29uc3RydWN0b3IpOworKworKyAgICBUSW50ZXJtQmxvY2sgKmRpc2NhcmRCbG9jayA9
IG5ldyBUSW50ZXJtQmxvY2s7CisrICAgIGRpc2NhcmRCbG9jay0+YXBwZW5kU3RhdGVtZW50KGFz
c2lnbm1lbnQpOworKworKyAgICBUSW50ZXJtU3ltYm9sICpkaXNjYXJkRW5hYmxlZCA9IG5ldyBU
SW50ZXJtU3ltYm9sKGRpc2NhcmRFbmFibGVkVmFyKTsKKysgICAgVEludGVybUlmRWxzZSAqaWZD
YWxsICAgICAgICAgPSBuZXcgVEludGVybUlmRWxzZShkaXNjYXJkRW5hYmxlZCwgZGlzY2FyZEJs
b2NrLCBudWxscHRyKTsKKysKKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywg
JnJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOworK30KKysKKysvLyBNZXRhbCBuZWVkcyB0byBp
bnZlcnNlIHRoZSBkZXB0aCBpZiBkZXB0aFJhbmdlIGlzIGlzIHJldmVyc2Ugb3JkZXIsIGkuZS4g
ZGVwdGggbmVhciA+IGRlcHRoIGZhcgorKy8vIFRoaXMgaXMgYWNoaWV2ZWQgYnkgbXVsdGlwbHkg
dGhlIGRlcHRoIHZhbHVlIHdpdGggc2NhbGUgdmFsdWUgc3RvcmVkIGluCisrLy8gZHJpdmVyIHVu
aWZvcm0ncyBkZXB0aFJhbmdlLnJlc2VydmVkCisrYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6
OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlvbihUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKQorK3sKKysgICAgY29uc3QgVFZhcmlhYmxl
ICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCk7CisrICAgIFRJbnRl
cm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworKwor
KyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFogPSB7Mn07CisrICAgIFRJbnRlcm1Td2l6
emxlICpwb3NpdGlvblogICA9IG5ldyBUSW50ZXJtU3dpenpsZShwb3NpdGlvblJlZiwgc3dpenps
ZU9mZnNldFopOworKworKyAgICBUSW50ZXJtQmluYXJ5ICp2aWV3cG9ydFpTY2FsZSA9IEdldERy
aXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihkcml2ZXJVbmlmb3Jtcyk7Cisr
CisrICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9zaXRpb24ueiAqIGRlcHRoUmFu
Z2UucmVzZXJ2ZWQiLgorKyAgICBUSW50ZXJtQmluYXJ5ICp6U2NhbGUgPSBuZXcgVEludGVybUJp
bmFyeShFT3BNdWwsIHBvc2l0aW9uWi0+ZGVlcENvcHkoKSwgdmlld3BvcnRaU2NhbGUpOworKwor
KyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlv
bi56ICogZGVwdGhSYW5nZS5yZXNlcnZlZCIKKysgICAgVEludGVybVR5cGVkICpwb3NpdGlvblpM
SFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisrICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1l
bnQgID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWkxI
UywgelNjYWxlKTsKKysKKysgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgJnJv
b3QsIGFzc2lnbm1lbnQsICZnZXRTeW1ib2xUYWJsZSgpKTsKKyt9CisrCisrdm9pZCBUcmFuc2xh
dG9yTWV0YWxEaXJlY3Q6OmNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1GaWVs
ZHMoCisrICAgIHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiAmZmllbGRzT3V0KQorK3sKKysgICAgLy8g
QWRkIGNvdmVyYWdlIG1hc2sgdG8gZHJpdmVyIHVuaWZvcm0uIE1ldGFsIGRvZXNuJ3QgaGF2ZSBi
dWlsdC1pbiBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUKKysgICAgLy8gZXF1aXZhbGVudCBmdW5j
dGlvbmFsaXR5LCBuZWVkcyB0byBlbXVsYXRlIGl0IHVzaW5nIGZyYWdtZW50IHNoYWRlcidzIFtb
c2FtcGxlX21hc2tdXSBvdXRwdXQKKysgICAgLy8gdmFsdWUuCisrICAgIFRGaWVsZCAqY292ZXJh
Z2VNYXNrRmllbGQgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRVSW50KSwga0NvdmVyYWdlTWFz
a0ZpZWxkLnJhd05hbWUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga05vU291cmNlTG9jLCBrQ292ZXJhZ2VNYXNrRmllbGQuc3ltYm9sVHlwZSgpKTsKKysg
ICAgZmllbGRzT3V0LnB1c2hfYmFjayhjb3ZlcmFnZU1hc2tGaWVsZCk7CisrCisrICAgIGlmICht
RW11bGF0ZWRJbnN0YW5jZUlEKQorKyAgICB7CisrICAgICAgICBURmllbGQgKmVtdUluc3RhbmNl
SURGaWVsZCA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmll
bGQucmF3TmFtZSgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtOb1NvdXJjZUxvYywga0VtdUluc3RhbmNlSURGaWVsZC5zeW1ib2xUeXBlKCkpOwor
KyAgICAgICAgZmllbGRzT3V0LnB1c2hfYmFjayhlbXVJbnN0YW5jZUlERmllbGQpOworKyAgICB9
CisrfQorKworK1RJbnRlcm1Td2l6emxlICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmdldERyaXZl
clVuaWZvcm1OZWdGbGlwWVJlZigKKysgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jt
cykgY29uc3QKKyt7CisrICAgIC8vIENyZWF0ZSBhIHN3aXp6bGUgdG8gIm5lZ0ZsaXBYWS55Igor
KyAgICBUSW50ZXJtQmluYXJ5ICpuZWdGbGlwWFkgICAgPSBDcmVhdGVEcml2ZXJVbmlmb3JtUmVm
KGRyaXZlclVuaWZvcm1zLCBrTmVnRmxpcFhZKTsKKysgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVP
ZmZzZXRZID0gezF9OworKyAgICBUSW50ZXJtU3dpenpsZSAqbmVnRmxpcFkgICAgPSBuZXcgVElu
dGVybVN3aXp6bGUobmVnRmxpcFhZLCBzd2l6emxlT2Zmc2V0WSk7CisrICAgIHJldHVybiBuZWdG
bGlwWTsKKyt9CisrCisrc3RhdGljIHN0ZDo6c2V0PEltbXV0YWJsZVN0cmluZz4gR2V0TXNsS2V5
d29yZHMoKQorK3sKKysgICAgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5nPiBrZXl3b3JkczsKKysK
KysgICAga2V5d29yZHMuZW1wbGFjZSgiYWxpZ25hcyIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJhbGlnbm9mIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImFzX3R5cGUiKTsKKysgICAga2V5
d29yZHMuZW1wbGFjZSgiYXV0byIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjYXRjaCIpOwor
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjaGFyIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImNs
YXNzIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImNvbnN0X2Nhc3QiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgiY29uc3RhbnQiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiY29uc3RleHBy
Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImRlY2x0eXBlIik7CisrICAgIGtleXdvcmRzLmVt
cGxhY2UoImRlbGV0ZSIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJkZXZpY2UiKTsKKysgICAg
a2V5d29yZHMuZW1wbGFjZSgiZHluYW1pY19jYXN0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2Uo
ImVudW0iKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiZXhwbGljaXQiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgiZXhwb3J0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImV4dGVybiIpOwor
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJmcmFnbWVudCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJmcmllbmQiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiZ290byIpOworKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJoYWxmIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImlubGluZSIpOworKyAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJpbnQxNl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoImlu
dDMyX3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgiaW50NjRfdCIpOworKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJpbnQ4X3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgia2VybmVsIik7Cisr
ICAgIGtleXdvcmRzLmVtcGxhY2UoImxvbmciKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgibWFp
bjAiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgibWV0YWwiKTsKKysgICAga2V5d29yZHMuZW1w
bGFjZSgibXV0YWJsZSIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJuYW1lc3BhY2UiKTsKKysg
ICAga2V5d29yZHMuZW1wbGFjZSgibmV3Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm5vZXhj
ZXB0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm51bGxwdHJfdCIpOworKyAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJudWxscHRyIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm9wZXJhdG9yIik7
CisrICAgIGtleXdvcmRzLmVtcGxhY2UoIm92ZXJyaWRlIik7CisrICAgIGtleXdvcmRzLmVtcGxh
Y2UoInByaXZhdGUiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgicHJvdGVjdGVkIik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInB0cmRpZmZfdCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJw
dWJsaWMiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgicmF5X2RhdGEiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgicmVnaXN0ZXIiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgic2hvcnQiKTsK
KysgICAga2V5d29yZHMuZW1wbGFjZSgic2lnbmVkIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2Uo
InNpemVfdCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzaXplb2YiKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgic3RhZ2VfaW4iKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgic3RhdGljX2Fz
c2VydCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWNfY2FzdCIpOworKyAgICBrZXl3
b3Jkcy5lbXBsYWNlKCJzdGF0aWMiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGVtcGxhdGUi
KTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhpcyIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJ0aHJlYWRfbG9jYWwiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkIik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInRocmVhZGdyb3VwX2ltYWdlYmxvY2siKTsKKysgICAga2V5d29y
ZHMuZW1wbGFjZSgidGhyZWFkZ3JvdXAiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidGhyb3ci
KTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidHJ5Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2Uo
InR5cGVkZWYiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidHlwZWlkIik7CisrICAgIGtleXdv
cmRzLmVtcGxhY2UoInR5cGVuYW1lIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVjaGFyIik7
CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQxNl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxh
Y2UoInVpbnQzMl90Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQ2NF90Iik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInVpbnQ4X3QiKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidW5p
b24iKTsKKysgICAga2V5d29yZHMuZW1wbGFjZSgidW5zaWduZWQiKTsKKysgICAga2V5d29yZHMu
ZW1wbGFjZSgidXNob3J0Iik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInVzaW5nIik7CisrICAg
IGtleXdvcmRzLmVtcGxhY2UoInZlcnRleCIpOworKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2aXJ0
dWFsIik7CisrICAgIGtleXdvcmRzLmVtcGxhY2UoInZvbGF0aWxlIik7CisrICAgIGtleXdvcmRz
LmVtcGxhY2UoIndjaGFyX3QiKTsKKysKKysgICAgcmV0dXJuIGtleXdvcmRzOworK30KKysKKyti
b29sIFRyYW5zbGF0b3JNZXRhbERpcmVjdDo6dHJhbnNsYXRlSW1wbChUSW50ZXJtQmxvY2sgJnJv
b3QsIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpCisreworKyAgICBUU3ltYm9sVGFi
bGUgJnN5bWJvbFRhYmxlID0gZ2V0U3ltYm9sVGFibGUoKTsKKysgICAgSWRHZW4gaWRHZW47Cisr
ICAgIFByb2dyYW1QcmVsdWRlQ29uZmlnIHBwYzsKKysKKysgICAgaWYgKCFXcmFwTWFpbigqdGhp
cywgaWRHZW4sIHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5rKCkub2JqOworKyNpZiAw
CisrICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKysgICAgewor
KyAgICAgICAgaWYgKCFTaGFkZXJCdWlsdGluc1dvcmthcm91bmQodGhpcywgJnJvb3QsICZzeW1i
b2xUYWJsZSwgY29tcGlsZU9wdGlvbnMpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfQorKyNlbmRpZgorKworKyAgICAvLyBTdHJpcCBh
bnkgaW5hY3RpdmUgdmFyaWFibGVzIGZyb20gdGhlIHByb2dyYW0uCisrICAgIGlmICghUmVtb3Zl
SW5hY3RpdmVJbnRlcmZhY2VWYXJpYWJsZXModGhpcywgJnJvb3QsIGdldEF0dHJpYnV0ZXMoKSwg
Z2V0SW5wdXRWYXJ5aW5ncygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldE91dHB1dFZhcmlhYmxlcygpLCBnZXRVbmlmb3JtcygpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEludGVyZmFjZUJsb2NrcygpKSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIC8vIFdyaXRlIG91
dCBkZWZhdWx0IHVuaWZvcm1zIGludG8gYSB1bmlmb3JtIGJsb2NrIGFzc2lnbmVkIHRvIGEgc3Bl
Y2lmaWMgc2V0L2JpbmRpbmcuCisrICAgIGludCBkZWZhdWx0VW5pZm9ybUNvdW50ICAgICAgICAg
ICA9IDA7CisrICAgIGludCBhZ2dyZWdhdGVUeXBlc1VzZWRGb3JVbmlmb3JtcyA9IDA7CisrICAg
IGludCBhdG9taWNDb3VudGVyQ291bnQgICAgICAgICAgICA9IDA7CisrICAgIGZvciAoY29uc3Qg
YXV0byAmdW5pZm9ybSA6IGdldFVuaWZvcm1zKCkpCisrICAgIHsKKysgICAgICAgIGlmICghdW5p
Zm9ybS5pc0J1aWx0SW4oKSAmJiB1bmlmb3JtLmFjdGl2ZSAmJiAhZ2w6OklzT3BhcXVlVHlwZSh1
bmlmb3JtLnR5cGUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgICsrZGVmYXVsdFVuaWZvcm1D
b3VudDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICh1bmlmb3JtLmlzU3RydWN0KCkgfHwg
dW5pZm9ybS5pc0FycmF5T2ZBcnJheXMoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICArK2Fn
Z3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYg
KHVuaWZvcm0uYWN0aXZlICYmIGdsOjpJc0F0b21pY0NvdW50ZXJUeXBlKHVuaWZvcm0udHlwZSkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgKythdG9taWNDb3VudGVyQ291bnQ7CisrICAgICAg
ICB9CisrICAgIH0KKysKKysgICAgaWYgKGFnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zID4g
MCkKKysgICAgeworKyAgICAgICAgaWYgKCFOYW1lRW1iZWRkZWRTdHJ1Y3RVbmlmb3Jtcyh0aGlz
LCAmcm9vdCwgJnN5bWJvbFRhYmxlKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBib29sIHJld3JpdGVTdHJ1Y3RTYW1wbGVy
c1Jlc3VsdDsKKysgICAgICAgIGludCByZW1vdmVkVW5pZm9ybXNDb3VudDsKKysKKysgICAgICAg
IGlmIChjb21waWxlT3B0aW9ucyAmIFNIX1VTRV9PTERfUkVXUklURV9TVFJVQ1RfU0FNUExFUlMp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0K
KysgICAgICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzT2xkKHRoaXMsICZyb290LCAm
c3ltYm9sVGFibGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVz
dWx0ID0KKysgICAgICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzKHRoaXMsICZyb290
LCAmc3ltYm9sVGFibGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisrICAgICAgICB9CisrCisr
ICAgICAgICBpZiAoIXJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgICAgICBkZWZhdWx0VW5p
Zm9ybUNvdW50IC09IHJlbW92ZWRVbmlmb3Jtc0NvdW50OworKworKyNpZiAwCisrICAgICAgICAv
LyBXZSBtdXN0IGRlY2xhcmUgdGhlIHN0cnVjdCB0eXBlcyBiZWZvcmUgdXNpbmcgdGhlbS4KKysg
ICAgICAgIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciBzdHJ1Y3RUeXBlc1RyYXZlcnNlcihv
dXRwdXRNU0wpOworKyAgICAgICAgcm9vdC0+dHJhdmVyc2UoJnN0cnVjdFR5cGVzVHJhdmVyc2Vy
KTsKKysgICAgICAgIGlmICghc3RydWN0VHlwZXNUcmF2ZXJzZXIudXBkYXRlVHJlZSh0aGlzLCBy
b290KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9
CisrI2VuZGlmCisrICAgIH0KKysKKysgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU1VTEFU
RV9TRUFNRlVMX0NVQkVfTUFQX1NBTVBMSU5HKQorKyAgICB7CisrICAgICAgICBpZiAoIVJld3Jp
dGVDdWJlTWFwU2FtcGxlcnNBczJEQXJyYXkodGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTaGFkZXJUeXBl
KCkgPT0gR0xfRlJBR01FTlRfU0hBREVSKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0KKysKKysjaWYgMAorKyAgICAvLyBXcml0ZSBk
ZWZhdWx0IHVuaWZvcm0gYmxvY2sKKysgICAgaWYgKGRlZmF1bHRVbmlmb3JtQ291bnQgPiAwKQor
KyAgICB7CisrICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlID0gZ2w6OkZyb21HTGVu
dW08Z2w6OlNoYWRlclR5cGU+KGdldFNoYWRlclR5cGUoKSk7CisrICAgICAgICBzaW5rIDw8ICJc
bnN0cnVjdCAiIDw8IGtEZWZhdWx0VW5pZm9ybU5hbWVzW3NoYWRlclR5cGVdIDw8ICJcbntcbiI7
CisrICAgICAgICBEZWNsYXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyIGRlZmF1bHRUcmF2ZXJz
ZXIoJnNpbmssIGdldEhhc2hGdW5jdGlvbigpLCAmZ2V0TmFtZU1hcCgpKTsKKysgICAgICAgIHJv
b3QtPnRyYXZlcnNlKCZkZWZhdWx0VHJhdmVyc2VyKTsKKysgICAgICAgIGlmICghZGVmYXVsdFRy
YXZlcnNlci51cGRhdGVUcmVlKHRoaXMsIHJvb3QpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHNpbmsgPDwgIn07XG4iOwor
KyAgICB9CisrI2VuZGlmCisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMg
PSAqWyZdKCkgeworKyAgICAgICAgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NI
QURFUikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gQWRkQ29tcHV0ZURyaXZlclVu
aWZvcm1zVG9TaGFkZXIocm9vdCwgc3ltYm9sVGFibGUpOworKyAgICAgICAgfQorKyAgICAgICAg
ZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiBhZGRp
dGlvbmFsRmllbGRzOworKyAgICAgICAgICAgIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZl
clVuaWZvcm1GaWVsZHMoYWRkaXRpb25hbEZpZWxkcyk7CisrICAgICAgICAgICAgcmV0dXJuIEFk
ZEdyYXBoaWNzRHJpdmVyVW5pZm9ybXNUb1NoYWRlcihyb290LCBzeW1ib2xUYWJsZSwgYWRkaXRp
b25hbEZpZWxkcyk7CisrICAgICAgICB9CisrICAgIH0oKTsKKysKKysgICAgaWYgKGF0b21pY0Nv
dW50ZXJDb3VudCA+IDApCisrICAgIHsKKysgICAgICAgIC8vIEFOR0xFVW5pZm9ybXMuYWNiQnVm
ZmVyT2Zmc2V0cworKyAgICAgICAgY29uc3QgVEludGVybUJpbmFyeSAqYWNiQnVmZmVyT2Zmc2V0
cyA9CisrICAgICAgICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywg
a0FjYkJ1ZmZlck9mZnNldHMpOworKworKyAgICAgICAgaWYgKCFSZXdyaXRlQXRvbWljQ291bnRl
cnModGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwgYWNiQnVmZmVyT2Zmc2V0cykpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9CisrICAg
IGVsc2UgaWYgKGdldFNoYWRlclZlcnNpb24oKSA+PSAzMTApCisrICAgIHsKKysgICAgICAgIC8v
IFZ1bGthbiBkb2Vzbid0IHN1cHBvcnQgQXRvbWljIFN0b3JhZ2UgYXMgYSBTdG9yYWdlIENsYXNz
LCBidXQgd2UndmUgc2VlbgorKyAgICAgICAgLy8gY2FzZXMgd2hlcmUgYnVpbHRpbnMgYXJlIHVz
aW5nIGl0IGV2ZW4gd2l0aCBubyBhY3RpdmUgYXRvbWljIGNvdW50ZXJzLgorKyAgICAgICAgLy8g
VGhpcyBwYXNzIHNpbXBseSByZW1vdmVzIHRob3NlIGJ1aWx0aW5zIGluIHRoYXQgc2NlbmFyaW8u
CisrICAgICAgICBpZiAoIVJlbW92ZUF0b21pY0NvdW50ZXJCdWlsdGlucyh0aGlzLCAmcm9vdCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAg
ICB9CisrCisrICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgIT0gR0xfQ09NUFVURV9TSEFERVIpCisr
ICAgIHsKKysgICAgICAgIGlmICghUmVwbGFjZUdMRGVwdGhSYW5nZVdpdGhEcml2ZXJVbmlmb3Jt
KCp0aGlzLCByb290LCBkcml2ZXJVbmlmb3JtcykpCisrICAgICAgICB7CisrICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyNpZiAwCisrICAgICAgICAvLyBBZGQgc3Bl
Y2lhbGl6YXRpb24gY29uc3RhbnQgZGVjbGFyYXRpb25zLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2Yg
dGhlIHNwZWNpYWxpemF0aW9uCisrICAgICAgICAvLyBjb25zdGFudCBpcyBpcnJlbGV2YW50LCBh
cyBpdCB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIHRoZSBwaXBlbGluZS4KKysgICAgICAgIGlm
IChjb21waWxlT3B0aW9ucyAmIFNIX0FERF9CUkVTRU5IQU1fTElORV9SQVNURVJfRU1VTEFUSU9O
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNpbmsgPDwgImxheW91dChjb25zdGFudF9pZD0i
CisrICAgICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odms6OlNwZWNpYWxp
emF0aW9uQ29uc3RhbnRJZDo6TGluZVJhc3RlckVtdWxhdGlvbikKKysgICAgICAgICAgICAgICAg
IDw8ICIpIGNvbnN0IGJvb2wgIiA8PCBrTGluZVJhc3RlckVtdWxhdGlvblNwZWNDb25zdFZhck5h
bWUgPDwgIiA9IGZhbHNlO1xuXG4iOworKyAgICAgICAgfQorKyNlbmRpZgorKyAgICB9CisrCisr
ICAgIHsKKysgICAgICAgIGJvb2wgdXNlc0luc3RhbmNlSWQgPSBmYWxzZTsKKysgICAgICAgIGZv
ciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJnZhciA6IG1BdHRyaWJ1dGVzKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGlmICh2YXIuaXNCdWlsdEluKCkpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBpZiAodmFyLm5hbWUgPT0gImdsX0luc3RhbmNlSUQiKQorKyAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICB1c2VzSW5zdGFuY2VJZCA9IHRydWU7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBp
ZiAodXNlc0luc3RhbmNlSWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgcm9vdC5pbnNlcnRD
aGlsZE5vZGVzKAorKyAgICAgICAgICAgICAgICBGaW5kTWFpbkluZGV4KCZyb290KSwKKysgICAg
ICAgICAgICAgICAgVEludGVybVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJ
blZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCl9fSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysg
ICAgLy8gRGVjbGFyZSBnbF9GcmFnQ29sb3IgYW5kIGdsRnJhZ0RhdGEgYXMgd2ViZ2xfRnJhZ0Nv
bG9yIGFuZCB3ZWJnbF9GcmFnRGF0YQorKyAgICAvLyBpZiBpdCdzIGNvcmUgcHJvZmlsZSBzaGFk
ZXJzIGFuZCB0aGV5IGFyZSB1c2VkLgorKyAgICBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZS
QUdNRU5UX1NIQURFUikKKysgICAgeworKyAgICAgICAgYm9vbCB1c2VzUG9pbnRDb29yZCAgPSBm
YWxzZTsKKysgICAgICAgIGJvb2wgdXNlc0ZyYWdDb29yZCAgID0gZmFsc2U7CisrICAgICAgICBi
b29sIHVzZXNGcm9udEZhY2luZyA9IGZhbHNlOworKyAgICAgICAgZm9yIChjb25zdCBTaGFkZXJW
YXJpYWJsZSAmaW5wdXRWYXJ5aW5nIDogbUlucHV0VmFyeWluZ3MpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgaWYgKGlucHV0VmFyeWluZy5pc0J1aWx0SW4oKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIp
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHVzZXNQb2ludENvb3Jk
ID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChp
bnB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIikKKysgICAgICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb29yZCA9IHRydWU7CisrICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRWYXJ5aW5nLm5hbWUgPT0gImds
X0Zyb250RmFjaW5nIikKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg
dXNlc0Zyb250RmFjaW5nID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IH0KKysgICAgICAgIH0KKysKKysgICAgICAgIGJvb2wgdXNlc0ZyYWdDb2xvciA9IGZhbHNlOwor
KyAgICAgICAgYm9vbCB1c2VzRnJhZ0RhdGEgID0gZmFsc2U7CisrICAgICAgICBib29sIHVzZXNG
cmFnRGVwdGggPSBmYWxzZTsKKysgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJm91
dHB1dFZhcnlpbmcgOiBtT3V0cHV0VmFyaWFibGVzKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGlmIChvdXRwdXRWYXJ5aW5nLmlzQnVpbHRJbigpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgaWYgKG91dHB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb2xvciA9IHRydWU7
CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFy
eWluZy5uYW1lID09ICJnbF9GcmFnRGF0YSIpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgIHVzZXNGcmFnRGF0YSA9IHRydWU7CisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnRGVw
dGgiKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICB1c2VzRnJhZ0Rl
cHRoID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAg
IH0KKysKKysgICAgICAgIGlmICh1c2VzRnJhZ0NvbG9yICYmIHVzZXNGcmFnRGF0YSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAg
ICBpZiAodXNlc0ZyYWdDb2xvcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBBZGRGcmFnQ29s
b3JEZWNsYXJhdGlvbihyb290LCBzeW1ib2xUYWJsZSk7CisrICAgICAgICB9CisrCisrICAgICAg
ICBpZiAodXNlc0ZyYWdEYXRhKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICghQWRkRnJh
Z0RhdGFEZWNsYXJhdGlvbigqdGhpcywgcm9vdCkpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAg
ICAgICAgaWYgKHVzZXNGcmFnRGVwdGgpCisrICAgICAgICB7CisrICAgICAgICAgICAgQWRkRnJh
Z0RlcHRoRGVjbGFyYXRpb24ocm9vdCwgc3ltYm9sVGFibGUpOworKyAgICAgICAgfQorKworKyNp
ZiAwCisrICAgICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BRERfQlJFU0VOSEFNX0xJTkVf
UkFTVEVSX0VNVUxBVElPTikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIUFkZEJyZXNl
bmhhbUVtdWxhdGlvbkZTKHRoaXMsIGNvbXBpbGVPcHRpb25zLCBzaW5rLCByb290LCAmc3ltYm9s
VGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJV
bmlmb3JtcywgdXNlc0ZyYWdDb29yZCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyNlbmRpZgorKwor
KyAgICAgICAgYm9vbCB1c2VQcmVSb3RhdGlvbiA9IGNvbXBpbGVPcHRpb25zICYgU0hfQUREX1BS
RV9ST1RBVElPTjsKKysKKysgICAgICAgIGlmICh1c2VzUG9pbnRDb29yZCkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3JlYXRlRHJpdmVy
VW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga05lZ0ZsaXBYWSk7CisrICAgICAgICAgICAgVElu
dGVybUNvbnN0YW50VW5pb24gJnBpdm90ID0gKkNyZWF0ZUZsb2F0Tm9kZSgwLjVmKTsKKysgICAg
ICAgICAgICBUSW50ZXJtQmluYXJ5ICpmcmFnUm90YXRpb24gPQorKyAgICAgICAgICAgICAgICB1
c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtG
cmFnUm90YXRpb24pIDogbnVsbHB0cjsKKysgICAgICAgICAgICBpZiAoIVJvdGF0ZUFuZEZsaXBC
dWlsdGluVmFyaWFibGUoKnRoaXMsIHJvb3QsICpHZXRNYWluU2VxdWVuY2Uocm9vdCksIGZsaXBY
WSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1aWx0
SW5WYXJpYWJsZTo6Z2xfUG9pbnRDb29yZCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrRmxpcHBlZFBvaW50Q29vcmROYW1lLCBwaXZvdCwgZnJhZ1Jv
dGF0aW9uKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgICAgICAgICB9CisrICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290
LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2ludENvb3JkKCkpOworKyAgICAgICAgfQorKworKyAg
ICAgICAgaWYgKHVzZXNGcmFnQ29vcmQpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCFJ
bnNlcnRGcmFnQ29vcmRDb3JyZWN0aW9uKCp0aGlzLCBjb21waWxlT3B0aW9ucywgcm9vdCwgKkdl
dE1haW5TZXF1ZW5jZShyb290KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZHJpdmVyVW5pZm9ybXMpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBEZWNsYXJlUmln
aHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX0ZyYWdDb29yZCgpKTsKKysg
ICAgICAgIH0KKysKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmbGlw
WFkgPSBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRmxpcFhZKTsKKysg
ICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmcmFnUm90YXRpb24gPQorKyAgICAgICAgICAgICAg
ICB1c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMs
IGtGcmFnUm90YXRpb24pIDogbnVsbHB0cjsKKysgICAgICAgICAgICBpZiAoIVJld3JpdGVEZmR5
KHRoaXMsICZyb290LCBzeW1ib2xUYWJsZSwgZ2V0U2hhZGVyVmVyc2lvbigpLCBmbGlwWFksIGZy
YWdSb3RhdGlvbikpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVzZXNGcm9u
dEZhY2luZykKKysgICAgICAgIHsKKysgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWlu
KHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX0Zyb250RmFjaW5nKCkpOworKyAgICAgICAgfQor
KworKyAgICAgICAgRW1pdEVhcmx5RnJhZ21lbnRUZXN0c0dMU0woKnRoaXMsIHNpbmspOworKyAg
ICB9CisrICAgIGVsc2UgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQor
KyAgICB7CisrICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFy
aWFibGU6OmdsX1Bvc2l0aW9uKCkpOworKworKyAgICAgICAgaWYgKEZpbmRTeW1ib2xOb2RlKCZy
b290LCBCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50U2l6ZSgpLT5uYW1lKCkpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIERlY2xhcmVSaWdodEJlZm9yZU1haW4ocm9vdCwgKkJ1aWx0SW5WYXJp
YWJsZTo6Z2xfUG9pbnRTaXplKCkpOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKEZpbmRT
eW1ib2xOb2RlKCZyb290LCBCdWlsdEluVmFyaWFibGU6OmdsX1ZlcnRleEluZGV4KCktPm5hbWUo
KSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKCFSZXBsYWNlVmFyaWFibGUodGhpcywg
JnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6Z2xfVmVydGV4SW5kZXgoKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAma2dsX1ZlcnRleEluZGV4TWV0YWwpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKHJvb3QsIGtnbF9WZXJ0ZXhJbmRleE1ldGFs
KTsKKysgICAgICAgIH0KKysKKysjaWYgMAorKyAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYg
U0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RFUl9FTVVMQVRJT04pCisrICAgICAgICB7CisrICAg
ICAgICAgICAgaWYgKCFBZGRCcmVzZW5oYW1FbXVsYXRpb25WUyh0aGlzLCByb290LCAmc3ltYm9s
VGFibGUsIGRyaXZlclVuaWZvcm1zKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICAv
LyBBZGQgYSBtYWNybyB0byBkZWNsYXJlIHRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJzLgorKyAg
ICAgICAgc2luayA8PCAiQEAgWEZCLURFQ0wgQEBcblxuIjsKKysjZW5kaWYKKysKKysgICAgICAg
IC8vIEFwcGVuZCBhIG1hY3JvIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgc3Vic3RpdHV0aW9uIHBy
aW9yIHRvIG1vZGlmeWluZyBkZXB0aC4KKysgICAgICAgIGlmICghQXBwZW5kVmVydGV4U2hhZGVy
VHJhbnNmb3JtRmVlZGJhY2tPdXRwdXRUb01haW4oKnRoaXMsIHJvb3QpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8vIFNl
YXJjaCBmb3IgdGhlIGdsX0NsaXBEaXN0YW5jZSB1c2FnZSwgaWYgaXRzIHVzZWQsIHdlIG5lZWQg
dG8gZG8gc29tZSByZXBsYWNlbWVudHMuCisrICAgICAgICBib29sIHVzZUNsaXBEaXN0YW5jZSA9
IGZhbHNlOworKyAgICAgICAgZm9yIChjb25zdCBTaGFkZXJWYXJpYWJsZSAmb3V0cHV0VmFyeWlu
ZyA6IG1PdXRwdXRWYXJ5aW5ncykKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob3V0cHV0
VmFyeWluZy5uYW1lID09ICJnbF9DbGlwRGlzdGFuY2UiKQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgdXNlQ2xpcERpc3RhbmNlID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHVzZUNsaXBE
aXN0YW5jZSAmJiAhUmVwbGFjZUNsaXBEaXN0YW5jZUFzc2lnbm1lbnRzKAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJp
dmVyVW5pZm9ybXMsIGtDbGlwRGlzdGFuY2VzRW5hYmxlZCkpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICghdHJhbnNm
b3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBp
ZiAoIUFwcGVuZFZlcnRleFNoYWRlckRlcHRoQ29ycmVjdGlvblRvTWFpbigqdGhpcywgcm9vdCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKwor
KyAgICAgICAgaWYgKChjb21waWxlT3B0aW9ucyAmIFNIX0FERF9QUkVfUk9UQVRJT04pICE9IDAg
JiYKKysgICAgICAgICAgICAhQXBwZW5kUHJlUm90YXRpb24oKnRoaXMsIHJvb3QsIGRyaXZlclVu
aWZvcm1zKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAg
ICB9CisrICAgIH0KKysgICAgZWxzZSBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0dFT01FVFJZ
X1NIQURFUikKKysgICAgeworKyAgICAgICAgV3JpdGVHZW9tZXRyeVNoYWRlckxheW91dFF1YWxp
ZmllcnMoCisrICAgICAgICAgICAgc2luaywgZ2V0R2VvbWV0cnlTaGFkZXJJbnB1dFByaW1pdGl2
ZVR5cGUoKSwgZ2V0R2VvbWV0cnlTaGFkZXJJbnZvY2F0aW9ucygpLAorKyAgICAgICAgICAgIGdl
dEdlb21ldHJ5U2hhZGVyT3V0cHV0UHJpbWl0aXZlVHlwZSgpLCBnZXRHZW9tZXRyeVNoYWRlck1h
eFZlcnRpY2VzKCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgQVNTRVJU
KGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NIQURFUik7CisrICAgICAgICBFbWl0V29y
a0dyb3VwU2l6ZUdMU0woKnRoaXMsIHNpbmspOworKyAgICB9CisrCisrICAgIGlmIChnZXRTaGFk
ZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKysgICAgeworKyAgICAgICAgYXV0byAmbmVn
RmxpcFkgPSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKGRyaXZlclVuaWZvcm1zKTsKKysK
KysgICAgICAgIGlmIChtRW11bGF0ZWRJbnN0YW5jZUlEKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGlmICghRW11bGF0ZUluc3RhbmNlSUQoKnRoaXMsIHJvb3QsIGRyaXZlclVuaWZvcm1zKSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAg
ICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIUFwcGVuZFZlcnRleFNoYWRlclBv
c2l0aW9uWUNvcnJlY3Rpb25Ub01haW4oKnRoaXMsIHJvb3QsIG5lZ0ZsaXBZKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBp
ZiAoIWluc2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMocm9vdCkpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlm
ICghdmFsaWRhdGVBU1QoJnJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysKKysgICAgaWYgKCFSZXdyaXRlS2V5d29yZHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBH
ZXRNc2xLZXl3b3JkcygpKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9
CisrCisrICAgIGlmICghUmVkdWNlSW50ZXJmYWNlQmxvY2tzKCp0aGlzLCByb290KSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmICghU2VwYXJhdGVD
b21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICAvLyBUaGlzIGlzIHRoZSBsYXJnZXN0IHNp
emUgcmVxdWlyZWQgdG8gcGFzcyBhbGwgdGhlIHRlc3RzIGluCisrICAgIC8vIChkRVFQLUdMRVMz
LmZ1bmN0aW9uYWwuc2hhZGVycy5sYXJnZV9jb25zdGFudF9hcnJheXMpCisrICAgIC8vIFRoaXMg
dmFsdWUgY291bGQgaW4gcHJpbmNpcGxlIGJlIHNtYWxsZXIuCisrICAgIGNvbnN0IHNpemVfdCBo
b2lzdFRocmVzaG9sZFNpemUgPSAyNTY7CisrICAgIGlmICghSG9pc3RDb25zdGFudHMoKnRoaXMs
IHJvb3QsIGlkR2VuLCBob2lzdFRocmVzaG9sZFNpemUpKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgSW52YXJpYW50cyBpbnZhcmlhbnRzOworKyAgICBp
ZiAoIVJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscygqdGhpcywgcm9vdCwgaW52YXJpYW50cykp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBTeW1ib2xF
bnYgc3ltYm9sRW52KCp0aGlzLCByb290KTsKKysKKysgICAgaWYgKCFBZGRFeHBsaWNpdFR5cGVD
YXN0cygqdGhpcywgcm9vdCwgc3ltYm9sRW52KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrCisrICAgIFBpcGVsaW5lU3RydWN0cyBwaXBlbGluZVN0cnVjdHM7Cisr
ICAgIGlmICghUmV3cml0ZVBpcGVsaW5lcygqdGhpcywgcm9vdCwgaWRHZW4sIGRyaXZlclVuaWZv
cm1zLCBzeW1ib2xFbnYsIGludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBw
aXBlbGluZVN0cnVjdHMpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgaWYgKCFTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoKnRoaXMsIHN5bWJvbEVu
diwgaWRHZW4sIHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysKKysgICAgaWYgKCFSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisrICAg
IHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBpZiAoIVJld3JpdGVV
bmFkZHJlc3NhYmxlUmVmZXJlbmNlcygqdGhpcywgcm9vdCwgc3ltYm9sRW52KSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmICghUmV3cml0ZU91dEFy
Z3MoKnRoaXMsIHJvb3QsIHN5bWJvbEVudikpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxz
ZTsKKysgICAgfQorKworKyAgICBpZiAoIVRvcG9zb3J0U3RydWN0cygqdGhpcywgc3ltYm9sRW52
LCByb290LCBwcGMpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK
KysgICAgaWYgKCFFbWl0TWV0YWwoKnRoaXMsIHJvb3QsIGlkR2VuLCBwaXBlbGluZVN0cnVjdHMs
IGludmFyaWFudHMsIHN5bWJvbEVudiwgcHBjKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrCisrICAgIEFTU0VSVCh2YWxpZGF0ZUFTVCgmcm9vdCkpOworKworKyAg
ICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5z
bGF0ZShUSW50ZXJtQmxvY2sgKnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VEaWFnbm9zdGljcyAqcGVyZkRpYWdu
b3N0aWNzKQorK3sKKysgICAgaWYgKCFyb290KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5rKCku
b2JqOworKworKyAgICBib29sIHByZWNpc2lvbkVtdWxhdGlvbiA9IGZhbHNlOworKyAgICBpZiAo
IWVtdWxhdGVQcmVjaXNpb25JZk5lZWRlZChyb290LCBzaW5rLCAmcHJlY2lzaW9uRW11bGF0aW9u
LCBTSF9HTFNMX1ZVTEtBTl9PVVRQVVQpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKysKKysjaWYgMAorKyAgICBib29sIGVuYWJsZVByZWNpc2lvbiA9ICgoY29tcGls
ZU9wdGlvbnMgJiBTSF9JR05PUkVfUFJFQ0lTSU9OX1FVQUxJRklFUlMpID09IDApOworKworKyAg
ICBUT3V0cHV0TVNMIG91dHB1dE1TTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVn
eSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAmZ2V0U3ltYm9sVGFibGUoKSwgZ2V0U2hhZGVyVHlwZSgpLCBnZXRTaGFkZXJWZXJz
aW9uKCksIGdldE91dHB1dFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lz
aW9uRW11bGF0aW9uLCBlbmFibGVQcmVjaXNpb24sIGNvbXBpbGVPcHRpb25zKTsKKysjZW5kaWYK
KysKKysgICAgaWYgKCF0cmFuc2xhdGVJbXBsKCpyb290LCBjb21waWxlT3B0aW9ucykpCisrICAg
IHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyNpZiAwCisrICAgIC8vIFdy
aXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgorKyAgICByb290LT50cmF2ZXJzZShvdXRwdXRNU0wpOwor
KyNlbmRpZgorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrYm9vbCBUcmFuc2xhdG9yTWV0YWxE
aXJlY3Q6OnNob3VsZEZsYXR0ZW5QcmFnbWFTdGRnbEludmFyaWFudEFsbCgpCisreworKyAgICAv
LyBOb3QgbmVjY2VzYXJ5IGZvciBNU0wgdHJhbnNmb3JtYXRpb24uCisrICAgIHJldHVybiBmYWxz
ZTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmggYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4
IDAwMDAwMDAuLmVmY2IzMDYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oCitAQCAtMCwwICsxLDEzMiBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysK
KytuYW1lc3BhY2Ugc2gKKyt7CisrY2xhc3MgVE91dHB1dE1TTDsKKysKKyt0eXBlZGVmIHN0ZDo6
dW5vcmRlcmVkX21hcDxzaXplX3QsIHN0ZDo6c3RyaW5nPiBvcmlnaW5hbE5hbWVzTWFwOworK3R5
cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+IHNhbXBsZXJCaW5k
aW5nTWFwOworK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzaXplX3Q+
IHRleHR1cmVCaW5kaW5nTWFwOworK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3Ry
aW5nLCBzaXplX3Q+IHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwOworKworK2NsYXNzIFRyYW5zbGF0
b3JNZXRhbFJlZmxlY3Rpb24KKyt7CisrICBwdWJsaWM6CisrICAgIFRyYW5zbGF0b3JNZXRhbFJl
ZmxlY3Rpb24oKSB7fQorKyAgICB+VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHt9CisrCisr
ICAgIHZvaWQgYWRkT3JpZ2luYWxOYW1lKGNvbnN0IHNpemVfdCBpZCwgY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUpCisrICAgIHsKKysgICAgICAgIG9yaWdpbmFsTmFtZXMuaW5zZXJ0KHtpZCwgbmFt
ZX0pOworKyAgICB9CisrICAgIHZvaWQgYWRkU2FtcGxlckJpbmRpbmcoY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUsIHNpemVfdCBzYW1wbGVyQmluZGluZykKKysgICAgeworKyAgICAgICAgc2FtcGxl
ckJpbmRpbmdzLmluc2VydCh7bmFtZSwgc2FtcGxlckJpbmRpbmd9KTsKKysgICAgfQorKyAgICB2
b2lkIGFkZFRleHR1cmVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3QgdGV4
dHVyZUJpbmRpbmcpCisrICAgIHsKKysgICAgICAgIHRleHR1cmVCaW5kaW5ncy5pbnNlcnQoe25h
bWUsIHRleHR1cmVCaW5kaW5nfSk7CisrICAgIH0KKysgICAgdm9pZCBhZGRVbmlmb3JtQnVmZmVy
QmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgc2l6ZV90IHVuaWZvcm1CdWZmZXJCaW5k
aW5nKQorKyAgICB7CisrICAgICAgICB1bmlmb3JtQnVmZmVyQmluZGluZ3MuaW5zZXJ0KHtuYW1l
LCB1bmlmb3JtQnVmZmVyQmluZGluZ30pOworKyAgICB9CisrICAgIHN0ZDo6c3RyaW5nIGdldE9y
aWdpbmFsTmFtZShjb25zdCBzaXplX3QgaWQpIHsgcmV0dXJuIG9yaWdpbmFsTmFtZXMuYXQoaWQp
OyB9CisrICAgIHNhbXBsZXJCaW5kaW5nTWFwIGdldFNhbXBsZXJCaW5kaW5ncygpIGNvbnN0IHsg
cmV0dXJuIHNhbXBsZXJCaW5kaW5nczsgfQorKyAgICB0ZXh0dXJlQmluZGluZ01hcCBnZXRUZXh0
dXJlQmluZGluZ3MoKSBjb25zdCB7IHJldHVybiB0ZXh0dXJlQmluZGluZ3M7IH0KKysgICAgdW5p
Zm9ybUJ1ZmZlckJpbmRpbmdNYXAgZ2V0VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QgeyBy
ZXR1cm4gdW5pZm9ybUJ1ZmZlckJpbmRpbmdzOyB9CisrICAgIHNpemVfdCBnZXRTYW1wbGVyQmlu
ZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKysgICAgeworKyAgICAgICAgYXV0
byBpdCA9IHNhbXBsZXJCaW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAgICAgaWYgKGl0ICE9IHNh
bXBsZXJCaW5kaW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gaXQt
PnNlY29uZDsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsKKysgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworKyAgICB9CisrICAgIHNpemVf
dCBnZXRUZXh0dXJlQmluZGluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKysgICAg
eworKyAgICAgICAgYXV0byBpdCA9IHRleHR1cmVCaW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAg
ICAgaWYgKGl0ICE9IHRleHR1cmVCaW5kaW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gaXQtPnNlY29uZDsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsK
KysgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworKyAg
ICB9CisrICAgIHNpemVfdCBnZXRVbmlmb3JtQnVmZmVyQmluZGluZyhjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSkgY29uc3QKKysgICAgeworKyAgICAgICAgYXV0byBpdCA9IHVuaWZvcm1CdWZmZXJC
aW5kaW5ncy5maW5kKG5hbWUpOworKyAgICAgICAgaWYgKGl0ICE9IHVuaWZvcm1CdWZmZXJCaW5k
aW5ncy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsK
KysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVCgwKTsKKysgICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworKyAgICB9CisrICAgIHZvaWQgcmVzZXQoKQor
KyAgICB7CisrICAgICAgICBvcmlnaW5hbE5hbWVzLmNsZWFyKCk7CisrICAgICAgICBzYW1wbGVy
QmluZGluZ3MuY2xlYXIoKTsKKysgICAgICAgIHRleHR1cmVCaW5kaW5ncy5jbGVhcigpOworKyAg
ICAgICAgdW5pZm9ybUJ1ZmZlckJpbmRpbmdzLmNsZWFyKCk7CisrICAgIH0KKysKKysgIHByaXZh
dGU6CisrICAgIG9yaWdpbmFsTmFtZXNNYXAgb3JpZ2luYWxOYW1lczsKKysgICAgc2FtcGxlckJp
bmRpbmdNYXAgc2FtcGxlckJpbmRpbmdzOworKyAgICB0ZXh0dXJlQmluZGluZ01hcCB0ZXh0dXJl
QmluZGluZ3M7CisrICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwIHVuaWZvcm1CdWZmZXJCaW5k
aW5nczsKKyt9OworKworK2NsYXNzIFRyYW5zbGF0b3JNZXRhbERpcmVjdCA6IHB1YmxpYyBUQ29t
cGlsZXIKKyt7CisrICBwdWJsaWM6CisrICAgIFRyYW5zbGF0b3JNZXRhbERpcmVjdChzaDo6R0xl
bnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOworKwor
KyNpZmRlZiBBTkdMRV9FTkFCTEVfTUVUQUwKKysgICAgVHJhbnNsYXRvck1ldGFsRGlyZWN0ICpn
ZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKysj
ZW5kaWYKKysKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJsZWRD
b25zdE5hbWUoKTsKKysgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldFJhc3Rlcml6YXRpb25EaXNj
YXJkRW5hYmxlZENvbnN0TmFtZSgpOworKworKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5zdGFu
Y2VJRChib29sIGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKysgICAgVHJhbnNsYXRv
ck1ldGFsUmVmbGVjdGlvbiAqZ2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHsgcmV0dXJu
ICZ0cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uOyB9CisrCisrICBwcm90ZWN0ZWQ6CisrICAgIGJv
b2wgdHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKKysgICAgICAgICAgICAgICAgICAgU2hD
b21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgUGVyZm9y
bWFuY2VEaWFnbm9zdGljcyAqcGVyZkRpYWdub3N0aWNzKSBvdmVycmlkZTsKKysKKysgICAgQU5H
TEVfTk9fRElTQ0FSRCBib29sIHRyYW5zbGF0ZUltcGwoVEludGVybUJsb2NrICZyb290LCBTaENv
bXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKTsKKysKKysgICAgQU5HTEVfTk9fRElTQ0FSRCBi
b29sIHNob3VsZEZsYXR0ZW5QcmFnbWFTdGRnbEludmFyaWFudEFsbCgpIG92ZXJyaWRlOworKwor
KyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9u
KFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKTsK
KysgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9n
aWMoVEludGVybUJsb2NrICZyb290KTsKKysKKysgICAgdm9pZCBjcmVhdGVBZGRpdGlvbmFsR3Jh
cGhpY3NEcml2ZXJVbmlmb3JtRmllbGRzKHN0ZDo6dmVjdG9yPFRGaWVsZCAqPiAmZmllbGRzT3V0
KTsKKysKKysgICAgQU5HTEVfTk9fRElTQ0FSRCBUSW50ZXJtU3dpenpsZSAqZ2V0RHJpdmVyVW5p
Zm9ybU5lZ0ZsaXBZUmVmKAorKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jt
cykgY29uc3Q7CisrCisrICAgIGJvb2wgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGZhbHNlOworKwor
KyAgICBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uIHRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24g
PSB7fTsKKyt9OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSF8KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBl
Q2FzdHMuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw
MDAwMDAuLjUzNDExODAKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKK0BAIC0w
LDAgKzEsOTUgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuaCIKKysjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVy
cy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1
aWxkLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworK25hbWVzcGFjZQorK3sKKysKKytj
bGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorK3sKKysgICAgU3ltYm9sRW52
ICZtU3ltYm9sRW52OworKworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNv
bXBpbGVyLCBTeW1ib2xFbnYgJnN5bWJvbEVudikKKysgICAgICAgIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisrICAgIHt9Cisr
CisrICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmNh
bGxOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgYXJnQ291bnQg
PSBjYWxsTm9kZS5nZXRDaGlsZENvdW50KCk7CisrICAgICAgICBjb25zdCBUVHlwZSAmcmV0VHlw
ZSAgPSBjYWxsTm9kZS5nZXRUeXBlKCk7CisrCisrICAgICAgICBpZiAoY2FsbE5vZGUuaXNDb25z
dHJ1Y3RvcigpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChJc1NjYWxhckJhc2ljVHlw
ZShyZXRUeXBlKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChhcmdDb3Vu
dCA9PSAxKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKysgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRUeXBlIGFyZ1R5cGUgPSBhcmcuZ2V0VHlwZSgpOworKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGFyZ1R5cGUuaXNWZWN0b3IoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29lcmNlU2ltcGxlKHJldFR5cGUsIFN1YlZlY3Rv
cihhcmcsIDAsIDEpKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmlzVmVjdG9y
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYXJnQ291bnQgPT0gMSkK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZh
cmcgICA9IEdldEFyZyhjYWxsTm9kZSwgMCk7CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSBhcmdUeXBlID0gYXJnLmdldFR5cGUoKTsKKysgICAgICAgICAgICAgICAgICAgIGlmIChh
cmdUeXBlLmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENvZXJjZVNpbXBsZShyZXRUeXBlLCBTdWJWZWN0b3IoYXJnLCAw
LCByZXRUeXBlLmdldE5vbWluYWxTaXplKCkpKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGFyZ0NvdW50OyArK2kpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCAmYXJnID0gR2V0QXJnKGNhbGxOb2RlLCBpKTsKKysgICAgICAgICAgICAg
ICAgICAgIFNldEFyZyhjYWxsTm9kZSwgaSwgQ29lcmNlU2ltcGxlKHJldFR5cGUuZ2V0QmFzaWNU
eXBlKCksIGFyZykpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGVsc2UgaWYgKHJldFR5cGUuaXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIGlmIChhcmdDb3VudCA9PSAxKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAw
KTsKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlIGFyZ1R5cGUgPSBhcmcuZ2V0VHlw
ZSgpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGUuaXNNYXRyaXgoKSkKKysgICAg
ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0VHlwZS5n
ZXRDb2xzKCkgIT0gYXJnVHlwZS5nZXRDb2xzKCkgfHwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0VHlwZS5nZXRSb3dzKCkgIT0gYXJnVHlwZS5nZXRSb3dzKCkpCisrICAgICAgICAg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUFy
ZyB0ZW1wbGF0ZUFyZ3NbXSA9IHtyZXRUeXBlLmdldENvbHMoKSwgcmV0VHlwZS5nZXRSb3dzKCl9
OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVN5bWJvbEVudi5jYWxsRnVu
Y3Rpb25PdmVybG9hZCgKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUoImNh
c3QiKSwgcmV0VHlwZSwgKm5ldyBUSW50ZXJtU2VxdWVuY2V7JmFyZ30sIDIsIHRlbXBsYXRlQXJn
cyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgfQor
KyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAg
ICAgcmV0dXJuIGNhbGxOb2RlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisrCisrYm9vbCBzaDo6QWRkRXhwbGljaXRUeXBlQ2FzdHMoVENvbXBpbGVyICZjb21w
aWxlciwgVEludGVybUJsb2NrICZyb290LCBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyt7CisrICAg
IFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzeW1ib2xFbnYpOworKyAgICBpZiAoIXJld3Jp
dGVyLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysgICAgcmV0dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5oIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0
VHlwZUNhc3RzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41MDM0Mjg4
CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBlQ2FzdHMuaAorQEAgLTAsMCArMSwyNCBAQAorKy8v
CisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfQURERVhQTElDSVRUWVBFQ0FTVFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0FEREVYUExJQ0lUVFlQRUNBU1RTX0hfCisrCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEFkZHMgZXhwbGljaXQgdHlw
ZSBjYXN0cyBpbnRvIHRoZSBBU1Qgd2hlcmUgY2FzdGluZyBpcyBkb25lIGltcGxpY2l0bHkuCisr
QU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEV4cGxpY2l0VHlwZUNhc3RzKFRDb21waWxlciAmY29t
cGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3ltYm9sRW52ICZzeW1ib2xFbnYpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQURERVhQ
TElDSVRUWVBFQ0FTVFNfSF8KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAKK25ldyBmaWxlIG1vZGUg
MTAwNjQ0CitpbmRleCAwMDAwMDAwLi40YmE0ZWM3CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5jcHAK
K0BAIC0wLDAgKzEsNDc0IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+
CisrI2luY2x1ZGUgPG51bWVyaWM+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisrI2luY2x1
ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7
CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytEZWNsYXJhdGlvbiBzaDo6Vmlld0Rl
Y2xhcmF0aW9uKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5vZGUpCisreworKyAgICBBU1NFUlQo
ZGVjbE5vZGUuZ2V0Q2hpbGRDb3VudCgpID09IDEpOworKyAgICBUSW50ZXJtTm9kZSAqY2hpbGRO
b2RlID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2RlKDApOworKyAgICBBU1NFUlQoY2hpbGROb2RlKTsK
KysgICAgVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZTsKKysgICAgaWYgKChzeW1ib2xOb2RlID0g
Y2hpbGROb2RlLT5nZXRBc1N5bWJvbE5vZGUoKSkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB7
KnN5bWJvbE5vZGUsIG51bGxwdHJ9OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAg
ICAgVEludGVybUJpbmFyeSAqaW5pdE5vZGUgPSBjaGlsZE5vZGUtPmdldEFzQmluYXJ5Tm9kZSgp
OworKyAgICAgICAgQVNTRVJUKGluaXROb2RlKTsKKysgICAgICAgIEFTU0VSVChpbml0Tm9kZS0+
Z2V0T3AoKSA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUpOworKyAgICAgICAgc3ltYm9sTm9k
ZSA9IGluaXROb2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworKyAgICAgICAgQVNT
RVJUKHN5bWJvbE5vZGUpOworKyAgICAgICAgcmV0dXJuIHsqc3ltYm9sTm9kZSwgaW5pdE5vZGUt
PmdldFJpZ2h0KCl9OworKyAgICB9CisrfQorKworK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0
ZVN0cnVjdFR5cGVWYXJpYWJsZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZz
dHJ1Y3R1cmUpCisreworKyAgICBhdXRvICp0eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIHRy
dWUpOworKyAgICBhdXRvICp2YXIgID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIEltbXV0
YWJsZVN0cmluZygiIiksIHR5cGUsIFN5bWJvbFR5cGU6OkVtcHR5KTsKKysgICAgcmV0dXJuICp2
YXI7CisrfQorKworK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0ZUluc3RhbmNlVmFyaWFibGUo
VFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgJm5hbWUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxp
ZmllciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5U2l6ZXMpCisreworKyAgICBhdXRvICp0
eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIGZhbHNlKTsKKysgICAgdHlwZS0+c2V0UXVhbGlm
aWVyKHF1YWxpZmllcik7CisrICAgIGlmIChhcnJheVNpemVzKQorKyAgICB7CisrICAgICAgICB0
eXBlLT5tYWtlQXJyYXlzKCphcnJheVNpemVzKTsKKysgICAgfQorKyAgICBhdXRvICp2YXIgPSBu
ZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksIHR5cGUsIG5hbWUuc3lt
Ym9sVHlwZSgpKTsKKysgICAgcmV0dXJuICp2YXI7CisrfQorKworK3N0YXRpYyB2b2lkIEFjcXVp
cmVGdW5jdGlvbkV4dHJhcyhURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAmc3JjKQor
K3sKKysgICAgaWYgKHNyYy5pc0RlZmluZWQoKSkKKysgICAgeworKyAgICAgICAgZGVzdC5zZXRE
ZWZpbmVkKCk7CisrICAgIH0KKysKKysgICAgaWYgKHNyYy5oYXNQcm90b3R5cGVEZWNsYXJhdGlv
bigpKQorKyAgICB7CisrICAgICAgICBkZXN0LnNldEhhc1Byb3RvdHlwZURlY2xhcmF0aW9uKCk7
CisrICAgIH0KKyt9CisrCisrVEludGVybVNlcXVlbmNlICZzaDo6Q2xvbmVTZXF1ZW5jZUFuZFBy
ZXBlbmQoY29uc3QgVEludGVybVNlcXVlbmNlICZzZXEsIFRJbnRlcm1Ob2RlICZub2RlKQorK3sK
KysgICAgYXV0byAqbmV3U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5jZSgpOworKyAgICBuZXdTZXEt
PnB1c2hfYmFjaygmbm9kZSk7CisrCisrICAgIGZvciAoVEludGVybU5vZGUgKm9sZE5vZGUgOiBz
ZXEpCisrICAgIHsKKysgICAgICAgIG5ld1NlcS0+cHVzaF9iYWNrKG9sZE5vZGUpOworKyAgICB9
CisrCisrICAgIHJldHVybiAqbmV3U2VxOworK30KKysKKyt2b2lkIHNoOjpBZGRQYXJhbWV0ZXJz
RnJvbShURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5jdGlvbiAmc3JjKQorK3sKKysgICAgY29u
c3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBzcmMuZ2V0UGFyYW1Db3VudCgpOworKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgY29uc3Qg
VFZhcmlhYmxlICp2YXIgPSBzcmMuZ2V0UGFyYW0oaSk7CisrICAgICAgICBkZXN0LmFkZFBhcmFt
ZXRlcih2YXIpOworKyAgICB9CisrfQorKworK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVu
Y3Rpb24oVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYykKKyt7CisrICAgIEFTU0VSVChvbGRGdW5j
LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisrCisrICAgIE5hbWUg
bmV3TmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSk7CisrCisrICAgIGF1
dG8gJm5ld0Z1bmMgPSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFt
ZSgpLCBuZXdOYW1lLnN5bWJvbFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZvbGRGdW5jLmdldFJldHVyblR5cGUoKSwgb2xkRnVuYy5pc0tub3duVG9Ob3RIYXZl
U2lkZUVmZmVjdHMoKSk7CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBv
bGRGdW5jKTsKKysgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywgb2xkRnVuYyk7CisrCisr
ICAgIHJldHVybiBuZXdGdW5jOworK30KKysKKytjb25zdCBURnVuY3Rpb24gJnNoOjpDbG9uZUZ1
bmN0aW9uQW5kUHJlcGVuZFBhcmFtKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4s
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJm5ld1BhcmFtKQorK3sKKysgICAgQVNT
RVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkIHx8Cisr
ICAgICAgICAgICBvbGRGdW5jLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVy
bmFsKTsKKysKKysgICAgTmFtZSBuZXdOYW1lID0gaWRHZW4gPyBpZEdlbi0+Y3JlYXRlTmV3TmFt
ZShOYW1lKG9sZEZ1bmMpKSA6IE5hbWUob2xkRnVuYyk7CisrCisrICAgIGF1dG8gJm5ld0Z1bmMg
PSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBuZXdOYW1l
LnN5bWJvbFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRG
dW5jLmdldFJldHVyblR5cGUoKSwgb2xkRnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMo
KSk7CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsKKysg
ICAgbmV3RnVuYy5hZGRQYXJhbWV0ZXIoJm5ld1BhcmFtKTsKKysgICAgQWRkUGFyYW1ldGVyc0Zy
b20obmV3RnVuYywgb2xkRnVuYyk7CisrCisrICAgIHJldHVybiBuZXdGdW5jOworK30KKysKKytj
b25zdCBURnVuY3Rpb24gJnNoOjpDbG9uZUZ1bmN0aW9uQW5kQXBwZW5kUGFyYW1zKFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl
Y3Rvcjxjb25zdCBUVmFyaWFibGUgKj4gJm5ld1BhcmFtcykKKyt7CisrICAgIEFTU0VSVChvbGRG
dW5jLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCB8fAorKyAgICAgICAg
ICAgb2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cisr
CisrICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShv
bGRGdW5jKSkgOiBOYW1lKG9sZEZ1bmMpOworKworKyAgICBhdXRvICZuZXdGdW5jID0gKm5ldyBU
RnVuY3Rpb24oJnN5bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xU
eXBlKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkRnVuYy5nZXRS
ZXR1cm5UeXBlKCksIG9sZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworKwor
KyAgICBBY3F1aXJlRnVuY3Rpb25FeHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisrICAgIEFkZFBh
cmFtZXRlcnNGcm9tKG5ld0Z1bmMsIG9sZEZ1bmMpOworKyAgICBmb3IgKGF1dG8gKnBhcmFtIDog
bmV3UGFyYW1zKQorKyAgICB7CisrICAgICAgICBuZXdGdW5jLmFkZFBhcmFtZXRlcihwYXJhbSk7
CisrICAgIH0KKysKKysgICAgcmV0dXJuIG5ld0Z1bmM7CisrfQorKworK2NvbnN0IFRGdW5jdGlv
biAmc2g6OkNsb25lRnVuY3Rpb25BbmRDaGFuZ2VSZXR1cm5UeXBlKFRTeW1ib2xUYWJsZSAmc3lt
Ym9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3Ry
dWN0dXJlICZuZXdSZXR1cm4pCisreworKyAgICBBU1NFUlQob2xkRnVuYy5zeW1ib2xUeXBlKCkg
PT0gU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworKworKyAgICBOYW1lIG5ld05hbWUgPSBpZEdl
biA/IGlkR2VuLT5jcmVhdGVOZXdOYW1lKE5hbWUob2xkRnVuYykpIDogTmFtZShvbGRGdW5jKTsK
KysKKysgICAgYXV0byAqbmV3UmV0dXJuVHlwZSA9IG5ldyBUVHlwZSgmbmV3UmV0dXJuLCB0cnVl
KTsKKysgICAgYXV0byAmbmV3RnVuYyAgICAgICA9ICpuZXcgVEZ1bmN0aW9uKCZzeW1ib2xUYWJs
ZSwgbmV3TmFtZS5yYXdOYW1lKCksIG5ld05hbWUuc3ltYm9sVHlwZSgpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmV0dXJuVHlwZSwgb2xkRnVuYy5pc0tub3duVG9O
b3RIYXZlU2lkZUVmZmVjdHMoKSk7CisrCisrICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdG
dW5jLCBvbGRGdW5jKTsKKysgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3RnVuYywgb2xkRnVuYyk7
CisrCisrICAgIHJldHVybiBuZXdGdW5jOworK30KKysKKytUSW50ZXJtVHlwZWQgJnNoOjpHZXRB
cmcoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSAmY2FsbCwgc2l6ZV90IGluZGV4KQorK3sKKysgICAg
QVNTRVJUKGluZGV4IDwgY2FsbC5nZXRDaGlsZENvdW50KCkpOworKyAgICBhdXRvICphcmcgPSBj
YWxsLmdldENoaWxkTm9kZShpbmRleCk7CisrICAgIEFTU0VSVChhcmcpOworKyAgICBhdXRvICp0
YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisrICAgIEFTU0VSVCh0YXJnKTsKKysgICAgcmV0dXJu
ICp0YXJnOworK30KKysKKyt2b2lkIHNoOjpTZXRBcmcoVEludGVybUFnZ3JlZ2F0ZSAmY2FsbCwg
c2l6ZV90IGluZGV4LCBUSW50ZXJtVHlwZWQgJmFyZykKKyt7CisrICAgIEFTU0VSVChpbmRleCA8
IGNhbGwuZ2V0Q2hpbGRDb3VudCgpKTsKKysgICAgKCpjYWxsLmdldFNlcXVlbmNlKCkpW2luZGV4
XSA9ICZhcmc7CisrfQorKworK2ludCBzaDo6R2V0RmllbGRJbmRleChjb25zdCBUU3RydWN0dXJl
ICZzdHJ1Y3R1cmUsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKQorK3sKKysgICAg
Y29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gc3RydWN0dXJlLmZpZWxkcygpOworKworKyAg
ICBpbnQgaSA9IDA7CisrICAgIGZvciAoVEZpZWxkICpmaWVsZCA6IGZpZWxkTGlzdCkKKysgICAg
eworKyAgICAgICAgaWYgKGZpZWxkLT5uYW1lKCkgPT0gZmllbGROYW1lKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybiBpOworKyAgICAgICAgfQorKyAgICAgICAgKytpOworKyAgICB9
CisrCisrICAgIHJldHVybiAtMTsKKyt9CisrCisrVEludGVybUJpbmFyeSAmc2g6OkFjY2Vzc0Zp
ZWxkKGNvbnN0IFRWYXJpYWJsZSAmc3RydWN0SW5zdGFuY2VWYXIsIGNvbnN0IEltbXV0YWJsZVN0
cmluZyAmZmllbGROYW1lKQorK3sKKysgICAgcmV0dXJuIEFjY2Vzc0ZpZWxkKCpuZXcgVEludGVy
bVN5bWJvbCgmc3RydWN0SW5zdGFuY2VWYXIpLCBmaWVsZE5hbWUpOworK30KKysKKytUSW50ZXJt
QmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0
YWJsZVN0cmluZyAmZmllbGROYW1lKQorK3sKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0
dXJlID0gb2JqZWN0LmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKysgICAgQVNTRVJUKHN0cnVjdHVy
ZSk7CisrCisrICAgIGNvbnN0IGludCBpbmRleCA9IEdldEZpZWxkSW5kZXgoKnN0cnVjdHVyZSwg
ZmllbGROYW1lKTsKKysgICAgQVNTRVJUKGluZGV4ID49IDApOworKyAgICByZXR1cm4gQWNjZXNz
RmllbGRCeUluZGV4KG9iamVjdCwgaW5kZXgpOworK30KKysKKytUSW50ZXJtQmluYXJ5ICZzaDo6
QWNjZXNzRmllbGRCeUluZGV4KFRJbnRlcm1UeXBlZCAmb2JqZWN0LCBpbnQgaW5kZXgpCisrewor
KyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorKyAgICBjb25zdCBUVHlwZSAmdHlw
ZSA9IG9iamVjdC5nZXRUeXBlKCk7CisrICAgIEFTU0VSVCghdHlwZS5pc0FycmF5KCkpOworKyAg
ICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworKyAgICBB
U1NFUlQoc3RydWN0dXJlKTsKKysgICAgQVNTRVJUKDAgPD0gaW5kZXgpOworKyAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBzdHJ1Y3R1cmUtPmZpZWxkcygpLnNpemUoKSk7
CisrI2VuZGlmCisrCisrICAgIHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoCisrICAgICAgICBU
T3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0U3RydWN0LCAmb2JqZWN0LAorKyAgICAgICAgbmV3IFRJ
bnRlcm1Db25zdGFudFVuaW9uKG5ldyBUQ29uc3RhbnRVbmlvbihpbmRleCksICpuZXcgVFR5cGUo
VEJhc2ljVHlwZTo6RWJ0SW50KSkpOworK30KKysKKytUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNz
SW5kZXgoVEludGVybVR5cGVkICZpbmRleGFibGVOb2RlLCBpbnQgaW5kZXgpCisreworKyNpZiBk
ZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGlu
ZGV4YWJsZU5vZGUuZ2V0VHlwZSgpOworKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkgfHwgdHlw
ZS5pc1ZlY3RvcigpIHx8IHR5cGUuaXNNYXRyaXgoKSk7CisrI2VuZGlmCisrCisrICAgIGF1dG8g
KmFjY2Vzc05vZGUgPSBuZXcgVEludGVybUJpbmFyeSgKKysgICAgICAgIFRPcGVyYXRvcjo6RU9w
SW5kZXhEaXJlY3QsICZpbmRleGFibGVOb2RlLAorKyAgICAgICAgbmV3IFRJbnRlcm1Db25zdGFu
dFVuaW9uKG5ldyBUQ29uc3RhbnRVbmlvbihpbmRleCksICpuZXcgVFR5cGUoVEJhc2ljVHlwZTo6
RWJ0SW50KSkpOworKyAgICByZXR1cm4gKmFjY2Vzc05vZGU7CisrfQorKworK1RJbnRlcm1UeXBl
ZCAmc2g6OkFjY2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCkK
Kyt7CisrICAgIGlmIChpbmRleCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIEFjY2Vzc0luZGV4
KG5vZGUsICppbmRleCk7CisrICAgIH0KKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1RJbnRl
cm1UeXBlZCAmc2g6OlN1YlZlY3RvcihUSW50ZXJtVHlwZWQgJnZlY3Rvck5vZGUsIGludCBiZWdp
biwgaW50IGVuZCkKKyt7CisrICAgIEFTU0VSVCh2ZWN0b3JOb2RlLmdldFR5cGUoKS5pc1ZlY3Rv
cigpKTsKKysgICAgQVNTRVJUKDAgPD0gYmVnaW4pOworKyAgICBBU1NFUlQoZW5kIDw9IDQpOwor
KyAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKKysgICAgaWYgKGJlZ2luID09IDAgJiYgZW5kID09
IHZlY3Rvck5vZGUuZ2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiB2ZWN0b3JOb2RlOworKyAgICB9CisrICAgIFRWZWN0b3I8aW50PiBvZmZzZXRzKHN0
YXRpY19jYXN0PHNpemVfdD4oZW5kIC0gYmVnaW4pKTsKKysgICAgc3RkOjppb3RhKG9mZnNldHMu
YmVnaW4oKSwgb2Zmc2V0cy5lbmQoKSwgYmVnaW4pOworKyAgICBhdXRvICpzd2l6emxlID0gbmV3
IFRJbnRlcm1Td2l6emxlKCZ2ZWN0b3JOb2RlLCBvZmZzZXRzKTsKKysgICAgcmV0dXJuICpzd2l6
emxlOworK30KKysKKytib29sIHNoOjpJc1NjYWxhckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlw
ZSkKKyt7CisrICAgIGlmICghdHlwZS5pc1NjYWxhcigpKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKTsK
Kyt9CisrCisrYm9vbCBzaDo6SXNWZWN0b3JCYXNpY1R5cGUoY29uc3QgVFR5cGUgJnR5cGUpCisr
eworKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICB9CisrICAgIHJldHVybiBIYXNTY2FsYXJCYXNpY1R5cGUodHlwZSk7CisrfQor
KworK2Jvb2wgc2g6Okhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpCisreworKyAg
ICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQ6CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidERvdWJsZToKKysgICAgICAgIGNhc2Ug
VEJhc2ljVHlwZTo6RWJ0SW50OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50Ogor
KyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRCb29sOgorKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKyt9CisrCisrYm9vbCBzaDo6SGFzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0
eXBlKQorK3sKKysgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlLmdldEJhc2ljVHlw
ZSgpKTsKKyt9CisrCisrc3RhdGljIHZvaWQgSW5pdFR5cGUoVFR5cGUgJnR5cGUpCisreworKyAg
ICBpZiAodHlwZS5pc0FycmF5KCkpCisrICAgIHsKKysgICAgICAgIGF1dG8gc2l6ZXMgPSB0eXBl
LmdldEFycmF5U2l6ZXMoKTsKKysgICAgICAgIHR5cGUudG9BcnJheUJhc2VUeXBlKCk7CisrICAg
ICAgICB0eXBlLm1ha2VBcnJheXMoc2l6ZXMpOworKyAgICB9CisrfQorKworK1RUeXBlICZzaDo6
Q2xvbmVUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQorK3sKKysgICAgYXV0byAmY2xvbmUgPSAqbmV3
IFRUeXBlKHR5cGUpOworKyAgICBJbml0VHlwZShjbG9uZSk7CisrICAgIHJldHVybiBjbG9uZTsK
Kyt9CisrCisrVFR5cGUgJnNoOjpJbm5lcm1vc3RUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQorK3sK
KysgICAgYXV0byAmaW5uZXIgPSAqbmV3IFRUeXBlKHR5cGUpOworKyAgICBpbm5lci50b0FycmF5
QmFzZVR5cGUoKTsKKysgICAgSW5pdFR5cGUoaW5uZXIpOworKyAgICByZXR1cm4gaW5uZXI7Cisr
fQorKworK1RUeXBlICZzaDo6RHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpCisr
eworKyAgICBBU1NFUlQobWF0cml4VHlwZS5pc01hdHJpeCgpKTsKKysgICAgQVNTRVJUKEhhc1Nj
YWxhckJhc2ljVHlwZShtYXRyaXhUeXBlKSk7CisrICAgIGNvbnN0IGNoYXIgKm1hbmdsZWROYW1l
ID0gbnVsbHB0cjsKKysKKysgICAgYXV0byAmdmVjdG9yVHlwZSA9CisrICAgICAgICAqbmV3IFRU
eXBlKG1hdHJpeFR5cGUuZ2V0QmFzaWNUeXBlKCksIG1hdHJpeFR5cGUuZ2V0UHJlY2lzaW9uKCks
IG1hdHJpeFR5cGUuZ2V0UXVhbGlmaWVyKCksCisrICAgICAgICAgICAgICAgICAgIG1hdHJpeFR5
cGUuZ2V0Um93cygpLCAxLCBtYXRyaXhUeXBlLmdldEFycmF5U2l6ZXMoKSwgbWFuZ2xlZE5hbWUp
OworKyAgICBJbml0VHlwZSh2ZWN0b3JUeXBlKTsKKysgICAgcmV0dXJuIHZlY3RvclR5cGU7Cisr
fQorKworK1RUeXBlICZzaDo6RHJvcE91dGVyRGltZW5zaW9uKGNvbnN0IFRUeXBlICZhcnJheVR5
cGUpCisreworKyAgICBBU1NFUlQoYXJyYXlUeXBlLmlzQXJyYXkoKSk7CisrICAgIGNvbnN0IGNo
YXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKysgICAgY29uc3QgYXV0byAmYXJyYXlTaXplcyAg
PSBhcnJheVR5cGUuZ2V0QXJyYXlTaXplcygpOworKworKyAgICBhdXRvICZpbm5lclR5cGUgPQor
KyAgICAgICAgKm5ldyBUVHlwZShhcnJheVR5cGUuZ2V0QmFzaWNUeXBlKCksIGFycmF5VHlwZS5n
ZXRQcmVjaXNpb24oKSwgYXJyYXlUeXBlLmdldFF1YWxpZmllcigpLAorKyAgICAgICAgICAgICAg
ICAgICBhcnJheVR5cGUuZ2V0Tm9taW5hbFNpemUoKSwgYXJyYXlUeXBlLmdldFNlY29uZGFyeVNp
emUoKSwKKysgICAgICAgICAgICAgICAgICAgYXJyYXlTaXplcy5zdWJzcGFuKDAsIGFycmF5U2l6
ZXMuc2l6ZSgpIC0gMSksIG1hbmdsZWROYW1lKTsKKysgICAgSW5pdFR5cGUoaW5uZXJUeXBlKTsK
KysgICAgcmV0dXJuIGlubmVyVHlwZTsKKyt9CisrCisrc3RhdGljIFRUeXBlICZTZXRUeXBlRGlt
c0ltcGwoY29uc3QgVFR5cGUgJnR5cGUsIGludCBwcmltYXJ5LCBpbnQgc2Vjb25kYXJ5KQorK3sK
KysgICAgQVNTRVJUKDEgPCBwcmltYXJ5ICYmIHByaW1hcnkgPD0gNCk7CisrICAgIEFTU0VSVCgx
IDw9IHNlY29uZGFyeSAmJiBzZWNvbmRhcnkgPD0gNCk7CisrICAgIEFTU0VSVChIYXNTY2FsYXJC
YXNpY1R5cGUodHlwZSkpOworKyAgICBjb25zdCBjaGFyICptYW5nbGVkTmFtZSA9IG51bGxwdHI7
CisrCisrICAgIGF1dG8gJm5ld1R5cGUgPSAqbmV3IFRUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCks
IHR5cGUuZ2V0UHJlY2lzaW9uKCksIHR5cGUuZ2V0UXVhbGlmaWVyKCksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaW1hcnksIHNlY29uZGFyeSwgdHlwZS5nZXRBcnJheVNpemVz
KCksIG1hbmdsZWROYW1lKTsKKysgICAgSW5pdFR5cGUobmV3VHlwZSk7CisrICAgIHJldHVybiBu
ZXdUeXBlOworK30KKysKKytUVHlwZSAmc2g6OlNldFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlw
ZSwgaW50IG5ld0RpbSkKKyt7CisrICAgIEFTU0VSVCh0eXBlLmlzUmFuazAoKSB8fCB0eXBlLmlz
VmVjdG9yKCkpOworKyAgICByZXR1cm4gU2V0VHlwZURpbXNJbXBsKHR5cGUsIG5ld0RpbSwgMSk7
CisrfQorKworK1RUeXBlICZzaDo6U2V0TWF0cml4Um93RGltKGNvbnN0IFRUeXBlICZtYXRyaXhU
eXBlLCBpbnQgbmV3RGltKQorK3sKKysgICAgQVNTRVJUKG1hdHJpeFR5cGUuaXNNYXRyaXgoKSk7
CisrICAgIEFTU0VSVCgxIDwgbmV3RGltICYmIG5ld0RpbSA8PSA0KTsKKysgICAgcmV0dXJuIFNl
dFR5cGVEaW1zSW1wbChtYXRyaXhUeXBlLCBtYXRyaXhUeXBlLmdldENvbHMoKSwgbmV3RGltKTsK
Kyt9CisrCisrYm9vbCBzaDo6SGFzTWF0cml4RmllbGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0
dXJlKQorK3sKKysgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxk
cygpKQorKyAgICB7CisrICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgp
OworKyAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZmFsc2U7Cisr
fQorKworK2Jvb2wgc2g6Okhhc0FycmF5RmllbGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
KQorK3sKKysgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygp
KQorKyAgICB7CisrICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOwor
KyAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiBmYWxzZTsKKyt9Cisr
CisrVEludGVybVR5cGVkICZzaDo6Q29lcmNlU2ltcGxlKFRCYXNpY1R5cGUgdG9UeXBlLCBUSW50
ZXJtVHlwZWQgJmZyb21Ob2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZyb21UeXBlID0gZnJv
bU5vZGUuZ2V0VHlwZSgpOworKworKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKHRvVHlw
ZSkpOworKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKGZyb21UeXBlKSk7CisrICAgIEFT
U0VSVCghZnJvbVR5cGUuaXNBcnJheSgpKTsKKysKKysgICAgaWYgKHRvVHlwZSAhPSBmcm9tVHlw
ZS5nZXRCYXNpY1R5cGUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuICpUSW50ZXJtQWdncmVn
YXRlOjpDcmVhdGVDb25zdHJ1Y3RvcigKKysgICAgICAgICAgICAqbmV3IFRUeXBlKHRvVHlwZSwg
ZnJvbVR5cGUuZ2V0Tm9taW5hbFNpemUoKSwgZnJvbVR5cGUuZ2V0U2Vjb25kYXJ5U2l6ZSgpKSwK
KysgICAgICAgICAgICBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworKyAgICB9Cisr
ICAgIHJldHVybiBmcm9tTm9kZTsKKyt9CisrCisrVEludGVybVR5cGVkICZzaDo6Q29lcmNlU2lt
cGxlKGNvbnN0IFRUeXBlICZ0b1R5cGUsIFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpCisreworKyAg
ICBjb25zdCBUVHlwZSAmZnJvbVR5cGUgPSBmcm9tTm9kZS5nZXRUeXBlKCk7CisrCisrICAgIEFT
U0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9UeXBlKSk7CisrICAgIEFTU0VSVChIYXNTY2FsYXJC
YXNpY1R5cGUoZnJvbVR5cGUpKTsKKysgICAgQVNTRVJUKHRvVHlwZS5nZXROb21pbmFsU2l6ZSgp
ID09IGZyb21UeXBlLmdldE5vbWluYWxTaXplKCkpOworKyAgICBBU1NFUlQodG9UeXBlLmdldFNl
Y29uZGFyeVNpemUoKSA9PSBmcm9tVHlwZS5nZXRTZWNvbmRhcnlTaXplKCkpOworKyAgICBBU1NF
UlQoIXRvVHlwZS5pc0FycmF5KCkpOworKyAgICBBU1NFUlQoIWZyb21UeXBlLmlzQXJyYXkoKSk7
CisrCisrICAgIGlmICh0b1R5cGUuZ2V0QmFzaWNUeXBlKCkgIT0gZnJvbVR5cGUuZ2V0QmFzaWNU
eXBlKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRl
Q29uc3RydWN0b3IodG9UeXBlLCBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworKyAg
ICB9CisrICAgIHJldHVybiBmcm9tTm9kZTsKKyt9CisrCisrVEludGVybVR5cGVkICZzaDo6QXNU
eXBlKFN5bWJvbEVudiAmc3ltYm9sRW52LCBjb25zdCBUVHlwZSAmdG9UeXBlLCBUSW50ZXJtVHlw
ZWQgJmZyb21Ob2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZyb21UeXBlID0gZnJvbU5vZGUu
Z2V0VHlwZSgpOworKworKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKHRvVHlwZSkpOwor
KyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBlKGZyb21UeXBlKSk7CisrICAgIEFTU0VSVCgh
dG9UeXBlLmlzQXJyYXkoKSk7CisrICAgIEFTU0VSVCghZnJvbVR5cGUuaXNBcnJheSgpKTsKKysK
KysgICAgaWYgKHRvVHlwZSA9PSBmcm9tVHlwZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZy
b21Ob2RlOworKyAgICB9CisrICAgIFRlbXBsYXRlQXJnIHRhcmcodG9UeXBlKTsKKysgICAgcmV0
dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJhc190eXBlIiwgU3ltYm9s
VHlwZTo6QnVpbHRJbiksIHRvVHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmZnJvbU5vZGV9LCAxLCAmdGFyZyk7Cisr
fQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Bc3RIZWxwZXJzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvQXN0SGVscGVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw
MC4uZDllODlmZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaAorQEAgLTAsMCArMSwxNTcgQEAKKysv
LworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KKysKKysjaW5jbHVkZSA8Y3N0cmluZz4K
KysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRH
ZW4uaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTmFtZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TeW1ib2xFbnYuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gQSBjb252
ZW5pZW5jZSB2aWV3IG9mIGEgVEludGVybURlY2xhcmF0aW9uIG5vZGUncyBjaGlsZHJlbi4KKytz
dHJ1Y3QgRGVjbGFyYXRpb24KKyt7CisrICAgIFRJbnRlcm1TeW1ib2wgJnN5bWJvbDsKKysgICAg
VEludGVybVR5cGVkICppbml0RXhwcjsgIC8vIE5vbi1udWxsIGlmZiBkZWNsYXJhdGlvbiBpcyBp
bml0aWFsaXplZC4KKyt9OworKworKy8vIFJldHVybnMgYSBgRGVjbGFyYXRpb25gIHZpZXcgb2Yg
dGhlIGdpdmVuIG5vZGUuCisrRGVjbGFyYXRpb24gVmlld0RlY2xhcmF0aW9uKFRJbnRlcm1EZWNs
YXJhdGlvbiAmZGVjbE5vZGUpOworKworKy8vIENyZWF0ZXMgYSB2YXJpYWJsZSBmb3IgYSBzdHJ1
Y3QgdHlwZS4KKytjb25zdCBUVmFyaWFibGUgJkNyZWF0ZVN0cnVjdFR5cGVWYXJpYWJsZShUU3lt
Ym9sVGFibGUgJnN5bWJvbFRhYmxlLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOworKwor
Ky8vIENyZWF0ZXMgYSB2YXJpYWJsZSBmb3IgYSBzdHJ1Y3QgaW5zdGFuY2UuCisrY29uc3QgVFZh
cmlhYmxlICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgJnN0cnVjdHVyZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTmFtZSAmbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBUUXVhbGlmaWVyOjpFdnFUZW1wb3JhcnksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVu
c2lnbmVkIGludD4gKmFycmF5U2l6ZXMgPSBudWxscHRyKTsKKysKKysvLyBUaGUgaW5wdXQgc2Vx
dWVuY2Ugc2hvdWxkIGJlIGRpc2NhcmRlZCBmcm9tIEFTVCBhZnRlciB0aGlzIGlzIGNhbGxlZC4K
KytUSW50ZXJtU2VxdWVuY2UgJkNsb25lU2VxdWVuY2VBbmRQcmVwZW5kKGNvbnN0IFRJbnRlcm1T
ZXF1ZW5jZSAmc2VxLCBUSW50ZXJtTm9kZSAmbm9kZSk7CisrCisrLy8gQXBwZW5kcyBwYXJhbWV0
ZXJzIGZyb20gYHNyY2AgZnVuY3Rpb24gdG8gYGRlc3RgIGZ1bmN0aW9uLgorK3ZvaWQgQWRkUGFy
YW1ldGVyc0Zyb20oVEZ1bmN0aW9uICZkZXN0LCBjb25zdCBURnVuY3Rpb24gJnNyYyk7CisrCisr
Ly8gQ2xvbmVzIGEgZnVuY3Rpb24uCisrY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uKFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsIElkR2VuICZpZEdlbiwgY29uc3QgVEZ1bmN0aW9uICZv
bGRGdW5jKTsKKysKKysvLyBDbG9uZXMgYSBmdW5jdGlvbiBhbmQgcHJlcGVuZHMgdGhlIHByb3Zp
ZGVkIGV4dHIgcGFyYW1ldGVyLgorKy8vIElmIGBpZEdlbmAgaXMgbnVsbCwgdGhlIG9yaWdpbmFs
IGZ1bmN0aW9uIG11c3QgYmUgZGlzY2FyZGVkIGZyb20gdGhlIEFTVC4KKytjb25zdCBURnVuY3Rp
b24gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0oVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJs
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4g
KmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmbmV3UGFyYW0pOworKworKy8vIENsb25l
cyBhIGZ1bmN0aW9uIGFuZCBhcHBlbmRzIHRoZSBwcm92aWRlZCBleHRyYSBwYXJhbWV0ZXJzLgor
Ky8vIElmIGBpZEdlbmAgaXMgbnVsbCwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG11c3QgYmUgZGlz
Y2FyZGVkIGZyb20gdGhlIEFTVC4KKytjb25zdCBURnVuY3Rpb24gJkNsb25lRnVuY3Rpb25BbmRB
cHBlbmRQYXJhbXMoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1
bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiAmbmV3UGFyYW0pOworKworKy8vIENsb25l
cyBhIGZ1bmN0aW9uIGFuZCBjaGFuZ2VzIGl0cyByZXR1cm4gdHlwZS4KKysvLyBJZiBgaWRHZW5g
IGlzIG51bGwsIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBtdXN0IGJlIGRpc2NhcmRlZCBmcm9tIHRo
ZSBBU1QuCisrY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uQW5kQ2hhbmdlUmV0dXJuVHlw
ZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2VuLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5j
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFN0cnVjdHVyZSAmbmV3UmV0dXJuKTsKKysKKysvLyBHZXRzIHRoZSBhcmd1bWVudCBvZiBh
IGZ1bmN0aW9uIGNhbGwgYXQgdGhlIGdpdmVuIGluZGV4LgorK1RJbnRlcm1UeXBlZCAmR2V0QXJn
KGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCk7CisrCisrLy8gU2V0
cyB0aGUgYXJndW1lbnQgb2YgYSBmdW5jdGlvbiBjYWxsIGF0IHRoZSBnaXZlbiBpbmRleC4KKyt2
b2lkIFNldEFyZyhUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgsIFRJbnRlcm1U
eXBlZCAmYXJnKTsKKysKKysvLyBSZXR1cm5zIHRoZSBmaWVsZCBpbmRleCB3aXRoaW4gdGhlIGdp
dmVuIHN0cnVjdCBmb3IgdGhlIGdpdmVuIGZpZWxkIG5hbWUuCisrLy8gUmV0dXJucyAtMSBpZiB0
aGUgc3RydWN0IGhhcyBubyBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgorK2ludCBHZXRGaWVs
ZEluZGV4KGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgSW1tdXRhYmxlU3RyaW5n
ICZmaWVsZE5hbWUpOworKworKy8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiB2YXJp
YWJsZSB3aXRoIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorKy8vIFRoZSB2YXJpYWJsZSBtdXN0IGJl
IGEgc3RydWN0IGluc3RhbmNlLgorK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0ZpZWxkKGNvbnN0IFRW
YXJpYWJsZSAmc3RydWN0SW5zdGFuY2VWYXIsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGRO
YW1lKTsKKysKKysvLyBBY2Nlc3NlcyBhIGZpZWxkIGZvciB0aGUgZ2l2ZW4gbm9kZSB3aXRoIHRo
ZSBnaXZlbiBmaWVsZCBuYW1lLgorKy8vIFRoZSBub2RlIG11c3QgYmUgYSBzdHJ1Y3QgaW5zdGFu
Y2UuCisrVEludGVybUJpbmFyeSAmQWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNv
bnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKTsKKysKKysvLyBBY2Nlc3NlcyBhIGZpZWxk
IGZvciB0aGUgZ2l2ZW4gbm9kZSBieSBpdHMgZmllbGQgaW5kZXguCisrLy8gVGhlIG5vZGUgbXVz
dCBiZSBhIHN0cnVjdCBpbnN0YW5jZS4KKytUSW50ZXJtQmluYXJ5ICZBY2Nlc3NGaWVsZEJ5SW5k
ZXgoVEludGVybVR5cGVkICZvYmplY3QsIGludCBpbmRleCk7CisrCisrLy8gQWNjZXNzZXMgYW4g
ZWxlbWVudCBieSBpbmRleCBmb3IgdGhlIGdpdmVuIG5vZGUuCisrLy8gVGhlIG5vZGUgbXVzdCBi
ZSBhbiBhcnJheSwgdmVjdG9yLCBvciBtYXRyaXguCisrVEludGVybUJpbmFyeSAmQWNjZXNzSW5k
ZXgoVEludGVybVR5cGVkICZpbmRleGFibGVOb2RlLCBpbnQgaW5kZXgpOworKworKy8vIEFjY2Vz
c2VzIGFuIGVsZW1lbnQgYnkgaW5kZXggZm9yIHRoZSBnaXZlbiBub2RlIGlmIGBpbmRleGAgaXMg
bm9uLW51bGwuCisrLy8gUmV0dXJucyB0aGUgb3JpZ2luYWwgbm9kZSBpZiBgaW5kZXhgIGlzIG51
bGwuCisrLy8gVGhlIG5vZGUgbXVzdCBiZSBhbiBhcnJheSwgdmVjdG9yLCBvciBtYXRyaXggaWYg
YGluZGV4YCBpcyBub24tbnVsbC4KKytUSW50ZXJtVHlwZWQgJkFjY2Vzc0luZGV4KFRJbnRlcm1U
eXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCk7CisrCisrLy8gUmV0dXJucyBhIHN1YnZlY3Rv
ciBiYXNlZCBvbiB0aGUgaW5wdXQgc2xpY2UgcmFuZ2UuCisrLy8gVGhpcyByZXR1cm5zIHRoZSBv
cmlnaW5hbCBub2RlIGlmIHRoZSBzbGljZSBpcyBhbiBpZGVudGl0eSBmb3IgdGhlIG5vZGUuCisr
VEludGVybVR5cGVkICZTdWJWZWN0b3IoVEludGVybVR5cGVkICZ2ZWN0b3JOb2RlLCBpbnQgYmVn
aW4sIGludCBlbmQpOworKworKy8vIE1hdGNoZXMgc2NhbGFyIGJvb2wsIGludCwgdWludCwgZmxv
YXQsIGRvdWJsZS4KKytib29sIElzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsK
KysKKysvLyBNYXRjaGVzIHZlY3RvciBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBkb3VibGUuCisr
Ym9vbCBJc1ZlY3RvckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisrCisrLy8gTWF0Y2hl
cyBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBkb3VibGUuCisrLy8gVHlwZSBkb2VzIG5vdCBuZWVk
IHRvIGJlIGEgc2NhbGFyLgorK2Jvb2wgSGFzU2NhbGFyQmFzaWNUeXBlKGNvbnN0IFRUeXBlICZ0
eXBlKTsKKysKKysvLyBNYXRjaGVzIGJvb2wsIGludCwgdWludCwgZmxvYXQsIGRvdWJsZS4KKyti
b29sIEhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpOworKworKy8vIENsb25lcyBh
IHR5cGUuCisrVFR5cGUgJkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisrCisrLy8gQ2xv
bmVzIGEgdHlwZSBhbmQgZHJvcHMgYWxsIGFycmF5IGRpbWVuc2lvbnMuCisrVFR5cGUgJklubmVy
bW9zdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworKworKy8vIENyZWF0ZXMgYSB2ZWN0b3IgdHlw
ZSBieSBkcm9wcGluZyB0aGUgY29sdW1ucyBvZmYgb2YgYSBtYXRyaXggdHlwZS4KKytUVHlwZSAm
RHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpOworKworKy8vIENyZWF0ZXMgYSB0
eXBlIGJ5IGRyb3BwaW5nIHRoZSBvdXRlciBkaW1lbnNpb24gb2ZmIG9mIGFuIGFycmF5IHR5cGUu
CisrVFR5cGUgJkRyb3BPdXRlckRpbWVuc2lvbihjb25zdCBUVHlwZSAmYXJyYXlUeXBlKTsKKysK
KysvLyBDcmVhdGVzIGEgc2NhbGFyIG9yIHZlY3RvciB0eXBlIGJ5IGNoYW5naW5nIHRoZSBkaW1l
bnNpb25zIG9mIGEgdmVjdG9yIHR5cGUuCisrVFR5cGUgJlNldFZlY3RvckRpbShjb25zdCBUVHlw
ZSAmdHlwZSwgaW50IG5ld0RpbSk7CisrCisrLy8gQ3JlYXRlcyBhIG1hdHJpeCB0eXBlIGJ5IGNo
YW5naW5nIHRoZSByb3cgZGltZW5zaW9ucyBvZiBhIG1hdHJpeCB0eXBlLgorK1RUeXBlICZTZXRN
YXRyaXhSb3dEaW0oY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUsIGludCBuZXdEaW0pOworKworKy8v
IFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0cnVjdHVyZSBkaXJlY3RseSBjb250YWlucyBhIGZpZWxk
IHdpdGggbWF0cml4IHR5cGUuCisrYm9vbCBIYXNNYXRyaXhGaWVsZChjb25zdCBUU3RydWN0dXJl
ICZzdHJ1Y3R1cmUpOworKworKy8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIHN0cnVjdHVyZSBkaXJl
Y3RseSBjb250YWlucyBhIGZpZWxkIHdpdGggYXJyYXkgdHlwZS4KKytib29sIEhhc0FycmF5Rmll
bGQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKysKKysvLyBDb2VyY2VzIGBmcm9tTm9k
ZWAgdG8gYHRvVHlwZWAgYnkgYSBjb25zdHJ1Y3RvciBjYWxsIG9mIGB0b1R5cGVgIGlmIHRoZWly
IHR5cGVzIGRpZmZlci4KKysvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIGFyZSByZXRh
aW5lZC4KKysvLyBBcnJheSB0eXBlcyBhcmUgbm90IGFsbG93ZWQuCisrVEludGVybVR5cGVkICZD
b2VyY2VTaW1wbGUoVEJhc2ljVHlwZSB0b1R5cGUsIFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpOwor
KworKy8vIENvZXJjZXMgYGZyb21Ob2RlYCB0byBgdG9UeXBlYCBieSBhIGNvbnN0cnVjdG9yIGNh
bGwgb2YgYHRvVHlwZWAgaWYgdGhlaXIgdHlwZXMgZGlmZmVyLgorKy8vIFZlY3RvciBhbmQgbWF0
cml4IGRpbWVuc2lvbnMgbXVzdCBjb2luY2lkZSBiZXR3ZWVuIHRvIGFuZCBmcm9tLgorKy8vIEFy
cmF5IHR5cGVzIGFyZSBub3QgYWxsb3dlZC4KKytUSW50ZXJtVHlwZWQgJkNvZXJjZVNpbXBsZShj
b25zdCBUVHlwZSAmdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKTsKKysKKytUSW50ZXJt
VHlwZWQgJkFzVHlwZShTeW1ib2xFbnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwg
VEludGVybVR5cGVkICZmcm9tTm9kZSk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2Vu
ZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BU1RIRUxQ
RVJTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0NvbnN0YW50TmFtZXMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Db25zdGFudE5hbWVzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi5mZGRkODY1CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCitAQCAtMCww
ICsxLDI2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9DT05TVEFOVF9OQU1FU19IXworKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKysK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFt
ZS5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKytuYW1lc3BhY2UgY29uc3RhbnRfbmFtZXMK
Kyt7CisrCisrY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0VuYWJsZWQoIkFOR0xFX0NvdmVy
YWdlTWFza0VuYWJsZWQiLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKytjb25zdGV4cHIg
TmFtZSBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkKCJBTkdMRV9SYXN0ZXJpemF0aW9uRGlz
Y2FyZCIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKyt9ICAvLyBuYW1lc3BhY2UgY29uc3RhbnRfbmFt
ZXMKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0NPTlNUQU5UX05BTUVTX0hfCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaAor
bmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU4NWU5YTYKKy0tLSAvZGV2L251
bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9E
ZWJ1Zy5oCitAQCAtMCwwICsxLDE2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ERUJVR19IXworKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfREVCVUdfSF8KKysKKysj
aW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisrCisrI2RlZmluZSBUT0RPKCkgQVNTRVJUKGZhbHNl
KQorKworKyNkZWZpbmUgTE9HSUNfRVJST1IoKSBBU1NFUlQoZmFsc2UpCisrCisrI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ERUJVR19IXworZGlm
ZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9E
ZWJ1Z1NpbmsuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9EZWJ1Z1NpbmsuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg3MmFk
ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9EZWJ1Z1NpbmsuaAorQEAgLTAsMCArMSwxNTkgQEAKKysvLworKy8vIENv
cHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisr
Ly8KKysKKysjaW5jbHVkZSA8aW9zdHJlYW0+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvSW5mb1NpbmsuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrY2xhc3MgU3RyaW5n
T2JzZXJ2ZXIKKyt7CisrICBwdWJsaWM6CisrICAgIFN0cmluZ09ic2VydmVyKGNvbnN0IHN0ZDo6
c3RyaW5nICZuZWVkbGUpIDogbmVlZGxlKG5lZWRsZSkgeyBBU1NFUlQoIW5lZWRsZS5lbXB0eSgp
KTsgfQorKworKyAgICBib29sIG9ic2VydmUoY2hhciBjKQorKyAgICB7CisrICAgICAgICBpZiAo
bmVlZGxlW2N1cnJQb3NdID09IGMpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytjdXJyUG9z
OworKyAgICAgICAgICAgIGlmIChjdXJyUG9zID09IG5lZWRsZS5zaXplKCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICByZXNldCgpOworKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAg
ICB7CisrICAgICAgICAgICAgcmVzZXQoKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBm
YWxzZTsKKysgICAgfQorKworKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0TmVlZGxlKCkgY29u
c3QgeyByZXR1cm4gbmVlZGxlOyB9CisrCisrICAgIHZvaWQgcmVzZXQoKSB7IGN1cnJQb3MgPSAw
OyB9CisrCisrICBwcml2YXRlOgorKyAgICBzdGQ6OnN0cmluZyBuZWVkbGU7CisrICAgIHNpemVf
dCBjdXJyUG9zID0gMDsKKyt9OworKworK2NsYXNzIERlYnVnU2luayA6IGFuZ2xlOjpOb25Db3B5
YWJsZQorK3sKKysgIHB1YmxpYzoKKysgICAgZnJpZW5kIGNsYXNzIEVzY2FwZWRTaW5rOworKyAg
ICBjbGFzcyBFc2NhcGVkU2luayA6IGFuZ2xlOjpOb25Db3B5YWJsZQorKyAgICB7CisrICAgICAg
ICBmcmllbmQgY2xhc3MgRGVidWdTaW5rOworKworKyAgICAgIHByaXZhdGU6CisrICAgICAgICBF
c2NhcGVkU2luayhEZWJ1Z1NpbmsgJm93bmVyKSA6IG1Pd25lcihvd25lciksIG1CZWdpbihvd25l
ci5zaXplKCkpIHt9CisrCisrICAgICAgcHVibGljOgorKyAgICAgICAgRXNjYXBlZFNpbmsoRXNj
YXBlZFNpbmsgJiZvdGhlcikgOiBtT3duZXIob3RoZXIubU93bmVyKSwgbUJlZ2luKG90aGVyLm1C
ZWdpbikge30KKysKKysgICAgICAgIH5Fc2NhcGVkU2luaygpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgY29uc3QgY2hhciAqcCA9IG1Pd25lci5jX3N0cigpOworKyAgICAgICAgICAgIGNvbnN0
IGludCBlbmQgPSBtT3duZXIuc2l6ZSgpOworKyAgICAgICAgICAgIG1Pd25lci5vbldyaXRlKHAg
KyBtQmVnaW4sIHAgKyBlbmQpOworKyAgICAgICAgfQorKworKyAgICAgICAgVEluZm9TaW5rQmFz
ZSAmZ2V0KCkgeyByZXR1cm4gbU93bmVyLm1QYXJlbnQ7IH0KKysKKysgICAgICAgIG9wZXJhdG9y
IFRJbmZvU2lua0Jhc2UgJigpIHsgcmV0dXJuIGdldCgpOyB9CisrCisrICAgICAgcHJpdmF0ZToK
KysgICAgICAgIERlYnVnU2luayAmbU93bmVyOworKyAgICAgICAgY29uc3QgaW50IG1CZWdpbjsK
KysgICAgfTsKKysKKysgIHB1YmxpYzoKKysgICAgRGVidWdTaW5rKFRJbmZvU2lua0Jhc2UgJnBh
cmVudCwgYm9vbCBhbHNvTG9nVG9TdGRvdXQpCisrICAgICAgICA6IG1QYXJlbnQocGFyZW50KSwg
bUFsc29Mb2dUb1N0ZG91dChhbHNvTG9nVG9TdGRvdXQpCisrICAgIHt9CisrCisrICAgIHZvaWQg
d2F0Y2goc3RkOjpzdHJpbmcgY29uc3QgJm5lZWRsZSkKKysgICAgeworKyAgICAgICAgaWYgKCFu
ZWVkbGUuZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT2JzZXJ2ZXJzLmVtcGxh
Y2VfYmFjayhuZWVkbGUpOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHZvaWQgZXJhc2Uo
KQorKyAgICB7CisrICAgICAgICBtUGFyZW50LmVyYXNlKCk7CisrICAgICAgICBmb3IgKFN0cmlu
Z09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNlcnZlcnMpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgb2JzZXJ2ZXIucmVzZXQoKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpbnQgc2l6
ZSgpIHsgcmV0dXJuIG1QYXJlbnQuc2l6ZSgpOyB9CisrCisrICAgIGNvbnN0IFRQZXJzaXN0U3Ry
aW5nICZzdHIoKSBjb25zdCB7IHJldHVybiBtUGFyZW50LnN0cigpOyB9CisrCisrICAgIGNvbnN0
IGNoYXIgKmNfc3RyKCkgY29uc3QgeyByZXR1cm4gbVBhcmVudC5jX3N0cigpOyB9CisrCisrICAg
IEVzY2FwZWRTaW5rIGVzY2FwZSgpIHsgcmV0dXJuIEVzY2FwZWRTaW5rKCp0aGlzKTsgfQorKwor
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgICAgRGVidWdTaW5rICZvcGVyYXRvcjw8KGNv
bnN0IFQgJnZhbHVlKQorKyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgYmVnaW4gPSBtUGFy
ZW50LnNpemUoKTsKKysgICAgICAgIG1QYXJlbnQgPDwgdmFsdWU7CisrICAgICAgICBjb25zdCBz
aXplX3QgZW5kID0gbVBhcmVudC5zaXplKCk7CisrCisrICAgICAgICBjb25zdCBjaGFyICpwID0g
bVBhcmVudC5jX3N0cigpOworKyAgICAgICAgb25Xcml0ZShwICsgYmVnaW4sIHAgKyBlbmQpOwor
KworKyAgICAgICAgcmV0dXJuICp0aGlzOworKyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICB2
b2lkIG9uV3JpdGUoY29uc3QgY2hhciAqYmVnaW4sIGNoYXIgY29uc3QgKmVuZCkKKysgICAgewor
KyAgICAgICAgY29uc3QgY2hhciAqcCA9IGJlZ2luOworKyAgICAgICAgd2hpbGUgKHAgIT0gZW5k
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorKyAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICpwOworKyAgICAgICAgICAg
IH0KKysKKysgICAgICAgICAgICBmb3IgKFN0cmluZ09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNl
cnZlcnMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIub2Jz
ZXJ2ZSgqcCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGlmICht
QWxzb0xvZ1RvU3Rkb3V0KQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6Y291dC5mbHVzaCgpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5lZWRsZSA9IG9ic2VydmVyLmdl
dE5lZWRsZSgpOworKyAgICAgICAgICAgICAgICAgICAgKHZvaWQpbmVlZGxlOworKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRydWUpOyAgLy8gcGxhY2UgeW91ciBicmVha3BvaW50IGhlcmUK
KysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICArK3A7
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobUFsc29Mb2dUb1N0ZG91dCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKysgICAgICAgIH0KKysgICAgfQor
KworKyAgcHJpdmF0ZToKKysgICAgVEluZm9TaW5rQmFzZSAmbVBhcmVudDsKKysgICAgc3RkOjp2
ZWN0b3I8U3RyaW5nT2JzZXJ2ZXI+IG1PYnNlcnZlcnM7CisrICAgIGJvb2wgbUFsc29Mb2dUb1N0
ZG91dDsKKyt9OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1
bmN0aW9ucy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAor
aW5kZXggMDAwMDAwMC4uNDJkZjQzMAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5kZW50RnVuY3Rp
b25zLmNwcAorQEAgLTAsMCArMSwxMzEgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSA8
Y3N0cmluZz4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRlcmVk
X3NldD4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlv
blRyYXZlcnNlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgiCisrCisrdXNpbmcgbmFtZXNw
YWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisrewor
KworK2NsYXNzIERpc2NvdmVyZXIgOiBwdWJsaWMgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRy
YXZlcnNlcgorK3sKKysgIHByaXZhdGU6CisrICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChj
b25zdCBUVmFyaWFibGUgJik+ICZtVmFyczsKKysgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmluaXRp
b24gJm1GdW5jVG9EZWY7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24g
Kj4gbU5vbkRlcEZ1bmN0aW9uczsKKysKKysgIHB1YmxpYzoKKysgICAgc3RkOjp1bm9yZGVyZWRf
c2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBtRGVwRnVuY3Rpb25zOworKworKyAgcHVibGljOgorKyAg
ICBEaXNjb3ZlcmVyKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBUVmFyaWFibGUgJik+
ICZ2YXJzLAorKyAgICAgICAgICAgICAgIGNvbnN0IEZ1bmN0aW9uVG9EZWZpbml0aW9uICZmdW5j
VG9EZWYpCisrICAgICAgICA6IERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIodHJ1
ZSwgZmFsc2UsIHRydWUpLCBtVmFycyh2YXJzKSwgbUZ1bmNUb0RlZihmdW5jVG9EZWYpCisrICAg
IHt9CisrCisrICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkg
b3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xO
b2RlLT52YXJpYWJsZSgpOworKyAgICAgICAgaWYgKCFtVmFycyh2YXIpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAqb3duZXIgPSBkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uKHN5bWJvbE5vZGUpOworKyAgICAg
ICAgQVNTRVJUKG93bmVyKTsKKysgICAgICAgIG1EZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsK
KysgICAgfQorKworKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJt
QWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBpZiAo
dmlzaXQgIT0gVmlzaXQ6OlByZVZpc2l0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKCFhZ2dyZWdhdGVOb2RlLT5pc0Nv
bnN0cnVjdG9yKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpm
dW5jID0gYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysKKysgICAgICAgICAgICBpZiAo
bU5vbkRlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpICE9IG1Ob25EZXBGdW5jdGlvbnMuZW5kKCkpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAg
ICB9CisrCisrICAgICAgICAgICAgaWYgKG1EZXBGdW5jdGlvbnMuZmluZChmdW5jKSA9PSBtRGVw
RnVuY3Rpb25zLmVuZCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byBp
dCA9IG1GdW5jVG9EZWYuZmluZChmdW5jKTsKKysgICAgICAgICAgICAgICAgaWYgKGl0ID09IG1G
dW5jVG9EZWYuZW5kKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8v
IFJlY3Vyc2lvbiBpcyBiYW5uZWQgaW4gR0xTTCwgc28gSSBiZWxpZXZlIEFuZ2xlSVIgaGFzIHRo
aXMgcHJvcGVydHkgdG9vLgorKyAgICAgICAgICAgICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9u
IGFzc3VtZXMgKGRpcmVjdCBhbmQgbXV0dWFsKSByZWN1cnNpb24gaXMgcHJvaGliaXRlZC4KKysg
ICAgICAgICAgICAgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUgPSAq
aXQtPnNlY29uZDsKKysgICAgICAgICAgICAgICAgZnVuY0RlZk5vZGUudHJhdmVyc2UodGhpcyk7
CisrICAgICAgICAgICAgICAgIGlmIChtTm9uRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbU5v
bkRlcEZ1bmN0aW9ucy5lbmQoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAg
QVNTRVJUKG1EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtRGVwRnVuY3Rpb25zLmVuZCgpKTsK
KysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvd25lciA9
IGRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oYWdncmVnYXRlTm9kZSk7CisrICAgICAgICAgICAg
QVNTRVJUKG93bmVyKTsKKysgICAgICAgICAgICBtRGVwRnVuY3Rpb25zLmluc2VydChvd25lcik7
CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBi
b29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICpmdW5jRGVmTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3Qg
VEZ1bmN0aW9uICpmdW5jID0gZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisrCisrICAgICAg
ICBpZiAodmlzaXQgIT0gVmlzaXQ6OlBvc3RWaXNpdCkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMpICE9IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAg
ICAgfQorKworKyAgICAgICAgICAgIGlmIChtTm9uRGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0g
bU5vbkRlcEZ1bmN0aW9ucy5lbmQoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMp
ID09IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU5vbkRl
cEZ1bmN0aW9ucy5pbnNlcnQoZnVuYyk7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4g
dHJ1ZTsKKysgICAgfQorK307CisrCisrfSAgLy8gbmFtZXNwYWNlCisrCisrc3RkOjp1bm9yZGVy
ZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBzaDo6RGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMo
CisrICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29s
KGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMpCisreworKyAgICBjb25zdCBGdW5jdGlvblRvRGVm
aW5pdGlvbiBmdW5jVG9EZWYgPSBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKHJvb3QpOworKyAg
ICBEaXNjb3ZlcmVyIGRpc2NvdmVyZXIodmFycywgZnVuY1RvRGVmKTsKKysgICAgcm9vdC50cmF2
ZXJzZSgmZGlzY292ZXJlcik7CisrICAgIHJldHVybiBzdGQ6Om1vdmUoZGlzY292ZXJlci5tRGVw
RnVuY3Rpb25zKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmggYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRG
dW5jdGlvbnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjVkMWJmMjcK
Ky0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5oCitAQCAtMCwwICsxLDI1IEBA
CisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9ESVNDT1ZFUkRFUEVOREVOVEZVTkNUSU9OU19IXworKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJERVBFTkRFTlRG
VU5DVElPTlNfSF8KKysKKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysjaW5jbHVkZSAi
Y29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21w
aWxlci5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBGaW5kcyBhbmQgcmV0dXJucyBh
bGwgZnVuY3Rpb25zIHRoYXQgY29udGFpbiB0aGUgcHJvdmlkZWQgdmFyaWFibGVzLgorK0FOR0xF
X05PX0RJU0NBUkQgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBEaXNjb3Zl
ckRlcGVuZGVudEZ1bmN0aW9ucygKKysgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICBjb25z
dCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycyk7CisrCisrfSAg
Ly8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkRFUEVOREVOVEZVTkNUSU9OU19IXworZGlmZiAtLWdp
dCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3Zl
ckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2Vy
LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjIyZDM5MGUKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcAorQEAgLTAsMCArMSwz
MyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgi
CisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworK0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXI6OkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIoYm9vbCBwcmVWaXNp
dF8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGluVmlzaXRfLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
b3N0VmlzaXRfLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKKysg
ICAgOiBUSW50ZXJtVHJhdmVyc2VyKHByZVZpc2l0XywgaW5WaXNpdF8sIHBvc3RWaXNpdF8sIHN5
bWJvbFRhYmxlKQorK3t9CisrCisrY29uc3QgVEZ1bmN0aW9uICpEaXNjb3ZlckVuY2xvc2luZ0Z1
bmN0aW9uVHJhdmVyc2VyOjpkaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uKFRJbnRlcm1Ob2RlICpu
b2RlKQorK3sKKysgICAgQVNTRVJUKCFub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsK
KysKKysgICAgdW5zaWduZWQgaGVpZ2h0ID0gMDsKKysgICAgd2hpbGUgKFRJbnRlcm1Ob2RlICph
bmNlc3RvciA9IGdldEFuY2VzdG9yTm9kZShoZWlnaHQpKQorKyAgICB7CisrICAgICAgICBpZiAo
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZnVuY0RlZk5vZGUgPSBhbmNlc3Rvci0+Z2V0QXNG
dW5jdGlvbkRlZmluaXRpb24oKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVu
Y0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisrICAgICAgICB9CisrICAgICAgICArK2hlaWdodDsK
KysgICAgfQorKworKyAgICByZXR1cm4gbnVsbHB0cjsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRW5jbG9zaW5n
RnVuY3Rpb25UcmF2ZXJzZXIuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmgKK25ldyBmaWxl
IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mOWNiMmFhCistLS0gL2Rldi9udWxsCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJF
bmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5oCitAQCAtMCwwICsxLDMxIEBACisrLy8KKysvLyBD
b3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ky8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCisrI2RlZmluZSBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNU
SU9OVFJBVkVSU0VSX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ludGVybVRyYXZlcnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEEgVElu
dGVybVRyYXZlcnNlciB0aGF0IHN1cHBvcnRzIGRpc2NvdmVyeSBvZiB0aGUgZnVuY3Rpb24gYSBu
b2RlIGJlbG9uZ3MgdG8uCisrY2xhc3MgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNl
ciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCisreworKyAgcHVibGljOgorKyAgICBEaXNjb3Zl
ckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpblZpc2l0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcG9zdFZpc2l0LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSBudWxs
cHRyKTsKKysKKysgICAgLy8gUmV0dXJucyB0aGUgZnVuY3Rpb24gYSBub2RlIGJlbG9uZ3MgaW5z
aWRlLgorKyAgICAvLyBSZXR1cm5zIG51bGwgaWYgdGhlIG5vZGUgZG9lcyBub3QgYmVsb25nIGlu
c2lkZSBhIGZ1bmN0aW9uLgorKyAgICBjb25zdCBURnVuY3Rpb24gKmRpc2NvdmVyRW5jbG9zaW5n
RnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpOworK307CisrCisrfSAgLy8gbmFtZXNwYWNlIHNo
CisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VSX0hfCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFs
LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFiYmRkM2YKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9FbWl0TWV0YWwuY3BwCitAQCAtMCwwICsxLDI0NTUgQEAKKysvLworKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysK
KysjaW5jbHVkZSA8Y2N0eXBlPgorKyNpbmNsdWRlIDxtYXA+CisrCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nQnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vt
aXRNZXRhbC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9FbnZpcm9ubWVudFZhcmlhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5oIgorKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVQaXBlbGluZXMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvSW50ZXJtVHJhdmVyc2UuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2NvbnN0YW50cy5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworKworKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorK3Vz
aW5nIFNpbmsgPSBEZWJ1Z1Npbms7CisrI2Vsc2UKKyt1c2luZyBTaW5rID0gVEluZm9TaW5rQmFz
ZTsKKysjZW5kaWYKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFjZQor
K3sKKysKKytzdHJ1Y3QgVmFyRGVjbAorK3sKKysgICAgZXhwbGljaXQgVmFyRGVjbChjb25zdCBU
VmFyaWFibGUgJnZhcikgOiBtVmFyaWFibGUoJnZhciksIG1Jc0ZpZWxkKGZhbHNlKSB7fQorKyAg
ICBleHBsaWNpdCBWYXJEZWNsKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCks
IG1Jc0ZpZWxkKHRydWUpIHt9CisrCisrICAgIEFOR0xFX0lOTElORSBjb25zdCBUVmFyaWFibGUg
JnZhcmlhYmxlKCkgY29uc3QKKysgICAgeworKyAgICAgICAgQVNTRVJUKGlzVmFyaWFibGUoKSk7
CisrICAgICAgICByZXR1cm4gKm1WYXJpYWJsZTsKKysgICAgfQorKworKyAgICBBTkdMRV9JTkxJ
TkUgY29uc3QgVEZpZWxkICZmaWVsZCgpIGNvbnN0CisrICAgIHsKKysgICAgICAgIEFTU0VSVChp
c0ZpZWxkKCkpOworKyAgICAgICAgcmV0dXJuICptRmllbGQ7CisrICAgIH0KKysKKysgICAgQU5H
TEVfSU5MSU5FIGJvb2wgaXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuICFtSXNGaWVsZDsgfQor
KworKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBpc0ZpZWxkKCkgY29uc3QgeyByZXR1cm4gbUlzRmll
bGQ7IH0KKysKKysgICAgY29uc3QgVFR5cGUgJnR5cGUoKSBjb25zdCB7IHJldHVybiBpc0ZpZWxk
KCkgPyAqZmllbGQoKS50eXBlKCkgOiB2YXJpYWJsZSgpLmdldFR5cGUoKTsgfQorKworKyAgICBT
eW1ib2xUeXBlIHN5bWJvbFR5cGUoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gaXNG
aWVsZCgpID8gZmllbGQoKS5zeW1ib2xUeXBlKCkgOiB2YXJpYWJsZSgpLnN5bWJvbFR5cGUoKTsK
KysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgdW5pb24KKysgICAgeworKyAgICAgICAgY29u
c3QgVFZhcmlhYmxlICptVmFyaWFibGU7CisrICAgICAgICBjb25zdCBURmllbGQgKm1GaWVsZDsK
KysgICAgfTsKKysgICAgYm9vbCBtSXNGaWVsZDsKKyt9OworKworK2NsYXNzIEdlbk1ldGFsVHJh
dmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKKyt7CisrICBwdWJsaWM6CisrICAgIH5H
ZW5NZXRhbFRyYXZlcnNlcigpIG92ZXJyaWRlOworKworKyAgICBHZW5NZXRhbFRyYXZlcnNlcihj
b25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICBTaW5rICZv
dXQsCisrICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisrICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAg
ICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKysKKysgICAgdm9pZCB2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRlOworKyAgICB2b2lkIHZpc2l0Q29uc3RhbnRV
bmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqKSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdFN3
aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqKSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdFRl
cm5hcnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
SWZFbHNlKFZpc2l0LCBUSW50ZXJtSWZFbHNlICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNoICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0
Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgb3ZlcnJpZGU7CisrICAgIHZvaWQgdmlzaXRGdW5j
dGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3ZlcnJpZGU7CisrICAg
IGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gKikgb3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKikgb3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRCbG9jayhWaXNpdCwgVElu
dGVybUJsb2NrICopIG92ZXJyaWRlOworKyAgICBib29sIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVj
bGFyYXRpb24oVmlzaXQsIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqKSBvdmVy
cmlkZTsKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRp
b24gKikgb3ZlcnJpZGU7CisrICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAq
KSBvdmVycmlkZTsKKysgICAgYm9vbCB2aXNpdEZvckxvb3AoVEludGVybUxvb3AgKik7CisrICAg
IGJvb2wgdmlzaXRXaGlsZUxvb3AoVEludGVybUxvb3AgKik7CisrICAgIGJvb2wgdmlzaXREb1do
aWxlTG9vcChUSW50ZXJtTG9vcCAqKTsKKysgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVElu
dGVybUJyYW5jaCAqKSBvdmVycmlkZTsKKysKKysgIHByaXZhdGU6CisrICAgIHVzaW5nIEZ1bmNU
b05hbWUgPSBzdGQ6Om1hcDxJbW11dGFibGVTdHJpbmcsIE5hbWU+OworKyAgICBzdGF0aWMgRnVu
Y1RvTmFtZSBCdWlsZEZ1bmNUb05hbWUoKTsKKysKKysgICAgc3RydWN0IEVtaXRWYXJpYWJsZURl
Y2xhcmF0aW9uQ29uZmlnCisrICAgIHsKKysgICAgICAgIGJvb2wgaXNQYXJhbWV0ZXIgICAgICAg
ICAgICAgICAgPSBmYWxzZTsKKysgICAgICAgIGJvb2wgaXNNYWluUGFyYW1ldGVyICAgICAgICAg
ICAgPSBmYWxzZTsKKysgICAgICAgIGJvb2wgZW1pdFBvc3RRdWFsaWZpZXIgICAgICAgICAgPSBm
YWxzZTsKKysgICAgICAgIGJvb2wgaXNQYWNrZWQgICAgICAgICAgICAgICAgICAgPSBmYWxzZTsK
KysgICAgICAgIGJvb2wgZGlzYWJsZVN0cnVjdFNwZWNpZmllciAgICAgPSBmYWxzZTsKKysgICAg
ICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQb2ludGVyICAgPSBudWxscHRyOworKyAgICAgICAg
Y29uc3QgQWRkcmVzc1NwYWNlICppc1JlZmVyZW5jZSA9IG51bGxwdHI7CisrICAgIH07CisrCisr
ICAgIHN0cnVjdCBFbWl0VHlwZUNvbmZpZworKyAgICB7CisrICAgICAgICBjb25zdCBFbWl0VmFy
aWFibGVEZWNsYXJhdGlvbkNvbmZpZyAqZXZkQ29uZmlnID0gbnVsbHB0cjsKKysgICAgfTsKKysK
KysgICAgdm9pZCBlbWl0SW5kZW50YXRpb24oKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25TaWdu
YXR1cmUoY29uc3QgVEZ1bmN0aW9uICZmdW5jKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25SZXR1
cm4oY29uc3QgVEZ1bmN0aW9uICZmdW5jKTsKKysgICAgdm9pZCBlbWl0RnVuY3Rpb25QYXJhbWV0
ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKTsKKysKKysg
ICAgdm9pZCBlbWl0TmFtZU9mKGNvbnN0IFRGaWVsZCAmb2JqZWN0KTsKKysgICAgdm9pZCBlbWl0
TmFtZU9mKGNvbnN0IFRTeW1ib2wgJm9iamVjdCk7CisrICAgIHZvaWQgZW1pdE5hbWVPZihjb25z
dCBWYXJEZWNsICZvYmplY3QpOworKworKyAgICB2b2lkIGVtaXRCYXJlVHlwZU5hbWUoY29uc3Qg
VFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZpZyk7CisrICAgIHZvaWQg
ZW1pdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZp
Zyk7CisrICAgIHZvaWQgZW1pdFBvc3RRdWFsaWZpZXIoY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFy
YXRpb25Db25maWcgJmV2ZENvbmZpZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBWYXJEZWNsICZkZWNsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFs
aWZpZXIgcXVhbGlmaWVyKTsKKysKKysgICAgc3RydWN0IEZpZWxkQW5ub3RhdGlvbkluZGljZXMK
KysgICAgeworKyAgICAgICAgc2l6ZV90IGF0dHJpYnV0ZSA9IDA7CisrICAgICAgICBzaXplX3Qg
Y29sb3IgICAgID0gMDsKKysgICAgfTsKKysKKysgICAgdm9pZCBlbWl0RmllbGREZWNsYXJhdGlv
bihjb25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgJnBhcmVudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
aWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNlcyk7CisrICAgIHZvaWQgZW1p
dEF0dHJpYnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsIEZpZWxkQW5ub3RhdGlv
bkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKTsKKysgICAgdm9pZCBlbWl0U3RydWN0RGVjbGFy
YXRpb24oY29uc3QgVFR5cGUgJnR5cGUpOworKyAgICB2b2lkIGVtaXRPcmRpbmFyeVZhcmlhYmxl
RGVjbGFyYXRpb24oY29uc3QgVmFyRGVjbCAmZGVjbCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZl
dmRDb25maWcpOworKyAgICB2b2lkIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IFZhckRl
Y2wgJmRlY2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdFZh
cmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZyk7CisrCisrICAgIHZvaWQgZW1pdE9w
ZW5CcmFjZSgpOworKyAgICB2b2lkIGVtaXRDbG9zZUJyYWNlKCk7CisrCisrICAgIHZvaWQgZ3Jv
dXBlZFRyYXZlcnNlKFRJbnRlcm1Ob2RlICZub2RlKTsKKysKKysgICAgY29uc3QgVEZpZWxkICZn
ZXREaXJlY3RGaWVsZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRzTm9kZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAmaW5k
ZXgpOworKyAgICBjb25zdCBURmllbGQgJmdldERpcmVjdEZpZWxkKGNvbnN0IFRJbnRlcm1UeXBl
ZCAmZmllbGRzTm9kZSwgVEludGVybVR5cGVkICZpbmRleE5vZGUpOworKworKyAgICBjb25zdCBU
Q29uc3RhbnRVbmlvbiAqZW1pdENvbnN0YW50VW5pb25BcnJheShjb25zdCBUQ29uc3RhbnRVbmlv
biAqY29uc3QgY29uc3RVbmlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUpOworKworKyAgICBjb25zdCBUQ29uc3Rh
bnRVbmlvbiAqZW1pdENvbnN0YW50VW5pb24oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRDb25z
dGFudFVuaW9uICpjb25zdFVuaW9uKTsKKysKKysgICAgdm9pZCBlbWl0U2luZ2xlQ29uc3RhbnQo
Y29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0IGNvbnN0VW5pb24pOworKworKyAgcHJpdmF0ZToK
KysgICAgU2luayAmbU91dDsKKysgICAgY29uc3QgVENvbXBpbGVyICZtQ29tcGlsZXI7CisrICAg
IGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmbVBpcGVsaW5lU3RydWN0czsKKysgICAgY29uc3QgSW52
YXJpYW50cyAmbUludmFyaWFudHM7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysgICAg
SWRHZW4gJm1JZEdlbjsKKysgICAgaW50IG1JbmRlbnRMZXZlbCAgICAgICAgPSAtMTsKKysgICAg
aW50IG1MYXN0SW5kZW50YXRpb25Qb3MgPSAtMTsKKysgICAgYm9vbCBtUGFyZW50SXNTd2l0Y2gg
ICAgPSBmYWxzZTsKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTeW1ib2wgKiwgTmFt
ZT4gbVJlbmFtZWRTeW1ib2xzOworKyAgICBjb25zdCBGdW5jVG9OYW1lIG1GdW5jVG9OYW1lICAg
PSBCdWlsZEZ1bmNUb05hbWUoKTsKKysgICAgc2l6ZV90IG1NYWluVGV4dHVyZUluZGV4ICAgICAg
ID0gMDsKKysgICAgc2l6ZV90IG1NYWluU2FtcGxlckluZGV4ICAgICAgID0gMDsKKysgICAgc2l6
ZV90IG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4ID0gcng6Om10bDo6a0RlZmF1bHRVbmlmb3Jtc0Jp
bmRpbmdJbmRleDsKKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKytHZW5N
ZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVyc2VyKCkKKyt7CisrICAgIEFTU0VSVChtSW5k
ZW50TGV2ZWwgPT0gLTEpOworKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRjaCk7CisrfQorKwor
K0dlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcihjb25zdCBUQ29tcGlsZXIgJmNv
bXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW5rICZvdXQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3Rz
ICZwaXBlbGluZVN0cnVjdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KQorKyAgICA6IFRJbnRlcm1UcmF2ZXJz
ZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKysgICAgICBtT3V0KG91dCksCisrICAgICAgbUNvbXBp
bGVyKGNvbXBpbGVyKSwKKysgICAgICBtUGlwZWxpbmVTdHJ1Y3RzKHBpcGVsaW5lU3RydWN0cyks
CisrICAgICAgbUludmFyaWFudHMoaW52YXJpYW50cyksCisrICAgICAgbVN5bWJvbEVudihzeW1i
b2xFbnYpLAorKyAgICAgIG1JZEdlbihpZEdlbikKKyt7fQorKworK3ZvaWQgR2VuTWV0YWxUcmF2
ZXJzZXI6OmVtaXRJbmRlbnRhdGlvbigpCisreworKyAgICBBU1NFUlQobUluZGVudExldmVsID49
IDApOworKworKyAgICBpZiAobUxhc3RJbmRlbnRhdGlvblBvcyA9PSBtT3V0LnNpemUoKSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuOyAgLy8gTGluZSBpcyBhbHJlYWR5IGluZGVudGVkLgorKyAg
ICB9CisrCisrICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUluZGVudExldmVsOyArK2kpCisrICAg
IHsKKysgICAgICAgIG1PdXQgPDwgIiAgIjsKKysgICAgfQorKworKyAgICBtTGFzdEluZGVudGF0
aW9uUG9zID0gbU91dC5zaXplKCk7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICpHZXRPcGVy
YXRvclN0cmluZyhUT3BlcmF0b3Igb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTAsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIpCisrewor
KyAgICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29t
bWE6CisrICAgICAgICAgICAgcmV0dXJuICIsIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuICI9IjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbml0aWFsaXplOgorKyAgICAgICAgICAgIHJldHVybiAiPSI7CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAiKz0iOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoKKysgICAgICAgICAgICByZXR1
cm4gIi09IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246CisrICAgICAg
ICAgICAgcmV0dXJuICIqPSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWdu
OgorKyAgICAgICAgICAgIHJldHVybiAiLz0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cElNb2RBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuICIlPSI7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0QXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAiPDw9
IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlmdGluZy4KKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAgICAgICAgICAg
IHJldHVybiAiPj49IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBzaGlm
dGluZy4KKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorKyAg
ICAgICAgICAgIHJldHVybiAiJj0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdp
c2VYb3JBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuICJePSI7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorKyAgICAgICAgICAgIHJldHVybiAifD0iOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZDoKKysgICAgICAgICAgICByZXR1cm4gIisi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgICAgICByZXR1cm4g
Ii0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoKKysgICAgICAgICAgICByZXR1
cm4gIioiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERpdjoKKysgICAgICAgICAgICBy
ZXR1cm4gIi8iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisrICAgICAgICAg
ICAgcmV0dXJuICIlIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6
CisrICAgICAgICAgICAgcmV0dXJuICI8PCI7ICAvLyBUT0RPOiBDaGVjayBsb2dpY2FsIHZzIGFy
aXRobWV0aWMgc2hpZnRpbmcuCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRS
aWdodDoKKysgICAgICAgICAgICByZXR1cm4gIj4+IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwg
dnMgYXJpdGhtZXRpYyBzaGlmdGluZy4KKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3
aXNlQW5kOgorKyAgICAgICAgICAgIHJldHVybiAiJiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZVhvcjoKKysgICAgICAgICAgICByZXR1cm4gIl4iOworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPcjoKKysgICAgICAgICAgICByZXR1cm4gInwiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuOgorKyAgICAgICAgICAgIHJldHVybiAi
PCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW46CisrICAgICAgICAg
ICAgcmV0dXJuICI+IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFs
OgorKyAgICAgICAgICAgIHJldHVybiAiPD0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEdyZWF0ZXJUaGFuRXF1YWw6CisrICAgICAgICAgICAgcmV0dXJuICI+PSI7CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5Db21wb25lbnRXaXNlOgorKyAgICAgICAgICAgIHJl
dHVybiAiPCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbENvbXBv
bmVudFdpc2U6CisrICAgICAgICAgICAgcmV0dXJuICI8PSI7CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICAgICAgcmV0
dXJuICI+PSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5Db21wb25l
bnRXaXNlOgorKyAgICAgICAgICAgIHJldHVybiAiPiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTG9naWNhbE9yOgorKyAgICAgICAgICAgIHJldHVybiAifHwiOworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxYb3I6CisrICAgICAgICAgICAgcmV0dXJuICIhPS8qeG9y
Ki8iOyAgLy8gWFhYOiBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBm
b3Igc29tZSBvYnR1c2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2Ug
Y2FzZS4KKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kOgorKyAgICAgICAg
ICAgIHJldHVybiAiJiYiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5lZ2F0aXZlOgor
KyAgICAgICAgICAgIHJldHVybiAiLSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9z
aXRpdmU6CisrICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuICIiOworKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICByZXR1cm4gIisiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxO
b3Q6CisrICAgICAgICAgICAgcmV0dXJuICIhIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMb2dpY2FsTm90Q29tcG9uZW50V2lzZToKKysgICAgICAgICAgICByZXR1cm4gIiEiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisrICAgICAgICAgICAgcmV0dXJu
ICJ+IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5jcmVtZW50OgorKyAgICAg
ICAgICAgIHJldHVybiAiKysiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3REZWNy
ZW1lbnQ6CisrICAgICAgICAgICAgcmV0dXJuICItLSI7CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wUHJlSW5jcmVtZW50OgorKyAgICAgICAgICAgIHJldHVybiAiKysiOworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDoKKysgICAgICAgICAgICByZXR1cm4gIi0t
IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoK
KysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAg
ICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1l
c01hdHJpeEFzc2lnbjoKKysgICAgICAgICAgICByZXR1cm4gIio9IjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKysgICAgICAgICAgICByZXR1cm4gIioi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorKyAgICAg
ICAgICAgIHJldHVybiAiKiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGlt
ZXNWZWN0b3I6CisrICAgICAgICAgICAgcmV0dXJuICIqIjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKysgICAgICAgICAgICByZXR1cm4gIioiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4OgorKyAgICAgICAgICAg
IHJldHVybiAiKiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWxDb21wb25lbnRX
aXNlOgorKyAgICAgICAgICAgIHJldHVybiAiPT0iOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToKKysgICAgICAgICAgICByZXR1cm4gIiE9IjsKKysK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgICAgICBpZiAoKGFy
Z1R5cGUwLT5pc1ZlY3RvcigpICYmIGFyZ1R5cGUxLT5pc1ZlY3RvcigpKSB8fAorKyAgICAgICAg
ICAgICAgICAoYXJnVHlwZTAtPmdldFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkg
fHwKKysgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5pc0FycmF5KCkgJiYgYXJnVHlwZTEtPmlz
QXJyYXkoKSkpCisrCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIkFO
R0xFX2VxdWFsIjsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgcmV0dXJuICI9PSI7
CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWw6CisrICAgICAgICAgICAg
aWYgKChhcmdUeXBlMC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkgfHwKKysg
ICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5pc0FycmF5KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXko
KSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIkFOR0xFX25vdEVx
dWFsIjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoYXJnVHlwZTAtPmdl
dFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbm90RXF1YWxTdHJ1Y3QiOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICByZXR1cm4gIiE9IjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BLaWxsOgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gImtp
bGwiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJldHVybjoKKysgICAgICAgICAgICBy
ZXR1cm4gInJldHVybiI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQnJlYWs6CisrICAg
ICAgICAgICAgcmV0dXJuICJicmVhayI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29u
dGludWU6CisrICAgICAgICAgICAgcmV0dXJuICJjb250aW51ZSI7CisrCisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wUmFkaWFuczoKKysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3JhZGlh
bnMiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERlZ3JlZXM6CisrICAgICAgICAgICAg
cmV0dXJuICJBTkdMRV9kZWdyZWVzIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFu
OgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfYXRhbiI7CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wTW9kOgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbW9kIjsgIC8vIGRpZmZl
cnMgZnJvbSBtZXRhbDo6bW9kCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmcmFjdDoK
KysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3JlZnJhY3QiOworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcERpc3RhbmNlOgorKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfZGlzdGFuY2Ui
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlbmd0aDoKKysgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX2xlbmd0aCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRG90OgorKyAg
ICAgICAgICAgIHJldHVybiAiQU5HTEVfZG90IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BOb3JtYWxpemU6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9ub3JtYWxpemUiOworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZhY2Vmb3J3YXJkOgorKyAgICAgICAgICAgIHJldHVy
biAiQU5HTEVfZmFjZWZvcndhcmQiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZmxl
Y3Q6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9yZWZsZWN0IjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BNdWxNYXRyaXhDb21wb25lbnRXaXNlOgorKyAgICAgICAgICAgIHJldHVy
biAiQU5HTEVfY29tcG9uZW50V2lzZU11bHRpcGx5IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BPdXRlclByb2R1Y3Q6CisrICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9vdXRlclByb2R1
Y3QiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNpZ246CisrICAgICAgICAgICAgcmV0
dXJuICJBTkdMRV9zaWduIjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBYnM6Cisr
ICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWJzIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BBbGw6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWxsIjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BBbnk6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YW55IjsK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaW46CisrICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6c2luIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3M6CisrICAgICAgICAg
ICAgcmV0dXJuICJtZXRhbDo6Y29zIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUYW46
CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dGFuIjsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBc2luOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFzaW4iOworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3M6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
YWNvcyI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luaDoKKysgICAgICAgICAgICBy
ZXR1cm4gIm1ldGFsOjpzaW5oIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb3NoOgor
KyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvc2giOworKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFRhbmg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6dGFuaCI7CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbmg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6
YXNpbmgiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorKyAgICAgICAgICAg
IHJldHVybiAibWV0YWw6OmFjb3NoIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFu
aDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjphdGFuaCI7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wRm1hOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZtYSI7CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG93OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OnBvdyI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwOgorKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmV4cCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwMjoKKysg
ICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpleHAyIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BMb2c6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bG9nIjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BMb2cyOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmxvZzIi
OworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisrICAgICAgICAgICAgcmV0dXJu
ICJtZXRhbDo6c3FydCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvb3I6CisrICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6Zmxvb3IiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFRydW5jOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnRydW5jIjsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BDZWlsOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNl
aWwiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZyYWN0OgorKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmZyYWN0IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNaW46Cisr
ICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bWluIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNYXg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6bWF4IjsKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BSb3VuZDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyb3Vu
ZCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmRFdmVuOgorKyAgICAgICAgICAg
IHJldHVybiAibWV0YWw6OnJpbnQiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENsYW1w
OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNsYW1wIjsgIC8vIFRPRE8gZmFzdCB2cyBw
cmVjaXNlIG5hbWVzcGFjZQorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1peDoKKysgICAg
ICAgICAgICByZXR1cm4gIm1ldGFsOjptaXgiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFN0ZXA6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6c3RlcCI7CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wU21vb3Roc3RlcDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpz
bW9vdGhzdGVwIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2RmOgorKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6Om1vZGYiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElz
bmFuOgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmlzbmFuIjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJc2luZjoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjppc2luZiI7
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGRleHA6CisrICAgICAgICAgICAgcmV0dXJu
ICJtZXRhbDo6bGRleHAiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZyZXhwOgorKyAg
ICAgICAgICAgIHJldHVybiAibWV0YWw6OmZyZXhwIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbnZlcnNlc3FydDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyc3FydCI7Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ3Jvc3M6CisrICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6Y3Jvc3MiOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERGZHg6CisrICAgICAg
ICAgICAgcmV0dXJuICJtZXRhbDo6ZGZkeCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
REZkeToKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpkZmR5IjsKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BGd2lkdGg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZndpZHRo
IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6CisrICAgICAgICAgICAg
cmV0dXJuICJtZXRhbDo6dHJhbnNwb3NlIjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BE
ZXRlcm1pbmFudDoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpkZXRlcm1pbmFudCI7Cisr
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJzZToKKysgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX2ludmVyc2UiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0
Qml0c1RvSW50OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvVWludDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbnRCaXRzVG9GbG9hdDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BVaW50Qml0c1RvRmxvYXQ6CisrICAgICAgICB7CisrI2RlZmluZSBS
RVRVUk5fQVNfVFlQRShwb3N0KSAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgZG8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3dpdGNoIChy
ZXN1bHRUeXBlLmdldEJhc2ljVHlwZSgpKSAgICAgICBcCisrICAgICAgICB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5
cGU6OkVidEludDogICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICByZXR1cm4gImFzX3R5
cGU8aW50IiBwb3N0ICI+IjsgICBcCisrICAgICAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRV
SW50OiAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgcmV0dXJuICJhc190eXBlPHVpbnQi
IHBvc3QgIj4iOyAgXAorKyAgICAgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6ICAg
ICAgICAgICBcCisrICAgICAgICAgICAgICAgIHJldHVybiAiYXNfdHlwZTxmbG9hdCIgcG9zdCAi
PiI7IFwKKysgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorKyAgICAgICAgICAgICAgICBUT0RPKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RPRE8iOyAgICAgICAgIFwKKysgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB3aGls
ZSAoZmFsc2UpCisrCisrICAgICAgICAgICAgaWYgKHJlc3VsdFR5cGUuaXNTY2FsYXIoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIFJFVFVSTl9BU19UWVBFKCIiKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0VHlwZS5pc1ZlY3RvcigpKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgc3dpdGNoIChyZXN1bHRUeXBlLmdldE5v
bWluYWxTaXplKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjoKKysgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiMiIpOworKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9BU19UWVBFKCIzIik7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0FTX1RZUEUoIjQiKTsKKysgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBUT0RPKCk7CisrICAgICAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RP
RE8iOworKyAgICAgICAgICAgIH0KKysKKysjdW5kZWYgUkVUVVJOX0FTX1RZUEUKKysgICAgICAg
IH0KKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrVW5vcm0yeDE2OgorKyAgICAg
ICAgICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fdW5vcm0yeDE2IjsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrU25vcm0yeDE2OgorKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm0yeDE2IjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQYWNrVW5vcm00eDg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cGFja19m
bG9hdF90b191bm9ybTR4OCI7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Nub3Jt
NHg4OgorKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm00eDgi
OworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Vub3JtMngxNjoKKysgICAg
ICAgICAgICByZXR1cm4gIm1ldGFsOjp1bnBhY2tfdW5vcm0yeDE2X3RvX2Zsb2F0IjsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTJ4MTY6CisrICAgICAgICAgICAgcmV0
dXJuICJtZXRhbDo6dW5wYWNrX3Nub3JtMngxNl90b19mbG9hdCI7CisrCisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wVW5wYWNrVW5vcm00eDg6CisrICAgICAgICAgICAgcmV0dXJuICJtZXRh
bDo6dW5wYWNrX3Vub3JtNHg4X3RvX2Zsb2F0IjsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BVbnBhY2tTbm9ybTR4ODoKKysgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp1bnBhY2tfc25v
cm00eDhfdG9fZmxvYXQiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tIYWxm
MngxNjoKKysgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3BhY2tfaGFsZl8yeDE2IjsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tIYWxmMngxNjoKKysgICAgICAgICAgICByZXR1
cm4gIkFOR0xFX3VucGFja19oYWxmXzJ4MTYiOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEJpdGZpZWxkRXh0cmFjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVs
ZEluc2VydDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZFJldmVyc2U6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0Q291bnQ6CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wRmluZExTQjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5kTVNCOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVhZGRDYXJyeToKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVtdWxF
eHRlbmRlZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbXVsRXh0ZW5kZWQ6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNZW1vcnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJh
cnJpZXJBdG9taWNDb3VudGVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJh
cnJpZXJCdWZmZXI6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllcklt
YWdlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJTaGFyZWQ6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FkZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBdG9taWNNaW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4OgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FuZDoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBdG9taWNPcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNYb3I6
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljRXhjaGFuZ2U6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQ29tcFN3YXA6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRW1pdFZlcnRleDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFbmRQcmltaXRp
dmU6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRlRyYW5zZm9ybToKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BVbnBhY2tEb3VibGUyeDMyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFycmF5
TGVuZ3RoOgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gIlRPcGVy
YXRvcl9UT0RPIjsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbnN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxs
SW50ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsQnVp
bHRJbkZ1bmN0aW9uOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0Ogor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgICAgICBMT0dJQ19FUlJP
UigpOworKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICB9CisrfQorKworKyNpZiAw
Cisrc3RhdGljIGludCBHZXRPcGVyYXRvclByZWNlZGVuY2UoVE9wZXJhdG9yIG9wKQorK3sKKysg
ICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbW1h
OiB7CisrICAgICAgICAgICAgcmV0dXJuIDE3OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5pdGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRBc3NpZ246Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3Np
Z246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BCaXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VY
b3JBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOiB7
CisrICAgICAgICAgICAgcmV0dXJuIDE2OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3I6IHsKKysgICAgICAgICAgICByZXR1cm4gMTU7
CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2lj
YWxBbmQ6IHsKKysgICAgICAgICAgICByZXR1cm4gMTQ7CisrICAgICAgICB9IGJyZWFrOworKwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPcjogeworKyAgICAgICAgICAgIHJl
dHVybiAxMzsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQml0d2lzZVhvcjogeworKyAgICAgICAgICAgIHJldHVybiAxMjsKKysgICAgICAgIH0gYnJl
YWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDogeworKyAgICAg
ICAgICAgIHJldHVybiAxMTsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVh
bDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDogeworKyAgICAgICAgICAg
IHJldHVybiAxMDsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTGVzc1RoYW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW46
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkVxdWFsOiB7CisrICAgICAgICAgICAgcmV0dXJu
IDk7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dFNoaWZ0TGVmdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0OiB7
CisrICAgICAgICAgICAgcmV0dXJuIDc7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEFkZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWI6
IHsKKysgICAgICAgICAgICByZXR1cm4gNjsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERp
djoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kOiB7CisrICAgICAgICAgICAgcmV0
dXJuIDU7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE5lZ2F0aXZlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc2l0aXZlOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU5vdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQcmVJbmNyZW1l
bnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlRGVjcmVtZW50OiB7CisrICAgICAg
ICAgICAgcmV0dXJuIDM7CisrICAgICAgICB9IGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFBvc3RJbmNyZW1lbnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9z
dERlY3JlbWVudDogeworKyAgICAgICAgICAgIHJldHVybiAyOworKyAgICAgICAgfSBicmVhazsK
KysKKysgICAgICAgIGRlZmF1bHQ6IHsKKysgICAgICAgICAgICBUT0RPKCk7CisrICAgICAgICAg
ICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworK25hbWVzcGFjZQorK3sK
KysKKytlbnVtIGNsYXNzIEFzc29jaWF0aXZpdHkKKyt7CisrICAgIE5vbmUsCisrICAgIExlZnQs
CisrICAgIFJpZ2h0LAorK307CisrCisrfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrc3Rh
dGljIEFzc29jaWF0aXZpdHkgR2V0QXNzb2NpYXRpdml0eShUT3BlcmF0b3Igb3ApCisreworKyAg
ICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNdWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2OgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hp
ZnRMZWZ0OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDoKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BCaXR3aXNlWG9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VP
cjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BOb3RFcXVhbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhh
bjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEdyZWF0ZXJUaGFuRXF1YWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNh
bE9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxYb3I6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbEFuZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BDb21tYTogeworKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lhdGl2aXR5OjpMZWZ0OworKyAg
ICAgICAgfSBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BBZGRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNz
aWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
SU1vZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3Np
Z246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU9yQXNzaWduOiB7CisrICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZp
dHk6OlJpZ2h0OworKyAgICAgICAgfSBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BOZWdhdGl2ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3NpdGl2ZToKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90OgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdElu
Y3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQcmVEZWNyZW1lbnQ6IHsKKysgICAgICAgICAgICByZXR1cm4gQXNzb2NpYXRp
dml0eTo6Tm9uZTsKKysgICAgICAgIH0gYnJlYWs7CisrCisrICAgICAgICBkZWZhdWx0OiB7Cisr
ICAgICAgICAgICAgVE9ETygpOworKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lhdGl2aXR5OjpO
b25lOworKyAgICAgICAgfQorKyAgICB9CisrfQorKyNlbmRpZgorKworK3N0YXRpYyBib29sIElz
U3ltYm9saWNPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTAsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIpCisreworKyAgICBpZiAob3Ag
PT0gVE9wZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1bmN0aW9uKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0dXJuICFzdGQ6OmlzYWxudW0oR2V0T3BlcmF0
b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsIGFyZ1R5cGUwLCBhcmdUeXBlMSlbMF0pOworK30KKysK
KytzdGF0aWMgVEludGVybUJpbmFyeSAqQXNTcGVjaWZpY0JpbmFyeU5vZGUoVEludGVybU5vZGUg
Jm5vZGUsIFRPcGVyYXRvciBvcCkKKyt7CisrICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUg
PSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpOworKyAgICBpZiAoYmluYXJ5Tm9kZSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIGJpbmFyeU5vZGUtPmdldE9wKCkgPT0gb3AgPyBiaW5hcnlOb2RlIDog
bnVsbHB0cjsKKysgICAgfQorKyAgICByZXR1cm4gbnVsbHB0cjsKKyt9CisrCisrc3RhdGljIGJv
b2wgUGFyZW50aGVzaXplKFRJbnRlcm1Ob2RlICZub2RlKQorK3sKKysgICAgaWYgKG5vZGUuZ2V0
QXNTeW1ib2xOb2RlKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KyAgICBpZiAobm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlmIChub2RlLmdldEFzQWdncmVnYXRlKCkpCisrICAg
IHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRBc1N3
aXp6bGVOb2RlKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKwor
KyAgICBpZiAoVEludGVybVVuYXJ5ICp1bmFyeU5vZGUgPSBub2RlLmdldEFzVW5hcnlOb2RlKCkp
CisrICAgIHsKKysgICAgICAgIC8vIFRPRE86IFVzZSBhIHByZWNlZGVuY2UgYW5kIGFzc29jaWF0
aXZpdHkgcnVsZXMgaW5zdGVhZCBvZiB0aGlzIGFkLWhvYyBpbXBsLgorKyAgICAgICAgY29uc3Qg
VFR5cGUgJnJlc3VsdFR5cGUgPSB1bmFyeU5vZGUtPmdldFR5cGUoKTsKKysgICAgICAgIGNvbnN0
IFRUeXBlICZhcmdUeXBlICAgID0gdW5hcnlOb2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKTsK
KysgICAgICAgIHJldHVybiBJc1N5bWJvbGljT3BlcmF0b3IodW5hcnlOb2RlLT5nZXRPcCgpLCBy
ZXN1bHRUeXBlLCAmYXJnVHlwZSk7CisrICAgIH0KKysKKysgICAgaWYgKFRJbnRlcm1CaW5hcnkg
KmJpbmFyeU5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpKQorKyAgICB7CisrICAgICAgICAv
LyBUT0RPOiBVc2UgYSBwcmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5IHJ1bGVzIGluc3RlYWQg
b2YgdGhpcyBhZC1ob2MgaW1wbC4KKysgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFy
eU5vZGUtPmdldE9wKCk7CisrICAgICAgICBzd2l0Y2ggKG9wKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisrICAgICAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAgICAgICAgICAgIHJldHVybiBQYXJl
bnRoZXNpemUoKmJpbmFyeU5vZGUtPmdldExlZnQoKSk7CisrCisrICAgICAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5p
dGlhbGl6ZToKKysgICAgICAgICAgICAgICAgcmV0dXJuIEFzU3BlY2lmaWNCaW5hcnlOb2RlKCpi
aW5hcnlOb2RlLT5nZXRSaWdodCgpLCBUT3BlcmF0b3I6OkVPcENvbW1hKTsKKysKKysgICAgICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJnJlc3VsdFR5cGUgPSBiaW5hcnlOb2RlLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAgICAg
IGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBl
KCk7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5cGUgID0gYmluYXJ5Tm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworKyAgICAgICAgICAgICAgICByZXR1cm4gSXNTeW1i
b2xpY09wZXJhdG9yKGJpbmFyeU5vZGUtPmdldE9wKCksIHJlc3VsdFR5cGUsICZsZWZ0VHlwZSwg
JnJpZ2h0VHlwZSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrCisrICAg
IHJldHVybiB0cnVlOworK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjpncm91cGVkVHJh
dmVyc2UoVEludGVybU5vZGUgJm5vZGUpCisreworKyAgICBjb25zdCBib29sIGVtaXRQYXJlbnMg
PSBQYXJlbnRoZXNpemUobm9kZSk7CisrCisrICAgIGlmIChlbWl0UGFyZW5zKQorKyAgICB7Cisr
ICAgICAgICBtT3V0IDw8ICIoIjsKKysgICAgfQorKworKyAgICBub2RlLnRyYXZlcnNlKHRoaXMp
OworKworKyAgICBpZiAoZW1pdFBhcmVucykKKysgICAgeworKyAgICAgICAgbU91dCA8PCAiKSI7
CisrICAgIH0KKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZp
ZXIoY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZywKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYXJEZWNsICZkZWNs
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFs
aWZpZXIgcXVhbGlmaWVyKQorK3sKKysgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgIHsKKysg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisrICAgICAgICBjYXNlIFRRdWFs
aWZpZXI6OkV2cUZyYWdDb29yZDoKKysgICAgICAgICAgICBtT3V0IDw8ICIgW1twb3NpdGlvbl1d
IjsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
UG9pbnRTaXplOgorKyAgICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50X3NpemVdXSI7CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElE
OgorKyAgICAgICAgICAgIGlmIChldmRDb25maWcuaXNNYWluUGFyYW1ldGVyKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbdmVydGV4X2lkXV0iOworKyAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxUG9pbnRDb29yZDoKKysgICAgICAgICAgICBpZiAoZXZkQ29uZmlnLmlzTWFpblBhcmFt
ZXRlcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50
X2Nvb3JkXV0iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAg
ICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJvbnRGYWNpbmc6CisrICAgICAgICAgICAgaWYgKGV2
ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBtT3V0IDw8ICIgW1tmcm9udF9mYWNpbmddXSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBicmVhazsKKysg
ICAgfQorKworKyAgICBjb25zdCBib29sIGlzSW52YXJpYW50ID0KKysgICAgICAgIGRlY2wuaXNG
aWVsZCgpID8gbUludmFyaWFudHMuY29udGFpbnMoZGVjbC5maWVsZCgpKSA6IG1JbnZhcmlhbnRz
LmNvbnRhaW5zKGRlY2wudmFyaWFibGUoKSk7CisrCisrICAgIGlmIChpc0ludmFyaWFudCkKKysg
ICAgeworKyAgICAgICAgbU91dCA8PCAiIFtbaW52YXJpYW50XV0iOworKyAgICB9CisrfQorKwor
K3N0YXRpYyB2b2lkIEVtaXROYW1lKFNpbmsgJm91dCwgY29uc3QgTmFtZSAmbmFtZSkKKyt7Cisr
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisrICAgIERlYnVnU2luazo6RXNjYXBl
ZFNpbmsgZXNjYXBlZE91dChvdXQuZXNjYXBlKCkpOworKyNlbHNlCisrICAgIFRJbmZvU2lua0Jh
c2UgJmVzY2FwZWRPdXQgPSBvdXQ7CisrI2VuZGlmCisrICAgIG5hbWUuZW1pdChlc2NhcGVkT3V0
KTsKKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBURmll
bGQgJm9iamVjdCkKKyt7CisrICAgIEVtaXROYW1lKG1PdXQsIE5hbWUob2JqZWN0KSk7CisrfQor
KworK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YoY29uc3QgVFN5bWJvbCAmb2Jq
ZWN0KQorK3sKKysgICAgYXV0byBpdCA9IG1SZW5hbWVkU3ltYm9scy5maW5kKCZvYmplY3QpOwor
KyAgICBpZiAoaXQgPT0gbVJlbmFtZWRTeW1ib2xzLmVuZCgpKQorKyAgICB7CisrICAgICAgICBF
bWl0TmFtZShtT3V0LCBOYW1lKG9iamVjdCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgewor
KyAgICAgICAgRW1pdE5hbWUobU91dCwgaXQtPnNlY29uZCk7CisrICAgIH0KKyt9CisrCisrdm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBWYXJEZWNsICZvYmplY3QpCisr
eworKyAgICBpZiAob2JqZWN0LmlzRmllbGQoKSkKKysgICAgeworKyAgICAgICAgZW1pdE5hbWVP
ZihvYmplY3QuZmllbGQoKSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBl
bWl0TmFtZU9mKG9iamVjdC52YXJpYWJsZSgpKTsKKysgICAgfQorK30KKysKKyt2b2lkIEdlbk1l
dGFsVHJhdmVyc2VyOjplbWl0QmFyZVR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBF
bWl0VHlwZUNvbmZpZyAmZXRDb25maWcpCisreworKyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2lj
VHlwZSA9IHR5cGUuZ2V0QmFzaWNUeXBlKCk7CisrCisrICAgIHN3aXRjaCAoYmFzaWNUeXBlKQor
KyAgICB7CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFZvaWQ6CisrICAgICAgICBjYXNl
IFRCYXNpY1R5cGU6OkVidEJvb2w6CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0
OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRJbnQ6CisrICAgICAgICBjYXNlIFRCYXNp
Y1R5cGU6OkVidFVJbnQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCB0eXBlLmdl
dEJhc2ljU3RyaW5nKCk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAg
IGNhc2UgVEJhc2ljVHlwZTo6RWJ0U3RydWN0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAg
ICAgIGVtaXROYW1lT2Yoc3RydWN0dXJlKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOwor
KworKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRJbnRlcmZhY2VCbG9jazoKKysgICAgICAg
IHsKKysgICAgICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrID0g
KnR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKysgICAgICAgICAgICBlbWl0TmFtZU9mKGludGVy
ZmFjZUJsb2NrKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVm
YXVsdDoKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoSXNTYW1wbGVyKGJhc2ljVHlwZSkp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoZXRDb25maWcuZXZkQ29uZmln
ICYmIGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNNYWluUGFyYW1ldGVyKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBFbWl0TmFtZShtT3V0LCBHZXRUZXh0dXJlVHlwZU5h
bWUoYmFzaWNUeXBlKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxz
ZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0
dXJlICZlbnYgPSBtU3ltYm9sRW52LmdldFRleHR1cmVFbnYoYmFzaWNUeXBlKTsKKysgICAgICAg
ICAgICAgICAgICAgIGVtaXROYW1lT2YoZW52KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBUT0RPKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrfQorKwor
K3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRUeXBlKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25z
dCBFbWl0VHlwZUNvbmZpZyAmZXRDb25maWcpCisreworKyAgICBpZiAoZXRDb25maWcuZXZkQ29u
ZmlnKQorKyAgICB7CisrICAgICAgICBjb25zdCBhdXRvICZldmRDb25maWcgPSAqZXRDb25maWcu
ZXZkQ29uZmlnOworKyAgICAgICAgaWYgKGV2ZENvbmZpZy5pc1BvaW50ZXIpCisrICAgICAgICB7
CisrICAgICAgICAgICAgbU91dCA8PCB0b1N0cmluZygqZXZkQ29uZmlnLmlzUG9pbnRlcik7Cisr
ICAgICAgICAgICAgbU91dCA8PCAiICI7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChl
dmRDb25maWcuaXNSZWZlcmVuY2UpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCB0
b1N0cmluZygqZXZkQ29uZmlnLmlzUmVmZXJlbmNlKTsKKysgICAgICAgICAgICBtT3V0IDw8ICIg
IjsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkpCisrICAg
IHsKKysgICAgICAgIG1PdXQgPDwgIkFOR0xFX3RlbnNvcjwiOworKyAgICB9CisrCisrICAgIGlm
ICh0eXBlLmlzVmVjdG9yKCkgfHwgdHlwZS5pc01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICBt
T3V0IDw8ICJtZXRhbDo6IjsKKysgICAgfQorKworKyAgICBpZiAoZXRDb25maWcuZXZkQ29uZmln
ICYmIGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNQYWNrZWQpCisrICAgIHsKKysgICAgICAgIG1PdXQg
PDwgInBhY2tlZF8iOworKyAgICB9CisrCisrICAgIGVtaXRCYXJlVHlwZU5hbWUodHlwZSwgZXRD
b25maWcpOworKworKyAgICBpZiAodHlwZS5pc1ZlY3RvcigpKQorKyAgICB7CisrICAgICAgICBt
T3V0IDw8IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKysgICAgfQorKyAgICBlbHNlIGlmICh0eXBl
LmlzTWF0cml4KCkpCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgdHlwZS5nZXRDb2xzKCkgPDwg
IngiIDw8IHR5cGUuZ2V0Um93cygpOworKyAgICB9CisrCisrICAgIGlmICh0eXBlLmlzQXJyYXko
KSkKKysgICAgeworKyAgICAgICAgZm9yIChhdXRvIHNpemUgOiB0eXBlLmdldEFycmF5U2l6ZXMo
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIsICIgPDwgc2l6ZTsKKysgICAg
ICAgIH0KKysgICAgICAgIG1PdXQgPDwgIj4iOworKyAgICB9CisrCisrICAgIGlmIChldENvbmZp
Zy5ldmRDb25maWcpCisrICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8gJmV2ZENvbmZpZyA9ICpl
dENvbmZpZy5ldmRDb25maWc7CisrICAgICAgICBpZiAoZXZkQ29uZmlnLmlzUG9pbnRlcikKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIgKiI7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlIGlmIChldmRDb25maWcuaXNSZWZlcmVuY2UpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgbU91dCA8PCAiICYiOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworK3ZvaWQgR2VuTWV0
YWxUcmF2ZXJzZXI6OmVtaXRGaWVsZERlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cnVj
dHVyZSAmcGFyZW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKQorK3sKKysgICAg
Y29uc3QgVFR5cGUgJnR5cGUgICAgICA9ICpmaWVsZC50eXBlKCk7CisrICAgIGNvbnN0IFRCYXNp
Y1R5cGUgYmFzaWMgPSB0eXBlLmdldEJhc2ljVHlwZSgpOworKworKyAgICBFbWl0VmFyaWFibGVE
ZWNsYXJhdGlvbkNvbmZpZyBldmRDb25maWc7CisrICAgIGV2ZENvbmZpZy5lbWl0UG9zdFF1YWxp
ZmllciAgICAgID0gdHJ1ZTsKKysgICAgZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIg
PSB0cnVlOworKyAgICBldmRDb25maWcuaXNQYWNrZWQgICAgICAgICAgICAgICA9IG1TeW1ib2xF
bnYuaXNQYWNrZWQoZmllbGQpOworKyAgICBldmRDb25maWcuaXNQb2ludGVyICAgICAgICAgICAg
ICA9IG1TeW1ib2xFbnYuaXNQb2ludGVyKGZpZWxkKTsKKysgICAgZXZkQ29uZmlnLmlzUmVmZXJl
bmNlICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUmVmZXJlbmNlKGZpZWxkKTsKKysgICAgZW1p
dFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyRGVjbChmaWVsZCksIGV2ZENvbmZpZyk7CisrCisrICAg
IGNvbnN0IFRRdWFsaWZpZXIgcXVhbCA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisrICAgIHN3aXRj
aCAocXVhbCkKKysgICAgeworKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0SW46Cisr
ICAgICAgICAgICAgaWYgKG1QaXBlbGluZVN0cnVjdHMuZnJhZ21lbnRJbi5leHRlcm5hbCA9PSAm
cGFyZW50KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZmxh
dF1dIjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBj
YXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdtZW50T3V0OgorKyAgICAgICAgY2FzZSBUUXVhbGlmaWVy
OjpFdnFGcmFnRGF0YToKKysgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVu
dE91dC5leHRlcm5hbCA9PSAmcGFyZW50KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgaWYgKCh0eXBlLmlzVmVjdG9yKCkgJiYKKysgICAgICAgICAgICAgICAgICAgICAoYmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0SW50IHx8IGJhc2ljID09IFRCYXNpY1R5cGU6OkVidFVJbnQgfHwK
KysgICAgICAgICAgICAgICAgICAgICAgYmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQpKSB8
fAorKyAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFGcmFnRGF0
YSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzoKKysg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGNvcnJlY3QgaW4gZ2VuZXJhbCBhbmQg
bmVlZHMgYSByZWltcGxlbWVudGF0aW9uLgorKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gR0xT
TCAzLjAsIFdlIGNhbid0IGFsd2F5cyBhc3N1bWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIHNhZmUg
aW5kZXguCisrICAgICAgICAgICAgICAgICAgICAvLyBTZWUgNC4zLjguMgorKyAgICAgICAgICAg
ICAgICAgICAgLy8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkdML3NwZWNz
L2VzLzMuMC9HTFNMX0VTX1NwZWNpZmljYXRpb25fMy4wMC5wZGYKKysgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBpbmRleCA9IGFubm90YXRpb25JbmRpY2VzLmNvbG9yKys7CisrICAgICAgICAg
ICAgICAgICAgICBtT3V0IDw8ICIgW1tjb2xvcigiIDw8IGluZGV4IDw8ICIpXV0iOworKyAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAg
ICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnRGVwdGg6CisrICAgICAgICAgICAgbU91dCA8
PCAiIFtbZGVwdGgoYW55KV1dIjsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRl
ZmF1bHQ6CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9CisrCisrc3RhdGljIHN0ZDo6
bWFwPE5hbWUsIHNpemVfdD4gQnVpbGRFeHRlcm5hbEF0dHJpYnV0ZUluZGV4TWFwKAorKyAgICBj
b25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICBjb25zdCBQaXBlbGluZVNjb3BlZDxUU3Ry
dWN0dXJlPiAmc3RydWN0dXJlKQorK3sKKysgICAgQVNTRVJUKHN0cnVjdHVyZS5pc1RvdGFsbHlG
dWxsKCkpOworKworKyAgICBjb25zdCBhdXRvICZzaGFkZXJWYXJzICAgICA9IGNvbXBpbGVyLmdl
dEF0dHJpYnV0ZXMoKTsKKysgICAgY29uc3Qgc2l6ZV90IHNoYWRlclZhclNpemUgPSBzaGFkZXJW
YXJzLnNpemUoKTsKKysgICAgc2l6ZV90IHNoYWRlclZhckluZGV4ICAgICAgPSAwOworKworKyAg
ICBjb25zdCBhdXRvICZleHRlcm5hbEZpZWxkcyA9IHN0cnVjdHVyZS5leHRlcm5hbC0+ZmllbGRz
KCk7CisrICAgIGNvbnN0IHNpemVfdCBleHRlcm5hbFNpemUgID0gZXh0ZXJuYWxGaWVsZHMuc2l6
ZSgpOworKyAgICBzaXplX3QgZXh0ZXJuYWxJbmRleCAgICAgICA9IDA7CisrCisrICAgIGNvbnN0
IGF1dG8gJmludGVybmFsRmllbGRzID0gc3RydWN0dXJlLmludGVybmFsLT5maWVsZHMoKTsKKysg
ICAgY29uc3Qgc2l6ZV90IGludGVybmFsU2l6ZSAgPSBpbnRlcm5hbEZpZWxkcy5zaXplKCk7Cisr
ICAgIHNpemVfdCBpbnRlcm5hbEluZGV4ICAgICAgID0gMDsKKysKKysgICAgLy8gSW50ZXJuYWwg
ZmllbGRzIGFyZSBuZXZlciBzcGxpdC4gRXh0ZXJuYWwgZmllbGRzIGFyZSBzb21ldGltZXMgc3Bs
aXQuCisrICAgIEFTU0VSVChleHRlcm5hbFNpemUgPj0gaW50ZXJuYWxTaXplKTsKKysKKysgICAg
Ly8gU3RydWN0dXJlcyBkbyBub3QgY29udGFpbiBhbnkgaW5hY3RpdmUgZmllbGRzLgorKyAgICBB
U1NFUlQoc2hhZGVyVmFyU2l6ZSA+PSBpbnRlcm5hbFNpemUpOworKworKyAgICBzdGQ6Om1hcDxO
YW1lLCBzaXplX3Q+IGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXg7CisrICAgIHNpemVfdCBh
dHRyaWJ1dGVJbmRleCA9IDA7CisrCisrICAgIHdoaWxlIChpbnRlcm5hbEluZGV4IDwgaW50ZXJu
YWxTaXplKQorKyAgICB7CisrICAgICAgICBjb25zdCBURmllbGQgJmludGVybmFsRmllbGQgPSAq
aW50ZXJuYWxGaWVsZHNbaW50ZXJuYWxJbmRleF07CisrICAgICAgICBjb25zdCBOYW1lIGludGVy
bmFsTmFtZSAgICAgPSBOYW1lKGludGVybmFsRmllbGQpOworKyAgICAgICAgY29uc3QgVFR5cGUg
JmludGVybmFsVHlwZSAgID0gKmludGVybmFsRmllbGQudHlwZSgpOworKyAgICAgICAgd2hpbGUg
KGludGVybmFsTmFtZS5yYXdOYW1lKCkgIT0gc2hhZGVyVmFyc1tzaGFkZXJWYXJJbmRleF0ubmFt
ZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBUaGlzIGNhc2UgcmVwcmVzZW50cyBhbiBp
bmFjdGl2ZSBmaWVsZC4KKysKKysgICAgICAgICAgICArK3NoYWRlclZhckluZGV4OworKyAgICAg
ICAgICAgIEFTU0VSVChzaGFkZXJWYXJJbmRleCA8IHNoYWRlclZhclNpemUpOworKworKyAgICAg
ICAgICAgICsrYXR0cmlidXRlSW5kZXg7ICAvLyBUT0RPOiBNaWdodCBuZWVkIHRvIGluY3JlbWVu
dCBtb3JlIGlmIHNoYWRlciB2YXIgdHlwZSBpcyBhIG1hdHJpeC4KKysgICAgICAgIH0KKysKKysg
ICAgICAgIGNvbnN0IHNpemVfdCBjb2xzID0gaW50ZXJuYWxUeXBlLmlzTWF0cml4KCkgPyBpbnRl
cm5hbFR5cGUuZ2V0Q29scygpIDogMTsKKysKKysgICAgICAgIGZvciAoc2l6ZV90IGMgPSAwOyBj
IDwgY29sczsgKytjKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZXh0
ZXJuYWxGaWVsZCA9ICpleHRlcm5hbEZpZWxkc1tleHRlcm5hbEluZGV4XTsKKysgICAgICAgICAg
ICBjb25zdCBOYW1lIGV4dGVybmFsTmFtZSAgICAgPSBOYW1lKGV4dGVybmFsRmllbGQpOworKyAg
ICAgICAgICAgIEFTU0VSVCghZXh0ZXJuYWxGaWVsZC50eXBlKCktPmlzTWF0cml4KCkpOworKwor
KyAgICAgICAgICAgIGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXhbZXh0ZXJuYWxOYW1lXSA9
IGF0dHJpYnV0ZUluZGV4OworKworKyAgICAgICAgICAgICsrZXh0ZXJuYWxJbmRleDsKKysgICAg
ICAgICAgICArK2F0dHJpYnV0ZUluZGV4OworKyAgICAgICAgfQorKworKyAgICAgICAgKytzaGFk
ZXJWYXJJbmRleDsKKysgICAgICAgICsraW50ZXJuYWxJbmRleDsKKysgICAgfQorKworKyAgICBB
U1NFUlQoc2hhZGVyVmFySW5kZXggPD0gc2hhZGVyVmFyU2l6ZSk7CisrICAgIEFTU0VSVChleHRl
cm5hbEluZGV4IDw9IGV4dGVybmFsU2l6ZSk7ICAvLyBsZXNzIHRoYW4gaWYgcGFkZGluZyB3YXMg
aW50cm9kdWNlZAorKyAgICBBU1NFUlQoaW50ZXJuYWxJbmRleCA9PSBpbnRlcm5hbFNpemUpOwor
KworKyAgICByZXR1cm4gZXh0ZXJuYWxOYW1lVG9BdHRyaWJ1dGVJbmRleDsKKyt9CisrCisrdm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEF0dHJpYnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVs
ZCAmZmllbGQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKQorK3sKKysgICAg
RW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgZXZkQ29uZmlnOworKyAgICBldmRDb25maWcu
ZGlzYWJsZVN0cnVjdFNwZWNpZmllciA9IHRydWU7CisrICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0
aW9uKFZhckRlY2woZmllbGQpLCBldmRDb25maWcpOworKyAgICBtT3V0IDw8ICIgW1thdHRyaWJ1
dGUoIiA8PCBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUrKyA8PCAiKV1dIjsKKyt9CisrCisr
dm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFN0cnVjdERlY2xhcmF0aW9uKGNvbnN0IFRUeXBl
ICZ0eXBlKQorK3sKKysgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlw
ZTo6RWJ0U3RydWN0KTsKKysgICAgQVNTRVJUKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSk7Cisr
CisrICAgIG1PdXQgPDwgInN0cnVjdCAiOworKyAgICBlbWl0QmFyZVR5cGVOYW1lKHR5cGUsIHt9
KTsKKysKKysgICAgbU91dCA8PCAiXG4iOworKyAgICBlbWl0T3BlbkJyYWNlKCk7CisrCisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworKyAgICBz
dGQ6Om1hcDxOYW1lLCBzaXplX3Q+IGZpZWxkVG9BdHRyaWJ1dGVJbmRleDsKKysgICAgY29uc3Qg
Ym9vbCBoYXNBdHRyaWJ1dGVJbmRpY2VzICAgICAgICAgICA9IG1QaXBlbGluZVN0cnVjdHMudmVy
dGV4SW4uZXh0ZXJuYWwgPT0gJnN0cnVjdHVyZTsKKysgICAgY29uc3QgYm9vbCByZWNsYWltVW51
c2VkQXR0cmlidXRlSW5kaWNlcyA9IG1Db21waWxlci5nZXRTaGFkZXJWZXJzaW9uKCkgPCAzMDA7
CisrCisrICAgIGlmIChoYXNBdHRyaWJ1dGVJbmRpY2VzKQorKyAgICB7CisrICAgICAgICBmaWVs
ZFRvQXR0cmlidXRlSW5kZXggPQorKyAgICAgICAgICAgIEJ1aWxkRXh0ZXJuYWxBdHRyaWJ1dGVJ
bmRleE1hcChtQ29tcGlsZXIsIG1QaXBlbGluZVN0cnVjdHMudmVydGV4SW4pOworKyAgICB9Cisr
CisrICAgIEZpZWxkQW5ub3RhdGlvbkluZGljZXMgYW5ub3RhdGlvbkluZGljZXM7CisrCisrICAg
IGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IHN0cnVjdHVyZS5maWVsZHMoKSkKKysgICAgewor
KyAgICAgICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgICAgICBpZiAoaGFzQXR0cmlidXRlSW5k
aWNlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBhdXRvIGl0ID0gZmllbGRUb0F0
dHJpYnV0ZUluZGV4LmZpbmQoTmFtZSgqZmllbGQpKTsKKysgICAgICAgICAgICBpZiAoaXQgPT0g
ZmllbGRUb0F0dHJpYnV0ZUluZGV4LmVuZCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgQVNTRVJUKGZpZWxkLT5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbCk7CisrICAgICAgICAgICAgICAgIEFTU0VSVChmaWVsZC0+bmFtZSgpLmJlZ2luc1dpdGgo
Il8iKSk7CisrICAgICAgICAgICAgICAgIEFTU0VSVChhbmdsZTo6RW5kc1dpdGgoZmllbGQtPm5h
bWUoKS5kYXRhKCksICJfcGFkIikpOworKyAgICAgICAgICAgICAgICBlbWl0RmllbGREZWNsYXJh
dGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3RhdGlvbkluZGljZXMpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBB
U1NFUlQoZmllbGQtPnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsIHx8
CisrICAgICAgICAgICAgICAgICAgICAgICAhZmllbGQtPm5hbWUoKS5iZWdpbnNXaXRoKCJfIikg
fHwKKysgICAgICAgICAgICAgICAgICAgICAgICFhbmdsZTo6RW5kc1dpdGgoZmllbGQtPm5hbWUo
KS5kYXRhKCksICJfcGFkIikpOworKyAgICAgICAgICAgICAgICBpZiAoIXJlY2xhaW1VbnVzZWRB
dHRyaWJ1dGVJbmRpY2VzKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
ICBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUgPSBpdC0+c2Vjb25kOworKyAgICAgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgICAgIGVtaXRBdHRyaWJ1dGVEZWNsYXJhdGlvbigqZmllbGQs
IGFubm90YXRpb25JbmRpY2VzKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgZW1pdEZpZWxkRGVjbGFyYXRpb24oKmZp
ZWxkLCBzdHJ1Y3R1cmUsIGFubm90YXRpb25JbmRpY2VzKTsKKysgICAgICAgIH0KKysgICAgICAg
IG1PdXQgPDwgIjtcbiI7CisrICAgIH0KKysKKysgICAgaWYgKCFtUGlwZWxpbmVTdHJ1Y3RzLm1h
dGNoZXMoc3RydWN0dXJlLCB0cnVlLCB0cnVlKSkKKysgICAgeworKyAgICAgICAgTWV0YWxMYXlv
dXRPZkNvbmZpZyBsYXlvdXRDb25maWc7CisrICAgICAgICBsYXlvdXRDb25maWcudHJlYXRTYW1w
bGVyc0FzVGV4dHVyZUVudiA9IHRydWU7CisrICAgICAgICBMYXlvdXQgbGF5b3V0ICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IE1ldGFsTGF5b3V0T2YodHlwZSwgbGF5b3V0Q29uZmlnKTsKKysg
ICAgICAgIHNpemVfdCBwYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gbGF5b3V0LnNp
emVPZiAlIDE2OworKyAgICAgICAgaWYgKHBhZCAhPSAwKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAgICAgICAgICAgIG1PdXQgPDwgImNoYXIgIjsKKysg
ICAgICAgICAgICBFbWl0TmFtZShtT3V0LCBtSWRHZW4uY3JlYXRlTmV3TmFtZSgicGFkIikpOwor
KyAgICAgICAgICAgIG1PdXQgPDwgIlsiIDw8IHBhZCA8PCAiXTtcbiI7CisrICAgICAgICB9Cisr
ICAgIH0KKysKKysgICAgZW1pdENsb3NlQnJhY2UoKTsKKyt9CisrCisrdm9pZCBHZW5NZXRhbFRy
YXZlcnNlcjo6ZW1pdE9yZGluYXJ5VmFyaWFibGVEZWNsYXJhdGlvbigKKysgICAgY29uc3QgVmFy
RGVjbCAmZGVjbCwKKysgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2
ZENvbmZpZykKKyt7CisrICAgIEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworKyAgICBldENvbmZp
Zy5ldmRDb25maWcgPSAmZXZkQ29uZmlnOworKworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGRl
Y2wudHlwZSgpOworKyAgICBlbWl0VHlwZSh0eXBlLCBldENvbmZpZyk7CisrCisrICAgIGlmIChk
ZWNsLnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAgICAgICAg
bU91dCA8PCAiICI7CisrICAgICAgICBlbWl0TmFtZU9mKGRlY2wpOworKyAgICB9CisrfQorKwor
K3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IFZh
ckRlY2wgJmRlY2wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZykKKyt7
CisrICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IGRlY2wuc3ltYm9sVHlwZSgpOwor
KyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSBkZWNsLnR5cGUoKTsKKysgICAgY29u
c3QgVEJhc2ljVHlwZSBiYXNpY1R5cGUgID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKysKKysgICAg
c3dpdGNoIChiYXNpY1R5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0
U3RydWN0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICh0eXBlLmlzU3RydWN0U3BlY2lm
aWVyKCkgJiYgIWV2ZENvbmZpZy5kaXNhYmxlU3RydWN0U3BlY2lmaWVyKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKCFldmRDb25maWcuaXNQYXJhbWV0ZXIpOworKyAg
ICAgICAgICAgICAgICBlbWl0U3RydWN0RGVjbGFyYXRpb24odHlwZSk7CisrICAgICAgICAgICAg
ICAgIGlmIChzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBtT3V0IDw8ICIgIjsKKysgICAgICAgICAgICAgICAg
ICAgIGVtaXROYW1lT2YoZGVjbCk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZW1p
dE9yZGluYXJ5VmFyaWFibGVEZWNsYXJhdGlvbihkZWNsLCBldmRDb25maWcpOworKyAgICAgICAg
ICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoK
KysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQoc3ltYm9sVHlwZSAhPSBTeW1ib2xUeXBl
OjpFbXB0eSB8fCBldmRDb25maWcuaXNQYXJhbWV0ZXIpOworKyAgICAgICAgICAgIGVtaXRPcmRp
bmFyeVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbCwgZXZkQ29uZmlnKTsKKysgICAgICAgIH0KKysg
ICAgfQorKworKyAgICBpZiAoZXZkQ29uZmlnLmVtaXRQb3N0UXVhbGlmaWVyKQorKyAgICB7Cisr
ICAgICAgICBlbWl0UG9zdFF1YWxpZmllcihldmRDb25maWcsIGRlY2wsIHR5cGUuZ2V0UXVhbGlm
aWVyKCkpOworKyAgICB9CisrfQorKworK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0U3lt
Ym9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUpCisreworKyAgICBjb25zdCBUVmFyaWFibGUg
JnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7CisrICAgIGNvbnN0IFRUeXBlICZ0eXBlICAg
ID0gdmFyLmdldFR5cGUoKTsKKysKKysgICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgIT0gU3lt
Ym9sVHlwZTo6RW1wdHkpOworKworKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFz
aWNUeXBlOjpFYnRWb2lkKQorKyAgICB7CisrICAgICAgICBtT3V0IDw8ICIvKiI7CisrICAgICAg
ICBlbWl0TmFtZU9mKHZhcik7CisrICAgICAgICBtT3V0IDw8ICIqLyI7CisrICAgIH0KKysgICAg
ZWxzZQorKyAgICB7CisrICAgICAgICBlbWl0TmFtZU9mKHZhcik7CisrICAgIH0KKyt9CisrCisr
dm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFNpbmdsZUNvbnN0YW50KGNvbnN0IFRDb25zdGFu
dFVuaW9uICpjb25zdCBjb25zdFVuaW9uKQorK3sKKysgICAgc3dpdGNoIChjb25zdFVuaW9uLT5n
ZXRUeXBlKCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Qm9vbDoKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8IChjb25zdFVuaW9uLT5nZXRCQ29uc3QoKSA/
ICJ0cnVlIiA6ICJmYWxzZSIpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAg
ICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OgorKyAgICAgICAgeworKyAgICAgICAgICAg
IG1PdXQgPDwgY29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkgPDwgImYiOworKyAgICAgICAgfQorKyAg
ICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDoKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgpOworKyAg
ICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVi
dFVJbnQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCBjb25zdFVuaW9uLT5nZXRV
Q29uc3QoKSA8PCAidSI7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgVE9ETygpOworKyAgICAgICAgfQor
KyAgICB9CisrfQorKworK2NvbnN0IFRDb25zdGFudFVuaW9uICpHZW5NZXRhbFRyYXZlcnNlcjo6
ZW1pdENvbnN0YW50VW5pb25BcnJheSgKKysgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0
IGNvbnN0VW5pb24sCisrICAgIGNvbnN0IHNpemVfdCBzaXplKQorK3sKKysgICAgY29uc3QgVENv
bnN0YW50VW5pb24gKmNvbnN0VW5pb25JdGVyYXRlZCA9IGNvbnN0VW5pb247CisrICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBjb25zdFVuaW9uSXRlcmF0ZWQrKykKKysgICAg
eworKyAgICAgICAgZW1pdFNpbmdsZUNvbnN0YW50KGNvbnN0VW5pb25JdGVyYXRlZCk7CisrCisr
ICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0
IDw8ICIsICI7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIGNvbnN0VW5pb25JdGVy
YXRlZDsKKyt9CisrCisrY29uc3QgVENvbnN0YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjpl
bWl0Q29uc3RhbnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRDb25zdGFudFVu
aW9uICpjb25zdFVuaW9uQmVnaW4pCisreworKyAgICBjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29u
c3RVbmlvbkN1cnIgPSBjb25zdFVuaW9uQmVnaW47CisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0
cnVjdHVyZSAgICAgICAgICA9IHR5cGUuZ2V0U3RydWN0KCk7CisrICAgIGlmIChzdHJ1Y3R1cmUp
CisrICAgIHsKKysgICAgICAgIEVtaXRUeXBlQ29uZmlnIGNvbmZpZyA9IEVtaXRUeXBlQ29uZmln
e251bGxwdHJ9OworKyAgICAgICAgZW1pdFR5cGUodHlwZSwgY29uZmlnKTsKKysgICAgICAgIG1P
dXQgPDwgInsiOworKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJl
LT5maWVsZHMoKTsKKysgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUo
KTsgKytpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICpmaWVsZFR5cGUg
PSBmaWVsZHNbaV0tPnR5cGUoKTsKKysgICAgICAgICAgICBjb25zdFVuaW9uQ3VyciAgICAgICAg
ID0gZW1pdENvbnN0YW50VW5pb24oKmZpZWxkVHlwZSwgY29uc3RVbmlvbkN1cnIpOworKyAgICAg
ICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkgLSAxKQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgbU91dCA8PCAiLCAiOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysg
ICAgICAgIG1PdXQgPDwgIn0iOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAg
c2l6ZV90IHNpemUgICAgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKysgICAgICAgIGJvb2wgd3Jp
dGVUeXBlID0gc2l6ZSA+IDE7CisrICAgICAgICBpZiAod3JpdGVUeXBlKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIEVtaXRUeXBlQ29uZmlnIGNvbmZpZyA9IEVtaXRUeXBlQ29uZmlne251bGxw
dHJ9OworKyAgICAgICAgICAgIGVtaXRUeXBlKHR5cGUsIGNvbmZpZyk7CisrICAgICAgICAgICAg
bU91dCA8PCAiKCI7CisrICAgICAgICB9CisrICAgICAgICBjb25zdFVuaW9uQ3VyciA9IGVtaXRD
b25zdGFudFVuaW9uQXJyYXkoY29uc3RVbmlvbkN1cnIsIHNpemUpOworKyAgICAgICAgaWYgKHdy
aXRlVHlwZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIpIjsKKysgICAgICAg
IH0KKysgICAgfQorKyAgICByZXR1cm4gY29uc3RVbmlvbkN1cnI7CisrfQorKworK3ZvaWQgR2Vu
TWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAq
Y29uc3RWYWx1ZU5vZGUpCisreworKyAgICBlbWl0Q29uc3RhbnRVbmlvbihjb25zdFZhbHVlTm9k
ZS0+Z2V0VHlwZSgpLCBjb25zdFZhbHVlTm9kZS0+Z2V0Q29uc3RhbnRWYWx1ZSgpKTsKKyt9Cisr
CisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dp
enpsZSAqc3dpenpsZU5vZGUpCisreworKyAgICBncm91cGVkVHJhdmVyc2UoKnN3aXp6bGVOb2Rl
LT5nZXRPcGVyYW5kKCkpOworKyAgICBtT3V0IDw8ICIuIjsKKysKKysgICAgeworKyNpZiBkZWZp
bmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorKyAgICAgICAgRGVidWdTaW5rOjpFc2NhcGVkU2lu
ayBlc2NhcGVkT3V0KG1PdXQuZXNjYXBlKCkpOworKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gZXNjYXBlZE91dC5nZXQoKTsKKysjZWxzZQorKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0
ICAgICAgICA9IG1PdXQ7CisrI2VuZGlmCisrICAgICAgICBzd2l6emxlTm9kZS0+d3JpdGVPZmZz
ZXRzQXNYWVpXKCZvdXQpOworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisr
Y29uc3QgVEZpZWxkICZHZW5NZXRhbFRyYXZlcnNlcjo6Z2V0RGlyZWN0RmllbGQoY29uc3QgVEZp
ZWxkTGlzdENvbGxlY3Rpb24gJmZpZWxkTGlzdENvbGxlY3Rpb24sCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVENvbnN0YW50VW5pb24gJmlu
ZGV4KQorK3sKKysgICAgQVNTRVJUKGluZGV4LmdldFR5cGUoKSA9PSBUQmFzaWNUeXBlOjpFYnRJ
bnQpOworKworKyAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZExpc3QgPSBmaWVsZExpc3RDb2xs
ZWN0aW9uLmZpZWxkcygpOworKyAgICBjb25zdCBpbnQgaW5kZXhWYWwgICAgICAgICAgPSBpbmRl
eC5nZXRJQ29uc3QoKTsKKysgICAgY29uc3QgVEZpZWxkICZmaWVsZCAgICAgICAgID0gKmZpZWxk
TGlzdFtpbmRleFZhbF07CisrCisrICAgIHJldHVybiBmaWVsZDsKKyt9CisrCisrY29uc3QgVEZp
ZWxkICZHZW5NZXRhbFRyYXZlcnNlcjo6Z2V0RGlyZWN0RmllbGQoY29uc3QgVEludGVybVR5cGVk
ICZmaWVsZHNOb2RlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCAmaW5kZXhOb2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmZp
ZWxkc1R5cGUgPSBmaWVsZHNOb2RlLmdldFR5cGUoKTsKKysKKysgICAgY29uc3QgVEZpZWxkTGlz
dENvbGxlY3Rpb24gKmZpZWxkTGlzdENvbGxlY3Rpb24gPSBmaWVsZHNUeXBlLmdldFN0cnVjdCgp
OworKyAgICBpZiAoZmllbGRMaXN0Q29sbGVjdGlvbiA9PSBudWxscHRyKQorKyAgICB7CisrICAg
ICAgICBmaWVsZExpc3RDb2xsZWN0aW9uID0gZmllbGRzVHlwZS5nZXRJbnRlcmZhY2VCbG9jaygp
OworKyAgICB9CisrICAgIEFTU0VSVChmaWVsZExpc3RDb2xsZWN0aW9uKTsKKysKKysgICAgY29u
c3QgVEludGVybUNvbnN0YW50VW5pb24gKmluZGV4Tm9kZV8gPSBpbmRleE5vZGUuZ2V0QXNDb25z
dGFudFVuaW9uKCk7CisrICAgIEFTU0VSVChpbmRleE5vZGVfKTsKKysgICAgY29uc3QgVENvbnN0
YW50VW5pb24gJmluZGV4ID0gKmluZGV4Tm9kZV8tPmdldENvbnN0YW50VmFsdWUoKTsKKysKKysg
ICAgcmV0dXJuIGdldERpcmVjdEZpZWxkKCpmaWVsZExpc3RDb2xsZWN0aW9uLCBpbmRleCk7Cisr
fQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJt
QmluYXJ5ICpiaW5hcnlOb2RlKQorK3sKKysgICAgY29uc3QgVE9wZXJhdG9yIG9wICAgICAgPSBi
aW5hcnlOb2RlLT5nZXRPcCgpOworKyAgICBUSW50ZXJtVHlwZWQgJmxlZnROb2RlICA9ICpiaW5h
cnlOb2RlLT5nZXRMZWZ0KCk7CisrICAgIFRJbnRlcm1UeXBlZCAmcmlnaHROb2RlID0gKmJpbmFy
eU5vZGUtPmdldFJpZ2h0KCk7CisrCisrICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGdyb3VwZWRUcmF2ZXJzZShsZWZ0Tm9kZSk7CisrICAgICAgICAgICAgbU91dCA8PCAi
LiI7CisrICAgICAgICAgICAgZW1pdE5hbWVPZihnZXREaXJlY3RGaWVsZChsZWZ0Tm9kZSwgcmln
aHROb2RlKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bmRleEluZGlyZWN0OgorKyAgICAgICAgeworKyAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShs
ZWZ0Tm9kZSk7CisrICAgICAgICAgICAgbU91dCA8PCAiWyI7CisrICAgICAgICAgICAgcmlnaHRO
b2RlLnRyYXZlcnNlKHRoaXMpOworKyAgICAgICAgICAgIG1PdXQgPDwgIl0iOworKyAgICAgICAg
fQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlID0gYmluYXJ5Tm9kZS0+Z2V0VHlwZSgp
OworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gbGVmdE5vZGUuZ2V0VHlw
ZSgpOworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5cGUgID0gcmlnaHROb2RlLmdl
dFR5cGUoKTsKKysKKysgICAgICAgICAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9wLCByZXN1
bHRUeXBlLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxlZnROb2RlKTsKKysgICAgICAgICAgICAgICAgaWYg
KG9wICE9IFRPcGVyYXRvcjo6RU9wQ29tbWEpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgIG1PdXQgPDwgIiAiOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsICZsZWZ0VHlw
ZSwgJnJpZ2h0VHlwZSkgPDwgIiAiOworKyAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2Uo
cmlnaHROb2RlKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCBHZXRPcGVyYXRvclN0cmluZyhvcCwgcmVz
dWx0VHlwZSwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKSA8PCAiKCI7CisrICAgICAgICAgICAgICAg
IGxlZnROb2RlLnRyYXZlcnNlKHRoaXMpOworKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIsICI7
CisrICAgICAgICAgICAgICAgIHJpZ2h0Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgICAg
ICAgICAgbU91dCA8PCAiKSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9Cisr
CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrc3RhdGljIGJvb2wgSXNQb3N0Zml4KFRPcGVy
YXRvciBvcCkKKyt7CisrICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQb3N0SW5jcmVtZW50OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBv
c3REZWNyZW1lbnQ6CisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrCisrICAgICAgICBkZWZh
dWx0OgorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorK30KKysKKytib29sIEdl
bk1ldGFsVHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKnVuYXJ5Tm9k
ZSkKKyt7CisrICAgIGNvbnN0IFRPcGVyYXRvciBvcCAgICAgID0gdW5hcnlOb2RlLT5nZXRPcCgp
OworKyAgICBjb25zdCBUVHlwZSAmcmVzdWx0VHlwZSA9IHVuYXJ5Tm9kZS0+Z2V0VHlwZSgpOwor
KworKyAgICBUSW50ZXJtVHlwZWQgJmFyZyAgICA9ICp1bmFyeU5vZGUtPmdldE9wZXJhbmQoKTsK
KysgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUgPSBhcmcuZ2V0VHlwZSgpOworKworKyAgICBjb25z
dCBjaGFyICpuYW1lID0gR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUsICZhcmdUeXBl
KTsKKysKKysgICAgaWYgKElzU3ltYm9saWNPcGVyYXRvcihvcCwgcmVzdWx0VHlwZSwgJmFyZ1R5
cGUpKQorKyAgICB7CisrICAgICAgICBjb25zdCBib29sIHBvc3RmaXggPSBJc1Bvc3RmaXgob3Ap
OworKyAgICAgICAgaWYgKCFwb3N0Zml4KQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1PdXQg
PDwgbmFtZTsKKysgICAgICAgIH0KKysgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShhcmcpOworKyAg
ICAgICAgaWYgKHBvc3RmaXgpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCBuYW1l
OworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgbU91dCA8
PCBuYW1lIDw8ICIoIjsKKysgICAgICAgIGFyZy50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIG1P
dXQgPDwgIikiOworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBH
ZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFyeSAqY29u
ZGl0aW9uYWxOb2RlKQorK3sKKysgICAgZ3JvdXBlZFRyYXZlcnNlKCpjb25kaXRpb25hbE5vZGUt
PmdldENvbmRpdGlvbigpKTsKKysgICAgbU91dCA8PCAiID8gIjsKKysgICAgZ3JvdXBlZFRyYXZl
cnNlKCpjb25kaXRpb25hbE5vZGUtPmdldFRydWVFeHByZXNzaW9uKCkpOworKyAgICBtT3V0IDw8
ICIgOiAiOworKyAgICBncm91cGVkVHJhdmVyc2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0RmFsc2VF
eHByZXNzaW9uKCkpOworKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jvb2wgR2VuTWV0
YWxUcmF2ZXJzZXI6OnZpc2l0SWZFbHNlKFZpc2l0LCBUSW50ZXJtSWZFbHNlICppZlRoZW5FbHNl
Tm9kZSkKKyt7CisrICAgIFRJbnRlcm1UeXBlZCAmY29uZE5vZGUgPSAqaWZUaGVuRWxzZU5vZGUt
PmdldENvbmRpdGlvbigpOworKyAgICBUSW50ZXJtQmxvY2sgKnRoZW5Ob2RlID0gaWZUaGVuRWxz
ZU5vZGUtPmdldFRydWVCbG9jaygpOworKyAgICBUSW50ZXJtQmxvY2sgKmVsc2VOb2RlID0gaWZU
aGVuRWxzZU5vZGUtPmdldEZhbHNlQmxvY2soKTsKKysKKysgICAgZW1pdEluZGVudGF0aW9uKCk7
CisrICAgIG1PdXQgPDwgImlmICgiOworKyAgICBjb25kTm9kZS50cmF2ZXJzZSh0aGlzKTsKKysg
ICAgbU91dCA8PCAiKSI7CisrCisrICAgIGlmICh0aGVuTm9kZSkKKysgICAgeworKyAgICAgICAg
bU91dCA8PCAiXG4iOworKyAgICAgICAgdGhlbk5vZGUtPnRyYXZlcnNlKHRoaXMpOworKyAgICB9
CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgbU91dCA8PCAiIHt9IjsKKysgICAgfQorKwor
KyAgICBpZiAoZWxzZU5vZGUpCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgIlxuIjsKKysgICAg
ICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAgICAgICAgbU91dCA8PCAiZWxzZVxuIjsKKysgICAg
ICAgIGVsc2VOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsK
KysgICAgICAgIC8vIEFsd2F5cyBlbWl0ICJlbHNlIiBldmVuIHdoZW4gZW1wdHkgYmxvY2sgdG8g
YXZvaWQgbmVzdGVkIGlmLXN0bXQgaXNzdWVzLgorKyAgICAgICAgbU91dCA8PCAiIGVsc2Uge30i
OworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRy
YXZlcnNlcjo6dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKnN3aXRjaE5vZGUpCisr
eworKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKysgICAgbU91dCA8PCAic3dpdGNoICgiOworKyAg
ICBzd2l0Y2hOb2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOworKyAgICBtT3V0IDw8ICIp
XG4iOworKworKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRjaCk7CisrICAgIG1QYXJlbnRJc1N3
aXRjaCA9IHRydWU7CisrICAgIHN3aXRjaE5vZGUtPmdldFN0YXRlbWVudExpc3QoKS0+dHJhdmVy
c2UodGhpcyk7CisrICAgIG1QYXJlbnRJc1N3aXRjaCA9IGZhbHNlOworKworKyAgICByZXR1cm4g
ZmFsc2U7CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q2FzZShWaXNpdCwg
VEludGVybUNhc2UgKmNhc2VOb2RlKQorK3sKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrCisr
ICAgIGlmIChjYXNlTm9kZS0+aGFzQ29uZGl0aW9uKCkpCisrICAgIHsKKysgICAgICAgIFRJbnRl
cm1UeXBlZCAqY29uZEV4cHIgPSBjYXNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisrICAgICAgICBt
T3V0IDw8ICJjYXNlICI7CisrICAgICAgICBjb25kRXhwci0+dHJhdmVyc2UodGhpcyk7CisrICAg
ICAgICBtT3V0IDw8ICI6IjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIG1P
dXQgPDwgImRlZmF1bHQ6XG4iOworKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9Cisr
Cisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEZ1bmN0aW9uU2lnbmF0dXJlKGNvbnN0IFRG
dW5jdGlvbiAmZnVuYykKKyt7CisrICAgIGNvbnN0IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4o
KTsKKysKKysgICAgZW1pdEZ1bmN0aW9uUmV0dXJuKGZ1bmMpOworKworKyAgICBtT3V0IDw8ICIg
IjsKKysgICAgZW1pdE5hbWVPZihmdW5jKTsKKysgICAgaWYgKGlzTWFpbikKKysgICAgeworKyAg
ICAgICAgbU91dCA8PCAiMCI7CisrICAgIH0KKysgICAgbU91dCA8PCAiKCI7CisrCisrICAgIGJv
b2wgZW1pdENvbW1hICAgICAgICAgID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBwYXJhbUNv
dW50ID0gZnVuYy5nZXRQYXJhbUNvdW50KCk7CisrICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cGFyYW1Db3VudDsgKytpKQorKyAgICB7CisrICAgICAgICBpZiAoZW1pdENvbW1hKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKysgICAgICAgIH0KKysgICAgICAgIGVt
aXRDb21tYSA9IHRydWU7CisrCisrICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1
bmMuZ2V0UGFyYW0oaSk7CisrICAgICAgICBlbWl0RnVuY3Rpb25QYXJhbWV0ZXIoZnVuYywgcGFy
YW0pOworKyAgICB9CisrCisrICAgIG1PdXQgPDwgIikiOworK30KKysKKyt2b2lkIEdlbk1ldGFs
VHJhdmVyc2VyOjplbWl0RnVuY3Rpb25SZXR1cm4oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorK3sK
KysgICAgY29uc3QgYm9vbCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworKworKyAgICBjb25zdCBU
VHlwZSAmcmV0dXJuVHlwZSA9IGZ1bmMuZ2V0UmV0dXJuVHlwZSgpOworKyAgICBpZiAoaXNNYWlu
KQorKyAgICB7CisrICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSByZXR1cm5U
eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSBudWxscHRyKTsK
KysgICAgICAgIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmZyYWdtZW50T3V0Lm1hdGNoZXMoKnN0cnVj
dHVyZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiZnJhZ21lbnQgIjsKKysg
ICAgICAgIH0KKysgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMudmVydGV4T3V0Lm1h
dGNoZXMoKnN0cnVjdHVyZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAidmVy
dGV4ICI7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAg
ICAgVE9ETygpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVtaXRUeXBlKHJldHVyblR5cGUs
IEVtaXRUeXBlQ29uZmlnKCkpOworK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0
RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUg
JnBhcmFtKQorK3sKKysgICAgY29uc3QgYm9vbCBpc01haW4gPSBmdW5jLmlzTWFpbigpOworKwor
KyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSBwYXJhbS5nZXRUeXBlKCk7CisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisrCisrICAg
IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKysgICAgZXZkQ29uZmln
LmlzUGFyYW1ldGVyICAgICAgID0gdHJ1ZTsKKysgICAgZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRl
ciAgID0gaXNNYWluOworKyAgICBldmRDb25maWcuZW1pdFBvc3RRdWFsaWZpZXIgPSBpc01haW47
CisrICAgIGV2ZENvbmZpZy5pc1BvaW50ZXIgICAgICAgICA9IG1TeW1ib2xFbnYuaXNQb2ludGVy
KHBhcmFtKTsKKysgICAgZXZkQ29uZmlnLmlzUmVmZXJlbmNlICAgICAgID0gbVN5bWJvbEVudi5p
c1JlZmVyZW5jZShwYXJhbSk7CisrICAgIGVtaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhckRlY2wo
cGFyYW0pLCBldmRDb25maWcpOworKworKyAgICBpZiAoaXNNYWluKQorKyAgICB7CisrICAgICAg
ICBUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uICpyZWZsZWN0aW9uID0KKysgICAgICAgICAgICAo
KHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3QgKikmbUNvbXBpbGVyKS0+Z2V0VHJhbnNsYXRvck1l
dGFsUmVmbGVjdGlvbigpOworKyAgICAgICAgaWYgKHN0cnVjdHVyZSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLm1hdGNoZXMoKnN0cnVj
dHVyZSkgfHwKKysgICAgICAgICAgICAgICAgbVBpcGVsaW5lU3RydWN0cy52ZXJ0ZXhJbi5tYXRj
aGVzKCpzdHJ1Y3R1cmUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8
PCAiIFtbc3RhZ2VfaW5dXSI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYg
KG1QaXBlbGluZVN0cnVjdHMuYW5nbGVVbmlmb3Jtcy5tYXRjaGVzKCpzdHJ1Y3R1cmUpKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbYnVmZmVyKCIgPDwgcng6
Om10bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4IDw8ICIpXV0iOworKyAgICAgICAgICAg
IH0KKysgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLnVzZXJVbmlmb3Jtcy5t
YXRjaGVzKCpzdHJ1Y3R1cmUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91
dCA8PCAiIFtbYnVmZmVyKCIgPDwgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggPDwgIildXSI7Cisr
ICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFVuaWZvcm1CdWZmZXJCaW5kaW5nKHBhcmFt
Lm5hbWUoKS5kYXRhKCksIG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4KTsKKysgICAgICAgICAgICAg
ICAgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggKz0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cnVjdHVyZS0+bmFtZSgp
ID09ICJtZXRhbDo6c2FtcGxlciIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBt
T3V0IDw8ICIgW1tzYW1wbGVyKCIgPDwgKG1NYWluU2FtcGxlckluZGV4KSA8PCAiKV1dIjsKKysg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgb3JpZ2luYWxOYW1lID0KKysgICAgICAg
ICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmdldE9yaWdpbmFsTmFtZShwYXJhbS51bmlxdWVJZCgp
LmdldCgpKTsKKysgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+YWRkU2FtcGxlckJpbmRpbmco
b3JpZ2luYWxOYW1lLCBtTWFpblNhbXBsZXJJbmRleCk7CisrICAgICAgICAgICAgICAgIG1NYWlu
U2FtcGxlckluZGV4ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2lj
VHlwZSgpKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICIgW1t0ZXh0dXJlKCIg
PDwgKG1NYWluVGV4dHVyZUluZGV4KSA8PCAiKV1dIjsKKysgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyBvcmlnaW5hbE5hbWUgPSByZWZsZWN0aW9uLT5nZXRPcmlnaW5hbE5hbWUocGFyYW0u
dW5pcXVlSWQoKS5nZXQoKSk7CisrICAgICAgICAgICAgcmVmbGVjdGlvbi0+YWRkVGV4dHVyZUJp
bmRpbmcob3JpZ2luYWxOYW1lLCBtTWFpblNhbXBsZXJJbmRleCk7CisrICAgICAgICAgICAgbU1h
aW5UZXh0dXJlSW5kZXggKz0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisrICAgICAgICB9
CisrICAgICAgICBlbHNlIGlmIChOYW1lKHBhcmFtKSA9PSBQaXBlbGluZXtQaXBlbGluZTo6VHlw
ZTo6SW5zdGFuY2VJZCwgbnVsbHB0cn0uZ2V0U3RydWN0SW5zdGFuY2VOYW1lKAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCkp
CisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiIFtbaW5zdGFuY2VfaWRdXSI7Cisr
ICAgICAgICB9CisrICAgIH0KKyt9CisrCisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRG
dW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90b05vZGUp
CisreworKyAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS0+Z2V0RnVu
Y3Rpb24oKTsKKysKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgIGVtaXRGdW5jdGlvblNp
Z25hdHVyZShmdW5jKTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5j
dGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZO
b2RlKQorK3sKKysgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRG
dW5jdGlvbigpOworKyAgICBUSW50ZXJtQmxvY2sgJmJvZHkgICAgPSAqZnVuY0RlZk5vZGUtPmdl
dEJvZHkoKTsKKysKKysgICAgZW1pdEluZGVudGF0aW9uKCk7CisrICAgIGVtaXRGdW5jdGlvblNp
Z25hdHVyZShmdW5jKTsKKysgICAgbU91dCA8PCAiXG4iOworKyAgICBib2R5LnRyYXZlcnNlKHRo
aXMpOworKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK0dlbk1ldGFsVHJhdmVyc2VyOjpG
dW5jVG9OYW1lIEdlbk1ldGFsVHJhdmVyc2VyOjpCdWlsZEZ1bmNUb05hbWUoKQorK3sKKysgICAg
RnVuY1RvTmFtZSBtYXA7CisrCisrICAgIGF1dG8gcHV0QW5nbGUgPSBbJl0oY29uc3QgY2hhciAq
bmFtZVN0cikgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIG5hbWUobmFtZVN0cik7
CisrICAgICAgICBBU1NFUlQobWFwLmZpbmQobmFtZSkgPT0gbWFwLmVuZCgpKTsKKysgICAgICAg
IG1hcFtuYW1lXSA9IE5hbWUobmFtZVN0ciwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cisr
ICAgIH07CisrCisrICAgIHB1dEFuZ2xlKCJ0ZXhlbEZldGNoIik7CisrICAgIHB1dEFuZ2xlKCJ0
ZXhlbEZldGNoT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlIik7CisrICAgIHB1dEFu
Z2xlKCJ0ZXh0dXJlMUQiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUxRExvZCIpOworKyAgICBw
dXRBbmdsZSgidGV4dHVyZTFEUHJvakxvZCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZTJEIik7
CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMkRMb2QiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUy
RFByb2oiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmUyRFByb2pMb2QiKTsKKysgICAgcHV0QW5n
bGUoInRleHR1cmUzRCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZTNETG9kIik7CisrICAgIHB1
dEFuZ2xlKCJ0ZXh0dXJlM0RQcm9qTG9kIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlQ3ViZSIp
OworKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmVMb2QiKTsKKysgICAgcHV0QW5nbGUoInRleHR1
cmVDdWJlUHJvakxvZCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZUdyYWQiKTsKKysgICAgcHV0
QW5nbGUoInRleHR1cmVHcmFkT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlTG9kIik7
CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlTG9kT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0
dXJlT2Zmc2V0Iik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvaiIpOworKyAgICBwdXRBbmds
ZSgidGV4dHVyZVByb2pHcmFkIik7CisrICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakdyYWRPZmZz
ZXQiKTsKKysgICAgcHV0QW5nbGUoInRleHR1cmVQcm9qTG9kIik7CisrICAgIHB1dEFuZ2xlKCJ0
ZXh0dXJlUHJvakxvZE9mZnNldCIpOworKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pPZmZzZXQi
KTsKKysgICAgcHV0QW5nbGUoInRleHR1cmVTaXplIik7CisrCisrICAgIHJldHVybiBtYXA7Cisr
fQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKQorK3sKKysgICAgY29uc3QgVEludGVybVNlcXVl
bmNlICZhcmdzID0gKmFnZ3JlZ2F0ZU5vZGUtPmdldFNlcXVlbmNlKCk7CisrCisrICAgIGF1dG8g
ZW1pdEFyZ0xpc3QgPSBbJl0oY29uc3QgY2hhciAqb3BlbiwgY29uc3QgY2hhciAqY2xvc2UpIHsK
KysgICAgICAgIG1PdXQgPDwgb3BlbjsKKysKKysgICAgICAgIGJvb2wgZW1pdENvbW1hID0gZmFs
c2U7CisrICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICphcmcgOiBhcmdzKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGlmIChlbWl0Q29tbWEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBtT3V0IDw8ICIsICI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVtaXRDb21t
YSA9IHRydWU7CisrICAgICAgICAgICAgYXJnLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIH0K
KysKKysgICAgICAgIG1PdXQgPDwgY2xvc2U7CisrICAgIH07CisrCisrICAgIGNvbnN0IFRUeXBl
ICZyZXRUeXBlID0gYWdncmVnYXRlTm9kZS0+Z2V0VHlwZSgpOworKworKyAgICBpZiAoYWdncmVn
YXRlTm9kZS0+aXNDb25zdHJ1Y3RvcigpKQorKyAgICB7CisrICAgICAgICBjb25zdCBib29sIGlz
U3RhbmRhbG9uZSA9IGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpOworKyAgICAgICAgaWYg
KGlzU3RhbmRhbG9uZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBQcmV2ZW50IGNvbnN0
cnVjdG9yIGZyb20gYmVpbmcgaW50ZXJwcmV0ZWQgYXMgYSBkZWNsYXJhdGlvbiBieSB3cmFwcGlu
ZyBpbiBwYXJlbnMuCisrICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIGdpdmVuIHNv
bWV0aGluZyBsaWtlOgorKyAgICAgICAgICAgIC8vICAgICAgaW50KHN5bWJvbCk7IC8vIDwtIFRo
aXMgd2lsbCBiZSB0cmVhdGVkIGxpa2UgYGludCBzeW1ib2w7YC4uLiBkb24ndCB3YW50IHRoYXQu
CisrICAgICAgICAgICAgLy8gU28gaW5zdGVhZCBlbWl0OgorKyAgICAgICAgICAgIC8vICAgICAg
KGludChzeW1ib2wpKTsKKysgICAgICAgICAgICBtT3V0IDw8ICIoIjsKKysgICAgICAgIH0KKysK
KysgICAgICAgIGNvbnN0IEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworKworKyAgICAgICAgaWYg
KHJldFR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGVtaXRUeXBlKHJl
dFR5cGUsIGV0Q29uZmlnKTsKKysgICAgICAgICAgICBlbWl0QXJnTGlzdCgieyIsICJ9Iik7Cisr
ICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmdldFN0cnVjdCgpKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKysgICAgICAg
ICAgICBlbWl0QXJnTGlzdCgieyIsICJ9Iik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisr
ICAgICAgICB7CisrICAgICAgICAgICAgZW1pdFR5cGUocmV0VHlwZSwgZXRDb25maWcpOworKyAg
ICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgIH0KKysKKysgICAgICAg
IGlmIChpc1N0YW5kYWxvbmUpCisrICAgICAgICB7CisrICAgICAgICAgICAgbU91dCA8PCAiKSI7
CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgZWxz
ZQorKyAgICB7CisrICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBhZ2dyZWdhdGVOb2RlLT5n
ZXRPcCgpOworKyAgICAgICAgc3dpdGNoIChvcCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1bmN0aW9uSW5BU1Q6CisrICAgICAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0ZU5vZGUtPmdl
dEZ1bmN0aW9uKCk7CisrICAgICAgICAgICAgICAgIGVtaXROYW1lT2YoZnVuYyk7CisrICAgICAg
ICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9ICphZ2dyZWdhdGVOb2RlLT5nZXRGdW5jdGlvbigpOwor
KyAgICAgICAgICAgICAgICBhdXRvIGl0ICAgICAgICAgICAgICAgPSBtRnVuY1RvTmFtZS5maW5k
KGZ1bmMubmFtZSgpKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGl0ICE9IG1GdW5jVG9OYW1l
LmVuZCgpKTsKKysgICAgICAgICAgICAgICAgRW1pdE5hbWUobU91dCwgaXQtPnNlY29uZCk7Cisr
ICAgICAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byBnZXRBcmdUeXBlID0gWyZdKHNp
emVfdCBpbmRleCkgLT4gY29uc3QgVFR5cGUgKiB7CisrICAgICAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPCBhcmdzLnNpemUoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaW5kZXhdLT5nZXRBc1R5cGVk
KCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGFyZyk7CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICZhcmctPmdldFR5cGUoKTsKKysgICAgICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgICAgICAg
ICB9OworKworKyAgICAgICAgICAgICAgICBBU1NFUlQoIWFyZ3MuZW1wdHkoKSk7CisrICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMCA9IGdldEFyZ1R5cGUoMCk7CisrICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IGdldEFyZ1R5cGUoMSk7CisrICAgICAg
ICAgICAgICAgIEFTU0VSVChhcmdUeXBlMCk7CisrCisrICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKm9wTmFtZSA9IEdldE9wZXJhdG9yU3RyaW5nKG9wLCByZXRUeXBlLCBhcmdUeXBlMCwgYXJn
VHlwZTEpOworKworKyAgICAgICAgICAgICAgICBpZiAoSXNTeW1ib2xpY09wZXJhdG9yKG9wLCBy
ZXRUeXBlLCBhcmdUeXBlMCwgYXJnVHlwZTEpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGFyZ3Muc2l6ZSgpKQorKyAgICAgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZvcGVyYW5k
Tm9kZSA9ICphZ2dyZWdhdGVOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChJc1Bvc3RmaXgob3ApKQorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRUcmF2ZXJzZShvcGVyYW5k
Tm9kZSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2Uob3BlcmFuZE5vZGUpOworKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbU91dCA8PCBvcE5hbWU7CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5v
ZGUgJmxlZnROb2RlICA9ICphZ2dyZWdhdGVOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZyaWdodE5vZGUgPSAqYWdncmVnYXRl
Tm9kZS0+Z2V0Q2hpbGROb2RlKDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91
cGVkVHJhdmVyc2UobGVmdE5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3V0
IDw8ICIgIiA8PCBvcE5hbWUgPDwgIiAiOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cm91cGVkVHJhdmVyc2UocmlnaHROb2RlKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKysgICAgICAgICAgICAg
ICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKysgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0K
KysgICAgfQorK30KKysKKyt2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3BlbkJyYWNlKCkK
Kyt7CisrICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPj0gMCk7CisrCisrICAgIGVtaXRJbmRlbnRh
dGlvbigpOworKyAgICBtT3V0IDw8ICJ7XG4iOworKyAgICArK21JbmRlbnRMZXZlbDsKKyt9Cisr
Cisrdm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdENsb3NlQnJhY2UoKQorK3sKKysgICAgQVNT
RVJUKG1JbmRlbnRMZXZlbCA+PSAxKTsKKysKKysgICAgLS1tSW5kZW50TGV2ZWw7CisrICAgIGVt
aXRJbmRlbnRhdGlvbigpOworKyAgICBtT3V0IDw8ICJ9IjsKKyt9CisrCisrc3RhdGljIGJvb2wg
UmVxdWlyZXNTZW1pY29sb25UZXJtaW5hdG9yKFRJbnRlcm1Ob2RlICZub2RlKQorK3sKKysgICAg
aWYgKG5vZGUuZ2V0QXNCbG9jaygpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKysgICAgaWYgKG5vZGUuZ2V0QXNMb29wTm9kZSgpKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKG5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRB
c0lmRWxzZU5vZGUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9Cisr
ICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAobm9kZS5nZXRBc0Nhc2VOb2RlKCkpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsK
Kyt9CisrCisrc3RhdGljIGJvb2wgTmV3bGluZVBhZChUSW50ZXJtTm9kZSAmbm9kZSkKKyt7Cisr
ICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiB0cnVlOworKyAgICB9CisrICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xO
b2RlID0gbm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorKyAgICB7CisrICAgICAgICBBU1NF
UlQoZGVjbE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKysgICAgICAgIFRJbnRlcm1Ob2Rl
ICZjaGlsZE5vZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKysgICAgICAgIGlmIChU
SW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gY2hpbGROb2RlLmdldEFzU3ltYm9sTm9kZSgpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9k
ZS0+dmFyaWFibGUoKTsKKysgICAgICAgICAgICByZXR1cm4gdmFyLmdldFR5cGUoKS5pc1N0cnVj
dFNwZWNpZmllcigpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9
CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlz
aXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICpibG9ja05vZGUpCisreworKyAgICBBU1NFUlQo
bUluZGVudExldmVsID49IC0xKTsKKysgICAgY29uc3QgYm9vbCBpc0dsb2JhbFNjb3BlICA9IG1J
bmRlbnRMZXZlbCA9PSAtMTsKKysgICAgY29uc3QgYm9vbCBwYXJlbnRJc1N3aXRjaCA9IG1QYXJl
bnRJc1N3aXRjaDsKKysgICAgbVBhcmVudElzU3dpdGNoICAgICAgICAgICA9IGZhbHNlOworKwor
KyAgICBpZiAoaXNHbG9iYWxTY29wZSkKKysgICAgeworKyAgICAgICAgKyttSW5kZW50TGV2ZWw7
CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBlbWl0T3BlbkJyYWNlKCk7Cisr
ICAgICAgICBpZiAocGFyZW50SXNTd2l0Y2gpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytt
SW5kZW50TGV2ZWw7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgVEludGVybU5vZGUgKnBy
ZXZTdG10Tm9kZSA9IG51bGxwdHI7CisrCisrICAgIGNvbnN0IHNpemVfdCBzdG10Q291bnQgPSBi
bG9ja05vZGUtPmdldENoaWxkQ291bnQoKTsKKysgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
dG10Q291bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgVEludGVybU5vZGUgJnN0bXROb2RlID0g
KmJsb2NrTm9kZS0+Z2V0Q2hpbGROb2RlKGkpOworKworKyAgICAgICAgaWYgKGlzR2xvYmFsU2Nv
cGUgJiYgcHJldlN0bXROb2RlICYmIChOZXdsaW5lUGFkKCpwcmV2U3RtdE5vZGUpIHx8IE5ld2xp
bmVQYWQoc3RtdE5vZGUpKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtT3V0IDw8ICJcbiI7
CisrICAgICAgICB9CisrICAgICAgICBjb25zdCBib29sIGlzQ2FzZSA9IHN0bXROb2RlLmdldEFz
Q2FzZU5vZGUoKTsKKysgICAgICAgIG1JbmRlbnRMZXZlbCAtPSBpc0Nhc2U7CisrICAgICAgICBl
bWl0SW5kZW50YXRpb24oKTsKKysgICAgICAgIG1JbmRlbnRMZXZlbCArPSBpc0Nhc2U7CisrICAg
ICAgICBzdG10Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgIGlmIChSZXF1aXJlc1NlbWlj
b2xvblRlcm1pbmF0b3Ioc3RtdE5vZGUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1PdXQg
PDwgIjsiOworKyAgICAgICAgfQorKyAgICAgICAgbU91dCA8PCAiXG4iOworKworKyAgICAgICAg
cHJldlN0bXROb2RlID0gJnN0bXROb2RlOworKyAgICB9CisrCisrICAgIGlmIChpc0dsb2JhbFNj
b3BlKQorKyAgICB7CisrICAgICAgICBBU1NFUlQobUluZGVudExldmVsID09IDApOworKyAgICAg
ICAgLS1tSW5kZW50TGV2ZWw7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBp
ZiAocGFyZW50SXNTd2l0Y2gpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1JbmRl
bnRMZXZlbCA+PSAxKTsKKysgICAgICAgICAgICAtLW1JbmRlbnRMZXZlbDsKKysgICAgICAgIH0K
KysgICAgICAgIGVtaXRDbG9zZUJyYWNlKCk7CisrICAgICAgICBtUGFyZW50SXNTd2l0Y2ggPSBw
YXJlbnRJc1N3aXRjaDsKKysgICAgfQorKworKyAgICByZXR1cm4gZmFsc2U7CisrfQorKworK2Jv
b2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24oVmlz
aXQsIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqKQorK3sKKysgICAgTE9HSUNf
RVJST1IoKTsgIC8vIFJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyBzaG91bGQgaGF2ZSBiZWVu
IGNhbGxlZCBiZWZvcmUgdGhpcy4KKysgICAgcmV0dXJuIGZhbHNlOworK30KKysKKytib29sIEdl
bk1ldGFsVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRp
b24gKmRlY2xOb2RlKQorK3sKKysgICAgQVNTRVJUKGRlY2xOb2RlLT5nZXRDaGlsZENvdW50KCkg
PT0gMSk7CisrICAgIFRJbnRlcm1Ob2RlICZub2RlID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUo
MCk7CisrCisrICAgIEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKysK
KysgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2RlLmdldEFzU3ltYm9sTm9k
ZSgpKQorKyAgICB7CisrICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUt
PnZhcmlhYmxlKCk7CisrICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKHZh
ciksIGV2ZENvbmZpZyk7CisrICAgIH0KKysgICAgZWxzZSBpZiAoVEludGVybUJpbmFyeSAqaW5p
dE5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpKQorKyAgICB7CisrICAgICAgICBBU1NFUlQo
aW5pdE5vZGUtPmdldE9wKCkgPT0gVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplKTsKKysgICAgICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBpbml0Tm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKTsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFsdWVOb2RlICAgPSBpbml0Tm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0QXNUeXBlZCgpOworKyAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUg
JiYgdmFsdWVOb2RlKTsKKysKKysgICAgICAgIGlmIChnZXRSb290Tm9kZSgpID09IGdldFBhcmVu
dEJsb2NrKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFs
aXplcnMgc2hvdWxkIGhhdmUgdHVybmVkIG5vbi1jb25zdCBnbG9iYWwgaW5pdGlhbGl6ZXJzIGlu
dG8KKysgICAgICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplcnMuIE5vdGUgdGhhdCB2YXJp
YWJsZXMgbWFya2VkIGFzIEV2cUdsb2JhbCBjYW4gYmUgdHJlYXRlZCBhcworKyAgICAgICAgICAg
IC8vIEV2cUNvbnN0IGluIHNvbWUgQU5HTEUgY29kZSBidXQgbm90IGFjdHVhbGx5IGhhdmUgdGhl
aXIgcXVhbGlmaWVyIGFjdHVhbGx5IGNoYW5nZWQgdG8KKysgICAgICAgICAgICAvLyBFdnFDb25z
dC4gVGh1cyBqdXN0IGFzc3VtZSBhbGwgRXZxR2xvYmFsIGFyZSBhY3R1YWxseSBFdnFDb25zdCBm
b3IgYWxsIGNvZGUgcnVuIGFmdGVyCisrICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFs
aXplcnMuCisrICAgICAgICAgICAgbU91dCA8PCAiY29uc3RhbnQgIjsKKysgICAgICAgIH0KKysK
KysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsK
KysgICAgICAgIGNvbnN0IE5hbWUgdmFyTmFtZSh2YXIpOworKworKyAgICAgICAgaWYgKEV4cHJl
c3Npb25Db250YWluc05hbWUodmFyTmFtZSwgKnZhbHVlTm9kZSkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgbVJlbmFtZWRTeW1ib2xzWyZ2YXJdID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUodmFy
TmFtZSk7CisrICAgICAgICB9CisrCisrICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihW
YXJEZWNsKHZhciksIGV2ZENvbmZpZyk7CisrICAgICAgICBtT3V0IDw8ICIgPSAiOworKyAgICAg
ICAgZ3JvdXBlZFRyYXZlcnNlKCp2YWx1ZU5vZGUpOworKyAgICB9CisrICAgIGVsc2UKKysgICAg
eworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgfQorKworKyAgICByZXR1cm4gZmFsc2U7
CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCwgVEludGVy
bUxvb3AgKmxvb3BOb2RlKQorK3sKKysgICAgY29uc3QgVExvb3BUeXBlIGxvb3BUeXBlID0gbG9v
cE5vZGUtPmdldFR5cGUoKTsKKysKKysgICAgc3dpdGNoIChsb29wVHlwZSkKKysgICAgeworKyAg
ICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorKyAgICAgICAgICAgIHJldHVybiB2aXNp
dEZvckxvb3AobG9vcE5vZGUpOworKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wV2hpbGU6
CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0V2hpbGVMb29wKGxvb3BOb2RlKTsKKysgICAgICAg
IGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0
RG9XaGlsZUxvb3AobG9vcE5vZGUpOworKyAgICB9CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2
ZXJzZXI6OnZpc2l0Rm9yTG9vcChUSW50ZXJtTG9vcCAqbG9vcE5vZGUpCisreworKyAgICBBU1NF
UlQobG9vcE5vZGUtPmdldFR5cGUoKSA9PSBUTG9vcFR5cGU6OkVMb29wRm9yKTsKKysKKysgICAg
VEludGVybU5vZGUgKmluaXROb2RlICA9IGxvb3BOb2RlLT5nZXRJbml0KCk7CisrICAgIFRJbnRl
cm1UeXBlZCAqY29uZE5vZGUgPSBsb29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisrICAgIFRJbnRl
cm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworKyAgICBUSW50
ZXJtQmxvY2sgKmJvZHlOb2RlID0gbG9vcE5vZGUtPmdldEJvZHkoKTsKKysgICAgQVNTRVJUKGJv
ZHlOb2RlKTsKKysKKysgICAgbU91dCA8PCAiZm9yICgiOworKworKyAgICBpZiAoaW5pdE5vZGUp
CisrICAgIHsKKysgICAgICAgIGluaXROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgfQorKyAg
ICBlbHNlCisrICAgIHsKKysgICAgICAgIG1PdXQgPDwgIiAiOworKyAgICB9CisrCisrICAgIG1P
dXQgPDwgIjsgIjsKKysKKysgICAgaWYgKGNvbmROb2RlKQorKyAgICB7CisrICAgICAgICBjb25k
Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisrICAgIH0KKysKKysgICAgbU91dCA8PCAiOyAiOworKwor
KyAgICBpZiAoZXhwck5vZGUpCisrICAgIHsKKysgICAgICAgIGV4cHJOb2RlLT50cmF2ZXJzZSh0
aGlzKTsKKysgICAgfQorKworKyAgICBtT3V0IDw8ICIpXG4iOworKworKyAgICBib2R5Tm9kZS0+
dHJhdmVyc2UodGhpcyk7CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRXaGlsZUxvb3AoVEludGVybUxvb3AgKmxvb3BOb2RlKQorK3sK
KysgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkgPT0gVExvb3BUeXBlOjpFTG9vcFdoaWxl
KTsKKysKKysgICAgVEludGVybU5vZGUgKmluaXROb2RlICA9IGxvb3BOb2RlLT5nZXRJbml0KCk7
CisrICAgIFRJbnRlcm1UeXBlZCAqY29uZE5vZGUgPSBsb29wTm9kZS0+Z2V0Q29uZGl0aW9uKCk7
CisrICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigp
OworKyAgICBUSW50ZXJtQmxvY2sgKmJvZHlOb2RlID0gbG9vcE5vZGUtPmdldEJvZHkoKTsKKysg
ICAgQVNTRVJUKGNvbmROb2RlICYmIGJvZHlOb2RlKTsKKysgICAgQVNTRVJUKCFpbml0Tm9kZSAm
JiAhZXhwck5vZGUpOworKworKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKysgICAgbU91dCA8PCAi
d2hpbGUgKCI7CisrICAgIGNvbmROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgbU91dCA8PCAi
KVxuIjsKKysgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOworKworKyAgICByZXR1cm4gZmFs
c2U7CisrfQorKworK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0RG9XaGlsZUxvb3AoVElu
dGVybUxvb3AgKmxvb3BOb2RlKQorK3sKKysgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkg
PT0gVExvb3BUeXBlOjpFTG9vcERvV2hpbGUpOworKworKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5v
ZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKysgICAgVEludGVybVR5cGVkICpjb25kTm9kZSA9
IGxvb3BOb2RlLT5nZXRDb25kaXRpb24oKTsKKysgICAgVEludGVybVR5cGVkICpleHByTm9kZSA9
IGxvb3BOb2RlLT5nZXRFeHByZXNzaW9uKCk7CisrICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUg
PSBsb29wTm9kZS0+Z2V0Qm9keSgpOworKyAgICBBU1NFUlQoY29uZE5vZGUgJiYgYm9keU5vZGUp
OworKyAgICBBU1NFUlQoIWluaXROb2RlICYmICFleHByTm9kZSk7CisrCisrICAgIGVtaXRJbmRl
bnRhdGlvbigpOworKyAgICBtT3V0IDw8ICJkb1xuIjsKKysgICAgYm9keU5vZGUtPnRyYXZlcnNl
KHRoaXMpOworKyAgICBtT3V0IDw8ICJcbiI7CisrICAgIGVtaXRJbmRlbnRhdGlvbigpOworKyAg
ICBtT3V0IDw8ICJ3aGlsZSAoIjsKKysgICAgY29uZE5vZGUtPnRyYXZlcnNlKHRoaXMpOworKyAg
ICBtT3V0IDw8ICIpOyI7CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBHZW5N
ZXRhbFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2ggKmJyYW5jaE5v
ZGUpCisreworKyAgICBjb25zdCBUT3BlcmF0b3IgZmxvd09wID0gYnJhbmNoTm9kZS0+Z2V0Rmxv
d09wKCk7CisrICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBicmFuY2hOb2RlLT5nZXRFeHBy
ZXNzaW9uKCk7CisrCisrICAgIGVtaXRJbmRlbnRhdGlvbigpOworKworKyAgICBzd2l0Y2ggKGZs
b3dPcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEtpbGw6CisrICAgICAg
ICB7CisrICAgICAgICAgICAgQVNTRVJUKGV4cHJOb2RlID09IG51bGxwdHIpOworKyAgICAgICAg
ICAgIG1PdXQgPDwgIm1ldGFsOjpkaXNjYXJkX2ZyYWdtZW50KCkiOworKyAgICAgICAgfQorKyAg
ICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmV0dXJuOgorKyAg
ICAgICAgeworKyAgICAgICAgICAgIG1PdXQgPDwgInJldHVybiI7CisrICAgICAgICAgICAgaWYg
KGV4cHJOb2RlKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU91dCA8PCAiICI7
CisrICAgICAgICAgICAgICAgIGV4cHJOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKysgICAgICAgICAg
ICB9CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BCcmVhazoKKysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQoZXhwck5vZGUg
PT0gbnVsbHB0cik7CisrICAgICAgICAgICAgbU91dCA8PCAiYnJlYWsiOworKyAgICAgICAgfQor
KyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29udGludWU6
CisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKGV4cHJOb2RlID09IG51bGxwdHIpOwor
KyAgICAgICAgICAgIG1PdXQgPDwgImNvbnRpbnVlIjsKKysgICAgICAgIH0KKysgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIHsKKysgICAgICAgICAgICBMT0dJ
Q19FUlJPUigpOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiBmYWxzZTsKKyt9
CisrCisrc3RhdGljIHNpemVfdCBlbWl0TWV0YWxDYWxsQ291bnQgPSAwOworKworK2Jvb2wgc2g6
OkVtaXRNZXRhbChUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAg
ICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisr
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAg
ICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICBj
b25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorK3sKKysgICAgVEluZm9TaW5rQmFzZSAm
b3V0ID0gY29tcGlsZXIuZ2V0SW5mb1NpbmsoKS5vYmo7CisrCisrICAgIHsKKysgICAgICAgICsr
ZW1pdE1ldGFsQ2FsbENvdW50OworKyAgICAgICAgYXV0byBmaWxlbmFtZVByb3RvID0gcmVhZFN0
cmluZ0VudlZhcigiR01EX0ZJWEVEX0VNSVQiKTsKKysgICAgICAgIGlmICghZmlsZW5hbWVQcm90
by5lbXB0eSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChmaWxlbmFtZVByb3RvICE9
ICIvZGV2L251bGwiKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYXV0byB0cnlP
cGVuID0gWyZdKGNoYXIgY29uc3QgKmV4dCkgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byBm
aWxlbmFtZSA9IGZpbGVuYW1lUHJvdG87CisrICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSAr
PSBzdGQ6OnRvX3N0cmluZyhlbWl0TWV0YWxDYWxsQ291bnQpOworKyAgICAgICAgICAgICAgICAg
ICAgZmlsZW5hbWUgKz0gIi4iOworKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgKz0gZXh0
OworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcGVuKGZpbGVuYW1lLmNfc3RyKCksICJy
YiIpOworKyAgICAgICAgICAgICAgICB9OworKyAgICAgICAgICAgICAgICBGSUxFICpmaWxlID0g
dHJ5T3BlbigibWV0YWwiKTsKKysgICAgICAgICAgICAgICAgaWYgKCFmaWxlKQorKyAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBmaWxlID0gdHJ5T3BlbigiY3BwIik7Cisr
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgQVNTRVJUKGZpbGUpOworKworKyAg
ICAgICAgICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7CisrICAgICAgICAgICAgICAg
IHNpemVfdCBmaWxlU2l6ZSA9IGZ0ZWxsKGZpbGUpOworKyAgICAgICAgICAgICAgICBmc2Vlayhm
aWxlLCAwLCBTRUVLX1NFVCk7CisrCisrICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+
IGJ1ZmY7CisrICAgICAgICAgICAgICAgIGJ1ZmYucmVzaXplKGZpbGVTaXplICsgMSk7CisrICAg
ICAgICAgICAgICAgIGZyZWFkKGJ1ZmYuZGF0YSgpLCBmaWxlU2l6ZSwgMSwgZmlsZSk7CisrICAg
ICAgICAgICAgICAgIGJ1ZmYuYmFjaygpID0gJ1wwJzsKKysKKysgICAgICAgICAgICAgICAgZmNs
b3NlKGZpbGUpOworKworKyAgICAgICAgICAgICAgICBvdXQgPDwgYnVmZi5kYXRhKCk7CisrICAg
ICAgICAgICAgfQorKworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKyAg
ICB9CisrCisrICAgIG91dCA8PCAiXG5cbiI7CisrCisrICAgIGlmICghRW1pdFByb2dyYW1QcmVs
dWRlKHJvb3QsIG91dCwgcHBjKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrCisrICAgIHsKKysjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKysgICAg
ICAgIERlYnVnU2luayBvdXRXcmFwcGVyKG91dCwgcmVhZEJvb2xFbnZWYXIoIkdNRF9TVERPVVQi
KSk7CisrICAgICAgICBvdXRXcmFwcGVyLndhdGNoKHJlYWRTdHJpbmdFbnZWYXIoIkdNRF9XQVRD
SF9TVFJJTkciKSk7CisrI2Vsc2UKKysgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dFdyYXBwZXIg
PSBvdXQ7CisrI2VuZGlmCisrICAgICAgICBHZW5NZXRhbFRyYXZlcnNlciBnZW4oY29tcGlsZXIs
IG91dFdyYXBwZXIsIGlkR2VuLCBwaXBlbGluZVN0cnVjdHMsIGludmFyaWFudHMsIHN5bWJvbEVu
dik7CisrICAgICAgICByb290LnRyYXZlcnNlKCZnZW4pOworKyAgICB9CisrCisrICAgIG91dCA8
PCAiXG4iOworKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oCituZXcg
ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDQ4YWY5YQorLS0tIC9kZXYvbnVsbAor
KysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRN
ZXRhbC5oCitAQCAtMCwwICsxLDMyIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KKysjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VNSVRNRVRBTF9I
XworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxR
dWFsaWZpZXJEZWNscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorKworK25hbWVzcGFj
ZSBzaAorK3sKKysKKysvLyBXYWxrcyB0aGUgQVNUIGFuZCBlbWl0cyBNZXRhbCBjb2RlLgorK0FO
R0xFX05PX0RJU0NBUkQgYm9vbCBFbWl0TWV0YWwoVENvbXBpbGVyICZjb21waWxlciwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmcGlwZWxpbmVTdHJ1Y3RzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJp
YW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9s
RW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVByZWx1
ZGVDb25maWcgJnBwYyk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBD
T01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KK2Rp
ZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RW52aXJvbm1lbnRWYXJpYWJsZS5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQK
K2luZGV4IDAwMDAwMDAuLmQ4MjNmYzcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9ubWVudFZhcmlhYmxlLmgK
K0BAIC0wLDAgKzEsNDUgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VOVklST05NRU5UVkFSSUFCTEVfSF8KKysj
ZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VOVklST05N
RU5UVkFSSUFCTEVfSF8KKysKKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8c3RyaW5n
PgorKworKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7Cisr
CisraW5saW5lIGJvb2wgcmVhZEJvb2xFbnZWYXIoY29uc3QgY2hhciAqdmFyKQorK3sKKysgICAg
Y29uc3QgY2hhciAqc3RyID0gc3RkOjpnZXRlbnYodmFyKTsKKysgICAgaWYgKHN0ciA9PSBudWxs
cHRyKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKHN0
cmNtcChzdHIsICIwIikgPT0gMCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrICAgIEFTU0VSVChzdHJjbXAoc3RyLCAiMSIpID09IDApOworKyAgICByZXR1cm4gdHJ1
ZTsKKyt9CisrCisraW5saW5lIHN0ZDo6c3RyaW5nIHJlYWRTdHJpbmdFbnZWYXIoY29uc3QgY2hh
ciAqdmFyKQorK3sKKysgICAgY29uc3QgY2hhciAqc3RyID0gc3RkOjpnZXRlbnYodmFyKTsKKysg
ICAgaWYgKHN0ciA9PSBudWxscHRyKQorKyAgICB7CisrICAgICAgICByZXR1cm4gIiI7CisrICAg
IH0KKysgICAgcmV0dXJuIHN0cjsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2Vu
ZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTlZJUk9O
TUVOVFZBUklBQkxFX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmNwcCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKK25ldyBmaWxl
IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jZTljMDNlCistLS0gL2Rldi9udWxsCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25z
dGFudHMuY3BwCitAQCAtMCwwICsxLDk2IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRz
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvTGF5b3V0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ZpbmRGdW5jdGlvbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL1JlcGxhY2VWYXJpYWJsZS5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysK
KysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFjZQorK3sKKysKKytjbGFzcyBS
ZXdyaXRlciA6IHByaXZhdGUgVEludGVybVJlYnVpbGQKKyt7CisrICBwcml2YXRlOgorKyAgICBj
b25zdCBzaXplX3QgbU1pblJlcXVpcmVkU2l6ZTsKKysgICAgVEludGVybVNlcXVlbmNlIG1Ib2lz
dGVkRGVjbE5vZGVzOworKworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNv
bXBpbGVyLCBzaXplX3QgbWluUmVxdWlyZWRTaXplKQorKyAgICAgICAgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpLCBtTWluUmVxdWlyZWRTaXplKG1pblJlcXVpcmVkU2l6
ZSkKKysgICAge30KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25QcmUoVEludGVy
bURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKGdl
dFBhcmVudEZ1bmN0aW9uKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgRGVjbGFyYXRpb24g
ZGVjbCAgPSBWaWV3RGVjbGFyYXRpb24oZGVjbE5vZGUpOworKyAgICAgICAgICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gZGVjbC5zeW1ib2wuZ2V0VHlwZSgpOworKyAgICAgICAgICAgIGlmICh0eXBl
LmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cUNvbnN0KQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdEV4cHIgJiYgZGVjbC5pbml0RXhwci0+aGFz
Q29uc3RhbnRWYWx1ZSgpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzaXplX3Qgc2l6ZSA9IE1ldGFsTGF5b3V0T2YodHlwZSkuc2l6ZU9mOworKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbU1pblJlcXVpcmVkU2l6ZSkKKysgICAgICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBtSG9pc3RlZERlY2xOb2Rlcy5w
dXNoX2JhY2soJmRlY2xOb2RlKTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiB7ZGVjbE5vZGUsIFZpc2l0Qml0
czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgYm9vbCByZXdyaXRlKFRJbnRlcm1CbG9jayAm
cm9vdCwgSWRHZW4gJmlkR2VuKQorKyAgICB7CisrICAgICAgICBpZiAoIXJlYnVpbGRSb290KHJv
b3QpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0K
KysKKysgICAgICAgIGlmIChtSG9pc3RlZERlY2xOb2Rlcy5lbXB0eSgpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgcm9vdC5p
bnNlcnRDaGlsZE5vZGVzKEZpbmRGaXJzdEZ1bmN0aW9uRGVmaW5pdGlvbkluZGV4KCZyb290KSwg
bUhvaXN0ZWREZWNsTm9kZXMpOworKworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqb3BhcXVl
RGVjbE5vZGUgOiBtSG9pc3RlZERlY2xOb2RlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBU
SW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlID0gb3BhcXVlRGVjbE5vZGUtPmdldEFzRGVjbGFy
YXRpb25Ob2RlKCk7CisrICAgICAgICAgICAgQVNTRVJUKGRlY2xOb2RlKTsKKysgICAgICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJm9sZFZhciA9IFZpZXdEZWNsYXJhdGlvbigqZGVjbE5vZGUpLnN5
bWJvbC52YXJpYWJsZSgpOworKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmV3TmFtZSAgICAgID0g
aWRHZW4uY3JlYXRlTmV3TmFtZShvbGRWYXIubmFtZSgpKTsKKysgICAgICAgICAgICBhdXRvICpu
ZXdWYXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCAm
b2xkVmFyLmdldFR5cGUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld05hbWUuc3ltYm9sVHlwZSgpKTsKKysgICAgICAgICAgICBpZiAoIVJlcGxhY2VWYXJp
YWJsZSgmbUNvbXBpbGVyLCAmcm9vdCwgJm9sZFZhciwgbmV3VmFyKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgICAgICB9CisrICAgICAg
ICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorK307CisrCisrfSAgLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrYm9vbCBz
aDo6SG9pc3RDb25zdGFudHMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgSWRH
ZW4gJmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaW5SZXF1aXJlZFNp
emUpCisreworKyAgICByZXR1cm4gUmV3cml0ZXIoY29tcGlsZXIsIG1pblJlcXVpcmVkU2l6ZSku
cmV3cml0ZShyb290LCBpZEdlbik7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5oIGIvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmgKK25l
dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMzA2YTVlCistLS0gL2Rldi9udWxs
CisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9p
c3RDb25zdGFudHMuaAorQEAgLTAsMCArMSwyNiBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5k
ZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFO
VFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X0hPSVNUQ09OU1RBTlRTX0hfCisrCisrI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKysKKytuYW1l
c3BhY2Ugc2gKKyt7CisrCisrLy8gSG9pc3RzIGZ1bmN0aW9uLWxvY2FsIGNvbnN0YW50cyB0byB0
aGUgZ2xvYmFsIHNjb3BlIGlmIHRoZWlyIE1ldGFsIHNpemVvZiBtZWV0cworKy8vIGBtaW5SZXF1
aXJlZFNpemVgLgorK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBIb2lzdENvbnN0YW50cyhUQ29tcGls
ZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IG1pblJlcXVpcmVkU2l6ZSk7CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9IT0lTVENPTlNUQU5U
U19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9JZEdlbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvSWRHZW4uY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4u
ODRhZWQ2YgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmNwcAorQEAgLTAsMCArMSw5NyBAQAorKy8vCisrLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KysvLworKworKyNpbmNsdWRlIDxjY3R5cGU+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1
ZGUgPGxpbWl0cz4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRl
cmVkX3NldD4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKwor
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrSWRHZW46OklkR2VuKCkge30KKysKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgU3RyaW5nLCB0eXBlbmFtZSBTdHJpbmdUb0ltbXV0YWJsZT4KKytOYW1l
IElkR2VuOjpjcmVhdGVOZXdOYW1lKHNpemVfdCBjb3VudCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nVG9JbW11dGFibGUgJnRvSW1tdXRhYmxlKQorK3sKKysgICAgY29uc3Qg
dW5zaWduZWQgaWQgPSBtTmV4dCsrOworKyAgICBjaGFyIGlkQnVmZmVyW3N0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCArIDFdOworKyAgICBzcHJpbnRmKGlkQnVmZmVyLCAi
JXUiLCBpZCk7CisrCisrICAgIG1OZXdOYW1lQnVmZmVyLmNsZWFyKCk7CisrICAgIG1OZXdOYW1l
QnVmZmVyICs9ICdfJzsKKysgICAgbU5ld05hbWVCdWZmZXIgKz0gaWRCdWZmZXI7CisrCisrICAg
IC8vIE5vdGU6CisrICAgIC8vIERvdWJsZSB1bmRlcnNjb3JlcyBhcmUgb25seSBhbGxvd2VkIGlu
IEMrKyAoYW5kIHRodXMgTWV0YWwpIHZlbmRvciBpZGVudGlmaWVycywgc28gaGVyZSB3ZQorKyAg
ICAvLyB0YWtlIGNhcmUgbm90IHRvIGludHJvZHVjZSBhbnkuCisrCisrICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKysgICAgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxl
U3RyaW5nIGJhc2VOYW1lID0gdG9JbW11dGFibGUoYmFzZU5hbWVzW2ldKTsKKysgICAgICAgIGlm
ICghYmFzZU5hbWUuZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBjaGFy
ICpiYXNlID0gYmFzZU5hbWUuZGF0YSgpOworKyAgICAgICAgICAgIGlmIChiYXNlTmFtZS5iZWdp
bnNXaXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKysgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgIGJhc2UgKz0gc2l6ZW9mKGtBbmdsZUludGVybmFsUHJlZml4KSAtIDE7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIGlmICgqYmFzZSA9PSAnXycpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICArK2Jhc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIEFT
U0VSVCgqYmFzZSAhPSAnXycpOworKworKyAgICAgICAgICAgIGlmIChtTmV3TmFtZUJ1ZmZlci5i
YWNrKCkgIT0gJ18nKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbU5ld05hbWVC
dWZmZXIgKz0gJ18nOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBtTmV3TmFtZUJ1
ZmZlciArPSBiYXNlOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHJldHVybiBOYW1lKElt
bXV0YWJsZVN0cmluZyhtTmV3TmFtZUJ1ZmZlciksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwp
OworK30KKysKKytOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKGNvbnN0IEltbXV0YWJsZVN0cmlu
ZyAmYmFzZU5hbWUpCisreworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZSh7YmFzZU5hbWV9KTsK
Kyt9CisrCisrTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShjb25zdCBOYW1lICZiYXNlTmFtZSkK
Kyt7CisrICAgIHJldHVybiBjcmVhdGVOZXdOYW1lKGJhc2VOYW1lLnJhd05hbWUoKSk7CisrfQor
KworK05hbWUgSWRHZW46OmNyZWF0ZU5ld05hbWUoY29uc3QgY2hhciAqYmFzZU5hbWUpCisrewor
KyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShJbW11dGFibGVTdHJpbmcoYmFzZU5hbWUpKTsKKyt9
CisrCisrTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8SW1t
dXRhYmxlU3RyaW5nPiBiYXNlTmFtZXMpCisreworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShi
YXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFtZXMuYmVnaW4oKSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgW10oY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzKSB7IHJldHVybiBzOyB9KTsKKyt9Cisr
CisrTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TmFtZT4g
YmFzZU5hbWVzKQorK3sKKysgICAgcmV0dXJuIGNyZWF0ZU5ld05hbWUoYmFzZU5hbWVzLnNpemUo
KSwgYmFzZU5hbWVzLmJlZ2luKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNvbnN0
IE5hbWUgJnMpIHsgcmV0dXJuIHMucmF3TmFtZSgpOyB9KTsKKyt9CisrCisrTmFtZSBJZEdlbjo6
Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgY2hhciAqPiBiYXNlTmFt
ZXMpCisreworKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNl
TmFtZXMuYmVnaW4oKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgW10oY29uc3QgY2hhciAq
cykgeyByZXR1cm4gSW1tdXRhYmxlU3RyaW5nKHMpOyB9KTsKKyt9CitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmggYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaAorbmV3IGZp
bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU4MjA4OWYKKy0tLSAvZGV2L251bGwKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5o
CitAQCAtMCwwICsxLDQxIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSURHRU5fSF8KKysKKysjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysv
LyBGb3IgY3JlYXRpbmcgbmV3IGZyZXNoIG5hbWVzLgorKy8vIEFsbCBuYW1lcyBjcmVhdGVkIGFy
ZSBtYXJrZWQgYXMgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbC4KKytjbGFzcyBJZEdlbiA6IGFu
Z2xlOjpOb25Db3B5YWJsZQorK3sKKysgIHB1YmxpYzoKKysgICAgSWRHZW4oKTsKKysKKysgICAg
TmFtZSBjcmVhdGVOZXdOYW1lKGNvbnN0IEltbXV0YWJsZVN0cmluZyAmYmFzZU5hbWUpOworKyAg
ICBOYW1lIGNyZWF0ZU5ld05hbWUoY29uc3QgTmFtZSAmYmFzZU5hbWUpOworKyAgICBOYW1lIGNy
ZWF0ZU5ld05hbWUoY29uc3QgY2hhciAqYmFzZU5hbWUpOworKyAgICBOYW1lIGNyZWF0ZU5ld05h
bWUoc3RkOjppbml0aWFsaXplcl9saXN0PEltbXV0YWJsZVN0cmluZz4gYmFzZU5hbWVzKTsKKysg
ICAgTmFtZSBjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxOYW1lPiBiYXNlTmFt
ZXMpOworKyAgICBOYW1lIGNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0
IGNoYXIgKj4gYmFzZU5hbWVzKTsKKysKKysgIHByaXZhdGU6CisrICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBTdHJpbmcsIHR5cGVuYW1lIFN0cmluZ1RvSW1tdXRhYmxlPgorKyAgICBOYW1lIGNyZWF0
ZU5ld05hbWUoc2l6ZV90IGNvdW50LCBjb25zdCBTdHJpbmcgKmJhc2VOYW1lcywgY29uc3QgU3Ry
aW5nVG9JbW11dGFibGUgJnRvSW1tdXRhYmxlKTsKKysKKysgIHByaXZhdGU6CisrICAgIHVuc2ln
bmVkIG1OZXh0ID0gMDsgICAgICAgICAgLy8gYHVuc2lnbmVkYCBiZWNhdXNlIG9mICIldSIgdXNl
IGluIHNwcmludGYKKysgICAgc3RkOjpzdHJpbmcgbU5ld05hbWVCdWZmZXI7ICAvLyByZXVzYWJs
ZSBidWZmZXIgdG8gYXZvaWQgdG9ucyBvZiByZWFsbG9jYXRpb25zCisrfTsKKysKKyt9ICAvLyBu
YW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX0lER0VOX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91dC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLjUzNDZmNmYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwCitAQCAtMCww
ICsxLDQwMSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxhbGdvcml0aG0+CisrI2lu
Y2x1ZGUgPGNjdHlwZT4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8bGltaXRzPgor
KyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKwor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaCIKKysK
Kyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytl
bnVtIGNsYXNzIExhbmd1YWdlCisreworKyAgICBNZXRhbCwKKysgICAgR0xTTCwKKyt9OworKwor
K3N0YXRpYyBzaXplX3QgUm91bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgeCwgc2l6ZV90IG11bHRp
cGxlKQorK3sKKysgICAgY29uc3Qgc2l6ZV90IHJlbSA9IHggJSBtdWx0aXBsZTsKKysgICAgcmV0
dXJuIHJlbSA9PSAwID8geCA6IHggKyAobXVsdGlwbGUgLSByZW0pOworK30KKysKKyt2b2lkIExh
eW91dDo6cmVxdWlyZUFsaWdubWVudChzaXplX3QgYWxpZ24sIGJvb2wgcGFkKQorK3sKKysgICAg
YWxpZ25PZiA9IHN0ZDo6bWF4KGFsaWduT2YsIGFsaWduKTsKKysgICAgaWYgKHBhZCkKKysgICAg
eworKyAgICAgICAgc2l6ZU9mID0gUm91bmRVcFRvTXVsdGlwbGVPZihzaXplT2YsIGFsaWduKTsK
KysgICAgfQorK30KKysKKytib29sIExheW91dDo6b3BlcmF0b3I9PShjb25zdCBMYXlvdXQgJm90
aGVyKSBjb25zdAorK3sKKysgICAgcmV0dXJuIHNpemVPZiA9PSBvdGhlci5zaXplT2YgJiYgYWxp
Z25PZiA9PSBvdGhlci5hbGlnbk9mOworK30KKysKKyt2b2lkIExheW91dDo6b3BlcmF0b3IrPShj
b25zdCBMYXlvdXQgJm90aGVyKQorK3sKKysgICAgcmVxdWlyZUFsaWdubWVudChvdGhlci5hbGln
bk9mLCB0cnVlKTsKKysgICAgc2l6ZU9mICs9IG90aGVyLnNpemVPZjsKKyt9CisrCisrdm9pZCBM
YXlvdXQ6Om9wZXJhdG9yKj0oc2l6ZV90IHNjYWxlKQorK3sKKysgICAgc2l6ZU9mICo9IHNjYWxl
OworK30KKysKKytMYXlvdXQgTGF5b3V0OjpvcGVyYXRvcisoY29uc3QgTGF5b3V0ICZvdGhlcikg
Y29uc3QKKyt7CisrICAgIGF1dG8gc2VsZiA9ICp0aGlzOworKyAgICBzZWxmICs9IG90aGVyOwor
KyAgICByZXR1cm4gc2VsZjsKKyt9CisrCisrTGF5b3V0IExheW91dDo6b3BlcmF0b3IqKHNpemVf
dCBzY2FsZSkgY29uc3QKKyt7CisrICAgIGF1dG8gc2VsZiA9ICp0aGlzOworKyAgICBzZWxmICo9
IHNjYWxlOworKyAgICByZXR1cm4gc2VsZjsKKyt9CisrCisrc3RhdGljIExheW91dCBTY2FsYXJM
YXlvdXRPZihjb25zdCBUVHlwZSAmdHlwZSwgTGFuZ3VhZ2UgbGFuZ3VhZ2UpCisreworKyAgICBj
b25zdCBUQmFzaWNUeXBlIGJhc2ljVHlwZSA9IHR5cGUuZ2V0QmFzaWNUeXBlKCk7CisrICAgIHN3
aXRjaCAoYmFzaWNUeXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEJv
b2w6CisrICAgICAgICAgICAgcmV0dXJuIHsxLCAxfTsKKysgICAgICAgIGNhc2UgVEJhc2ljVHlw
ZTo6RWJ0SW50OgorKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRVSW50OgorKyAgICAgICAg
Y2FzZSBUQmFzaWNUeXBlOjpFYnRGbG9hdDoKKysgICAgICAgICAgICByZXR1cm4gezQsIDR9Owor
KyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBpZiAoSXNTYW1wbGVyKGJhc2ljVHlwZSkp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGxhbmd1YWdlKQorKyAg
ICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIExhbmd1YWdlOjpNZXRh
bDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gezgsIDh9OworKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBMYW5ndWFnZTo6R0xTTDoKKysgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gezQsIDR9OworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIFRPRE8oKTsKKysgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7Cisr
ICAgIH0KKyt9CisrCisrc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1BhY2tlZFtdICAg
PSB7MCwgMSwgMiwgMywgNH07Cisrc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNjYWxlc1VucGFj
a2VkW10gPSB7MCwgMSwgMiwgNCwgNH07CisrCisrTGF5b3V0IHNoOjpNZXRhbExheW91dE9mKGNv
bnN0IFRUeXBlICZ0eXBlLCBNZXRhbExheW91dE9mQ29uZmlnIGNvbmZpZykKKyt7CisrICAgIEFT
U0VSVCh0eXBlLmdldE5vbWluYWxTaXplKCkgPD0gNCk7CisrICAgIEFTU0VSVCh0eXBlLmdldFNl
Y29uZGFyeVNpemUoKSA8PSA0KTsKKysKKysgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBz
dG9yYWdlID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5ibG9ja1N0b3JhZ2U7CisrCisrICAg
IGNvbnN0IGJvb2wgaXNQYWNrZWQgPSAhY29uZmlnLmRpc2FibGVQYWNraW5nICYmIChzdG9yYWdl
ID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9PSBUTGF5b3V0Qmxv
Y2tTdG9yYWdlOjpFYnNTaGFyZWQpOworKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIWNv
bmZpZy5tYXNrQXJyYXkpCisrICAgIHsKKysgICAgICAgIGNvbmZpZy5tYXNrQXJyYXkgICAgPSB0
cnVlOworKyAgICAgICAgY29uc3QgTGF5b3V0IGxheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwg
Y29uZmlnKTsKKysgICAgICAgIGNvbmZpZy5tYXNrQXJyYXkgICAgPSBmYWxzZTsKKysgICAgICAg
IGNvbnN0IHNpemVfdCB2b2wgICAgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKysgICAg
ICAgIHJldHVybiBsYXlvdXQgKiB2b2w7CisrICAgIH0KKysKKysgICAgaWYgKGNvbnN0IFRTdHJ1
Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgIHsKKysgICAgICAgIEFT
U0VSVCh0eXBlLmdldE5vbWluYWxTaXplKCkgPT0gMSk7CisrICAgICAgICBBU1NFUlQodHlwZS5n
ZXRTZWNvbmRhcnlTaXplKCkgPT0gMSk7CisrICAgICAgICBhdXRvIGNvbmZpZzIgICAgICAgICAg
ICAgPSBjb25maWc7CisrICAgICAgICBjb25maWcyLm1hc2tBcnJheSAgICAgICAgPSBmYWxzZTsK
KysgICAgICAgIGF1dG8gbGF5b3V0ICAgICAgICAgICAgICA9IExheW91dDo6SWRlbnRpdHkoKTsK
KysgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7
CisrICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisrICAgICAgICB7
CisrICAgICAgICAgICAgbGF5b3V0ICs9IE1ldGFsTGF5b3V0T2YoKmZpZWxkLT50eXBlKCksIGNv
bmZpZzIpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvbmZpZy5hc3N1bWVTdHJ1Y3RzQXJl
VGFpbFBhZGRlZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBzaXplX3QgcGFkID0gbGF5b3V0
LnNpemVPZiAlIDE2OworKyAgICAgICAgICAgIGxheW91dC5zaXplT2YgKz0gcGFkOworKyAgICAg
ICAgfQorKyAgICAgICAgbGF5b3V0LnNpemVPZiA9IFJvdW5kVXBUb011bHRpcGxlT2YobGF5b3V0
LnNpemVPZiwgbGF5b3V0LmFsaWduT2YpOworKyAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAg
fQorKworKyAgICBpZiAoY29uZmlnLnRyZWF0U2FtcGxlcnNBc1RleHR1cmVFbnYgJiYgSXNTYW1w
bGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gezE2LCA4
fTsgIC8vIHBvaW50ZXJ7OCw4fSBhbmQgbWV0YWw6OnNhbXBsZXJ7OCw4fQorKyAgICB9CisrCisr
ICAgIGNvbnN0IExheW91dCBzY2FsYXJMYXlvdXQgPSBTY2FsYXJMYXlvdXRPZih0eXBlLCBMYW5n
dWFnZTo6TWV0YWwpOworKworKyAgICBpZiAodHlwZS5pc1JhbmswKCkpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisrICAgIH0KKysgICAgZWxzZSBpZiAodHlwZS5pc1Zl
Y3RvcigpKQorKyAgICB7CisrICAgICAgICBpZiAoaXNQYWNrZWQpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1BhY2tlZFt0eXBl
LmdldE5vbWluYWxTaXplKCldOworKyAgICAgICAgICAgIGF1dG8gbGF5b3V0ID0gTGF5b3V0e3Nj
YWxhckxheW91dC5zaXplT2YgKiBpbm5lclNjYWxlLCBzY2FsYXJMYXlvdXQuYWxpZ25PZn07Cisr
ICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVyU2Nh
bGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKysgICAgICAgICAgICBhdXRvIGxh
eW91dCAgICAgICAgICAgICA9IExheW91dDo6Qm90aChzY2FsYXJMYXlvdXQuc2l6ZU9mICogaW5u
ZXJTY2FsZSk7CisrICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAgICAgIH0KKysgICAg
fQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIEFTU0VSVCh0eXBlLmlzTWF0cml4KCkpOwor
KyAgICAgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQpOworKyAgICAgICAgLy8gdHlwZUN4UiA8PT4gdHlwZVJbQ10KKysgICAgICAgIGNvbnN0IHNp
emVfdCBpbm5lclNjYWxlID0gaW5uZXJTY2FsZXNVbnBhY2tlZFt0eXBlLmdldFJvd3MoKV07Cisr
ICAgICAgICBjb25zdCBzaXplX3Qgb3V0ZXJTY2FsZSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlw
ZS5nZXRDb2xzKCkpOworKyAgICAgICAgY29uc3Qgc2l6ZV90IG4gICAgICAgICAgPSBzY2FsYXJM
YXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZTsKKysgICAgICAgIHJldHVybiB7biAqIG91dGVyU2Nh
bGUsIG59OworKyAgICB9CisrfQorKworK1RMYXlvdXRCbG9ja1N0b3JhZ2Ugc2g6Ok92ZXJsYXko
VExheW91dEJsb2NrU3RvcmFnZSBvbGRTdG9yYWdlLCBjb25zdCBUVHlwZSAmdHlwZSkKKyt7Cisr
ICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgbmV3U3RvcmFnZSA9IHR5cGUuZ2V0TGF5b3V0
UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworKyAgICBzd2l0Y2ggKG5ld1N0b3JhZ2UpCisrICAg
IHsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQ6Cisr
ICAgICAgICAgICAgcmV0dXJuIG9sZFN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJz
VW5zcGVjaWZpZWQgPyBrRGVmYXVsdExheW91dEJsb2NrU3RvcmFnZQorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
b2xkU3RvcmFnZTsKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgcmV0dXJuIG5ld1N0
b3JhZ2U7CisrICAgIH0KKyt9CisrCisrVExheW91dE1hdHJpeFBhY2tpbmcgc2g6Ok92ZXJsYXko
VExheW91dE1hdHJpeFBhY2tpbmcgb2xkUGFja2luZywgY29uc3QgVFR5cGUgJnR5cGUpCisrewor
KyAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBuZXdQYWNraW5nID0gdHlwZS5nZXRMYXlv
dXRRdWFsaWZpZXIoKS5tYXRyaXhQYWNraW5nOworKyAgICBzd2l0Y2ggKG5ld1BhY2tpbmcpCisr
ICAgIHsKKysgICAgICAgIGNhc2UgVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVk
OgorKyAgICAgICAgICAgIHJldHVybiBvbGRQYWNraW5nID09IFRMYXlvdXRNYXRyaXhQYWNraW5n
OjpFbXBVbnNwZWNpZmllZCA/IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZworKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IG9sZFBhY2tpbmc7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHJldHVy
biBuZXdQYWNraW5nOworKyAgICB9CisrfQorKworK2Jvb2wgc2g6OkNhbkJlUGFja2VkKFRMYXlv
dXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSkKKyt7CisrICAgIHN3aXRjaCAoc3RvcmFnZSkKKysgICAg
eworKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQ6CisrICAgICAg
ICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkMTQwOgor
KyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisrICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNV
bnNwZWNpZmllZDoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKysgICAgfQorK30KKysKKytib29sIHNoOjpDYW5CZVBhY2tlZChUTGF5b3V0
UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcikKKyt7CisrICAgIHJldHVybiBDYW5CZVBhY2tlZChs
YXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlKTsKKyt9CisrCisrYm9vbCBzaDo6Q2FuQmVQYWNr
ZWQoY29uc3QgVFR5cGUgJnR5cGUpCisreworKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiBDYW5CZVBh
Y2tlZCh0eXBlLmdldExheW91dFF1YWxpZmllcigpKTsKKyt9CisrCisrdm9pZCBzaDo6U2V0Qmxv
Y2tTdG9yYWdlKFRUeXBlICZ0eXBlLCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpCisrewor
KyAgICBhdXRvIHF1YWwgICAgICAgICA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCk7CisrICAg
IHF1YWwuYmxvY2tTdG9yYWdlID0gc3RvcmFnZTsKKysgICAgdHlwZS5zZXRMYXlvdXRRdWFsaWZp
ZXIocXVhbCk7CisrfQorKworK3N0YXRpYyBMYXlvdXQgQ29tbW9uR2xzbFN0cnVjdExheW91dE9m
KFRGaWVsZCBjb25zdCAqY29uc3QgKmJlZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRGaWVsZCBjb25zdCAqY29uc3QgKmVuZCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2Us
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1h
dHJpeFBhY2tpbmcgbWF0cml4UGFja2luZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBib29sIG1hc2tBcnJheSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYmFzZUFsaWdubWVudCkKKyt7CisrICAgIGNv
bnN0IGJvb2wgaXNQYWNrZWQgPQorKyAgICAgICAgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9y
YWdlOjpFYnNQYWNrZWQgfHwgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFy
ZWQ7CisrCisrICAgIGF1dG8gbGF5b3V0ID0gTGF5b3V0OjpJZGVudGl0eSgpOworKyAgICBmb3Ig
KGF1dG8gaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorKyAgICB7CisrICAgICAg
ICBsYXlvdXQgKz0gR2xzbExheW91dE9mKCooKml0ZXIpLT50eXBlKCksIHN0b3JhZ2UsIG1hdHJp
eFBhY2tpbmcsIGZhbHNlKTsKKysgICAgfQorKyAgICBpZiAoIWlzUGFja2VkKSAgLy8gWFhYOiBD
b3JyZWN0PworKyAgICB7CisrICAgICAgICBsYXlvdXQuc2l6ZU9mID0gUm91bmRVcFRvTXVsdGlw
bGVPZihsYXlvdXQuc2l6ZU9mLCBsYXlvdXQuYWxpZ25PZik7CisrICAgIH0KKysgICAgbGF5b3V0
LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisrICAgIHJldHVybiBsYXlv
dXQ7CisrfQorKworK3N0YXRpYyBMYXlvdXQgQ29tbW9uR2xzbExheW91dE9mKGNvbnN0IFRUeXBl
ICZ0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgbWFza0FycmF5LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBiYXNlQWxpZ25tZW50KQorK3sKKysgICAg
QVNTRVJUKHN0b3JhZ2UgIT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQpOwor
KworKyAgICBjb25zdCBib29sIGlzUGFja2VkID0KKysgICAgICAgIHN0b3JhZ2UgPT0gVExheW91
dEJsb2NrU3RvcmFnZTo6RWJzUGFja2VkIHx8IHN0b3JhZ2UgPT0gVExheW91dEJsb2NrU3RvcmFn
ZTo6RWJzU2hhcmVkOworKworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIXR5cGUuaXNNYXRy
aXgoKSAmJiAhbWFza0FycmF5KQorKyAgICB7CisrICAgICAgICBhdXRvIGxheW91dCA9IEdsc2xM
YXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCB0cnVlKTsKKysgICAgICAgIGxh
eW91dCAqPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKysgICAgICAgIGxheW91dC5yZXF1
aXJlQWxpZ25tZW50KGJhc2VBbGlnbm1lbnQsIHRydWUpOworKyAgICAgICAgcmV0dXJuIGxheW91
dDsKKysgICAgfQorKworKyAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlw
ZS5nZXRTdHJ1Y3QoKSkKKysgICAgeworKyAgICAgICAgQVNTRVJUKHR5cGUuZ2V0Tm9taW5hbFNp
emUoKSA9PSAxKTsKKysgICAgICAgIEFTU0VSVCh0eXBlLmdldFNlY29uZGFyeVNpemUoKSA9PSAx
KTsKKysgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRz
KCk7CisrICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGZpZWxkcy5kYXRh
KCksIGZpZWxkcy5kYXRhKCkgKyBmaWVsZHMuc2l6ZSgpLCBzdG9yYWdlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIGJh
c2VBbGlnbm1lbnQpOworKyAgICB9CisrCisrICAgIGNvbnN0IGF1dG8gc2NhbGFyTGF5b3V0ID0g
U2NhbGFyTGF5b3V0T2YodHlwZSwgTGFuZ3VhZ2U6OkdMU0wpOworKworKyAgICBpZiAodHlwZS5p
c1JhbmswKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisrICAgIH0K
KysgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorKyAgICB7CisrICAgICAgICBpZiAoaXNQ
YWNrZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemVTY2FsZSAg
PSBpbm5lclNjYWxlc1BhY2tlZFt0eXBlLmdldE5vbWluYWxTaXplKCldOworKyAgICAgICAgICAg
IGNvbnN0IHNpemVfdCBhbGlnblNjYWxlID0gaW5uZXJTY2FsZXNVbnBhY2tlZFt0eXBlLmdldE5v
bWluYWxTaXplKCldOworKyAgICAgICAgICAgIGF1dG8gbGF5b3V0ID0KKysgICAgICAgICAgICAg
ICAgTGF5b3V0e3NjYWxhckxheW91dC5zaXplT2YgKiBzaXplU2NhbGUsIHNjYWxhckxheW91dC5h
bGlnbk9mICogYWxpZ25TY2FsZX07CisrICAgICAgICAgICAgcmV0dXJuIGxheW91dDsKKysgICAg
ICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBzaXpl
X3QgaW5uZXJTY2FsZSA9IGlubmVyU2NhbGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgp
XTsKKysgICAgICAgICAgICBhdXRvIGxheW91dCAgICAgICAgICAgICA9IExheW91dDo6Qm90aChz
Y2FsYXJMYXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZSk7CisrICAgICAgICAgICAgcmV0dXJuIGxh
eW91dDsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIEFT
U0VSVCh0eXBlLmlzTWF0cml4KCkpOworKworKyAgICAgICAgc2l6ZV90IGlubmVyRGltOworKyAg
ICAgICAgc2l6ZV90IG91dGVyRGltOworKworKyAgICAgICAgc3dpdGNoIChtYXRyaXhQYWNraW5n
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVExheW91dE1hdHJpeFBhY2tpbmc6OkVt
cENvbHVtbk1ham9yOgorKyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IHN0YXRpY19jYXN0PHNp
emVfdD4odHlwZS5nZXRSb3dzKCkpOworKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0YXRp
Y19jYXN0PHNpemVfdD4odHlwZS5nZXRDb2xzKCkpOworKyAgICAgICAgICAgICAgICBicmVhazsK
KysgICAgICAgICAgICBjYXNlIFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBSb3dNYWpvcjoKKysg
ICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29s
cygpKTsKKysgICAgICAgICAgICAgICAgb3V0ZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5
cGUuZ2V0Um93cygpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2Fz
ZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgICAg
IExPR0lDX0VSUk9SKCk7CisrICAgICAgICAgICAgICAgIGlubmVyRGltID0gMDsKKysgICAgICAg
ICAgICAgICAgb3V0ZXJEaW0gPSAwOworKyAgICAgICAgfQorKworKyAgICAgICAgb3V0ZXJEaW0g
Kj0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisrCisrICAgICAgICBjb25zdCBzaXplX3Qg
aW5uZXJTY2FsZSA9IGlubmVyU2NhbGVzVW5wYWNrZWRbaW5uZXJEaW1dOworKyAgICAgICAgY29u
c3Qgc2l6ZV90IG4gICAgICAgICAgPSBpbm5lclNjYWxlICogc2NhbGFyTGF5b3V0LnNpemVPZjsK
KysgICAgICAgIExheW91dCBsYXlvdXQgICAgICAgICAgID0ge291dGVyRGltICogbiwgbn07Cisr
ICAgICAgICBsYXlvdXQucmVxdWlyZUFsaWdubWVudChiYXNlQWxpZ25tZW50LCB0cnVlKTsKKysg
ICAgICAgIHJldHVybiBsYXlvdXQ7CisrICAgIH0KKyt9CisrCisrTGF5b3V0IHNoOjpHbHNsTGF5
b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgVExheW91
dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRN
YXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBtYXNrQXJyYXkpCisreworKyAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpIDw9IDQp
OworKyAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPD0gNCk7CisrCisrICAgIHN0
b3JhZ2UgICAgICAgPSBPdmVybGF5KHN0b3JhZ2UsIHR5cGUpOworKyAgICBtYXRyaXhQYWNraW5n
ID0gT3ZlcmxheShtYXRyaXhQYWNraW5nLCB0eXBlKTsKKysKKysgICAgc3dpdGNoIChzdG9yYWdl
KQorKyAgICB7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoK
KysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1h
dHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9m
KHR5cGUsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworKyAgICAgICAg
Y2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6CisrICAgICAgICAgICAgcmV0dXJu
IENvbW1vbkdsc2xMYXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJy
YXksIDE2KTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgor
KyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsTGF5b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0
cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3Rv
cmFnZTo6RWJzVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAg
ICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7CisrICAgIH0KKyt9CisrCisrQU5HTEVf
Tk9fRElTQ0FSRCBMYXlvdXQgc2g6Okdsc2xTdHJ1Y3RMYXlvdXRPZihURmllbGQgY29uc3QgKmNv
bnN0ICpiZWdpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRGaWVsZCBjb25zdCAqY29uc3QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQ
YWNraW5nIG1hdHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG1hc2tBcnJheSkKKyt7CisrICAgIEFTU0VSVChzdG9yYWdlICE9
IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkKTsKKysgICAgQVNTRVJUKG1hdHJp
eFBhY2tpbmcgIT0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkKTsKKysKKysg
ICAgc3dpdGNoIChzdG9yYWdlKQorKyAgICB7CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0
b3JhZ2U6OkVic1BhY2tlZDoKKysgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExh
eW91dE9mKGJlZ2luLCBlbmQsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7
CisrICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKysgICAgICAg
ICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBlbmQsIHN0b3JhZ2Us
IG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworKyAgICAgICAgY2FzZSBUTGF5b3V0Qmxv
Y2tTdG9yYWdlOjpFYnNTdGQxNDA6CisrICAgICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1
Y3RMYXlvdXRPZihiZWdpbiwgZW5kLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXks
IDE2KTsKKysgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorKyAg
ICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3Rv
cmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKysgICAgICAgIGNhc2UgVExheW91
dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQ6CisrICAgICAgICAgICAgTE9HSUNfRVJST1Io
KTsKKysgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7CisrICAgIH0KKyt9Citk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0xheW91dC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0xheW91dC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQxM2VkZgor
LS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0xheW91dC5oCitAQCAtMCwwICsxLDg4IEBACisrLy8KKysvLyBDb3B5cmlnaHQg
MjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisr
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlPVVRf
SF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0xB
WU9VVF9IXworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworK2Nv
bnN0ZXhwciBjb25zdCBhdXRvIGtEZWZhdWx0TGF5b3V0QmxvY2tTdG9yYWdlICA9IFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1NoYXJlZDsKKytjb25zdGV4cHIgY29uc3QgYXV0byBrRGVmYXVsdExh
eW91dE1hdHJpeFBhY2tpbmcgPSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wQ29sdW1uTWFqb3I7
CisrCisrLy8gUmV0dXJucyBgb2xkU3RvcmFnZWAgaWYgYHR5cGVgIGhhcyB1bnNwZWNpZmllZCBi
bG9jayBzdG9yYWdlLgorKy8vIE90aGVyd2lzZSByZXR1cm5zIGJsb2NrIHN0b3JhZ2Ugb2YgYHR5
cGVgLgorK1RMYXlvdXRCbG9ja1N0b3JhZ2UgT3ZlcmxheShUTGF5b3V0QmxvY2tTdG9yYWdlIG9s
ZFN0b3JhZ2UsIGNvbnN0IFRUeXBlICZ0eXBlKTsKKysKKysvLyBSZXR1cm5zIGBvbGRQYWNraW5n
YCBpZiBgdHlwZWAgaGFzIHVuc3BlY2lmaWVkIG1hdHJpeCBwYWNraW5nLgorKy8vIE90aGVyd2lz
ZSByZXR1cm5zIG1hdHJpeCBwYWNraW5nIG9mIGB0eXBlYC4KKytUTGF5b3V0TWF0cml4UGFja2lu
ZyBPdmVybGF5KFRMYXlvdXRNYXRyaXhQYWNraW5nIG9sZFBhY2tpbmcsIGNvbnN0IFRUeXBlICZ0
eXBlKTsKKysKKysvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZv
ciB0aGUgYmxvY2sgc3RvcmFnZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCisrYm9v
bCBDYW5CZVBhY2tlZChUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpOworKworKy8vIFJldHVy
bnMgd2hldGhlciBvciBub3QgaXQgaXMgcGVybWlzc2FibGUgZm9yIHRoZSBsYXlvdXQgcXVhbGlm
aWVyIHRvIHVzZSBhIHBhY2tlZCByZXByZXNlbnRhdGlvbi4KKytib29sIENhbkJlUGFja2VkKFRM
YXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyKTsKKysKKysvLyBSZXR1cm5zIHdoZXRoZXIg
b3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZvciB0aGUgdHlwZSB0byB1c2UgYSBwYWNrZWQgcmVw
cmVzZW50YXRpb24uCisrYm9vbCBDYW5CZVBhY2tlZChjb25zdCBUVHlwZSAmdHlwZSk7CisrCisr
Ly8gU2V0cyB0aGUgYmxvY2sgc3RvcmFnZSBmb3IgYSB0eXBlLgorK3ZvaWQgU2V0QmxvY2tTdG9y
YWdlKFRUeXBlICZ0eXBlLCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UpOworKworKy8vIENv
bnRhaW5zIGBzaXplb2ZgIGFuZCBgYWxpZ25vZmAgaW5mb3JtYXRpb24uCisrc3RydWN0IExheW91
dAorK3sKKysgICAgc2l6ZV90IHNpemVPZjsKKysgICAgc2l6ZV90IGFsaWduT2Y7CisrCisrICAg
IHN0YXRpYyBMYXlvdXQgSWRlbnRpdHkoKSB7IHJldHVybiB7MCwgMX07IH0KKysgICAgc3RhdGlj
IExheW91dCBJbnZhbGlkKCkgeyByZXR1cm4gezAsIDB9OyB9CisrICAgIHN0YXRpYyBMYXlvdXQg
Qm90aChzaXplX3QgbikgeyByZXR1cm4ge24sIG59OyB9CisrCisrICAgIHZvaWQgcmVxdWlyZUFs
aWdubWVudChzaXplX3QgYWxpZ24sIGJvb2wgcGFkKTsKKysKKysgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworKworKyAgICB2b2lkIG9wZXJhdG9yKz0oY29u
c3QgTGF5b3V0ICZvdGhlcik7CisrICAgIHZvaWQgb3BlcmF0b3IqPShzaXplX3Qgc2NhbGUpOwor
KworKyAgICBMYXlvdXQgb3BlcmF0b3IrKGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworKyAg
ICBMYXlvdXQgb3BlcmF0b3IqKHNpemVfdCBzY2FsZSkgY29uc3Q7CisrfTsKKysKKytzdHJ1Y3Qg
TWV0YWxMYXlvdXRPZkNvbmZpZworK3sKKysgICAgYm9vbCBkaXNhYmxlUGFja2luZyAgICAgICAg
ICAgICA9IGZhbHNlOworKyAgICBib29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAgID0gZmFs
c2U7CisrICAgIGJvb2wgdHJlYXRTYW1wbGVyc0FzVGV4dHVyZUVudiAgPSBmYWxzZTsKKysgICAg
Ym9vbCBhc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCA9IGZhbHNlOyAgLy8gUGFkIHRvIG11bHRp
cGxlIG9mIDE2CisrfTsKKysKKysvLyBSZXR1cm5zIHRoZSBsYXlvdXQgb2YgYSB0eXBlIGlmIGl0
IHdlcmUgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYSBNZXRhbCBwcm9ncmFtLgorKy8vIFRoaXMgZGVs
aWJlcmF0ZWx5IGlnbm9yZXMgdGhlIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYW5kIFRMYXlvdXRNYXRy
aXhQYWNraW5nIG9mIGFueSB0eXBlLgorK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0IE1ldGFsTGF5
b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUsIE1ldGFsTGF5b3V0T2ZDb25maWcgY29uZmlnID0ge30p
OworKworKy8vIFJldHVybnMgdGhlIGxheW91dCBvZiBhIHR5cGUgaWYgaXQgd2VyZSB0byBiZSBy
ZXByZXNlbnRlZCBpbiBhIEdMU0wgcHJvZ3JhbS4KKytBTkdMRV9OT19ESVNDQVJEIExheW91dAor
K0dsc2xMYXlvdXRPZihjb25zdCBUVHlwZSAmdHlwZSwKKysgICAgICAgICAgICAgVExheW91dEJs
b2NrU3RvcmFnZSBzdG9yYWdlICAgICAgICA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3Bl
Y2lmaWVkLAorKyAgICAgICAgICAgICBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5n
ID0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcFVuc3BlY2lmaWVkLAorKyAgICAgICAgICAgICBi
b29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAgICAgID0gZmFsc2UpOworKworKy8vIFJldHVy
bnMgdGhlIGxheW91dCBvZiBhIHN0cnVjdHVyZSBpZiBpdCB3ZXJlIHRvIGJlIHJlcHJlc2VudGVk
IGluIGEgR0xTTCBwcm9ncmFtLgorK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0IEdsc2xTdHJ1Y3RM
YXlvdXRPZihURmllbGQgY29uc3QgKmNvbnN0ICpiZWdpbiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxkIGNvbnN0ICpjb25zdCAqZW5kLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTGF5b3V0QmxvY2tTdG9yYWdl
IHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRM
YXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbWFza0FycmF5ID0gZmFsc2UpOworKworK30gIC8v
IG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfTEFZT1VUX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3Bw
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0
aW9uc1RvRGVmaW5pdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw
MC4uM2UzMGRhZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwCitAQCAt
MCwwICsxLDM0IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKysKKyt1c2luZyBuYW1l
c3BhY2Ugc2g7CisrCisrY2xhc3MgTWFwcGVyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKKyt7
CisrICBwdWJsaWM6CisrICAgIEZ1bmN0aW9uVG9EZWZpbml0aW9uIG1GdW5jVG9EZWY7CisrCisr
ICBwdWJsaWM6CisrICAgIE1hcHBlcigpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwg
ZmFsc2UpIHt9CisrCisrICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJ
bnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24o
KTsKKysgICAgICAgIEFTU0VSVChmdW5jLT5nZXRCdWlsdEluT3AoKSA9PSBUT3BlcmF0b3I6OkVP
cE51bGwpOworKyAgICAgICAgbUZ1bmNUb0RlZltmdW5jXSA9IGZ1bmNEZWZOb2RlOworKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrfTsKKysKKytGdW5jdGlvblRvRGVmaW5pdGlvbiBz
aDo6TWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAg
ICBNYXBwZXIgbWFwcGVyOworKyAgICByb290LnRyYXZlcnNlKCZtYXBwZXIpOworKyAgICByZXR1
cm4gc3RkOjptb3ZlKG1hcHBlci5tRnVuY1RvRGVmKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVm
aW5pdGlvbnMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl
eCAwMDAwMDAwLi40ZTU2ZGRlCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5o
CitAQCAtMCwwICsxLDI1IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NQVBGVU5DVElPTlNUT0RFRklOSVRJT05T
X0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9N
QVBGVU5DVElPTlNUT0RFRklOSVRJT05TX0hfCisrCisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+
CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZl
cnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEEgbWFwIGZyb20gZnVuY3Rpb25z
IHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbnMuCisrdXNpbmcgRnVuY3Rpb25Ub0Rl
ZmluaXRpb24gPSBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVEZ1bmN0aW9uICosIFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24gKj47CisrCisrLy8gTWFwcyBmdW5jdGlvbnMgdG8gdGhlaXIgY29y
cmVzcG9uZGluZyBkZWZpbml0aW9ucy4KKytBTkdMRV9OT19ESVNDQVJEIEZ1bmN0aW9uVG9EZWZp
bml0aW9uIE1hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMoVEludGVybUJsb2NrICZyb290KTsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNfSF8KK2RpZmYg
LS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFw
U3ltYm9scy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTWFwU3ltYm9scy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4w
MzVjOTMwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5jcHAKK0BAIC0wLDAgKzEsNDYgQEAKKysvLwor
Ky8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTWFwU3ltYm9scy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisreworKworK2NsYXNzIFJld3Jp
dGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAgcHJpdmF0ZToKKysgICAgc3RkOjpm
dW5jdGlvbjxUSW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYp
PiBtTWFwOworKworKyAgcHVibGljOgorKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVy
LAorKyAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2RlICYoY29uc3QgVEZ1bmN0
aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKysgICAgICAgIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbU1hcChtYXApCisrICAgIHt9CisrCisrICAgIFBvc3RS
ZXN1bHQgdmlzaXRTeW1ib2xQb3N0KFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRl
CisrICAgIHsKKysgICAgICAgIHJldHVybiBtTWFwKGdldFBhcmVudEZ1bmN0aW9uKCksIHN5bWJv
bE5vZGUpOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2UKKysKKytib29sIHNoOjpN
YXBTeW1ib2xzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRl
cm1Ob2RlICYoY29uc3QgVEZ1bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKyt7Cisr
ICAgIFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzdGQ6Om1vdmUobWFwKSk7CisrICAgIGlm
ICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBm
YWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCBiL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgK
K25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NTY4OTBhCistLS0gL2Rldi9u
dWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TWFwU3ltYm9scy5oCitAQCAtMCwwICsxLDI3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRl
ZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NQVBWQVJJQUJMRVNU
T01FTUJFUkFDQ0VTU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9S
TUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJBQ0NFU1NfSF8KKysKKysjaW5jbHVkZSA8
ZnVuY3Rpb25hbD4KKysKKysjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKworK25hbWVzcGFjZSBzaAorK3sK
KysKKysvLyBNYXBzIFRJbnRlcm1TeW1ib2wgbm9kZXMgdG8gVEludGVybU5vZGUgbm9kZXMuCisr
Ly8gVGhlIHBhcmVudCBmdW5jdGlvbiBvZiBhIHN5bWJvbCBpcyBwcm92aWRlZCB0byB0aGUgbWFw
cGluZyB3aGVuIGFwcGxpY2FibGUuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIE1hcFN5bWJvbHMo
CisrICAgIFRDb21waWxlciAmY29tcGlsZXIsCisrICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysg
ICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJt
U3ltYm9sICYpPiBtYXApOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8g
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9N
RU1CRVJBQ0NFU1NfSF8KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Nb2RpZnlTdHJ1Y3QuY3BwCituZXcgZmlsZSBtb2Rl
IDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTc3OGQzNAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5j
cHAKK0BAIC0wLDAgKzEsMTAwMSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxhbGdv
cml0aG0+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPG51bWVyaWM+CisrI2luY2x1
ZGUgPHVub3JkZXJlZF9tYXA+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMu
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TW9kaWZ5U3RydWN0LmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisrCisrc2l6ZV90IE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OnNpemUo
KSBjb25zdAorK3sKKysgICAgcmV0dXJuIG9yZGVyaW5nLnNpemUoKTsKKyt9CisrCisrY29uc3Qg
TW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJk1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmF0KHNp
emVfdCBpbmRleCkgY29uc3QKKyt7CisrICAgIEFTU0VSVChpbmRleCA8IHNpemUoKSk7CisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnMgICAgICAgICAgICAgID0gb3JkZXJpbmdbaW5kZXhdOworKyAg
ICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAqbSA9IGZpbmQoKnMpOworKyAgICBBU1NF
UlQobSk7CisrICAgIHJldHVybiAqbTsKKyt9CisrCisrY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNo
aW5lcnkgKk1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OmZpbmQoY29uc3QgVFN0cnVjdHVyZSAm
cykgY29uc3QKKyt7CisrICAgIGF1dG8gaXRlciA9IG9yaWdpbmFsVG9NYWNoaW5lcnkuZmluZCgm
cyk7CisrICAgIGlmIChpdGVyID09IG9yaWdpbmFsVG9NYWNoaW5lcnkuZW5kKCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICB9CisrICAgIHJldHVybiAmaXRlci0+c2Vj
b25kOworK30KKysKKyt2b2lkIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6Omluc2VydChjb25z
dCBUU3RydWN0dXJlICZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkpCisreworKyAgICBBU1NF
UlQoIWZpbmQocykpOworKyAgICBvcmlnaW5hbFRvTWFjaGluZXJ5WyZzXSA9IG1hY2hpbmVyeTsK
KysgICAgb3JkZXJpbmcucHVzaF9iYWNrKCZzKTsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrVEludGVybVR5cGVkICZGbGF0dGVuKFN5bWJv
bEVudiAmc3ltYm9sRW52LCBUSW50ZXJtVHlwZWQgJm5vZGUpCisreworKyAgICBhdXRvICZ0eXBl
ID0gbm9kZS5nZXRUeXBlKCk7CisrICAgIEFTU0VSVCh0eXBlLmlzQXJyYXkoKSk7CisrCisrICAg
IGF1dG8gJnJldFR5cGUgPSBJbm5lcm1vc3RUeXBlKHR5cGUpOworKyAgICByZXRUeXBlLm1ha2VB
cnJheSgxKTsKKysKKysgICAgcmV0dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChO
YW1lKCJmbGF0dGVuIiksIHJldFR5cGUsICpuZXcgVEludGVybVNlcXVlbmNleyZub2RlfSk7Cisr
fQorKworK3N0cnVjdCBGbGF0dGVuQXJyYXkKKyt7fTsKKysKKytzdHJ1Y3QgUGF0aEl0ZW0KKyt7
CisrICAgIGVudW0gY2xhc3MgVHlwZQorKyAgICB7CisrICAgICAgICBGaWVsZCwgICAgICAgICAv
LyBTdHJ1Y3QgZmllbGQgaW5kZXhpbmcuCisrICAgICAgICBJbmRleCwgICAgICAgICAvLyBBcnJh
eSwgdmVjdG9yLCBvciBtYXRyaXggaW5kZXhpbmcuCisrICAgICAgICBGbGF0dGVuQXJyYXksICAv
LyBBcnJheSBvZiBhbnkgcmFuayAtPiBwb2ludGVyIG9mIGlubmVybW9zdCB0eXBlLgorKyAgICB9
OworKworKyAgICBQYXRoSXRlbShjb25zdCBURmllbGQgJmZpZWxkKSA6IGZpZWxkKCZmaWVsZCks
IHR5cGUoVHlwZTo6RmllbGQpIHt9CisrICAgIFBhdGhJdGVtKGludCBpbmRleCkgOiBpbmRleChp
bmRleCksIHR5cGUoVHlwZTo6SW5kZXgpIHt9CisrICAgIFBhdGhJdGVtKHVuc2lnbmVkIGluZGV4
KSA6IFBhdGhJdGVtKHN0YXRpY19jYXN0PGludD4oaW5kZXgpKSB7fQorKyAgICBQYXRoSXRlbShG
bGF0dGVuQXJyYXkgZmxhdHRlbikgOiB0eXBlKFR5cGU6OkZsYXR0ZW5BcnJheSkge30KKysKKysg
ICAgdW5pb24KKysgICAgeworKyAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZDsKKysgICAgICAg
IGludCBpbmRleDsKKysgICAgfTsKKysgICAgVHlwZSB0eXBlOworK307CisrCisrVEludGVybVR5
cGVkICZCdWlsZFBhdGhBY2Nlc3MoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGF0aEl0ZW0+ICZwYXRoKQorK3sKKysg
ICAgVEludGVybVR5cGVkICpjdXJyID0gbmV3IFRJbnRlcm1TeW1ib2woJnZhcik7CisrICAgIGZv
ciAoY29uc3QgUGF0aEl0ZW0gJml0ZW0gOiBwYXRoKQorKyAgICB7CisrICAgICAgICBzd2l0Y2gg
KGl0ZW0udHlwZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIFBhdGhJdGVtOjpUeXBl
OjpGaWVsZDoKKysgICAgICAgICAgICAgICAgY3VyciA9ICZBY2Nlc3NGaWVsZCgqY3VyciwgaXRl
bS5maWVsZC0+bmFtZSgpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAg
Y2FzZSBQYXRoSXRlbTo6VHlwZTo6SW5kZXg6CisrICAgICAgICAgICAgICAgIGN1cnIgPSAmQWNj
ZXNzSW5kZXgoKmN1cnIsIGl0ZW0uaW5kZXgpOworKyAgICAgICAgICAgICAgICBicmVhazsKKysg
ICAgICAgICAgICBjYXNlIFBhdGhJdGVtOjpUeXBlOjpGbGF0dGVuQXJyYXk6CisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBjdXJyID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqY3Vycik7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIHJldHVybiAqY3VycjsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysK
Kyt1c2luZyBPcmlnaW5hbFBhcmFtID0gY29uc3QgVFZhcmlhYmxlICY7CisrdXNpbmcgTW9kaWZp
ZWRQYXJhbSA9IGNvbnN0IFRWYXJpYWJsZSAmOworKworK3VzaW5nIE9yaWdpbmFsQWNjZXNzID0g
VEludGVybVR5cGVkOworK3VzaW5nIE1vZGlmaWVkQWNjZXNzID0gVEludGVybVR5cGVkOworKwor
K3N0cnVjdCBBY2Nlc3MKKyt7CisrICAgIE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbDsKKysgICAg
TW9kaWZpZWRBY2Nlc3MgJm1vZGlmaWVkOworKworKyAgICBzdHJ1Y3QgRW52CisrICAgIHsKKysg
ICAgICAgIGNvbnN0IENvbnZlcnRUeXBlIHR5cGU7CisrICAgIH07CisrfTsKKysKKyt1c2luZyBD
b252ZXJzaW9uRnVuYyA9IHN0ZDo6ZnVuY3Rpb248QWNjZXNzKEFjY2Vzczo6RW52ICYsIE9yaWdp
bmFsQWNjZXNzICYsIE1vZGlmaWVkQWNjZXNzICYpPjsKKysKKytjbGFzcyBDb252ZXJ0U3RydWN0
U3RhdGUgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyt7CisrICBwcml2YXRlOgorKyAgICBzdHJ1Y3Qg
Q29udmVyc2lvbkluZm8KKysgICAgeworKyAgICAgICAgQ29udmVyc2lvbkZ1bmMgc3RkRnVuYzsK
KysgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqYXN0RnVuYzsKKysgICAgICAgIHN0ZDo6dmVjdG9y
PFBhdGhJdGVtPiBwYXRoSXRlbXM7CisrICAgICAgICBJbW11dGFibGVTdHJpbmcgcGF0aE5hbWU7
CisrICAgIH07CisrCisrICBwdWJsaWM6CisrICAgIENvbnZlcnRTdHJ1Y3RTdGF0ZShTeW1ib2xF
bnYgJnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vZGlmeVN0cnVjdENvbmZpZyAmY29uZmlnLAor
KyAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFj
aGluZXJpZXMpCisrICAgICAgICA6IGNvbmZpZyhjb25maWcpLAorKyAgICAgICAgICBzeW1ib2xF
bnYoc3ltYm9sRW52KSwKKysgICAgICAgICAgbW9kaWZpZWRGaWVsZHMoKm5ldyBURmllbGRMaXN0
KCkpLAorKyAgICAgICAgICBzeW1ib2xUYWJsZShzeW1ib2xFbnYuc3ltYm9sVGFibGUoKSksCisr
ICAgICAgICAgIGlkR2VuKGlkR2VuKSwKKysgICAgICAgICAgb3V0TWFjaGluZXJpZXMob3V0TWFj
aGluZXJpZXMpCisrICAgIHt9CisrCisrICAgIH5Db252ZXJ0U3RydWN0U3RhdGUoKQorKyAgICB7
CisrICAgICAgICBBU1NFUlQobmFtZVBhdGguZW1wdHkoKSk7CisrICAgICAgICBBU1NFUlQobmFt
ZVBhdGhTaXplcy5lbXB0eSgpKTsKKysgICAgfQorKworKyAgICB2b2lkIHB1Ymxpc2goY29uc3Qg
VFN0cnVjdHVyZSAmb3JpZ2luYWxTdHJ1Y3QsIGNvbnN0IE5hbWUgJm1vZGlmaWVkU3RydWN0TmFt
ZSkKKysgICAgeworKyAgICAgICAgY29uc3QgYm9vbCBpc09yaWdpbmFsVG9Nb2RpZmllZCA9IGNv
bmZpZy5jb252ZXJ0VHlwZSA9PSBDb252ZXJ0VHlwZTo6T3JpZ2luYWxUb01vZGlmaWVkOworKwor
KyAgICAgICAgYXV0byAmbW9kaWZpZWRTdHJ1Y3QgPSAqbmV3IFRTdHJ1Y3R1cmUoJnN5bWJvbFRh
YmxlLCBtb2RpZmllZFN0cnVjdE5hbWUucmF3TmFtZSgpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZGlmaWVkRmllbGRzLCBtb2RpZmllZFN0cnVj
dE5hbWUuc3ltYm9sVHlwZSgpKTsKKysKKysgICAgICAgIGF1dG8gJmZ1bmMgPSAqbmV3IFRGdW5j
dGlvbigKKysgICAgICAgICAgICAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgaWRHZW4uY3Jl
YXRlTmV3TmFtZShpc09yaWdpbmFsVG9Nb2RpZmllZCA/ICJvcmlnaW5hbFRvTW9kaWZpZWQiIDog
Im1vZGlmaWVkVG9PcmlnaW5hbCIpCisrICAgICAgICAgICAgICAgIC5yYXdOYW1lKCksCisrICAg
ICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwgbmV3IFRUeXBlKFRCYXNpY1R5cGU6
OkVidFZvaWQpLCBmYWxzZSk7CisrCisrICAgICAgICBPcmlnaW5hbFBhcmFtIG9yaWdpbmFsUGFy
YW0gPQorKyAgICAgICAgICAgIENyZWF0ZUluc3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsIG9y
aWdpbmFsU3RydWN0LCBOYW1lKCJvcmlnaW5hbCIpKTsKKysgICAgICAgIE1vZGlmaWVkUGFyYW0g
bW9kaWZpZWRQYXJhbSA9CisrICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1i
b2xUYWJsZSwgbW9kaWZpZWRTdHJ1Y3QsIE5hbWUoIm1vZGlmaWVkIikpOworKyAgICAgICAgc3lt
Ym9sRW52Lm1hcmtBc1JlZmVyZW5jZShvcmlnaW5hbFBhcmFtLCBBZGRyZXNzU3BhY2U6OlRocmVh
ZCk7CisrICAgICAgICBzeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKG1vZGlmaWVkUGFyYW0sIGNv
bmZpZy5leHRlcm5hbEFkZHJlc3NTcGFjZSk7CisrICAgICAgICBpZiAoaXNPcmlnaW5hbFRvTW9k
aWZpZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgZnVuYy5hZGRQYXJhbWV0ZXIoJm9yaWdp
bmFsUGFyYW0pOworKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFt
KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBm
dW5jLmFkZFBhcmFtZXRlcigmbW9kaWZpZWRQYXJhbSk7CisrICAgICAgICAgICAgZnVuYy5hZGRQ
YXJhbWV0ZXIoJm9yaWdpbmFsUGFyYW0pOworKyAgICAgICAgfQorKworKyAgICAgICAgVEludGVy
bUJsb2NrICZib2R5ID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKysKKysgICAgICAgIEFjY2Vzczo6
RW52IGVudntjb25maWcuY29udmVydFR5cGV9OworKworKyAgICAgICAgZm9yIChDb252ZXJzaW9u
SW5mbyAmaW5mbyA6IGNvbnZlcnNpb25JbmZvcykKKysgICAgICAgIHsKKysgICAgICAgICAgICBh
dXRvIGNvbnZlcnQgPSBbJl0oT3JpZ2luYWxBY2Nlc3MgJm9yaWdpbmFsLCBNb2RpZmllZEFjY2Vz
cyAmbW9kaWZpZWQpIHsKKysgICAgICAgICAgICAgICAgaWYgKGluZm8uYXN0RnVuYykKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmZvLnN0ZEZ1bmMp
OworKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZzcmMgID0gaXNPcmlnaW5hbFRv
TW9kaWZpZWQgPyBtb2RpZmllZCA6IG9yaWdpbmFsOworKyAgICAgICAgICAgICAgICAgICAgVElu
dGVybVR5cGVkICZkZXN0ID0gaXNPcmlnaW5hbFRvTW9kaWZpZWQgPyBvcmlnaW5hbCA6IG1vZGlm
aWVkOworKyAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFn
Z3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKAorKyAgICAgICAgICAgICAgICAgICAgICAgICpp
bmZvLmFzdEZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2V7JmRlc3QsICZzcmN9KSk7CisrICAgICAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5mby5zdGRGdW5jKTsKKysgICAgICAgICAgICAg
ICAgICAgIEFjY2VzcyBhY2Nlc3MgICAgICA9IGluZm8uc3RkRnVuYyhlbnYsIG9yaWdpbmFsLCBt
b2RpZmllZCk7CisrICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnNyYyAgPSBpc09y
aWdpbmFsVG9Nb2RpZmllZCA/IGFjY2Vzcy5vcmlnaW5hbCA6IGFjY2Vzcy5tb2RpZmllZDsKKysg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZGVzdCA9IGlzT3JpZ2luYWxUb01vZGlm
aWVkID8gYWNjZXNzLm1vZGlmaWVkIDogYWNjZXNzLm9yaWdpbmFsOworKyAgICAgICAgICAgICAg
ICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpF
T3BBc3NpZ24sICZkZXN0LCAmc3JjKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICB9OworKworKyAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICpvcmlnaW5hbCA9ICZCdWlsZFBh
dGhBY2Nlc3Moc3ltYm9sRW52LCBvcmlnaW5hbFBhcmFtLCBpbmZvLnBhdGhJdGVtcyk7CisrICAg
ICAgICAgICAgTW9kaWZpZWRBY2Nlc3MgKm1vZGlmaWVkID0gJkFjY2Vzc0ZpZWxkKG1vZGlmaWVk
UGFyYW0sIGluZm8ucGF0aE5hbWUpOworKworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG90ID0g
b3JpZ2luYWwtPmdldFR5cGUoKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSBtdCA9IG1vZGlm
aWVkLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAgQVNTRVJUKG90LmlzQXJyYXkoKSA9PSBtdC5p
c0FycmF5KCkpOworKworKyAgICAgICAgICAgIGlmIChvdC5pc0FycmF5KCkgJiYgb3QgIT0gbXQp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBBU1NFUlQob3QuZ2V0QXJyYXlTaXpl
cygpID09IG10LmdldEFycmF5U2l6ZXMoKSk7CisrICAgICAgICAgICAgICAgIGlmIChvdC5pc0Fy
cmF5T2ZBcnJheXMoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAg
b3JpZ2luYWwgPSAmRmxhdHRlbihzeW1ib2xFbnYsICpvcmlnaW5hbCk7CisrICAgICAgICAgICAg
ICAgICAgICBtb2RpZmllZCA9ICZGbGF0dGVuKHN5bWJvbEVudiwgKm1vZGlmaWVkKTsKKysgICAg
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgdm9sdW1lID0gc3RhdGlj
X2Nhc3Q8aW50PihvdC5nZXRBcnJheVNpemVQcm9kdWN0KCkpOworKyAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHZvbHVtZTsgKytpKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBpZiAoaSAhPSAwKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsID0gb3JpZ2luYWwtPmRlZXBDb3B5KCk7Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWQgPSBtb2RpZmllZC0+ZGVlcENvcHkoKTsK
KysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNj
ZXNzICZvID0gQWNjZXNzSW5kZXgoKm9yaWdpbmFsLCBpKTsKKysgICAgICAgICAgICAgICAgICAg
IE9yaWdpbmFsQWNjZXNzICZtID0gQWNjZXNzSW5kZXgoKm1vZGlmaWVkLCBpKTsKKysgICAgICAg
ICAgICAgICAgICAgIGNvbnZlcnQobywgbSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgY29udmVydCgqb3JpZ2luYWwsICptb2RpZmllZCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKworKyAgICAgICAgYXV0byAqZnVuY1Byb3RvID0gbmV3IFRJbnRlcm1GdW5jdGlvblBy
b3RvdHlwZSgmZnVuYyk7CisrICAgICAgICBhdXRvICpmdW5jRGVmICAgPSBuZXcgVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbihmdW5jUHJvdG8sICZib2R5KTsKKysKKysgICAgICAgIE1vZGlmaWVk
U3RydWN0TWFjaGluZXJ5IG1hY2hpbmVyeTsKKysgICAgICAgIG1hY2hpbmVyeS5tb2RpZmllZFN0
cnVjdCAgICAgICAgICAgICAgICAgICA9ICZtb2RpZmllZFN0cnVjdDsKKysgICAgICAgIG1hY2hp
bmVyeS5nZXRDb252ZXJ0ZXIoY29uZmlnLmNvbnZlcnRUeXBlKSA9IGZ1bmNEZWY7CisrCisrICAg
ICAgICBvdXRNYWNoaW5lcmllcy5pbnNlcnQob3JpZ2luYWxTdHJ1Y3QsIG1hY2hpbmVyeSk7Cisr
ICAgIH0KKysKKysgICAgdm9pZCBwdXNoUGF0aChQYXRoSXRlbSBjb25zdCAmaXRlbSkKKysgICAg
eworKyAgICAgICAgcGF0aEl0ZW1zLnB1c2hfYmFjayhpdGVtKTsKKysKKysgICAgICAgIHN3aXRj
aCAoaXRlbS50eXBlKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5
cGU6OkZpZWxkOgorKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgoaXRlbS5maWVsZC0+bmFt
ZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNh
c2UgUGF0aEl0ZW06OlR5cGU6OkluZGV4OgorKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgo
aXRlbS5pbmRleCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNh
c2UgUGF0aEl0ZW06OlR5cGU6OkZsYXR0ZW5BcnJheToKKysgICAgICAgICAgICAgICAgbmFtZVBh
dGhTaXplcy5wdXNoX2JhY2sobmFtZVBhdGguc2l6ZSgpKTsKKysgICAgICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgdm9pZCBwb3BQYXRoKCkKKysgICAgewor
KyAgICAgICAgQVNTRVJUKCFuYW1lUGF0aC5lbXB0eSgpKTsKKysgICAgICAgIEFTU0VSVCghbmFt
ZVBhdGhTaXplcy5lbXB0eSgpKTsKKysgICAgICAgIG5hbWVQYXRoLnJlc2l6ZShuYW1lUGF0aFNp
emVzLmJhY2soKSk7CisrICAgICAgICBuYW1lUGF0aFNpemVzLnBvcF9iYWNrKCk7CisrCisrICAg
ICAgICBBU1NFUlQoIXBhdGhJdGVtcy5lbXB0eSgpKTsKKysgICAgICAgIHBhdGhJdGVtcy5wb3Bf
YmFjaygpOworKyAgICB9CisrCisrICAgIHZvaWQgZmluYWxpemUoKQorKyAgICB7CisrICAgICAg
ICBBU1NFUlQoIWZpbmFsaXplZCk7CisrICAgICAgICBmaW5hbGl6ZWQgPSB0cnVlOworKyAgICAg
ICAgaW50cm9kdWNlUGFja2luZygpOworKyAgICAgICAgQVNTRVJUKG1ldGFsTGF5b3V0VG90YWwg
PT0gTGF5b3V0OjpJZGVudGl0eSgpKTsKKysgICAgICAgIGludHJvZHVjZVBhZGRpbmcoKTsKKysg
ICAgfQorKworKyAgICB2b2lkIGFkZE1vZGlmaWVkRmllbGQoY29uc3QgVEZpZWxkICZmaWVsZCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlICZuZXdUeXBlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKysgICAgeworKyAg
ICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIgPSBuZXdUeXBlLmdldExheW91
dFF1YWxpZmllcigpOworKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAg
PSBzdG9yYWdlOworKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgICAgPSBw
YWNraW5nOworKyAgICAgICAgbmV3VHlwZS5zZXRMYXlvdXRRdWFsaWZpZXIobGF5b3V0UXVhbGlm
aWVyKTsKKysKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyBwYXRoTmFtZShuYW1lUGF0
aCk7CisrICAgICAgICBtb2RpZmllZEZpZWxkcy5wdXNoX2JhY2sobmV3IFRGaWVsZCgmbmV3VHlw
ZSwgcGF0aE5hbWUsIGZpZWxkLmxpbmUoKSwgZmllbGQuc3ltYm9sVHlwZSgpKSk7CisrICAgIH0K
KysKKysgICAgdm9pZCBhZGRDb252ZXJzaW9uKGNvbnN0IENvbnZlcnNpb25GdW5jICZmdW5jKQor
KyAgICB7CisrICAgICAgICBBU1NFUlQoIW1vZGlmaWVkRmllbGRzLmVtcHR5KCkpOworKyAgICAg
ICAgY29udmVyc2lvbkluZm9zLnB1c2hfYmFjayh7ZnVuYywgbnVsbHB0ciwgcGF0aEl0ZW1zLCBt
b2RpZmllZEZpZWxkcy5iYWNrKCktPm5hbWUoKX0pOworKyAgICB9CisrCisrICAgIHZvaWQgYWRk
Q29udmVyc2lvbihjb25zdCBURnVuY3Rpb24gJmZ1bmMpCisrICAgIHsKKysgICAgICAgIEFTU0VS
VCghbW9kaWZpZWRGaWVsZHMuZW1wdHkoKSk7CisrICAgICAgICBjb252ZXJzaW9uSW5mb3MucHVz
aF9iYWNrKHt7fSwgJmZ1bmMsIHBhdGhJdGVtcywgbW9kaWZpZWRGaWVsZHMuYmFjaygpLT5uYW1l
KCl9KTsKKysgICAgfQorKworKyAgICBib29sIGhhc1BhY2tpbmcoKSBjb25zdCB7IHJldHVybiBj
b250YWluc1BhY2tlZDsgfQorKworKyAgICBib29sIGhhc1BhZGRpbmcoKSBjb25zdCB7IHJldHVy
biBwYWRGaWVsZENvdW50ID4gMDsgfQorKworKyAgICBib29sIHJlY3Vyc2UoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlLCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmb3V0TWFjaGluZXJ5KQor
KyAgICB7CisrICAgICAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAqbSA9IG91dE1h
Y2hpbmVyaWVzLmZpbmQoc3RydWN0dXJlKTsKKysgICAgICAgIGlmIChtID09IG51bGxwdHIpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gaWRHZW4uY3JlYXRlTmV3
TmFtZShzdHJ1Y3R1cmUubmFtZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgaWYgKCFUcnlDcmVh
dGVNb2RpZmllZFN0cnVjdChzeW1ib2xFbnYsIGlkR2VuLCBjb25maWcsIHN0cnVjdHVyZSwgbmFt
ZSwgb3V0TWFjaGluZXJpZXMpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBtID0gb3V0TWFjaGluZXJp
ZXMuZmluZChzdHJ1Y3R1cmUpOworKyAgICAgICAgICAgIEFTU0VSVChtKTsKKysgICAgICAgIH0K
KysgICAgICAgIG91dE1hY2hpbmVyeSA9ICptOworKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAg
IH0KKysKKysgIHByaXZhdGU6CisrICAgIHZvaWQgYWRkUGFkZGluZyhzaXplX3QgcGFkQW1vdW50
LCBib29sIHVwZGF0ZUxheW91dCkKKysgICAgeworKyAgICAgICAgaWYgKHBhZEFtb3VudCA9PSAw
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysKKysgICAg
ICAgIGNvbnN0IHNpemVfdCBiZWdpbiA9IG1vZGlmaWVkRmllbGRzLnNpemUoKTsKKysKKysgICAg
ICAgIC8vIEl0ZXJhdGl2ZWx5IGFkZGluZyBpbiBzY2FsYXIgb3IgdmVjdG9yIHBhZGRpbmcgYmVj
YXVzZSBzb21lIHN0cnVjdCB0eXBlcyB3aWxsIG5vdAorKyAgICAgICAgLy8gYWxsb3cgbWF0cml4
IG9yIGFycmF5IG1lbWJlcnMuCisrICAgICAgICB3aGlsZSAocGFkQW1vdW50ID4gMCkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBUVHlwZSAqcGFkVHlwZTsKKysgICAgICAgICAgICBpZiAocGFk
QW1vdW50ID49IDE2KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcGFkQW1vdW50
IC09IDE2OworKyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRUeXBlKFRCYXNpY1R5cGU6
OkVidEZsb2F0LCA0KTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAocGFk
QW1vdW50ID49IDgpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBwYWRBbW91bnQg
LT0gODsKKysgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpF
YnRGbG9hdCwgMik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKHBhZEFt
b3VudCA+PSA0KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcGFkQW1vdW50IC09
IDQ7CisrICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0
RmxvYXQpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChwYWRBbW91bnQg
Pj0gMikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHBhZEFtb3VudCAtPSAyOwor
KyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEJvb2ws
IDIpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICBBU1NFUlQocGFkQW1vdW50ID09IDEpOworKyAgICAgICAgICAgICAg
ICBwYWRBbW91bnQgLT0gMTsKKysgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRCb29sKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgaWYg
KHVwZGF0ZUxheW91dCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1ldGFsTGF5
b3V0VG90YWwgKz0gTWV0YWxMYXlvdXRPZigqcGFkVHlwZSk7CisrICAgICAgICAgICAgfQorKwor
KyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUoInBhZCIp
OworKyAgICAgICAgICAgIG1vZGlmaWVkRmllbGRzLnB1c2hfYmFjaygKKysgICAgICAgICAgICAg
ICAgbmV3IFRGaWVsZChwYWRUeXBlLCBuYW1lLnJhd05hbWUoKSwga05vU291cmNlTG9jLCBuYW1l
LnN5bWJvbFR5cGUoKSkpOworKyAgICAgICAgICAgICsrcGFkRmllbGRDb3VudDsKKysgICAgICAg
IH0KKysKKysgICAgICAgIHN0ZDo6cmV2ZXJzZShtb2RpZmllZEZpZWxkcy5iZWdpbigpICsgYmVn
aW4sIG1vZGlmaWVkRmllbGRzLmVuZCgpKTsKKysgICAgfQorKworKyAgICB2b2lkIGludHJvZHVj
ZVBhY2tpbmcoKQorKyAgICB7CisrICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhY2tpbmcpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKworKyAgICAgICAg
YXV0byBzZXRVbnBhY2tlZFN0b3JhZ2UgPSBbXShUVHlwZSAmdHlwZSkgeworKyAgICAgICAgICAg
IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCku
YmxvY2tTdG9yYWdlOworKyAgICAgICAgICAgIHN3aXRjaCAoc3RvcmFnZSkKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVk
OgorKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1N0ZDE0MDsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICBj
YXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoKKysgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UgPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA7CisrICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdl
OjpFYnNTdGQxNDA6CisrICAgICAgICAgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6
RWJzU3RkNDMwOgorKyAgICAgICAgICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1Vuc3BlY2lmaWVkOgorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIFNldEJsb2NrU3RvcmFnZSh0eXBlLCBzdG9yYWdlKTsKKysgICAgICAg
IH07CisrCisrICAgICAgICBMYXlvdXQgZ2xzbExheW91dFRvdGFsID0gTGF5b3V0OjpJZGVudGl0
eSgpOworKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgICAgICA9IG1vZGlmaWVkRmllbGRzLnNp
emUoKTsKKysKKysgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIFRGaWVsZCAmY3VyciAgICAgICAgICAgPSAqbW9kaWZpZWRG
aWVsZHNbaV07CisrICAgICAgICAgICAgVFR5cGUgJmN1cnJUeXBlICAgICAgICA9ICpjdXJyLnR5
cGUoKTsKKysgICAgICAgICAgICBjb25zdCBib29sIGNhbkJlUGFja2VkID0gQ2FuQmVQYWNrZWQo
Y3VyclR5cGUpOworKworKyAgICAgICAgICAgIGF1dG8gZG9udFBhY2sgPSBbJl0oKSB7CisrICAg
ICAgICAgICAgICAgIGlmIChjYW5CZVBhY2tlZCkKKysgICAgICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICAgICAgc2V0VW5wYWNrZWRTdG9yYWdlKGN1cnJUeXBlKTsKKysgICAgICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgICAgICBnbHNsTGF5b3V0VG90YWwgKz0gR2xzbExheW91dE9m
KGN1cnJUeXBlKTsKKysgICAgICAgICAgICB9OworKworKyAgICAgICAgICAgIGlmICghQ2FuQmVQ
YWNrZWQoY3VyclR5cGUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZG9udFBh
Y2soKTsKKysgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgfQorKworKyAg
ICAgICAgICAgIGNvbnN0IExheW91dCBwYWNrZWRHbHNsTGF5b3V0ICAgICAgICAgICA9IEdsc2xM
YXlvdXRPZihjdXJyVHlwZSk7CisrICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFn
ZSBwYWNrZWRTdG9yYWdlID0gY3VyclR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9y
YWdlOworKyAgICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisrICAgICAg
ICAgICAgY29uc3QgTGF5b3V0IHVucGFja2VkR2xzbExheW91dCA9IEdsc2xMYXlvdXRPZihjdXJy
VHlwZSk7CisrICAgICAgICAgICAgU2V0QmxvY2tTdG9yYWdlKGN1cnJUeXBlLCBwYWNrZWRTdG9y
YWdlKTsKKysKKysgICAgICAgICAgICBBU1NFUlQocGFja2VkR2xzbExheW91dC5zaXplT2YgPD0g
dW5wYWNrZWRHbHNsTGF5b3V0LnNpemVPZik7CisrICAgICAgICAgICAgaWYgKHBhY2tlZEdsc2xM
YXlvdXQuc2l6ZU9mID09IHVucGFja2VkR2xzbExheW91dC5zaXplT2YpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBkb250UGFjaygpOworKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGogPSBpICsg
MTsKKysgICAgICAgICAgICBpZiAoaiA9PSBzaXplKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgZG9udFBhY2soKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAg
ICAgfQorKworKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYWQgICAgICAgICAgICA9IHVucGFj
a2VkR2xzbExheW91dC5zaXplT2YgLSBwYWNrZWRHbHNsTGF5b3V0LnNpemVPZjsKKysgICAgICAg
ICAgICBjb25zdCBURmllbGQgJm5leHQgICAgICAgICAgPSAqbW9kaWZpZWRGaWVsZHNbal07Cisr
ICAgICAgICAgICAgY29uc3QgTGF5b3V0IG5leHRHbHNsTGF5b3V0ID0gR2xzbExheW91dE9mKCpu
ZXh0LnR5cGUoKSk7CisrCisrICAgICAgICAgICAgaWYgKHBhZCA8IG5leHRHbHNsTGF5b3V0LnNp
emVPZikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGRvbnRQYWNrKCk7CisrICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBz
eW1ib2xFbnYubWFya0FzUGFja2VkKGN1cnIpOworKyAgICAgICAgICAgIGdsc2xMYXlvdXRUb3Rh
bCArPSBwYWNrZWRHbHNsTGF5b3V0OworKyAgICAgICAgICAgIGNvbnRhaW5zUGFja2VkID0gdHJ1
ZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICB2b2lkIGludHJvZHVjZVBhZGRpbmcoKQor
KyAgICB7CisrICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhZGRpbmcpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKworKyAgICAgICAgTWV0YWxMYXlvdXRP
ZkNvbmZpZyBsYXlvdXRDb25maWc7CisrICAgICAgICBsYXlvdXRDb25maWcuZGlzYWJsZVBhY2tp
bmcgICAgICAgICAgICAgPSAhY29uZmlnLmFsbG93UGFja2luZzsKKysgICAgICAgIGxheW91dENv
bmZpZy5hc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCA9IHRydWU7CisrCisrICAgICAgICBURmll
bGRMaXN0IGZpZWxkcyA9IHN0ZDo6bW92ZShtb2RpZmllZEZpZWxkcyk7CisrICAgICAgICBBU1NF
UlQoIWZpZWxkcy5lbXB0eSgpKTsgIC8vIEdMU0wgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG1lbWJl
ci4KKysKKysgICAgICAgIGNvbnN0IFRGaWVsZCAqY29uc3QgZmlyc3QgPSBmaWVsZHMuZnJvbnQo
KTsKKysKKysgICAgICAgIGZvciAoVEZpZWxkICpmaWVsZCA6IGZpZWxkcykKKysgICAgICAgIHsK
KysgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgpOworKworKyAg
ICAgICAgICAgIGNvbnN0IExheW91dCBnbHNsTGF5b3V0ICA9IEdsc2xMYXlvdXRPZih0eXBlKTsK
KysgICAgICAgICAgICBjb25zdCBMYXlvdXQgbWV0YWxMYXlvdXQgPSBNZXRhbExheW91dE9mKHR5
cGUsIGxheW91dENvbmZpZyk7CisrCisrICAgICAgICAgICAgc2l6ZV90IHByZVBhZEFtb3VudCA9
IDA7CisrICAgICAgICAgICAgaWYgKGdsc2xMYXlvdXQuYWxpZ25PZiA+IG1ldGFsTGF5b3V0LmFs
aWduT2YgJiYgZmllbGQgIT0gZmlyc3QpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBjb25zdCBzaXplX3QgcHJlUGFkZGVkU2l6ZSA9IG1ldGFsTGF5b3V0VG90YWwuc2l6ZU9mOwor
KyAgICAgICAgICAgICAgICBtZXRhbExheW91dFRvdGFsLnJlcXVpcmVBbGlnbm1lbnQoZ2xzbExh
eW91dC5hbGlnbk9mLCB0cnVlKTsKKysgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHBhZGRl
ZFNpemUgPSBtZXRhbExheW91dFRvdGFsLnNpemVPZjsKKysgICAgICAgICAgICAgICAgcHJlUGFk
QW1vdW50ICAgICAgICAgICAgPSBwYWRkZWRTaXplIC0gcHJlUGFkZGVkU2l6ZTsKKysgICAgICAg
ICAgICAgICAgbWV0YWxMYXlvdXRUb3RhbCArPSBtZXRhbExheW91dDsKKysgICAgICAgICAgICAg
ICAgYWRkUGFkZGluZyhwcmVQYWRBbW91bnQsIGZhbHNlKTsgIC8vIE5vdGU6IHJlcXVpcmVBbGln
bm1lbnQoKSBhbHJlYWR5IHVwZGF0ZWQgbGF5b3V0CisrICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1ldGFsTGF5b3V0VG90
YWwgKz0gbWV0YWxMYXlvdXQ7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIG1vZGlm
aWVkRmllbGRzLnB1c2hfYmFjayhmaWVsZCk7CisrCisrICAgICAgICAgICAgaWYgKGdsc2xMYXlv
dXQuc2l6ZU9mID4gbWV0YWxMYXlvdXQuc2l6ZU9mICYmIGZpZWxkICE9IGZpZWxkcy5iYWNrKCkp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjb25zdCBib29sIHVwZGF0ZUxheW91
dCA9IHRydWU7ICAvLyBYWFg6IENvcnJlY3Q/CisrICAgICAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBwYWRBbW91bnQgID0gZ2xzbExheW91dC5zaXplT2YgLSBtZXRhbExheW91dC5zaXplT2Y7Cisr
ICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocGFkQW1vdW50LCB1cGRhdGVMYXlvdXQpOworKyAg
ICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKworKyAgICB2b2lkIHB1c2hOYW1lUGF0
aChjb25zdCBjaGFyICpleHRyYSkKKysgICAgeworKyAgICAgICAgQVNTRVJUKGV4dHJhICYmICpl
eHRyYSAhPSAnXDAnKTsKKysgICAgICAgIG5hbWVQYXRoU2l6ZXMucHVzaF9iYWNrKG5hbWVQYXRo
LnNpemUoKSk7CisrICAgICAgICBjb25zdCBjaGFyICpwID0gZXh0cmE7CisrICAgICAgICBpZiAo
bmFtZVBhdGguZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBuYW1lUGF0aCA9IHA7
CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgd2hpbGUgKCpwID09
ICdfJykKKysgICAgICAgIHsKKysgICAgICAgICAgICArK3A7CisrICAgICAgICB9CisrICAgICAg
ICBpZiAoKnAgPT0gJ1wwJykKKysgICAgICAgIHsKKysgICAgICAgICAgICBwID0gIngiOworKyAg
ICAgICAgfQorKyAgICAgICAgaWYgKG5hbWVQYXRoLmJhY2soKSAhPSAnXycpCisrICAgICAgICB7
CisrICAgICAgICAgICAgbmFtZVBhdGggKz0gJ18nOworKyAgICAgICAgfQorKyAgICAgICAgbmFt
ZVBhdGggKz0gcDsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hOYW1lUGF0aCh1bnNpZ25lZCBl
eHRyYSkKKysgICAgeworKyAgICAgICAgY2hhciBidWZmZXJbc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46OmRpZ2l0czEwICsgMV07CisrICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiV1Iiwg
ZXh0cmEpOworKyAgICAgICAgcHVzaE5hbWVQYXRoKGJ1ZmZlcik7CisrICAgIH0KKysKKysgIHB1
YmxpYzoKKysgICAgY29uc3QgTW9kaWZ5U3RydWN0Q29uZmlnICZjb25maWc7CisrICAgIFN5bWJv
bEVudiAmc3ltYm9sRW52OworKworKyAgcHJpdmF0ZToKKysgICAgVEZpZWxkTGlzdCAmbW9kaWZp
ZWRGaWVsZHM7CisrICAgIExheW91dCBtZXRhbExheW91dFRvdGFsID0gTGF5b3V0OjpJZGVudGl0
eSgpOworKyAgICBzaXplX3QgcGFkRmllbGRDb3VudCAgICA9IDA7CisrICAgIGJvb2wgY29udGFp
bnNQYWNrZWQgICAgID0gZmFsc2U7CisrICAgIGJvb2wgZmluYWxpemVkICAgICAgICAgID0gZmFs
c2U7CisrCisrICAgIHN0ZDo6dmVjdG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisrCisrICAgIHN0
ZDo6dmVjdG9yPHNpemVfdD4gbmFtZVBhdGhTaXplczsKKysgICAgc3RkOjpzdHJpbmcgbmFtZVBh
dGg7CisrCisrICAgIHN0ZDo6dmVjdG9yPENvbnZlcnNpb25JbmZvPiBjb252ZXJzaW9uSW5mb3M7
CisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGU7CisrICAgIElkR2VuICZpZEdlbjsKKysg
ICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXM7CisrfTsKKysKKysv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK3VzaW5nIE1vZGlmeUZ1bmMgPSBib29sICgqKShD
b252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
TGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpOworKworK2Jvb2wgTW9kaWZ5UmVj
dXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0
QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7CisrCisrYm9vbCBJZGVudGl0eU1vZGlmeShDb252ZXJ0
U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBh
Y2tpbmcpCisreworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAg
IHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIENsb25lVHlwZSh0eXBlKSwgc3RvcmFnZSwg
cGFja2luZyk7CisrICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9y
aWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAgICAgICAgcmV0dXJuIEFj
Y2Vzc3tvLCBtfTsKKysgICAgfSk7CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrYm9vbCBJ
bmxpbmVTdHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKysgICAgICAgICAgICAgICAg
ICBjb25zdCBURmllbGQgJmZpZWxkLAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0
cml4UGFja2luZyBwYWNraW5nKQorK3sKKysgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAg
ICAgID0gKmZpZWxkLnR5cGUoKTsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJl
ID0gc3RhdGUuc3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworKyAgICBpZiAoIXN1
YnN0cnVjdHVyZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAg
IGlmICh0eXBlLmlzQXJyYXkoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrICAgIGlmICghc3RhdGUuY29uZmlnLmlubGluZVN0cnVjdChmaWVsZCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBjb25zdCBURmllbGRMaXN0
ICZzdWJmaWVsZHMgPSBzdWJzdHJ1Y3R1cmUtPmZpZWxkcygpOworKyAgICBmb3IgKGNvbnN0IFRG
aWVsZCAqc3ViZmllbGQgOiBzdWJmaWVsZHMpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRUeXBl
ICZzdWJ0eXBlICAgICAgICAgICAgICAgICAgPSAqc3ViZmllbGQtPnR5cGUoKTsKKysgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Vic3RvcmFnZSAgPSBPdmVybGF5KHN0b3JhZ2Us
IHN1YnR5cGUpOworKyAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgc3VicGFja2lu
ZyA9IE92ZXJsYXkocGFja2luZywgc3VidHlwZSk7CisrICAgICAgICBNb2RpZnlSZWN1cnNpdmUo
c3RhdGUsICpzdWJmaWVsZCwgc3Vic3RvcmFnZSwgc3VicGFja2luZyk7CisrICAgIH0KKysKKysg
ICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgUmVjdXJzZVN0cnVjdChDb252ZXJ0U3RydWN0
U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAor
KyAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisr
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisr
eworKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgICAgPSAqZmllbGQudHlwZSgpOwor
KyAgICBjb25zdCBUU3RydWN0dXJlICpzdWJzdHJ1Y3R1cmUgPSBzdGF0ZS5zeW1ib2xFbnYucmVt
YXAodHlwZS5nZXRTdHJ1Y3QoKSk7CisrICAgIGlmICghc3Vic3RydWN0dXJlKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgaWYgKCFzdGF0ZS5jb25maWcucmVj
dXJzZVN0cnVjdChmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgICBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSBtYWNoaW5lcnk7CisrICAgIGlmICgh
c3RhdGUucmVjdXJzZSgqc3Vic3RydWN0dXJlLCBtYWNoaW5lcnkpKQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgVFR5cGUgJm5ld1R5cGUgPSAqbmV3IFRU
eXBlKG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCwgZmFsc2UpOworKyAgICBpZiAodHlwZS5pc0Fy
cmF5KCkpCisrICAgIHsKKysgICAgICAgIG5ld1R5cGUubWFrZUFycmF5cyh0eXBlLmdldEFycmF5
U2l6ZXMoKSk7CisrICAgIH0KKysKKysgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqY29u
dmVydGVyID0gbWFjaGluZXJ5LmdldENvbnZlcnRlcihzdGF0ZS5jb25maWcuY29udmVydFR5cGUp
OworKyAgICBBU1NFUlQoY29udmVydGVyKTsKKysKKysgICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVs
ZChmaWVsZCwgbmV3VHlwZSwgc3RvcmFnZSwgcGFja2luZyk7CisrICAgIHN0YXRlLmFkZENvbnZl
cnNpb24oKmNvbnZlcnRlci0+Z2V0RnVuY3Rpb24oKSk7CisrCisrICAgIHJldHVybiB0cnVlOwor
K30KKysKKytib29sIFNwbGl0TWF0cml4Q29sdW1ucyhDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcp
CisreworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIGlmICgh
dHlwZS5pc01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0K
KysgICAgaWYgKCFzdGF0ZS5jb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zKGZpZWxkKSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGNvbnN0IGludCBjb2xz
ID0gdHlwZS5nZXRDb2xzKCk7CisrICAgIFRUeXBlICZyb3dUeXBlID0gRHJvcENvbHVtbnModHlw
ZSk7CisrCisrICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29sczsgKytjKQorKyAgICB7CisrICAg
ICAgICBzdGF0ZS5wdXNoUGF0aChjKTsKKysKKysgICAgICAgIHN0YXRlLmFkZE1vZGlmaWVkRmll
bGQoZmllbGQsIHJvd1R5cGUsIHN0b3JhZ2UsIHBhY2tpbmcpOworKyAgICAgICAgc3RhdGUuYWRk
Q29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVk
QWNjZXNzICZtKSB7CisrICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tvLCBtfTsKKysgICAgICAg
IH0pOworKworKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworKyAgICB9CisrCisrICAgIHJldHVy
biB0cnVlOworK30KKysKKytib29sIFNhdHVyYXRlTWF0cml4Um93cyhDb252ZXJ0U3RydWN0U3Rh
dGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9y
YWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5n
IHBhY2tpbmcpCisreworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7Cisr
ICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKysgICAgY29uc3QgaW50IHJvd3MgICAgICAgPSB0eXBlLmdldFJvd3MoKTsKKysg
ICAgY29uc3QgaW50IHNhdHVyYXRpb24gPSBzdGF0ZS5jb25maWcuc2F0dXJhdGVNYXRyaXhSb3dz
KGZpZWxkKTsKKysgICAgaWYgKHNhdHVyYXRpb24gPD0gcm93cykKKysgICAgeworKyAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRD
b2xzKCk7CisrICAgIFRUeXBlICZzYXRUeXBlID0gU2V0TWF0cml4Um93RGltKHR5cGUsIHNhdHVy
YXRpb24pOworKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBzYXRUeXBlLCBzdG9y
YWdlLCBwYWNraW5nKTsKKysKKysgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyArK2MpCisr
ICAgIHsKKysgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgKytyKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9y
aWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAgICAgICAgICAgICAgICBh
dXRvICZvXyA9IEFjY2Vzc0luZGV4KEFjY2Vzc0luZGV4KG8sIGMpLCByKTsKKysgICAgICAgICAg
ICAgICAgYXV0byAmbV8gPSBBY2Nlc3NJbmRleChBY2Nlc3NJbmRleChtLCBjKSwgcik7CisrICAg
ICAgICAgICAgICAgIHJldHVybiBBY2Nlc3N7b18sIG1ffTsKKysgICAgICAgICAgICB9KTsKKysg
ICAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBUZXN0
Qm9vbFRvVWludChDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLCBjb25zdCBURmllbGQgJmZpZWxk
KQorK3sKKysgICAgaWYgKGZpZWxkLnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgIT0gVEJhc2ljVHlw
ZTo6RWJ0Qm9vbCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAg
IGlmICghc3RhdGUuY29uZmlnLnByb21vdGVCb29sVG9VaW50KGZpZWxkKSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30KKysKKytB
Y2Nlc3MgQ29udmVydEJvb2xUb1VpbnQoQ29udmVydFR5cGUgY29udmVydFR5cGUsIE9yaWdpbmFs
QWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkKKyt7CisrICAgIGF1dG8gY29lcmNlID0gW10o
VEludGVybVR5cGVkICZ0bywgVEludGVybVR5cGVkICZmcm9tKSAtPiBUSW50ZXJtVHlwZWQgJiB7
CisrICAgICAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKHRv
LmdldFR5cGUoKSwgbmV3IFRJbnRlcm1TZXF1ZW5jZXsmZnJvbX0pOworKyAgICB9OworKyAgICBz
d2l0Y2ggKGNvbnZlcnRUeXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIENvbnZlcnRUeXBlOjpP
cmlnaW5hbFRvTW9kaWZpZWQ6CisrICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tjb2VyY2UobSwg
byksIG19OworKyAgICAgICAgY2FzZSBDb252ZXJ0VHlwZTo6TW9kaWZpZWRUb09yaWdpbmFsOgor
KyAgICAgICAgICAgIHJldHVybiBBY2Nlc3N7bywgY29lcmNlKG8sIG0pfTsKKysgICAgfQorK30K
KysKKytib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JDb21tb24oQ29udmVydFN0cnVjdFN0YXRl
ICZzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxk
ICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFycmF5KQorK3sKKysgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworKyAgICBpZiAodHlwZS5pc0FycmF5KCkgIT0gYXJyYXkp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAoISgodHlw
ZS5pc1JhbmswKCkgJiYgSGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUpKSB8fCB0eXBlLmlzVmVjdG9y
KCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysgICAgY29uc3Qg
YXV0byBzYXR1cmF0b3IgPQorKyAgICAgICAgYXJyYXkgPyBzdGF0ZS5jb25maWcuc2F0dXJhdGVT
Y2FsYXJPclZlY3RvckFycmF5cyA6IHN0YXRlLmNvbmZpZy5zYXR1cmF0ZVNjYWxhck9yVmVjdG9y
OworKyAgICBjb25zdCBpbnQgZGltICAgICAgICA9IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKysg
ICAgY29uc3QgaW50IHNhdHVyYXRpb24gPSBzYXR1cmF0b3IoZmllbGQpOworKyAgICBpZiAoc2F0
dXJhdGlvbiA8PSBkaW0pCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KworKyAgICBUVHlwZSAmc2F0VHlwZSAgICAgICAgPSBTZXRWZWN0b3JEaW0odHlwZSwgc2F0dXJh
dGlvbik7CisrICAgIGNvbnN0IGJvb2wgYm9vbFRvVWludCA9IFRlc3RCb29sVG9VaW50KHN0YXRl
LCBmaWVsZCk7CisrICAgIGlmIChib29sVG9VaW50KQorKyAgICB7CisrICAgICAgICBzYXRUeXBl
LnNldEJhc2ljVHlwZShUQmFzaWNUeXBlOjpFYnRVSW50KTsKKysgICAgfQorKyAgICBzdGF0ZS5h
ZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBzYXRUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsKKysKKysg
ICAgZm9yIChpbnQgZCA9IDA7IGQgPCBkaW07ICsrZCkKKysgICAgeworKyAgICAgICAgc3RhdGUu
YWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJmVudiwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1v
ZGlmaWVkQWNjZXNzICZtKSB7CisrICAgICAgICAgICAgYXV0byAmb18gPSBkaW0gPiAxID8gQWNj
ZXNzSW5kZXgobywgZCkgOiBvOworKyAgICAgICAgICAgIGF1dG8gJm1fID0gQWNjZXNzSW5kZXgo
bSwgZCk7CisrICAgICAgICAgICAgaWYgKGJvb2xUb1VpbnQpCisrICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ29udmVydEJvb2xUb1VpbnQoZW52LnR5cGUsIG9fLCBtXyk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIHJldHVybiBBY2Nlc3N7b18sIG1ffTsKKysgICAgICAgICAgICB9CisrICAg
ICAgICB9KTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBTYXR1
cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKyt7CisrICAgIHJldHVybiBTYXR1cmF0ZVNjYWxhck9y
VmVjdG9yQ29tbW9uKHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZywgdHJ1ZSk7CisrfQor
KworK2Jvb2wgU2F0dXJhdGVTY2FsYXJPclZlY3RvcihDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRl
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3Jh
Z2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNr
aW5nIHBhY2tpbmcpCisreworKyAgICByZXR1cm4gU2F0dXJhdGVTY2FsYXJPclZlY3RvckNvbW1v
bihzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcsIGZhbHNlKTsKKyt9CisrCisrYm9vbCBQ
cm9tb3RlQm9vbFRvVWludChDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBpZiAoIVRl
c3RCb29sVG9VaW50KHN0YXRlLCBmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxz
ZTsKKysgICAgfQorKworKyAgICBhdXRvICZwcm9tb3RlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxk
LnR5cGUoKSk7CisrICAgIHByb21vdGVkVHlwZS5zZXRCYXNpY1R5cGUoVEJhc2ljVHlwZTo6RWJ0
VUludCk7CisrICAgIHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHByb21vdGVkVHlwZSwg
c3RvcmFnZSwgcGFja2luZyk7CisrCisrICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vz
czo6RW52ICZlbnYsIE9yaWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworKyAg
ICAgICAgcmV0dXJuIENvbnZlcnRCb29sVG9VaW50KGVudi50eXBlLCBvLCBtKTsKKysgICAgfSk7
CisrCisrICAgIHJldHVybiB0cnVlOworK30KKysKKytib29sIE1vZGlmeUNvbW1vbihDb252ZXJ0
U3RydWN0U3RhdGUgJnN0YXRlLAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmll
bGQsCisrICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdl
LAorKyAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcp
CisreworKyAgICBNb2RpZnlGdW5jIGZ1bmNzW10gPSB7CisrICAgICAgICBJbmxpbmVTdHJ1Y3Qs
ICAgICAgICAgICAgICAgICAgLy8KKysgICAgICAgIFJlY3Vyc2VTdHJ1Y3QsICAgICAgICAgICAg
ICAgICAvLworKyAgICAgICAgU3BsaXRNYXRyaXhDb2x1bW5zLCAgICAgICAgICAgIC8vCisrICAg
ICAgICBTYXR1cmF0ZU1hdHJpeFJvd3MsICAgICAgICAgICAgLy8KKysgICAgICAgIFNhdHVyYXRl
U2NhbGFyT3JWZWN0b3JBcnJheXMsICAvLworKyAgICAgICAgU2F0dXJhdGVTY2FsYXJPclZlY3Rv
ciwgICAgICAgIC8vCisrICAgICAgICBQcm9tb3RlQm9vbFRvVWludCwgICAgICAgICAgICAgLy8K
KysgICAgfTsKKysKKysgICAgZm9yIChNb2RpZnlGdW5jIGZ1bmMgOiBmdW5jcykKKysgICAgewor
KyAgICAgICAgaWYgKGZ1bmMoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgfQorKwor
KyAgICByZXR1cm4gSWRlbnRpdHlNb2RpZnkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5n
KTsKKyt9CisrCisrYm9vbCBJbmxpbmVBcnJheShDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAor
KyAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKysgICAgICAgICAgICAgICAgIGNv
bnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCisreworKyAgICBjb25zdCBUVHlwZSAm
dHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICBpZiAoIXN0YXRlLmNvbmZpZy5p
bmxpbmVBcnJheShmaWVsZCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgICBjb25zdCB1bnNpZ25lZCB2b2x1bWUgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1
Y3QoKTsKKysgICAgY29uc3QgYm9vbCBpc011bHRpRGltID0gdHlwZS5pc0FycmF5T2ZBcnJheXMo
KTsKKysKKysgICAgYXV0byAmaW5uZXJtb3N0VHlwZSA9IElubmVybW9zdFR5cGUodHlwZSk7Cisr
ICAgIGNvbnN0IFRGaWVsZCBpbm5lcm1vc3RGaWVsZCgmaW5uZXJtb3N0VHlwZSwgZmllbGQubmFt
ZSgpLCBmaWVsZC5saW5lKCksIGZpZWxkLnN5bWJvbFR5cGUoKSk7CisrCisrICAgIGlmIChpc011
bHRpRGltKQorKyAgICB7CisrICAgICAgICBzdGF0ZS5wdXNoUGF0aChGbGF0dGVuQXJyYXkoKSk7
CisrICAgIH0KKysKKysgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZvbHVtZTsgKytpKQor
KyAgICB7CisrICAgICAgICBzdGF0ZS5wdXNoUGF0aChpKTsKKysgICAgICAgIE1vZGlmeUNvbW1v
bihzdGF0ZSwgaW5uZXJtb3N0RmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcpOworKyAgICAgICAgc3Rh
dGUucG9wUGF0aCgpOworKyAgICB9CisrCisrICAgIGlmIChpc011bHRpRGltKQorKyAgICB7Cisr
ICAgICAgICBzdGF0ZS5wb3BQYXRoKCk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7Cisr
fQorKworK2Jvb2wgTW9kaWZ5UmVjdXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisr
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKysgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisrICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKKyt7CisrICAgIHN0
YXRlLnB1c2hQYXRoKGZpZWxkKTsKKysKKysgICAgYm9vbCBtb2RpZmllZDsKKysgICAgaWYgKElu
bGluZUFycmF5KHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZykpCisrICAgIHsKKysgICAg
ICAgIG1vZGlmaWVkID0gdHJ1ZTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAg
IG1vZGlmaWVkID0gTW9kaWZ5Q29tbW9uKHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZyk7
CisrICAgIH0KKysKKysgICAgc3RhdGUucG9wUGF0aCgpOworKworKyAgICByZXR1cm4gbW9kaWZp
ZWQ7CisrfQorKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworKworK2Jvb2wgc2g6OlRyeUNyZWF0ZU1vZGlmaWVkU3RydWN0KFN5bWJvbEVu
diAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZp
ZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1
Y3RDb25maWcgJmNvbmZpZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUU3RydWN0dXJlICZvcmlnaW5hbFN0cnVjdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJp
ZXMpCisreworKyAgICBDb252ZXJ0U3RydWN0U3RhdGUgc3RhdGUoc3ltYm9sRW52LCBpZEdlbiwg
Y29uZmlnLCBvdXRNYWNoaW5lcmllcyk7CisrICAgIHNpemVfdCBpZGVudGljYWxGaWVsZENvdW50
ID0gMDsKKysKKysgICAgY29uc3QgVEZpZWxkTGlzdCAmb3JpZ2luYWxGaWVsZHMgPSBvcmlnaW5h
bFN0cnVjdC5maWVsZHMoKTsKKysgICAgZm9yIChURmllbGQgKm9yaWdpbmFsRmllbGQgOiBvcmln
aW5hbEZpZWxkcykKKysgICAgeworKyAgICAgICAgY29uc3QgVFR5cGUgJm9yaWdpbmFsVHlwZSAg
ICAgICAgICA9ICpvcmlnaW5hbEZpZWxkLT50eXBlKCk7CisrICAgICAgICBjb25zdCBUTGF5b3V0
QmxvY2tTdG9yYWdlIHN0b3JhZ2UgID0gT3ZlcmxheShjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFn
ZSwgb3JpZ2luYWxUeXBlKTsKKysgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBh
Y2tpbmcgPSBPdmVybGF5KGNvbmZpZy5pbml0aWFsTWF0cml4UGFja2luZywgb3JpZ2luYWxUeXBl
KTsKKysgICAgICAgIGlmICghTW9kaWZ5UmVjdXJzaXZlKHN0YXRlLCAqb3JpZ2luYWxGaWVsZCwg
c3RvcmFnZSwgcGFja2luZykpCisrICAgICAgICB7CisrICAgICAgICAgICAgKytpZGVudGljYWxG
aWVsZENvdW50OworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHN0YXRlLmZpbmFsaXplKCk7
CisrCisrICAgIGlmIChpZGVudGljYWxGaWVsZENvdW50ID09IG9yaWdpbmFsRmllbGRzLnNpemUo
KSAmJiAhc3RhdGUuaGFzUGFja2luZygpICYmICFzdGF0ZS5oYXNQYWRkaW5nKCkpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBzdGF0ZS5wdWJsaXNoKG9y
aWdpbmFsU3RydWN0LCBtb2RpZmllZFN0cnVjdE5hbWUpOworKworKyAgICByZXR1cm4gdHJ1ZTsK
Kyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L01vZGlmeVN0cnVjdC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg
MDAwMDAwMC4uNGI4Y2ZjNQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oCitAQCAtMCwwICsxLDEz
NSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFO
U0xBVE9STUVUQUxESVJFQ1RfTU9ESUZZU1RSVUNUX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NT0RJRllTVFJVQ1RfSF8KKysKKysjaW5jbHVk
ZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKysjaW5jbHVkZSA8dW5vcmRl
cmVkX3NldD4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvSWRHZW4uaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisr
CisrbmFtZXNwYWNlIHNoCisreworKworK2VudW0gY2xhc3MgQ29udmVydFR5cGUKKyt7CisrICAg
IE9yaWdpbmFsVG9Nb2RpZmllZCwKKysgICAgTW9kaWZpZWRUb09yaWdpbmFsLAorK307CisrCisr
Ly8gQ29uZmlndXJlcyBob3cgc3RydWN0IG1vZGlmaWNhdGlvbiBpcyBwZXJmb3JtZWQuCisrY2xh
c3MgTW9kaWZ5U3RydWN0Q29uZmlnCisreworKyAgcHVibGljOgorKyAgICBzdHJ1Y3QgUHJlZGlj
YXRlCisrICAgIHsKKysgICAgICAgIHVzaW5nIEZ1bmMgPSBib29sICgqKShjb25zdCBURmllbGQg
Jik7CisrICAgICAgICBzdGF0aWMgYm9vbCBGYWxzZShjb25zdCBURmllbGQgJikgeyByZXR1cm4g
ZmFsc2U7IH0KKysgICAgICAgIHN0YXRpYyBib29sIFRydWUoY29uc3QgVEZpZWxkICYpIHsgcmV0
dXJuIHRydWU7IH0KKysgICAgfTsKKysKKysgICAgc3RydWN0IFNhdHVyYXRlVmVjdG9yCisrICAg
IHsKKysgICAgICAgIC8vIFZhbGlkIHJldHVybiB2YWx1ZXMgYXJlIFswLCAxLCAyLCAzLCA0XS4K
KysgICAgICAgIC8vIElmIG9yaWdpbmFsIGRpbSA+PSByZXR1cm4gdmFsdWUsIHRoZSBmaWVsZCBy
ZW1haW5zIHVudG91Y2hlZC4KKysgICAgICAgIHVzaW5nIEZ1bmMgPSBpbnQgKCopKGNvbnN0IFRG
aWVsZCAmKTsKKysgICAgICAgIHN0YXRpYyBpbnQgRG9udFNhdHVyYXRlKGNvbnN0IFRGaWVsZCAm
KSB7IHJldHVybiAwOyB9CisrICAgICAgICBzdGF0aWMgaW50IEZ1bGx5U2F0dXJhdGUoY29uc3Qg
VEZpZWxkICYpIHsgcmV0dXJuIDQ7IH0KKysgICAgfTsKKysKKysgIHB1YmxpYzoKKysgICAgTW9k
aWZ5U3RydWN0Q29uZmlnKENvbnZlcnRUeXBlIGNvbnZlcnRUeXBlLCBib29sIGFsbG93UGFja2lu
ZywgYm9vbCBhbGxvd1BhZGRpbmcpCisrICAgICAgICA6IGNvbnZlcnRUeXBlKGNvbnZlcnRUeXBl
KSwgYWxsb3dQYWNraW5nKGFsbG93UGFja2luZyksIGFsbG93UGFkZGluZyhhbGxvd1BhZGRpbmcp
CisrICAgIHt9CisrCisrICAgIC8vIE1hdHJpeCBmaWVsZCBpcyBzcGxpdCBpbnRvIG11bHRpcGxl
IGZpZWxkcyBvZiByb3cgdmVjdG9ycy4KKysgICAgUHJlZGljYXRlOjpGdW5jIHNwbGl0TWF0cml4
Q29sdW1ucyA9IFByZWRpY2F0ZTo6RmFsc2U7CisrCisrICAgIC8vIEFycmF5IGZpZWxkcyBhcmUg
c3BsaXQgaW50byBtdWx0aXBsZSBmaWVsZHMgb2YgZWxlbWVudCB0eXBlLgorKyAgICBQcmVkaWNh
dGU6OkZ1bmMgaW5saW5lQXJyYXkgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAvLyBTdHJ1
Y3QgZmllbGRzIGhhdmUgdGhlaXIgc3ViZmllbGRzIGlubGluZWQgZGlyZWN0bHkuCisrICAgIFBy
ZWRpY2F0ZTo6RnVuYyBpbmxpbmVTdHJ1Y3QgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAv
LyBTdHJ1Y3QgZmllbGRzIGFyZSBtb2RpZmllZC4KKysgICAgUHJlZGljYXRlOjpGdW5jIHJlY3Vy
c2VTdHJ1Y3QgPSBQcmVkaWNhdGU6OkZhbHNlOworKworKyAgICAvLyBWZWN0b3IgYW5kIHNjYWxh
ciBib29sIGZpZWxkcyBhcmUgcHJvbW90ZWQgdG8gdWludCBmaWVsZHMuCisrICAgIFByZWRpY2F0
ZTo6RnVuYyBwcm9tb3RlQm9vbFRvVWludCA9IFByZWRpY2F0ZTo6RmFsc2U7CisrCisrICAgIC8v
IENyZWF0ZXMgYSBuZXcgc3RydWN0dXJlIHdoZXJlIHNjYWxhciBvciB2ZWN0b3IgZmllbGRzIGFy
ZSBzYXR1cmF0ZWQgdmVjdG9ycy4KKysgICAgLy8gZS5nLiBgZmxvYXQgLT4gZmxvYXQ0YC4KKysg
ICAgLy8gZS5nLiBgZmxvYXQyIC0+IGZsb2F0NGAuCisrICAgIFNhdHVyYXRlVmVjdG9yOjpGdW5j
IHNhdHVyYXRlU2NhbGFyT3JWZWN0b3IgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOwor
KworKyAgICAvLyBDcmVhdGVzIGEgbmV3IHN0cnVjdHVyZSB3aGVyZSBzY2FsYXIgb3IgdmVjdG9y
IGFycmF5IGZpZWxkcyBhcmUgc2F0dXJhdGVkLgorKyAgICAvLyBlLmcuIGBmbG9hdFsxMF0gLT4g
ZmxvYXQ0WzEwXWAKKysgICAgLy8gZS5nLiBgZmxvYXQyWzEwXSAtPiBmbG9hdDRbMTBdYAorKyAg
ICBTYXR1cmF0ZVZlY3Rvcjo6RnVuYyBzYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzID0gU2F0
dXJhdGVWZWN0b3I6OkRvbnRTYXR1cmF0ZTsKKysKKysgICAgLy8gQ3JlYXRlcyBhIG5ldyBzdHJ1
Y3R1cmUgd2hlcmUgbWF0cml4IGZpZWxkcyBhcmUgcm93LXNhdHVyYXRlZC4KKysgICAgLy8gZS5n
LiBgZmxvYXQyeDIgLT4gZmxvYXQyeDRgLgorKyAgICBTYXR1cmF0ZVZlY3Rvcjo6RnVuYyBzYXR1
cmF0ZU1hdHJpeFJvd3MgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOworKworKyAgICBU
TGF5b3V0QmxvY2tTdG9yYWdlIGluaXRpYWxCbG9ja1N0b3JhZ2UgICA9IGtEZWZhdWx0TGF5b3V0
QmxvY2tTdG9yYWdlOworKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBpbml0aWFsTWF0cml4UGFj
a2luZyA9IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZzsKKysgICAgQ29udmVydFR5cGUgY29u
dmVydFR5cGU7CisrICAgIGJvb2wgYWxsb3dQYWNraW5nOworKyAgICBib29sIGFsbG93UGFkZGlu
ZzsKKysgICAgQWRkcmVzc1NwYWNlIGV4dGVybmFsQWRkcmVzc1NwYWNlOworK307CisrCisrc3Ry
dWN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5CisreworKyAgICBjb25zdCBUU3RydWN0dXJlICpt
b2RpZmllZFN0cnVjdCAgICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKKysgICAgVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbiAqZnVuY09yaWdpbmFsVG9Nb2RpZmllZCA9IG51bGxwdHI7CisrICAg
IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBudWxs
cHRyOworKworKyAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uIComZ2V0Q29udmVydGVyKENv
bnZlcnRUeXBlIGNvbnZlcnRUeXBlKQorKyAgICB7CisrICAgICAgICBpZiAoY29udmVydFR5cGUg
PT0gQ29udmVydFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gZnVuY09yaWdpbmFsVG9Nb2RpZmllZDsKKysgICAgICAgIH0KKysgICAgICAg
IGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVuY01vZGlmaWVkVG9Pcmln
aW5hbDsKKysgICAgICAgIH0KKysgICAgfQorK307CisrCisrLy8gSW5kZXhlZCBieSB0b3BvbG9n
aWNhbCBvcmRlci4KKytjbGFzcyBNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzCisreworKyAgcHVi
bGljOgorKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworKyAgICBjb25zdCBNb2RpZmllZFN0cnVj
dE1hY2hpbmVyeSAmYXQoc2l6ZV90IGluZGV4KSBjb25zdDsKKysgICAgY29uc3QgTW9kaWZpZWRT
dHJ1Y3RNYWNoaW5lcnkgKmZpbmQoY29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3Q7CisrICAgIHZv
aWQgaW5zZXJ0KGNvbnN0IFRTdHJ1Y3R1cmUgJnMsIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGlu
ZXJ5ICZtYWNoaW5lcnkpOworKworKyAgcHJpdmF0ZToKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFw
PGNvbnN0IFRTdHJ1Y3R1cmUgKiwgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnk+IG9yaWdpbmFsVG9N
YWNoaW5lcnk7CisrICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gb3JkZXJpbmc7
CisrfTsKKysKKysvLyBSZXR1cm5zIHRydWUgYW5kIGBvdXRNYWNoaW5lcnlgIHBvcHVsYXRlZCBp
ZiBtb2RpZmljYXRpb25zIHdlcmUgcGVyZm9ybWVkLgorKy8vIFJldHVybnMgZmFsc2Ugb3RoZXJ3
aXNlLgorK2Jvb2wgVHJ5Q3JlYXRlTW9kaWZpZWRTdHJ1Y3QoU3ltYm9sRW52ICZzeW1ib2xFbnYs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25maWcgJmNvbmZpZywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJm9yaWdpbmFsU3Ry
dWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSAmbW9kaWZpZWRT
dHJ1Y3ROYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RN
YWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKwor
KyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTU9E
SUZZU1RSVUNUX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L05hbWUuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAw
MDAwMC4uMDdjNWQxOAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCitAQCAtMCwwICsxLDIyMCBAQAorKy8v
CisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgor
KworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0YXRpYyBJbW11dGFibGVTdHJpbmcgR2V0TmFtZShU
IGNvbnN0ICZvYmplY3QpCisreworKyAgICBpZiAob2JqZWN0LnN5bWJvbFR5cGUoKSA9PSBTeW1i
b2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGtFbXB0eUltbXV0YWJsZVN0
cmluZzsKKysgICAgfQorKyAgICByZXR1cm4gb2JqZWN0Lm5hbWUoKTsKKyt9CisrCisrTmFtZTo6
TmFtZShjb25zdCBURmllbGQgJmZpZWxkKSA6IE5hbWUoR2V0TmFtZShmaWVsZCksIGZpZWxkLnN5
bWJvbFR5cGUoKSkge30KKysKKytOYW1lOjpOYW1lKGNvbnN0IFRTeW1ib2wgJnN5bWJvbCkgOiBO
YW1lKEdldE5hbWUoc3ltYm9sKSwgc3ltYm9sLnN5bWJvbFR5cGUoKSkge30KKysKKytib29sIE5h
bWU6Om9wZXJhdG9yPT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICByZXR1cm4g
bVJhd05hbWUgPT0gb3RoZXIubVJhd05hbWUgJiYgbVN5bWJvbFR5cGUgPT0gb3RoZXIubVN5bWJv
bFR5cGU7CisrfQorKworK2Jvb2wgTmFtZTo6b3BlcmF0b3IhPShjb25zdCBOYW1lICZvdGhlcikg
Y29uc3QKKyt7CisrICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyt9CisrCisrYm9vbCBO
YW1lOjpvcGVyYXRvcjwoY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICBpZiAobVJh
d05hbWUgPCBvdGhlci5tUmF3TmFtZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRydWU7Cisr
ICAgIH0KKysgICAgaWYgKG90aGVyLm1SYXdOYW1lIDwgbVJhd05hbWUpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gbVN5bWJvbFR5cGUgPCBvdGhl
ci5tU3ltYm9sVHlwZTsKKyt9CisrCisrYm9vbCBOYW1lOjplbXB0eSgpIGNvbnN0CisreworKyAg
ICByZXR1cm4gbVN5bWJvbFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHk7CisrfQorKworK2Jvb2wg
TmFtZTo6YmVnaW5zV2l0aChjb25zdCBOYW1lICZwcmVmaXgpIGNvbnN0CisreworKyAgICBpZiAo
bVN5bWJvbFR5cGUgIT0gcHJlZml4Lm1TeW1ib2xUeXBlKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysgICAgcmV0dXJuIG1SYXdOYW1lLmJlZ2luc1dpdGgocHJlZml4
Lm1SYXdOYW1lKTsKKyt9CisrCisrdm9pZCBOYW1lOjplbWl0KFRJbmZvU2lua0Jhc2UgJm91dCkg
Y29uc3QKKyt7CisrICAgIHN3aXRjaCAobVN5bWJvbFR5cGUpCisrICAgIHsKKysgICAgICAgIGNh
c2UgU3ltYm9sVHlwZTo6QnVpbHRJbjoKKysgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQ6CisrICAgICAgICAgICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKKysgICAgICAg
ICAgICBvdXQgPDwgbVJhd05hbWU7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBj
YXNlIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWw6CisrICAgICAgICAgICAgQVNTRVJUKCFtUmF3
TmFtZS5lbXB0eSgpKTsKKysgICAgICAgICAgICBpZiAobVJhd05hbWUuYmVnaW5zV2l0aChrQW5n
bGVJbnRlcm5hbFByZWZpeCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBvdXQg
PDwgbVJhd05hbWU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1SYXdO
YW1lWzBdICE9ICdfJykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG91dCA8PCBr
QW5nbGVJbnRlcm5hbFByZWZpeCA8PCAnXycgPDwgbVJhd05hbWU7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG91dCA8
PCBrQW5nbGVJbnRlcm5hbFByZWZpeCA8PCBtUmF3TmFtZTsKKysgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorKyAg
ICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9
CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrLy8g
Tk9URTogVGhpcyBtYXRjaGVzIG1vcmUgdGhpbmdzIHRoYW4gRmluZFN5bWJvbE5vZGUuCisrY2xh
c3MgRXhwcmVzc2lvbkNvbnRhaW5zTmFtZVZpc2l0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
cgorK3sKKysgICAgTmFtZSBtTmFtZTsKKysgICAgYm9vbCBtRm91bmROYW1lID0gZmFsc2U7Cisr
CisrICBwdWJsaWM6CisrICAgIEV4cHJlc3Npb25Db250YWluc05hbWVWaXNpdG9yKGNvbnN0IE5h
bWUgJm5hbWUpCisrICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNl
KSwgbU5hbWUobmFtZSkKKysgICAge30KKysKKysgICAgYm9vbCBmb3VuZE5hbWUoKSBjb25zdCB7
IHJldHVybiBtRm91bmROYW1lOyB9CisrCisrICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCAqbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYgKE5hbWUobm9kZS0+dmFy
aWFibGUoKSkgPT0gbU5hbWUpCisrICAgICAgICB7CisrICAgICAgICAgICAgbUZvdW5kTmFtZSA9
IHRydWU7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlz
aXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlIHsgcmV0dXJuICFtRm91bmROYW1lOyB9Cisr
CisrICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUp
IG92ZXJyaWRlIHsgcmV0dXJuICFtRm91bmROYW1lOyB9CisrCisrICAgIGJvb2wgdmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlkZSAgeyByZXR1cm4gIW1G
b3VuZE5hbWU7IH0KKysKKysgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1UZXJuYXJ5ICpub2RlKSBvdmVycmlkZSB7IHJldHVybiAhbUZvdW5kTmFtZTsgfQorKworKyAg
ICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2Rl
KSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBpZiAobm9kZS0+aXNDb25zdHJ1Y3RvcigpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICA9IG5v
ZGUtPmdldFR5cGUoKTsKKysgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUg
PSB0eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUgJiYgTmFtZSgq
c3RydWN0dXJlKSA9PSBtTmFtZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1G
b3VuZE5hbWUgPSB0cnVlOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVs
c2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBub2Rl
LT5nZXRGdW5jdGlvbigpOworKyAgICAgICAgICAgIGlmIChmdW5jICYmIE5hbWUoKmZ1bmMpID09
IG1OYW1lKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbUZvdW5kTmFtZSA9IHRy
dWU7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuICFtRm91bmRO
YW1lOworKyAgICB9CisrCisrICAgIGJvb2wgdmlzaXRJZkVsc2UoVmlzaXQgdmlzaXQsIFRJbnRl
cm1JZkVsc2UgKm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIExPR0lDX0VSUk9SKCk7
CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXRj
aChWaXNpdCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBMT0dJ
Q19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGJvb2wgdmlz
aXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2FzZSAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBM
T0dJQ19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIHZv
aWQgdmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3Zl
cnJpZGUgeyBMT0dJQ19FUlJPUigpOyB9CisrCisrICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmlu
aXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAg
fQorKworKyAgICBib29sIHZpc2l0QmxvY2soVmlzaXQsIFRJbnRlcm1CbG9jayAqKSBvdmVycmlk
ZQorKyAgICB7CisrICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNl
OworKyAgICB9CisrCisrICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICopIG92ZXJyaWRlCisrICAg
IHsKKysgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRp
b24gKikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwgVElu
dGVybUxvb3AgKikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKysg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICBib29sIHZpc2l0QnJhbmNoKFZp
c2l0LCBUSW50ZXJtQnJhbmNoICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIExPR0lDX0VS
Uk9SKCk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgdm9pZCB2aXNp
dFByZXByb2Nlc3NvckRpcmVjdGl2ZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICopIG92
ZXJyaWRlIHsgTE9HSUNfRVJST1IoKTsgfQorK307CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorKworK2Jvb2wgc2g6OkV4cHJlc3Npb25Db250YWluc05hbWUoY29uc3QgTmFtZSAmbmFt
ZSwgVEludGVybVR5cGVkICZub2RlKQorK3sKKysgICAgRXhwcmVzc2lvbkNvbnRhaW5zTmFtZVZp
c2l0b3IgdmlzaXRvcihuYW1lKTsKKysgICAgbm9kZS50cmF2ZXJzZSgmdmlzaXRvcik7CisrICAg
IHJldHVybiB2aXNpdG9yLmZvdW5kTmFtZSgpOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaAorbmV3IGZpbGUgbW9kZSAx
MDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ2ZWFlYTgKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgKK0BAIC0wLDAg
KzEsNjggQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9JbW11dGFibGVTdHJpbmcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9JbmZvU2luay5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ludGVybU5v
ZGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysK
Kytjb25zdGV4cHIgY2hhciBrQW5nbGVJbnRlcm5hbFByZWZpeFtdID0gIkFOR0xFIjsKKysKKysv
LyBSZXByZXNlbnRzIHRoZSBuYW1lIG9mIGEgc3ltYm9sLgorK2NsYXNzIE5hbWUKKyt7CisrICBw
dWJsaWM6CisrICAgIGNvbnN0ZXhwciBOYW1lKGNvbnN0IE5hbWUgJikgPSBkZWZhdWx0OworKwor
KyAgICBjb25zdGV4cHIgTmFtZSgpIDogTmFtZShrRW1wdHlJbW11dGFibGVTdHJpbmcsIFN5bWJv
bFR5cGU6OkVtcHR5KSB7fQorKworKyAgICBleHBsaWNpdCBjb25zdGV4cHIgTmFtZShJbW11dGFi
bGVTdHJpbmcgcmF3TmFtZSwgU3ltYm9sVHlwZSBzeW1ib2xUeXBlKQorKyAgICAgICAgOiBtUmF3
TmFtZShyYXdOYW1lKSwgbVN5bWJvbFR5cGUoc3ltYm9sVHlwZSkKKysgICAgeworKyAgICAgICAg
QVNTRVJUKHJhd05hbWUuZW1wdHkoKSA9PSAoc3ltYm9sVHlwZSA9PSBTeW1ib2xUeXBlOjpFbXB0
eSkpOworKyAgICB9CisrCisrICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBOYW1lKGNvbnN0IGNoYXIg
KnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJu
YWwpCisrICAgICAgICA6IE5hbWUoSW1tdXRhYmxlU3RyaW5nKHJhd05hbWUpLCBzeW1ib2xUeXBl
KQorKyAgICB7fQorKworKyAgICBleHBsaWNpdCBOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZyYXdO
YW1lLCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUpCisrICAgICAgICA6IE5hbWUoSW1tdXRhYmxlU3Ry
aW5nKHJhd05hbWUpLCBzeW1ib2xUeXBlKQorKyAgICB7fQorKworKyAgICBleHBsaWNpdCBOYW1l
KGNvbnN0IFRGaWVsZCAmZmllbGQpOworKyAgICBleHBsaWNpdCBOYW1lKGNvbnN0IFRTeW1ib2wg
JnN5bWJvbCk7CisrCisrICAgIE5hbWUgJm9wZXJhdG9yPShjb25zdCBOYW1lICYpID0gZGVmYXVs
dDsKKysgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKysgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKysgICAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0OworKworKyAgICBjb25zdGV4cHIgY29uc3Qg
SW1tdXRhYmxlU3RyaW5nICZyYXdOYW1lKCkgY29uc3QgeyByZXR1cm4gbVJhd05hbWU7IH0KKysg
ICAgY29uc3RleHByIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1TeW1i
b2xUeXBlOyB9CisrCisrICAgIGJvb2wgZW1wdHkoKSBjb25zdDsKKysgICAgYm9vbCBiZWdpbnNX
aXRoKGNvbnN0IE5hbWUgJnByZWZpeCkgY29uc3Q7CisrCisrICAgIHZvaWQgZW1pdChUSW5mb1Np
bmtCYXNlICZvdXQpIGNvbnN0OworKworKyAgcHJpdmF0ZToKKysgICAgSW1tdXRhYmxlU3RyaW5n
IG1SYXdOYW1lOworKyAgICBTeW1ib2xUeXBlIG1TeW1ib2xUeXBlOworK307CisrCisrQU5HTEVf
Tk9fRElTQ0FSRCBib29sIEV4cHJlc3Npb25Db250YWluc05hbWUoY29uc3QgTmFtZSAmbmFtZSwg
VEludGVybVR5cGVkICZub2RlKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYg
IC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KK2Rp
ZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UGlwZWxpbmUuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1BpcGVsaW5lLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU0
YzM3OGEKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5jcHAKK0BAIC0wLDAgKzEsNDc2IEBACisrLy8KKysv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorKy8vCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1BpcGVsaW5lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0J1aWx0SW4uaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKysKKysjZGVmaW5lIFZBUklBTlRfTkFNRSh2YXJpYW50LCBiYXNl
KSAodmFyaWFudCA9PSBWYXJpYW50OjpNb2RpZmllZCA/IGJhc2UgIk1vZCIgOiBiYXNlKQorKwor
K2Jvb2wgUGlwZWxpbmU6OnVzZXMoY29uc3QgVFZhcmlhYmxlICZ2YXIpIGNvbnN0CisreworKyAg
ICBpZiAodmFyLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIGlmIChnbG9iYWxJbnN0YW5jZVZh
cikKKysgICAgeworKyAgICAgICAgcmV0dXJuICZ2YXIgPT0gZ2xvYmFsSW5zdGFuY2VWYXI7Cisr
ICAgIH0KKysKKysgICAgY29uc3QgVFR5cGUgJm5vZGVUeXBlICAgICAgPSB2YXIuZ2V0VHlwZSgp
OworKyAgICBjb25zdCBUUXVhbGlmaWVyIHF1YWxpZmllciA9IG5vZGVUeXBlLmdldFF1YWxpZmll
cigpOworKworKyAgICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVHlwZTo6
VmVydGV4SW46CisrICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUF0dHJpYnV0ZToKKysgICAg
ICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhJbjoKKysgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNh
c2UgVHlwZTo6VmVydGV4T3V0OgorKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhP
dXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisrICAg
ICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRmxhdE91dDoKKysgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFQb2ludFNpemU6CisrICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxU21vb3RoT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cUNlbnRyb2lkT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2
cU5vUGVyc3BlY3RpdmVPdXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
VmFyeWluZ091dDoKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoKKysgICAgICAg
ICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ21lbnRJbjoKKysgICAgICAgICAgICAgICAgY2FzZSBU
UXVhbGlmaWVyOjpFdnFGbGF0SW46CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6
RXZxU21vb3RoSW46CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2VudHJv
aWRJbjoKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFOb1BlcnNwZWN0aXZl
SW46CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVmFyeWluZ0luOgorKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICAgICAgfQorKwor
KyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBzd2l0Y2ggKHF1
YWxpZmllcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxRnJhZ21lbnRPdXQ6CisrICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
RnJhZ0NvbG9yOgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdEYXRh
OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyYWdEZXB0aDoKKysgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysg
ICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgorKyAgICAgICAgICAgIHN3aXRjaCAocXVh
bGlmaWVyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVy
OjpFdnFVbmlmb3JtOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgICAgICAgICAgfQorKworKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6
CisrICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUdsb2JhbDoKKysgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2Ug
VHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisrICAgICAgICAgICAgc3dpdGNoIChxdWFs
aWZpZXIpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6
OkV2cVZlcnRleElEOgorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgICAgICAgICAgfQorKworKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRH
bG9iYWxzOgorKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnQ29vcmQ6CisrICAgICAg
ICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRDb29yZDoKKysgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcm9udEZhY2luZzoKKysgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgIGNhc2UgVHlw
ZTo6QW5nbGVVbmlmb3JtczoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOyAgLy8gZ2xvYmFs
SW5zdGFuY2VWYXIgc2hvdWxkIGJlIG5vbi1udWxsIGFuZCB0aHVzIG5ldmVyIHJlYWNoIGhlcmUu
CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0
dXJlOgorKyAgICAgICAgICAgIHJldHVybiBJc1NhbXBsZXIobm9kZVR5cGUuZ2V0QmFzaWNUeXBl
KCkpOworKworKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJl
dHVybiBOYW1lKHZhcikgPT0gTmFtZSgqQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCkp
OworKyAgICB9CisrfQorKworK05hbWUgUGlwZWxpbmU6OmdldFN0cnVjdFR5cGVOYW1lKFZhcmlh
bnQgdmFyaWFudCkgY29uc3QKKyt7CisrICAgIGNvbnN0IGNoYXIgKm5hbWU7CisrICAgIHN3aXRj
aCAodHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKysgICAgICAg
ICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJWZXJ0ZXhJbiIpOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICAgICAg
bmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVmVydGV4T3V0Iik7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisrICAgICAgICAgICAgbmFt
ZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiRnJhZ21lbnRJbiIpOworKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBuYW1l
ID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJGcmFnbWVudE91dCIpOworKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICAgICAgbmFt
ZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVXNlclVuaWZvcm1zIik7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICAgICAg
bmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiQW5nbGVVbmlmb3JtcyIpOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisrICAg
ICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiTm9uQ29uc3RHbG9iYWxzIik7
CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0
ZXhHbG9iYWxzOgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIklu
dm9jYXRpb25WZXJ0ZXhHbG9iYWxzIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBj
YXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisrICAgICAgICAgICAgbmFtZSA9
IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiSW52b2NhdGlvbkZyYWdtZW50R2xvYmFscyIpOworKyAg
ICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAgICAgICAg
ICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgIlRleHR1cmVFbnZzIik7CisrICAgICAg
ICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6CisrICAgICAgICAg
ICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiSW5zdGFuY2VJZCIpOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICB9CisrICAgIHJldHVybiBOYW1lKG5hbWUpOworK30KKysKKytOYW1l
IFBpcGVsaW5lOjpnZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoVmFyaWFudCB2YXJpYW50KSBjb25zdAor
K3sKKysgICAgY29uc3QgY2hhciAqbmFtZTsKKysgICAgc3dpdGNoICh0eXBlKQorKyAgICB7Cisr
ICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5U
X05BTUUodmFyaWFudCwgInZlcnRleEluIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1F
KHZhcmlhbnQsICJ2ZXJ0ZXhPdXQiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNh
c2UgVHlwZTo6RnJhZ21lbnRJbjoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZh
cmlhbnQsICJmcmFnbWVudEluIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNl
IFR5cGU6OkZyYWdtZW50T3V0OgorKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFy
aWFudCwgImZyYWdtZW50T3V0Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNl
IFR5cGU6OlVzZXJVbmlmb3JtczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZh
cmlhbnQsICJ1c2VyVW5pZm9ybXMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNh
c2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1F
KHZhcmlhbnQsICJhbmdsZVVuaWZvcm1zIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICBjYXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKysgICAgICAgICAgICBuYW1lID0gVkFS
SUFOVF9OQU1FKHZhcmlhbnQsICJub25Db25zdEdsb2JhbHMiKTsKKysgICAgICAgICAgICBicmVh
azsKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisrICAgICAg
ICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiaW52b2NhdGlvblZlcnRleEdsb2Jh
bHMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlv
bkZyYWdtZW50R2xvYmFsczoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJpbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzIik7CisrICAgICAgICAgICAgYnJlYWs7Cisr
ICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisrICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRf
TkFNRSh2YXJpYW50LCAidGV4dHVyZUVudnMiKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKysgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9O
QU1FKHZhcmlhbnQsICJpbnN0YW5jZUlkIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0K
KysgICAgcmV0dXJuIE5hbWUobmFtZSk7CisrfQorKworK3N0YXRpYyBib29sIEFsbG93UGFja2lu
ZyhQaXBlbGluZTo6VHlwZSB0eXBlKQorK3sKKysgICAgdXNpbmcgVHlwZSA9IFBpcGVsaW5lOjpU
eXBlOworKworKyAgICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgICAgIGNhc2UgVHlwZTo6
VXNlclVuaWZvcm1zOgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgICAgY2Fz
ZSBUeXBlOjpWZXJ0ZXhJbjoKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorKyAgICAg
ICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91
dDoKKysgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVVbmlmb3JtczoKKysgICAgICAgIGNhc2UgVHlw
ZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uVmVy
dGV4R2xvYmFsczoKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFs
czoKKysgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKysgICAgICAgIGNhc2UgVHlwZTo6SW5z
dGFuY2VJZDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisrc3Rh
dGljIGJvb2wgQWxsb3dQYWRkaW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCisreworKyAgICB1c2lu
ZyBUeXBlID0gUGlwZWxpbmU6OlR5cGU7CisrCisrICAgIHN3aXRjaCAodHlwZSkKKysgICAgewor
KyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6OlZl
cnRleEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5
cGU6OkZyYWdtZW50SW46CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorKyAgICAg
ICAgY2FzZSBUeXBlOjpBbmdsZVVuaWZvcm1zOgorKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25z
dGFudEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxz
OgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAg
ICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgfQorK30KKytlbnVtIENvbXBhcmUKKyt7CisrICAgIExULAorKyAgICBMVEUsCisrICAg
IEVRLAorKyAgICBHVEUsCisrICAgIEdULAorK307CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Cisrc3RhdGljIGJvb2wgQ29tcGFyZUJ5KENvbXBhcmUgb3AsIGNvbnN0IFQgJngsIGNvbnN0IFQg
JnkpCisreworKyAgICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIExUOgorKyAg
ICAgICAgICAgIHJldHVybiB4IDwgeTsKKysgICAgICAgIGNhc2UgTFRFOgorKyAgICAgICAgICAg
IHJldHVybiB4IDw9IHk7CisrICAgICAgICBjYXNlIEVROgorKyAgICAgICAgICAgIHJldHVybiB4
ID09IHk7CisrICAgICAgICBjYXNlIEdURToKKysgICAgICAgICAgICByZXR1cm4geCA+PSB5Owor
KyAgICAgICAgY2FzZSBHVDoKKysgICAgICAgICAgICByZXR1cm4geCA+IHk7CisrICAgIH0KKyt9
CisrCisrdGVtcGxhdGUgPFRCYXNpY1R5cGUgQlQsIENvbXBhcmUgQ21wLCBpbnQgTWF0Y2hEaW0s
IGludCBOZXdEaW0+Cisrc3RhdGljIGludCBTYXR1cmF0ZVZlY3Rvck9mKGNvbnN0IFRGaWVsZCAm
ZmllbGQpCisreworKyAgICBzdGF0aWNfYXNzZXJ0KE5ld0RpbSA+PSBNYXRjaERpbSwgIiIpOwor
KworKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisrICAgIEFTU0VSVCh0
eXBlLmlzU2NhbGFyKCkgfHwgdHlwZS5pc1ZlY3RvcigpKTsKKysKKysgICAgY29uc3QgYm9vbCBj
b25kID0gdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBCVCAmJiAhdHlwZS5pc0FycmF5KCkgJiYKKysg
ICAgICAgICAgICAgICAgICAgICAgQ29tcGFyZUJ5KENtcCwgdHlwZS5nZXROb21pbmFsU2l6ZSgp
LCBNYXRjaERpbSk7CisrCisrICAgIGlmIChjb25kKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
TmV3RGltOworKyAgICB9CisrICAgIHJldHVybiAwOworK30KKysKKytNb2RpZnlTdHJ1Y3RDb25m
aWcgUGlwZWxpbmU6OmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCkgY29uc3QKKyt7CisrICAg
IHVzaW5nIFByZWQgICA9IE1vZGlmeVN0cnVjdENvbmZpZzo6UHJlZGljYXRlOworKyAgICB1c2lu
ZyBTYXRWZWMgPSBNb2RpZnlTdHJ1Y3RDb25maWc6OlNhdHVyYXRlVmVjdG9yOworKworKyAgICBN
b2RpZnlTdHJ1Y3RDb25maWcgY29uZmlnKAorKyAgICAgICAgaXNQaXBlbGluZU91dCgpID8gQ29u
dmVydFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCA6IENvbnZlcnRUeXBlOjpNb2RpZmllZFRvT3Jp
Z2luYWwsCisrICAgICAgICBBbGxvd1BhY2tpbmcodHlwZSksIEFsbG93UGFkZGluZyh0eXBlKSk7
CisrCisrICAgIGNvbmZpZy5leHRlcm5hbEFkZHJlc3NTcGFjZSA9IGV4dGVybmFsQWRkcmVzc1Nw
YWNlKCk7CisrCisrICAgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICAgICAgY2FzZSBUeXBl
OjpWZXJ0ZXhJbjoKKysgICAgICAgICAgICBjb25maWcuaW5saW5lQXJyYXkgICAgICAgID0gUHJl
ZDo6VHJ1ZTsKKysgICAgICAgICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zID0gUHJlZDo6
VHJ1ZTsKKysgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJlZDo6VHJ1
ZTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0
OgorKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVlOwor
KyAgICAgICAgICAgIGNvbmZpZy5zcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworKyAg
ICAgICAgICAgIGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAg
ICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAg
ICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAg
ICAgIGNvbmZpZy5zcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAg
IGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgICAgICBj
b25maWcuaW5saW5lQXJyYXkgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisrICAgICAgICAgICAg
Y29uZmlnLnNwbGl0TWF0cml4Q29sdW1ucyAgICAgPSBQcmVkOjpUcnVlOworKyAgICAgICAgICAg
IGNvbmZpZy5pbmxpbmVTdHJ1Y3QgICAgICAgICAgID0gUHJlZDo6VHJ1ZTsKKysgICAgICAgICAg
ICBjb25maWcuc2F0dXJhdGVTY2FsYXJPclZlY3RvciA9IFtdKGNvbnN0IFRGaWVsZCAmZmllbGQp
IHsKKysgICAgICAgICAgICAgICAgaWYgKGludCBzID0gU2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNU
eXBlOjpFYnRJbnQsIExULCA0LCA0PihmaWVsZCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgIGlmIChpbnQgcyA9IFNhdHVyYXRlVmVjdG9yT2Y8VEJhc2ljVHlwZTo6RWJ0VUludCwg
TFQsIDQsIDQ+KGZpZWxkKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHM7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgaWYgKGlu
dCBzID0gU2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNUeXBlOjpFYnRGbG9hdCwgTFQsIDQsIDQ+KGZp
ZWxkKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7
CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAg
ICAgICAgfTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6VXNl
clVuaWZvcm1zOgorKyAgICAgICAgICAgIGNvbmZpZy5wcm9tb3RlQm9vbFRvVWludCAgICAgICAg
ICAgID0gUHJlZDo6VHJ1ZTsKKysgICAgICAgICAgICBjb25maWcuc2F0dXJhdGVNYXRyaXhSb3dz
ICAgICAgICAgICA9IFNhdFZlYzo6RnVsbHlTYXR1cmF0ZTsKKysgICAgICAgICAgICBjb25maWcu
c2F0dXJhdGVTY2FsYXJPclZlY3RvckFycmF5cyA9IFNhdFZlYzo6RnVsbHlTYXR1cmF0ZTsKKysg
ICAgICAgICAgICBjb25maWcucmVjdXJzZVN0cnVjdCAgICAgICAgICAgICAgICA9IFByZWQ6OlRy
dWU7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5p
Zm9ybXM6CisrICAgICAgICAgICAgY29uZmlnLmluaXRpYWxCbG9ja1N0b3JhZ2UgPSBUTGF5b3V0
QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA7ICAvLyBYWFg6IENvcnJlY3Q/CisrICAgICAgICAgICAg
YnJlYWs7CisrCisrICAgICAgICBjYXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKysgICAg
ICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEds
b2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6Cisr
ICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisrICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNl
SWQ6CisrICAgICAgICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbmZpZzsK
Kyt9CisrCisrYm9vbCBQaXBlbGluZTo6YWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFy
YXRpb25Jbk1haW4oKSBjb25zdAorK3sKKysgICAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAg
ICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudElu
OgorKyAgICAgICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6
OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAg
Y2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0Ogor
KyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5
cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0
aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0dXJlOgorKyAgICAg
ICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAg
ICB9CisrfQorKworK2Jvb2wgUGlwZWxpbmU6OmlzUGlwZWxpbmVPdXQoKSBjb25zdAorK3sKKysg
ICAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgor
KyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpVc2Vy
VW5pZm9ybXM6CisrICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisrICAgICAgICBj
YXNlIFR5cGU6Ok5vbkNvbnN0YW50R2xvYmFsczoKKysgICAgICAgIGNhc2UgVHlwZTo6SW52b2Nh
dGlvblZlcnRleEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVu
dEdsb2JhbHM6CisrICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6CisrICAgICAgICBjYXNlIFR5
cGU6Okluc3RhbmNlSWQ6CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKworKyAgICAgICAg
Y2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisrICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0Ogor
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrfQorKworK0FkZHJlc3NTcGFjZSBQ
aXBlbGluZTo6ZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKSBjb25zdAorK3sKKysgICAgc3dpdGNoICh0
eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorKyAgICAgICAgY2Fz
ZSBUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2Jh
bHM6CisrICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorKyAgICAg
ICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorKyAgICAgICAgY2FzZSBU
eXBlOjpUZXh0dXJlOgorKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorKyAgICAgICAg
Y2FzZSBUeXBlOjpGcmFnbWVudE91dDoKKysgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0Ogor
KyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3BhY2U6OlRocmVhZDsKKysKKysgICAgICAgIGNh
c2UgVHlwZTo6VXNlclVuaWZvcm1zOgorKyAgICAgICAgY2FzZSBUeXBlOjpBbmdsZVVuaWZvcm1z
OgorKyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworKyAgICB9Cisr
fQorKworK2Jvb2wgUGlwZWxpbmVTdHJ1Y3RzOjptYXRjaGVzKGNvbnN0IFRTdHJ1Y3R1cmUgJnMs
IGJvb2wgaW50ZXJuYWwsIGJvb2wgZXh0ZXJuYWwpIGNvbnN0CisreworKyAgICBQaXBlbGluZVNj
b3BlZDxUU3RydWN0dXJlPiBwc1tdID0geworKyAgICAgICAgZnJhZ21lbnRJbiwKKysgICAgICAg
IGZyYWdtZW50T3V0LAorKyAgICAgICAgdmVydGV4SW4sCisrICAgICAgICB2ZXJ0ZXhPdXQsCisr
ICAgICAgICB1c2VyVW5pZm9ybXMsCisrICAgICAgICBhbmdsZVVuaWZvcm1zLAorKyAgICAgICAg
bm9uQ29uc3RhbnRHbG9iYWxzLAorKyAgICAgICAgaW52b2NhdGlvblZlcnRleEdsb2JhbHMsCisr
ICAgICAgICBpbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLAorKyAgICAgICAgdGV4dHVyZSwKKysg
ICAgICAgIGluc3RhbmNlSWQsCisrICAgIH07CisrICAgIGZvciAoY29uc3QgYXV0byAmcCA6IHBz
KQorKyAgICB7CisrICAgICAgICBpZiAoaW50ZXJuYWwgJiYgcC5pbnRlcm5hbCA9PSAmcykKKysg
ICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgICAg
IGlmIChleHRlcm5hbCAmJiBwLmV4dGVybmFsID09ICZzKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiBmYWxzZTsK
Kyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1BpcGVsaW5lLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUGlwZWxpbmUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAu
LjliZjQ3NmEKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5oCitAQCAtMCwwICsxLDEyMyBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUElQRUxJTkVfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX1BJUEVMSU5FX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L01vZGlmeVN0cnVjdC5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorKworK25hbWVzcGFjZSBz
aAorK3sKKysKKysvLyBEYXRhIHRoYXQgaXMgc2NvcGVkIGFzIGBleHRlcm5hbGAgYW5kIGBpbnRl
cm5hbGAgZm9yIGEgZ2l2ZW4gcGlwZWxpbmUuCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3Ry
dWN0IFBpcGVsaW5lU2NvcGVkCisreworKyAgICAvLyBEYXRhIHRoYXQgaXMgY29uZmlndXJlZCB0
byB0YWxrIGV4dGVybmFsbHkgdG8gdGhlIHByb2dyYW0uCisrICAgIC8vIE1heSBjb2luY2lkZSB3
aXRoIGBpbnRlcm5hbGAsIGJ1dCBtYXkgYWxzbyBkaXZlcmdlIGZyb20gYGludGVybmFsYC4KKysg
ICAgY29uc3QgVCAqZXh0ZXJuYWwgPSBudWxscHRyOworKworKyAgICAvLyBEYXRhIHRoYXQgaXMg
Y29uZmlndXJlZCB0byB0YWxrIGludGVybmFsbHkgd2l0aGluIHRoZSBwcm9ncmFtLgorKyAgICAv
LyBNYXkgY29pbmNpZGUgd2l0aCBgZXh0ZXJuYWxgLCBidXQgbWF5IGFsc28gZGl2ZXJnZSBmcm9t
IGBleHRlcm5hbGAuCisrICAgIGNvbnN0IFQgKmludGVybmFsID0gbnVsbHB0cjsKKysKKysgICAg
Ly8gUmV0dXJucyB0cnVlIGlmZiB0aGUgaW5wdXQgY29pbmNpZGVzIHdpdGggZWl0aGVyIGBleHRl
cm5hbGAgb3IgYGludGVybmFsYCBkYXRhLgorKyAgICBib29sIG1hdGNoZXMoY29uc3QgVCAmb2Jq
ZWN0KSBjb25zdCB7IHJldHVybiBleHRlcm5hbCA9PSAmb2JqZWN0IHx8IGludGVybmFsID09ICZv
YmplY3Q7IH0KKysKKysgICAgLy8gQm90aCBgZXh0ZXJuYWxgIGFuZCBgaW50ZXJuYWxgIHJlcHJl
c2VudGF0aW9ucyBhcmUgbm9uLW51bGwuCisrICAgIGJvb2wgaXNUb3RhbGx5RnVsbCgpIGNvbnN0
IHsgcmV0dXJuIGV4dGVybmFsICYmIGludGVybmFsOyB9CisrCisrICAgIC8vIEJvdGggYGV4dGVy
bmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIG51bGwuCisrICAgIGJvb2wg
aXNUb3RhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiAhZXh0ZXJuYWwgJiYgIWludGVybmFsOyB9
CisrCisrICAgIC8vIEJvdGggYGV4dGVybmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlv
bnMgYXJlIHRoZSBzYW1lLgorKyAgICBib29sIGlzVW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIGV4
dGVybmFsID09IGludGVybmFsOyB9CisrfTsKKysKKysvLyBSZXByZXNlbnRzIGEgaGlnaC1sZXZl
bCBwcm9ncmFtIHBpcGVsaW5lLgorK2NsYXNzIFBpcGVsaW5lCisreworKyAgcHVibGljOgorKyAg
ICBlbnVtIGNsYXNzIFR5cGUKKysgICAgeworKyAgICAgICAgVmVydGV4SW4sCisrICAgICAgICBW
ZXJ0ZXhPdXQsCisrICAgICAgICBGcmFnbWVudEluLAorKyAgICAgICAgRnJhZ21lbnRPdXQsCisr
ICAgICAgICBVc2VyVW5pZm9ybXMsCisrICAgICAgICBBbmdsZVVuaWZvcm1zLAorKyAgICAgICAg
Tm9uQ29uc3RhbnRHbG9iYWxzLAorKyAgICAgICAgSW52b2NhdGlvblZlcnRleEdsb2JhbHMsCisr
ICAgICAgICBJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLAorKyAgICAgICAgVGV4dHVyZSwKKysg
ICAgICAgIEluc3RhbmNlSWQsCisrICAgIH07CisrCisrICAgIGVudW0gY2xhc3MgVmFyaWFudAor
KyAgICB7CisrICAgICAgICAvLyBGb3IgYWxsIGludGVybmFsIHBpcGVsaW5lIHVzZXMuCisrICAg
ICAgICAvLyBGb3IgZXh0ZXJuYWwgcGlwZWxpbmUgdXNlcyBpZiBwaXBlbGluZSBkb2VzIG5vdCBy
ZXF1aXJlIHNwbGl0dGluZyBvciBzYXR1cmF0aW9uLgorKyAgICAgICAgT3JpZ2luYWwsCisrCisr
ICAgICAgICAvLyBPbmx5IGZvciBleHRlcm5hbCBwaXBlbGluZSB1c2VzIGlmIHRoZSBwaXBlbGlu
ZSB3YXMgc3BsaXQgb3Igc2F0dXJhdGVkLgorKyAgICAgICAgTW9kaWZpZWQsCisrICAgIH07Cisr
CisrICBwdWJsaWM6CisrICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBwaXBlbGluZS4KKysgICAgVHlw
ZSB0eXBlOworKworKyAgICAvLyBOb24tbnVsbCBpZiBhIGdsb2JhbCBpbnN0YW5jZSBvZiB0aGUg
cGlwZWxpbmUgc3RydWN0IGFscmVhZHkgZXhpc3RzLgorKyAgICAvLyBJZiBub24tbnVsbCBzdHJ1
Y3Qgc3BsaXR0aW5nIHNob3VsZCBub3QgYmUgbmVlZGVkLgorKyAgICBjb25zdCBUVmFyaWFibGUg
Kmdsb2JhbEluc3RhbmNlVmFyOworKworKyAgcHVibGljOgorKyAgICAvLyBSZXR1cm5zIHRydWUg
aWZmIHRoZSB2YXJpYWJsZSBiZWxvbmdzIHRvIHRoZSBwaXBlbGluZS4KKysgICAgYm9vbCB1c2Vz
KGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdDsKKysKKysgICAgLy8gUmV0dXJucyB0aGUgbmFt
ZSBmb3IgdGhlIHN0cnVjdCB0eXBlIHRoYXQgc3RvcmVzIHZhcmlhYmxlcyBvZiB0aGlzIHBpcGVs
aW5lLgorKyAgICBOYW1lIGdldFN0cnVjdFR5cGVOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7
CisrCisrICAgIC8vIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBzdHJ1Y3QgaW5zdGFuY2UgdGhh
dCBzdG9yZXMgdmFyaWFibGVzIG9mIHRoaXMgcGlwZWxpbmUuCisrICAgIE5hbWUgZ2V0U3RydWN0
SW5zdGFuY2VOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7CisrCisrICAgIE1vZGlmeVN0cnVj
dENvbmZpZyBleHRlcm5hbFN0cnVjdE1vZGlmeUNvbmZpZygpIGNvbnN0OworKworKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHBpcGVsaW5lIGFsd2F5cyByZXF1aXJlcyBhIG5vbi1wYXJhbWV0
ZXIgbG9jYWwgaW5zdGFuY2UgZGVjbGFyYXRpb24gb2YKKysgICAgLy8gdGhlIHBpcGVsaW5lIHN0
cnVjdHVyZXMuCisrICAgIGJvb2wgYWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRp
b25Jbk1haW4oKSBjb25zdDsKKysKKysgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgcGlwZWxp
bmUgaXMgYW4gb3V0cHV0IHBpcGVsaW5lLiBUaGUgZXh0ZXJuYWwgcGlwZWxpbmUgc3RydWN0dXJl
IHNob3VsZAorKyAgICAvLyBiZSByZXR1cm5lZCBmcm9tIGBtYWluYC4KKysgICAgYm9vbCBpc1Bp
cGVsaW5lT3V0KCkgY29uc3Q7CisrCisrICAgIEFkZHJlc3NTcGFjZSBleHRlcm5hbEFkZHJlc3NT
cGFjZSgpIGNvbnN0OworK307CisrCisrLy8gQSBjb2xsZWN0aW9uIG9mIHZhcmlvdXMgcGlwZWxp
bmUgc3RydWN0dXJlcy4KKytzdHJ1Y3QgUGlwZWxpbmVTdHJ1Y3RzIDogYW5nbGU6Ok5vbkNvcHlh
YmxlCisreworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBmcmFnbWVudEluOworKyAg
ICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBmcmFnbWVudE91dDsKKysgICAgUGlwZWxpbmVT
Y29wZWQ8VFN0cnVjdHVyZT4gdmVydGV4SW47CisrICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1
cmU+IHZlcnRleE91dDsKKysgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gdXNlclVuaWZv
cm1zOworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBhbmdsZVVuaWZvcm1zOworKyAg
ICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBub25Db25zdGFudEdsb2JhbHM7CisrICAgIFBp
cGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOworKyAgICBQ
aXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBpbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOworKyAg
ICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiB0ZXh0dXJlOworKyAgICBQaXBlbGluZVNjb3Bl
ZDxUU3RydWN0dXJlPiBpbnN0YW5jZUlkOworKworKyAgICBib29sIG1hdGNoZXMoY29uc3QgVFN0
cnVjdHVyZSAmcywgYm9vbCBpbnRlcm5hbCwgYm9vbCBleHRlcm5hbCkgY29uc3Q7CisrfTsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1BJUEVMSU5FX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmNwcCBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJl
bHVkZS5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44YmY1YTAyCist
LS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuY3BwCitAQCAtMCwwICsxLDM3NTcgQEAKKysvLworKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisrLy8KKysKKysjaW5jbHVkZSA8Y2N0eXBlPgorKworKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0luZm9TaW5rLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisr
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgi
CisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisr
CisrbmFtZXNwYWNlCisreworKworK2NsYXNzIFByb2dyYW1QcmVsdWRlIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIKKyt7CisrICAgIHVzaW5nIExpbmVUYWcgICAgICAgPSB1bnNpZ25lZDsKKysg
ICAgdXNpbmcgRnVuY0VtaXR0ZXIgICA9IHZvaWQgKCopKFByb2dyYW1QcmVsdWRlICYsIGNvbnN0
IFRGdW5jdGlvbiAmKTsKKysgICAgdXNpbmcgRnVuY1RvRW1pdHRlciA9IHN0ZDo6bWFwPE5hbWUs
IEZ1bmNFbWl0dGVyPjsKKysKKysgIHB1YmxpYzoKKysgICAgUHJvZ3JhbVByZWx1ZGUoVEluZm9T
aW5rQmFzZSAmb3V0LCBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorKyAgICAgICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSksIG1PdXQob3V0KQorKyAgICB7
CisrICAgICAgICBBTFdBWVNfSU5MSU5FKCk7CisrCisrICAgICAgICBpZiAocHBjLmhhc1N0cnVj
dEVxKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGVxdWFsVmVjdG9yKCk7CisrICAgICAgICAg
ICAgZXF1YWxNYXRyaXgoKTsKKysgICAgICAgIH0KKysKKysjaWYgMQorKyAgICAgICAgbU91dCA8
PCAiI2RlZmluZSBBTkdMRV90ZW5zb3IgbWV0YWw6OmFycmF5XG4iOworKyNlbHNlCisrICAgICAg
ICB0ZW5zb3IoKTsKKysjZW5kaWYKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgYm9vbCBl
bWl0R3VhcmQoTGluZVRhZyBsaW5lVGFnKQorKyAgICB7CisrICAgICAgICBpZiAobUVtaXR0ZWQu
ZmluZChsaW5lVGFnKSAhPSBtRW1pdHRlZC5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgICAgICBtRW1pdHRlZC5pbnNlcnQobGlu
ZVRhZyk7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBzdGF0aWMgRnVu
Y1RvRW1pdHRlciBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKysKKysgICAgdm9pZCB2aXNpdE9wZXJh
dG9yKFRPcGVyYXRvciBvcCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAqZnVuYywKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMCwK
KysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICphcmdUeXBlMSA9IG51bGxwdHIp
OworKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5cGUg
JnR5cGUpOworKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgVFZhcmlhYmxlICZ2YXIpOwor
KyAgICB2b2lkIHZpc2l0U3RydWN0dXJlKGNvbnN0IFRTdHJ1Y3R1cmUgJnMpOworKworKyAgICBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKSBvdmVycmlkZTsKKysg
ICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUpIG92ZXJyaWRlOwor
KyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2RlKSBv
dmVycmlkZTsKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFy
YXRpb24gKm5vZGUpIG92ZXJyaWRlOworKyAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wgKm5vZGUpIG92ZXJyaWRlOworKworKyAgcHJpdmF0ZToKKysgICAgdm9pZCBBTFdBWVNfSU5M
SU5FKCk7CisrCisrICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9hdG9taWMoKTsKKysgICAgdm9pZCBp
bmNsdWRlX21ldGFsX2NvbW1vbigpOworKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmlj
KCk7CisrICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9ncmFwaGljcygpOworKyAgICB2b2lkIGluY2x1
ZGVfbWV0YWxfbWF0aCgpOworKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfbWF0cml4KCk7CisrICAg
IHZvaWQgaW5jbHVkZV9tZXRhbF9wYWNrKCk7CisrICAgIHZvaWQgaW5jbHVkZV9tZXRhbF9yZWxh
dGlvbmFsKCk7CisrCisrICAgIHZvaWQgZW5hYmxlX2lmKCk7CisrICAgIHZvaWQgc2NhbGFyX29m
KCk7CisrICAgIHZvaWQgaXNfc2NhbGFyKCk7CisrICAgIHZvaWQgaXNfdmVjdG9yKCk7CisrICAg
IHZvaWQgaXNfbWF0cml4KCk7CisrICAgIHZvaWQgYWRkcmVzc29mKCk7CisrICAgIHZvaWQgZGlz
dGFuY2UoKTsKKysgICAgdm9pZCBsZW5ndGgoKTsKKysgICAgdm9pZCBkb3QoKTsKKysgICAgdm9p
ZCBub3JtYWxpemUoKTsKKysgICAgdm9pZCBmYWNlZm9yd2FyZCgpOworKyAgICB2b2lkIHJlZmxl
Y3QoKTsKKysgICAgdm9pZCByZWZyYWN0KCk7CisrICAgIHZvaWQgZGVncmVlcygpOworKyAgICB2
b2lkIHJhZGlhbnMoKTsKKysgICAgdm9pZCBtb2QoKTsKKysgICAgdm9pZCBwb3N0SW5jcmVtZW50
TWF0cml4KCk7CisrICAgIHZvaWQgcHJlSW5jcmVtZW50TWF0cml4KCk7CisrICAgIHZvaWQgcG9z
dERlY3JlbWVudE1hdHJpeCgpOworKyAgICB2b2lkIHByZURlY3JlbWVudE1hdHJpeCgpOworKyAg
ICB2b2lkIG5lZ2F0ZU1hdHJpeCgpOworKyAgICB2b2lkIG1hdG11bEFzc2lnbigpOworKyAgICB2
b2lkIGF0YW4oKTsKKysgICAgdm9pZCBhZGRNYXRyaXhTY2FsYXJBc3NpZ24oKTsKKysgICAgdm9p
ZCBzdWJNYXRyaXhTY2FsYXJBc3NpZ24oKTsKKysgICAgdm9pZCBhZGRNYXRyaXhTY2FsYXIoKTsK
KysgICAgdm9pZCBzdWJNYXRyaXhTY2FsYXIoKTsKKysgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXIo
KTsKKysgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXJGYXN0KCk7CisrICAgIHZvaWQgZGl2TWF0cml4
U2NhbGFyQXNzaWduKCk7CisrICAgIHZvaWQgZGl2TWF0cml4U2NhbGFyQXNzaWduRmFzdCgpOwor
KyAgICB2b2lkIHRlbnNvcigpOworKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGUoKTsKKysg
ICAgdm9pZCBjb21wb25lbnRXaXNlRGl2aWRlQXNzaWduKCk7CisrICAgIHZvaWQgY29tcG9uZW50
V2lzZU11bHRpcGx5KCk7CisrICAgIHZvaWQgb3V0ZXJQcm9kdWN0KCk7CisrICAgIHZvaWQgaW52
ZXJzZTIoKTsKKysgICAgdm9pZCBpbnZlcnNlMygpOworKyAgICB2b2lkIGludmVyc2U0KCk7Cisr
ICAgIHZvaWQgZXF1YWxWZWN0b3IoKTsKKysgICAgdm9pZCBlcXVhbE1hdHJpeCgpOworKyAgICB2
b2lkIG5vdEVxdWFsVmVjdG9yKCk7CisrICAgIHZvaWQgbm90RXF1YWxTdHJ1Y3QoKTsKKysgICAg
dm9pZCBlcXVhbEFycmF5KCk7CisrICAgIHZvaWQgbm90RXF1YWxBcnJheSgpOworKyAgICB2b2lk
IHNpZ24oKTsKKysgICAgdm9pZCBwYWNrX2hhbGZfMngxNigpOworKyAgICB2b2lkIHVucGFja19o
YWxmXzJ4MTYoKTsKKysgICAgdm9pZCB2ZWN0b3JFbGVtUmVmKCk7CisrICAgIHZvaWQgc3dpenps
ZVJlZigpOworKyAgICB2b2lkIG91dCgpOworKyAgICB2b2lkIGlub3V0KCk7CisrICAgIHZvaWQg
ZmxhdHRlbkFycmF5KCk7CisrICAgIHZvaWQgY2FzdFZlY3RvcigpOworKyAgICB2b2lkIGNhc3RN
YXRyaXgoKTsKKysgICAgdm9pZCBmdW5jdGlvbkNvbnN0YW50cygpOworKyAgICB2b2lkIGdyYWRp
ZW50KCk7CisrICAgIHZvaWQgdGV4dHVyZUVudigpOworKyAgICB2b2lkIHRleGVsRmV0Y2goKTsK
KysgICAgdm9pZCB0ZXhlbEZldGNoT2Zmc2V0KCk7CisrICAgIHZvaWQgdGV4dHVyZSgpOworKyAg
ICB2b2lkIHRleHR1cmVfZ2VuZXJpY19mbG9hdDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlX2dlbmVy
aWNfZmxvYXQyX2Zsb2F0KCk7CisrICAgIHZvaWQgdGV4dHVyZV9nZW5lcmljX2Zsb2F0MygpOwor
KyAgICB2b2lkIHRleHR1cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQoKTsKKysgICAgdm9pZCB0ZXh0
dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisrICAgIHZvaWQgdGV4dHVyZV9kZXB0aDJkX2Zsb2F0M19m
bG9hdCgpOworKyAgICB2b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCgpOworKyAgICB2
b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdCgpOworKyAgICB2b2lkIHRleHR1
cmVfZGVwdGhjdWJlX2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0
NF9mbG9hdCgpOworKyAgICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQzKCk7Cisr
ICAgIHZvaWQgdGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDNfZmxvYXQoKTsKKysgICAgdm9p
ZCB0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVfdGV4
dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisrICAgIHZvaWQgdGV4dHVyZTFETG9kKCk7Cisr
ICAgIHZvaWQgdGV4dHVyZTFEUHJvaigpOworKyAgICB2b2lkIHRleHR1cmUxRFByb2pMb2QoKTsK
KysgICAgdm9pZCB0ZXh0dXJlMkQoKTsKKysgICAgdm9pZCB0ZXh0dXJlMkRMb2QoKTsKKysgICAg
dm9pZCB0ZXh0dXJlMkRQcm9qKCk7CisrICAgIHZvaWQgdGV4dHVyZTJEUHJvakxvZCgpOworKyAg
ICB2b2lkIHRleHR1cmUzRExvZCgpOworKyAgICB2b2lkIHRleHR1cmUzRFByb2ooKTsKKysgICAg
dm9pZCB0ZXh0dXJlM0RQcm9qTG9kKCk7CisrICAgIHZvaWQgdGV4dHVyZUN1YmUoKTsKKysgICAg
dm9pZCB0ZXh0dXJlQ3ViZUxvZCgpOworKyAgICB2b2lkIHRleHR1cmVDdWJlUHJvaigpOworKyAg
ICB2b2lkIHRleHR1cmVDdWJlUHJvakxvZCgpOworKyAgICB2b2lkIHRleHR1cmVHcmFkKCk7Cisr
ICAgIHZvaWQgdGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TigpOworKyAg
ICB2b2lkIHRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIoKTsKKysgICAg
dm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisrICAgIHZv
aWQgdGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zsb2F0MigpOworKyAgICB2b2lk
IHRleHR1cmVHcmFkX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICB2
b2lkIHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MygpOworKyAgICB2
b2lkIHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxvYXQzKCk7CisrICAg
IHZvaWQgdGV4dHVyZUdyYWRPZmZzZXQoKTsKKysgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9n
ZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKysgICAgdm9pZCB0ZXh0dXJlR3Jh
ZE9mZnNldF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgdm9pZCB0
ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysg
ICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zs
b2F0Ml9mbG9hdDJfaW50MigpOworKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoY3Vi
ZV9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZz
ZXRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MygpOworKyAgICB2b2lkIHRl
eHR1cmVMb2QoKTsKKysgICAgdm9pZCB0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQyKCk7CisrICAg
IHZvaWQgdGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MygpOworKyAgICB2b2lkIHRleHR1cmVMb2Rf
ZGVwdGgyZF9mbG9hdDMoKTsKKysgICAgdm9pZCB0ZXh0dXJlTG9kX3RleHR1cmUyZGFycmF5X2Zs
b2F0MygpOworKyAgICB2b2lkIHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7Cisr
ICAgIHZvaWQgdGV4dHVyZUxvZE9mZnNldCgpOworKyAgICB2b2lkIHRleHR1cmVPZmZzZXQoKTsK
KysgICAgdm9pZCB0ZXh0dXJlUHJvaigpOworKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZCgpOwor
KyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7
CisrICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIo
KTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0
MigpOworKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0M19m
bG9hdDMoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQoKTsKKysgICAgdm9pZCB0
ZXh0dXJlUHJvakdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7
CisrICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakdyYWRPZmZz
ZXRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNfZmxvYXQzX2ludDMoKTsKKysgICAgdm9pZCB0ZXh0
dXJlUHJvakxvZCgpOworKyAgICB2b2lkIHRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzKCk7
CisrICAgIHZvaWQgdGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKysgICAgdm9pZCB0
ZXh0dXJlUHJvakxvZF9kZXB0aDJkX2Zsb2F0NCgpOworKyAgICB2b2lkIHRleHR1cmVQcm9qTG9k
X3RleHR1cmUzZF9mbG9hdDQoKTsKKysgICAgdm9pZCB0ZXh0dXJlUHJvakxvZE9mZnNldCgpOwor
KyAgICB2b2lkIHRleHR1cmVQcm9qT2Zmc2V0KCk7CisrICAgIHZvaWQgdGV4dHVyZVNpemUoKTsK
KysKKysgIHByaXZhdGU6CisrICAgIFRJbmZvU2lua0Jhc2UgJm1PdXQ7CisrICAgIHN0ZDo6dW5v
cmRlcmVkX3NldDxMaW5lVGFnPiBtRW1pdHRlZDsKKysgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNv
bnN0IFRTeW1ib2wgKj4gbUhhbmRsZWQ7CisrICAgIGNvbnN0IEZ1bmNUb0VtaXR0ZXIgbUZ1bmNU
b0VtaXR0ZXIgPSBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKyt9OworKworK30gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworKyNkZWZpbmUgUFJP
R1JBTV9QUkVMVURFX0lOQ0xVREUoaGVhZGVyKSAgICAgICAgICAgICBcCisrICAgIHZvaWQgUHJv
Z3JhbVByZWx1ZGU6OmluY2x1ZGVfIyNoZWFkZXIoKSAgICAgICAgIFwKKysgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKGVt
aXRHdWFyZChfX0xJTkVfXykpICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBtT3V0
IDw8ICgiI2luY2x1ZGUgPCIgI2hlYWRlciAiPlxuXG4iKTsgXAorKyAgICAgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIH0KKysKKysjZGVmaW5l
IFBST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5hbWUsIGNvZGUsIC4uLikgICAgICAgICAgICAgICAg
XAorKyAgICB2b2lkIFByb2dyYW1QcmVsdWRlOjpuYW1lKCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIEFTU0VSVChjb2RlWzBdID09ICdcbicp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgaWYgKGVtaXRHdWFy
ZChfX0xJTkVfXykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KysgICAgICAgICAgICBfX1ZBX0FSR1NfXzsgLyogZGVwZW5kZW5jaWVzICovICAgICAgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgICAgIG1PdXQgPDwgKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIg
Kj4oY29kZSAiXG4iKSArIDEpOyBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfQorKworKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisrCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfYXRvbWljKQor
K1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2NvbW1vbikKKytQUk9HUkFNX1BSRUxVREVf
SU5DTFVERShtZXRhbF9nZW9tZXRyaWMpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxf
Z3JhcGhpY3MpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfbWF0aCkKKytQUk9HUkFN
X1BSRUxVREVfSU5DTFVERShtZXRhbF9tYXRyaXgpCisrUFJPR1JBTV9QUkVMVURFX0lOQ0xVREUo
bWV0YWxfcGFjaykKKytQUk9HUkFNX1BSRUxVREVfSU5DTFVERShtZXRhbF9yZWxhdGlvbmFsKQor
KworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
QUxXQVlTX0lOTElORSwgUiIoCisrI2RlZmluZSBBTkdMRV9BTFdBWVNfSU5MSU5FIF9fYXR0cmli
dXRlX18oKGFsd2F5c19pbmxpbmUpKQorKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KGVuYWJsZV9pZiwgUiIoCisrdGVtcGxhdGUgPGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+Cisr
c3RydWN0IEFOR0xFX2VuYWJsZV9pZiB7fTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1
Y3QgQU5HTEVfZW5hYmxlX2lmPHRydWUsIFQ+CisreworKyAgICB1c2luZyB0eXBlID0gVDsKKyt9
OworK3RlbXBsYXRlIDxib29sIEI+CisrdXNpbmcgQU5HTEVfZW5hYmxlX2lmX3QgPSB0eXBlbmFt
ZSBBTkdMRV9lbmFibGVfaWY8Qj46OnR5cGU7CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoc2NhbGFyX29mLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5H
TEVfc2NhbGFyX29mCisreworKyAgICB1c2luZyB0eXBlID0gVDsKKyt9OworK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorK3VzaW5nIEFOR0xFX3NjYWxhcl9vZl90ID0gdHlwZW5hbWUgQU5HTEVfc2Nh
bGFyX29mPFQ+Ojp0eXBlOworKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX3Nj
YWxhciwgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2lzX3NjYWxh
ciB7fTsKKysjZGVmaW5lIEFOR0xFX0RFRklORV9TQ0FMQVIoc2NhbGFyKSBcCisrICAgIHRlbXBs
YXRlIDw+IHN0cnVjdCBBTkdMRV9pc19zY2FsYXI8c2NhbGFyPiB7IGVudW0geyB2YWx1ZSA9IHRy
dWUgfTsgfQorK0FOR0xFX0RFRklORV9TQ0FMQVIoYm9vbCk7CisrQU5HTEVfREVGSU5FX1NDQUxB
UihjaGFyKTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKHNob3J0KTsKKytBTkdMRV9ERUZJTkVfU0NB
TEFSKGludCk7CisrQU5HTEVfREVGSU5FX1NDQUxBUihsb25nKTsKKytBTkdMRV9ERUZJTkVfU0NB
TEFSKHVjaGFyKTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKHVzaG9ydCk7CisrQU5HTEVfREVGSU5F
X1NDQUxBUih1aW50KTsKKytBTkdMRV9ERUZJTkVfU0NBTEFSKHVsb25nKTsKKytBTkdMRV9ERUZJ
TkVfU0NBTEFSKGhhbGYpOworK0FOR0xFX0RFRklORV9TQ0FMQVIoZmxvYXQpOworKykiKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX3ZlY3RvciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9y
CisreworKyAgICBlbnVtIHsgdmFsdWUgPSBmYWxzZSB9OworK307CisrI2RlZmluZSBBTkdMRV9E
RUZJTkVfVkVDVE9SKHNjYWxhcikgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNf
dmVjdG9yPG1ldGFsOjpzY2FsYXIgIyMgMj4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwK
KysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFyICMj
IDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVj
dCBBTkdMRV9pc192ZWN0b3I8bWV0YWw6OnNjYWxhciAjIyA0PiB7IGVudW0geyB2YWx1ZSA9IHRy
dWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFs
OjpzY2FsYXIgIyMgMj4geyB1c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRl
IDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzPiB7IHVzaW5nIHR5
cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9v
ZjxtZXRhbDo6c2NhbGFyICMjIDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfQorK0FOR0xFX0RF
RklORV9WRUNUT1IoYm9vbCk7CisrQU5HTEVfREVGSU5FX1ZFQ1RPUihjaGFyKTsKKytBTkdMRV9E
RUZJTkVfVkVDVE9SKHNob3J0KTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKGludCk7CisrQU5HTEVf
REVGSU5FX1ZFQ1RPUihsb25nKTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKHVjaGFyKTsKKytBTkdM
RV9ERUZJTkVfVkVDVE9SKHVzaG9ydCk7CisrQU5HTEVfREVGSU5FX1ZFQ1RPUih1aW50KTsKKytB
TkdMRV9ERUZJTkVfVkVDVE9SKHVsb25nKTsKKytBTkdMRV9ERUZJTkVfVkVDVE9SKGhhbGYpOwor
K0FOR0xFX0RFRklORV9WRUNUT1IoZmxvYXQpOworKykiLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNjYWxhcl9vZigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGlzX21hdHJpeCwK
KysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytz
dHJ1Y3QgQU5HTEVfaXNfbWF0cml4CisreworKyAgICBlbnVtIHsgdmFsdWUgPSBmYWxzZSB9Owor
K307CisrI2RlZmluZSBBTkdMRV9ERUZJTkVfTUFUUklYKHNjYWxhcikgXAorKyAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IGVudW0g
eyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNf
bWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgMngzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsg
XAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIg
IyMgMng0PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7IGVudW0geyB2YWx1
ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4
PG1ldGFsOjpzY2FsYXIgIyMgM3gzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3g0
PiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
QU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHgyPiB7IGVudW0geyB2YWx1ZSA9IHRy
dWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFs
OjpzY2FsYXIgIyMgNHgzPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHg0PiB7IGVu
dW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVf
c2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07
IFwKKysgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFy
ICMjIDJ4Mz4geyB1c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAyeDQ+IHsgdXNpbmcgdHlwZSA9
IHNjYWxhcjsgfTsgXAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1l
dGFsOjpzY2FsYXIgIyMgM3gyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVt
cGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDN4Mz4geyB1
c2luZyB0eXBlID0gc2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9z
Y2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzeDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsg
XAorKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIg
IyMgNHgyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKysgICAgdGVtcGxhdGUgPD4gc3Ry
dWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDR4Mz4geyB1c2luZyB0eXBlID0g
c2NhbGFyOyB9OyBcCisrICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9zY2FsYXJfb2Y8bWV0
YWw6OnNjYWxhciAjIyA0eDQ+IHsgdXNpbmcgdHlwZSA9IHNjYWxhcjsgfQorK0FOR0xFX0RFRklO
RV9NQVRSSVgoaGFsZik7CisrQU5HTEVfREVGSU5FX01BVFJJWChmbG9hdCk7CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgc2NhbGFyX29mKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoYWRkcmVzc29mLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIFQgKiBBTkdMRV9hZGRy
ZXNzb2YodGhyZWFkIFQgJnJlZikKKyt7CisrICAgIHJldHVybiAmcmVmOworK30KKyspIikKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkaXN0YW5jZSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4K
KytzdHJ1Y3QgQU5HTEVfZGlzdGFuY2VfaW1wbAorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZ
U19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gZXhlYyhUIHgsIFQgeSkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIG1ldGFsOjpkaXN0YW5jZSh4LCB5KTsKKysgICAgfQorK307CisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2Rpc3RhbmNlX2ltcGw8VCwgQU5HTEVfZW5h
YmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5H
TEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBtZXRhbDo6YWJzKHggLSB5KTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CisrQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBBTkdMRV9kaXN0YW5j
ZShUIHgsIFQgeSkKKyt7CisrICAgIHJldHVybiBBTkdMRV9kaXN0YW5jZV9pbXBsPFQ+OjpleGVj
KHgsIHkpOworK307CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRh
bF9nZW9tZXRyaWMoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21h
dGgoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBpc19zY2FsYXIoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpc192
ZWN0b3IoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKysKKytQUk9H
UkFNX1BSRUxVREVfREVDTEFSRShsZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cisrc3RydWN0
IEFOR0xFX2xlbmd0aF9pbXBsCisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBB
TkdMRV9zY2FsYXJfb2ZfdDxUPiBleGVjKFQgeCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1l
dGFsOjpsZW5ndGgoeCk7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0
cnVjdCBBTkdMRV9sZW5ndGhfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2Fs
YXI8VD46OnZhbHVlPj4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhl
YyhUIHgpCisrICAgIHsKKysgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHgpOworKyAgICB9Cisr
fTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3Nj
YWxhcl9vZl90PFQ+IEFOR0xFX2xlbmd0aChUIHgpCisreworKyAgICByZXR1cm4gQU5HTEVfbGVu
Z3RoX2ltcGw8VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0aCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxhcigpLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJp
eCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRvdCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9p
ZD4KKytzdHJ1Y3QgQU5HTEVfZG90X2ltcGwKKyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNf
SU5MSU5FIEFOR0xFX3NjYWxhcl9vZl90PFQ+IGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAg
ICAgIHJldHVybiBtZXRhbDo6ZG90KHgsIHkpOworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfZG90X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5H
TEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lO
TElORSBUIGV4ZWMoVCB4LCBUIHkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB4ICogeTsKKysg
ICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBB
TkdMRV9zY2FsYXJfb2ZfdDxUPiBBTkdMRV9kb3QoVCB4LCBUIHkpCisreworKyAgICByZXR1cm4g
QU5HTEVfZG90X2ltcGw8VD46OmV4ZWMoeCwgeSk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NjYWxhcigp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzX21hdHJpeCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vcm1h
bGl6ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGwK
Kyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisrICAgIHsK
KysgICAgICAgIHJldHVybiBtZXRhbDo6bm9ybWFsaXplKHgpOworKyAgICB9CisrfTsKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGw8VCwgQU5HTEVf
ZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMg
QU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4KQorKyAgICB7CisrICAgICAgICByZXR1cm4g
QU5HTEVfc2lnbih4KTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX25vcm1hbGl6ZShUIHgpCisreworKyAgICByZXR1cm4g
QU5HTEVfbm9ybWFsaXplX2ltcGw8VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2NvbW1vbigpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgZW5hYmxlX2lmKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisr
ICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisrICAgICAgICAgICAgICAgICAg
ICAgICAgaXNfbWF0cml4KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgc2lnbigpKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZhY2Vmb3J3YXJkLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lk
PgorK3N0cnVjdCBBTkdMRV9mYWNlZm9yd2FyZF9pbXBsCisreworKyAgICBzdGF0aWMgQU5HTEVf
QUxXQVlTX0lOTElORSBUIGV4ZWMoVCBuLCBUIGksIFQgbnJlZikKKysgICAgeworKyAgICAgICAg
cmV0dXJuIG1ldGFsOjpmYWNlZm9yd2FyZChuLCBpLCBucmVmKTsKKysgICAgfQorK307CisrdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2ZhY2Vmb3J3YXJkX2ltcGw8VCwgQU5H
TEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0
aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBuLCBUIGksIFQgbnJlZikKKysgICAgewor
KyAgICAgICAgcmV0dXJuIEFOR0xFX2RvdChucmVmLCBpKSA8IFQoMCkgPyBuIDogLW47CisrICAg
IH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBB
TkdMRV9mYWNlZm9yd2FyZChUIG4sIFQgaSwgVCBucmVmKQorK3sKKysgICAgcmV0dXJuIEFOR0xF
X2ZhY2Vmb3J3YXJkX2ltcGw8VD46OmV4ZWMobiwgaSwgbnJlZik7CisrfTsKKyspIiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlz
X3NjYWxhcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IGRvdCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHJlZmxlY3QsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJs
ZSA9IHZvaWQ+Cisrc3RydWN0IEFOR0xFX3JlZmxlY3RfaW1wbAorK3sKKysgICAgc3RhdGljIEFO
R0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgaSwgVCBuKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gbWV0YWw6OnJlZmxlY3QoaSwgbik7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorK3N0cnVjdCBBTkdMRV9yZWZsZWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5H
TEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lO
TElORSBUIGV4ZWMoVCBpLCBUIG4pCisrICAgIHsKKysgICAgICAgIHJldHVybiBpIC0gVCgyKSAq
IEFOR0xFX2RvdChuLCBpKSAqIG47CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9yZWZsZWN0KFQgaSwgVCBuKQorK3sKKysg
ICAgcmV0dXJuIEFOR0xFX3JlZmxlY3RfaW1wbDxUPjo6ZXhlYyhpLCBuKTsKKyt9OworKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgaXNfc2NhbGFyKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisr
ICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisrICAgICAgICAgICAgICAgICAg
ICAgICAgZG90KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmVmcmFjdCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfcmVmcmFjdF9pbXBsCisreworKyAgICBzdGF0
aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBpLCBUIG4sIEFOR0xFX3NjYWxhcl9vZl90
PFQ+IGV0YSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1ldGFsOjpyZWZyYWN0KGksIG4sIGV0
YSk7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0cnVjdCBBTkdMRV9y
ZWZyYWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1
ZT4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCBpLCBUIG4s
IFQgZXRhKQorKyAgICB7CisrICAgICAgICBhdXRvIGRvdE5JID0gbiAqIGk7CisrICAgICAgICBh
dXRvIGsgPSBUKDEpIC0gZXRhICogZXRhICogKFQoMSkgLSBkb3ROSSAqIGRvdE5JKTsKKysgICAg
ICAgIGlmIChrIDwgVCgwKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gVCgwKTsK
KysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gZXRhICogaSAtIChldGEgKiBkb3ROSSArIG1ldGFsOjpzcXJ0KGspKSAqIG47CisrICAgICAg
ICB9CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgVCBBTkdMRV9yZWZyYWN0KFQgaSwgVCBuLCBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBldGEp
CisreworKyAgICByZXR1cm4gQU5HTEVfcmVmcmFjdF9pbXBsPFQ+OjpleGVjKGksIG4sIGV0YSk7
CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigpLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlzX3NjYWxhcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3Rvcigp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgpKQorKworK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHNpZ24sCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+Cisrc3RydWN0IEFOR0xFX3Np
Z25faW1wbAorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCkK
KysgICAgeworKyAgICAgICAgcmV0dXJuIG1ldGFsOjpzaWduKHgpOworKyAgICB9CisrfTsKKyt0
ZW1wbGF0ZSA8PgorK3N0cnVjdCBBTkdMRV9zaWduX2ltcGw8aW50PgorK3sKKysgICAgc3RhdGlj
IEFOR0xFX0FMV0FZU19JTkxJTkUgaW50IGV4ZWMoaW50IHgpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiAoMCA8IHgpIC0gKHggPCAwKTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPGludCBOPgor
K3N0cnVjdCBBTkdMRV9zaWduX2ltcGw8bWV0YWw6OnZlYzxpbnQsIE4+PgorK3sKKysgICAgc3Rh
dGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxpbnQsIE4+IGV4ZWMobWV0YWw6OnZl
YzxpbnQsIE4+IHgpCisrICAgIHsKKysgICAgICAgIG1ldGFsOjp2ZWM8aW50LCBOPiBzOworKyAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgc1tpXSA9IEFOR0xFX3NpZ25faW1wbDxpbnQ+OjpleGVjKHhbaV0pOworKyAgICAgICAgfQor
KyAgICAgICAgcmV0dXJuIHM7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
K0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9zaWduKFQgeCkKKyt7CisrICAgIHJldHVybiBB
TkdMRV9zaWduX2ltcGw8VD46OmV4ZWMoeCk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX2NvbW1vbigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKGF0YW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5T3ZlclgpCisrewor
KyAgICByZXR1cm4gbWV0YWw6OmF0YW4oeU92ZXJYKTsKKyt9CisrdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5LCBUIHgpCisreworKyAg
ICByZXR1cm4gbWV0YWw6OmF0YW4yKHksIHgpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RShkZWdyZWVzLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5M
SU5FIFQgQU5HTEVfZGVncmVlcyhUIHgpCisreworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
NTcuMjk1Nzc5NTEzMDgyMzIpICogeDsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUocmFkaWFucywgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBUIEFOR0xFX3JhZGlhbnMoVCB4KQorK3sKKysgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KDEuNzQ1MzI5MjUxOTk0MzI5NWUtMikgKiB4OworK30KKyspIikKKysKKytQUk9HUkFNX1BS
RUxVREVfREVDTEFSRShtb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CisrQU5HTEVfQUxXQVlTX0lOTElORSBYIEFOR0xF
X21vZChYIHgsIFkgeSkKKyt7CisrICAgIHJldHVybiB4IC0geSAqIG1ldGFsOjpmbG9vcih4IC8g
eSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfbWF0
aCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHBhY2tfaGFsZl8yeDE2LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorK0FOR0xFX0FMV0FZU19JTkxJTkUgdWludCBBTkdMRV9w
YWNrX2hhbGZfMngxNihmbG9hdDIgdikKKyt7CisrICAgIHJldHVybiBhc190eXBlPHVpbnQ+KGhh
bGYyKHYpKTsKKyt9CisrKSIsICkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh1bnBhY2tf
aGFsZl8yeDE2LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK0FOR0xFX0FMV0FZU19J
TkxJTkUgZmxvYXQyIEFOR0xFX3VucGFja19oYWxmXzJ4MTYodWludCB4KQorK3sKKysgICAgcmV0
dXJuIGZsb2F0Mihhc190eXBlPGhhbGYyPih4KSk7CisrfQorKykiLCApCisrCisrUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUobWF0bXVsQXNzaWduLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
aW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBOLCBO
PiAmb3BlcmF0b3IqPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBOLCBOPiAmYSwgbWV0YWw6Om1h
dHJpeDxULCBOLCBOPiBiKQorK3sKKysgICAgYSA9IGEgKiBiOworKyAgICByZXR1cm4gYTsKKyt9
CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdEluY3JlbWVudE1hdHJpeCwK
KysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50
IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBD
b2xzLCBSb3dzPiBvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
ICZhLCBpbnQpCisreworKyAgICBhdXRvIGIgPSBhOworKyAgICBhICs9IFQoMSk7CisrICAgIHJl
dHVybiBiOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXRyaXhTY2Fs
YXJBc3NpZ24oKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVJbmNyZW1lbnRNYXRy
aXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGludCBDb2xzLCBpbnQgUm93cz4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6
bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQs
IENvbHMsIFJvd3M+ICZhKQorK3sKKysgICAgYSArPSBUKDEpOworKyAgICByZXR1cm4gYTsKKyt9
CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWF0cml4U2NhbGFyQXNzaWduKCkp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdERlY3JlbWVudE1hdHJpeCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMs
IGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBS
b3dzPiBvcGVyYXRvci0tKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBp
bnQpCisreworKyAgICBhdXRvIGIgPSBhOworKyAgICBhIC09IFQoMSk7CisrICAgIHJldHVybiBi
OworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBzdWJNYXRyaXhTY2FsYXJBc3Np
Z24oKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVEZWNyZW1lbnRNYXRyaXgsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBD
b2xzLCBpbnQgUm93cz4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4
PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvci0tKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+ICZhKQorK3sKKysgICAgYSAtPSBUKDEpOworKyAgICByZXR1cm4gYTsKKyt9CisrKSIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgc3ViTWF0cml4U2NhbGFyQXNzaWduKCkpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobmVnYXRlTWF0cml4LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9y
LShtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG0pCisreworKyAgICBmb3IgKHNpemVfdCBj
b2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKysgICAgeworKyAgICAgICAgdGhyZWFkIGF1dG8g
Jm1Db2wgPSBtW2NvbF07CisrICAgICAgICBtQ29sID0gLW1Db2w7CisrICAgIH0KKysgICAgcmV0
dXJuIG07CisrfQorKykiLCApCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4
U2NhbGFyQXNzaWduLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBS
b3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywg
Um93cz4gJm9wZXJhdG9yKz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0s
IFQgeCkKKyt7CisrICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQor
KyAgICB7CisrICAgICAgICBtW2NvbF0gKz0geDsKKysgICAgfQorKyAgICByZXR1cm4gbTsKKyt9
CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29s
cywgaW50IFJvd3M+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMs
IFJvd3M+IG9wZXJhdG9yKyhtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG0sIFQgeCkKKyt7
CisrICAgIG0gKz0geDsKKysgICAgcmV0dXJuIG07CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2lnbigpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHN1Yk1hdHJpeFNjYWxhckFzc2lnbiwKKysgICAgICAgICAgICAgICAgICAgICAgICBS
IigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9y
LT0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAg
IGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorKyAgICB7CisrICAgICAg
ICBtW2NvbF0gLT0geDsKKysgICAgfQorKyAgICByZXR1cm4gbTsKKyt9CisrKSIsICkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4K
KytBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0
b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSwgVCB4KQorK3sKKysgICAgbSAtPSB4
OworKyAgICByZXR1cm4gbTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgc3Vi
TWF0cml4U2NhbGFyQXNzaWduKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0
cml4U2NhbGFyQXNzaWduRmFzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFk
IG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAgIHggPSBUKDEp
IC8geDsKKysgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisrICAg
IHsKKysgICAgICAgIG1bY29sXSAqPSB4OworKyAgICB9CisrICAgIHJldHVybiBtOworK30KKysp
IiwgKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRpdk1hdHJpeFNjYWxhckFzc2lnbiwK
KysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50
IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRy
aXg8VCwgQ29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29s
cywgUm93cz4gJm0sIFQgeCkKKyt7CisrICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENv
bHM7ICsrY29sKQorKyAgICB7CisrICAgICAgICBtW2NvbF0gLz0geDsKKysgICAgfQorKyAgICBy
ZXR1cm4gbTsKKyt9CisrKSIsICkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkaXZNYXRy
aXhTY2FsYXJGYXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNpZiBfX01FVEFM
X1ZFUlNJT05fXyA8PSAyMjAKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBS
b3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBv
cGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBtLCBUIHgpCisreworKyAgICBt
IC89IHg7CisrICAgIHJldHVybiBtOworK30KKysjZW5kaWYKKyspIiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBkaXZNYXRyaXhTY2FsYXJBc3NpZ25GYXN0KCkpCisrCisrUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorKyNpZiBfX01FVEFMX1ZFUlNJT05fXyA8PSAyMjAKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
aW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBtLCBU
IHgpCisreworKyAgICBtIC89IHg7CisrICAgIHJldHVybiBtOworK30KKysjZW5kaWYKKyspIiwK
KysgICAgICAgICAgICAgICAgICAgICAgICBkaXZNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlRGl2aWRlLCBSIigKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUg
bWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBD
b2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGIpCisreworKyAgICBm
b3IgKHNpemVfdCBjb2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKysgICAgeworKyAgICAgICAg
YVtjb2xdIC89IGJbY29sXTsKKysgICAgfQorKyAgICByZXR1cm4gYTsKKyt9CisrKSIpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMs
IGludCBSb3dzPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwg
Q29scywgUm93cz4gJm9wZXJhdG9yLz0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93
cz4gJmEsIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gYikKKyt7CisrICAgIGEgPSBhIC8g
YjsKKysgICAgcmV0dXJuIGE7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBvbmVudFdpc2VEaXZpZGUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25l
bnRXaXNlTXVsdGlwbHksIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50
IFJvd3M+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
IEFOR0xFX2NvbXBvbmVudFdpc2VNdWx0aXBseShtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
IGEsIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gYikKKyt7CisrICAgIGZvciAoc2l6ZV90
IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorKyAgICB7CisrICAgICAgICBhW2NvbF0gKj0g
Yltjb2xdOworKyAgICB9CisrICAgIHJldHVybiBhOworK30KKyspIikKKysKKytQUk9HUkFNX1BS
RUxVREVfREVDTEFSRShvdXRlclByb2R1Y3QsIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBp
bnQgTSwgaW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIE4sIE0+
IEFOR0xFX291dGVyUHJvZHVjdChtZXRhbDo6dmVjPFQsIE0+IHUsIG1ldGFsOjp2ZWM8VCwgTj4g
dikKKyt7CisrICAgIG1ldGFsOjptYXRyaXg8VCwgTiwgTT4gbzsKKysgICAgZm9yIChzaXplX3Qg
biA9IDA7IG4gPCBOOyArK24pCisrICAgIHsKKysgICAgICAgIG9bbl0gPSB1ICogdltuXTsKKysg
ICAgfQorKyAgICByZXR1cm4gbzsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUoaW52ZXJzZTIsIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgbWV0YWw6Om1hdHJpeDxULCAyLCAyPiBBTkdMRV9pbnZlcnNlKG1ldGFsOjptYXRyaXg8
VCwgMiwgMj4gbSkKKyt7CisrICAgIG1ldGFsOjptYXRyaXg8VCwgMiwgMj4gYWRqOworKyAgICBh
ZGpbMF1bMF0gPSAgbVsxXVsxXTsKKysgICAgYWRqWzBdWzFdID0gLW1bMF1bMV07CisrICAgIGFk
alsxXVswXSA9IC1tWzFdWzBdOworKyAgICBhZGpbMV1bMV0gPSAgbVswXVswXTsKKysgICAgVCBk
ZXQgPSAoYWRqWzBdWzBdICogbVswXVswXSkgKyAoYWRqWzBdWzFdICogbVsxXVswXSk7CisrICAg
IHJldHVybiBhZGogKiAoVCgxKSAvIGRldCk7CisrfQorKykiKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKGludmVyc2UzLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gQU5HTEVfaW52ZXJzZShtZXRhbDo6
bWF0cml4PFQsIDMsIDM+IG0pCisreworKyAgICBUIGEgPSBtWzFdWzFdICogbVsyXVsyXSAtIG1b
Ml1bMV0gKiBtWzFdWzJdOworKyAgICBUIGIgPSBtWzFdWzBdICogbVsyXVsyXTsKKysgICAgVCBj
ID0gbVsxXVsyXSAqIG1bMl1bMF07CisrICAgIFQgZCA9IG1bMV1bMF0gKiBtWzJdWzFdOworKyAg
ICBUIGRldCA9IG1bMF1bMF0gKiAoYSkgLQorKyAgICAgICAgICAgIG1bMF1bMV0gKiAoYiAtIGMp
ICsKKysgICAgICAgICAgICBtWzBdWzJdICogKGQgLSBtWzFdWzFdICogbVsyXVswXSk7CisrICAg
IGRldCA9IFQoMSkgLyBkZXQ7CisrICAgIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gbWludjsKKysg
ICAgbWludlswXVswXSA9IChhKSAqIGRldDsKKysgICAgbWludlswXVsxXSA9IChtWzBdWzJdICog
bVsyXVsxXSAtIG1bMF1bMV0gKiBtWzJdWzJdKSAqIGRldDsKKysgICAgbWludlswXVsyXSA9ICht
WzBdWzFdICogbVsxXVsyXSAtIG1bMF1bMl0gKiBtWzFdWzFdKSAqIGRldDsKKysgICAgbWludlsx
XVswXSA9IChjIC0gYikgKiBkZXQ7CisrICAgIG1pbnZbMV1bMV0gPSAobVswXVswXSAqIG1bMl1b
Ml0gLSBtWzBdWzJdICogbVsyXVswXSkgKiBkZXQ7CisrICAgIG1pbnZbMV1bMl0gPSAobVsxXVsw
XSAqIG1bMF1bMl0gLSBtWzBdWzBdICogbVsxXVsyXSkgKiBkZXQ7CisrICAgIG1pbnZbMl1bMF0g
PSAoZCAtIG1bMl1bMF0gKiBtWzFdWzFdKSAqIGRldDsKKysgICAgbWludlsyXVsxXSA9IChtWzJd
WzBdICogbVswXVsxXSAtIG1bMF1bMF0gKiBtWzJdWzFdKSAqIGRldDsKKysgICAgbWludlsyXVsy
XSA9IChtWzBdWzBdICogbVsxXVsxXSAtIG1bMV1bMF0gKiBtWzBdWzFdKSAqIGRldDsKKysgICAg
cmV0dXJuIG1pbnY7CisrfQorKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGludmVy
c2U0LCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjptYXRyaXg8VCwgNCwgND4gQU5HTEVfaW52ZXJzZShtZXRhbDo6bWF0cml4PFQsIDQsIDQ+
IG0pCisreworKyAgICBUIEEyMzIzID0gbVsyXVsyXSAqIG1bM11bM10gLSBtWzJdWzNdICogbVsz
XVsyXTsKKysgICAgVCBBMTMyMyA9IG1bMl1bMV0gKiBtWzNdWzNdIC0gbVsyXVszXSAqIG1bM11b
MV07CisrICAgIFQgQTEyMjMgPSBtWzJdWzFdICogbVszXVsyXSAtIG1bMl1bMl0gKiBtWzNdWzFd
OworKyAgICBUIEEwMzIzID0gbVsyXVswXSAqIG1bM11bM10gLSBtWzJdWzNdICogbVszXVswXTsK
KysgICAgVCBBMDIyMyA9IG1bMl1bMF0gKiBtWzNdWzJdIC0gbVsyXVsyXSAqIG1bM11bMF07Cisr
ICAgIFQgQTAxMjMgPSBtWzJdWzBdICogbVszXVsxXSAtIG1bMl1bMV0gKiBtWzNdWzBdOworKyAg
ICBUIEEyMzEzID0gbVsxXVsyXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVsyXTsKKysgICAg
VCBBMTMxMyA9IG1bMV1bMV0gKiBtWzNdWzNdIC0gbVsxXVszXSAqIG1bM11bMV07CisrICAgIFQg
QTEyMTMgPSBtWzFdWzFdICogbVszXVsyXSAtIG1bMV1bMl0gKiBtWzNdWzFdOworKyAgICBUIEEy
MzEyID0gbVsxXVsyXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsyXTsKKysgICAgVCBBMTMx
MiA9IG1bMV1bMV0gKiBtWzJdWzNdIC0gbVsxXVszXSAqIG1bMl1bMV07CisrICAgIFQgQTEyMTIg
PSBtWzFdWzFdICogbVsyXVsyXSAtIG1bMV1bMl0gKiBtWzJdWzFdOworKyAgICBUIEEwMzEzID0g
bVsxXVswXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVswXTsKKysgICAgVCBBMDIxMyA9IG1b
MV1bMF0gKiBtWzNdWzJdIC0gbVsxXVsyXSAqIG1bM11bMF07CisrICAgIFQgQTAzMTIgPSBtWzFd
WzBdICogbVsyXVszXSAtIG1bMV1bM10gKiBtWzJdWzBdOworKyAgICBUIEEwMjEyID0gbVsxXVsw
XSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVswXTsKKysgICAgVCBBMDExMyA9IG1bMV1bMF0g
KiBtWzNdWzFdIC0gbVsxXVsxXSAqIG1bM11bMF07CisrICAgIFQgQTAxMTIgPSBtWzFdWzBdICog
bVsyXVsxXSAtIG1bMV1bMV0gKiBtWzJdWzBdOworKyAgICBUIGEgPSBtWzFdWzFdICogQTIzMjMg
LSBtWzFdWzJdICogQTEzMjMgKyBtWzFdWzNdICogQTEyMjM7CisrICAgIFQgYiA9IG1bMV1bMF0g
KiBBMjMyMyAtIG1bMV1bMl0gKiBBMDMyMyArIG1bMV1bM10gKiBBMDIyMzsKKysgICAgVCBjID0g
bVsxXVswXSAqIEExMzIzIC0gbVsxXVsxXSAqIEEwMzIzICsgbVsxXVszXSAqIEEwMTIzOworKyAg
ICBUIGQgPSBtWzFdWzBdICogQTEyMjMgLSBtWzFdWzFdICogQTAyMjMgKyBtWzFdWzJdICogQTAx
MjM7CisrICAgIFQgZGV0ID0gbVswXVswXSAqICggYSApCisrICAgICAgICAgIC0gbVswXVsxXSAq
ICggYiApCisrICAgICAgICAgICsgbVswXVsyXSAqICggYyApCisrICAgICAgICAgIC0gbVswXVsz
XSAqICggZCApOworKyAgICBkZXQgPSBUKDEpIC8gZGV0OworKyAgICBtZXRhbDo6bWF0cml4PFQs
IDQsIDQ+IGltOworKyAgICBpbVswXVswXSA9IGRldCAqICAgKCBhICk7CisrICAgIGltWzBdWzFd
ID0gZGV0ICogLSAoIG1bMF1bMV0gKiBBMjMyMyAtIG1bMF1bMl0gKiBBMTMyMyArIG1bMF1bM10g
KiBBMTIyMyApOworKyAgICBpbVswXVsyXSA9IGRldCAqICAgKCBtWzBdWzFdICogQTIzMTMgLSBt
WzBdWzJdICogQTEzMTMgKyBtWzBdWzNdICogQTEyMTMgKTsKKysgICAgaW1bMF1bM10gPSBkZXQg
KiAtICggbVswXVsxXSAqIEEyMzEyIC0gbVswXVsyXSAqIEExMzEyICsgbVswXVszXSAqIEExMjEy
ICk7CisrICAgIGltWzFdWzBdID0gZGV0ICogLSAoIGIgKTsKKysgICAgaW1bMV1bMV0gPSBkZXQg
KiAgICggbVswXVswXSAqIEEyMzIzIC0gbVswXVsyXSAqIEEwMzIzICsgbVswXVszXSAqIEEwMjIz
ICk7CisrICAgIGltWzFdWzJdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMjMxMyAtIG1bMF1bMl0g
KiBBMDMxMyArIG1bMF1bM10gKiBBMDIxMyApOworKyAgICBpbVsxXVszXSA9IGRldCAqICAgKCBt
WzBdWzBdICogQTIzMTIgLSBtWzBdWzJdICogQTAzMTIgKyBtWzBdWzNdICogQTAyMTIgKTsKKysg
ICAgaW1bMl1bMF0gPSBkZXQgKiAgICggYyApOworKyAgICBpbVsyXVsxXSA9IGRldCAqIC0gKCBt
WzBdWzBdICogQTEzMjMgLSBtWzBdWzFdICogQTAzMjMgKyBtWzBdWzNdICogQTAxMjMgKTsKKysg
ICAgaW1bMl1bMl0gPSBkZXQgKiAgICggbVswXVswXSAqIEExMzEzIC0gbVswXVsxXSAqIEEwMzEz
ICsgbVswXVszXSAqIEEwMTEzICk7CisrICAgIGltWzJdWzNdID0gZGV0ICogLSAoIG1bMF1bMF0g
KiBBMTMxMiAtIG1bMF1bMV0gKiBBMDMxMiArIG1bMF1bM10gKiBBMDExMiApOworKyAgICBpbVsz
XVswXSA9IGRldCAqIC0gKCBkICk7CisrICAgIGltWzNdWzFdID0gZGV0ICogICAoIG1bMF1bMF0g
KiBBMTIyMyAtIG1bMF1bMV0gKiBBMDIyMyArIG1bMF1bMl0gKiBBMDEyMyApOworKyAgICBpbVsz
XVsyXSA9IGRldCAqIC0gKCBtWzBdWzBdICogQTEyMTMgLSBtWzBdWzFdICogQTAyMTMgKyBtWzBd
WzJdICogQTAxMTMgKTsKKysgICAgaW1bM11bM10gPSBkZXQgKiAgICggbVswXVswXSAqIEExMjEy
IC0gbVswXVsxXSAqIEEwMjEyICsgbVswXVsyXSAqIEEwMTEyICk7CisrICAgIHJldHVybiBpbTsK
Kyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxBcnJheSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+
CisrQU5HTEVfQUxXQVlTX0lOTElORSBib29sIEFOR0xFX2VxdWFsKG1ldGFsOjphcnJheTxULCBO
PiB1LCBtZXRhbDo6YXJyYXk8VCwgTj4gdikKKyt7CisrICAgIGZvcihzaXplX3QgaSA9IDA7IGkg
PCBOOyBpKyspCisrICAgICAgICBpZiAodVtpXSAhPSB2W2ldKSByZXR1cm4gZmFsc2U7CisrICAg
IHJldHVybiB0cnVlOworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShub3RF
cXVhbEFycmF5LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCBzaXplX3QgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90RXF1
YWwobWV0YWw6OmFycmF5PFQsIE4+IHUsIG1ldGFsOjphcnJheTxULCBOPiB2KQorK3sKKysgICAg
cmV0dXJuICFBTkdMRV9lcXVhbCh1LHYpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBlcXVhbEFycmF5KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxWZWN0
b3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGludCBOPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9lcXVhbChtZXRhbDo6dmVj
PFQsIE4+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKKyt7CisrICAgIHJldHVybiBtZXRhbDo6YWxs
KHUgPT0gdik7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0
YWxfbWF0aCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGVxdWFsTWF0cml4LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQywg
aW50IFI+CisrQU5HTEVfQUxXQVlTX0lOTElORSBib29sIEFOR0xFX2VxdWFsKG1ldGFsOjptYXRy
aXg8VCwgQywgUj4gYSwgbWV0YWw6Om1hdHJpeDxULCBDLCBSPiBiKQorK3sKKysgICAgZm9yIChp
bnQgYyA9IDA7IGMgPCBDOyArK2MpCisrICAgIHsKKysgICAgICAgIGlmICghQU5HTEVfZXF1YWwo
YVtjXSwgYltjXSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KG5vdEVxdWFsVmVjdG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBpbnQgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90
RXF1YWwobWV0YWw6OnZlYzxULCBOPiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCisreworKyAgICBy
ZXR1cm4gIUFOR0xFX2VxdWFsKHUsIHYpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBlcXVhbFZlY3RvcigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vdEVxdWFs
U3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9ub3RFcXVhbFN0cnVjdCh0aHJl
YWQgY29uc3QgVCAmYSwgdGhyZWFkIGNvbnN0IFQgJmIpCisreworKyAgICByZXR1cm4gIUFOR0xF
X2VxdWFsKGEsIGIpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbFZl
Y3RvcigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsTWF0cml4KCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodmVjdG9yRWxlbVJlZiwgUiIoCisrdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIGludCBOPgorK3N0cnVjdCBBTkdMRV9WZWN0b3JFbGVtUmVmCisreworKyAgICB0aHJl
YWQgbWV0YWw6OnZlYzxULCBOPiAmbVZlYzsKKysgICAgVCBtUmVmOworKyAgICBjb25zdCBpbnQg
bUluZGV4OworKyAgICB+QU5HTEVfVmVjdG9yRWxlbVJlZigpIHsgbVZlY1ttSW5kZXhdID0gbVJl
ZjsgfQorKyAgICBBTkdMRV9WZWN0b3JFbGVtUmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2
ZWMsIGludCBpbmRleCkKKysgICAgICAgIDogbVZlYyh2ZWMpLCBtUmVmKHZlY1tpbmRleF0pLCBt
SW5kZXgoaW5kZXgpCisrICAgIHt9CisrICAgIG9wZXJhdG9yIHRocmVhZCBUICYoKSB7IHJldHVy
biBtUmVmOyB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBBTkdMRV9WZWN0b3JFbGVtUmVmPFQsIE4+IEFOR0xFX2VsZW1fcmVmKHRocmVh
ZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpbmRleCkKKyt7CisrICAgIHJldHVybiBBTkdM
RV9WZWN0b3JFbGVtUmVmPFQsIE4+KHZlYywgaW5kZXgpOworK30KKyspIikKKysKKytQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShzd2l6emxlUmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgVk4sIGludCBTTj4KKytzdHJ1Y3QgQU5HTEVf
U3dpenpsZVJlZgorK3sKKysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8VCwgVk4+ICZtVmVjOworKyAg
ICBtZXRhbDo6dmVjPFQsIFNOPiBtUmVmOworKyAgICBpbnQgbUluZGljZXNbU05dOworKyAgICB+
QU5HTEVfU3dpenpsZVJlZigpCisrICAgIHsKKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
U047ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBpbnQgaiA9IG1JbmRpY2Vz
W2ldOworKyAgICAgICAgICAgIG1WZWNbal0gPSBtUmVmW2ldOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIEFOR0xFX1N3aXp6bGVSZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgdGhy
ZWFkIGNvbnN0IGludCAqaW5kaWNlcykKKysgICAgICAgIDogbVZlYyh2ZWMpCisrICAgIHsKKysg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU047ICsraSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBjb25zdCBpbnQgaiA9IGluZGljZXNbaV07CisrICAgICAgICAgICAgbUluZGljZXNbaV0g
PSBqOworKyAgICAgICAgICAgIG1SZWZbaV0gPSBtVmVjW2pdOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIG9wZXJhdG9yIHRocmVhZCBtZXRhbDo6dmVjPFQsIFNOPiAmKCkgeyByZXR1cm4gbVJl
ZjsgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPiBBTkdMRV9zd2l6emxlX3JlZih0aHJlYWQg
bWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaTApCisreworKyAgICByZXR1cm4gQU5HTEVfVmVj
dG9yRWxlbVJlZjxULCBOPih2ZWMsIGluZGV4KTsKKyt9CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQs
IGludCBOPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfU3dpenpsZVJlZjxULCBOLCAyPiBB
TkdMRV9zd2l6emxlX3JlZih0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaTAsIGlu
dCBpMSkKKyt7CisrICAgIGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEgfTsKKysgICAgcmV0dXJu
IEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMj4odmVjLCBpcyk7CisrfQorK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCBpbnQgTj4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX1N3aXp6bGVSZWY8VCwg
TiwgMz4gQU5HTEVfc3dpenpsZV9yZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgaW50
IGkwLCBpbnQgaTEsIGludCBpMikKKyt7CisrICAgIGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEs
IGkyIH07CisrICAgIHJldHVybiBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDM+KHZlYywgaXMpOwor
K30KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CisrQU5HTEVfQUxXQVlTX0lOTElORSBB
TkdMRV9Td2l6emxlUmVmPFQsIE4sIDQ+IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVhZCBtZXRhbDo6
dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCwgaW50IGkxLCBpbnQgaTIsIGludCBpMykKKyt7CisrICAg
IGNvbnN0IGludCBpc1tdID0geyBpMCwgaTEsIGkyLCBpMyB9OworKyAgICByZXR1cm4gQU5HTEVf
U3dpenpsZVJlZjxULCBOLCA0Pih2ZWMsIGlzKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgdmVjdG9yRWxlbVJlZigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG91
dCwgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX091dAorK3sKKysg
ICAgVCBtVGVtcDsKKysgICAgdGhyZWFkIFQgJm1EZXN0OworKyAgICB+QU5HTEVfT3V0KCkgeyBt
RGVzdCA9IG1UZW1wOyB9CisrICAgIEFOR0xFX091dCh0aHJlYWQgVCAmZGVzdCkKKysgICAgICAg
IDogbURlc3QoZGVzdCkKKysgICAge30KKysgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsgcmV0
dXJuIG1UZW1wOyB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNf
SU5MSU5FIEFOR0xFX091dDxUPiBBTkdMRV9vdXQodGhyZWFkIFQgJmRlc3QpCisreworKyAgICBy
ZXR1cm4gQU5HTEVfT3V0PFQ+KGRlc3QpOworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRShpbm91dCwgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xF
X0luT3V0CisreworKyAgICBUIG1UZW1wOworKyAgICB0aHJlYWQgVCAmbURlc3Q7CisrICAgIH5B
TkdMRV9Jbk91dCgpIHsgbURlc3QgPSBtVGVtcDsgfQorKyAgICBBTkdMRV9Jbk91dCh0aHJlYWQg
VCAmZGVzdCkKKysgICAgICAgIDogbVRlbXAoZGVzdCksIG1EZXN0KGRlc3QpCisrICAgIHt9Cisr
ICAgIG9wZXJhdG9yIHRocmVhZCBUICYoKSB7IHJldHVybiBtVGVtcDsgfQorK307CisrdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9Jbk91dDxUPiBBTkdM
RV9pbm91dCh0aHJlYWQgVCAmZGVzdCkKKyt7CisrICAgIHJldHVybiBBTkdMRV9Jbk91dDxUPihk
ZXN0KTsKKyt9CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZmxhdHRlbkFycmF5
LCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfZmxhdHRlbl9pbXBs
CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgVCAqZXhlYyh0aHJl
YWQgVCAmeCkKKysgICAgeworKyAgICAgICAgcmV0dXJuICZ4OworKyAgICB9CisrfTsKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IE4+Cisrc3RydWN0IEFOR0xFX2ZsYXR0ZW5faW1wbDxt
ZXRhbDo6YXJyYXk8VCwgTj4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBh
dXRvIGV4ZWModGhyZWFkIG1ldGFsOjphcnJheTxULCBOPiAmYXJyKSAtPiBUCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBBTkdMRV9mbGF0dGVuX2ltcGw8VD46OmV4ZWMoYXJyWzBdKTsKKysgICAg
fQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV9mbGF0dGVuKHRocmVhZCBtZXRhbDo6YXJyYXk8VCwgTj4gJmFycikg
LT4gVAorK3sKKysgICAgcmV0dXJuIEFOR0xFX2ZsYXR0ZW5faW1wbDxUPjo6ZXhlYyhhcnJbMF0p
OworK30KKyspIikKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjYXN0VmVjdG9yLCBSIigK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4xLCBpbnQgTjI+Cisrc3RydWN0IEFOR0xFX2Nh
c3RWZWN0b3Ige307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorK3N0cnVjdCBBTkdM
RV9jYXN0VmVjdG9yPFQsIE4sIE4+CisreworKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElO
RSBtZXRhbDo6dmVjPFQsIE4+IGV4ZWModGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gY29uc3QgJnYp
CisrICAgIHsKKysgICAgICAgIHJldHVybiB2OworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfY2FzdFZlY3RvcjxULCAyLCAzPgorK3sKKysgICAgc3Rh
dGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxULCAyPiBleGVjKHRocmVhZCBtZXRh
bDo6dmVjPFQsIDM+IGNvbnN0ICZ2KQorKyAgICB7CisrICAgICAgICByZXR1cm4gdi54eTsKKysg
ICAgfQorK307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFOR0xFX2Nhc3RWZWN0
b3I8VCwgMiwgND4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2
ZWM8VCwgMj4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCA0PiBjb25zdCAmdikKKysgICAgewor
KyAgICAgICAgcmV0dXJuIHYueHk7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK3N0cnVjdCBBTkdMRV9jYXN0VmVjdG9yPFQsIDMsIDQ+CisreworKyAgICBzdGF0aWMgQU5H
TEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIDM+IGV4ZWModGhyZWFkIG1ldGFsOjp2ZWM8
VCwgND4gY29uc3QgJnYpCisrICAgIHsKKysgICAgICAgIHJldHVybiBhc190eXBlPG1ldGFsOjp2
ZWM8VCwgMz4+KHYpOworKyAgICB9CisrfTsKKyt0ZW1wbGF0ZSA8aW50IE4xLCBpbnQgTjIsIHR5
cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIE4xPiBBTkdMRV9j
YXN0KHRocmVhZCBtZXRhbDo6dmVjPFQsIE4yPiBjb25zdCAmdikKKyt7CisrICAgIHJldHVybiBB
TkdMRV9jYXN0VmVjdG9yPFQsIE4xLCBOMj46OmV4ZWModik7CisrfQorKykiKQorKworK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKGNhc3RNYXRyaXgsCisrICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDMSwgaW50IFIxLCBpbnQgQzIsIGludCBS
MiwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KKytzdHJ1Y3QgQU5HTEVfY2FzdE1hdHJpeAorK3sK
KysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+
IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbTIpCisrICAgIHsK
KysgICAgICAgIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBtMTsKKysgICAgICAgIGNvbnN0IGlu
dCBNaW5DID0gQzEgPD0gQzIgPyBDMSA6IEMyOworKyAgICAgICAgY29uc3QgaW50IE1pblIgPSBS
MSA8PSBSMiA/IFIxIDogUjI7CisrICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IE1pbkM7ICsr
YykKKysgICAgICAgIHsKKysgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IE1pblI7ICsr
cikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gbTJbY11bcl07
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGZvciAoaW50IHIgPSBSMjsgciA8IFIxOyAr
K3IpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBtMVtjXVtyXSA9IGMgPT0gciA/
IFQoMSkgOiBUKDApOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGZvciAo
aW50IGMgPSBDMjsgYyA8IEMxOyArK2MpCisrICAgICAgICB7CisrICAgICAgICAgICAgZm9yIChp
bnQgciA9IDA7IHIgPCBSMTsgKytyKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
bTFbY11bcl0gPSBjID09IHIgPyBUKDEpIDogVCgwKTsKKysgICAgICAgICAgICB9CisrICAgICAg
ICB9CisrICAgICAgICByZXR1cm4gbTE7CisrICAgIH0KKyt9OworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCBpbnQgQzEsIGludCBSMSwgaW50IEMyLCBpbnQgUjI+Cisrc3RydWN0IEFOR0xFX2Nhc3RN
YXRyaXg8VCwgQzEsIFIxLCBDMiwgUjIsIEFOR0xFX2VuYWJsZV9pZl90PChDMSA8PSBDMiAmJiBS
MSA8PSBSMik+PgorK3sKKysgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1h
dHJpeDxULCBDMSwgUjE+IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25z
dCAmbTIpCisrICAgIHsKKysgICAgICAgIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBtMTsKKysg
ICAgICAgIGZvciAoc2l6ZV90IGMgPSAwOyBjIDwgQzE7ICsrYykKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBtMVtjXSA9IEFOR0xFX2Nhc3Q8UjE+KG0yW2NdKTsKKysgICAgICAgIH0KKysgICAg
ICAgIHJldHVybiBtMTsKKysgICAgfQorK307CisrdGVtcGxhdGUgPGludCBDMSwgaW50IFIxLCBp
bnQgQzIsIGludCBSMiwgdHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjpt
YXRyaXg8VCwgQzEsIFIxPiBBTkdMRV9jYXN0KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIEMyLCBS
Mj4gY29uc3QgJm0pCisreworKyAgICByZXR1cm4gQU5HTEVfY2FzdE1hdHJpeDxULCBDMSwgUjEs
IEMyLCBSMj46OmV4ZWMobSk7CisrfTsKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBl
bmFibGVfaWYoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXN0VmVjdG9yKCkpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGVuc29yLCBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgc2l6ZV90Li4uIERTPgorK3N0cnVjdCBBTkdMRV90ZW5zb3JfdHJhaXRzOworK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBzaXplX3QgRD4KKytzdHJ1Y3QgQU5HTEVfdGVuc29yX3RyYWl0czxULCBE
PgorK3sKKysgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKysgICAgdXNpbmcg
aW5uZXJfdHlwZSA9IFQ7CisrICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOwor
K307CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBELCBzaXplX3QuLi4gRFM+Cisrc3Ry
dWN0IEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRCwgRFMuLi4+CisreworKyAgICBlbnVtIDogc2l6
ZV90IHsgb3V0ZXJfZGltID0gRCB9OworKyAgICB1c2luZyBpbm5lcl90eXBlID0gdHlwZW5hbWUg
QU5HTEVfdGVuc29yX3RyYWl0czxULCBEUy4uLj46Om91dGVyX3R5cGU7CisrICAgIHVzaW5nIG91
dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworK307CisrdGVtcGxhdGUgPHNpemVfdCBELCB0eXBl
bmFtZSB2YWx1ZV90eXBlXywgdHlwZW5hbWUgaW5uZXJfdHlwZV8+Cisrc3RydWN0IEFOR0xFX3Rl
bnNvcl9pbXBsCisreworKyAgICBlbnVtIDogc2l6ZV90IHsgb3V0ZXJfZGltID0gRCB9OworKyAg
ICB1c2luZyB2YWx1ZV90eXBlID0gdmFsdWVfdHlwZV87CisrICAgIHVzaW5nIGlubmVyX3R5cGUg
PSBpbm5lcl90eXBlXzsKKysgICAgdXNpbmcgb3V0ZXJfdHlwZSA9IGlubmVyX3R5cGVbRF07Cisr
ICAgIG91dGVyX3R5cGUgX2RhdGE7CisrICAgIEFOR0xFX0FMV0FZU19JTkxJTkUgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBvdXRlcl9kaW07IH0KKysgICAgQU5HTEVfQUxXQVlTX0lOTElO
RSBpbm5lcl90eXBlICZvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBfZGF0YVtpXTsgfQor
KyAgICBBTkdMRV9BTFdBWVNfSU5MSU5FIGNvbnN0IGlubmVyX3R5cGUgJm9wZXJhdG9yW10oc2l6
ZV90IGkpIGNvbnN0IHsgcmV0dXJuIF9kYXRhW2ldOyB9CisrfTsKKyt0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgc2l6ZV90Li4uIERTPgorK3VzaW5nIEFOR0xFX3RlbnNvciA9IEFOR0xFX3RlbnNvcl9p
bXBsPAorKyAgICBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6b3V0ZXJfZGltLAorKyAg
ICBULAorKyAgICB0eXBlbmFtZSBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6aW5uZXJf
dHlwZT47CisrKSIpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZ3JhZGllbnQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPGludCBOPgorK3N0cnVjdCBBTkdM
RV9ncmFkaWVudF90cmFpdHM7CisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQU5HTEVfZ3JhZGllbnRf
dHJhaXRzPDI+IHsgdXNpbmcgdHlwZSA9IG1ldGFsOjpncmFkaWVudDJkOyB9OworK3RlbXBsYXRl
IDw+Cisrc3RydWN0IEFOR0xFX2dyYWRpZW50X3RyYWl0czwzPiB7IHVzaW5nIHR5cGUgPSBtZXRh
bDo6Z3JhZGllbnQzZDsgfTsKKysKKyt0ZW1wbGF0ZSA8aW50IE4+CisrdXNpbmcgQU5HTEVfZ3Jh
ZGllbnQgPSB0eXBlbmFtZSBBTkdMRV9ncmFkaWVudF90cmFpdHM8Tj46OnR5cGU7CisrKSIpCisr
CisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUVudiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdHJ1Y3QgQU5HTEVfVGV4dHVy
ZUVudgorK3sKKysgICAgdGhyZWFkIFQgKnRleHR1cmU7CisrICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciAqc2FtcGxlcjsKKyt9OworKykiKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZ1
bmN0aW9uQ29uc3RhbnRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUg
QU5HTEVfU0FNUExFX0NPTVBBUkVfR1JBRElFTlRfSU5ERVggMAorKyNkZWZpbmUgQU5HTEVfU0FN
UExFX0NPTVBBUkVfTE9EX0lOREVYICAgICAgMQorKyNkZWZpbmUgQU5HTEVfUkFTVEVSSVpBVElP
Tl9ESVNDQVJEX0lOREVYICAgMgorKworK2NvbnN0YW50IGJvb2wgQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50IFtbZnVuY3Rpb25fY29uc3RhbnQoQU5HTEVfU0FNUExFX0NPTVBBUkVfR1JB
RElFTlRfSU5ERVgpXV07CisrY29uc3RhbnQgYm9vbCBBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9k
ICAgICAgW1tmdW5jdGlvbl9jb25zdGFudChBTkdMRV9TQU1QTEVfQ09NUEFSRV9MT0RfSU5ERVgp
XV07CisrY29uc3RhbnQgYm9vbCBBTkdMRV9SYXN0ZXJpemF0aW9uRGlzY2FyZCAgICAgW1tmdW5j
dGlvbl9jb25zdGFudChBTkdMRV9SQVNURVJJWkFUSU9OX0RJU0NBUkRfSU5ERVgpXV07CisrKSIp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4ZWxGZXRjaCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleGVsRmV0Y2goZW52LCAuLi4pIEFOR0xF
X3RleGVsRmV0Y2hfaW1wbCgqZW52LnRleHR1cmUsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXhl
bEZldGNoX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQg
bWV0YWw6OmludDIgY29uc3QgJmNvb3JkLAorKyAgICB1aW50IGxldmVsKQorK3sKKysgICAgcmV0
dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZCksIGxldmVsKTsKKyt9CisrCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVs
RmV0Y2hfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBt
ZXRhbDo6aW50MyBjb25zdCAmY29vcmQsCisrICAgIHVpbnQgbGV2ZWwpCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5yZWFkKHVpbnQzKGNvb3JkKSwgbGV2ZWwpOworK30KKysKKyt0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaF9p
bXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysg
ICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZjb29yZCwKKysgICAgdWludCBsZXZlbCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQueHkpLCB1aW50KGNvb3JkLnop
LCBsZXZlbCk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXhlbEZldGNoT2Zmc2V0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldChl
bnYsIC4uLikgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgX19WQV9B
UkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmY29vcmQsCisrICAg
IHVpbnQgbGV2ZWwsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQorK3sK
KysgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZCArIG9mZnNldCksIGxldmVsKTsK
Kyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUg
JnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmY29vcmQsCisrICAgIHVp
bnQgbGV2ZWwsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Myhjb29yZCArIG9mZnNldCksIGxldmVsKTsKKyt9
CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleGVsRmV0Y2hPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRf
YXJyYXk8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmY29vcmQs
CisrICAgIHVpbnQgbGV2ZWwsCisrICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0
KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29yZC54eSArIG9mZnNldCks
IHVpbnQoY29vcmQueiksIGxldmVsKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlKGVudiwg
Li4uKSBBTkdMRV90ZXh0dXJlX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFf
QVJHU19fKQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7CisrfQorKykiLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zsb2F0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcykKKyt7CisrICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworK30K
KyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5lcmljX2Zsb2F0MywKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQpCisreworKyAgICByZXR1cm4gdGV4dHVy
ZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5l
cmljX2Zsb2F0M19mbG9hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4
dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHRleHR1cmVfZGVwdGgyZF9mbG9hdDMsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAor
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoMmRf
ZmxvYXQzX2Zsb2F0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwo
CisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleHR1cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmRfYXJyYXk8
VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkKQorK3sKKysgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJv
dW5kKGNvb3JkLnopKSwgY29vcmQudyk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRo
MmRhcnJheV9mbG9hdDRfZmxvYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAor
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgY29tcGFyZSkKKyt7CisrICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludCht
ZXRhbDo6cm91bmQoY29vcmQudykpLCBjb21wYXJlKTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVfZGVwdGhjdWJlX2Zsb2F0NCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoY3ViZTxUPiAmdGV4dHVyZSwKKysgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0NCBjb25zdCAmY29vcmQpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQueHl6KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZGVwdGhjdWJlX2Zs
b2F0NF9mbG9hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
KyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoY3ViZTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0MywKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9h
cnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQpCisreworKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5k
KGNvb3JkLnopKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zs
b2F0M19mbG9hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
KyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnop
KSwgbWV0YWw6OmJpYXMoYmlhcykpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV90ZXh0dXJl
MmRhcnJheV9mbG9hdDQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1w
bCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisrICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDQgY29uc3QgJmNvb3JkKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpKTsKKyt9CisrKSIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4
dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysg
ICAgZmxvYXQgYmlhcykKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eXosIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgbWV0YWw6OmJpYXMoYmlhcykp
OworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTFETG9kLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTFETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0
dXJlMURMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUxRExvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
ZmxvYXQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSk7CisrfQor
KykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURQcm9qLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTFEUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZTFEUHJval9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKysK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZTFEUHJval9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMgPSAwKQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLngvY29vcmQueSwgbWV0YWw6
OmJpYXMoYmlhcykpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTFEUHJval9pbXBsKAorKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZs
b2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLngvY29vcmQudywgbWV0YWw6OmJpYXMoYmlhcykpOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
dGV4dHVyZTFEUHJvakxvZCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5l
IEFOR0xFX3RleHR1cmUxRFByb2pMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUxRFByb2pMb2Rf
aW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxh
dGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3Rl
eHR1cmUxRFByb2pMb2RfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54L2Nvb3JkLnksIG1ldGFsOjpsZXZlbChs
ZXZlbCkpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTFEUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0
IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLngv
Y29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlMkQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0
dXJlMkQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUyRF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5z
YW1wbGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEX2ltcGwoCisrICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCkKKyt7CisrICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7CisrfQorKworK3RlbXBsYXRl
IDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlMkRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFzKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKworK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlMkRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDMgY29uc3QgJmNvb3JkKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIs
IGNvb3JkKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVy
ZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAor
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMp
CisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpi
aWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVu
digpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUyRExvZCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmUyRExvZChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZTJETG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9f
VkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlMkRMb2RfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZl
bCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6
OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMkRQcm9qLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTJEUHJvaihl
bnYsIC4uLikgQU5HTEVfdGV4dHVyZTJEUHJval9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1w
bGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJval9pbXBsKAorKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZs
b2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUy
RFByb2pfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQg
Y29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7
CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMkRQcm9qTG9kLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTJEUHJvakxvZChlbnYsIC4uLikg
QU5HTEVfdGV4dHVyZTJEUHJvakxvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBf
X1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0
IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTJEUHJv
akxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBj
b25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOwor
K30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTNETG9kLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0
dXJlM0RMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUzRExvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFByb2osCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlM0RQcm9qKGVudiwgLi4uKSBBTkdM
RV90ZXh0dXJlM0RQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJH
U19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlM0RQcm9qX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0
ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcyA9IDAp
CisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3Jk
LncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFBy
b2pMb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0
dXJlM0RQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlM0RQcm9qTG9kX2ltcGwoKmVudi50
ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlM0RQcm9q
TG9kX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCwKKysgICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpOwor
K30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUN1YmUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3ViZShlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZUN1YmVfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisr
dGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleHR1cmVDdWJlX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZV9pbXBsKAorKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZs
b2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG1ldGFsOjpiaWFzKGJpYXMpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJlTG9k
LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZUN1
YmVMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVDdWJlTG9kX2ltcGwoKmVudi50ZXh0dXJlLCAq
ZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZUxvZF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQs
CisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVDdWJlUHJvaiwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFO
R0xFX3RleHR1cmVDdWJlUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVQcm9qX2ltcGwo
KmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
Q3ViZVByb2pfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9h
dDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmJpYXMoYmlh
cykpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisr
CisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUN1YmVQcm9qTG9kLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZUN1YmVQcm9qTG9kKGVu
diwgLi4uKSBBTkdMRV90ZXh0dXJlQ3ViZVByb2pMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYu
c2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlUHJvakxvZF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVHcmFkLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNk
ZWZpbmUgQU5HTEVfdGV4dHVyZUdyYWQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwo
KmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKykiLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlLCBpbnQgTj4KKytB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwK
KysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorKyAgICB0aHJl
YWQgbWV0YWw6OnZlYzxmbG9hdCwgTj4gY29uc3QgJmRQZHkpCisreworKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQZHgsIGRQZHkp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQoKSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisrICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR5KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVudDJkKGRQ
ZHgsIGRQZHkpKTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdy
YWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlR3JhZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29v
cmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUodGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQyX2Zsb2F0MiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFs
OjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQyIGNvbnN0ICZkUGR5KQorK3sKKysgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFk
aWVudCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2Ft
cGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFkaWVudDJk
KGRQZHgsIGRQZHkpKSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFs
OjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSA+IGNvb3JkLnopOworKyAgICB9CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlR3JhZF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisrICAgIHRocmVhZCBtZXRh
bDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlR3JhZGllbnQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChj
b29yZC56KSksIGNvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSk7CisrICAg
IH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnop
KSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisrICAgIH0KKyt9
CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MywKKysg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKysgICAgdGhyZWFk
IG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3Jk
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCisreworKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50KQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4
dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eXosIGNvb3JkLncsIG1ldGFsOjpn
cmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eXosIG1ldGFsOjpncmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisrICAg
IH0KKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorKworK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxv
YXQzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorKyAg
ICB0aHJlYWQgbWV0YWw6OnRleHR1cmVjdWJlPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR5KQorK3sKKysgICAgcmV0dXJuIHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKysK
KytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0KGVudiwg
Li4uKSBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1w
bGVyLCBfX1ZBX0FSR1NfXykKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2Vu
ZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0Tl9pbnROLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlLCBpbnQgTj4KKytBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwKKysgICAg
dGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OnZlYzxmbG9hdCwgTj4gY29uc3QgJmRQZHksCisrICAgIHRocmVhZCBtZXRhbDo6dmVjPGlu
dCwgTj4gY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1w
bGVyLCBjb29yZCwgQU5HTEVfZ3JhZGllbnQ8Tj4oZFBkeCwgZFBkeSksIG9mZnNldCk7CisrfQor
KykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50KCksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1
cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2lt
cGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29u
c3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4
LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3Jh
ZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRh
bDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQo
KSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJk
X2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIo
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAm
dGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAg
ICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBk
eSwKKysgICAgdGhyZWFkIG1ldGFsOjppbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBpZiAo
QU5HTEVfVXNlU2FtcGxlQ29tcGFyZUdyYWRpZW50KQorKyAgICB7CisrICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwg
Y29vcmQueiwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCkpOworKyAgICB9
CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1
cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5
KSwgb2Zmc2V0KSA+IGNvb3JkLnopOworKyAgICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
R3JhZE9mZnNldF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhy
ZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0
ICZjb29yZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisrICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDIg
Y29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGll
bnQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBs
ZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSks
IGNvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKysgICAg
fQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikp
LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLncpOworKyAg
ICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRz
KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVfZmxvYXQ0
X2Zsb2F0M19mbG9hdDNfaW50MywKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVy
ZUdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1
cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisr
ICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4
LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3Jh
ZE9mZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQg
bWV0YWw6OnRleHR1cmVjdWJlPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29y
ZCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3Qg
Jm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwg
bWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQoKSkKKysKKytQUk9HUkFNX1BS
RUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAor
KyNkZWZpbmUgQU5HTEVfdGV4dHVyZUxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUxvZF9pbXBs
KCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKyspIiwKKysgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xB
UkUodGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MiwKKysgICAgICAgICAgICAgICAgICAgICAgICBS
IigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZUxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KTsKKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQorKwor
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDMsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+Cisr
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKysgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBm
bG9hdCBsZXZlbCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZCwgbWV0YWw6OmxldmVsKGxldmVsKSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVMb2QoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9k
X2RlcHRoMmRfZmxvYXQzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9k
X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysgICAgaWYgKEFOR0xF
X1VzZVNhbXBsZUNvbXBhcmVMb2QpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCBjb29yZC56LCBt
ZXRhbDo6bGV2ZWwobGV2ZWwpKSk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHks
IG1ldGFsOjpsZXZlbChsZXZlbCkpID4gY29vcmQueik7CisrICAgIH0KKyt9CisrKSIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMoKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlTG9kKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFO
R0xFX3RleHR1cmVMb2RfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8
VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZl
bCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWlu
dChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKKyt9CisrKSIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxvZCgpKQorKworK1BST0dSQU1fUFJF
TFVERV9ERUNMQVJFKHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6
dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIg
Y29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwK
KysgICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxl
ciwgY29vcmQueHl6LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC53KSksIG1ldGFsOjpsZXZlbChs
ZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTG9kKCkp
CisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZE9mZnNldCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVMb2RPZmZzZXQoZW52
LCAuLi4pIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2Ft
cGxlciwgX19WQV9BUkdTX18pCisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkLAorKyAg
ICBmbG9hdCBsZXZlbCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVs
KSwgb2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICBm
bG9hdCBsZXZlbCwKKysgICAgdGhyZWFkIGludDMgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwg
b2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFs
OjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3Qg
JnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAg
ZmxvYXQgbGV2ZWwsCisrICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBp
ZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFyZUxvZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNv
b3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworKyAgICB9CisrICAgIGVsc2UK
KysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpID4gY29vcmQueik7
CisrICAgIH0KKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFs
Ojp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3Jk
LAorKyAgICBmbG9hdCBsZXZlbCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7
CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRh
bDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30KKysK
Kyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZUxvZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJh
eTxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxl
dmVsLAorKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQu
dykpLCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlT2Zm
c2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVy
ZU9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwg
KmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAor
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgZmxvYXQyIGNvbnN0ICZjb29yZCwKKysgICAg
dGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZCwgb2Zmc2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRl
eHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1w
bCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisr
ICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMp
LCBvZmZzZXQpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIGludDIg
Y29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBvZmZzZXQpOworK30KKysKKyt0
ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgZmxv
YXQzIGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKysgICAg
ZmxvYXQgYmlhcykKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zm
c2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBpbnQzIGNvbnN0
ICZvZmZzZXQpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG9mZnNldCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MyBj
b25zdCAmb2Zmc2V0LAorKyAgICBmbG9hdCBiaWFzKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKKyt9Cisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0
dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRo
cmVhZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0
KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBvZmZz
ZXQpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRo
MmQ8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBpbnQyIGNv
bnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMpCisreworKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworK30K
KyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2osCisrICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvaihlbnYsIC4uLikgQU5HTEVfdGV4dHVyZVBy
b2pfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrCisrdGVt
cGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVQcm9qX2ltcGwoCisrICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQzIGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgYmlhcyA9IDApCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmJpYXMo
YmlhcykpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1
cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBiaWFz
ID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9j
b29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJval9pbXBsKAorKyAg
ICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25z
dCAmY29vcmQsCisrICAgIGZsb2F0IGJpYXMgPSAwKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cisr
fQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9H
UkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCisrI2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvakdyYWQoZW52LCAuLi4pIEFOR0xF
X3RleHR1cmVQcm9qR3JhZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FS
R1NfXykKKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisr
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQzX2Zs
b2F0Ml9mbG9hdDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQ
cm9qR3JhZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAor
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6Z3JhZGllbnQy
ZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVQcm9qR3JhZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3Jh
ZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgbWV0YWw6OmZs
b2F0MiBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHkp
CisreworKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQu
dywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpOworK30KKyspIiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlUHJvakdyYWQoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVD
TEFSRSh0ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisrICAgIHRocmVh
ZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQs
CisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKKyt7CisrICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21w
YXJlR3JhZGllbnQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0
dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3JkLnovY29v
cmQudywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpKTsKKysgICAgfQorKyAgICBlbHNl
CisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSkg
PiBjb29yZC56L2Nvb3JkLncpOworKyAgICB9CisrfQorKykiLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZVByb2pHcmFkKCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pH
cmFkX3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0MywKKysgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4dHVy
ZTNkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZkUGR5KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3Jk
Lnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQzZChkUGR4LCBkUGR5KSk7CisrfQorKykiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQorKworK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKKysjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldChlbnYsIC4u
LikgQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNh
bXBsZXIsIF9fVkFfQVJHU19fKQorKykiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZz
ZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmRQZHksCisrICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCisreworKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7CisrfQorKykiLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgpKQorKworK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQy
X2ludDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5cGVuYW1l
IFRleHR1cmU+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3Jh
ZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAor
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKysgICAgdGhyZWFkIGludDIg
Y29uc3QgJm9mZnNldCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZC54eS9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsK
Kyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0
KCkpCisrCisrUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFkT2Zmc2V0X2Rl
cHRoMmRfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6ZGVw
dGgyZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBj
b25zdCAmZFBkeSwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlm
IChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5
L2Nvb3JkLncsIGNvb3JkLnovY29vcmQudywgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSks
IG9mZnNldCkpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1l
dGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpID4gY29vcmQuei9jb29yZC53KTsK
KysgICAgfQorK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0
YW50cygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgp
KQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZE9mZnNldF90ZXh0
dXJlM2RfZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50MywKKysgICAgICAgICAgICAgICAgICAgICAg
ICBSIigKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4
dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQz
IGNvbnN0ICZkUGR5LAorKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6
Z3JhZGllbnQzZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisrCisrUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUodGV4dHVyZVByb2pMb2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisr
I2RlZmluZSBBTkdMRV90ZXh0dXJlUHJvakxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZVByb2pM
b2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisrKSIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIFIiKAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVy
LAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxl
dmVsKQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nv
b3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlUHJvakxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsKQorK3sKKysg
ICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFs
OjpsZXZlbChsZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlUHJvakxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9k
X2RlcHRoMmRfZmxvYXQ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJv
akxvZF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisrICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBsZXZlbCkKKyt7CisrICAgIGlmIChB
TkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCkpKTsKKysgICAgfQorKyAgICBl
bHNlCisrICAgIHsKKysgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSA+IGNvb3Jk
LnovY29vcmQudyk7CisrICAgIH0KKyt9CisrKSIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb25Db25zdGFudHMoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJv
akxvZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kX3RleHR1
cmUzZF9mbG9hdDQsCisrICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisrdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisrQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9k
X2ltcGwoCisrICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorKyAgICB0
aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisrICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgZmxvYXQgbGV2ZWwpCisreworKyAgICByZXR1cm4g
dGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChs
ZXZlbCkpOworK30KKyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJvakxv
ZCgpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kT2Zmc2V0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2pM
b2RPZmZzZXQoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoKmVudi50
ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQorKworK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxv
ZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKysgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MyBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJlYWQgaW50MiBjb25z
dCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3Jk
Lnh5L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7CisrfQorKworK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KysgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJl
YWQgaW50MiBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cisr
fQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRo
MmQ8VD4gJnRleHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKysgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorKyAgICBmbG9hdCBs
ZXZlbCwKKysgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKKyt7CisrICAgIGlmIChBTkdM
RV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBj
b29yZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworKyAgICB9Cisr
ICAgIGVsc2UKKysgICAgeworKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9m
ZnNldCkgPiBjb29yZC56L2Nvb3JkLncpOworKyAgICB9CisrfQorKworK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9m
ZnNldF9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisrICAgIGZsb2F0IGxldmVsLAorKyAgICB0aHJlYWQg
aW50MyBjb25zdCAmb2Zmc2V0KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBs
ZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworK30K
KyspIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKysKKytQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlUHJvak9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICBSIigK
KysjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJl
UHJvak9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykK
KysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZVByb2pPZmZzZXRfaW1wbCgKKysgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisrICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKysgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorKyAgICB0aHJlYWQgaW50MiBjb25z
dCAmb2Zmc2V0LAorKyAgICBmbG9hdCBiaWFzID0gMCkKKyt7CisrICAgIHJldHVybiB0ZXh0dXJl
LnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zm
c2V0KTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CisrQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0X2ltcGwoCisrICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisrICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKysgICAgdGhyZWFk
IGludDIgY29uc3QgJm9mZnNldCwKKysgICAgZmxvYXQgYmlhcyA9IDApCisreworKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6OmJpYXMo
YmlhcyksIG9mZnNldCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBsKAorKyAgICB0aHJl
YWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgdGhyZWFkIG1ldGFsOjpzYW1w
bGVyIGNvbnN0ICZzYW1wbGVyLAorKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29v
cmQsCisrICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQsCisrICAgIGZsb2F0IGJpYXMgPSAw
KQorK3sKKysgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29y
ZC53LCBtZXRhbDo6YmlhcyhiaWFzKSwgb2Zmc2V0KTsKKyt9CisrKSIsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorKworK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVTaXplLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorKyNkZWZpbmUgQU5HTEVf
dGV4dHVyZVNpemUoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVTaXplX2ltcGwoKmVudi50ZXh0dXJl
LCBfX1ZBX0FSR1NfXykKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KKytBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgKKysgICAgdGhyZWFkIFRl
eHR1cmUgJnRleHR1cmUsCisrICAgIGludCBsZXZlbCkKKyt7CisrICAgIHJldHVybiBpbnQyKHRl
eHR1cmUuZ2V0X3dpZHRoKHVpbnQobGV2ZWwpKSwgdGV4dHVyZS5nZXRfaGVpZ2h0KHVpbnQobGV2
ZWwpKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1
cmUzZDxUPiAmdGV4dHVyZSwKKysgICAgaW50IGxldmVsKQorK3sKKysgICAgcmV0dXJuIGludDMo
dGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChs
ZXZlbCkpLCB0ZXh0dXJlLmdldF9kZXB0aCh1aW50KGxldmVsKSkpOworK30KKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVNp
emVfaW1wbCgKKysgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAor
KyAgICBpbnQgbGV2ZWwpCisreworKyAgICByZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1
aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0
X2FycmF5X3NpemUoKSk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorKyAgICB0aHJlYWQgbWV0
YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKysgICAgaW50IGxldmVsKQorK3sKKysg
ICAgcmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdl
dF9oZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9hcnJheV9zaXplKCkpOworK30KKysp
IiwKKysgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisrCisrLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKysKKysvLyBSZXR1cm5lZCBOYW1lIGlzIHZhbGlkIGZvciBhcyBsb25n
IGFzIGBidWZmZXJgIGlzIHN0aWxsIGFsaXZlLgorKy8vIFJldHVybnMgZmFsc2UgaWYgbm8gdGVt
cGxhdGUgYXJncyBleGlzdC4KKysvLyBSZXR1cm5zIGZhbHNlIGlmIGJ1ZmZlciBpcyBub3QgbGFy
Z2UgZW5vdWdoLgorKy8vCisrLy8gRXhhbXBsZToKKysvLyAgImZvbzwxLDI+IiAtLT4gImZvbzw+
IgorK3N0YXRpYyBzdGQ6OnBhaXI8TmFtZSwgYm9vbD4gTWFza1RlbXBsYXRlQXJncyhjb25zdCBO
YW1lICZuYW1lLCBzaXplX3QgYnVmZmVyU2l6ZSwgY2hhciAqYnVmZmVyKQorK3sKKysgICAgY29u
c3QgY2hhciAqYmVnaW4gPSBuYW1lLnJhd05hbWUoKS5kYXRhKCk7CisrICAgIGNvbnN0IGNoYXIg
KmVuZCAgID0gc3RyY2hyKGJlZ2luLCAnPCcpOworKyAgICBpZiAoIWVuZCkKKysgICAgeworKyAg
ICAgICAgcmV0dXJuIHt7fSwgZmFsc2V9OworKyAgICB9CisrICAgIHNpemVfdCBuID0gZW5kIC0g
YmVnaW47CisrICAgIGlmIChuICsgMyA+IGJ1ZmZlclNpemUpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiB7e30sIGZhbHNlfTsKKysgICAgfQorKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47
ICsraSkKKysgICAgeworKyAgICAgICAgYnVmZmVyW2ldID0gYmVnaW5baV07CisrICAgIH0KKysg
ICAgYnVmZmVyW24gKyAwXSA9ICc8JzsKKysgICAgYnVmZmVyW24gKyAxXSA9ICc+JzsKKysgICAg
YnVmZmVyW24gKyAyXSA9ICdcMCc7CisrICAgIHJldHVybiB7TmFtZShidWZmZXIsIG5hbWUuc3lt
Ym9sVHlwZSgpKSwgdHJ1ZX07CisrfQorKworK1Byb2dyYW1QcmVsdWRlOjpGdW5jVG9FbWl0dGVy
IFByb2dyYW1QcmVsdWRlOjpCdWlsZEZ1bmNUb0VtaXR0ZXIoKQorK3sKKysjZGVmaW5lIEVNSVRf
TUVUSE9EKG1ldGhvZCkgXAorKyAgICBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5j
dGlvbiAmKSAtPiB2b2lkIHsgcmV0dXJuIHBwLm1ldGhvZCgpOyB9CisrICAgIEZ1bmNUb0VtaXR0
ZXIgbWFwOworKworKyAgICBhdXRvIHB1dCA9IFsmXShOYW1lIG5hbWUsIEZ1bmNFbWl0dGVyIGVt
aXR0ZXIpIHsKKysgICAgICAgIEZ1bmNFbWl0dGVyICZkZXN0ID0gbWFwW25hbWVdOworKyAgICAg
ICAgQVNTRVJUKCFkZXN0KTsKKysgICAgICAgIGRlc3QgPSBlbWl0dGVyOworKyAgICB9OworKwor
KyAgICBhdXRvIHB1dEFuZ2xlID0gWyZdKGNvbnN0IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVy
IGVtaXR0ZXIpIHsKKysgICAgICAgIE5hbWUgbmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpBbmds
ZUludGVybmFsKTsKKysgICAgICAgIHB1dChuYW1lLCBlbWl0dGVyKTsKKysgICAgfTsKKysKKysg
ICAgYXV0byBwdXRCdWlsdEluID0gWyZdKGNvbnN0IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVy
IGVtaXR0ZXIpIHsKKysgICAgICAgIE5hbWUgbmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpCdWls
dEluKTsKKysgICAgICAgIHB1dChuYW1lLCBlbWl0dGVyKTsKKysgICAgfTsKKysKKysgICAgcHV0
QW5nbGUoImFkZHJlc3NvZiIsIEVNSVRfTUVUSE9EKGFkZHJlc3NvZikpOworKyAgICBwdXRBbmds
ZSgiY2FzdDw+IiwgRU1JVF9NRVRIT0QoY2FzdE1hdHJpeCkpOworKyAgICBwdXRBbmdsZSgiZWxl
bV9yZWYiLCBFTUlUX01FVEhPRCh2ZWN0b3JFbGVtUmVmKSk7CisrICAgIHB1dEFuZ2xlKCJmbGF0
dGVuIiwgRU1JVF9NRVRIT0QoZmxhdHRlbkFycmF5KSk7CisrICAgIHB1dEFuZ2xlKCJpbm91dCIs
IEVNSVRfTUVUSE9EKGlub3V0KSk7CisrICAgIHB1dEFuZ2xlKCJvdXQiLCBFTUlUX01FVEhPRChv
dXQpKTsKKysgICAgcHV0QW5nbGUoInN3aXp6bGVfcmVmIiwgRU1JVF9NRVRIT0Qoc3dpenpsZVJl
ZikpOworKworKyAgICBwdXRCdWlsdEluKCJ0ZXhlbEZldGNoIiwgRU1JVF9NRVRIT0QodGV4ZWxG
ZXRjaCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXhlbEZldGNoT2Zmc2V0IiwgRU1JVF9NRVRIT0Qo
dGV4ZWxGZXRjaE9mZnNldCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlIiwgW10oUHJvZ3Jh
bVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKysgICAgICAgIGNvbnN0IElt
bXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVO
YW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgp
OworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgx
KS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29v
cmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAg
PSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAgICAgY29uc3QgYm9vbCBiaWFzICAgICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbUNvdW50KCkgPj0gMzsKKysgICAgICAgIGlmICh0ZXh0dXJl
TmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZDwiKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChiaWFzKQorKyAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9kZXB0aDJk
X2Zsb2F0M19mbG9hdCgpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIHJl
dHVybiBwcC50ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aGN1
YmU8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBpZiAoYmlhcykKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHBwLnRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworKyAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoY3ViZV9m
bG9hdDQoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVy
ZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmRfYXJyYXk8IikpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29v
cmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKysg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVf
ZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdCgpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAg
ICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDQoKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0
aCgibWV0YWw6OnRleHR1cmUyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBp
ZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChiaWFzKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJh
eV9mbG9hdDNfZmxvYXQoKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsKKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYg
Y29vcmROID09IDQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAoYmlhcykK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0g
VEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDIpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgaWYgKGJpYXMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9mbG9hdCgpOworKyAgICAgICAgICAgIH0KKysgICAg
ICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0MigpOworKyAgICAgICAgfQor
KyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmRO
ID09IDMpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGJpYXMpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0M19mbG9h
dCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9nZW5l
cmljX2Zsb2F0MygpOworKyAgICAgICAgfQorKyAgICAgICAgVE9ETygpOworKyAgICB9KTsKKysg
ICAgcHV0QnVpbHRJbigidGV4dHVyZTFETG9kIiwgRU1JVF9NRVRIT0QodGV4dHVyZTFETG9kKSk7
CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUxRFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMURQ
cm9qKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUxRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0
ZXh0dXJlMURQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRCIsIEVNSVRfTUVU
SE9EKHRleHR1cmUyRCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRMb2QiLCBFTUlUX01F
VEhPRCh0ZXh0dXJlMkRMb2QpKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZTJEUHJvaiIsIEVN
SVRfTUVUSE9EKHRleHR1cmUyRFByb2opKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZTNETG9k
IiwgRU1JVF9NRVRIT0QodGV4dHVyZTNETG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUz
RFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlM0RQcm9qKSk7CisrICAgIHB1dEJ1aWx0SW4oInRl
eHR1cmUzRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlM0RQcm9qTG9kKSk7CisrICAgIHB1
dEJ1aWx0SW4oInRleHR1cmVDdWJlIiwgRU1JVF9NRVRIT0QodGV4dHVyZUN1YmUpKTsKKysgICAg
cHV0QnVpbHRJbigidGV4dHVyZUN1YmVMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlQ3ViZUxvZCkp
OworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlQ3ViZVByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
Q3ViZVByb2opKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZUN1YmVQcm9qTG9kIiwgRU1JVF9N
RVRIT0QodGV4dHVyZUN1YmVQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRFBy
b2pMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMkRQcm9qTG9kKSk7CisrICAgIHB1dEJ1aWx0SW4o
InRleHR1cmVHcmFkIiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1
bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAg
ICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJh
c2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25z
dCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAg
ICAgY29uc3QgVFR5cGUgJmRQZHggICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgyKS0+Z2V0VHlw
ZSgpOworKyAgICAgICAgY29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21p
bmFsU2l6ZSgpOworKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpk
ZXB0aDJkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRC
YXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzICYmIGRQZHhOID09IDIpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGgyZF9m
bG9hdDNfZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZF9hcnJheTwiKSkK
KysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkX2RlcHRoMmRhcnJheV9mbG9hdDRf
ZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlm
ICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGhjdWJlPCIpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYm
IGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQz
KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1l
LmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlY3ViZTwiKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MyAmJiBkUGR4TiA9PSAzKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9hdDNfZmxvYXQzKCk7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsK
KysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQy
X2Zsb2F0MigpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsK
KysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDRfZmxvYXQy
X2Zsb2F0MigpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IGRQZHhOKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROKCk7
CisrICAgICAgICB9CisrICAgICAgICBUT0RPKCk7CisrICAgIH0pOworKyAgICBwdXRCdWlsdElu
KCJ0ZXh0dXJlR3JhZE9mZnNldCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0
aW9uICZmdW5jKSB7CisrICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgdGV4dHVyZU5hbWUg
PQorKyAgICAgICAgICAgIEdldFRleHR1cmVUeXBlTmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkpLnJhd05hbWUoKTsKKysgICAgICAgIGNvbnN0IFRUeXBlICZj
b29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKysgICAgICAgIGNv
bnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3JkLmdldEJhc2ljVHlwZSgpOworKyAgICAg
ICAgY29uc3QgaW50IGNvb3JkTiAgICAgICAgICAgID0gY29vcmQuZ2V0Tm9taW5hbFNpemUoKTsK
KysgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4ICAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMikt
PmdldFR5cGUoKTsKKysgICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAgICAgICAgICA9IGRQZHgu
Z2V0Tm9taW5hbFNpemUoKTsKKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJt
ZXRhbDo6ZGVwdGgyZDwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zm
c2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgICAgIH0K
KysgICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6
ZGVwdGgyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zm
c2V0X2RlcHRoMmRhcnJheV9mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1l
dGFsOjpkZXB0aGN1YmU8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFz
aWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMykK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9m
ZnNldF9kZXB0aGN1YmVfZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50MygpOworKyAgICAgICAgICAg
IH0KKysgICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRh
bDo6dGV4dHVyZWN1YmU8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFz
aWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMykK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9m
ZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAg
ICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDNfZmxvYXQy
X2Zsb2F0Ml9pbnQyKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBU
QmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjb29y
ZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSBkUGR4TikKKysgICAg
ICAgIHsKKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19m
bG9hdE5fZmxvYXROX2Zsb2F0Tl9pbnROKCk7CisrICAgICAgICB9CisrICAgICAgICBUT0RPKCk7
CisrICAgIH0pOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlTG9kIiwgW10oUHJvZ3JhbVByZWx1
ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJs
ZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1
bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAg
ICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0
VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0
QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29y
ZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgo
Im1ldGFsOjpkZXB0aDJkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJh
c2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAzKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZGVwdGgyZF9mbG9hdDMo
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUu
YmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUyZF9hcnJheTwiKSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4g
PT0gMykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJl
TG9kX3RleHR1cmUyZGFycmF5X2Zsb2F0MygpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAg
ICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlTG9kX3Rl
eHR1cmUyZGFycmF5X2Zsb2F0NCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAy
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlTG9kX2dlbmVyaWNf
ZmxvYXQyKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKysgICAgICAgIHsKKysgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MygpOworKyAgICAgICAgfQorKyAgICAg
ICAgVE9ETygpOworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZUxvZE9mZnNldCIs
IEVNSVRfTUVUSE9EKHRleHR1cmVMb2RPZmZzZXQpKTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVy
ZU9mZnNldCIsIEVNSVRfTUVUSE9EKHRleHR1cmVPZmZzZXQpKTsKKysgICAgcHV0QnVpbHRJbigi
dGV4dHVyZVByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlUHJvaikpOworKyAgICBwdXRCdWlsdElu
KCJ0ZXh0dXJlUHJvakdyYWQiLCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlv
biAmZnVuYykgeworKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0K
KysgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7CisrICAgICAgICBjb25zdCBUVHlwZSAmY29v
cmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRUeXBlKCk7CisrICAgICAgICBjb25z
dCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBjb29yZC5nZXRCYXNpY1R5cGUoKTsKKysgICAgICAg
IGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7Cisr
ICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDIpLT5n
ZXRUeXBlKCk7CisrICAgICAgICBjb25zdCBpbnQgZFBkeE4gICAgICAgICAgICAgPSBkUGR4Lmdl
dE5vbWluYWxTaXplKCk7CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0
YWw6OmRlcHRoMmQ8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRf
ZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAgICAgIH0KKysgICAgICAg
IH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNk
PCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5
cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkX3RleHR1cmUzZF9m
bG9hdDRfZmxvYXQzX2Zsb2F0MygpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAg
ICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAz
ICYmIGRQZHhOID09IDIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisrICAgICAgICB9Cisr
ICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4g
PT0gNCAmJiBkUGR4TiA9PSAyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBwcC50
ZXh0dXJlUHJvakdyYWRfZ2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworKyAgICAgICAg
fQorKyAgICAgICAgVE9ETygpOworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZVBy
b2pHcmFkT2Zmc2V0IiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1
bmMpIHsKKysgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisrICAg
ICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5n
ZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAg
ICAgICAgID0gZnVuYy5nZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworKyAgICAgICAgY29uc3QgVEJh
c2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisrICAgICAgICBjb25z
dCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6ZSgpOworKyAgICAg
ICAgY29uc3QgVFR5cGUgJmRQZHggICAgICAgICAgID0gZnVuYy5nZXRQYXJhbSgyKS0+Z2V0VHlw
ZSgpOworKyAgICAgICAgY29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21p
bmFsU2l6ZSgpOworKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpk
ZXB0aDJkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRC
YXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0
X2RlcHRoMmRfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgICAgIH0KKysg
ICAgICAgIH0KKysgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4
dHVyZTNkPCIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRC
YXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDMpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0
X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0Rmxv
YXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJh
c2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMikKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0X2dlbmVyaWNf
ZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworKyAgICAgICAgfQorKyAgICAgICAgVE9ETygp
OworKyAgICB9KTsKKysgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pMb2QiLCBbXShQcm9ncmFt
UHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgeworKyAgICAgICAgY29uc3QgSW1t
dXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKysgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5h
bWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7
CisrICAgICAgICBjb25zdCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEp
LT5nZXRUeXBlKCk7CisrICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFzaWMgPSBjb29y
ZC5nZXRCYXNpY1R5cGUoKTsKKysgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9
IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisrICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5z
V2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pMb2RfZGVwdGgy
ZF9mbG9hdDQoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAodGV4
dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUzZDwiKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29y
ZE4gPT0gNCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlUHJvakxvZF90ZXh0dXJlM2RfZmxvYXQ0KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAg
fQorKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29v
cmROID09IDMpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9q
TG9kX2dlbmVyaWNfZmxvYXQzKCk7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKysg
ICAgICAgIH0KKysgICAgICAgIFRPRE8oKTsKKysgICAgfSk7CisrICAgIHB1dEJ1aWx0SW4oInRl
eHR1cmVQcm9qTG9kT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2pMb2RPZmZzZXQpKTsK
KysgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pPZmZzZXQiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
UHJvak9mZnNldCkpOworKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlU2l6ZSIsIEVNSVRfTUVUSE9E
KHRleHR1cmVTaXplKSk7CisrCisrICAgIHJldHVybiBtYXA7CisrCisrI3VuZGVmIEVNSVRfTUVU
SE9ECisrfQorKworK3ZvaWQgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0T3BlcmF0b3IoVE9wZXJhdG9y
IG9wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICpmdW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmFyZ1R5cGUwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgKmFyZ1R5cGUxKQorK3sKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFJhZGlhbnM6CisrICAgICAgICAgICAgcmFkaWFucygpOworKyAgICAg
ICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERlZ3JlZXM6CisrICAg
ICAgICAgICAgZGVncmVlcygpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEF0YW46CisrICAgICAgICAgICAgYXRhbigpOworKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1vZDoKKysgICAgICAgICAgICBtb2Qo
KTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZWZy
YWN0OgorKyAgICAgICAgICAgIHJlZnJhY3QoKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXN0YW5jZToKKysgICAgICAgICAgICBkaXN0YW5jZSgp
OworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlbmd0
aDoKKysgICAgICAgICAgICBsZW5ndGgoKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BEb3Q6CisrICAgICAgICAgICAgZG90KCk7CisrICAgICAgICAg
ICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm9ybWFsaXplOgorKyAgICAg
ICAgICAgIG5vcm1hbGl6ZSgpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEZhY2Vmb3J3YXJkOgorKyAgICAgICAgICAgIGZhY2Vmb3J3YXJkKCk7Cisr
ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmVmbGVjdDoK
KysgICAgICAgICAgICByZWZsZWN0KCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENv
czoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUYW46CisrICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQXNpbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBY29zOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNpbmg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Q29zaDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUYW5oOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEFzaW5oOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW5oOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEFiczoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbWE6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wUG93OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEV4cDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHAyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcExvZzoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2cyOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxv
b3I6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVHJ1bmM6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ2VpbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGcmFjdDoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BSb3VuZEV2ZW46CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9kZjoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZGV4cDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BGcmV4cDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbnZlcnNlc3FydDoKKysgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX21hdGgoKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFcXVhbDoKKysgICAgICAgICAgICBpZiAoYXJnVHlw
ZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEtPmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpOworKyAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICAvLyBFdmVuIGlmIEFyZzAgaXMgYSB2ZWN0b3Igb3IgbWF0cml4LCBpdCBjb3VsZCBhbHNv
IGJlIGFuIGFycmF5LgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNBcnJheSgpICYmIGFy
Z1R5cGUxLT5pc0FycmF5KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBlcXVh
bEFycmF5KCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsOgorKyAgICAgICAgICAgIGlmIChhcmdUeXBl
MC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIG5vdEVxdWFsVmVjdG9yKCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGVsc2UgaWYgKGFyZ1R5cGUwLT5nZXRTdHJ1Y3QoKSAmJiBhcmdUeXBlMS0+Z2V0U3Ry
dWN0KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBub3RFcXVhbFN0cnVjdCgp
OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICAvLyBTYW1lIGFzIGFib3ZlLgorKyAgICAg
ICAgICAgIGlmIChhcmdUeXBlMC0+aXNBcnJheSgpICYmIGFyZ1R5cGUxLT5pc0FycmF5KCkpCisr
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBub3RFcXVhbEFycmF5KCk7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcENyb3NzOgorKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCk7CisrICAg
ICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2lnbjoKKysg
ICAgICAgICAgICBzaWduKCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQ2xhbXA6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWluOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1heDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNaXg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3RlcDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BTbW9vdGhzdGVwOgorKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxf
Y29tbW9uKCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQWxsOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFueToKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJc25hbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJc2lu
ZjoKKysgICAgICAgICAgICBpbmNsdWRlX21ldGFsX3JlbGF0aW9uYWwoKTsKKysgICAgICAgICAg
ICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR4OgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcERGZHk6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRndp
ZHRoOgorKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKysgICAgICAgICAg
ICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGV0ZXJtaW5hbnQ6CisrICAgICAgICAgICAgaW5jbHVk
ZV9tZXRhbF9tYXRyaXgoKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BBZGQ6CisrICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgp
ICYmIGFyZ1R5cGUxLT5pc1NjYWxhcigpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgYWRkTWF0cml4U2NhbGFyKCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJyZWFr
OworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKysgICAgICAgICAgICBpZiAo
YXJnVHlwZTAtPmlzTWF0cml4KCkgJiYgYXJnVHlwZTEtPmlzU2NhbGFyKCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBzdWJNYXRyaXhTY2FsYXIoKTsKKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2
OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlMS0+aXNNYXRyaXgoKSkKKysgICAgICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpOworKyAg
ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ1R5cGUxLT5pc1Nj
YWxhcigpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBkaXZNYXRy
aXhTY2FsYXIoKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246Cisr
ICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpICYmIGFyZ1R5cGUxLT5pc01hdHJp
eCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlk
ZUFzc2lnbigpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxNYXRyaXhDb21wb25lbnRXaXNlOgorKyAgICAgICAg
ICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSAmJiBhcmdUeXBlMS0+aXNNYXRyaXgoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbXBvbmVudFdpc2VNdWx0aXBseSgpOwor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BPdXRlclByb2R1Y3Q6CisrICAgICAgICAgICAgb3V0ZXJQcm9kdWN0KCk7Cisr
ICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJz
ZToKKysgICAgICAgICAgICBzd2l0Y2ggKGFyZ1R5cGUwLT5nZXRDb2xzKCkpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICBpbnZl
cnNlMigpOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIGNh
c2UgMzoKKysgICAgICAgICAgICAgICAgICAgIGludmVyc2UzKCk7CisrICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgICAgICAg
ICAgaW52ZXJzZTQoKTsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisrICAgICAgICAgICAgbWF0bXVsQXNzaWdu
KCk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UHJlSW5jcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHByZUluY3JlbWVudE1hdHJpeCgpOworKyAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQb3N0SW5jcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRy
aXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHBvc3RJbmNyZW1lbnRNYXRy
aXgoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wUHJlRGVjcmVtZW50OgorKyAgICAgICAgICAgIGlmIChhcmdUeXBl
MC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHByZURlY3Jl
bWVudE1hdHJpeCgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAgICAgICAgICAgIGlm
IChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IHBvc3REZWNyZW1lbnRNYXRyaXgoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJl
YWs7CisrCisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wTmVnYXRpdmU6CisrICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmVnYXRlTWF0cml4KCk7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cENvbW1hOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEFkZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcElNb2RBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRM
ZWZ0QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3Np
Z246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNdWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0U2hpZnRSaWdodDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3I6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0d2lzZU9yOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExlc3NU
aGFuOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuRXF1YWw6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNz
VGhhbkNvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5F
cXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRo
YW5FcXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRl
clRoYW5Db21wb25lbnRXaXNlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxP
cjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsWG9yOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UG9zaXRpdmU6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE5vdDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90Q29tcG9uZW50V2lzZToKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlTm90OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1h
dHJpeFRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3Rv
clRpbWVzU2NhbGFyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0
cml4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzVmVjdG9yOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFJldHVybjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCcmVhazoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb250aW51ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BFcXVhbENvbXBvbmVudFdpc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90
RXF1YWxDb21wb25lbnRXaXNlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGly
ZWN0OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisrICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGbG9hdEJpdHNUb0ludDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bnRCaXRzVG9GbG9hdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVaW50Qml0c1RvRmxv
YXQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9VaW50OgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE51bGw6CisrICAgICAgICAgICAgLy8gZG8gbm90aGluZwor
KyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEtpbGw6
CisrICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9ncmFwaGljcygpOworKyAgICAgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tVbm9ybTJ4MTY6CisrICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Nub3JtMngxNjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQYWNrVW5vcm00eDg6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFj
a1Nub3JtNHg4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVucGFja1Nub3JtMngxNjoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisrICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrVW5vcm00eDg6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wVW5wYWNrU25vcm00eDg6CisrICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9wYWNrKCk7
CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFj
a0hhbGYyeDE2OgorKyAgICAgICAgICAgIHBhY2tfaGFsZl8yeDE2KCk7CisrICAgICAgICAgICAg
YnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4MTY6CisrICAg
ICAgICAgICAgdW5wYWNrX2hhbGZfMngxNigpOworKyAgICAgICAgICAgIGJyZWFrOworKworKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdGZpZWxkRXh0cmFjdDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRmaWVsZEluc2VydDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BCaXRmaWVsZFJldmVyc2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0Q291bnQ6
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmluZExTQjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGaW5kTVNCOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVhZGRDYXJy
eToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFVtdWxFeHRlbmRlZDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BJbXVsRXh0ZW5kZWQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJBdG9taWNDb3VudGVyOgorKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXJCdWZmZXI6CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWVtb3J5QmFycmllckltYWdlOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1l
bW9yeUJhcnJpZXJTaGFyZWQ6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1v
cnlCYXJyaWVyOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FkZDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNNaW46CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQXRvbWljTWF4OgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0FuZDoK
KysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNPcjoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BBdG9taWNYb3I6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWlj
RXhjaGFuZ2U6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQ29tcFN3YXA6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRW1pdFZlcnRleDoKKysgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BFbmRQcmltaXRpdmU6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRlRy
YW5zZm9ybToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tEb3VibGUyeDMyOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcEFycmF5TGVuZ3RoOgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAg
ICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb25zdHJ1Y3Q6
CisrICAgICAgICAgICAgQVNTRVJUKCFmdW5jKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKysgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BDYWxsQnVpbHRJbkZ1bmN0aW9uOgorKyAgICAgICAgICAgIEFTU0VSVChm
dW5jKTsKKysgICAgICAgICAgICBpZiAobUhhbmRsZWQuaW5zZXJ0KGZ1bmMpLnNlY29uZCkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSgqZnVuYyk7Cisr
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gZW5kID0gbUZ1bmNUb0VtaXR0ZXIuZW5kKCk7Cisr
ICAgICAgICAgICAgICAgIGF1dG8gaXRlciAgICAgID0gbUZ1bmNUb0VtaXR0ZXIuZmluZChuYW1l
KTsKKysgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorKyAgICAgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgICAgICBjaGFyIGJ1ZmZlclszMl07CisrICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1hc2sgPSBNYXNrVGVtcGxhdGVBcmdzKG5hbWUsIHNpemVvZihidWZmZXIpLCBi
dWZmZXIpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hc2suc2Vjb25kKQorKyAgICAgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSBtRnVuY1RvRW1p
dHRlci5maW5kKG1hc2suZmlyc3QpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IGVuZCkKKysgICAgICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byAmZW1pdHRlciA9IGl0ZXIt
PnNlY29uZDsKKysgICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIoKnRoaXMsICpmdW5jKTsKKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysg
ICAgfQorK30KKysKKyt2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFZhcmlhYmxlKGNvbnN0IE5h
bWUgJm5hbWUsIGNvbnN0IFRUeXBlICZ0eXBlKQorK3sKKysgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1
cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgpKQorKyAgICB7CisrICAgICAgICBjb25zdCBOYW1lIHR5
cGVOYW1lKCpzKTsKKysgICAgICAgIGlmICh0eXBlTmFtZS5iZWdpbnNXaXRoKE5hbWUoIlRleHR1
cmVFbnY8IikpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHRleHR1cmVFbnYoKTsKKysgICAg
ICAgIH0KKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIGlmIChuYW1lID09IGNv
bnN0YW50X25hbWVzOjprUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCk7CisrICAgICAgICB9CisrICAgIH0KKyt9
CisrCisrdm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUg
JnZhcikKKyt7CisrICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnZhcikuc2Vjb25kKQorKyAgICB7
CisrICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUodmFyKSwgdmFyLmdldFR5cGUoKSk7CisrICAg
IH0KKyt9CisrCisrdm9pZCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRTdHJ1Y3R1cmUoY29uc3QgVFN0
cnVjdHVyZSAmcykKKyt7CisrICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnMpLnNlY29uZCkKKysg
ICAgeworKyAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogcy5maWVsZHMoKSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgp
OworKyAgICAgICAgICAgIHZpc2l0VmFyaWFibGUoTmFtZSgqZmllbGQpLCB0eXBlKTsKKysgICAg
ICAgIH0KKysgICAgfQorK30KKysKKytib29sIFByb2dyYW1QcmVsdWRlOjp2aXNpdEJpbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSkKKyt7CisrICAgIGNvbnN0IFRUeXBlICZs
ZWZ0VHlwZSAgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKysgICAgY29uc3QgVFR5cGUg
JnJpZ2h0VHlwZSA9IG5vZGUtPmdldFJpZ2h0KCktPmdldFR5cGUoKTsKKysgICAgdmlzaXRPcGVy
YXRvcihub2RlLT5nZXRPcCgpLCBudWxscHRyLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpOworKyAg
ICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRVbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQorK3sKKysgICAgY29uc3QgVFR5cGUgJmFy
Z1R5cGUgPSBub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKTsKKysgICAgdmlzaXRPcGVyYXRv
cihub2RlLT5nZXRPcCgpLCBudWxscHRyLCAmYXJnVHlwZSk7CisrICAgIHJldHVybiB0cnVlOwor
K30KKysKKytib29sIFByb2dyYW1QcmVsdWRlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwg
VEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKKyt7CisrICAgIGNvbnN0IHNpemVfdCBhcmdDb3VudCA9
IG5vZGUtPmdldENoaWxkQ291bnQoKTsKKysKKysgICAgYXV0byBnZXRBcmdUeXBlID0gW25vZGUs
IGFyZ0NvdW50XShzaXplX3QgaW5kZXgpIC0+IGNvbnN0IFRUeXBlICYgeworKyAgICAgICAgQVNT
RVJUKGluZGV4IDwgYXJnQ291bnQpOworKyAgICAgICAgVEludGVybVR5cGVkICphcmcgPSBub2Rl
LT5nZXRDaGlsZE5vZGUoaW5kZXgpLT5nZXRBc1R5cGVkKCk7CisrICAgICAgICBBU1NFUlQoYXJn
KTsKKysgICAgICAgIHJldHVybiBhcmctPmdldFR5cGUoKTsKKysgICAgfTsKKysKKysgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jID0gbm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysKKysgICAgc3dpdGNo
IChub2RlLT5nZXRDaGlsZENvdW50KCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAg
ICAgIHsKKysgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCksIGZ1bmMsIG51
bGxwdHIpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIDE6
CisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUwID0gZ2V0QXJn
VHlwZSgwKTsKKysgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdldE9wKCksIGZ1bmMs
ICZhcmdUeXBlMCk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNh
c2UgMjoKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJnVHlwZTAgPSBn
ZXRBcmdUeXBlKDApOworKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlMSA9IGdldEFy
Z1R5cGUoMSk7CisrICAgICAgICAgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgpLCBmdW5j
LCAmYXJnVHlwZTAsICZhcmdUeXBlMSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysK
KysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVFR5cGUg
JmFyZ1R5cGUwID0gZ2V0QXJnVHlwZSgwKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJn
VHlwZTEgPSBnZXRBcmdUeXBlKDEpOworKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+
Z2V0T3AoKSwgZnVuYywgJmFyZ1R5cGUwLCAmYXJnVHlwZTEpOworKyAgICAgICAgfQorKyAgICAg
ICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgUHJv
Z3JhbVByZWx1ZGU6OnZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNsYXJhdGlvbiAq
bm9kZSkKKyt7CisrICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKCpub2Rl
KTsKKysgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBkZWNsLnN5bWJvbC5nZXRUeXBlKCk7CisrICAg
IGlmICh0eXBlLmlzU3RydWN0U3BlY2lmaWVyKCkpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRT
dHJ1Y3R1cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgpOworKyAgICAgICAgQVNTRVJUKHMpOworKyAg
ICAgICAgdmlzaXRTdHJ1Y3R1cmUoKnMpOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOworK30K
KysKKyt2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2Rl
KQorK3sKKysgICAgdmlzaXRWYXJpYWJsZShub2RlLT52YXJpYWJsZSgpKTsKKyt9CisrCisrYm9v
bCBzaDo6RW1pdFByb2dyYW1QcmVsdWRlKFRJbnRlcm1CbG9jayAmcm9vdCwgVEluZm9TaW5rQmFz
ZSAmb3V0LCBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKQorK3sKKysgICAgUHJvZ3Jh
bVByZWx1ZGUgcHJvZ3JhbVByZWx1ZGUob3V0LCBwcGMpOworKyAgICByb290LnRyYXZlcnNlKCZw
cm9ncmFtUHJlbHVkZSk7CisrICAgIHJldHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUu
aCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFt
UHJlbHVkZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTAwNDEzZgor
LS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgKK0BAIC0wLDAgKzEsMzUgQEAKKysvLworKy8vIENv
cHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisr
Ly8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1BST0dSQU1QUkVMVURFX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9QUk9HUkFNUFJFTFVERV9IXworKworKyNpbmNsdWRlIDx1bm9yZGVyZWRf
c2V0PgorKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKworK25hbWVzcGFjZSBz
aAorK3sKKysKKytjbGFzcyBUSW5mb1NpbmtCYXNlOworK2NsYXNzIFRJbnRlcm1CbG9jazsKKysK
KytzdHJ1Y3QgUHJvZ3JhbVByZWx1ZGVDb25maWcKKyt7CisrICAgIGJvb2wgaGFzU3RydWN0RXEg
PSBmYWxzZTsKKyt9OworKworKy8vIFRoaXMgZW1pdHMgZml4ZWQgaGVscGVyIE1ldGFsIGNvZGUg
ZGlyZWN0bHkgd2l0aG91dCBhZGRpbmcgY29kZSB0byB0aGUgQVNULiBUaGlzIHdhbGtzIHRoZSBB
U1QgdG8KKysvLyBmaWd1cmUgb3V0IHRoZSByZXF1aXJlZCB3aGF0IHByZWx1ZGUgTVNMIGNvZGUg
aXMgbmVlZGVkIGZvciB2YXJpb3VzIHRoaW5ncyBpbiB0aGUgQVNULiBZb3UgY2FuCisrLy8gdGhp
bmsgb2YgdGhpcyBhcyBlZmZlY3RpdmVseSBpbmxpbmluZyB2YXJpb3VzIHBvcnRpb25zIG9mIGEg
aGVscGVyIGxpYnJhcnkgaW50byB0aGUgZW1pdHRlZAorKy8vIE1ldGFsIHByb2dyYW0uCisrQU5H
TEVfTk9fRElTQ0FSRCBib29sIEVtaXRQcm9ncmFtUHJlbHVkZShUSW50ZXJtQmxvY2sgJnJvb3Qs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1NpbmtCYXNl
ICZvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQ
cm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysj
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1BST0dS
QU1QUkVMVURFX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNw
cAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmFhODE2OTYKKy0tLSAvZGV2
L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuY3BwCitAQCAtMCwwICsxLDEzMCBAQAorKy8vCisrLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
KysvLworKworKyNpbmNsdWRlIDxhbGdvcml0aG0+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+
CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV9vcHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorKworK3VzaW5n
IG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK25hbWVzcGFj
ZQorK3sKKysKKytjbGFzcyBSZWR1Y2VyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAg
ICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVEludGVyZmFjZUJsb2NrICosIHN0ZDo6bWFwPElt
bXV0YWJsZVN0cmluZywgY29uc3QgVFZhcmlhYmxlICo+PgorKyAgICAgICAgbUxpZnRlZE1hcDsK
KysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFi
bGUgKj4gbUluc3RhbmNlTWFwOworKworKyAgcHVibGljOgorKyAgICBSZWR1Y2VyKFRDb21waWxl
ciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIGZhbHNlKSB7fQor
KworKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24g
JmRlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZGVjbE5vZGUuZ2V0
Q2hpbGRDb3VudCgpID09IDEpOworKyAgICAgICAgVEludGVybU5vZGUgJm5vZGUgPSAqZGVjbE5v
ZGUuZ2V0Q2hpbGROb2RlKDApOworKworKyAgICAgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJv
bE5vZGUgPSBub2RlLmdldEFzU3ltYm9sTm9kZSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAmdmFyICAgICAgICA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7Cisr
ICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgICAgICAgID0gdmFyLmdldFR5cGUoKTsK
KysgICAgICAgICAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUgPSB2YXIuc3ltYm9sVHlw
ZSgpOworKyAgICAgICAgICAgIGlmIChjb25zdCBUSW50ZXJmYWNlQmxvY2sgKmludGVyZmFjZUJs
b2NrID0gdHlwZS5nZXRJbnRlcmZhY2VCbG9jaygpKQorKyAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgaWYgKHN5bWJvbFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHkpCisrICAgICAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJm5hbWVUb1ZhciA9IG1MaWZ0ZWRN
YXBbaW50ZXJmYWNlQmxvY2tdOworKyAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gcmVwbGFjZW1lbnRzOworKyAgICAgICAgICAgICAgICAgICAgZm9yIChURmll
bGQgKmZpZWxkIDogaW50ZXJmYWNlQmxvY2stPmZpZWxkcygpKQorKyAgICAgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gJmxpZnRlZFR5cGUgPSBDbG9uZVR5
cGUoKmZpZWxkLT50eXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsaWZ0
ZWRUeXBlLmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0gfHwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmdGVkVHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBU
UXVhbGlmaWVyOjpFdnFHbG9iYWwpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGxpZnRlZFR5
cGUuc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0pOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gKmxpZnRlZFZhciA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwg
ZmllbGQtPm5hbWUoKSwgJmxpZnRlZFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC0+c3ltYm9sVHlwZSgpKTsKKysKKysg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lVG9WYXJbZmllbGQtPm5hbWUoKV0gPSBsaWZ0ZWRW
YXI7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjaygK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1EZWNsYXJhdGlvbntuZXcg
VEludGVybVN5bWJvbChsaWZ0ZWRWYXIpfSk7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUocmVwbGFj
ZW1lbnRzKSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAg
ICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBBU1NFUlQodHlwZS5nZXRRdWFs
aWZpZXIoKSA9PSBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtKTsKKysKKysgICAgICAgICAgICAgICAg
ICAgIGF1dG8gJnN0cnVjdHVyZSA9CisrICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUU3Ry
dWN0dXJlKCZtU3ltYm9sVGFibGUsIGludGVyZmFjZUJsb2NrLT5uYW1lKCksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcmZhY2VCbG9jay0+ZmllbGRzKCks
IGludGVyZmFjZUJsb2NrLT5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgYXV0
byAmc3RydWN0VmFyID0gQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwgc3Ry
dWN0dXJlKTsKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJmluc3RhbmNlVmFyID0KKysgICAg
ICAgICAgICAgICAgICAgICAgICBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwg
c3RydWN0dXJlLCBOYW1lKHZhciksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtLCAmdHlwZS5nZXRBcnJheVNpemVz
KCkpOworKworKyAgICAgICAgICAgICAgICAgICAgbUluc3RhbmNlTWFwWyZ2YXJdID0gJmluc3Rh
bmNlVmFyOworKworKyAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnJlcGxhY2VtZW50
c1tdID0geworKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtRGVjbGFyYXRpb257
bmV3IFRJbnRlcm1TeW1ib2woJnN0cnVjdFZhcil9LAorKyAgICAgICAgICAgICAgICAgICAgICAg
IG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bmV3IFRJbnRlcm1TeW1ib2woJmluc3RhbmNlVmFyKX19
OworKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByZVJlc3VsdDo6TXVsdGkoc3RkOjpiZWdp
bihyZXBsYWNlbWVudHMpLCBzdGQ6OmVuZChyZXBsYWNlbWVudHMpKTsKKysgICAgICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiB7ZGVj
bE5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZp
c2l0U3ltYm9sUHJlKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS52YXJpYWJsZSgpOwor
KyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8gaXQgPSBtSW5zdGFuY2VNYXAuZmluZCgmdmFy
KTsKKysgICAgICAgICAgICBpZiAoaXQgIT0gbUluc3RhbmNlTWFwLmVuZCgpKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybVN5bWJvbChpdC0+c2Vj
b25kKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAoY29uc3QgVElu
dGVyZmFjZUJsb2NrICppYiA9IHZhci5nZXRUeXBlKCkuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBhdXRvIGl0ID0gbUxpZnRlZE1hcC5maW5kKGliKTsKKysg
ICAgICAgICAgICBpZiAoaXQgIT0gbUxpZnRlZE1hcC5lbmQoKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGF1dG8gKmxpZnRlZFZhciA9IGl0LT5zZWNvbmRbdmFyLm5hbWUoKV07
CisrICAgICAgICAgICAgICAgIEFTU0VSVChsaWZ0ZWRWYXIpOworKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKm5ldyBUSW50ZXJtU3ltYm9sKGxpZnRlZFZhcik7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgfQorKyAgICAgICAgcmV0dXJuIHN5bWJvbE5vZGU7CisrICAgIH0KKyt9OworKworK30g
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K2Jvb2wgc2g6OlJlZHVjZUludGVyZmFjZUJsb2NrcyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50
ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBSZWR1Y2VyIHJlZHVjZXIoY29tcGlsZXIpOworKyAg
ICBpZiAoIXJlZHVjZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBmYWxzZTsKKysgICAgfQorKworKyAgICBpZiAoIVNlcGFyYXRlRGVjbGFyYXRpb25zKCZjb21w
aWxlciwgJnJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysK
KysgICAgcmV0dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VC
bG9ja3MuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM2OTVjYmEKKy0t
LSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaAorQEAgLTAsMCArMSwzNSBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUkVEVUNFSU5URVJGQUNFQkxPQ0tTX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KKysKKysj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5oIgorKworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBUaGlzIHJld3Jp
dGVzIGludGVyZmFjZSBibG9jayBkZWNsYXJhdGlvbnMgb25seS4KKysvLworKy8vIEFjY2VzcyBv
ZiBpbnRlcmZhY2UgYmxvY2tzIGlzIG5vdCByZXdyaXR0ZW4gKGUuZy4gVE9wZXJhdG9yOjpFT3BJ
bmRleERpcmVjdEludGVyZmFjZUJsb2NrKS4gLy8KKysvLyBYWFg6IF4gU3RpbGwgdHJ1ZT8KKysv
LworKy8vIEV4YW1wbGU6CisrLy8gIHVuaWZvcm0gRm9vIHsgaW50IHg7IH07CisrLy8gQmVjb21l
czoKKysvLyAgdW5pZm9ybSBpbnQgeDsKKysvLworKy8vIEV4YW1wbGU6CisrLy8gIHVuaWZvcm0g
Rm9vIHsgaW50IHg7IH0gZm9vOworKy8vIEJlY29tZXM6CisrLy8gIHN0cnVjdCBGb28geyBpbnQg
eDsgfTsgdW5pZm9ybSBGb28geDsKKysvLworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZWR1Y2VJ
bnRlcmZhY2VCbG9ja3MoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KTsK
KysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFRFVDRUlOVEVSRkFDRUJMT0NLU19IXworZGlmZiAt
LWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZl
cmVuY2UuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZWZlcmVuY2UuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjRiNWQ4NmMK
Ky0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZWZlcmVuY2UuaAorQEAgLTAsMCArMSw1MCBAQAorKy8vCisrLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLwor
KworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVG
RVJFTkNFX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJ
UkVDVF9SRUZFUkVOQ0VfSF8KKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gU2ltaWxhciB0
byBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyLCBidXQgYWxzbyBsaWZ0cyBjb21wYXJpc29uIG9wZXJh
dG9ycy4KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytjbGFzcyBSZWYKKyt7CisrICBwdWJsaWM6
CisrICAgIFJlZihjb25zdCBSZWYgJikgPSBkZWZhdWx0OworKyAgICBSZWYoUmVmICYmKSAgICAg
ID0gZGVmYXVsdDsKKysgICAgUmVmKFQgJnJlZikgOiBtUHRyKCZyZWYpIHt9CisrCisrICAgIFJl
ZiAmb3BlcmF0b3I9KGNvbnN0IFJlZiAmKSA9IGRlZmF1bHQ7CisrICAgIFJlZiAmb3BlcmF0b3I9
KFJlZiAmJikgPSBkZWZhdWx0OworKworKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmICZv
dGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPT0gKm90aGVyLm1QdHI7IH0KKysgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFJlZiAmb3RoZXIpIGNvbnN0IHsgcmV0dXJuICptUHRyICE9ICpvdGhl
ci5tUHRyOyB9CisrICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBSZWYgJm90aGVyKSBjb25zdCB7
IHJldHVybiAqbVB0ciA8PSAqb3RoZXIubVB0cjsgfQorKyAgICBib29sIG9wZXJhdG9yPj0oY29u
c3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPj0gKm90aGVyLm1QdHI7IH0KKysg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIg
PCAqb3RoZXIubVB0cjsgfQorKyAgICBib29sIG9wZXJhdG9yPihjb25zdCBSZWYgJm90aGVyKSBj
b25zdCB7IHJldHVybiAqbVB0ciA+ICpvdGhlci5tUHRyOyB9CisrCisrICAgIFQgJmdldCgpIHsg
cmV0dXJuICptUHRyOyB9CisrICAgIFQgY29uc3QgJmdldCgpIGNvbnN0IHsgcmV0dXJuICptUHRy
OyB9CisrCisrICAgIG9wZXJhdG9yIFQgJigpIHsgcmV0dXJuICptUHRyOyB9CisrICAgIG9wZXJh
dG9yIFQgY29uc3QgJigpIGNvbnN0IHsgcmV0dXJuICptUHRyOyB9CisrCisrICAgIG9wZXJhdG9y
IFQgKigpIHsgcmV0dXJuICptUHRyOyB9CisrICAgIG9wZXJhdG9yIFQgY29uc3QgKigpIGNvbnN0
IHsgcmV0dXJuICptUHRyOyB9CisrCisrICBwcml2YXRlOgorKyAgICBUICptUHRyOworK307Cisr
CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrdXNpbmcgQ1JlZiA9IFJlZjxUIGNvbnN0PjsKKysK
Kyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFRkVSRU5DRV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0
aW9ucy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg
MDAwMDAwMC4uYzc3ODE3NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcAor
QEAgLTAsMCArMSw5MSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9B
c3RIZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0lu
dGVybVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrY2xhc3MgUmV3cml0ZXIgOiBwdWJs
aWMgVEludGVybVJlYnVpbGQKKyt7CisrICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGNvbnN0
IFRWYXJpYWJsZSAqPj4gbURlY2xhcmVkVmFyU3RhY2s7CisrCisrICBwdWJsaWM6CisrICAgIFJl
d3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRy
dWUsIHRydWUpIHt9CisrCisrICAgIH5SZXdyaXRlcigpIG92ZXJyaWRlIHsgQVNTRVJUKG1EZWNs
YXJlZFZhclN0YWNrLmVtcHR5KCkpOyB9CisrCisrICBwcml2YXRlOgorKyAgICBQcmVSZXN1bHQg
dmlzaXRTd2l0Y2hQcmUoVEludGVybVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAg
ICAgICAgbURlY2xhcmVkVmFyU3RhY2suZW1wbGFjZV9iYWNrKCk7CisrICAgICAgICByZXR1cm4g
bm9kZTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3dpdGNoUG9zdChUSW50ZXJt
U3dpdGNoICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoIW1EZWNsYXJl
ZFZhclN0YWNrLmVtcHR5KCkpOworKyAgICAgICAgY29uc3QgYXV0byB2YXJzID0gc3RkOjptb3Zl
KG1EZWNsYXJlZFZhclN0YWNrLmJhY2soKSk7CisrICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5w
b3BfYmFjaygpOworKyAgICAgICAgaWYgKCF2YXJzLmVtcHR5KCkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgYXV0byAmYmxvY2sgPSAqbmV3IFRJbnRlcm1CbG9jaygpOworKyAgICAgICAgICAg
IGZvciAoY29uc3QgVFZhcmlhYmxlICp2YXIgOiB2YXJzKQorKyAgICAgICAgICAgIHsKKysgICAg
ICAgICAgICAgICAgYmxvY2suYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257
dmFyfSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGJsb2NrLmFwcGVuZFN0YXRlbWVu
dCgmbm9kZSk7CisrICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworKyAgICAgICAgfQorKyAgICAg
ICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRp
b25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBpZiAoIW1EZWNsYXJlZFZhclN0YWNrLmVtcHR5KCkpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgVEludGVybU5vZGUgKnBhcmVudCA9IGdldFBhcmVudE5vZGUoKTsKKysgICAgICAgICAgICBp
ZiAocGFyZW50LT5nZXRBc0Jsb2NrKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBUSW50ZXJtTm9kZSAqZ3JhbmRwYXJlbnQgPSBnZXRQYXJlbnROb2RlKDEpOworKyAgICAgICAg
ICAgICAgICBpZiAoZ3JhbmRwYXJlbnQgJiYgZ3JhbmRwYXJlbnQtPmdldEFzU3dpdGNoTm9kZSgp
KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbiBk
ZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgbURlY2xh
cmVkVmFyU3RhY2suYmFjaygpLnB1c2hfYmFjaygmZGVjbC5zeW1ib2wudmFyaWFibGUoKSk7Cisr
ICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5pbml0RXhwcikKKysgICAgICAgICAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtQmluYXJ5
KFRPcGVyYXRvcjo6RU9wQXNzaWduLCAmZGVjbC5zeW1ib2wsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsLmluaXRFeHByKTsKKysgICAgICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAg
ICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysg
ICAgICAgIH0KKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytib29s
IHNoOjpSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJt
QmxvY2sgJnJvb3QpCisreworKyAgICBpZiAoIVJld3JpdGVyKGNvbXBpbGVyKS5yZWJ1aWxkUm9v
dChyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJl
dHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9u
cy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTVhODgyMQorLS0tIC9k
ZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmgKK0BAIC0wLDAgKzEsNTAgQEAKKysvLworKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFQ0FTRURFQ0xBUkFUSU9OU19IXworKwor
KyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIEVYQU1QTEUK
KysvLyAgICBzd2l0Y2ggKGV4cHIpCisrLy8gICAgeworKy8vICAgICAgY2FzZSAwOgorKy8vICAg
ICAgICBpbnQgeCA9IDA7CisrLy8gICAgICAgIGJyZWFrOworKy8vICAgICAgY2FzZSAxOgorKy8v
ICAgICAgICBpbnQgeSA9IDA7CisrLy8gICAgICAgIHsKKysvLyAgICAgICAgICBpbnQgeiA9IDA7
CisrLy8gICAgICAgIH0KKysvLyAgICAgICAgYnJlYWs7CisrLy8gICAgfQorKy8vIEJlY29tZXMK
KysvLyAgICB7CisrLy8gICAgICBpbnQgeDsKKysvLyAgICAgIGludCB5OworKy8vICAgICAgc3dp
dGNoIChleHByKQorKy8vICAgICAgeworKy8vICAgICAgICBjYXNlIDA6CisrLy8gICAgICAgICAg
eCA9IDA7CisrLy8gICAgICAgICAgYnJlYWs7CisrLy8gICAgICAgIGNhc2UgMToKKysvLyAgICAg
ICAgICB5ID0gMDsKKysvLyAgICAgICAgICB7CisrLy8gICAgICAgICAgICBpbnQgeiA9IDA7Cisr
Ly8gICAgICAgICAgfQorKy8vICAgICAgICAgIGJyZWFrOworKy8vICAgICAgfQorKy8vICAgIH0K
KytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMoVENvbXBpbGVy
ICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gK
KysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNs
cy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4
IDAwMDAwMDAuLjRhZDVhMzYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMu
Y3BwCitAQCAtMCwwICsxLDExNCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlm
aWVyRGVjbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvSW50ZXJtUmVidWlsZC5oIgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKytuYW1lc3Bh
Y2UKKyt7CisrCisrY2xhc3MgRmluZERlY2xhcmVkR2xvYmFscyA6IHB1YmxpYyBUSW50ZXJtUmVi
dWlsZAorK3sKKysgIHB1YmxpYzoKKysgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRWYXJp
YWJsZSAqPiBtRGVjbGFyZWRHbG9iYWxzOworKworKyAgICBGaW5kRGVjbGFyZWRHbG9iYWxzKFRD
b21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIGZhbHNl
KSB7fQorKworKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFy
YXRpb24gJmRlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50ZXJtTm9kZSAq
ZGVjbGFyYXRvck5vZGUgPSBkZWNsTm9kZS5nZXRDaGlsZE5vZGUoMCk7CisrICAgICAgICBUSW50
ZXJtU3ltYm9sICpzeW1ib2xOb2RlICAgPSBudWxscHRyOworKworKyAgICAgICAgaWYgKFRJbnRl
cm1CaW5hcnkgKmluaXROb2RlID0gZGVjbGFyYXRvck5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpKQor
KyAgICAgICAgeworKyAgICAgICAgICAgIHN5bWJvbE5vZGUgPSBpbml0Tm9kZS0+Z2V0TGVmdCgp
LT5nZXRBc1N5bWJvbE5vZGUoKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAg
IHsKKysgICAgICAgICAgICBzeW1ib2xOb2RlID0gZGVjbGFyYXRvck5vZGUtPmdldEFzU3ltYm9s
Tm9kZSgpOworKyAgICAgICAgfQorKworKyAgICAgICAgQVNTRVJUKHN5bWJvbE5vZGUpOworKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworKwor
KyAgICAgICAgbURlY2xhcmVkR2xvYmFscy5pbnNlcnQoJnZhcik7CisrCisrICAgICAgICByZXR1
cm4ge2RlY2xOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICB9CisrCisrICAgIFByZVJl
c3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0
czo6TmVpdGhlcn07CisrICAgIH0KKyt9OworKworK2NsYXNzIFJld3JpdGVyIDogcHVibGljIFRJ
bnRlcm1SZWJ1aWxkCisreworKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFZh
cmlhYmxlICo+ICZtRGVjbGFyZWRHbG9iYWxzOworKyAgICBJbnZhcmlhbnRzICZtT3V0SW52YXJp
YW50czsKKysKKysgIHB1YmxpYzoKKysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwK
KysgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRWYXJpYWJsZSAq
PiAmZGVjbGFyZWRHbG9iYWxzLAorKyAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJbnZhcmlh
bnRzKQorKyAgICAgICAgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpLAor
KyAgICAgICAgICBtRGVjbGFyZWRHbG9iYWxzKGRlY2xhcmVkR2xvYmFscyksCisrICAgICAgICAg
IG1PdXRJbnZhcmlhbnRzKG91dEludmFyaWFudHMpCisrICAgIHt9CisrCisrICAgIFByZVJlc3Vs
dCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uUHJlKAorKyAgICAgICAgVEludGVybUds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZncURlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBUSW50ZXJtU3ltYm9sICZzeW1ib2xOb2RlID0gKmdxRGVjbE5vZGUuZ2V0U3ltYm9s
KCk7CisrICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciAgICAgID0gc3ltYm9sTm9kZS52YXJp
YWJsZSgpOworKworKyAgICAgICAgaWYgKGdxRGVjbE5vZGUuaXNJbnZhcmlhbnQoKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBtT3V0SW52YXJpYW50cy5pbnNlcnQodmFyKTsKKysgICAgICAg
IH0KKysKKysgICAgICAgIGlmIChtRGVjbGFyZWRHbG9iYWxzLmZpbmQoJnZhcikgPT0gbURlY2xh
cmVkR2xvYmFscy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBU
SW50ZXJtRGVjbGFyYXRpb257JnN5bWJvbE5vZGV9OworKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0RGVjbGFyYXRpb25Q
cmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUHJlUmVz
dWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24g
Jm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRz
OjpOZWl0aGVyfTsKKysgICAgfQorK307CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
KworK2Jvb2wgc2g6OlJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscyhUQ29tcGlsZXIgJmNvbXBp
bGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMg
Jm91dEludmFyaWFudHMpCisreworKyAgICBGaW5kRGVjbGFyZWRHbG9iYWxzIGZkZyhjb21waWxl
cik7CisrICAgIGlmICghZmRnLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICB7CisrICAgICAgICBM
T0dJQ19FUlJPUigpOworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIFJl
d3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBmZGcubURlY2xhcmVkR2xvYmFscywgb3V0SW52YXJp
YW50cyk7CisrICAgIGlmICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJ1ZTsKKyt9Citk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCituZXcg
ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTEzMWJjYQorLS0tIC9kZXYvbnVsbAor
KysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCitAQCAtMCwwICsxLDQ4IEBACisrLy8KKysvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8v
CisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9S
RVdSSVRFR0xPQkFMUVVBTElGSUVSREVDTFNfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJRVJERUNMU19IXwor
KworKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKworKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0NvbXBpbGVyLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIFRyYWNrcyBU
VmFyaWFibGVzIGFuZCBURmllbGRzIHRoYXQgYXJlIG1hcmtlZCBhcyAiaW52YXJpYW50Ii4KKytj
bGFzcyBJbnZhcmlhbnRzCisreworKyAgcHVibGljOgorKyAgICB2b2lkIGluc2VydChjb25zdCBU
VmFyaWFibGUgJnZhcikgeyBtSW52YXJpYW50cy5pbnNlcnQoJnZhcik7IH0KKysKKysgICAgdm9p
ZCBpbnNlcnQoY29uc3QgVEZpZWxkICZmaWVsZCkgeyBtSW52YXJpYW50cy5pbnNlcnQoJmZpZWxk
KTsgfQorKworKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdAor
KyAgICB7CisrICAgICAgICByZXR1cm4gbUludmFyaWFudHMuZmluZCgmdmFyKSAhPSBtSW52YXJp
YW50cy5lbmQoKTsKKysgICAgfQorKworKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFRGaWVsZCAm
ZmllbGQpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBtSW52YXJpYW50cy5maW5kKCZm
aWVsZCkgIT0gbUludmFyaWFudHMuZW5kKCk7CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAg
IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCB2b2lkICo+IG1JbnZhcmlhbnRzOworK307CisrCisr
Ly8gVGhpcyByZXdyaXRlcyBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25zIGFzIFRJ
bnRlcm1EZWNsYXJhdGlvbnMuCisrLy8gYG91dEludmFyaWFudHNgIGlzIHBvcHVsYXRlZCB3aXRo
IHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBsb3N0IGJ5IHN1Y2ggYQor
Ky8vIHRyYW5zZm9ybS4KKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJ
bnZhcmlhbnRzKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJ
RVJERUNMU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5jcHAKK25ldyBmaWxlIG1v
ZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDE0ZjQwCistLS0gL2Rldi9udWxsCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdv
cmRzLmNwcAorQEAgLTAsMCArMSw0MzQgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSA8
Y2N0eXBlPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxsaW1pdHM+CisrI2luY2x1
ZGUgPHVub3JkZXJlZF9tYXA+CisrI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisrCisrI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMu
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUtleXdvcmRzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisr
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisrdXNpbmcgUmVtYXBwaW5nID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0
IFQgKiwgY29uc3QgVCAqPjsKKysKKytjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVi
dWlsZAorK3sKKysgIHByaXZhdGU6CisrICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJsZVN0cmlu
Zz4gJm1LZXl3b3JkczsKKysgICAgSWRHZW4gJm1JZEdlbjsKKysgICAgUmVtYXBwaW5nPFRGaWVs
ZD4gbW9kaWZpZWRGaWVsZHM7CisrICAgIFJlbWFwcGluZzxURmllbGRMaXN0PiBtRmllbGRMaXN0
czsKKysgICAgUmVtYXBwaW5nPFRGdW5jdGlvbj4gbUZ1bmN0aW9uczsKKysgICAgUmVtYXBwaW5n
PFRJbnRlcmZhY2VCbG9jaz4gbUludGVyZmFjZUJsb2NrczsKKysgICAgUmVtYXBwaW5nPFRTdHJ1
Y3R1cmU+IG1TdHJ1Y3R1cmVzOworKyAgICBSZW1hcHBpbmc8VFZhcmlhYmxlPiBtVmFyaWFibGVz
OworKyAgICBzdGQ6OnN0cmluZyBtTmV3TmFtZUJ1ZmZlcjsKKysKKysgIHByaXZhdGU6CisrICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorKyAgICBJbW11dGFibGVTdHJpbmcgbWF5YmVDcmVhdGVO
ZXdOYW1lKFQgY29uc3QgJm9iamVjdCkKKysgICAgeworKyAgICAgICAgaWYgKG5lZWRzUmVuYW1p
bmcob2JqZWN0LCBmYWxzZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG1JZEdl
bi5jcmVhdGVOZXdOYW1lKE5hbWUob2JqZWN0KSkucmF3TmFtZSgpOworKyAgICAgICAgfQorKyAg
ICAgICAgcmV0dXJuIE5hbWUob2JqZWN0KS5yYXdOYW1lKCk7CisrICAgIH0KKysKKysgICAgY29u
c3QgVEZpZWxkICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRGaWVsZCAmZmllbGQpCisrICAgIHsKKysg
ICAgICAgIGF1dG8gKnJlbmFtZWQgPQorKyAgICAgICAgICAgIG5ldyBURmllbGQoY29uc3RfY2Fz
dDxUVHlwZSAqPigmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoKmZpZWxkLnR5cGUoKSkpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgbWF5YmVDcmVhdGVOZXdOYW1lKGZpZWxkKSwgZmllbGQubGluZSgp
LCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAgICAgIHJldHVybiByZW5hbWVk
OworKyAgICB9CisrCisrICAgIGNvbnN0IFRGaWVsZExpc3QgKmNyZWF0ZVJlbmFtZWQoY29uc3Qg
VEZpZWxkTGlzdCAmZmllbGRMaXN0KQorKyAgICB7CisrICAgICAgICBhdXRvICpyZW5hbWVkID0g
bmV3IFRGaWVsZExpc3QoKTsKKysgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IGZp
ZWxkTGlzdCkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZW5hbWVkLT5wdXNoX2JhY2soY29u
c3RfY2FzdDxURmllbGQgKj4oJmdldFJlbmFtZWRPck9yaWdpbmFsKCpmaWVsZCkpKTsKKysgICAg
ICAgIH0KKysgICAgICAgIHJldHVybiByZW5hbWVkOworKyAgICB9CisrCisrICAgIGNvbnN0IFRG
dW5jdGlvbiAqY3JlYXRlUmVuYW1lZChjb25zdCBURnVuY3Rpb24gJmZ1bmN0aW9uKQorKyAgICB7
CisrICAgICAgICBhdXRvICpyZW5hbWVkID0KKysgICAgICAgICAgICBuZXcgVEZ1bmN0aW9uKCZt
U3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShmdW5jdGlvbiksIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2V0UmVuYW1lZE9yT3Jp
Z2luYWwoZnVuY3Rpb24uZ2V0UmV0dXJuVHlwZSgpKSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uLmlzS25vd25Ub05vdEhhdmVTaWRlRWZmZWN0cygpKTsKKysKKysgICAgICAg
IGNvbnN0IHNpemVfdCBwYXJhbUNvdW50ID0gZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOworKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisrICAgICAgICB7
CisrICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZwYXJhbSA9ICpmdW5jdGlvbi5nZXRQYXJh
bShpKTsKKysgICAgICAgICAgICByZW5hbWVkLT5hZGRQYXJhbWV0ZXIoJmdldFJlbmFtZWRPck9y
aWdpbmFsKHBhcmFtKSk7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoZnVuY3Rpb24uaXNE
ZWZpbmVkKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmVuYW1lZC0+c2V0RGVmaW5lZCgp
OworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKGZ1bmN0aW9uLmhhc1Byb3RvdHlwZURlY2xh
cmF0aW9uKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmVuYW1lZC0+c2V0SGFzUHJvdG90
eXBlRGVjbGFyYXRpb24oKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiByZW5hbWVk
OworKyAgICB9CisrCisrICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqY3JlYXRlUmVuYW1lZChj
b25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQorKyAgICB7CisrICAgICAgICBU
TGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllciA9IFRMYXlvdXRRdWFsaWZpZXI6OkNyZWF0
ZSgpOworKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBpbnRlcmZh
Y2VCbG9jay5ibG9ja1N0b3JhZ2UoKTsKKysgICAgICAgIGxheW91dFF1YWxpZmllci5iaW5kaW5n
ICAgICAgICAgID0gaW50ZXJmYWNlQmxvY2suYmxvY2tCaW5kaW5nKCk7CisrCisrICAgICAgICBh
dXRvICpyZW5hbWVkID0KKysgICAgICAgICAgICBuZXcgVEludGVyZmFjZUJsb2NrKCZtU3ltYm9s
VGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShpbnRlcmZhY2VCbG9jayksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoaW50ZXJmYWNlQmxvY2su
ZmllbGRzKCkpLCBsYXlvdXRRdWFsaWZpZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLCBpbnRlcmZhY2VCbG9jay5leHRlbnNpb24o
KSk7CisrCisrICAgICAgICByZXR1cm4gcmVuYW1lZDsKKysgICAgfQorKworKyAgICBjb25zdCBU
U3RydWN0dXJlICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKKysg
ICAgeworKyAgICAgICAgYXV0byAqcmVuYW1lZCA9CisrICAgICAgICAgICAgbmV3IFRTdHJ1Y3R1
cmUoJm1TeW1ib2xUYWJsZSwgbWF5YmVDcmVhdGVOZXdOYW1lKHN0cnVjdHVyZSksCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKHN0cnVjdHVyZS5maWVs
ZHMoKSksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworKworKyAgICAgICAgcmVuYW1lZC0+
c2V0QXRHbG9iYWxTY29wZShzdHJ1Y3R1cmUuYXRHbG9iYWxTY29wZSgpKTsKKysKKysgICAgICAg
IHJldHVybiByZW5hbWVkOworKyAgICB9CisrCisrICAgIGNvbnN0IFRUeXBlICpjcmVhdGVSZW5h
bWVkKGNvbnN0IFRUeXBlICZ0eXBlKQorKyAgICB7CisrICAgICAgICBUVHlwZSAqcmVuYW1lZDsK
KysKKysgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJlbmFtZWQgPSBuZXcgVFR5cGUoJmdl
dFJlbmFtZWRPck9yaWdpbmFsKCpzdHJ1Y3R1cmUpLCB0eXBlLmlzU3RydWN0U3BlY2lmaWVyKCkp
OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAoY29uc3QgVEludGVyZmFjZUJsb2NrICpp
bnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZW5hbWVkID0gbmV3IFRUeXBlKCZnZXRSZW5hbWVkT3JPcmlnaW5hbCgqaW50
ZXJmYWNlQmxvY2spLCB0eXBlLmdldFF1YWxpZmllcigpLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSk7CisrICAgICAgICB9CisrICAg
ICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgIC8vIENh
bid0IHJlbmFtZSBidWlsdC1pbiB0eXBlcy4KKysgICAgICAgICAgICByZW5hbWVkID0gbnVsbHB0
cjsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICByZW5hbWVkLT5tYWtlQXJyYXlzKHR5cGUuZ2V0QXJyYXlTaXplcygp
KTsKKysgICAgICAgIH0KKysgICAgICAgIHJlbmFtZWQtPnNldFByZWNpc2UodHlwZS5pc1ByZWNp
c2UoKSk7CisrICAgICAgICByZW5hbWVkLT5zZXRJbnZhcmlhbnQodHlwZS5pc0ludmFyaWFudCgp
KTsKKysgICAgICAgIHJlbmFtZWQtPnNldE1lbW9yeVF1YWxpZmllcih0eXBlLmdldE1lbW9yeVF1
YWxpZmllcigpKTsKKysgICAgICAgIHJlbmFtZWQtPnNldExheW91dFF1YWxpZmllcih0eXBlLmdl
dExheW91dFF1YWxpZmllcigpKTsKKysKKysgICAgICAgIHJldHVybiByZW5hbWVkOworKyAgICB9
CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqY3JlYXRlUmVuYW1lZChjb25zdCBUVmFyaWFibGUg
JnZhcmlhYmxlKQorKyAgICB7CisrICAgICAgICBhdXRvICpyZW5hbWVkID0gbmV3IFRWYXJpYWJs
ZSgmbVN5bWJvbFRhYmxlLCBtYXliZUNyZWF0ZU5ld05hbWUodmFyaWFibGUpLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKHZhcmlh
YmxlLmdldFR5cGUoKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xUeXBlOjpBbmdsZUludGVybmFsLCB2YXJpYWJsZS5leHRlbnNpb24oKSk7CisrCisrICAg
ICAgICByZXR1cm4gcmVuYW1lZDsKKysgICAgfQorKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKysgICAgY29uc3QgVCAqdHJ5R2V0UmVuYW1lZEltcGwoY29uc3QgVCAmb2JqZWN0LCBSZW1h
cHBpbmc8VD4gKnJlbWFwcGluZykKKysgICAgeworKyAgICAgICAgaWYgKCFuZWVkc1JlbmFtaW5n
KG9iamVjdCwgdHJ1ZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAocmVtYXBwaW5nKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGF1dG8gaXQgPSByZW1hcHBpbmctPmZpbmQoJm9iamVjdCk7CisrICAgICAgICAg
ICAgaWYgKGl0ICE9IHJlbWFwcGluZy0+ZW5kKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9Cisr
CisrICAgICAgICBjb25zdCBUICpyZW5hbWVkT2JqZWN0ID0gY3JlYXRlUmVuYW1lZChvYmplY3Qp
OworKworKyAgICAgICAgaWYgKHJlbWFwcGluZykKKysgICAgICAgIHsKKysgICAgICAgICAgICAo
KnJlbWFwcGluZylbJm9iamVjdF0gPSByZW5hbWVkT2JqZWN0OworKyAgICAgICAgfQorKworKyAg
ICAgICAgcmV0dXJuIHJlbmFtZWRPYmplY3Q7CisrICAgIH0KKysKKysgICAgY29uc3QgVEZpZWxk
ICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRGaWVsZCAmZmllbGQpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiB0cnlHZXRSZW5hbWVkSW1wbChmaWVsZCwgJm1vZGlmaWVkRmllbGRzKTsKKysgICAgfQor
KworKyAgICBjb25zdCBURmllbGRMaXN0ICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRGaWVsZExpc3Qg
JmZpZWxkTGlzdCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZp
ZWxkTGlzdCwgJm1GaWVsZExpc3RzKTsKKysgICAgfQorKworKyAgICBjb25zdCBURnVuY3Rpb24g
KnRyeUdldFJlbmFtZWQoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gdHJ5R2V0UmVuYW1lZEltcGwoZnVuYywgJm1GdW5jdGlvbnMpOworKyAgICB9CisrCisr
ICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqdHJ5R2V0UmVuYW1lZChjb25zdCBUSW50ZXJmYWNl
QmxvY2sgJmludGVyZmFjZUJsb2NrKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ5R2V0UmVu
YW1lZEltcGwoaW50ZXJmYWNlQmxvY2ssICZtSW50ZXJmYWNlQmxvY2tzKTsKKysgICAgfQorKwor
KyAgICBjb25zdCBUU3RydWN0dXJlICp0cnlHZXRSZW5hbWVkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0
cnVjdHVyZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHN0cnVj
dHVyZSwgJm1TdHJ1Y3R1cmVzKTsKKysgICAgfQorKworKyAgICBjb25zdCBUVHlwZSAqdHJ5R2V0
UmVuYW1lZChjb25zdCBUVHlwZSAmdHlwZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIHRyeUdl
dFJlbmFtZWRJbXBsKHR5cGUsIHN0YXRpY19jYXN0PFJlbWFwcGluZzxUVHlwZT4gKj4obnVsbHB0
cikpOworKyAgICB9CisrCisrICAgIGNvbnN0IFRWYXJpYWJsZSAqdHJ5R2V0UmVuYW1lZChjb25z
dCBUVmFyaWFibGUgJnZhcmlhYmxlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ5R2V0UmVu
YW1lZEltcGwodmFyaWFibGUsICZtVmFyaWFibGVzKTsKKysgICAgfQorKworKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKysgICAgY29uc3QgVCAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoY29uc3Qg
VCAmb2JqZWN0KQorKyAgICB7CisrICAgICAgICBjb25zdCBUICpyZW5hbWVkID0gdHJ5R2V0UmVu
YW1lZChvYmplY3QpOworKyAgICAgICAgaWYgKHJlbmFtZWQpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgcmV0dXJuICpyZW5hbWVkOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIG9iamVj
dDsKKysgICAgfQorKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgICAgYm9vbCBuZWVk
c1JlbmFtaW5nSW1wbChjb25zdCBUICZvYmplY3QpIGNvbnN0CisrICAgIHsKKysgICAgICAgIGNv
bnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IG9iamVjdC5zeW1ib2xUeXBlKCk7CisrICAgICAg
ICBzd2l0Y2ggKHN5bWJvbFR5cGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBTeW1i
b2xUeXBlOjpCdWlsdEluOgorKyAgICAgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbDoKKysgICAgICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisrCisrICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpVc2Vy
RGVmaW5lZDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAg
ICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZSA9IE5hbWUob2JqZWN0KS5yYXdOYW1lKCk7Cisr
ICAgICAgICBpZiAobUtleXdvcmRzLmZpbmQobmFtZSkgIT0gbUtleXdvcmRzLmVuZCgpKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAg
ICAgaWYgKG5hbWUuYmVnaW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZpeCkpCisrICAgICAgICB7
CisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGaWVs
ZCAmZmllbGQsIGJvb2wgcmVjdXJzaXZlKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4g
bmVlZHNSZW5hbWluZ0ltcGwoZmllbGQpIHx8IChyZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZygq
ZmllbGQudHlwZSgpLCB0cnVlKSk7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5n
KGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlzdCwgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisrICAg
IHsKKysgICAgICAgIEFTU0VSVChyZWN1cnNpdmUpOworKyAgICAgICAgZm9yIChjb25zdCBURmll
bGQgKmZpZWxkIDogZmllbGRMaXN0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChuZWVk
c1JlbmFtaW5nKCpmaWVsZCwgdHJ1ZSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRGdW5j
dGlvbiAmZnVuY3Rpb24sIGJvb2wgcmVjdXJzaXZlKSBjb25zdAorKyAgICB7CisrICAgICAgICBp
ZiAobmVlZHNSZW5hbWluZ0ltcGwoZnVuY3Rpb24pKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKCFyZWN1cnNpdmUpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKworKyAg
ICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7
CisrICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1bmN0aW9uLmdl
dFBhcmFtKGkpOworKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKHBhcmFtLCB0cnVlKSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAg
ICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKwor
KyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VC
bG9jaywgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBuZWVk
c1JlbmFtaW5nSW1wbChpbnRlcmZhY2VCbG9jaykgfHwKKysgICAgICAgICAgICAgICAocmVjdXJz
aXZlICYmIG5lZWRzUmVuYW1pbmcoaW50ZXJmYWNlQmxvY2suZmllbGRzKCksIHRydWUpKTsKKysg
ICAgfQorKworKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0
dXJlLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5lZWRz
UmVuYW1pbmdJbXBsKHN0cnVjdHVyZSkgfHwKKysgICAgICAgICAgICAgICAocmVjdXJzaXZlICYm
IG5lZWRzUmVuYW1pbmcoc3RydWN0dXJlLmZpZWxkcygpLCB0cnVlKSk7CisrICAgIH0KKysKKysg
ICAgYm9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHJlY3Vyc2l2ZSkg
Y29uc3QKKysgICAgeworKyAgICAgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG5lZWRz
UmVuYW1pbmcoKnN0cnVjdHVyZSwgcmVjdXJzaXZlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVs
c2UgaWYgKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldElu
dGVyZmFjZUJsb2NrKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIG5lZWRzUmVu
YW1pbmcoKmludGVyZmFjZUJsb2NrLCByZWN1cnNpdmUpOworKyAgICAgICAgfQorKyAgICAgICAg
ZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0K
KysgICAgfQorKworKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFZhcmlhYmxlICZ2YXJp
YWJsZSwgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisrICAgIHsKKysgICAgICAgIHJldHVybiBuZWVk
c1JlbmFtaW5nSW1wbCh2YXJpYWJsZSkgfHwKKysgICAgICAgICAgICAgICAocmVjdXJzaXZlICYm
IG5lZWRzUmVuYW1pbmcodmFyaWFibGUuZ2V0VHlwZSgpLCB0cnVlKSk7CisrICAgIH0KKysKKysg
IHB1YmxpYzoKKysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwgSWRHZW4gJmlkR2Vu
LCBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJpbmc+ICZrZXl3b3JkcykKKysgICAgICAgIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbUtleXdvcmRzKGtleXdvcmRz
KSwgbUlkR2VuKGlkR2VuKQorKyAgICB7fQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAmdmFyID0gc3ltYm9sTm9kZS52YXJpYWJsZSgpOworKyAgICAgICAgaWYgKG5lZWRzUmVu
YW1pbmcodmFyLCB0cnVlKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFi
bGUgJnJWYXIgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbCh2YXIpOworKyAgICAgICAgICAgIHJldHVy
biAqbmV3IFRJbnRlcm1TeW1ib2woJnJWYXIpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJu
IHN5bWJvbE5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uUHJv
dG90eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkKKysgICAgewor
KyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rp
b24oKTsKKysgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRydWUpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmln
aW5hbChmdW5jKTsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGUoJnJGdW5jKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBmdW5jUHJvdG9Ob2Rl
OworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25Qb3N0
KFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorKyAgICB7
CisrICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVu
Y0RlZk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKysgICAgICAgIGNvbnN0IFRGdW5jdGlv
biAmZnVuYyAgICAgICAgICAgICAgICAgICA9ICpmdW5jUHJvdG9Ob2RlLmdldEZ1bmN0aW9uKCk7
CisrICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhmdW5jLCB0cnVlKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJnJGdW5jID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwo
ZnVuYyk7CisrICAgICAgICAgICAgYXV0byAqckZ1bmNQcm90b05vZGUgICA9IG5ldyBUSW50ZXJt
RnVuY3Rpb25Qcm90b3R5cGUoJnJGdW5jKTsKKysgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50
ZXJtRnVuY3Rpb25EZWZpbml0aW9uKHJGdW5jUHJvdG9Ob2RlLCBmdW5jRGVmTm9kZS5nZXRCb2R5
KCkpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIGZ1bmNEZWZOb2RlOworKyAgICB9Cisr
CisrICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmFn
Z3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChhZ2dyZWdhdGVOb2Rl
LmlzQ29uc3RydWN0b3IoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSA9IGFnZ3JlZ2F0ZU5vZGUuZ2V0VHlwZSgpOworKyAgICAgICAgICAgIGlmIChuZWVkc1Jl
bmFtaW5nKHR5cGUsIHRydWUpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnJUeXBlID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodHlwZSk7CisrICAgICAgICAg
ICAgICAgIHJldHVybiBUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVDb25zdHJ1Y3RvcihyVHlwZSwg
YWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9
CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICZmdW5jID0gKmFnZ3JlZ2F0ZU5vZGUuZ2V0RnVuY3Rpb24oKTsKKysgICAgICAgICAgICBpZiAo
bmVlZHNSZW5hbWluZyhmdW5jLCB0cnVlKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsK
KysgICAgICAgICAgICAgICAgc3dpdGNoIChhZ2dyZWdhdGVOb2RlLmdldE9wKCkpCisrICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxs
RnVuY3Rpb25JbkFTVDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVEludGVybUFn
Z3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKHJGdW5jLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRl
Tm9kZS5nZXRTZXF1ZW5jZSgpKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdGdW5jdGlvbjoKKysgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gVEludGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlUmF3RnVuY3Rpb25DYWxsKHJGdW5jLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpKTsKKysKKysgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJ
bnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUJ1aWx0SW5GdW5jdGlvbkNhbGwoCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJGdW5jLCBhZ2dyZWdhdGVOb2RlLmdldFNlcXVlbmNlKCkpOworKyAg
ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIGFnZ3JlZ2F0ZU5vZGU7CisrICAgIH0KKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1l
c3BhY2UKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK2Jvb2wgc2g6OlJld3JpdGVL
ZXl3b3JkcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdl
biwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxlU3Ry
aW5nPiAma2V5d29yZHMpCisreworKyAgICBSZXdyaXRlciByZXdyaXRlcihjb21waWxlciwgaWRH
ZW4sIGtleXdvcmRzKTsKKysgICAgaWYgKCFyZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0cnVlOwor
K30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUtleXdvcmRzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi5iMTYyYmM3CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgKK0BAIC0w
LDAgKzEsMjcgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVLRVlXT1JEU19IXworKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hf
CisrCisrI2luY2x1ZGUgPHNldD4KKysKKysjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorKworK25h
bWVzcGFjZSBzaAorK3sKKysKKysvLyBUaGlzIHdhbGtzIHRoZSB0cmVlIGFuZCByZW5hbWVzIGFs
bCBuYW1lcyB0aGF0IGNvbmZsaWN0IHdpdGggdGhlIGlucHV0IGBrZXl3b3Jkc2AuCisrQU5HTEVf
Tk9fRElTQ0FSRCBib29sIFJld3JpdGVLZXl3b3JkcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzZXQ8SW1tdXRh
YmxlU3RyaW5nPiAma2V5d29yZHMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtF
WVdPUkRTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5jcHAKK25ldyBmaWxlIG1vZGUg
MTAwNjQ0CitpbmRleCAwMDAwMDAwLi45MWMwMzdkCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3Mu
Y3BwCitAQCAtMCwwICsxLDIwNCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgi
CisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworK25hbWVzcGFjZQorK3sKKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytjbGFzcyBTbWFsbE11bHRpU2V0CisreworKyAgcHVibGljOgorKyAg
ICBzdHJ1Y3QgRW50cnkKKysgICAgeworKyAgICAgICAgVCBlbGVtOworKyAgICAgICAgc2l6ZV90
IGNvdW50OworKyAgICB9OworKworKyAgICBjb25zdCBFbnRyeSAqZmluZChjb25zdCBUICZ4KSBj
b25zdAorKyAgICB7CisrICAgICAgICBmb3IgKGF1dG8gJmVudHJ5IDogbUVudHJpZXMpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgaWYgKHggPT0gZW50cnkuZWxlbSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIHJldHVybiAmZW50cnk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgfQorKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgIH0KKysKKysgICAgc2l6ZV90IG11
bHRpcGxpY2l0eShjb25zdCBUICZ4KSBjb25zdAorKyAgICB7CisrICAgICAgICBjb25zdCBFbnRy
eSAqZW50cnkgPSBmaW5kKHgpOworKyAgICAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPmNvdW50
IDogMDsKKysgICAgfQorKworKyAgICBjb25zdCBFbnRyeSAmaW5zZXJ0KGNvbnN0IFQgJngpCisr
ICAgIHsKKysgICAgICAgIEVudHJ5ICplbnRyeSA9IGZpbmRNdXRhYmxlKHgpOworKyAgICAgICAg
aWYgKGVudHJ5KQorKyAgICAgICAgeworKyAgICAgICAgICAgICsrZW50cnktPmNvdW50OworKyAg
ICAgICAgICAgIHJldHVybiAqZW50cnk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAg
ICAgICB7CisrICAgICAgICAgICAgbUVudHJpZXMucHVzaF9iYWNrKHt4LCAxfSk7CisrICAgICAg
ICAgICAgcmV0dXJuIG1FbnRyaWVzLmJhY2soKTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAg
ICB2b2lkIGNsZWFyKCkgeyBtRW50cmllcy5jbGVhcigpOyB9CisrCisrICAgIGJvb2wgZW1wdHko
KSBjb25zdCB7IHJldHVybiBtRW50cmllcy5lbXB0eSgpOyB9CisrCisrICAgIHNpemVfdCB1bmlx
dWVTaXplKCkgY29uc3QgeyByZXR1cm4gbUVudHJpZXMuc2l6ZSgpOyB9CisrCisrICBwcml2YXRl
OgorKyAgICBBTkdMRV9JTkxJTkUgRW50cnkgKmZpbmRNdXRhYmxlKGNvbnN0IFQgJngpIHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8RW50cnkgKj4oZmluZCh4KSk7IH0KKysKKysgIHByaXZhdGU6CisrICAg
IHN0ZDo6dmVjdG9yPEVudHJ5PiBtRW50cmllczsKKyt9OworKworK2NvbnN0IFRWYXJpYWJsZSAq
R2V0VmFyaWFibGUoVEludGVybU5vZGUgJm5vZGUpCisreworKyAgICBUSW50ZXJtVHlwZWQgKnR5
Tm9kZSA9IG5vZGUuZ2V0QXNUeXBlZCgpOworKyAgICBBU1NFUlQodHlOb2RlKTsKKysgICAgaWYg
KFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IHR5Tm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisrICAg
IHsKKysgICAgICAgIHJldHVybiAmc3ltYm9sLT52YXJpYWJsZSgpOworKyAgICB9CisrICAgIHJl
dHVybiBudWxscHRyOworK30KKysKKytjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVi
dWlsZAorK3sKKysgICAgU21hbGxNdWx0aVNldDxjb25zdCBUVmFyaWFibGUgKj4gbVZhckJ1ZmZl
cjsgIC8vIHJldXNhYmxlIGJ1ZmZlcgorKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisrCisr
ICBwdWJsaWM6CisrICAgIH5SZXdyaXRlcigpIG92ZXJyaWRlIHsgQVNTRVJUKG1WYXJCdWZmZXIu
ZW1wdHkoKSk7IH0KKysKKysgICAgUmV3cml0ZXIoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9s
RW52ICZzeW1ib2xFbnYpCisrICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxz
ZSwgdHJ1ZSksIG1TeW1ib2xFbnYoc3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBQb3N0UmVz
dWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZhZ2dyZWdhdGVOb2RlKSBv
dmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQobVZhckJ1ZmZlci5lbXB0eSgpKTsKKysK
KysgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuYyA9IGFnZ3JlZ2F0ZU5vZGUuZ2V0RnVuY3Rp
b24oKTsKKysgICAgICAgIGlmICghZnVuYykKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gYWdncmVnYXRlTm9kZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZSAmYXJncyA9ICphZ2dyZWdhdGVOb2RlLmdldFNlcXVlbmNlKCk7CisrICAgICAgICBzaXplX3Qg
YXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKysKKysgICAgICAgIGF1dG8gZ2V0UGFyYW1R
dWFsaWZpZXIgPSBbJl0oc2l6ZV90IGkpIHsKKysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUg
JnBhcmFtICAgICA9ICpmdW5jLT5nZXRQYXJhbShpKTsKKysgICAgICAgICAgICBjb25zdCBUVHlw
ZSAmcGFyYW1UeXBlICAgICA9IHBhcmFtLmdldFR5cGUoKTsKKysgICAgICAgICAgICBjb25zdCBU
UXVhbGlmaWVyIHBhcmFtUXVhbCA9IHBhcmFtVHlwZS5nZXRRdWFsaWZpZXIoKTsKKysgICAgICAg
ICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxT3V0OgorKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cUluT3V0OgorKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtU3ltYm9sRW52LmlzUmVm
ZXJlbmNlKHBhcmFtKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
ICAgICAgICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZShwYXJhbSwgQWRkcmVzc1NwYWNlOjpU
aHJlYWQpOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICBicmVh
azsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgcmV0dXJuIHBhcmFtUXVhbDsKKysgICAg
ICAgIH07CisrCisrICAgICAgICBib29sIG1pZ2h0QWxpYXMgPSBmYWxzZTsKKysKKysgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBjb25zdCBUUXVhbGlmaWVyIHBhcmFtUXVhbCA9IGdldFBhcmFtUXVhbGlmaWVyKGkp
OworKworKyAgICAgICAgICAgIHN3aXRjaCAocGFyYW1RdWFsKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFPdXQ6CisrICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxSW5PdXQ6CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyID0gR2V0VmFyaWFibGUoKmFyZ3NbaV0p
OworKyAgICAgICAgICAgICAgICAgICAgaWYgKG1WYXJCdWZmZXIuaW5zZXJ0KHZhcikuY291bnQg
PiAxKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIG1p
Z2h0QWxpYXMgPSB0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgPSBh
cmdDb3VudDsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysg
ICAgICAgIGNvbnN0IGJvb2wgaGFzSW5kZXRlcm1pbmF0ZVZhciA9IG1WYXJCdWZmZXIuZmluZChu
dWxscHRyKTsKKysKKysgICAgICAgIGlmICghbWlnaHRBbGlhcykKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBtaWdodEFsaWFzID0gaGFzSW5kZXRlcm1pbmF0ZVZhciAmJiBtVmFyQnVmZmVyLnVu
aXF1ZVNpemUoKSA+IDE7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobWlnaHRBbGlhcykK
KysgICAgICAgIHsKKysgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50
OyArK2kpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmFy
ZyA9IGFyZ3NbaV0tPmdldEFzVHlwZWQoKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGFyZyk7
CisrICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqdmFyICAgICAgID0gR2V0VmFyaWFi
bGUoKmFyZyk7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcGFyYW1RdWFsID0g
Z2V0UGFyYW1RdWFsaWZpZXIoaSk7CisrCisrICAgICAgICAgICAgICAgIGlmIChoYXNJbmRldGVy
bWluYXRlVmFyIHx8IG1WYXJCdWZmZXIubXVsdGlwbGljaXR5KHZhcikgPiAxKQorKyAgICAgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKysgICAg
ICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cU91dDoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9ICZtU3lt
Ym9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoIm91dCIpLCBhcmctPmdldFR5cGUoKSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpuZXcgVEludGVybVNlcXVlbmNle2FyZ30pOworKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFRRdWFsaWZpZXI6OkV2cUluT3V0OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
W2ldID0gJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOYW1lKCJpbm91dCIpLCBhcmctPmdldFR5cGUoKSwgKm5ldyBUSW50
ZXJtU2VxdWVuY2V7YXJnfSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
KworKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgbVZhckJ1ZmZlci5j
bGVhcigpOworKworKyAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisrICAgIH0KKyt9Owor
KworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKytib29sIHNoOjpSZXdyaXRlT3V0QXJn
cyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3lt
Ym9sRW52KQorK3sKKysgICAgUmV3cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN5bWJvbEVudik7
CisrICAgIGlmICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVP
dXRBcmdzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZU91dEFyZ3MuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjk4
MmI3NDcKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oCitAQCAtMCwwICsxLDMzIEBACisrLy8K
KysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9SRVdSSVRFT1VUQVJHU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURU9VVEFSR1NfSF8KKysKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKysK
KytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gZS5nLjoKKysvLyAgICAvKnZvaWQgZm9vKG91dCBp
bnQgeCwgaW5vdXQgaW50IHkpKi8KKysvLyAgICBmb28oeiwgdyk7CisrLy8gYmVjb21lcworKy8v
ICAgIGZvbyhPdXQoeiksIEluT3V0KHcpKTsKKysvLyB1bmxlc3MgYHpgIGFuZCBgd2AgYXJlIGRl
dGVjdGVkIHRvIG5ldmVyIGFsaWFzLgorKy8vIFRoZSB0cmFuc2xhdGVkIGV4YW1wbGUgZWZmZWN0
aXZlbHkgYmVoYXZlcyB0aGUgc2FtZSBhczoKKysvLyAgICBpbnQgXzE7CisrLy8gICAgaW50IF8y
ID0gdzsKKysvLyAgICBmb28oXzEsIF8yKTsKKysvLyAgICB6ID0gXzE7CisrLy8gICAgdyA9IF8y
OworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdyaXRlT3V0QXJncyhUQ29tcGlsZXIgJmNvbXBp
bGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKysKKyt9ICAv
LyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFV1JJVEVPVVRBUkdTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuY3Bw
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQ
aXBlbGluZXMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzYzN2Uy
MworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuY3BwCitAQCAtMCwwICsxLDkzOCBAQAorKy8v
CisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRf
bWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorKworKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVyRGVwZW5k
ZW50RnVuY3Rpb25zLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0lkR2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuaCIKKysjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lTm9PcHMuaCIK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvRmluZE1haW4uaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5o
IgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
KworK25hbWVzcGFjZQorK3sKKysKKyt1c2luZyBWYXJpYWJsZVNldCAgPSBzdGQ6OnVub3JkZXJl
ZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+OworK3VzaW5nIFZhcmlhYmxlTGlzdCA9IHN0ZDo6dmVj
dG9yPGNvbnN0IFRWYXJpYWJsZSAqPjsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K3N0cnVjdCBQaXBlbGluZVN0cnVjdEluZm8KKyt7CisrICAgIFZhcmlhYmxlU2V0IHBpcGVsaW5l
VmFyaWFibGVzOworKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0cnVj
dDsKKysgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0
cjsKKysgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsID0gbnVsbHB0
cjsKKysKKysgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKysgICAgeworKyAgICAgICAgaWYgKHBp
cGVsaW5lU3RydWN0LmlzVG90YWxseUVtcHR5KCkpCisrICAgICAgICB7CisrICAgICAgICAgICAg
QVNTRVJUKHBpcGVsaW5lVmFyaWFibGVzLmVtcHR5KCkpOworKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAg
IEFTU0VSVChwaXBlbGluZVN0cnVjdC5pc1RvdGFsbHlGdWxsKCkpOworKyAgICAgICAgICAgIEFT
U0VSVCghcGlwZWxpbmVWYXJpYWJsZXMuZW1wdHkoKSk7CisrICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworKyAgICAgICAgfQorKyAgICB9CisrfTsKKysKKytjbGFzcyBHZW5lcmF0ZVBpcGVsaW5l
U3RydWN0IDogcHJpdmF0ZSBUSW50ZXJtUmVidWlsZAorK3sKKysgIHByaXZhdGU6CisrICAgIGNv
bnN0IFBpcGVsaW5lICZtUGlwZWxpbmU7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysg
ICAgSW52YXJpYW50cyAmbUludmFyaWFudHM7CisrICAgIFZhcmlhYmxlTGlzdCBtUGlwZWxpbmVW
YXJpYWJsZUxpc3Q7CisrICAgIElkR2VuICZtSWRHZW47CisrICAgIFBpcGVsaW5lU3RydWN0SW5m
byBtSW5mbzsKKysKKysgIHB1YmxpYzoKKysgICAgc3RhdGljIGJvb2wgRXhlYyhQaXBlbGluZVN0
cnVjdEluZm8gJm91dCwKKysgICAgICAgICAgICAgICAgICAgICBUQ29tcGlsZXIgJmNvbXBpbGVy
LAorKyAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAg
ICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlw
ZWxpbmUgJnBpcGVsaW5lLAorKyAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9s
RW52LAorKyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMpCisrICAg
IHsKKysgICAgICAgIEdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Qgc2VsZihjb21waWxlciwgaWRHZW4s
IHBpcGVsaW5lLCBzeW1ib2xFbnYsIGludmFyaWFudHMpOworKyAgICAgICAgaWYgKCFzZWxmLmV4
ZWMocm9vdCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAg
ICAgfQorKyAgICAgICAgb3V0ID0gc2VsZi5tSW5mbzsKKysgICAgICAgIHJldHVybiB0cnVlOwor
KyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0KFRDb21w
aWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2Vu
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlhbnRzICZpbnZhcmlhbnRzKQorKyAgICAgICAg
OiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSksCisrICAgICAgICAgIG1QaXBl
bGluZShwaXBlbGluZSksCisrICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKysgICAg
ICAgICAgbUludmFyaWFudHMoaW52YXJpYW50cyksCisrICAgICAgICAgIG1JZEdlbihpZEdlbikK
KysgICAge30KKysKKysgICAgYm9vbCBleGVjKFRJbnRlcm1CbG9jayAmcm9vdCkKKysgICAgewor
KyAgICAgICAgaWYgKCFyZWJ1aWxkUm9vdChyb290KSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAobUluZm8ucGlwZWxp
bmVWYXJpYWJsZXMuZW1wdHkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisrCisrICAg
ICAgICBjb25zdCBUU3RydWN0dXJlICZwaXBlbGluZVN0cnVjdCA9IFsmXSgpIC0+IGNvbnN0IFRT
dHJ1Y3R1cmUgJiB7CisrICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZh
cikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAqbVBpcGVsaW5lLmds
b2JhbEluc3RhbmNlVmFyLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVJbnRlcm5hbFBpcGVsaW5lU3RydWN0KHJvb3QsIHNlcSk7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgfSgpOworKworKyAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyBt
b2RpZmllZE1hY2hpbmVyaWVzOworKyAgICAgICAgY29uc3QgYm9vbCBtb2RpZmllZCA9IFRyeUNy
ZWF0ZU1vZGlmaWVkU3RydWN0KAorKyAgICAgICAgICAgIG1TeW1ib2xFbnYsIG1JZEdlbiwgbVBp
cGVsaW5lLmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCksIHBpcGVsaW5lU3RydWN0LAorKyAg
ICAgICAgICAgIG1QaXBlbGluZS5nZXRTdHJ1Y3RUeXBlTmFtZShQaXBlbGluZTo6VmFyaWFudDo6
TW9kaWZpZWQpLCBtb2RpZmllZE1hY2hpbmVyaWVzKTsKKysKKysgICAgICAgIGlmIChtb2RpZmll
ZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lLnR5cGUgIT0gUGlw
ZWxpbmU6OlR5cGU6OlRleHR1cmUpOworKyAgICAgICAgICAgIEFTU0VSVCghbVBpcGVsaW5lLmds
b2JhbEluc3RhbmNlVmFyKTsgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBieSBjb25zdHJ1Y3Rp
b24uCisrCisrICAgICAgICAgICAgYXV0byBnZXRGdW5jdGlvbiA9IFtdKHNoOjpUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICpmdW5jRGVjbCkgeworKyAgICAgICAgICAgICAgICByZXR1cm4gZnVu
Y0RlY2wgPyBmdW5jRGVjbC0+Z2V0RnVuY3Rpb24oKSA6IG51bGxwdHI7CisrICAgICAgICAgICAg
fTsKKysKKysgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1vZGlmaWVkTWFjaGluZXJp
ZXMuc2l6ZSgpOworKyAgICAgICAgICAgIEFTU0VSVChzaXplID4gMCk7CisrICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmbWFjaGluZXJ5ID0gbW9k
aWZpZWRNYWNoaW5lcmllcy5hdChpKTsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVy
eS5tb2RpZmllZFN0cnVjdCk7CisrCisrICAgICAgICAgICAgICAgIHNlcS5wdXNoX2JhY2sobmV3
IFRJbnRlcm1EZWNsYXJhdGlvbnsKKysgICAgICAgICAgICAgICAgICAgICZDcmVhdGVTdHJ1Y3RU
eXBlVmFyaWFibGUobVN5bWJvbFRhYmxlLCAqbWFjaGluZXJ5Lm1vZGlmaWVkU3RydWN0KX0pOwor
KworKyAgICAgICAgICAgICAgICBpZiAobVBpcGVsaW5lLmlzUGlwZWxpbmVPdXQoKSkKKysgICAg
ICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVyeS5mdW5j
T3JpZ2luYWxUb01vZGlmaWVkKTsKKysgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbWFjaGlu
ZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworKyAgICAgICAgICAgICAgICAgICAgc2VxLnB1
c2hfYmFjayhtYWNoaW5lcnkuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCk7CisrICAgICAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOwor
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtYWNoaW5lcnkuZnVuY09yaWdpbmFsVG9Nb2Rp
ZmllZCk7CisrICAgICAgICAgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG1hY2hpbmVyeS5mdW5j
TW9kaWZpZWRUb09yaWdpbmFsKTsKKysgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAg
ICAgICBpZiAoaSA9PSBzaXplIC0gMSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgbUluZm8uZnVuY09yaWdpbmFsVG9Nb2RpZmllZCA9IGdldEZ1bmN0aW9uKG1hY2hp
bmVyeS5mdW5jT3JpZ2luYWxUb01vZGlmaWVkKTsKKysgICAgICAgICAgICAgICAgICAgIG1JbmZv
LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBnZXRGdW5jdGlvbihtYWNoaW5lcnkuZnVuY01vZGlm
aWVkVG9PcmlnaW5hbCk7CisrCisrICAgICAgICAgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0
cnVjdC5pbnRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgICAgICAgICAgICAgIG1J
bmZvLnBpcGVsaW5lU3RydWN0LmV4dGVybmFsID0KKysgICAgICAgICAgICAgICAgICAgICAgICBt
b2RpZmllZCA/IG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCA6ICZwaXBlbGluZVN0cnVjdDsKKysg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVs
c2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5pbnRlcm5h
bCA9ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5l
eHRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJvb3Qu
aW5zZXJ0Q2hpbGROb2RlcyhGaW5kTWFpbkluZGV4KCZyb290KSwgc2VxKTsKKysKKysgICAgICAg
IHJldHVybiB0cnVlOworKyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICBQcmVSZXN1bHQgdmlz
aXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmbm9kZSkg
b3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5laXRo
ZXJ9OworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBvc3QoVElu
dGVybURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgRGVj
bGFyYXRpb24gZGVjbCAgICAgPSBWaWV3RGVjbGFyYXRpb24oZGVjbE5vZGUpOworKyAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworKworKyAgICAg
ICAgaWYgKG1QaXBlbGluZS51c2VzKHZhcikpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNT
RVJUKG1JbmZvLnBpcGVsaW5lVmFyaWFibGVzLmZpbmQoJnZhcikgPT0gbUluZm8ucGlwZWxpbmVW
YXJpYWJsZXMuZW5kKCkpOworKyAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lVmFyaWFibGVzLmlu
c2VydCgmdmFyKTsKKysgICAgICAgICAgICBtUGlwZWxpbmVWYXJpYWJsZUxpc3QucHVzaF9iYWNr
KCZ2YXIpOworKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgfQorKworKyAg
ICAgICAgcmV0dXJuIGRlY2xOb2RlOworKyAgICB9CisrCisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
JmNyZWF0ZUludGVybmFsUGlwZWxpbmVTdHJ1Y3QoVEludGVybUJsb2NrICZyb290LCBUSW50ZXJt
U2VxdWVuY2UgJm91dERlY2xTZXEpCisrICAgIHsKKysgICAgICAgIGF1dG8gJmZpZWxkcyA9ICpu
ZXcgVEZpZWxkTGlzdCgpOworKworKyAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlOgorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6
IG1QaXBlbGluZVZhcmlhYmxlTGlzdCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFtSW52YXJpYW50cy5jb250YWlucygqdmFyKSk7CisrICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAmdmFyVHlwZSAgICAgICAgID0gdmFyLT5nZXRUeXBlKCk7
CisrICAgICAgICAgICAgICAgICAgICBjb25zdCBUQmFzaWNUeXBlIHNhbXBsZXJUeXBlID0gdmFy
VHlwZS5nZXRCYXNpY1R5cGUoKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJnRleHR1cmVFbnYgPSBtU3ltYm9sRW52LmdldFRleHR1cmVFbnYoc2FtcGxlclR5cGUp
OworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqdGV4dHVyZUVudlR5cGUgICAgICAgICA9IG5l
dyBUVHlwZSgmdGV4dHVyZUVudiwgZmFsc2UpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHZh
clR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVFbnZUeXBlLT5tYWtlQXJyYXlzKHZhclR5cGUuZ2V0QXJyYXlTaXpl
cygpKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgICAgIGZp
ZWxkcy5wdXNoX2JhY2soCisrICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRGaWVsZCh0ZXh0
dXJlRW52VHlwZSwgdmFyLT5uYW1lKCksIGtOb1NvdXJjZUxvYywgdmFyLT5zeW1ib2xUeXBlKCkp
KTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVh
azsKKysKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1QaXBlbGluZVZhcmlhYmxlTGlzdCkK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byAmdHlwZSAgPSBD
bG9uZVR5cGUodmFyLT5nZXRUeXBlKCkpOworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqZmll
bGQgPSBuZXcgVEZpZWxkKCZ0eXBlLCB2YXItPm5hbWUoKSwga05vU291cmNlTG9jLCB2YXItPnN5
bWJvbFR5cGUoKSk7CisrICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaF9iYWNrKGZpZWxk
KTsKKysKKysgICAgICAgICAgICAgICAgICAgIGlmIChtSW52YXJpYW50cy5jb250YWlucygqdmFy
KSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBtSW52
YXJpYW50cy5pbnNlcnQoKmZpZWxkKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysgICAgICAg
IH0KKysKKysgICAgICAgIE5hbWUgcGlwZWxpbmVTdHJ1Y3ROYW1lID0gbVBpcGVsaW5lLmdldFN0
cnVjdFR5cGVOYW1lKFBpcGVsaW5lOjpWYXJpYW50OjpPcmlnaW5hbCk7CisrICAgICAgICBhdXRv
ICZzID0gKm5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIHBpcGVsaW5lU3RydWN0TmFtZS5y
YXdOYW1lKCksICZmaWVsZHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
cGVsaW5lU3RydWN0TmFtZS5zeW1ib2xUeXBlKCkpOworKworKyAgICAgICAgb3V0RGVjbFNlcS5w
dXNoX2JhY2sobmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxl
KG1TeW1ib2xUYWJsZSwgcyl9KTsKKysKKysgICAgICAgIHJldHVybiBzOworKyAgICB9CisrfTsK
KysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK1BpcGVsaW5lU2NvcGVkPFRWYXJpYWJs
ZT4gQ3JlYXRlUGlwZWxpbmVNYWluTG9jYWxWYXIoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5l
U3RydWN0KQorK3sKKysgICAgQVNTRVJUKHBpcGVsaW5lU3RydWN0LmlzVG90YWxseUZ1bGwoKSk7
CisrCisrICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gcGlwZWxpbmVNYWluTG9jYWxWYXI7
CisrCisrICAgIGF1dG8gcG9wdWxhdGVFeHRlcm5hbE1haW5Mb2NhbFZhciA9IFsmXSgpIHsKKysg
ICAgICAgIEFTU0VSVCghcGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpOworKyAgICAgICAg
cGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwgPSAmQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZSgK
KysgICAgICAgICAgICBzeW1ib2xUYWJsZSwgKnBpcGVsaW5lU3RydWN0LmV4dGVybmFsLAorKyAg
ICAgICAgICAgIHBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShwaXBlbGluZVN0cnVjdC5p
c1VuaWZvcm0oKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyBQaXBlbGluZTo6VmFyaWFudDo6T3JpZ2luYWwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogUGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlmaWVkKSk7
CisrICAgIH07CisrCisrICAgIGF1dG8gcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2Fs
VmFyID0gWyZdKCkgeworKyAgICAgICAgQVNTRVJUKCFwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRl
cm5hbCk7CisrICAgICAgICBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCA9CisrICAgICAg
ICAgICAgJkNyZWF0ZUluc3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsICpwaXBlbGluZVN0cnVj
dC5pbnRlcm5hbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGlu
ZS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok9yaWdpbmFsKSk7Cisr
ICAgIH07CisrCisrICAgIGlmIChwaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0
YW5jZUlkKQorKyAgICB7CisrICAgICAgICBwb3B1bGF0ZURpc3RpbmN0SW50ZXJuYWxNYWluTG9j
YWxWYXIoKTsKKysgICAgfQorKyAgICBlbHNlIGlmIChwaXBlbGluZS5hbHdheXNSZXF1aXJlc0xv
Y2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigpKQorKyAgICB7CisrICAgICAgICBwb3B1bGF0
ZUV4dGVybmFsTWFpbkxvY2FsVmFyKCk7CisrCisrICAgICAgICBpZiAocGlwZWxpbmVTdHJ1Y3Qu
aXNVbmlmb3JtKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcGlwZWxpbmVNYWluTG9jYWxW
YXIuaW50ZXJuYWwgPSBwaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbDsKKysgICAgICAgIH0K
KysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwb3B1bGF0ZURpc3RpbmN0
SW50ZXJuYWxNYWluTG9jYWxWYXIoKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlIGlm
ICghcGlwZWxpbmVTdHJ1Y3QuaXNVbmlmb3JtKCkpCisrICAgIHsKKysgICAgICAgIHBvcHVsYXRl
RGlzdGluY3RJbnRlcm5hbE1haW5Mb2NhbFZhcigpOworKyAgICB9CisrCisrICAgIHJldHVybiBw
aXBlbGluZU1haW5Mb2NhbFZhcjsKKyt9CisrCisrY2xhc3MgUGlwZWxpbmVGdW5jdGlvbkVudgor
K3sKKysgIHByaXZhdGU6CisrICAgIFRDb21waWxlciAmbUNvbXBpbGVyOworKyAgICBTeW1ib2xF
bnYgJm1TeW1ib2xFbnY7CisrICAgIFRTeW1ib2xUYWJsZSAmbVN5bWJvbFRhYmxlOworKyAgICBJ
ZEdlbiAmbUlkR2VuOworKyAgICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworKyAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZtUGlwZWxpbmVGdW5jdGlv
bnM7CisrICAgIGNvbnN0IFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVj
dDsKKysgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmbVBpcGVsaW5lTWFpbkxvY2FsVmFy
OworKworKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVEZ1bmN0aW9uICosIGNvbnN0IFRG
dW5jdGlvbiAqPiBtRnVuY01hcDsKKysKKysgIHB1YmxpYzoKKysgICAgUGlwZWxpbmVGdW5jdGlv
bkVudihUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJv
bEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwK
KysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5j
dGlvbiAqPiAmcGlwZWxpbmVGdW5jdGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgUGlw
ZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3QsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmcGlwZWxpbmVNYWluTG9jYWxWYXIp
CisrICAgICAgICA6IG1Db21waWxlcihjb21waWxlciksCisrICAgICAgICAgIG1TeW1ib2xFbnYo
c3ltYm9sRW52KSwKKysgICAgICAgICAgbVN5bWJvbFRhYmxlKHN5bWJvbEVudi5zeW1ib2xUYWJs
ZSgpKSwKKysgICAgICAgICAgbUlkR2VuKGlkR2VuKSwKKysgICAgICAgICAgbVBpcGVsaW5lKHBp
cGVsaW5lKSwKKysgICAgICAgICAgbVBpcGVsaW5lRnVuY3Rpb25zKHBpcGVsaW5lRnVuY3Rpb25z
KSwKKysgICAgICAgICAgbVBpcGVsaW5lU3RydWN0KHBpcGVsaW5lU3RydWN0KSwKKysgICAgICAg
ICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyKHBpcGVsaW5lTWFpbkxvY2FsVmFyKQorKyAgICB7fQor
KworKyAgICBib29sIGlzT3JpZ2luYWxQaXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAm
ZnVuYykgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1QaXBlbGluZUZ1bmN0aW9ucy5m
aW5kKCZmdW5jKSAhPSBtUGlwZWxpbmVGdW5jdGlvbnMuZW5kKCk7CisrICAgIH0KKysKKysgICAg
Ym9vbCBpc1VwZGF0ZWRQaXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29u
c3QKKysgICAgeworKyAgICAgICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworKyAg
ICAgICAgaWYgKGl0ID09IG1GdW5jTWFwLmVuZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiAmZnVuYyA9PSBpdC0+
c2Vjb25kOworKyAgICB9CisrCisrICAgIGNvbnN0IFRGdW5jdGlvbiAmZ2V0VXBkYXRlZEZ1bmN0
aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykKKysgICAgeworKyAgICAgICAgQVNTRVJUKGlzT3Jp
Z2luYWxQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpIHx8IGlzVXBkYXRlZFBpcGVsaW5lRnVuY3Rpb24o
ZnVuYykpOworKworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpuZXdGdW5jOworKworKyAgICAg
ICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworKyAgICAgICAgaWYgKGl0ID09IG1G
dW5jTWFwLmVuZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IGJvb2wgaXNNYWlu
ID0gZnVuYy5pc01haW4oKTsKKysKKysgICAgICAgICAgICBpZiAoaXNNYWluICYmIG1QaXBlbGlu
ZS5pc1BpcGVsaW5lT3V0KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBBU1NF
UlQoZnVuYy5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0
Vm9pZCk7CisrICAgICAgICAgICAgICAgIG5ld0Z1bmMgPSAmQ2xvbmVGdW5jdGlvbkFuZENoYW5n
ZVJldHVyblR5cGUobVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptUGlwZWxpbmVT
dHJ1Y3QuZXh0ZXJuYWwpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChp
c01haW4gJiYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uVmVy
dGV4R2xvYmFscyB8fAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5l
LnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHMpKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFZhcmlhYmxl
ICo+IHZhcmlhYmxlczsKKysgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxk
IDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKysgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzLnB1c2hfYmFjayhuZXcgVFZhcmlhYmxl
KCZtU3ltYm9sVGFibGUsIGZpZWxkLT5uYW1lKCksIGZpZWxkLT50eXBlKCksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPnN5bWJv
bFR5cGUoKSkpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIG5ld0Z1bmMg
PSAmQ2xvbmVGdW5jdGlvbkFuZEFwcGVuZFBhcmFtcyhtU3ltYm9sVGFibGUsIG51bGxwdHIsIGZ1
bmMsIHZhcmlhYmxlcyk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgaWYgKGlz
TWFpbiAmJiBtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSkKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAq
PiB2YXJpYWJsZXM7CisrICAgICAgICAgICAgICAgIFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24g
KnJlZmxlY3Rpb24gPQorKyAgICAgICAgICAgICAgICAgICAgKChzaDo6VHJhbnNsYXRvck1ldGFs
RGlyZWN0ICopJm1Db21waWxlciktPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKTsKKysg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0
LmV4dGVybmFsLT5maWVsZHMoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVFN0cnVjdHVyZSAqdGV4dHVyZUVudiA9IGZpZWxkLT50eXBlKCktPmdldFN0
cnVjdCgpOworKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVFbnYgJiYgdGV4dHVy
ZUVudi0+ZmllbGRzKCkuc2l6ZSgpID09IDIpOworKyAgICAgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBURmllbGQgKnN1YmZpZWxkIDogdGV4dHVyZUVudi0+ZmllbGRzKCkpCisrICAgICAgICAg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0g
bUlkR2VuLmNyZWF0ZU5ld05hbWUoe2ZpZWxkLT5uYW1lKCksIHN1YmZpZWxkLT5uYW1lKCl9KTsK
KysgICAgICAgICAgICAgICAgICAgICAgICBUVHlwZSAmdHlwZSAgICAgPSAqbmV3IFRUeXBlKCpz
dWJmaWVsZC0+dHlwZSgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXR5cGUu
aXNBcnJheSgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLm1ha2VBcnJheXMoZmll
bGQtPnR5cGUoKS0+Z2V0QXJyYXlTaXplcygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvICp2YXIgPQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZt
U3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCAmdHlwZSwgbmFtZS5zeW1ib2xUeXBlKCkpOwor
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKysgICAg
ICAgICAgICAgICAgICAgICAgICByZWZsZWN0aW9uLT5hZGRPcmlnaW5hbE5hbWUodmFyLT51bmlx
dWVJZCgpLmdldCgpLCBmaWVsZC0+bmFtZSgpLmRhdGEoKSk7CisrICAgICAgICAgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgbmV3RnVuYyA9ICZDbG9u
ZUZ1bmN0aW9uQW5kQXBwZW5kUGFyYW1zKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywgdmFy
aWFibGVzKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYm
IG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgTmFtZSBuYW1lID0gbVBpcGVsaW5lLmdldFN0cnVjdElu
c3RhbmNlTmFtZShQaXBlbGluZTo6VmFyaWFudDo6TW9kaWZpZWQpOworKyAgICAgICAgICAgICAg
ICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgp
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRVSW50KSwgbmFtZS5zeW1ib2xUeXBlKCkpOworKyAgICAgICAgICAgICAg
ICBuZXdGdW5jICAgPSAmQ2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShtU3ltYm9sVGFibGUs
IG51bGxwdHIsIGZ1bmMsICp2YXIpOworKyAgICAgICAgICAgICAgICBtU3ltYm9sRW52Lm1hcmtB
c1JlZmVyZW5jZSgqdmFyLCBtUGlwZWxpbmUuZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKSk7CisrICAg
ICAgICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCA9IHZhcjsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGluZS5hbHdh
eXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1RvdGFs
bHlGdWxsKCkpOworKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJmZ1bmM7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAqdmFyOworKyAgICAgICAgICAgICAgICBBZGRyZXNzU3BhY2UgYWRk
cmVzc1NwYWNlOworKworKyAgICAgICAgICAgICAgICBpZiAoaXNNYWluICYmICFtUGlwZWxpbmVN
YWluTG9jYWxWYXIuaXNVbmlmb3JtKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1TeW1ib2xUYWJsZSwgKm1QaXBlbGluZVN0cnVjdC5leHRlcm5hbCwKKysgICAg
ICAgICAgICAgICAgICAgICAgICBtUGlwZWxpbmUuZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFBpcGVs
aW5lOjpWYXJpYW50OjpNb2RpZmllZCkpOworKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1Nw
YWNlID0gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNlKCk7CisrICAgICAgICAgICAgICAg
IH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAg
ICAgICAgICAgICB2YXIgPSAmQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZSgKKysgICAgICAgICAgICAg
ICAgICAgICAgICBtU3ltYm9sVGFibGUsICptUGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBl
bGluZTo6VmFyaWFudDo6T3JpZ2luYWwpKTsKKysgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NT
cGFjZSA9IG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKQorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNl
KCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFkZHJlc3NTcGFj
ZTo6VGhyZWFkOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIGJvb2wg
bWFya0FzUmVmZXJlbmNlID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgaWYgKGlzTWFpbikKKysg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUu
dHlwZSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFBpcGVsaW5lOjpUeXBlOjpWZXJ0ZXhJbjoKKysgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFBpcGVsaW5lOjpUeXBlOjpGcmFnbWVudEluOgorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXJrQXNSZWZlcmVuY2UgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgaWYgKG1hcmtBc1JlZmVyZW5jZSkK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgbVN5bWJvbEVudi5tYXJr
QXNSZWZlcmVuY2UoKnZhciwgYWRkcmVzc1NwYWNlKTsKKysgICAgICAgICAgICAgICAgfQorKwor
KyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5kUGFyYW0o
bVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCAqdmFyKTsKKysgICAgICAgICAgICB9CisrCisr
ICAgICAgICAgICAgbUZ1bmNNYXBbJmZ1bmNdICAgPSBuZXdGdW5jOworKyAgICAgICAgICAgIG1G
dW5jTWFwW25ld0Z1bmNdID0gbmV3RnVuYzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBuZXdGdW5jID0gaXQtPnNlY29uZDsKKysgICAgICAgIH0K
KysKKysgICAgICAgIHJldHVybiAqbmV3RnVuYzsKKysgICAgfQorKworKyAgICBUSW50ZXJtRnVu
Y3Rpb25Qcm90b3R5cGUgKmNyZWF0ZVVwZGF0ZWRGdW5jdGlvblByb3RvdHlwZSgKKysgICAgICAg
IFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkKKysgICAgeworKyAgICAg
ICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24oKTsK
KysgICAgICAgIGlmICghaXNPcmlnaW5hbFBpcGVsaW5lRnVuY3Rpb24oZnVuYykgJiYgIWlzVXBk
YXRlZFBpcGVsaW5lRnVuY3Rpb24oZnVuYykpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisrICAgICAgICB9CisrICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5ld0Z1
bmMgPSBnZXRVcGRhdGVkRnVuY3Rpb24oZnVuYyk7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSgmbmV3RnVuYyk7CisrICAgIH0KKyt9OworKworK2NsYXNzIFVw
ZGF0ZVBpcGVsaW5lRnVuY3Rpb25zIDogcHJpdmF0ZSBUSW50ZXJtUmVidWlsZAorK3sKKysgIHBy
aXZhdGU6CisrICAgIGNvbnN0IFBpcGVsaW5lICZtUGlwZWxpbmU7CisrICAgIGNvbnN0IFBpcGVs
aW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVjdDsKKysgICAgUGlwZWxpbmVTY29w
ZWQ8VFZhcmlhYmxlPiAmbVBpcGVsaW5lTWFpbkxvY2FsVmFyOworKyAgICBTeW1ib2xFbnYgJm1T
eW1ib2xFbnY7CisrICAgIFBpcGVsaW5lRnVuY3Rpb25FbnYgbUVudjsKKysgICAgY29uc3QgVEZ1
bmN0aW9uICptRnVuY09yaWdpbmFsVG9Nb2RpZmllZDsKKysgICAgY29uc3QgVEZ1bmN0aW9uICpt
RnVuY01vZGlmaWVkVG9PcmlnaW5hbDsKKysKKysgIHB1YmxpYzoKKysgICAgc3RhdGljIGJvb2wg
VGhyZWFkUGlwZWxpbmUoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJnBp
cGVsaW5lRnVuY3Rpb25zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGlu
ZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0cnVjdCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFZhcmlhYmxlPiAmcGlwZWxpbmVNYWluTG9jYWxW
YXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuY09yaWdpbmFsVG9N
b2RpZmllZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsKQorKyAgICB7CisrICAgICAgICBVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9ucyBzZWxmKGNvbXBpbGVyLCBwaXBlbGluZSwgcGlwZWxpbmVGdW5jdGlvbnMsIHBp
cGVsaW5lU3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBl
bGluZU1haW5Mb2NhbFZhciwgaWRHZW4sIHN5bWJvbEVudiwgZnVuY09yaWdpbmFsVG9Nb2RpZmll
ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY01vZGlmaWVkVG9P
cmlnaW5hbCk7CisrICAgICAgICBpZiAoIXNlbGYucmVidWlsZFJvb3Qocm9vdCkpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIHRydWU7CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIFVwZGF0ZVBpcGVsaW5lRnVu
Y3Rpb25zKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiAmcGlwZWxpbmVGdW5j
dGlvbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1
Y3R1cmU+IHBpcGVsaW5lU3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBl
bGluZVNjb3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhciwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpCisr
ICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksCisrICAgICAg
ICAgIG1QaXBlbGluZShwaXBlbGluZSksCisrICAgICAgICAgIG1QaXBlbGluZVN0cnVjdChwaXBl
bGluZVN0cnVjdCksCisrICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhcihwaXBlbGluZU1h
aW5Mb2NhbFZhciksCisrICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKysgICAgICAg
ICAgbUVudihjb21waWxlciwKKysgICAgICAgICAgICAgICBzeW1ib2xFbnYsCisrICAgICAgICAg
ICAgICAgaWRHZW4sCisrICAgICAgICAgICAgICAgcGlwZWxpbmUsCisrICAgICAgICAgICAgICAg
cGlwZWxpbmVGdW5jdGlvbnMsCisrICAgICAgICAgICAgICAgcGlwZWxpbmVTdHJ1Y3QsCisrICAg
ICAgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyKSwKKysgICAgICAgICAgbUZ1bmNPcmln
aW5hbFRvTW9kaWZpZWQoZnVuY09yaWdpbmFsVG9Nb2RpZmllZCksCisrICAgICAgICAgIG1GdW5j
TW9kaWZpZWRUb09yaWdpbmFsKGZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpCisrICAgIHsKKysgICAg
ICAgIEFTU0VSVChtUGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKysgICAgfQorKwor
KyAgICBjb25zdCBUVmFyaWFibGUgJmdldEludGVybmFsUGlwZWxpbmVWYXJpYWJsZShjb25zdCBU
RnVuY3Rpb24gJnBpcGVsaW5lRnVuYykKKysgICAgeworKyAgICAgICAgaWYgKHBpcGVsaW5lRnVu
Yy5pc01haW4oKSAmJiAobVBpcGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xh
cmF0aW9uSW5NYWluKCkgfHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICFtUGlwZWxpbmVNYWluTG9jYWxWYXIuaXNVbmlmb3JtKCkpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIEFTU0VSVChtUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwpOworKyAgICAgICAg
ICAgIHJldHVybiAqbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsOworKyAgICAgICAgfQor
KyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZUZ1
bmMuZ2V0UGFyYW1Db3VudCgpID4gMCk7CisrICAgICAgICAgICAgcmV0dXJuICpwaXBlbGluZUZ1
bmMuZ2V0UGFyYW0oMCk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgY29uc3QgVFZhcmlh
YmxlICZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoY29uc3QgVEZ1bmN0aW9uICZtYWluRnVu
YykKKysgICAgeworKyAgICAgICAgQVNTRVJUKG1haW5GdW5jLmlzTWFpbigpKTsKKysgICAgICAg
IGlmIChtUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgcmV0dXJuICptUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWw7CisrICAgICAgICB9
CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1haW5GdW5j
LmdldFBhcmFtQ291bnQoKSA+IDApOworKyAgICAgICAgICAgIHJldHVybiAqbWFpbkZ1bmMuZ2V0
UGFyYW0oMCk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdEFn
Z3JlZ2F0ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmY2FsbE5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGlmIChjYWxsTm9kZS5pc0NvbnN0cnVjdG9yKCkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkQ2FsbGVkRnVuYyA9ICpj
YWxsTm9kZS5nZXRGdW5jdGlvbigpOworKyAgICAgICAgICAgIGlmICghbUVudi5pc09yaWdpbmFs
UGlwZWxpbmVGdW5jdGlvbihvbGRDYWxsZWRGdW5jKSkKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIHJldHVybiBjYWxsTm9kZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAg
Y29uc3QgVEZ1bmN0aW9uICZuZXdDYWxsZWRGdW5jID0gbUVudi5nZXRVcGRhdGVkRnVuY3Rpb24o
b2xkQ2FsbGVkRnVuYyk7CisrCisrICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvbGRPd25l
ckZ1bmMgPSBnZXRQYXJlbnRGdW5jdGlvbigpOworKyAgICAgICAgICAgIEFTU0VSVChvbGRPd25l
ckZ1bmMpOworKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmbmV3T3duZXJGdW5jID0gbUVu
di5nZXRVcGRhdGVkRnVuY3Rpb24oKm9sZE93bmVyRnVuYyk7CisrCisrICAgICAgICAgICAgcmV0
dXJuICpUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwoCisrICAgICAgICAgICAg
ICAgIG5ld0NhbGxlZEZ1bmMsICZDbG9uZVNlcXVlbmNlQW5kUHJlcGVuZCgKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsTm9kZS5nZXRTZXF1ZW5jZSgpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRl
cm5hbFBpcGVsaW5lVmFyaWFibGUobmV3T3duZXJGdW5jKSkpKTsKKysgICAgICAgIH0KKysgICAg
fQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQb3N0KFRJbnRlcm1G
dW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAg
ICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKysgICAgICAg
ICAgICBtRW52LmNyZWF0ZVVwZGF0ZWRGdW5jdGlvblByb3RvdHlwZShmdW5jUHJvdG9Ob2RlKTsK
KysgICAgICAgIGlmIChuZXdGdW5jUHJvdG9Ob2RlID09IG51bGxwdHIpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgcmV0dXJuIGZ1bmNQcm90b05vZGU7CisrICAgICAgICB9CisrICAgICAgICBy
ZXR1cm4gKm5ld0Z1bmNQcm90b05vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNp
dEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0Rl
Zk5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChmdW5jRGVmTm9kZS5nZXRGdW5j
dGlvbigpLT5pc01haW4oKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRN
YWluKGZ1bmNEZWZOb2RlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsK
KysgICAgICAgICAgICByZXR1cm4gdmlzaXROb25NYWluKGZ1bmNEZWZOb2RlKTsKKysgICAgICAg
IH0KKysgICAgfQorKworKyAgICBUSW50ZXJtTm9kZSAmdmlzaXROb25NYWluKFRJbnRlcm1GdW5j
dGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtRnVu
Y3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb25Q
cm90b3R5cGUoKTsKKysgICAgICAgIEFTU0VSVCghZnVuY1Byb3RvTm9kZS5nZXRGdW5jdGlvbigp
LT5pc01haW4oKSk7CisrCisrICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKm5ld0Z1
bmNQcm90b05vZGUgPQorKyAgICAgICAgICAgIG1FbnYuY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJv
dG90eXBlKGZ1bmNQcm90b05vZGUpOworKyAgICAgICAgaWYgKG5ld0Z1bmNQcm90b05vZGUgPT0g
bnVsbHB0cikKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZnVuY0RlZk5vZGU7Cisr
ICAgICAgICB9CisrCisrICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqbmV3RnVuY1By
b3RvTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKysgICAgICAgIEFTU0VSVCghZnVuYy5pc01haW4oKSk7
CisrCisrICAgICAgICBUSW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5jRGVmTm9kZS5nZXRCb2R5KCk7
CisrCisrICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uKG5ld0Z1
bmNQcm90b05vZGUsIGJvZHkpOworKyAgICB9CisrCisrICAgIFRJbnRlcm1Ob2RlICZ2aXNpdE1h
aW4oVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpCisrICAgIHsKKysgICAg
ICAgIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmZnVuY1Byb3RvTm9kZSA9ICpmdW5jRGVmTm9k
ZS5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworKyAgICAgICAgQVNTRVJUKGZ1bmNQcm90b05vZGUu
Z2V0RnVuY3Rpb24oKS0+aXNNYWluKCkpOworKworKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJv
dG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKysgICAgICAgICAgICBtRW52LmNyZWF0ZVVwZGF0
ZWRGdW5jdGlvblByb3RvdHlwZShmdW5jUHJvdG9Ob2RlKTsKKysgICAgICAgIGlmIChuZXdGdW5j
UHJvdG9Ob2RlID09IG51bGxwdHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIGZ1
bmNEZWZOb2RlOworKyAgICAgICAgfQorKworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5j
ID0gKm5ld0Z1bmNQcm90b05vZGUtPmdldEZ1bmN0aW9uKCk7CisrICAgICAgICBBU1NFUlQoZnVu
Yy5pc01haW4oKSk7CisrCisrICAgICAgICBhdXRvIGNhbGxNb2RpZmllZFRvT3JpZ2luYWwgPSBb
Jl0oVEludGVybUJsb2NrICZib2R5KSB7CisrICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1h
aW5Mb2NhbFZhci5pbnRlcm5hbCk7CisrICAgICAgICAgICAgaWYgKCFtUGlwZWxpbmUuaXNQaXBl
bGluZU91dCgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgQVNTRVJUKG1GdW5j
TW9kaWZpZWRUb09yaWdpbmFsKTsKKysgICAgICAgICAgICAgICAgYXV0byAqbSA9IG5ldyBUSW50
ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpOworKyAgICAgICAg
ICAgICAgICBhdXRvICpvID0gbmV3IFRJbnRlcm1TeW1ib2wobVBpcGVsaW5lTWFpbkxvY2FsVmFy
LmludGVybmFsKTsKKysgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVy
bUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKAorKyAgICAgICAgICAgICAgICAgICAgKm1G
dW5jTW9kaWZpZWRUb09yaWdpbmFsLCBuZXcgVEludGVybVNlcXVlbmNle20sIG99KSk7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgfTsKKysKKysgICAgICAgIGF1dG8gY2FsbE9yaWdpbmFsVG9N
b2RpZmllZCA9IFsmXShUSW50ZXJtQmxvY2sgJmJvZHkpIHsKKysgICAgICAgICAgICBBU1NFUlQo
bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKysgICAgICAgICAgICBpZiAobVBpcGVs
aW5lLmlzUGlwZWxpbmVPdXQoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIEFT
U0VSVChtRnVuY09yaWdpbmFsVG9Nb2RpZmllZCk7CisrICAgICAgICAgICAgICAgIGF1dG8gKm8g
PSBuZXcgVEludGVybVN5bWJvbChtUGlwZWxpbmVNYWluTG9jYWxWYXIuaW50ZXJuYWwpOworKyAg
ICAgICAgICAgICAgICBhdXRvICptID0gbmV3IFRJbnRlcm1TeW1ib2woJmdldEV4dGVybmFsUGlw
ZWxpbmVWYXJpYWJsZShmdW5jKSk7CisrICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVt
ZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgKKysgICAgICAgICAgICAg
ICAgICAgICptRnVuY09yaWdpbmFsVG9Nb2RpZmllZCwgbmV3IFRJbnRlcm1TZXF1ZW5jZXtvLCBt
fSkpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH07CisrCisrICAgICAgICBUSW50ZXJtQmxv
Y2sgKmJvZHkgPSBmdW5jRGVmTm9kZS5nZXRCb2R5KCk7CisrCisrICAgICAgICBpZiAobVBpcGVs
aW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1RvdGFs
bHlGdWxsKCkpOworKworKyAgICAgICAgICAgIGF1dG8gKm5ld0JvZHkgPSBuZXcgVEludGVybUJs
b2NrKCk7CisrICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJt
RGVjbGFyYXRpb257bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsfSk7CisrCisrICAgICAg
ICAgICAgaWYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnZvY2F0aW9uVmVy
dGV4R2xvYmFscyB8fAorKyAgICAgICAgICAgICAgICBtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGlu
ZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscykKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgIC8vIFBvcHVsYXRlIHN0cnVjdCBpbnN0YW5jZSB3aXRoIHJlZmVyZW5jZXMg
dG8gZ2xvYmFsIHBpcGVsaW5lIHZhcmlhYmxlcy4KKysgICAgICAgICAgICAgICAgZm9yIChjb25z
dCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKysg
ICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgYXV0byAqdmFyICAgICAgICA9
IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgZmllbGQtPm5hbWUoKSwgZmllbGQtPnR5cGUo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQt
PnN5bWJvbFR5cGUoKSk7CisrICAgICAgICAgICAgICAgICAgICBhdXRvICpzeW1ib2wgICAgID0g
bmV3IFRJbnRlcm1TeW1ib2wodmFyKTsKKysgICAgICAgICAgICAgICAgICAgIGF1dG8gJmFjY2Vz
c05vZGUgPSBBY2Nlc3NGaWVsZCgqbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsLCB2YXIt
Pm5hbWUoKSk7CisrICAgICAgICAgICAgICAgICAgICBhdXRvICphc3NpZ25Ob2RlID0gbmV3IFRJ
bnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZhY2Nlc3NOb2RlLCBzeW1ib2wpOwor
KyAgICAgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGFzc2lnbk5vZGUp
OworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbVBpcGVs
aW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKTsKKysKKysgICAgICAgICAgICAgICAgQVNTRVJU
KGZ1bmMuZ2V0UGFyYW1Db3VudCgpID49IDIgKiBmaWVsZHMuc2l6ZSgpKTsKKysgICAgICAgICAg
ICAgICAgc2l6ZV90IHBhcmFtSW5kZXggPSBmdW5jLmdldFBhcmFtQ291bnQoKSAtIDIgKiBmaWVs
ZHMuc2l6ZSgpOworKworKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQg
OiBmaWVsZHMpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmdGV4dHVyZVBhcmFtID0gKmZ1bmMuZ2V0UGFyYW0ocGFyYW1JbmRleCsrKTsK
KysgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmc2FtcGxlclBhcmFtID0gKmZ1
bmMuZ2V0UGFyYW0ocGFyYW1JbmRleCsrKTsKKysKKysgICAgICAgICAgICAgICAgICAgIGF1dG8g
Z28gPSBbJl0oVEludGVybVR5cGVkICZlbnYsIGNvbnN0IGludCAqaW5kZXgpIHsKKysgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnRleHR1cmVGaWVsZCA9IEFjY2Vzc0ZpZWxk
KAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5
KCksIGluZGV4KSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIikpOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAmc2FtcGxlckZpZWxkID0gQWNjZXNzRmllbGQoCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2Vzc0luZGV4KCplbnYuZGVlcENvcHkoKSwgaW5k
ZXgpLCBJbW11dGFibGVTdHJpbmcoInNhbXBsZXIiKSk7CisrCisrICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBta0Fzc2lnbiA9IFsmXShUSW50ZXJtVHlwZWQgJmZpZWxkLCBjb25zdCBUVmFy
aWFibGUgJnBhcmFtKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
VEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgJmZpZWxkLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1TeW1ib2xFbnYuY2Fs
bEZ1bmN0aW9uT3ZlcmxvYWQoCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTmFtZSgiYWRkcmVzc29mIiksIGZpZWxkLmdldFR5cGUoKSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmQWNjZXNzSW5kZXgoCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVN5
bWJvbCgmcGFyYW0pLCBpbmRleCl9KSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfTsKKysK
KysgICAgICAgICAgICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3Np
Z24odGV4dHVyZUZpZWxkLCB0ZXh0dXJlUGFyYW0pKTsKKysgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3NpZ24oc2FtcGxlckZpZWxkLCBzYW1wbGVy
UGFyYW0pKTsKKysgICAgICAgICAgICAgICAgICAgIH07CisrCisrICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQgJmVudiA9IEFjY2Vzc0ZpZWxkKCptUGlwZWxpbmVNYWluTG9jYWxWYXIu
aW50ZXJuYWwsIGZpZWxkLT5uYW1lKCkpOworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJmVudlR5cGUgPSBlbnYuZ2V0VHlwZSgpOworKworKyAgICAgICAgICAgICAgICAgICAgaWYg
KGVudlR5cGUuaXNBcnJheSgpKQorKyAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghZW52VHlwZS5pc0FycmF5T2ZBcnJheXMoKSk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBuID0gc3RhdGljX2Nhc3Q8aW50PihlbnZUeXBl
LmdldEFycmF5U2l6ZVByb2R1Y3QoKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBuOyArK2kpCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbyhlbnYsICZpKTsKKysgICAgICAgICAgICAgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNl
CisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgZ28oZW52
LCBudWxscHRyKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmUudHlwZSA9PSBQ
aXBlbGluZTo6VHlwZTo6SW5zdGFuY2VJZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybUJpbmFyeSgKKysgICAgICAg
ICAgICAgICAgICAgIFRPcGVyYXRvcjo6RU9wQXNzaWduLAorKyAgICAgICAgICAgICAgICAgICAg
JkFjY2Vzc0ZpZWxkQnlJbmRleCgqbmV3IFRJbnRlcm1TeW1ib2woJmdldEludGVybmFsUGlwZWxp
bmVWYXJpYWJsZShmdW5jKSksIDApLAorKyAgICAgICAgICAgICAgICAgICAgJkFzVHlwZShtU3lt
Ym9sRW52LCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCksCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICpuZXcgVEludGVybVN5bWJvbCgmZ2V0RXh0ZXJuYWxQaXBlbGluZVZhcmlh
YmxlKGZ1bmMpKSkpKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSBpZiAoIW1Q
aXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0aW9u
e21QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbH0pOworKyAgICAgICAgICAgICAgICBjYWxs
TW9kaWZpZWRUb09yaWdpbmFsKCpuZXdCb2R5KTsKKysgICAgICAgICAgICB9CisrCisrICAgICAg
ICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGJvZHkpOworKworKyAgICAgICAgICAgIGlm
ICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY2FsbE9yaWdpbmFsVG9Nb2RpZmllZCgqbmV3Qm9keSk7CisrICAgICAg
ICAgICAgfQorKworKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50
KG5ldyBUSW50ZXJtQnJhbmNoKAorKyAgICAgICAgICAgICAgICAgICAgVE9wZXJhdG9yOjpFT3BS
ZXR1cm4sIG5ldyBUSW50ZXJtU3ltYm9sKG1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCkp
KTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgYm9keSA9IG5ld0JvZHk7CisrICAg
ICAgICB9CisrICAgICAgICBlbHNlIGlmICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9y
bSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVCghbVBpcGVsaW5lTWFpbkxvY2Fs
VmFyLmV4dGVybmFsKTsKKysgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFy
LmludGVybmFsKTsKKysKKysgICAgICAgICAgICBhdXRvICpuZXdCb2R5ID0gbmV3IFRJbnRlcm1C
bG9jaygpOworKyAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVy
bURlY2xhcmF0aW9ue21QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbH0pOworKyAgICAgICAg
ICAgIGNhbGxNb2RpZmllZFRvT3JpZ2luYWwoKm5ld0JvZHkpOworKyAgICAgICAgICAgIG5ld0Jv
ZHktPmFwcGVuZFN0YXRlbWVudChib2R5KTsKKysgICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01v
ZGlmaWVkKCpuZXdCb2R5KTsKKysgICAgICAgICAgICBib2R5ID0gbmV3Qm9keTsKKysgICAgICAg
IH0KKysKKysgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24obmV3
RnVuY1Byb3RvTm9kZSwgYm9keSk7CisrICAgIH0KKyt9OworKworKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisrCisrYm9vbCBVcGRhdGVQaXBlbGluZVN5bWJvbHMoUGlwZWxpbmU6OlR5cGUgcGlw
ZWxpbmVUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDb21waWxlciAmY29tcGls
ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhcmlhYmxlU2V0ICZwaXBlbGluZVZhcmlhYmxlcywK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUVmFyaWFibGU+IHBp
cGVsaW5lTWFpbkxvY2FsVmFyKQorK3sKKysgICAgYXV0byBtYXAgPSBbJl0oY29uc3QgVEZ1bmN0
aW9uICpvd25lciwgVEludGVybVN5bWJvbCAmc3ltYm9sKSAtPiBUSW50ZXJtTm9kZSAmIHsKKysg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sLnZhcmlhYmxlKCk7CisrICAgICAg
ICBpZiAocGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSA9PSBwaXBlbGluZVZhcmlhYmxlcy5l
bmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gc3ltYm9sOworKyAgICAgICAg
fQorKyAgICAgICAgQVNTRVJUKG93bmVyKTsKKysgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqc3Ry
dWN0SW5zdGFuY2VWYXI7CisrICAgICAgICBpZiAob3duZXItPmlzTWFpbigpKQorKyAgICAgICAg
eworKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7Cisr
ICAgICAgICAgICAgc3RydWN0SW5zdGFuY2VWYXIgPSBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRl
cm5hbDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBBU1NFUlQob3duZXItPmdldFBhcmFtQ291bnQoKSA+IDApOworKyAgICAgICAgICAgIHN0cnVj
dEluc3RhbmNlVmFyID0gb3duZXItPmdldFBhcmFtKDApOworKyAgICAgICAgfQorKyAgICAgICAg
QVNTRVJUKHN0cnVjdEluc3RhbmNlVmFyKTsKKysgICAgICAgIHJldHVybiBBY2Nlc3NGaWVsZCgq
c3RydWN0SW5zdGFuY2VWYXIsIHZhci5uYW1lKCkpOworKyAgICB9OworKyAgICByZXR1cm4gTWFw
U3ltYm9scyhjb21waWxlciwgcm9vdCwgbWFwKTsKKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKysKKytib29sIFJld3JpdGVQaXBlbGluZShUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAg
ICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUg
JnBpcGVsaW5lLAorKyAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAor
KyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMsCisrICAgICAgICAg
ICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJm91dFN0cnVjdCkKKyt7Cisr
ICAgIEFTU0VSVChvdXRTdHJ1Y3QuaXNUb3RhbGx5RW1wdHkoKSk7CisrCisrICAgIFRTeW1ib2xU
YWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworKworKyAgICBQ
aXBlbGluZVN0cnVjdEluZm8gcHNpOworKyAgICBpZiAoIUdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3Q6
OkV4ZWMocHNpLCBjb21waWxlciwgcm9vdCwgaWRHZW4sIHBpcGVsaW5lLCBzeW1ib2xFbnYsIGlu
dmFyaWFudHMpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysg
ICAgaWYgKHBzaS5pc0VtcHR5KCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAg
ICB9CisrCisrICAgIGNvbnN0IGF1dG8gcGlwZWxpbmVGdW5jdGlvbnMgPSBEaXNjb3ZlckRlcGVu
ZGVudEZ1bmN0aW9ucyhyb290LCBbJl0oY29uc3QgVFZhcmlhYmxlICZ2YXIpIHsKKysgICAgICAg
IHJldHVybiBwc2kucGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSAhPSBwc2kucGlwZWxpbmVW
YXJpYWJsZXMuZW5kKCk7CisrICAgIH0pOworKworKyAgICBhdXRvIHBpcGVsaW5lTWFpbkxvY2Fs
VmFyID0KKysgICAgICAgIENyZWF0ZVBpcGVsaW5lTWFpbkxvY2FsVmFyKHN5bWJvbFRhYmxlLCBw
aXBlbGluZSwgcHNpLnBpcGVsaW5lU3RydWN0KTsKKysKKysgICAgaWYgKCFVcGRhdGVQaXBlbGlu
ZUZ1bmN0aW9uczo6VGhyZWFkUGlwZWxpbmUoCisrICAgICAgICAgICAgY29tcGlsZXIsIHJvb3Qs
IHBpcGVsaW5lLCBwaXBlbGluZUZ1bmN0aW9ucywgcHNpLnBpcGVsaW5lU3RydWN0LCBwaXBlbGlu
ZU1haW5Mb2NhbFZhciwKKysgICAgICAgICAgICBpZEdlbiwgc3ltYm9sRW52LCBwc2kuZnVuY09y
aWdpbmFsVG9Nb2RpZmllZCwgcHNpLmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFwaXBlbGluZS5nbG9i
YWxJbnN0YW5jZVZhcikKKysgICAgeworKyAgICAgICAgaWYgKCFVcGRhdGVQaXBlbGluZVN5bWJv
bHMocGlwZWxpbmUudHlwZSwgY29tcGlsZXIsIHJvb3QsIHN5bWJvbEVudiwgcHNpLnBpcGVsaW5l
VmFyaWFibGVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVN
YWluTG9jYWxWYXIpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysg
ICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAoIVBydW5lTm9PcHMoJmNvbXBpbGVyLCAmcm9v
dCwgJmNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgIH0KKysKKysgICAgb3V0U3RydWN0ID0gcHNpLnBpcGVsaW5lU3RydWN0Owor
KyAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorKwor
K2Jvb2wgc2g6OlJld3JpdGVQaXBlbGluZXMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSAmYW5nbGVVbmlmb3Jtc0dsb2JhbEluc3RhbmNlVmFyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnZhcmlhbnRzICZpbnZhcmlhbnRzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGlwZWxpbmVTdHJ1Y3RzICZvdXRTdHJ1Y3RzKQorK3sKKysgICAgc3RydWN0IEluZm8KKysg
ICAgeworKyAgICAgICAgUGlwZWxpbmU6OlR5cGUgcGlwZWxpbmVUeXBlOworKyAgICAgICAgUGlw
ZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJm91dFN0cnVjdDsKKysgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAqZ2xvYmFsSW5zdGFuY2VWYXI7CisrICAgIH07CisrCisrICAgIEluZm8gaW5mb3NbXSA9
IHsKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6SW5zdGFuY2VJZCwgb3V0U3RydWN0cy5pbnN0
YW5jZUlkLCBudWxscHRyfSwKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSwgb3V0
U3RydWN0cy50ZXh0dXJlLCBudWxscHRyfSwKKysgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6Tm9u
Q29uc3RhbnRHbG9iYWxzLCBvdXRTdHJ1Y3RzLm5vbkNvbnN0YW50R2xvYmFscywgbnVsbHB0cn0s
CisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OkFuZ2xlVW5pZm9ybXMsIG91dFN0cnVjdHMuYW5n
bGVVbmlmb3JtcywgJmFuZ2xlVW5pZm9ybXNHbG9iYWxJbnN0YW5jZVZhcn0sCisrICAgICAgICB7
UGlwZWxpbmU6OlR5cGU6OlVzZXJVbmlmb3Jtcywgb3V0U3RydWN0cy51c2VyVW5pZm9ybXMsIG51
bGxwdHJ9LAorKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpWZXJ0ZXhJbiwgb3V0U3RydWN0cy52
ZXJ0ZXhJbiwgbnVsbHB0cn0sCisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlZlcnRleE91dCwg
b3V0U3RydWN0cy52ZXJ0ZXhPdXQsIG51bGxwdHJ9LAorKyAgICAgICAge1BpcGVsaW5lOjpUeXBl
OjpGcmFnbWVudEluLCBvdXRTdHJ1Y3RzLmZyYWdtZW50SW4sIG51bGxwdHJ9LAorKyAgICAgICAg
e1BpcGVsaW5lOjpUeXBlOjpGcmFnbWVudE91dCwgb3V0U3RydWN0cy5mcmFnbWVudE91dCwgbnVs
bHB0cn0sCisrICAgICAgICB7UGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxz
LCBvdXRTdHJ1Y3RzLmludm9jYXRpb25WZXJ0ZXhHbG9iYWxzLCBudWxscHRyfSwKKysgICAgICAg
IHtQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscywgb3V0U3RydWN0cy5p
bnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLCBudWxscHRyfSwKKysgICAgfTsKKysKKysgICAgZm9y
IChJbmZvICZpbmZvIDogaW5mb3MpCisrICAgIHsKKysgICAgICAgIFBpcGVsaW5lIHBpcGVsaW5l
e2luZm8ucGlwZWxpbmVUeXBlLCBpbmZvLmdsb2JhbEluc3RhbmNlVmFyfTsKKysgICAgICAgIGlm
ICghUmV3cml0ZVBpcGVsaW5lKGNvbXBpbGVyLCByb290LCBpZEdlbiwgcGlwZWxpbmUsIHN5bWJv
bEVudiwgaW52YXJpYW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ub3V0
U3RydWN0KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAg
ICB9CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVz
LmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0
ZVBpcGVsaW5lcy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzkxYmE4
MgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaAorQEAgLTAsMCArMSw0NSBAQAorKy8vCisr
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworKworKyNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBp
bGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0lkR2VuLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1BpcGVsaW5lLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oIgorKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYu
aCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gVGhpcyByZXdyaXRlcyBhbGwgcGlwZWxp
bmVzLgorKy8vCisrLy8gRm9yIGVhY2ggcGlwZWxpbmU6CisrLy8gICAgLSBEaXNjb3ZlciBhbGwg
dmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIHBpcGVsaW5lCisrLy8gICAgLSBNb3ZlIHRo
ZSB2YXJpYWJsZXMgaW50byBhbiBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaW5zdGFuY2UgYW5k
IHVwZGF0ZSBvbGQgdmFyaWFibGVzIHRvIGJlCisrLy8gICAgICBtZW1iZXIgYWNjZXNzIGluc3Rl
YWQuCisrLy8gICAgLSBEZXBlbmRlbmN5IGluamVjdCB0aGUgaW50ZXJuYWwgcGlwZWxpbmUgc3Ry
dWN0IHRvIGFsbCBmdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdmFyaWFibGVzIGZyb20KKysvLyAgICAg
IHRoZSBzdHJ1Y3QuCisrLy8gICAgLSBBIG5ldyBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaXMg
Y3JlYXRlZCBpZiBuZWVkZWQgZm9yIGltcGVkYW5jZSByZWFzb25zLiBPdGhlcndpc2UgdGhlCisr
Ly8gICAgICBleHRlcm5hbCBhbmQgaW50ZXJuYWwgcGlwZWxpbmUgc3RydWN0cyBhcmUgdGhlIHNh
bWUuCisrLy8gICAgLSBBZGQgYG1haW5gIHBhcmFtZXRlciBvciByZXR1cm4gdmFsdWUgZm9yIHRo
ZSBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgYXMgbmVlZGVkLgorKy8vICAgIC0gSW5zaWRlIGBt
YWluYCwgbWFwIHRoZSBleHRlcm5hbCBzdHJ1Y3QgdG8gdGhlIGludGVybmFsIHN0cnVjdCBpZiB0
aGV5IGRpZmZlciBhbmQgaXMgcHJvdmlkZWQKKysvLyAgICAgIGFzIGEgcGFyYW1ldGVyIHRvIGBt
YWluYC4KKysvLyAgICAtIEluc2lkZSBgbWFpbmAsIG1hcCB0aGUgaW50ZXJuYWwgc3RydWN0IHRv
IHRoZSBleHRlcm5hbCBzdHJ1Y3QgaWYgdGhleSBkaWZmZXIgYW5kIGlzIHJldHVybmVkCisrLy8g
ICAgICBmcm9tIGBtYWluYC4KKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZVBpcGVsaW5l
cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZhbmdsZVVuaWZvcm1zR2xvYmFsSW5zdGFuY2VWYXIs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1i
b2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50
cyAmaW52YXJpYW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
aXBlbGluZVN0cnVjdHMgJm91dFN0cnVjdHMpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKwor
KyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVX
UklURVBJUEVMSU5FU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3BwIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFk
ZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAw
MDAwLi5lNzdjMWE1CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmNw
cAorQEAgLTAsMCArMSwzNzYgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVS
ZWZlcmVuY2VzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX3V0aWwvQXNOb2RlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisr
bmFtZXNwYWNlCisreworKworK2Jvb2wgSXNPdXRQYXJhbShjb25zdCBUVHlwZSAmcGFyYW1UeXBl
KQorK3sKKysgICAgY29uc3QgVFF1YWxpZmllciBxdWFsID0gcGFyYW1UeXBlLmdldFF1YWxpZmll
cigpOworKyAgICBzd2l0Y2ggKHF1YWwpCisrICAgIHsKKysgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxSW5PdXQ6CisrICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU91dDoKKysgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworKyAgICB9CisrfQorKworK2Jvb2wgSXNWZWN0b3JBY2Nlc3MoVEludGVybUJp
bmFyeSAmYmluYXJ5KQorK3sKKysgICAgVE9wZXJhdG9yIG9wID0gYmluYXJ5LmdldE9wKCk7Cisr
ICAgIHN3aXRjaCAob3ApCisrICAgIHsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0OgorKyAg
ICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBlID0gYmluYXJ5
LmdldExlZnQoKS0+Z2V0VHlwZSgpOworKyAgICBpZiAoIWxlZnRUeXBlLmlzVmVjdG9yKCkgfHwg
bGVmdFR5cGUuaXNBcnJheSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgQVNTRVJUKElzU2NhbGFyQmFzaWNUeXBlKGJpbmFyeS5nZXRUeXBlKCkpKTsK
KysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK2Jvb2wgSXNWZWN0b3JBY2Nlc3MoVEludGVy
bU5vZGUgJm5vZGUpCisreworKyAgICBpZiAoYXV0byAqYmluID0gbm9kZS5nZXRBc0JpbmFyeU5v
ZGUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIElzVmVjdG9yQWNjZXNzKCpiaW4pOworKyAg
ICB9CisrICAgIHJldHVybiBmYWxzZTsKKyt9CisrCisrLy8gRGlmZmVycyBmcm9tIElzQXNzaWdu
bWVudCBpbiB0aGF0IGl0IGRvZXMgbm90IGluY2x1ZGUgKCsrKSBvciAoLS0pLgorK2Jvb2wgSXNB
c3NpZ25FcXVhbHNTaWduKFRPcGVyYXRvciBvcCkKKyt7CisrICAgIHN3aXRjaCAob3ApCisrICAg
IHsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGRB
c3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc1NjYWxhckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhU
aW1lc01hdHJpeEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246
CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXR3aXNlQW5kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3JB
c3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisrLy8gT25seSBpbmNsdWRlcyAoJD0pIHN0
eWxlIGFzc2lnbnMsIHdoZXJlICgkKSBpcyBhIGJpbmFyeSBvcC4KKytib29sIElzQ29tcG91bmRB
c3NpZ24oVE9wZXJhdG9yIG9wKQorK3sKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFkZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BTdWJBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
TW9kQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2ln
bjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisrICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlT3JBc3NpZ246CisrICAgICAgICAgICAgcmV0dXJuIHRydWU7CisrCisrICAg
ICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorK30KKysK
Kytib29sIFJldHVybnNSZWZlcmVuY2UoVE9wZXJhdG9yIG9wKQorK3sKKysgICAgc3dpdGNoIChv
cCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFzc2lnbjoKKysgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEFkZEFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERp
dkFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0
d2lzZVhvckFzc2lnbjoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlT3JBc3Np
Z246CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKysgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0RGVjcmVtZW50OgorKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFByZUluY3JlbWVudDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQcmVE
ZWNyZW1lbnQ6CisrCisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6Cisr
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKysgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorKworKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKyt9CisrCisrVEludGVybVR5cGVkICZEZWNvbXBvc2VDb21wb3VuZEFzc2lnbm1lbnQo
VEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3Ao
KTsKKysgICAgc3dpdGNoIChvcCkKKysgICAgeworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEFkZEFzc2lnbjoKKysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQWRkOworKyAgICAg
ICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2lnbjoKKysg
ICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wU3ViOworKyAgICAgICAgICAgIGJyZWFrOwor
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKysgICAgICAgICAgICBvcCA9
IFRPcGVyYXRvcjo6RU9wTXVsOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgICAgIG9wID0g
VE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDsKKysgICAgICAgICAgICBicmVhazsKKysg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKysgICAg
ICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXI7CisrICAgICAgICAg
ICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJB
c3NpZ246CisrICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFy
OworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJp
eFRpbWVzTWF0cml4QXNzaWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc01hdHJpeDsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BEaXZBc3NpZ246CisrICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcERpdjsK
KysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNz
aWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BJTW9kOworKyAgICAgICAgICAg
IGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0TGVmdEFzc2lnbjoK
KysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3Np
Z246CisrICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ7CisrICAg
ICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFz
c2lnbjoKKysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDsKKysgICAg
ICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNz
aWduOgorKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yOworKyAgICAg
ICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VPckFzc2ln
bjoKKysgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOworKyAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigp
OworKyAgICB9CisrCisrICAgIC8vIFRoaXMgYXNzdW1lcyBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVz
c2lvbnMgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuCisrICAgIC8vIFRoaXMgYXNzdW1wdGlvbiBh
bGxvd3MgdGhpcyBjb2RlIHRvIG5vdCBuZWVkIHRvIGludHJvZHVjZSB0ZW1wb3Jhcmllcy4KKysg
ICAgLy8KKysgICAgLy8gZS5nLiBkb250IGhhdmUgdG8gd29ycnkgYWJvdXQ6CisrICAgIC8vICAg
ICAgdmVjW2hhc1NpZGVFZmZlY3QoKV0gKj0gNAorKyAgICAvLyBiZWNvbWluZworKyAgICAvLyAg
ICAgIHZlY1toYXNTaWRlRWZmZWN0KCldID0gdmVjW2hhc1NpZGVFZmZlY3QoKV0gKiA0CisrCisr
ICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKysgICAgVEludGVybVR5
cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKysgICAgcmV0dXJuICpuZXcgVEludGVybUJp
bmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgbGVmdC0+ZGVlcENvcHkoKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVybUJpbmFyeShvcCwgbGVmdCwgcmlnaHQpKTsK
Kyt9CisrCisrY2xhc3MgUmV3cml0ZXIxIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAg
cHVibGljOgorKyAgICBSZXdyaXRlcjEoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVi
dWlsZChjb21waWxlciwgZmFsc2UsIHRydWUpIHt9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRC
aW5hcnlQb3N0KFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysg
ICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKysgICAgICAg
IGlmIChJc0NvbXBvdW5kQXNzaWduKG9wKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgJmxlZnQgPSAqYmluYXJ5Tm9kZS5nZXRMZWZ0KCk7CisrICAgICAgICAgICAgaWYg
KGxlZnQuZ2V0QXNTd2l6emxlTm9kZSgpIHx8IElzVmVjdG9yQWNjZXNzKGxlZnQpKQorKyAgICAg
ICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zZUNvbXBvdW5kQXNzaWdu
bWVudChiaW5hcnlOb2RlKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBy
ZXR1cm4gYmluYXJ5Tm9kZTsKKysgICAgfQorK307CisrCisrY2xhc3MgUmV3cml0ZXIyIDogcHVi
bGljIFRJbnRlcm1SZWJ1aWxkCisreworKyAgICBzdGQ6OnZlY3Rvcjxib29sPiBtUmVxdWlyZXNB
ZGRyZXNzaW5nU3RhY2s7CisrICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKysKKysgIHByaXZh
dGU6CisrICAgIGJvb2wgcmVxdWlyZXNBZGRyZXNzaW5nKCkgY29uc3QKKysgICAgeworKyAgICAg
ICAgaWYgKG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5lbXB0eSgpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBtUmVx
dWlyZXNBZGRyZXNzaW5nU3RhY2suYmFjaygpOworKyAgICB9CisrCisrICBwdWJsaWM6CisrICAg
IH5SZXdyaXRlcjIoKSBvdmVycmlkZSB7IEFTU0VSVChtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2su
ZW1wdHkoKSk7IH0KKysKKysgICAgUmV3cml0ZXIyKFRDb21waWxlciAmY29tcGlsZXIsIFN5bWJv
bEVudiAmc3ltYm9sRW52KQorKyAgICAgICAgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1
ZSwgdHJ1ZSksIG1TeW1ib2xFbnYoc3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBQcmVSZXN1
bHQgdmlzaXRBZ2dyZWdhdGVQcmUoVEludGVybUFnZ3JlZ2F0ZSAmYWdncmVnYXRlTm9kZSkgb3Zl
cnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gYWdncmVnYXRl
Tm9kZS5nZXRGdW5jdGlvbigpOworKyAgICAgICAgaWYgKCFmdW5jKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIHJldHVybiBhZ2dyZWdhdGVOb2RlOworKyAgICAgICAgfQorKworKyAgICAgICAg
VEludGVybVNlcXVlbmNlICZhcmdzID0gKmFnZ3JlZ2F0ZU5vZGUuZ2V0U2VxdWVuY2UoKTsKKysg
ICAgICAgIHNpemVfdCBhcmdDb3VudCAgICAgICA9IGFyZ3Muc2l6ZSgpOworKworKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0gPSAqZnVuYy0+Z2V0UGFyYW0oaSk7CisrICAg
ICAgICAgICAgY29uc3QgVFR5cGUgJnBhcmFtVHlwZSA9IHBhcmFtLmdldFR5cGUoKTsKKysgICAg
ICAgICAgICBUSW50ZXJtTm9kZSAqYXJnICAgICAgID0gYXJnc1tpXTsKKysgICAgICAgICAgICBB
U1NFUlQoYXJnKTsKKysKKysgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucHVz
aF9iYWNrKElzT3V0UGFyYW0ocGFyYW1UeXBlKSk7CisrICAgICAgICAgICAgYXJnc1tpXSA9IHJl
YnVpbGQoKmFyZykuc2luZ2xlKCk7CisrICAgICAgICAgICAgQVNTRVJUKGFyZ3NbaV0pOworKyAg
ICAgICAgICAgIEFTU0VSVCghbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLmVtcHR5KCkpOworKyAg
ICAgICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygpOworKyAgICAgICAg
fQorKworKyAgICAgICAgcmV0dXJuIHthZ2dyZWdhdGVOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9
OworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dp
enpsZSAmc3dpenpsZU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmICghcmVxdWly
ZXNBZGRyZXNzaW5nKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHN3aXp6bGVO
b2RlOworKyAgICAgICAgfQorKworKyAgICAgICAgVEludGVybVR5cGVkICZ2ZWNOb2RlICAgICAg
ICAgPSAqc3dpenpsZU5vZGUuZ2V0T3BlcmFuZCgpOworKyAgICAgICAgY29uc3QgVFF1YWxpZmll
ckxpc3QgJm9mZnNldHMgPSBzd2l6emxlTm9kZS5nZXRTd2l6emxlT2Zmc2V0cygpOworKyAgICAg
ICAgQVNTRVJUKCFvZmZzZXRzLmVtcHR5KCkpOworKyAgICAgICAgQVNTRVJUKG9mZnNldHMuc2l6
ZSgpIDw9IDQpOworKworKyAgICAgICAgYXV0byAmYXJncyA9ICpuZXcgVEludGVybVNlcXVlbmNl
KCk7CisrICAgICAgICBhcmdzLnJlc2VydmUob2Zmc2V0cy5zaXplKCkgKyAxKTsKKysgICAgICAg
IGFyZ3MucHVzaF9iYWNrKCZ2ZWNOb2RlKTsKKysgICAgICAgIGZvciAoaW50IG9mZnNldCA6IG9m
ZnNldHMpCisrICAgICAgICB7CisrICAgICAgICAgICAgYXJncy5wdXNoX2JhY2sobmV3IFRJbnRl
cm1Db25zdGFudFVuaW9uKG5ldyBUQ29uc3RhbnRVbmlvbihvZmZzZXQpLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3IFRUeXBlKFRCYXNp
Y1R5cGU6OkVidEludCkpKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiBtU3ltYm9s
RW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoInN3aXp6bGVfcmVmIiksIHN3aXp6bGVOb2Rl
LmdldFR5cGUoKSwgYXJncyk7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5
UHJlKFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAg
IGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKysKKysgICAgICAgIGNv
bnN0IGJvb2wgaXNBY2Nlc3MgPSBJc1ZlY3RvckFjY2VzcyhiaW5hcnlOb2RlKTsKKysKKysgICAg
ICAgIGNvbnN0IGJvb2wgZGlzYWJsZVRvcCAgID0gIVJldHVybnNSZWZlcmVuY2Uob3ApIHx8ICFy
ZXF1aXJlc0FkZHJlc3NpbmcoKTsKKysgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZUxlZnQgID0g
ZGlzYWJsZVRvcDsKKysgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZVJpZ2h0ID0gZGlzYWJsZVRv
cCB8fCBpc0FjY2VzcyB8fCBJc0Fzc2lnbkVxdWFsc1NpZ24ob3ApOworKworKyAgICAgICAgYXV0
byB0cmF2ZXJzZSA9IFsmXShUSW50ZXJtVHlwZWQgJm5vZGUsIGNvbnN0IGJvb2wgZGlzYWJsZSkg
LT4gVEludGVybVR5cGVkICYgeworKyAgICAgICAgICAgIGlmIChkaXNhYmxlKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnB1c2hfYmFj
ayhmYWxzZSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGF1dG8gKm5ld05vZGUgPSBh
c05vZGU8VEludGVybVR5cGVkPihyZWJ1aWxkKG5vZGUpLnNpbmdsZSgpKTsKKysgICAgICAgICAg
ICBBU1NFUlQobmV3Tm9kZSk7CisrICAgICAgICAgICAgaWYgKGRpc2FibGUpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2sucG9wX2JhY2so
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgcmV0dXJuICpuZXdOb2RlOworKyAgICAg
ICAgfTsKKysKKysgICAgICAgIFRJbnRlcm1UeXBlZCAmbGVmdE5vZGUgID0gKmJpbmFyeU5vZGUu
Z2V0TGVmdCgpOworKyAgICAgICAgVEludGVybVR5cGVkICZyaWdodE5vZGUgPSAqYmluYXJ5Tm9k
ZS5nZXRSaWdodCgpOworKworKyAgICAgICAgVEludGVybVR5cGVkICZuZXdMZWZ0ICA9IHRyYXZl
cnNlKGxlZnROb2RlLCBkaXNhYmxlTGVmdCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgJm5ld1Jp
Z2h0ID0gdHJhdmVyc2UocmlnaHROb2RlLCBkaXNhYmxlUmlnaHQpOworKworKyAgICAgICAgaWYg
KCFpc0FjY2VzcyB8fCBkaXNhYmxlVG9wKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmICgm
bGVmdE5vZGUgPT0gJm5ld0xlZnQgJiYgJnJpZ2h0Tm9kZSA9PSAmbmV3UmlnaHQpCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4geyZiaW5hcnlOb2RlLCBWaXNpdEJpdHM6
Ok5laXRoZXJ9OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXR1cm4geypuZXcgVElu
dGVybUJpbmFyeShvcCwgJm5ld0xlZnQsICZuZXdSaWdodCksIFZpc2l0Qml0czo6TmVpdGhlcn07
CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4ge21TeW1ib2xFbnYuY2FsbEZ1bmN0aW9u
T3ZlcmxvYWQoTmFtZSgiZWxlbV9yZWYiKSwgYmluYXJ5Tm9kZS5nZXRUeXBlKCksCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2Vx
dWVuY2V7Jm5ld0xlZnQsICZuZXdSaWdodH0pLAorKyAgICAgICAgICAgICAgICBWaXNpdEJpdHM6
Ok5laXRoZXJ9OworKyAgICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisr
CisrYm9vbCBzaDo6UmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzKFRDb21waWxlciAmY29t
cGlsZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lt
Ym9sRW52ICZzeW1ib2xFbnYpCisreworKyAgICBpZiAoIVJld3JpdGVyMShjb21waWxlcikucmVi
dWlsZFJvb3Qocm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KyAgICBpZiAoIVJld3JpdGVyMihjb21waWxlciwgc3ltYm9sRW52KS5yZWJ1aWxkUm9vdChyb290
KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHJldHVybiB0
cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmggYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVS
ZWZlcmVuY2VzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43N2RhOTg0
CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmgKK0BAIC0wLDAgKzEs
MzEgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVVTkFERFJFU1NBQkxFUkVGRVJFTkNFU19IXworKyNk
ZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVO
QUREUkVTU0FCTEVSRUZFUkVOQ0VTX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNo
CisreworKworKy8vIEdpdmVuOgorKy8vICAgdm9pZCBmb28ob3V0IHgpOworKy8vIEl0IGlzIHBv
c3NpYmxlIGZvciB0aGUgZm9sbG93aW5nIHRvIGJlIGxlZ2FsIGluIEdMU0wgYnV0IG5vdCBpbiBN
ZXRhbDoKKysvLyAgIGZvbyhleHByZXNzaW9uKTsKKysvLyBUaGlzIGNhbiBoYXBwZW4gaW4gY2Fz
ZXMgd2hlcmUgYGV4cHJlc3Npb25gIGlzIGEgdmVjdG9yIHN3aXp6bGUgb3IgdmVjdG9yIGVsZW1l
bnQgYWNjZXNzLgorKy8vIFRoaXMgcmV3cml0ZSBmdW5jdGlvbmFsaXR5IGludHJvZHVjZXMgdGVt
cG9yYXJpZXMgdGhhdCBzZXJ2ZSBhcyBwcm94aWVzIHRvIGJlIHBhc3NlZCB0byB0aGUKKysvLyBv
dXQvaW5vdXQgcGFyYW1ldGVycyBhcyBuZWVkZWQuIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Np
b25zIGdldCBwb3B1bGF0ZWQgd2l0aCB0aGVpcgorKy8vIHByb3hpZXMgYWZ0ZXIgdGhlIGZ1bmN0
aW9uIGNhbGwuCisrQU5HTEVfTk9fRElTQ0FSRCBib29sIFJld3JpdGVVbmFkZHJlc3NhYmxlUmVm
ZXJlbmNlcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZz
eW1ib2xFbnYpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVVOQUREUkVTU0FCTEVS
RUZFUkVOQ0VTX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucy5jcHAgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4
cHJlc3Npb25zLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjVhN2Iz
NzMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuY3BwCitAQCAtMCwwICsx
LDY1NSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKwor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RI
ZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0RlYnVnLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Np
b25zLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlM
b29wQ29uZGl0aW9ucy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIHNoOworKworKy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisrCisrbmFtZXNwYWNlCisreworKworK2Jvb2wgSXNJbmRleChUT3Bl
cmF0b3Igb3ApCisreworKyAgICBzd2l0Y2ggKG9wKQorKyAgICB7CisrICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisrICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdFN0cnVjdDoKKysgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleEluZGlyZWN0
OgorKyAgICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKyt9CisrCisrYm9vbCBJc0luZGV4KFRJbnRlcm1U
eXBlZCAmZXhwcikKKyt7CisrICAgIGlmIChhdXRvICpiaW5hcnkgPSBleHByLmdldEFzQmluYXJ5
Tm9kZSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gSXNJbmRleChiaW5hcnktPmdldE9wKCkp
OworKyAgICB9CisrICAgIHJldHVybiBleHByLmdldEFzU3dpenpsZU5vZGUoKTsKKyt9CisrCisr
Ym9vbCBWaWV3QmluYXJ5Q2hhaW4oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQgJm5vZGUsIHN0
ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmb3V0KQorK3sKKysgICAgVEludGVybUJpbmFyeSAq
YmluYXJ5ID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKTsKKysgICAgaWYgKCFiaW5hcnkgfHwgYmlu
YXJ5LT5nZXRPcCgpICE9IG9wKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgVEludGVybVR5cGVkICpsZWZ0ICA9IGJpbmFyeS0+Z2V0TGVmdCgpOworKyAg
ICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gYmluYXJ5LT5nZXRSaWdodCgpOworKworKyAgICBpZiAo
IVZpZXdCaW5hcnlDaGFpbihvcCwgKmxlZnQsIG91dCkpCisrICAgIHsKKysgICAgICAgIG91dC5w
dXNoX2JhY2sobGVmdCk7CisrICAgIH0KKysKKysgICAgaWYgKCFWaWV3QmluYXJ5Q2hhaW4ob3As
ICpyaWdodCwgb3V0KSkKKysgICAgeworKyAgICAgICAgb3V0LnB1c2hfYmFjayhyaWdodCk7Cisr
ICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK3N0ZDo6dmVjdG9yPFRJbnRlcm1U
eXBlZCAqPiBWaWV3QmluYXJ5Q2hhaW4oVEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIHN0
ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBjaGFpbjsKKysgICAgVmlld0JpbmFyeUNoYWluKG5v
ZGUuZ2V0T3AoKSwgbm9kZSwgY2hhaW4pOworKyAgICBBU1NFUlQoY2hhaW4uc2l6ZSgpID49IDIp
OworKyAgICByZXR1cm4gY2hhaW47CisrfQorKworK2NsYXNzIFByZVBhc3MgOiBwdWJsaWMgVElu
dGVybVJlYnVpbGQKKyt7CisrICBwdWJsaWM6CisrICAgIFByZVBhc3MoVENvbXBpbGVyICZjb21w
aWxlcikgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgdHJ1ZSkge30KKysKKysgIHBy
aXZhdGU6CisrICAgIC8vIENoYW5nZSBjaGFpbnMgb2YKKysgICAgLy8gICAgICB4IE9QIHkgT1Ag
egorKyAgICAvLyB0bworKyAgICAvLyAgICAgIHggT1AgKHkgT1AgeikKKysgICAgLy8gcmVnYXJk
bGVzcyBvZiBvcmlnaW5hbCBwYXJlbnRoZXNpemF0aW9uLgorKyAgICBUSW50ZXJtVHlwZWQgJnJl
YXNzb2NpYXRlUmlnaHQoVEludGVybUJpbmFyeSAmbm9kZSkKKysgICAgeworKyAgICAgICAgY29u
c3QgVE9wZXJhdG9yIG9wICAgICAgICAgICAgICAgID0gbm9kZS5nZXRPcCgpOworKyAgICAgICAg
c3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IGNoYWluID0gVmlld0JpbmFyeUNoYWluKG5vZGUp
OworKworKyAgICAgICAgVEludGVybVR5cGVkICpyZXN1bHQgPSBjaGFpbi5iYWNrKCk7CisrICAg
ICAgICBjaGFpbi5wb3BfYmFjaygpOworKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisrCisrICAg
ICAgICBjb25zdCBhdXRvIGJlZ2luID0gY2hhaW4ucmJlZ2luKCk7CisrICAgICAgICBjb25zdCBh
dXRvIGVuZCAgID0gY2hhaW4ucmVuZCgpOworKworKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBi
ZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgKnBhcnQgPSAqaXRlcjsKKysgICAgICAgICAgICBBU1NFUlQocGFydCk7CisrICAg
ICAgICAgICAgVEludGVybU5vZGUgKnRlbXAgPSByZWJ1aWxkKCpwYXJ0KS5zaW5nbGUoKTsKKysg
ICAgICAgICAgICBBU1NFUlQodGVtcCk7CisrICAgICAgICAgICAgcGFydCA9IHRlbXAtPmdldEFz
VHlwZWQoKTsKKysgICAgICAgICAgICBBU1NFUlQocGFydCk7CisrICAgICAgICAgICAgcmVzdWx0
ID0gbmV3IFRJbnRlcm1CaW5hcnkob3AsIHBhcnQsIHJlc3VsdCk7CisrICAgICAgICB9CisrICAg
ICAgICByZXR1cm4gKnJlc3VsdDsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgUHJlUmVz
dWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3AoKTsKKysgICAgICAgIGlm
IChvcCA9PSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gVE9wZXJhdG9yOjpFT3BM
b2dpY2FsT3IpCisrICAgICAgICB7CisrICAgICAgICAgICAgcmV0dXJuIHtyZWFzc29jaWF0ZVJp
Z2h0KG5vZGUpLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICAgICAgfQorKyAgICAgICAgcmV0
dXJuIG5vZGU7CisrICAgIH0KKyt9OworKworK2NsYXNzIFNlcGFyYXRvciA6IHB1YmxpYyBUSW50
ZXJtUmVidWlsZAorK3sKKysgICAgSWRHZW4gJm1JZEdlbjsKKysgICAgc3RkOjp2ZWN0b3I8c3Rk
Ojp2ZWN0b3I8VEludGVybU5vZGUgKj4+IG1TdG10c1N0YWNrOworKyAgICBzdGQ6OnZlY3Rvcjxz
dGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFZhcmlhYmxlICosIFRJbnRlcm1EZWNsYXJhdGlvbiAq
Pj4gbUJpbmRpbmdNYXBTdGFjazsKKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRJbnRlcm1UeXBl
ZCAqLCBUSW50ZXJtVHlwZWQgKj4gbUV4cHJNYXA7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxU
SW50ZXJtRGVjbGFyYXRpb24gKj4gbU1hc2tlZERlY2xzOworKworKyAgcHVibGljOgorKyAgICBT
ZXBhcmF0b3IoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYsIElkR2Vu
ICZpZEdlbikKKysgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUp
LCBtSWRHZW4oaWRHZW4pCisrICAgIHt9CisrCisrICAgIH5TZXBhcmF0b3IoKSBvdmVycmlkZQor
KyAgICB7CisrICAgICAgICBBU1NFUlQobVN0bXRzU3RhY2suZW1wdHkoKSk7CisrICAgICAgICBB
U1NFUlQobUV4cHJNYXAuZW1wdHkoKSk7CisrICAgICAgICBBU1NFUlQobUJpbmRpbmdNYXBTdGFj
ay5lbXB0eSgpKTsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gJmdldEN1cnJTdG10cygpCisrICAgIHsKKysgICAgICAgIEFTU0VSVCghbVN0
bXRzU3RhY2suZW1wdHkoKSk7CisrICAgICAgICByZXR1cm4gbVN0bXRzU3RhY2suYmFjaygpOwor
KyAgICB9CisrCisrICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBUVmFyaWFibGUgKiwgVElu
dGVybURlY2xhcmF0aW9uICo+ICZnZXRDdXJyQmluZGluZ01hcCgpCisrICAgIHsKKysgICAgICAg
IEFTU0VSVCghbUJpbmRpbmdNYXBTdGFjay5lbXB0eSgpKTsKKysgICAgICAgIHJldHVybiBtQmlu
ZGluZ01hcFN0YWNrLmJhY2soKTsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hTdG10KFRJbnRl
cm1Ob2RlICZub2RlKSB7IGdldEN1cnJTdG10cygpLnB1c2hfYmFjaygmbm9kZSk7IH0KKysKKysg
ICAgYm9vbCBpc1Rlcm1pbmFsRXhwcihUSW50ZXJtTm9kZSAmbm9kZSkKKysgICAgeworKyAgICAg
ICAgTm9kZVR5cGUgbm9kZVR5cGUgPSBnZXROb2RlVHlwZShub2RlKTsKKysgICAgICAgIHN3aXRj
aCAobm9kZVR5cGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3lt
Ym9sOgorKyAgICAgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNvbnN0YW50VW5pb246CisrICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBUSW50ZXJt
VHlwZWQgKnB1bGxNYXBwZWRFeHByKFRJbnRlcm1UeXBlZCAqbm9kZSwgYm9vbCBhbGxvd0JhY2t0
cmFjaykKKysgICAgeworKyAgICAgICAgVEludGVybVR5cGVkICpleHByOworKworKyAgICAgICAg
eworKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1FeHByTWFwLmZpbmQobm9kZSk7CisrICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gbUV4cHJNYXAuZW5kKCkpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgQVNT
RVJUKG5vZGUpOworKyAgICAgICAgICAgIGV4cHIgPSBpdGVyLT5zZWNvbmQ7CisrICAgICAgICAg
ICAgQVNTRVJUKGV4cHIpOworKyAgICAgICAgICAgIG1FeHByTWFwLmVyYXNlKGl0ZXIpOworKyAg
ICAgICAgfQorKworKyAgICAgICAgaWYgKGFsbG93QmFja3RyYWNrKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIGF1dG8gJmJpbmRpbmdNYXAgPSBnZXRDdXJyQmluZGluZ01hcCgpOworKyAgICAg
ICAgICAgIHdoaWxlIChUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBleHByLT5nZXRBc1N5bWJvbE5v
ZGUoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAm
dmFyID0gc3ltYm9sLT52YXJpYWJsZSgpOworKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgICAg
ICAgICAgICA9IGJpbmRpbmdNYXAuZmluZCgmdmFyKTsKKysgICAgICAgICAgICAgICAgaWYgKGl0
ZXIgPT0gYmluZGluZ01hcC5lbmQoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGV4cHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisrICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbCA9IGl0ZXItPnNlY29u
ZDsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGRlY2wpOworKyAgICAgICAgICAgICAgICBleHBy
ID0gVmlld0RlY2xhcmF0aW9uKCpkZWNsKS5pbml0RXhwcjsKKysgICAgICAgICAgICAgICAgQVNT
RVJUKGV4cHIpOworKyAgICAgICAgICAgICAgICBiaW5kaW5nTWFwLmVyYXNlKGl0ZXIpOworKyAg
ICAgICAgICAgICAgICBtTWFza2VkRGVjbHMuaW5zZXJ0KGRlY2wpOworKyAgICAgICAgICAgIH0K
KysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiBleHByOworKyAgICB9CisrCisrICAgIGJv
b2wgaXNTdGFuZGFsb25lRXhwcihUSW50ZXJtVHlwZWQgJmV4cHIpCisrICAgIHsKKysgICAgICAg
IGlmIChnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysgICAgICAgIEFTU0VSVChleHByLmdldFR5
cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBUQmFzaWNUeXBlOjpFYnRWb2lkKTsKKysgICAgICAgIHJl
dHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hCaW5kaW5nKFRJbnRlcm1UeXBl
ZCAmb2xkRXhwciwgVEludGVybVR5cGVkICZuZXdFeHByKQorKyAgICB7CisrICAgICAgICBpZiAo
aXNTdGFuZGFsb25lRXhwcihuZXdFeHByKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNo
U3RtdChuZXdFeHByKTsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrICAgICAg
ICBpZiAoSXNJbmRleChuZXdFeHByKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBtRXhwck1h
cFsmb2xkRXhwcl0gPSAmbmV3RXhwcjsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9
CisrICAgICAgICBhdXRvICZiaW5kaW5nTWFwID0gZ2V0Q3VyckJpbmRpbmdNYXAoKTsKKysgICAg
ICAgIGNvbnN0IE5hbWUgbmFtZSAgPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSgiIik7CisrICAgICAg
ICBhdXRvICp2YXIgPQorKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwg
bmFtZS5yYXdOYW1lKCksICZuZXdFeHByLmdldFR5cGUoKSwgbmFtZS5zeW1ib2xUeXBlKCkpOwor
KyAgICAgICAgYXV0byAqZGVjbCA9IG5ldyBUSW50ZXJtRGVjbGFyYXRpb24odmFyLCAmbmV3RXhw
cik7CisrICAgICAgICBwdXNoU3RtdCgqZGVjbCk7CisrICAgICAgICBtRXhwck1hcFsmb2xkRXhw
cl0gPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworKyAgICAgICAgYmluZGluZ01hcFt2YXJdICAg
ID0gZGVjbDsKKysgICAgfQorKworKyAgICB2b2lkIHB1c2hTdGFja3MoKQorKyAgICB7CisrICAg
ICAgICBtU3RtdHNTdGFjay5lbXBsYWNlX2JhY2soKTsKKysgICAgICAgIG1CaW5kaW5nTWFwU3Rh
Y2suZW1wbGFjZV9iYWNrKCk7CisrICAgIH0KKysKKysgICAgdm9pZCBwb3BTdGFja3MoKQorKyAg
ICB7CisrICAgICAgICBBU1NFUlQoIW1CaW5kaW5nTWFwU3RhY2suZW1wdHkoKSk7CisrICAgICAg
ICBBU1NFUlQoIW1TdG10c1N0YWNrLmVtcHR5KCkpOworKyAgICAgICAgQVNTRVJUKG1TdG10c1N0
YWNrLmJhY2soKS5lbXB0eSgpKTsKKysgICAgICAgIG1CaW5kaW5nTWFwU3RhY2sucG9wX2JhY2so
KTsKKysgICAgICAgIG1TdG10c1N0YWNrLnBvcF9iYWNrKCk7CisrICAgIH0KKysKKysgICAgdm9p
ZCBwdXNoU3RtdHNJbnRvQmxvY2soVEludGVybUJsb2NrICZibG9jaywgc3RkOjp2ZWN0b3I8VElu
dGVybU5vZGUgKj4gJnN0bXRzKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNl
cSA9ICpibG9jay5nZXRTZXF1ZW5jZSgpOworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqc3Rt
dCA6IHN0bXRzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGlmIChUSW50ZXJtRGVjbGFyYXRp
b24gKmRlY2wgPSBzdG10LT5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gbU1hc2tlZERlY2xzLmZpbmQoZGVjbCk7Cisr
ICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IG1NYXNrZWREZWNscy5lbmQoKSkKKysgICAgICAg
ICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgbU1hc2tlZERlY2xzLmVyYXNlKGl0ZXIp
OworKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgIH0KKysg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhzdG10KTsKKysgICAgICAg
IH0KKysgICAgfQorKworKyAgICBUSW50ZXJtQmxvY2sgJmJ1aWxkQmxvY2tXaXRoVGFpbEFzc2ln
bihjb25zdCBUVmFyaWFibGUgJnZhciwgVEludGVybVR5cGVkICZuZXdFeHByKQorKyAgICB7Cisr
ICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiBzdG10cyA9IHN0ZDo6bW92ZShnZXRD
dXJyU3RtdHMoKSk7CisrICAgICAgICBwb3BTdGFja3MoKTsKKysKKysgICAgICAgIGF1dG8gJmJs
b2NrID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKysgICAgICAgIGF1dG8gJnNlcSAgID0gKmJsb2Nr
LmdldFNlcXVlbmNlKCk7CisrICAgICAgICBzZXEucmVzZXJ2ZSgxICsgc3RtdHMuc2l6ZSgpKTsK
KysgICAgICAgIHB1c2hTdG10c0ludG9CbG9jayhibG9jaywgc3RtdHMpOworKyAgICAgICAgc2Vx
LnB1c2hfYmFjayhuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgbmV3IFRJ
bnRlcm1TeW1ib2woJnZhciksICZuZXdFeHByKSk7CisrCisrICAgICAgICByZXR1cm4gYmxvY2s7
CisrICAgIH0KKysKKysgIHByaXZhdGU6CisrICAgIFByZVJlc3VsdCB2aXNpdEJsb2NrUHJlKFRJ
bnRlcm1CbG9jayAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcHVzaFN0YWNrcygp
OworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNp
dEJsb2NrUG9zdChUSW50ZXJtQmxvY2sgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAg
IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IHN0bXRzID0gc3RkOjptb3ZlKGdldEN1cnJTdG10
cygpKTsKKysgICAgICAgIHBvcFN0YWNrcygpOworKworKyAgICAgICAgVEludGVybVNlcXVlbmNl
ICZzZXEgPSAqbm9kZS5nZXRTZXF1ZW5jZSgpOworKyAgICAgICAgc2VxLmNsZWFyKCk7CisrICAg
ICAgICBzZXEucmVzZXJ2ZShzdG10cy5zaXplKCkpOworKyAgICAgICAgcHVzaFN0bXRzSW50b0Js
b2NrKG5vZGUsIHN0bXRzKTsKKysKKysgICAgICAgIFRJbnRlcm1Ob2RlICpwYXJlbnQgPSBnZXRQ
YXJlbnROb2RlKCk7CisrICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+Z2V0QXNCbG9jaygp
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworKyAgICAgICAgfQor
KworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0
RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7
CisrICAgICAgICBEZWNsYXJhdGlvbiBkZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAg
ICAgICAgaWYgKCFkZWNsLmluaXRFeHByIHx8IGlzVGVybWluYWxFeHByKCpkZWNsLmluaXRFeHBy
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgICAg
ICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisrICAgICAgICB9CisrICAgICAg
ICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0RGVjbGFyYXRp
b25Qb3N0KFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAg
ICAgRGVjbGFyYXRpb24gZGVjbCA9IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKysgICAgICAgIEFT
U0VSVChkZWNsLnN5bWJvbC52YXJpYWJsZSgpLnN5bWJvbFR5cGUoKSAhPSBTeW1ib2xUeXBlOjpF
bXB0eSk7CisrICAgICAgICBBU1NFUlQoIWRlY2wuc3ltYm9sLnZhcmlhYmxlKCkuZ2V0VHlwZSgp
LmlzU3RydWN0U3BlY2lmaWVyKCkpOworKworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdJbml0
RXhwciA9IHB1bGxNYXBwZWRFeHByKGRlY2wuaW5pdEV4cHIsIHRydWUpOworKyAgICAgICAgaWYg
KGRlY2wuaW5pdEV4cHIgPT0gbmV3SW5pdEV4cHIpCisrICAgICAgICB7CisrICAgICAgICAgICAg
cHVzaFN0bXQobm9kZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgYXV0byAmbmV3Tm9kZSA9ICpuZXcgVEludGVybURlY2xhcmF0aW9uKCk7Cisr
ICAgICAgICAgICAgbmV3Tm9kZS5hcHBlbmREZWNsYXJhdG9yKAorKyAgICAgICAgICAgICAgICBu
ZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUsICZkZWNsLnN5bWJvbCwg
bmV3SW5pdEV4cHIpKTsKKysgICAgICAgICAgICBwdXNoU3RtdChuZXdOb2RlKTsKKysgICAgICAg
IH0KKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlz
aXRVbmFyeVBvc3QoVEludGVybVVuYXJ5ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBUSW50ZXJtVHlwZWQgKmV4cHIgICAgPSBub2RlLmdldE9wZXJhbmQoKTsKKysgICAgICAgIFRJ
bnRlcm1UeXBlZCAqbmV3RXhwciA9IHB1bGxNYXBwZWRFeHByKGV4cHIsIGZhbHNlKTsKKysgICAg
ICAgIGlmIChleHByID09IG5ld0V4cHIpCisrICAgICAgICB7CisrICAgICAgICAgICAgcHVzaEJp
bmRpbmcobm9kZSwgbm9kZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7
CisrICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgKm5ldyBUSW50ZXJtVW5hcnkobm9kZS5n
ZXRPcCgpLCBuZXdFeHByLCBub2RlLmdldEZ1bmN0aW9uKCkpKTsKKysgICAgICAgIH0KKysgICAg
ICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFByZVJlc3VsdCB2aXNpdEJpbmFyeVBy
ZShUSW50ZXJtQmluYXJ5ICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBjb25zdCBU
T3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7CisrICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9y
OjpFT3BMb2dpY2FsQW5kIHx8IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsK
KysgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gbm9kZS5nZXRSaWdodCgpOworKwor
KyAgICAgICAgICAgIFBvc3RSZXN1bHQgbGVmdFJlc3VsdCA9IHJlYnVpbGQoKmxlZnQpOworKyAg
ICAgICAgICAgIEFTU0VSVChsZWZ0UmVzdWx0LnNpbmdsZSgpKTsKKysKKysgICAgICAgICAgICBw
dXNoU3RhY2tzKCk7CisrICAgICAgICAgICAgUG9zdFJlc3VsdCByaWdodFJlc3VsdCA9IHJlYnVp
bGQoKnJpZ2h0KTsKKysgICAgICAgICAgICBBU1NFUlQocmlnaHRSZXN1bHQuc2luZ2xlKCkpOwor
KworKyAgICAgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpQb3N0fTsKKysgICAgICAg
IH0KKysKKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQg
dmlzaXRCaW5hcnlQb3N0KFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysg
ICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IG5vZGUuZ2V0T3AoKTsKKysgICAgICAgIGlmIChv
cCA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUgJiYgZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Rl
Y2xhcmF0aW9uTm9kZSgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIFNwZWNpYWwgY2Fz
ZSBpcyBoYW5kbGVkIGJ5IHZpc2l0RGVjbGFyYXRpb25Qb3N0CisrICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CisrICAgICAgICB9CisrCisrICAgICAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0gbm9k
ZS5nZXRMZWZ0KCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKnJpZ2h0ID0gbm9kZS5nZXRSaWdo
dCgpOworKworKyAgICAgICAgaWYgKG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbEFuZCB8fCBv
cCA9PSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
b25zdCBOYW1lIG5hbWUgPSBtSWRHZW4uY3JlYXRlTmV3TmFtZSgiIik7CisrICAgICAgICAgICAg
YXV0byAqdmFyID0gbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUoKSwg
bmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEJvb2wpLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZS5zeW1ib2xUeXBlKCkpOworKworKyAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCAqbmV3UmlnaHQgICA9IHB1bGxNYXBwZWRFeHByKHJpZ2h0LCB0cnVlKTsKKysgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgKnJpZ2h0QmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNz
aWduKCp2YXIsICpuZXdSaWdodCk7CisrICAgICAgICAgICAgVEludGVybVR5cGVkICpuZXdMZWZ0
ICAgID0gcHVsbE1hcHBlZEV4cHIobGVmdCwgdHJ1ZSk7CisrCisrICAgICAgICAgICAgVEludGVy
bVR5cGVkICpjb25kID0gbmV3IFRJbnRlcm1TeW1ib2wodmFyKTsKKysgICAgICAgICAgICBpZiAo
b3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisrICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICBjb25kID0gbmV3IFRJbnRlcm1VbmFyeShUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Qs
IGNvbmQsIG51bGxwdHIpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBwdXNoU3Rt
dCgqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbih2YXIsIG5ld0xlZnQpKTsKKysgICAgICAgICAgICBw
dXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UoY29uZCwgcmlnaHRCbG9jaywgbnVsbHB0cikpOwor
KyAgICAgICAgICAgIGlmICghaXNTdGFuZGFsb25lRXhwcihub2RlKSkKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBUSW50ZXJtU3ltYm9sKHZh
cik7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIHJldHVybiBub2RlOworKyAgICAg
ICAgfQorKworKyAgICAgICAgY29uc3QgYm9vbCBpc0Fzc2lnbiAgICA9IElzQXNzaWdubWVudChv
cCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0xlZnQgID0gcHVsbE1hcHBlZEV4cHIobGVm
dCwgZmFsc2UpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdSaWdodCA9IHB1bGxNYXBwZWRF
eHByKHJpZ2h0LCBpc0Fzc2lnbik7CisrCisrICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpF
T3BDb21tYSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3
UmlnaHQpOworKyAgICAgICAgICAgIHJldHVybiBub2RlOworKyAgICAgICAgfQorKyAgICAgICAg
ZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIFRJbnRlcm1CaW5hcnkgKm5ld05vZGU7Cisr
ICAgICAgICAgICAgaWYgKGxlZnQgPT0gbmV3TGVmdCAmJiByaWdodCA9PSBuZXdSaWdodCkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG5ld05vZGUgPSAmbm9kZTsKKysgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXdOb2RlKTsK
KysgICAgICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBQ
cmVSZXN1bHQgdmlzaXRUZXJuYXJ5UHJlKFRJbnRlcm1UZXJuYXJ5ICZub2RlKSBvdmVycmlkZQor
KyAgICB7CisrICAgICAgICBQb3N0UmVzdWx0IGNvbmRSZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdl
dENvbmRpdGlvbigpKTsKKysgICAgICAgIEFTU0VSVChjb25kUmVzdWx0LnNpbmdsZSgpKTsKKysK
KysgICAgICAgIHB1c2hTdGFja3MoKTsKKysgICAgICAgIFBvc3RSZXN1bHQgdGhlblJlc3VsdCA9
IHJlYnVpbGQoKm5vZGUuZ2V0VHJ1ZUV4cHJlc3Npb24oKSk7CisrICAgICAgICBBU1NFUlQodGhl
blJlc3VsdC5zaW5nbGUoKSk7CisrCisrICAgICAgICBwdXNoU3RhY2tzKCk7CisrICAgICAgICBQ
b3N0UmVzdWx0IGVsc2VSZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldEZhbHNlRXhwcmVzc2lvbigp
KTsKKysgICAgICAgIEFTU0VSVChlbHNlUmVzdWx0LnNpbmdsZSgpKTsKKysKKysgICAgICAgIHJl
dHVybiB7bm9kZSwgVmlzaXRCaXRzOjpQb3N0fTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0
IHZpc2l0VGVybmFyeVBvc3QoVEludGVybVRlcm5hcnkgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZCAgPSBub2RlLmdldENvbmRpdGlvbigpOworKyAg
ICAgICAgVEludGVybVR5cGVkICp0aGVuICA9IG5vZGUuZ2V0VHJ1ZUV4cHJlc3Npb24oKTsKKysg
ICAgICAgIFRJbnRlcm1UeXBlZCAqZWxzZV8gPSBub2RlLmdldEZhbHNlRXhwcmVzc2lvbigpOwor
KworKyAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUoIiIpOwor
KyAgICAgICAgYXV0byAqdmFyID0KKysgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLCAmbm9kZS5nZXRUeXBlKCksIG5hbWUuc3ltYm9sVHlwZSgp
KTsKKysKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3RWxzZSAgID0gcHVsbE1hcHBlZEV4cHIo
ZWxzZV8sIGZhbHNlKTsKKysgICAgICAgIFRJbnRlcm1CbG9jayAqZWxzZUJsb2NrID0gJmJ1aWxk
QmxvY2tXaXRoVGFpbEFzc2lnbigqdmFyLCAqbmV3RWxzZSk7CisrICAgICAgICBUSW50ZXJtVHlw
ZWQgKm5ld1RoZW4gICA9IHB1bGxNYXBwZWRFeHByKHRoZW4sIHRydWUpOworKyAgICAgICAgVElu
dGVybUJsb2NrICp0aGVuQmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpu
ZXdUaGVuKTsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29uZCAgID0gcHVsbE1hcHBlZEV4
cHIoY29uZCwgdHJ1ZSk7CisrCisrICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1EZWNsYXJh
dGlvbnt2YXJ9KTsKKysgICAgICAgIHB1c2hTdG10KCpuZXcgVEludGVybUlmRWxzZShuZXdDb25k
LCB0aGVuQmxvY2ssIGVsc2VCbG9jaykpOworKyAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVFeHBy
KG5vZGUpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBU
SW50ZXJtU3ltYm9sKHZhcik7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gbm9kZTsK
KysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0U3dpenpsZVBvc3QoVEludGVybVN3aXp6
bGUgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAg
ICA9IG5vZGUuZ2V0T3BlcmFuZCgpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdFeHByID0g
cHVsbE1hcHBlZEV4cHIoZXhwciwgZmFsc2UpOworKyAgICAgICAgaWYgKGV4cHIgPT0gbmV3RXhw
cikKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKysg
ICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoQmlu
ZGluZyhub2RlLCAqbmV3IFRJbnRlcm1Td2l6emxlKG5ld0V4cHIsIG5vZGUuZ2V0U3dpenpsZU9m
ZnNldHMoKSkpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysK
KysgICAgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmbm9k
ZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmdzID0gKm5v
ZGUuZ2V0U2VxdWVuY2UoKTsKKysgICAgICAgIGZvciAoVEludGVybU5vZGUgKiZhcmcgOiBhcmdz
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0
QXNUeXBlZCgpOworKyAgICAgICAgICAgIEFTU0VSVCh0YXJnKTsKKysgICAgICAgICAgICBhcmcg
PSBwdWxsTWFwcGVkRXhwcih0YXJnLCBmYWxzZSk7CisrICAgICAgICB9CisrICAgICAgICBwdXNo
QmluZGluZyhub2RlLCBub2RlKTsKKysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisr
ICAgIFBvc3RSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQb3N0KFRJbnRlcm1QcmVw
cm9jZXNzb3JEaXJlY3RpdmUgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHB1c2hT
dG10KG5vZGUpOworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJl
c3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUg
Jm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmICghZ2V0UGFyZW50RnVuY3Rpb24o
KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgIH0K
KysgICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFByZVJlc3VsdCB2aXNpdENh
c2VQcmUoVEludGVybUNhc2UgJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGlmIChU
SW50ZXJtVHlwZWQgKmNvbmQgPSBub2RlLmdldENvbmRpdGlvbigpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIEFTU0VSVChpc1Rlcm1pbmFsRXhwcigqY29uZCkpOworKyAgICAgICAgfQorKyAg
ICAgICAgcHVzaFN0bXQobm9kZSk7CisrICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6
TmVpdGhlcn07CisrICAgIH0KKysKKysgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVElu
dGVybVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgVEludGVybVR5cGVk
ICppbml0ICAgID0gbm9kZS5nZXRJbml0KCk7CisrICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0lu
aXQgPSBwdWxsTWFwcGVkRXhwcihpbml0LCBmYWxzZSk7CisrICAgICAgICBpZiAoaW5pdCA9PSBu
ZXdJbml0KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworKyAgICAg
ICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHB1c2hTdG10KCpu
ZXcgVEludGVybVN3aXRjaChuZXdJbml0LCBub2RlLmdldFN0YXRlbWVudExpc3QoKSkpOworKyAg
ICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUG9zdFJl
c3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisrICAg
ICAgICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAgICBQb3N0UmVzdWx0IHZpc2l0SWZFbHNl
UG9zdChUSW50ZXJtSWZFbHNlICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBUSW50
ZXJtVHlwZWQgKmNvbmQgICAgPSBub2RlLmdldENvbmRpdGlvbigpOworKyAgICAgICAgVEludGVy
bVR5cGVkICpuZXdDb25kID0gcHVsbE1hcHBlZEV4cHIoY29uZCwgZmFsc2UpOworKyAgICAgICAg
aWYgKGNvbmQgPT0gbmV3Q29uZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChu
b2RlKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UobmV3Q29uZCwgbm9kZS5nZXRUcnVlQmxvY2so
KSwgbm9kZS5nZXRGYWxzZUJsb2NrKCkpKTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBu
b2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRCcmFuY2hQb3N0KFRJbnRlcm1C
cmFuY2ggJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhw
ciAgICA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworKyAgICAgICAgVEludGVybVR5cGVkICpuZXdF
eHByID0gcHVsbE1hcHBlZEV4cHIoZXhwciwgZmFsc2UpOworKyAgICAgICAgaWYgKGV4cHIgPT0g
bmV3RXhwcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAg
ICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBwdXNoU3RtdCgq
bmV3IFRJbnRlcm1CcmFuY2gobm9kZS5nZXRGbG93T3AoKSwgbmV3RXhwcikpOworKyAgICAgICAg
fQorKyAgICAgICAgcmV0dXJuIG5vZGU7CisrICAgIH0KKysKKysgICAgUHJlUmVzdWx0IHZpc2l0
TG9vcFByZShUSW50ZXJtTG9vcCAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgaWYg
KCFyZWJ1aWxkSW5QbGFjZSgqbm9kZS5nZXRCb2R5KCkpKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICB9CisrICAgICAgICBwdXNoU3RtdChub2RlKTsK
KysgICAgICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKysgICAgfQorKwor
KyAgICBQb3N0UmVzdWx0IHZpc2l0Q29uc3RhbnRVbmlvblBvc3QoVEludGVybUNvbnN0YW50VW5p
b24gJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
bm9kZS5nZXRUeXBlKCk7CisrICAgICAgICBpZiAoIXR5cGUuaXNTY2FsYXIoKSkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKysgICAgICAgIH0KKysg
ICAgICAgIHJldHVybiBub2RlOworKyAgICB9CisrCisrICAgIFBvc3RSZXN1bHQgdmlzaXRHbG9i
YWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uICZub2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZmFsc2UpOyAgLy8g
VGhlc2Ugc2hvdWxkIGJlIHNjcnViYmVkIGZyb20gQVNUIGJlZm9yZSByZXdyaXRlciBpcyBjYWxs
ZWQuCisrICAgICAgICBwdXNoU3RtdChub2RlKTsKKysgICAgICAgIHJldHVybiBub2RlOworKyAg
ICB9CisrfTsKKysKKyt9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisrCisrLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKysKKytib29sIHNoOjpTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENv
bXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElkR2VuICZpZEdlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybUJsb2NrICZyb290KQorK3sKKysgICAgaWYgKHJlYWRCb29sRW52VmFyKCJHTVRfRElT
QUJMRV9TRVBBUkFURV9DT01QT1VORF9FWFBSRVNTSU9OUyIpKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAgICBpZiAoIVNpbXBsaWZ5TG9vcENvbmRpdGlvbnMo
JmNvbXBpbGVyLCAmcm9vdCwgJmNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgaWYgKCFQcmVQYXNzKGNvbXBp
bGVyKS5yZWJ1aWxkUm9vdChyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
KyAgICB9CisrCisrICAgIGlmICghU2VwYXJhdG9yKGNvbXBpbGVyLCBzeW1ib2xFbnYsIGlkR2Vu
KS5yZWJ1aWxkUm9vdChyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrCisrICAgIHJldHVybiB0cnVlOworK30KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Np
b25zLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw
MDAwMDAwLi41ZTQwYTU1CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmgK
K0BAIC0wLDAgKzEsNDcgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBSRVNTSU9O
U19IXworKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
U0VQQVJBVEVDT01QT1VOREVYUFJFU1NJT05TX0hfCisrCisrI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4u
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8vIFRyYW5zZm9ybXMgY29k
ZSB0byAodXN1YWxseSkgaGF2ZSBtb3N0IG9uZSBub24tdGVybWluYWwgZXhwcmVzc2lvbiBwZXIg
c3RhdGVtZW50LgorKy8vIFRoaXMgYWxzbyByZXdyaXRlcyAoJiYpLCAofHwpLCBhbmQgKD86KSBp
bnRvIHJhdyBpZi9pZi1ub3QvaWYtZWxzZSBzdGF0ZW1lbnRzLCByZXNwZWN0aXZlbHkuCisrLy8K
KysvLyBlLmcuCisrLy8gICAgaW50IHggPSA2ICsgZm9vKHksIGJhcigpKTsKKysvLyBiZWNvbWVz
CisrLy8gICAgYXV0byBfMSA9IGJhcigpOworKy8vICAgIGF1dG8gXzIgPSBmb28oeSwgXzEpOwor
Ky8vICAgIGF1dG8gXzMgPSA2ICsgXzI7CisrLy8gICAgaW50IHggPSBfMzsKKysvLworKy8vIFdB
Uk5JTkc6CisrLy8gICAgLSBUaGlzIGRvZXMgbm90IHJld3JpdGUgb2JqZWN0IGluZGV4aW5nIG9w
ZXJhdG9ycyBhcyBhIHdob2xlIChlLmcuIGZvby54LCBmb29beF0pLCBidXQgd2lsbAorKy8vICAg
ICAgcmV3cml0ZSB0aGUgYXJndW1lbnRzIHRvIHRoZSBvcGVyYXRvciAod2hlbiBhcHBsaWNhYmxl
KS4KKysvLyAgICAgIGUuZy4KKysvLyAgICAgICAgZm9vKGdldFZlYygpW2kgKyAyXSArIDEpOwor
Ky8vICAgICAgYmVjb21lcworKy8vICAgICAgICBhdXRvIF8xID0gZ2V0VmVjKCk7CisrLy8gICAg
ICAgIGF1dG8gXzIgPSBpICsgMjsKKysvLyAgICAgICAgYXV0byBfMyA9IF8xW18yXSArIDE7IC8v
IEluZGV4IG9wZXJhdG9yIHJlbWFpbnMgaW4gKCspIGV4cHIgaGVyZS4KKysvLyAgICAgICAgZm9v
KF8zKTsKKysvLworK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVz
c2lvbnMoVENvbXBpbGVyICZjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRFWFBS
RVNTSU9OU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcCBiL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw
MDAwMDAuLjRiYThjNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRp
b25zLmNwcAorQEAgLTAsMCArMSw3NyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCIKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TZXBhcmF0ZURlY2xhcmF0aW9ucy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5o
IgorKworK3VzaW5nIG5hbWVzcGFjZSBzaDsKKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
KworK25hbWVzcGFjZQorK3sKKysKKytjbGFzcyBTZXBhcmF0b3IgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgorK3sKKysgIHB1YmxpYzoKKysgICAgU2VwYXJhdG9yKFRTeW1ib2xUYWJsZSAmc3lt
Ym9sVGFibGUpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUsICZzeW1ib2xU
YWJsZSkge30KKysKKysgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVj
bGFyYXRpb24gKmRlY2xOb2RlKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBBU1NFUlQoZGVj
bE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKysgICAgICAgIFRJbnRlcm1Ob2RlICZub2Rl
ID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisrCisrICAgICAgICBpZiAoVEludGVybVN5
bWJvbCAqc3ltYm9sTm9kZSA9IG5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgICAgICAgID0gc3ltYm9sTm9kZS0+dmFy
aWFibGUoKTsKKysgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAgPSB2YXIu
Z2V0VHlwZSgpOworKyAgICAgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IHZh
ci5zeW1ib2xUeXBlKCk7CisrICAgICAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIo
KSAmJiBzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1
Y3QoKTsKKysgICAgICAgICAgICAgICAgYXV0byAqc3RydWN0VmFyICAgICAgICAgICAgID0gbmV3
IFRWYXJpYWJsZShtU3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiIiksCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRUeXBlKHN0cnVjdHVy
ZSwgdHJ1ZSksIFN5bWJvbFR5cGU6OkVtcHR5KTsKKysKKysgICAgICAgICAgICAgICAgYXV0byAq
aW5zdGFuY2VUeXBlID0gbmV3IFRUeXBlKHN0cnVjdHVyZSwgZmFsc2UpOworKyAgICAgICAgICAg
ICAgICBpbnN0YW5jZVR5cGUtPnNldFF1YWxpZmllcih0eXBlLmdldFF1YWxpZmllcigpKTsKKysg
ICAgICAgICAgICAgICAgYXV0byAqaW5zdGFuY2VWYXIgPSBuZXcgVFZhcmlhYmxlKG1TeW1ib2xU
YWJsZSwgdmFyLm5hbWUoKSwgaW5zdGFuY2VUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVHlwZSwgdmFyLmV4dGVuc2lvbigpKTsK
KysKKysgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlIHJlcGxhY2VtZW50czsKKysgICAg
ICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVEludGVybVN5bWJvbChzdHJ1
Y3RWYXIpKTsKKysgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVElu
dGVybVN5bWJvbChpbnN0YW5jZVZhcikpOworKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNl
bWVudHMucHVzaF9iYWNrKAorKyAgICAgICAgICAgICAgICAgICAgTm9kZVJlcGxhY2VXaXRoTXVs
dGlwbGVFbnRyeShkZWNsTm9kZSwgc3ltYm9sTm9kZSwgc3RkOjptb3ZlKHJlcGxhY2VtZW50cykp
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gZmFsc2U7
CisrICAgIH0KKyt9OworKworK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKysKKysvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworKworK2Jvb2wgc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNs
YXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQorK3sKKysg
ICAgU2VwYXJhdG9yIHNlcGFyYXRvcihjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKTsKKysgICAg
cm9vdC50cmF2ZXJzZSgmc2VwYXJhdG9yKTsKKysgICAgaWYgKCFzZXBhcmF0b3IudXBkYXRlVHJl
ZSgmY29tcGlsZXIsICZyb290KSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAg
ICB9CisrCisrICAgIGlmICghU2VwYXJhdGVEZWNsYXJhdGlvbnMoJmNvbXBpbGVyLCAmcm9vdCkp
CisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQorKworKyAgICByZXR1cm4g
dHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaCBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
U3RydWN0RGVjbGFyYXRpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAw
Li4wNzEyZTgwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5o
CitAQCAtMCwwICsxLDI0IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TRVBBUkFURUNPTVBPVU5EU1RSVUNUREVD
TEFSQVRJT05TX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9TRVBBUkFURUNPTVBPVU5EU1RSVUNUREVDTEFSQVRJT05TX0hfCisrCisrI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tcGlsZXIuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gRXhhbXBsZToKKysvLyAg
c3RydWN0IEZvbyB7IGludCB4OyB9IGZvbzsKKysvLyBCZWNvbWVzOgorKy8vICBzdHJ1Y3QgRm9v
IHtpbnQgeDsgfTsgRm9vIGZvbzsKKytBTkdMRV9OT19ESVNDQVJEIGJvb2wgU2VwYXJhdGVDb21w
b3VuZFN0cnVjdERlY2xhcmF0aW9ucyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sg
JnJvb3QpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VORFNUUlVDVERF
Q0xBUkFUSU9OU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Ta2lwcGluZ1RyYXZlcnNlci5oIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NraXBwaW5nVHJhdmVyc2VyLmgKK25ldyBmaWxl
IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mZjQ5ZGFkCistLS0gL2Rldi9udWxsCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2tpcHBpbmdU
cmF2ZXJzZXIuaAorQEAgLTAsMCArMSw0NyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0tJUFBJTkdUUkFWRVJT
RVJfSF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1NLSVBQSU5HVFJBVkVSU0VSX0hfCisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisrCisrbmFtZXNwYWNlIHNoCisreworKworKy8v
IEEgVEludGVybVRyYXZlcnNlciB0aGF0IHNraXBzIHRyYXZlcnNpbmcgY2hpbGRlbiBieSBkZWZh
dWx0LgorK2NsYXNzIFNraXBwaW5nVHJhdmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIK
Kyt7CisrICBwdWJsaWM6CisrICAgIFNraXBwaW5nVHJhdmVyc2VyKGJvb2wgcHJlVmlzaXRfLAor
KyAgICAgICAgICAgICAgICAgICAgICBib29sIGluVmlzaXRfLAorKyAgICAgICAgICAgICAgICAg
ICAgICBib29sIHBvc3RWaXNpdF8sCisrICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJs
ZSAqc3ltYm9sVGFibGUgPSBudWxscHRyKQorKyAgICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHBy
ZVZpc2l0XywgaW5WaXNpdF8sIHBvc3RWaXNpdF8sIHN5bWJvbFRhYmxlKQorKyAgICB7fQorKwor
KyAgICBib29sIHZpc2l0U3dpenpsZShWaXNpdCwgVEludGVybVN3aXp6bGUgKikgeyByZXR1cm4g
ZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgeyBy
ZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFy
eSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBib29sIHZpc2l0VGVybmFyeShWaXNpdCwgVElu
dGVybVRlcm5hcnkgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdElmRWxzZShW
aXNpdCwgVEludGVybUlmRWxzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBib29sIHZpc2l0
U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNoICopIHsgcmV0dXJuIGZhbHNlOyB9CisrICAgIGJv
b2wgdmlzaXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2FzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorKyAg
ICBib29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICopIHsgcmV0dXJuIGZhbHNlOyB9CisrICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNp
dEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9v
bCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgeyByZXR1cm4g
ZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIHsgcmV0
dXJuIGZhbHNlOyB9CisrICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2gg
KikgeyByZXR1cm4gZmFsc2U7IH0KKysgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikKKysgICAg
eworKyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrfTsKKysKKyt9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX1NLSVBQSU5HVFJBVkVSU0VSX0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAgYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcAorbmV3IGZp
bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ3NTNkYWMKKy0tLSAvZGV2L251bGwKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xF
bnYuY3BwCitAQCAtMCwwICsxLDY4MSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisrI2luY2x1ZGUgPGxpbWl0cz4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9JbW11dGFibGVTdHJpbmdCdWlsZGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKysjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKysjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVp
bGQuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKysKKytjb25zdGV4cHIgQWRkcmVzc1NwYWNlIGtBZGRyZXNzU3BhY2VzW10gPSB7CisrICAg
IEFkZHJlc3NTcGFjZTo6Q29uc3RhbnQsCisrICAgIEFkZHJlc3NTcGFjZTo6RGV2aWNlLAorKyAg
ICBBZGRyZXNzU3BhY2U6OlRocmVhZCwKKyt9OworKworK2NoYXIgY29uc3QgKnNoOjp0b1N0cmlu
ZyhBZGRyZXNzU3BhY2Ugc3BhY2UpCisreworKyAgICBzd2l0Y2ggKHNwYWNlKQorKyAgICB7Cisr
ICAgICAgICBjYXNlIEFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ6CisrICAgICAgICAgICAgcmV0dXJu
ICJjb25zdGFudCI7CisrICAgICAgICBjYXNlIEFkZHJlc3NTcGFjZTo6RGV2aWNlOgorKyAgICAg
ICAgICAgIHJldHVybiAiZGV2aWNlIjsKKysgICAgICAgIGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJl
YWQ6CisrICAgICAgICAgICAgcmV0dXJuICJ0aHJlYWQiOworKyAgICB9CisrfQorKworKy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisrCisrdXNpbmcgTmFtZVRvU3RydWN0ID0gc3RkOjptYXA8TmFt
ZSwgY29uc3QgVFN0cnVjdHVyZSAqPjsKKysKKytjbGFzcyBTdHJ1Y3RGaW5kZXIgOiBUSW50ZXJt
UmVidWlsZAorK3sKKysgICAgTmFtZVRvU3RydWN0IG5hbWVUb1N0cnVjdDsKKysKKysgICAgU3Ry
dWN0RmluZGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIs
IHRydWUsIGZhbHNlKSB7fQorKworKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShU
SW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIERlY2xh
cmF0aW9uIGRlY2wgICAgID0gVmlld0RlY2xhcmF0aW9uKG5vZGUpOworKyAgICAgICAgY29uc3Qg
VFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworKyAgICAgICAgY29uc3Qg
VFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgpOworKworKyAgICAgICAgaWYgKHZhci5zeW1i
b2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6RW1wdHkgJiYgdHlwZS5pc1N0cnVjdFNwZWNpZmllcigp
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0eXBlLmdl
dFN0cnVjdCgpOworKyAgICAgICAgICAgIEFTU0VSVChzKTsKKysgICAgICAgICAgICBjb25zdCBO
YW1lIG5hbWUoKnMpOworKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKiZ6ID0gbmFtZVRv
U3RydWN0W25hbWVdOworKyAgICAgICAgICAgIEFTU0VSVCgheik7CisrICAgICAgICAgICAgeiA9
IHM7CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gbm9kZTsKKysgICAgfQorKworKyAg
ICBQcmVSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcmV0dXJuIHtub2RlLCBW
aXNpdEJpdHM6Ok5laXRoZXJ9OworKyAgICB9CisrCisrICBwdWJsaWM6CisrICAgIHN0YXRpYyBO
YW1lVG9TdHJ1Y3QgRmluZFN0cnVjdHMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2Nr
ICZyb290KQorKyAgICB7CisrICAgICAgICBTdHJ1Y3RGaW5kZXIgZmluZGVyKGNvbXBpbGVyKTsK
KysgICAgICAgIGlmICghZmluZGVyLnJlYnVpbGRSb290KHJvb3QpKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlKGZpbmRlci5uYW1lVG9TdHJ1Y3QpOworKyAgICB9CisrfTsKKysKKysvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworKworK1RlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyhib29sIHZhbHVlKSA6
IG1LaW5kKEtpbmQ6OkJvb2wpLCBtVmFsdWUodmFsdWUpIHt9CisrCisrVGVtcGxhdGVBcmc6OlRl
bXBsYXRlQXJnKGludCB2YWx1ZSkgOiBtS2luZChLaW5kOjpJbnQpLCBtVmFsdWUodmFsdWUpIHt9
CisrCisrVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJnKHVuc2lnbmVkIHZhbHVlKSA6IG1LaW5kKEtp
bmQ6OlVJbnQpLCBtVmFsdWUodmFsdWUpIHt9CisrCisrVGVtcGxhdGVBcmc6OlRlbXBsYXRlQXJn
KGNvbnN0IFRUeXBlICZ2YWx1ZSkgOiBtS2luZChLaW5kOjpUeXBlKSwgbVZhbHVlKHZhbHVlKSB7
fQorKworK2Jvb2wgVGVtcGxhdGVBcmc6Om9wZXJhdG9yPT0oY29uc3QgVGVtcGxhdGVBcmcgJm90
aGVyKSBjb25zdAorK3sKKysgICAgaWYgKG1LaW5kICE9IG90aGVyLm1LaW5kKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgc3dpdGNoIChtS2luZCkKKysg
ICAgeworKyAgICAgICAgY2FzZSBLaW5kOjpCb29sOgorKyAgICAgICAgICAgIHJldHVybiBtVmFs
dWUuYiA9PSBvdGhlci5tVmFsdWUuYjsKKysgICAgICAgIGNhc2UgS2luZDo6SW50OgorKyAgICAg
ICAgICAgIHJldHVybiBtVmFsdWUuaSA9PSBvdGhlci5tVmFsdWUuaTsKKysgICAgICAgIGNhc2Ug
S2luZDo6VUludDoKKysgICAgICAgICAgICByZXR1cm4gbVZhbHVlLnUgPT0gb3RoZXIubVZhbHVl
LnU7CisrICAgICAgICBjYXNlIEtpbmQ6OlR5cGU6CisrICAgICAgICAgICAgcmV0dXJuICptVmFs
dWUudCA9PSAqb3RoZXIubVZhbHVlLnQ7CisrICAgIH0KKyt9CisrCisrYm9vbCBUZW1wbGF0ZUFy
Zzo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlQXJnICZvdGhlcikgY29uc3QKKyt7CisrICAgIGlm
IChtS2luZCA8IG90aGVyLm1LaW5kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysg
ICAgfQorKworKyAgICBpZiAobUtpbmQgPiBvdGhlci5tS2luZCkKKysgICAgeworKyAgICAgICAg
cmV0dXJuIGZhbHNlOworKyAgICB9CisrCisrICAgIHN3aXRjaCAobUtpbmQpCisrICAgIHsKKysg
ICAgICAgIGNhc2UgS2luZDo6Qm9vbDoKKysgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmIgPCBv
dGhlci5tVmFsdWUuYjsKKysgICAgICAgIGNhc2UgS2luZDo6SW50OgorKyAgICAgICAgICAgIHJl
dHVybiBtVmFsdWUuaSA8IG90aGVyLm1WYWx1ZS5pOworKyAgICAgICAgY2FzZSBLaW5kOjpVSW50
OgorKyAgICAgICAgICAgIHJldHVybiBtVmFsdWUudSA8IG90aGVyLm1WYWx1ZS51OworKyAgICAg
ICAgY2FzZSBLaW5kOjpUeXBlOgorKyAgICAgICAgICAgIHJldHVybiAqbVZhbHVlLnQgPCAqb3Ro
ZXIubVZhbHVlLnQ7CisrICAgIH0KKyt9CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysK
Kytib29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjpvcGVyYXRvcj09KGNvbnN0IFRlbXBsYXRl
TmFtZSAmb3RoZXIpIGNvbnN0CisreworKyAgICByZXR1cm4gYmFzZU5hbWUgPT0gb3RoZXIuYmFz
ZU5hbWUgJiYgdGVtcGxhdGVBcmdzID09IG90aGVyLnRlbXBsYXRlQXJnczsKKyt9CisrCisrYm9v
bCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlTmFtZSAm
b3RoZXIpIGNvbnN0CisreworKyAgICBpZiAoYmFzZU5hbWUgPCBvdGhlci5iYXNlTmFtZSkKKysg
ICAgeworKyAgICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysgICAgaWYgKG90aGVyLmJhc2VO
YW1lIDwgYmFzZU5hbWUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgfQor
KyAgICByZXR1cm4gdGVtcGxhdGVBcmdzIDwgb3RoZXIudGVtcGxhdGVBcmdzOworK30KKysKKyti
b29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjplbXB0eSgpIGNvbnN0CisreworKyAgICByZXR1
cm4gYmFzZU5hbWUuZW1wdHkoKSAmJiB0ZW1wbGF0ZUFyZ3MuZW1wdHkoKTsKKyt9CisrCisrdm9p
ZCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6Y2xlYXIoKQorK3sKKysgICAgYmFzZU5hbWUgPSBO
YW1lKCk7CisrICAgIHRlbXBsYXRlQXJncy5jbGVhcigpOworK30KKysKKytOYW1lIFN5bWJvbEVu
djo6VGVtcGxhdGVOYW1lOjpmdWxsTmFtZShzdGQ6OnN0cmluZyAmYnVmZmVyKSBjb25zdAorK3sK
KysgICAgQVNTRVJUKGJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgaWYgKHRlbXBsYXRlQXJncy5l
bXB0eSgpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gYmFzZU5hbWU7CisrICAgIH0KKysKKysg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbiA9IHN0ZDo6bWF4KHsKKysgICAgICAgIHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCwgIC8vCisrICAgICAgICBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46OmRpZ2l0czEwLCAgICAgICAvLworKyAgICAgICAgNSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4X2xlbmd0aCgidHJ1ZSIsICJm
YWxzZSIpCisrICAgIH0pOworKworKyAgICBidWZmZXIucmVzZXJ2ZShiYXNlTmFtZS5yYXdOYW1l
KCkubGVuZ3RoKCkgKyAobiArIDIpICogdGVtcGxhdGVBcmdzLnNpemUoKSArIDEpOworKyAgICBi
dWZmZXIgKz0gYmFzZU5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKysKKysgICAgaWYgKCF0ZW1wbGF0
ZUFyZ3MuZW1wdHkoKSkKKysgICAgeworKyAgICAgICAgYnVmZmVyICs9ICI8IjsKKysKKysgICAg
ICAgIGJvb2wgZmlyc3QgPSB0cnVlOworKyAgICAgICAgY2hhciBhcmdCdWZmZXJbbiArIDFdOwor
KyAgICAgICAgZm9yIChjb25zdCBUZW1wbGF0ZUFyZyAmYXJnIDogdGVtcGxhdGVBcmdzKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChmaXJzdCkKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVs
c2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAiLCAiOworKyAg
ICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZzo6VmFsdWUgdmFs
dWUgPSBhcmcudmFsdWUoKTsKKysgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZzo6S2luZCBr
aW5kICAgPSBhcmcua2luZCgpOworKyAgICAgICAgICAgIHN3aXRjaCAoa2luZCkKKysgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OkJvb2w6Cisr
ICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuYikKKysgICAgICAgICAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gInRydWUiOworKyAgICAgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAiZmFsc2UiOworKyAgICAg
ICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAg
ICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OkludDoKKysgICAgICAgICAgICAgICAg
ICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB2YWx1ZS5pKTsKKysgICAgICAgICAgICAgICAg
ICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysK
KysgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VUludDoKKysgICAgICAg
ICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJXUiLCB2YWx1ZS51KTsKKysgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisrICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKysKKysgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VHlwZToK
KysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5
cGUgPSAqdmFsdWUudDsKKysgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJl
ICpzID0gdHlwZS5nZXRTdHJ1Y3QoKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAg
ICAgICAgICAgICAgICAgICBidWZmZXIgKz0gcy0+bmFtZSgpLmRhdGEoKTsKKysgICAgICAgICAg
ICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc1NjYWxhckJhc2lj
VHlwZSh0eXBlKSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIXR5cGUuaXNBcnJheSgpKTsgIC8vIFRPRE8KKysgICAgICAgICAgICAgICAg
ICAgICAgICBidWZmZXIgKz0gdHlwZS5nZXRCYXNpY1N0cmluZygpOworKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0eXBlLmlzVmVjdG9yKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwg
dHlwZS5nZXROb21pbmFsU2l6ZSgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyICs9IGFyZ0J1ZmZlcjsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQorKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZm
ZXIsICIlaSIsIHR5cGUuZ2V0Q29scygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyICs9IGFyZ0J1ZmZlcjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy
ICs9ICJ4IjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIs
ICIlaSIsIHR5cGUuZ2V0Um93cygpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyICs9IGFyZ0J1ZmZlcjsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgYnJlYWs7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgYnVmZmVyICs9ICI+IjsK
KysgICAgfQorKworKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZShidWZmZXIpOworKyAg
ICBidWZmZXIuY2xlYXIoKTsKKysKKysgICAgcmV0dXJuIE5hbWUobmFtZSwgYmFzZU5hbWUuc3lt
Ym9sVHlwZSgpKTsKKyt9CisrCisrdm9pZCBTeW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6YXNzaWdu
KGNvbnN0IE5hbWUgJm5hbWUsIHNpemVfdCBhcmdDb3VudCwgY29uc3QgVGVtcGxhdGVBcmcgKmFy
Z3MpCisreworKyAgICBiYXNlTmFtZSA9IG5hbWU7CisrICAgIHRlbXBsYXRlQXJncy5jbGVhcigp
OworKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisrICAgIHsKKysg
ICAgICAgIHRlbXBsYXRlQXJncy5wdXNoX2JhY2soYXJnc1tpXSk7CisrICAgIH0KKyt9CisrCisr
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytTeW1ib2xFbnY6OlN5bWJvbEVudihUQ29tcGls
ZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCisrICAgIDogbVN5bWJvbFRhYmxlKGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorKyAgICAgIG1OYW1lVG9TdHJ1Y3QoU3RydWN0Rmlu
ZGVyOjpGaW5kU3RydWN0cyhjb21waWxlciwgcm9vdCkpCisre30KKysKKytjb25zdCBUU3RydWN0
dXJlICZTeW1ib2xFbnY6OnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0CisreworKyAg
ICBjb25zdCBOYW1lIG5hbWUocyk7CisrICAgIGF1dG8gaXRlciA9IG1OYW1lVG9TdHJ1Y3QuZmlu
ZChuYW1lKTsKKysgICAgaWYgKGl0ZXIgPT0gbU5hbWVUb1N0cnVjdC5lbmQoKSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIHM7CisrICAgIH0KKysgICAgY29uc3QgVFN0cnVjdHVyZSAmeiA9ICpp
dGVyLT5zZWNvbmQ7CisrICAgIHJldHVybiB6OworK30KKysKKytjb25zdCBUU3RydWN0dXJlICpT
eW1ib2xFbnY6OnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgKnMpIGNvbnN0CisreworKyAgICBpZiAo
cykKKysgICAgeworKyAgICAgICAgcmV0dXJuICZyZW1hcCgqcyk7CisrICAgIH0KKysgICAgcmV0
dXJuIG51bGxwdHI7CisrfQorKworK2NvbnN0IFRGdW5jdGlvbiAmU3ltYm9sRW52OjpnZXRGdW5j
dGlvbk92ZXJsb2FkSW1wbCgpCisreworKyAgICBBU1NFUlQoIW1SZXVzYWJsZVNpZ0J1ZmZlci5l
bXB0eSgpKTsKKysKKysgICAgU2lnVG9GdW5jICZzaWdUb0Z1bmMgPSBtT3ZlcmxvYWRzW21SZXVz
YWJsZVRlbXBsYXRlTmFtZUJ1ZmZlcl07CisrICAgIFRGdW5jdGlvbiAqJmZ1bmMgICAgID0gc2ln
VG9GdW5jW21SZXVzYWJsZVNpZ0J1ZmZlcl07CisrCisrICAgIGlmICghZnVuYykKKysgICAgewor
KyAgICAgICAgY29uc3QgVFR5cGUgJnJldHVyblR5cGUgPSBtUmV1c2FibGVTaWdCdWZmZXIuYmFj
aygpOworKyAgICAgICAgbVJldXNhYmxlU2lnQnVmZmVyLnBvcF9iYWNrKCk7CisrCisrICAgICAg
ICBjb25zdCBOYW1lIG5hbWUgPSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuZnVsbE5hbWUo
bVJldXNhYmxlU3RyaW5nQnVmZmVyKTsKKysKKysgICAgICAgIGZ1bmMgPSBuZXcgVEZ1bmN0aW9u
KCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCBuYW1lLnN5bWJvbFR5cGUoKSwgJnJldHVy
blR5cGUsIGZhbHNlKTsKKysgICAgICAgIGZvciAoY29uc3QgVFR5cGUgJnBhcmFtVHlwZSA6IG1S
ZXVzYWJsZVNpZ0J1ZmZlcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBmdW5jLT5hZGRQYXJh
bWV0ZXIoCisrICAgICAgICAgICAgICAgIG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwga0Vt
cHR5SW1tdXRhYmxlU3RyaW5nLCAmcGFyYW1UeXBlLCBTeW1ib2xUeXBlOjpFbXB0eSkpOworKyAg
ICAgICAgfQorKyAgICB9CisrCisrICAgIG1SZXVzYWJsZVNpZ0J1ZmZlci5jbGVhcigpOworKyAg
ICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuY2xlYXIoKTsKKysKKysgICAgcmV0dXJuICpm
dW5jOworK30KKysKKytjb25zdCBURnVuY3Rpb24gJlN5bWJvbEVudjo6Z2V0RnVuY3Rpb25PdmVy
bG9hZChjb25zdCBOYW1lICZuYW1lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwYXJhbUNvdW50LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICoqcGFyYW1UeXBlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW1wbGF0ZUFyZyAqdGVtcGxhdGVBcmdz
KQorK3sKKysgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKysgICAgQVNT
RVJUKG1SZXVzYWJsZVRlbXBsYXRlTmFtZUJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisrICAgIHsKKysgICAgICAgIG1SZXVz
YWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2soKnBhcmFtVHlwZXNbaV0pOworKyAgICB9CisrICAgIG1S
ZXVzYWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2socmV0dXJuVHlwZSk7CisrICAgIG1SZXVzYWJsZVRl
bXBsYXRlTmFtZUJ1ZmZlci5hc3NpZ24obmFtZSwgdGVtcGxhdGVBcmdDb3VudCwgdGVtcGxhdGVB
cmdzKTsKKysgICAgcmV0dXJuIGdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCk7CisrfQorKworK1RJ
bnRlcm1BZ2dyZWdhdGUgJlN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFt
ZSAmbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZhcmdzLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRl
QXJnQ291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUZW1wbGF0ZUFyZyAqdGVtcGxhdGVBcmdzKQorK3sKKysgICAgQVNTRVJUKG1S
ZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKysgICAgQVNTRVJUKG1SZXVzYWJsZVRlbXBsYXRl
TmFtZUJ1ZmZlci5lbXB0eSgpKTsKKysKKysgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJn
cykKKysgICAgeworKyAgICAgICAgVEludGVybVR5cGVkICp0YXJnID0gYXJnLT5nZXRBc1R5cGVk
KCk7CisrICAgICAgICBBU1NFUlQodGFyZyk7CisrICAgICAgICBtUmV1c2FibGVTaWdCdWZmZXIu
cHVzaF9iYWNrKHRhcmctPmdldFR5cGUoKSk7CisrICAgIH0KKysgICAgbVJldXNhYmxlU2lnQnVm
ZmVyLnB1c2hfYmFjayhyZXR1cm5UeXBlKTsKKysgICAgbVJldXNhYmxlVGVtcGxhdGVOYW1lQnVm
ZmVyLmFzc2lnbihuYW1lLCB0ZW1wbGF0ZUFyZ0NvdW50LCB0ZW1wbGF0ZUFyZ3MpOworKyAgICBj
b25zdCBURnVuY3Rpb24gJmZ1bmMgPSBnZXRGdW5jdGlvbk92ZXJsb2FkSW1wbCgpOworKyAgICBy
ZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZVJhd0Z1bmN0aW9uQ2FsbChmdW5jLCAmYXJn
cyk7CisrfQorKworK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6bmV3U3RydWN0dXJlKGNv
bnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3QgJmZpZWxkcykKKyt7CisrICAgIEFTU0VSVChuYW1l
LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKysKKysgICAgVFN0
cnVjdHVyZSAqJnMgPSBtQW5nbGVTdHJ1Y3RzW25hbWUucmF3TmFtZSgpXTsKKysgICAgQVNTRVJU
KCFzKTsKKysgICAgcyA9IG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFt
ZSgpLCAmZmllbGRzLCBuYW1lLnN5bWJvbFR5cGUoKSk7CisrICAgIHJldHVybiAqczsKKyt9Cisr
CisrY29uc3QgVFN0cnVjdHVyZSAmU3ltYm9sRW52OjpnZXRUZXh0dXJlRW52KFRCYXNpY1R5cGUg
c2FtcGxlclR5cGUpCisreworKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBsZXJUeXBlKSk7Cisr
ICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKiZlbnYgPSBtVGV4dHVyZUVudnNbc2FtcGxlclR5cGVdOwor
KyAgICBpZiAoZW52ID09IG51bGxwdHIpCisrICAgIHsKKysgICAgICAgIGF1dG8gKnRleHR1cmVU
eXBlID0gbmV3IFRUeXBlKHNhbXBsZXJUeXBlKTsKKysgICAgICAgIGF1dG8gKnRleHR1cmUgICAg
ID0gbmV3IFRGaWVsZCh0ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIiksIGtO
b1NvdXJjZUxvYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5
cGU6OlVzZXJEZWZpbmVkKTsKKysgICAgICAgIG1hcmtBc1BvaW50ZXIoKnRleHR1cmUsIEFkZHJl
c3NTcGFjZTo6VGhyZWFkKTsKKysKKysgICAgICAgIGF1dG8gKnNhbXBsZXIgPQorKyAgICAgICAg
ICAgIG5ldyBURmllbGQobmV3IFRUeXBlKCZnZXRTYW1wbGVyU3RydWN0KCksIGZhbHNlKSwgSW1t
dXRhYmxlU3RyaW5nKCJzYW1wbGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICBrTm9Tb3Vy
Y2VMb2MsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysgICAgICAgIG1hcmtBc1BvaW50ZXIo
KnNhbXBsZXIsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKysKKysgICAgICAgIHN0ZDo6c3RyaW5n
IGVudk5hbWU7CisrICAgICAgICBlbnZOYW1lICs9ICJUZXh0dXJlRW52PCI7CisrICAgICAgICBl
bnZOYW1lICs9IEdldFRleHR1cmVUeXBlTmFtZShzYW1wbGVyVHlwZSkucmF3TmFtZSgpLmRhdGEo
KTsKKysgICAgICAgIGVudk5hbWUgKz0gIj4iOworKworKyAgICAgICAgZW52ID0gJm5ld1N0cnVj
dHVyZShOYW1lKGVudk5hbWUsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbmV3IFRGaWVsZExpc3R7dGV4dHVyZSwgc2FtcGxlcn0pOwor
KyAgICB9CisrICAgIHJldHVybiAqZW52OworK30KKysKKytjb25zdCBUU3RydWN0dXJlICZTeW1i
b2xFbnY6OmdldFNhbXBsZXJTdHJ1Y3QoKQorK3sKKysgICAgaWYgKCFtU2FtcGxlcikKKysgICAg
eworKyAgICAgICAgbVNhbXBsZXIgPSBuZXcgVFN0cnVjdHVyZSgmbVN5bWJvbFRhYmxlLCBJbW11
dGFibGVTdHJpbmcoIm1ldGFsOjpzYW1wbGVyIiksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ldyBURmllbGRMaXN0KCksIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKysg
ICAgfQorKyAgICByZXR1cm4gKm1TYW1wbGVyOworK30KKysKKyt2b2lkIFN5bWJvbEVudjo6bWFy
a1NwYWNlKFZhckZpZWxkIHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzU3Bh
Y2Ugc3BhY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8
VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCkKKyt7CisrICAgIC8vIEl0IGlzIGluIHByaW5j
aXBsZSBwZXJtaXNzaWJsZSB0byBoYXZlIHJlZmVyZW5jZXMgdG8gcG9pbnRlcnMgb3IgbXVsdGlw
bGUgcG9pbnRlcnMsIGJ1dCB0aGlzCisrICAgIC8vIGlzIG5vdCByZXF1aXJlZCBmb3Igbm93IGFu
ZCB3b3VsZCByZXF1aXJlIGNvZGUgY2hhbmdlcyB0byBnZXQgcmlnaHQuCisrICAgIEFTU0VSVCgh
aXNQb2ludGVyKHgpKTsKKysgICAgQVNTRVJUKCFpc1JlZmVyZW5jZSh4KSk7CisrCisrICAgIG1h
cFt4XSA9IHNwYWNlOworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6aXNT
cGFjZShWYXJGaWVsZCB4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiAmbWFwKSBj
b25zdAorK3sKKysgICAgY29uc3QgYXV0byBpdGVyID0gbWFwLmZpbmQoeCk7CisrICAgIGlmIChp
dGVyID09IG1hcC5lbmQoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAg
IH0KKysgICAgY29uc3QgQWRkcmVzc1NwYWNlIHNwYWNlID0gaXRlci0+c2Vjb25kOworKyAgICBj
b25zdCBhdXRvIGluZGV4ICAgICAgICAgPSBzdGF0aWNfY2FzdDxzdGQ6OnVuZGVybHlpbmdfdHlw
ZV90PEFkZHJlc3NTcGFjZT4+KHNwYWNlKTsKKysgICAgcmV0dXJuICZrQWRkcmVzc1NwYWNlc1tp
bmRleF07CisrfQorKworK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQb2ludGVyKFZhckZpZWxkIHgs
IEFkZHJlc3NTcGFjZSBzcGFjZSkKKyt7CisrICAgIHJldHVybiBtYXJrU3BhY2UoeCwgc3BhY2Us
IG1Qb2ludGVycyk7CisrfQorKworK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNSZWZlcmVuY2UoVmFy
RmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlKQorK3sKKysgICAgcmV0dXJuIG1hcmtTcGFjZSh4
LCBzcGFjZSwgbVJlZmVyZW5jZXMpOworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJv
bEVudjo6aXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0CisreworKyAgICByZXR1cm4gaXNTcGFj
ZSh4LCBtUG9pbnRlcnMpOworK30KKysKKytjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6
aXNSZWZlcmVuY2UoVmFyRmllbGQgeCkgY29uc3QKKyt7CisrICAgIHJldHVybiBpc1NwYWNlKHgs
IG1SZWZlcmVuY2VzKTsKKyt9CisrCisrdm9pZCBTeW1ib2xFbnY6Om1hcmtBc1BhY2tlZChjb25z
dCBURmllbGQgJmZpZWxkKQorK3sKKysgICAgbVBhY2tlZEZpZWxkcy5pbnNlcnQoJmZpZWxkKTsK
Kyt9CisrCisrYm9vbCBTeW1ib2xFbnY6OmlzUGFja2VkKGNvbnN0IFRGaWVsZCAmZmllbGQpIGNv
bnN0CisreworKyAgICByZXR1cm4gbVBhY2tlZEZpZWxkcy5maW5kKCZmaWVsZCkgIT0gbVBhY2tl
ZEZpZWxkcy5lbmQoKTsKKyt9CisrCisrc3RhdGljIFRCYXNpY1R5cGUgR2V0VGV4dHVyZUJhc2lj
VHlwZShUQmFzaWNUeXBlIGJhc2ljVHlwZSkKKyt7CisrICAgIEFTU0VSVChJc1NhbXBsZXIoYmFz
aWNUeXBlKSk7CisrCisrICAgIHN3aXRjaCAoYmFzaWNUeXBlKQorKyAgICB7CisrICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorKyAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZToKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6Cisr
ICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKysgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckV4dGVybmFsMkRZMllFWFQ6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6Cisr
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRN
U0FycmF5OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyVmlkZW9XRUJHTDoKKysgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRv
dzoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisrICAgICAgICBjYXNl
IEVidFNhbXBsZXIxRDoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEQXJyYXk6CisrICAgICAg
ICBjYXNlIEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVy
QnVmZmVyOgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5OgorKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURT
aGFkb3c6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3RTaGFkb3c6CisrICAgICAgICAg
ICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEZsb2F0OworKworKyAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorKyAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlckN1YmU6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKysgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVNBcnJh
eToKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIxRDoKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIxREFycmF5OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEUmVjdDoKKysgICAgICAgIGNh
c2UgRWJ0SVNhbXBsZXJCdWZmZXI6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5
OgorKyAgICAgICAgICAgIHJldHVybiBUQmFzaWNUeXBlOjpFYnRJbnQ7CisrCisrICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisrICAgICAg
ICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5
OgorKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJETVM6CisrICAgICAgICBjYXNlIEVidFVTYW1w
bGVyMkRNU0FycmF5OgorKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEOgorKyAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjFEQXJyYXk6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRSZWN0Ogor
KyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckJ1ZmZlcjoKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlQXJyYXk6CisrICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidFVJbnQ7Cisr
CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIExPR0lDX0VSUk9SKCk7CisrICAgICAg
ICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidFZvaWQ7CisrICAgIH0KKyt9CisrCisrTmFtZSBz
aDo6R2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxlclR5cGUpCisreworKyAgICBB
U1NFUlQoSXNTYW1wbGVyKHNhbXBsZXJUeXBlKSk7CisrCisrICAgIGNvbnN0IFRCYXNpY1R5cGUg
dGV4dHVyZVR5cGUgPSBHZXRUZXh0dXJlQmFzaWNUeXBlKHNhbXBsZXJUeXBlKTsKKysgICAgY29u
c3QgY2hhciAqbmFtZTsKKysKKysjZGVmaW5lIEhBTkRMRV9URVhUVVJFX05BTUUoYmFzZU5hbWUp
ICAgICAgICAgICAgICAgIFwKKysgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN3aXRjaCAodGV4dHVyZVR5cGUpICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0
OiAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNl
TmFtZSAiPGZsb2F0PiI7IFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDog
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNl
TmFtZSAiPGludD4iOyAgIFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9ICJtZXRhbDo6IiBiYXNl
TmFtZSAiPHVpbnQ+IjsgIFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgbmFtZSA9IG51bGxwdHI7ICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgfSB3aGlsZSAoZmFsc2UpCisrCisrICAgIHN3aXRjaCAo
c2FtcGxlclR5cGUpCisrICAgIHsKKysgICAgICAgIC8vIDFkCisrICAgICAgICBjYXNlIEVidFNh
bXBsZXIxRDogIC8vIERlc2t0b3AgR0xTTCBzYW1wbGVyIHR5cGU6CisrICAgICAgICBjYXNlIEVi
dElTYW1wbGVyMUQ6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyMUQ6CisrICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFkIik7CisrICAgICAgICAgICAgYnJlYWs7Cisr
CisrICAgICAgICAvLyAxZCBhcnJheQorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURBcnJheToK
KysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIxREFycmF5OgorKyAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjFEQXJyYXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFk
X2FycmF5Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvLyBCdWZmZXIgdGV4
dHVyZXMKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckJ1ZmZlcjoKKysgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXJCdWZmZXI6CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyQnVmZmVyOgorKyAgICAg
ICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoInRleHR1cmVfYnVmZmVyIik7CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAvLyAyZCB0ZXh0dXJlcworKyAgICAgICAgY2FzZSBFYnRT
YW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkQ6CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisrICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkRSZWN0OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEUmVjdDoK
KysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlMmQiKTsKKysgICAgICAg
ICAgICBicmVhazsKKysKKysgICAgICAgIC8vIDNkIHRleHR1cmVzCisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDoKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKysgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIzRDoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJl
M2QiKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8vIEN1YmUgdGV4dHVyZXMK
KysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisrICAgICAgICBjYXNlIEVidElTYW1wbGVy
Q3ViZToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorKyAgICAgICAgICAgIEhBTkRM
RV9URVhUVVJFX05BTUUoInRleHR1cmVjdWJlIik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisr
ICAgICAgICAvLyAyZCBhcnJheSB0ZXh0dXJlcworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRB
cnJheToKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorKyAgICAgICAgY2FzZSBF
YnRJU2FtcGxlcjJEQXJyYXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4
dHVyZTJkX2FycmF5Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRE1TOgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6CisrICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkRNUzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0
ZXh0dXJlMmRfbXMiKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJETVNBcnJheToKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6Cisr
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNU0FycmF5OgorKyAgICAgICAgICAgIEhBTkRMRV9U
RVhUVVJFX05BTUUoInRleHR1cmUyZF9tc19hcnJheSIpOworKyAgICAgICAgICAgIGJyZWFrOwor
KworKyAgICAgICAgLy8gY3ViZSBhcnJheQorKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFy
cmF5OgorKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmVBcnJheToKKysgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlQXJyYXk6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgi
dGV4dHVyZWN1YmVfYXJyYXkiKTsKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8v
IFNoYWRvdworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURTaGFkb3c6CisrICAgICAgICBjYXNl
IEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorKyAgICAgICAgICAgIFRPRE8oKTsKKysgICAgICAg
ICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJUT0RPIik7CisrICAgICAgICAgICAgYnJlYWs7Cisr
CisrICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3RTaGFkb3c6CisrICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRFNoYWRvdzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0
aDJkIik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVidFNhbXBsZXJD
dWJlU2hhZG93OgorKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoImRlcHRoY3ViZSIp
OworKyAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eVNoYWRvdzoKKysgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkX2FycmF5
Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
QXJyYXlTaGFkb3c6CisrICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJl
X2FycmF5Iik7CisrICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvLyBFeHRlbnRpb25z
CisrICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogICAgICAgLy8gT25seSB2YWxp
ZCBpZiBPRVNfRUdMX2ltYWdlX2V4dGVybmFsIGV4aXN0czoKKysgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckV4dGVybmFsMkRZMllFWFQ6ICAvLyBPbmx5IHZhbGlkIGlmIEdMX0VYVF9ZVVZfdGFyZ2V0
IGV4aXN0czoKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVvV0VCR0w6CisrICAgICAgICAg
ICAgVE9ETygpOworKyAgICAgICAgICAgIEhBTkRMRV9URVhUVVJFX05BTUUoIlRPRE8iKTsKKysg
ICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgTE9H
SUNfRVJST1IoKTsKKysgICAgICAgICAgICBuYW1lID0gbnVsbHB0cjsKKysgICAgICAgICAgICBi
cmVhazsKKysgICAgfQorKworKyN1bmRlZiBIQU5ETEVfVEVYVFVSRV9OQU1FCisrCisrICAgIHJl
dHVybiBOYW1lKG5hbWUsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyt9CitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVu
di5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJv
bEVudi5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGM5NjQ1ZQorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1N5bWJvbEVudi5oCitAQCAtMCwwICsxLDIxOCBAQAorKy8vCisrLy8gQ29weXJpZ2h0
IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKwor
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU1lNQk9M
RU5WX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9TWU1CT0xFTlZfSF8KKysKKysjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKysKKysjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisrI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZmVyZW5jZS5oIgorKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisrCisrbmFtZXNwYWNlIHNoCisrewor
KworK2VudW0gY2xhc3MgQWRkcmVzc1NwYWNlCisreworKyAgICBDb25zdGFudCwKKysgICAgRGV2
aWNlLAorKyAgICBUaHJlYWQsCisrfTsKKysKKytjaGFyIGNvbnN0ICp0b1N0cmluZyhBZGRyZXNz
U3BhY2Ugc3BhY2UpOworKworK2NsYXNzIFZhckZpZWxkCisreworKyAgcHVibGljOgorKyAgICBW
YXJGaWVsZChjb25zdCBUVmFyaWFibGUgJnZhcikgOiBtVmFyaWFibGUoJnZhcikge30KKysgICAg
VmFyRmllbGQoY29uc3QgVEZpZWxkICZmaWVsZCkgOiBtRmllbGQoJmZpZWxkKSB7fQorKworKyAg
ICBBTkdMRV9JTkxJTkUgY29uc3QgVFZhcmlhYmxlICp2YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1WYXJpYWJsZTsgfQorKworKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZpZWxkICpmaWVsZCgp
IGNvbnN0IHsgcmV0dXJuIG1GaWVsZDsgfQorKworKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZhckZpZWxkICZvdGhlcikgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0
dXJuIG1WYXJpYWJsZSA9PSBvdGhlci5tVmFyaWFibGUgJiYgbUZpZWxkID09IG90aGVyLm1GaWVs
ZDsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgY29uc3QgVFZhcmlhYmxlICptVmFyaWFi
bGUgPSBudWxscHRyOworKyAgICBjb25zdCBURmllbGQgKm1GaWVsZCAgICAgICA9IG51bGxwdHI7
CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKytuYW1lc3BhY2Ugc3RkCisreworKwor
K3RlbXBsYXRlIDw+Cisrc3RydWN0IGhhc2g8c2g6OlZhckZpZWxkPgorK3sKKysgICAgc2l6ZV90
IG9wZXJhdG9yKCkoY29uc3Qgc2g6OlZhckZpZWxkICZ4KSBjb25zdAorKyAgICB7CisrICAgICAg
ICBjb25zdCBzaDo6VFZhcmlhYmxlICp2YXIgPSB4LnZhcmlhYmxlKCk7CisrICAgICAgICBpZiAo
dmFyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJldHVybiBzdGQ6Omhhc2g8Y29uc3Qgc2g6
OlRWYXJpYWJsZSAqPigpKHZhcik7CisrICAgICAgICB9CisrICAgICAgICBjb25zdCBzaDo6VEZp
ZWxkICpmaWVsZCA9IHguZmllbGQoKTsKKysgICAgICAgIHJldHVybiBzdGQ6Omhhc2g8Y29uc3Qg
c2g6OlRGaWVsZCAqPigpKGZpZWxkKTsKKysgICAgfQorK307CisrCisrfSAgLy8gbmFtZXNwYWNl
IHN0ZAorKworK25hbWVzcGFjZSBzaAorK3sKKysKKytjbGFzcyBUZW1wbGF0ZUFyZworK3sKKysg
IHB1YmxpYzoKKysgICAgZW51bSBjbGFzcyBLaW5kCisrICAgIHsKKysgICAgICAgIEJvb2wsCisr
ICAgICAgICBJbnQsCisrICAgICAgICBVSW50LAorKyAgICAgICAgVHlwZSwKKysgICAgfTsKKysK
KysgICAgdW5pb24gVmFsdWUKKysgICAgeworKyAgICAgICAgVmFsdWUoYm9vbCB2YWx1ZSkgOiBi
KHZhbHVlKSB7fQorKyAgICAgICAgVmFsdWUoaW50IHZhbHVlKSA6IGkodmFsdWUpIHt9CisrICAg
ICAgICBWYWx1ZSh1bnNpZ25lZCB2YWx1ZSkgOiB1KHZhbHVlKSB7fQorKyAgICAgICAgVmFsdWUo
Y29uc3QgVFR5cGUgJnZhbHVlKSA6IHQoJnZhbHVlKSB7fQorKworKyAgICAgICAgYm9vbCBiOwor
KyAgICAgICAgaW50IGk7CisrICAgICAgICB1bnNpZ25lZCB1OworKyAgICAgICAgY29uc3QgVFR5
cGUgKnQ7CisrICAgIH07CisrCisrICAgIFRlbXBsYXRlQXJnKGJvb2wgdmFsdWUpOworKyAgICBU
ZW1wbGF0ZUFyZyhpbnQgdmFsdWUpOworKyAgICBUZW1wbGF0ZUFyZyh1bnNpZ25lZCB2YWx1ZSk7
CisrICAgIFRlbXBsYXRlQXJnKGNvbnN0IFRUeXBlICZ2YWx1ZSk7CisrCisrICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworKyAgICBib29sIG9wZXJh
dG9yPChjb25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworKworKyAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtS2luZDsgfQorKyAgICBWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1WYWx1ZTsgfQorKworKyAgcHVibGljOgorKyAgICBLaW5kIG1LaW5kOworKyAgICBWYWx1
ZSBtVmFsdWU7CisrfTsKKysKKysvLyBBbiBlbnZpcm9ubWVudCBmb3IgY3JlYXRpbmcgYW5kIHVu
aXF1ZWx5IHNoYXJpbmcgVFN5bWJvbCBvYmplY3RzLgorK2NsYXNzIFN5bWJvbEVudgorK3sKKysg
ICAgY2xhc3MgVGVtcGxhdGVOYW1lCisrICAgIHsKKysgICAgICAgIE5hbWUgYmFzZU5hbWU7Cisr
ICAgICAgICBzdGQ6OnZlY3RvcjxUZW1wbGF0ZUFyZz4gdGVtcGxhdGVBcmdzOworKworKyAgICAg
IHB1YmxpYzoKKysgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZW1wbGF0ZU5hbWUgJm90
aGVyKSBjb25zdDsKKysgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlTmFtZSAm
b3RoZXIpIGNvbnN0OworKworKyAgICAgICAgYm9vbCBlbXB0eSgpIGNvbnN0OworKyAgICAgICAg
dm9pZCBjbGVhcigpOworKworKyAgICAgICAgTmFtZSBmdWxsTmFtZShzdGQ6OnN0cmluZyAmYnVm
ZmVyKSBjb25zdDsKKysKKysgICAgICAgIHZvaWQgYXNzaWduKGNvbnN0IE5hbWUgJm5hbWUsIHNp
emVfdCBhcmdDb3VudCwgY29uc3QgVGVtcGxhdGVBcmcgKmFyZ3MpOworKyAgICB9OworKworKyAg
ICB1c2luZyBUeXBlUmVmICAgICAgICA9IENSZWY8VFR5cGU+OworKyAgICB1c2luZyBTaWcgICAg
ICAgICAgICA9IHN0ZDo6dmVjdG9yPFR5cGVSZWY+OyAgLy8gUGFyYW0wLCBQYXJhbTEsIC4uLiBQ
YXJhbU4sIFJldHVybgorKyAgICB1c2luZyBTaWdUb0Z1bmMgICAgICA9IHN0ZDo6bWFwPFNpZywg
VEZ1bmN0aW9uICo+OworKyAgICB1c2luZyBPdmVybG9hZHMgICAgICA9IHN0ZDo6bWFwPFRlbXBs
YXRlTmFtZSwgU2lnVG9GdW5jPjsKKysgICAgdXNpbmcgQW5nbGVTdHJ1Y3RzICAgPSBzdGQ6Om1h
cDxJbW11dGFibGVTdHJpbmcsIFRTdHJ1Y3R1cmUgKj47CisrICAgIHVzaW5nIFRleHR1cmVTdHJ1
Y3RzID0gc3RkOjptYXA8VEJhc2ljVHlwZSwgVFN0cnVjdHVyZSAqPjsKKysKKysgIHB1YmxpYzoK
KysgICAgU3ltYm9sRW52KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCk7
CisrCisrICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUoKSB7IHJldHVybiBtU3ltYm9sVGFi
bGU7IH0KKysKKysgICAgLy8gVGhlcmUgZXhpc3QgQW5nbGUgcmV3cml0ZXMgdGhhdCBjYW4gbGVh
ZCB0byBpbmNvaGVyZW50IHN0cnVjdHMKKysgICAgLy8KKysgICAgLy8gRXhhbXBsZQorKyAgICAv
LyAgICBzdHJ1Y3QgQSB7IC4uLiB9CisrICAgIC8vICAgIHN0cnVjdCBCIHsgQScgYTsgfSAvLyBB
JyBoYXMgc2FtZSBuYW1lIGFzIEEgYnV0IGlzIG5vdCBpZGVudGljYWwuCisrICAgIC8vIGJlY29t
ZXMKKysgICAgLy8gICAgc3RydWN0IEEgeyAuLi4gfQorKyAgICAvLyAgICBzdHJ1Y3QgQiB7IEEg
YTsgfQorKyAgICAvLworKyAgICAvLyBUaGlzIG5vdGFibHkgaGFwcGVucyB3aGVuIEEgY29udGFp
bnMgYSBzYW1wbGVyIGluIHRoZSBvcmlnaW5hbCBHTFNMIGNvZGUgYnV0IGlzIHJld3JpdHRlbiB0
bworKyAgICAvLyBub3QgaGF2ZSBhIHNhbXBsZXIsIHlldCB0aGUgQScgc3RydWN0IGZpZWxkIHN0
aWxsIGNvbnRhaW5zIHRoZSBzYW1wbGVyIGZpZWxkLgorKyAgICBjb25zdCBUU3RydWN0dXJlICZy
ZW1hcChjb25zdCBUU3RydWN0dXJlICZzKSBjb25zdDsKKysKKysgICAgLy8gTGlrZSBgVFN0cnVj
dHVyZSAmcmVtYXAoY29uc3QgVFN0cnVjdHVyZSAmcylgIGJ1dCBhZGRpdGlvbmFsbHkgbWFwcyBu
dWxsIHRvIG51bGwuCisrICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnJlbWFwKGNvbnN0IFRTdHJ1Y3R1
cmUgKnMpIGNvbnN0OworKworKyAgICBjb25zdCBURnVuY3Rpb24gJmdldEZ1bmN0aW9uT3Zlcmxv
YWQoY29uc3QgTmFtZSAmbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcmFtQ291bnQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqKnBhcmFtVHlwZXMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3Vu
dCAgICAgICAgID0gMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1wbGF0ZUFyZ3MgPSBudWxscHRyKTsKKysKKysgICAgVElu
dGVybUFnZ3JlZ2F0ZSAmY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJl
dHVyblR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1TZXF1ZW5jZSAmYXJncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQgICAgICAgICA9IDAsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1w
bGF0ZUFyZ3MgPSBudWxscHRyKTsKKysKKysgICAgY29uc3QgVFN0cnVjdHVyZSAmbmV3U3RydWN0
dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3QgJmZpZWxkcyk7CisrCisrICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgJmdldFRleHR1cmVFbnYoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSk7CisrICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgJmdldFNhbXBsZXJTdHJ1Y3QoKTsKKysKKysgICAgdm9pZCBtYXJr
QXNQb2ludGVyKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSk7CisrICAgIGNvbnN0IEFk
ZHJlc3NTcGFjZSAqaXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0OworKworKyAgICB2b2lkIG1h
cmtBc1JlZmVyZW5jZShWYXJGaWVsZCB4LCBBZGRyZXNzU3BhY2Ugc3BhY2UpOworKyAgICBjb25z
dCBBZGRyZXNzU3BhY2UgKmlzUmVmZXJlbmNlKFZhckZpZWxkIHgpIGNvbnN0OworKworKyAgICB2
b2lkIG1hcmtBc1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxkKTsKKysgICAgYm9vbCBpc1BhY2tl
ZChjb25zdCBURmllbGQgJmZpZWxkKSBjb25zdDsKKysKKysgIHByaXZhdGU6CisrICAgIGNvbnN0
IFRGdW5jdGlvbiAmZ2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKysKKysgICAgdm9pZCBtYXJr
U3BhY2UoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNwYWNlLCBzdGQ6OnVub3JkZXJlZF9tYXA8
VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCk7CisrICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAq
aXNTcGFjZShWYXJGaWVsZCB4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+ICZtYXApIGNvbnN0
OworKworKyAgcHJpdmF0ZToKKysgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisrCisr
ICAgIHN0ZDo6bWFwPE5hbWUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbU5hbWVUb1N0cnVjdDsKKysg
ICAgT3ZlcmxvYWRzIG1PdmVybG9hZHM7CisrICAgIFNpZyBtUmV1c2FibGVTaWdCdWZmZXI7Cisr
ICAgIFRlbXBsYXRlTmFtZSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXI7CisrICAgIHN0ZDo6
c3RyaW5nIG1SZXVzYWJsZVN0cmluZ0J1ZmZlcjsKKysKKysgICAgQW5nbGVTdHJ1Y3RzIG1Bbmds
ZVN0cnVjdHM7CisrICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxUQmFzaWNUeXBlLCBjb25zdCBUU3Ry
dWN0dXJlICo+IG1UZXh0dXJlRW52czsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqbVNhbXBsZXIg
PSBudWxscHRyOworKworKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NT
cGFjZT4gbVBvaW50ZXJzOworKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJl
c3NTcGFjZT4gbVJlZmVyZW5jZXM7CisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURmll
bGQgKj4gbVBhY2tlZEZpZWxkczsKKyt9OworKworK05hbWUgR2V0VGV4dHVyZVR5cGVOYW1lKFRC
YXNpY1R5cGUgc2FtcGxlclR5cGUpOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU1lNQk9MRU5W
X0hfCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1RvcG9zb3J0U3RydWN0cy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLjk4NDMzMzIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3Bw
CitAQCAtMCwwICsxLDM4MyBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisr
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpbmNsdWRlIDxmdW5jdGlv
bmFsPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0
PgorKyNpbmNsdWRlIDx2ZWN0b3I+CisrCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
SW1tdXRhYmxlU3RyaW5nQnVpbGRlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisrI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisrI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0
aWwuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJh
dmVyc2UuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrdXNp
bmcgRWRnZXMgPSBzdGQ6OnVub3JkZXJlZF9zZXQ8VD47CisrCisrdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisrdXNpbmcgR3JhcGggPSBzdGQ6OnVub3JkZXJlZF9tYXA8VCwgRWRnZXM8VD4+OworKwor
K3ZvaWQgQnVpbGRHcmFwaEltcGwoU3ltYm9sRW52ICZzeW1ib2xFbnYsIEdyYXBoPGNvbnN0IFRT
dHJ1Y3R1cmUgKj4gJmcsIGNvbnN0IFRTdHJ1Y3R1cmUgKnMpCisreworKyAgICBpZiAoZy5maW5k
KHMpICE9IGcuZW5kKCkpCisrICAgIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAg
ICBFZGdlczxjb25zdCBUU3RydWN0dXJlICo+ICZlcyA9IGdbc107CisrCisrICAgIGNvbnN0IFRG
aWVsZExpc3QgJmZzID0gcy0+ZmllbGRzKCk7CisrICAgIGZvciAoY29uc3QgVEZpZWxkICpmIDog
ZnMpCisrICAgIHsKKysgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICp6ID0gc3ltYm9sRW52
LnJlbWFwKGYtPnR5cGUoKS0+Z2V0U3RydWN0KCkpKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IGVzLmluc2VydCh6KTsKKysgICAgICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYsIGcs
IHopOworKyAgICAgICAgICAgIEVkZ2VzPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmV6ID0gZ1t6XTsK
KysgICAgICAgICAgICBlcy5pbnNlcnQoZXouYmVnaW4oKSwgZXouZW5kKCkpOworKyAgICAgICAg
fQorKyAgICB9CisrfQorKworK0dyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gQnVpbGRHcmFwaChT
eW1ib2xFbnYgJnN5bWJvbEVudiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiAmc3RydWN0cykKKyt7Cisr
ICAgIEdyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gZzsKKysgICAgZm9yIChjb25zdCBUU3RydWN0
dXJlICpzIDogc3RydWN0cykKKysgICAgeworKyAgICAgICAgQnVpbGRHcmFwaEltcGwoc3ltYm9s
RW52LCBnLCBzKTsKKysgICAgfQorKyAgICByZXR1cm4gZzsKKyt9CisrCisrLy8gQWxnb3J0aG06
IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjRGVwdGgt
Zmlyc3Rfc2VhcmNoCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RkOjp2ZWN0b3I8VD4gVG9w
b3NvcnQoY29uc3QgR3JhcGg8VD4gJmcpCisreworKyAgICAvLyBub2RlcyB3aXRoIHRlbXBvcmFy
eSBtYXJrCisrICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxUPiB0ZW1wczsKKysKKysgICAgLy8gbm9k
ZXMgd2l0aG91dCBwZXJtYW5lbnQgbWFyaworKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8VD4gaW52
UGVybXM7CisrICAgIGZvciAoY29uc3QgYXV0byAmZW50cnkgOiBnKQorKyAgICB7CisrICAgICAg
ICBpbnZQZXJtcy5pbnNlcnQoZW50cnkuZmlyc3QpOworKyAgICB9CisrCisrICAgIC8vIEwg4oaQ
IEVtcHR5IGxpc3QgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHNvcnRlZCBlbGVtZW50cworKyAgICBz
dGQ6OnZlY3RvcjxUPiBMOworKworKyAgICAvLyBmdW5jdGlvbiB2aXNpdChub2RlIG4pCisrICAg
IHN0ZDo6ZnVuY3Rpb248dm9pZChUKT4gdmlzaXQgPSBbJl0oVCBuKSAtPiB2b2lkIHsKKysgICAg
ICAgIC8vIGlmIG4gaGFzIGEgcGVybWFuZW50IG1hcmsgdGhlbgorKyAgICAgICAgaWYgKGludlBl
cm1zLmZpbmQobikgPT0gaW52UGVybXMuZW5kKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAg
Ly8gcmV0dXJuCisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgLy8g
aWYgbiBoYXMgYSB0ZW1wb3JhcnkgbWFyayB0aGVuCisrICAgICAgICBpZiAodGVtcHMuZmluZChu
KSAhPSB0ZW1wcy5lbmQoKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBzdG9wICAgKG5v
dCBhIERBRykKKysgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworKyAgICAgICAgfQorKworKyAg
ICAgICAgLy8gbWFyayBuIHdpdGggYSB0ZW1wb3JhcnkgbWFyaworKyAgICAgICAgdGVtcHMuaW5z
ZXJ0KG4pOworKworKyAgICAgICAgLy8gZm9yIGVhY2ggbm9kZSBtIHdpdGggYW4gZWRnZSBmcm9t
IG4gdG8gbSBkbworKyAgICAgICAgYXV0byBlbkl0ZXIgPSBnLmZpbmQobik7CisrICAgICAgICBB
U1NFUlQoZW5JdGVyICE9IGcuZW5kKCkpOworKyAgICAgICAgY29uc3QgRWRnZXM8VD4gJmVuID0g
ZW5JdGVyLT5zZWNvbmQ7CisrICAgICAgICBmb3IgKFQgbSA6IGVuKQorKyAgICAgICAgeworKyAg
ICAgICAgICAgIC8vIHZpc2l0KG0pCisrICAgICAgICAgICAgdmlzaXQobSk7CisrICAgICAgICB9
CisrCisrICAgICAgICAvLyByZW1vdmUgdGVtcG9yYXJ5IG1hcmsgZnJvbSBuCisrICAgICAgICB0
ZW1wcy5lcmFzZShuKTsKKysgICAgICAgIC8vIG1hcmsgbiB3aXRoIGEgcGVybWFuZW50IG1hcmsK
KysgICAgICAgIGludlBlcm1zLmVyYXNlKG4pOworKyAgICAgICAgLy8gYWRkIG4gdG8gaGVhZCBv
ZiBMCisrICAgICAgICBMLnB1c2hfYmFjayhuKTsKKysgICAgfTsKKysKKysgICAgLy8gd2hpbGUg
ZXhpc3RzIG5vZGVzIHdpdGhvdXQgYSBwZXJtYW5lbnQgbWFyayBkbworKyAgICB3aGlsZSAoIWlu
dlBlcm1zLmVtcHR5KCkpCisrICAgIHsKKysgICAgICAgIC8vIHNlbGVjdCBhbiB1bm1hcmtlZCBu
b2RlIG4KKysgICAgICAgIFQgbiA9ICppbnZQZXJtcy5iZWdpbigpOworKyAgICAgICAgLy8gdmlz
aXQobikKKysgICAgICAgIHZpc2l0KG4pOworKyAgICB9CisrCisrICAgIHJldHVybiBMOworK30K
KysKKytUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpDcmVhdGVTdHJ1Y3RFcXVhbGl0eUZ1bmN0
aW9uKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZhU3RydWN0
VHlwZSkKKyt7CisrICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrICAgIGF1dG8gJmZ1bmNF
cXVhbGl0eSA9CisrICAgICAgICAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIEltbXV0YWJs
ZVN0cmluZygiZXF1YWwiKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCwKKysgICAgICAgICAg
ICAgICAgICAgICAgIG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisrICAg
IGF1dG8gJmFTdHJ1Y3QgPSBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBhU3Ry
dWN0VHlwZSwgTmFtZSgiYSIpKTsKKysgICAgYXV0byAmYlN0cnVjdCA9IENyZWF0ZUluc3RhbmNl
VmFyaWFibGUoc3ltYm9sVGFibGUsIGFTdHJ1Y3RUeXBlLCBOYW1lKCJiIikpOworKyAgICBmdW5j
RXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZhU3RydWN0KTsKKysgICAgZnVuY0VxdWFsaXR5LmFkZFBh
cmFtZXRlcigmYlN0cnVjdCk7CisrCisrICAgIGF1dG8gJmJvZHlFcXVhbGl0eSA9ICpuZXcgVElu
dGVybUJsb2NrKCk7CisrICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBhbmROb2RlczsK
KysgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKysgICAgY29uc3QgVEZpZWxkTGlzdCAmYUZp
ZWxkcyA9IGFTdHJ1Y3RUeXBlLmZpZWxkcygpOworKyAgICBjb25zdCBzaXplX3Qgc2l6ZSAgICAg
ICAgID0gYUZpZWxkcy5zaXplKCk7CisrCisrICAgIGF1dG8gdGVzdEVxdWFsaXR5ID0gWyZdKFRJ
bnRlcm1UeXBlZCAmYSwgVEludGVybVR5cGVkICZiKSAtPiBUSW50ZXJtVHlwZWQgKiB7CisrICAg
ICAgICBBU1NFUlQoYS5nZXRUeXBlKCkgPT0gYi5nZXRUeXBlKCkpOworKyAgICAgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSBhLmdldFR5cGUoKTsKKysgICAgICAgIGlmICh0eXBlLmlzVmVjdG9yKCkg
fHwgdHlwZS5pc01hdHJpeCgpIHx8IHR5cGUuZ2V0U3RydWN0KCkpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgYXV0byAqZnVuYyA9CisrICAgICAgICAgICAgICAgIG5ldyBURnVuY3Rpb24oJnN5
bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImVxdWFsIiksIFN5bWJvbFR5cGU6OkFuZ2xlSW50
ZXJuYWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRUeXBlKFRCYXNpY1R5
cGU6OkVidEJvb2wpLCB0cnVlKTsKKysgICAgICAgICAgICByZXR1cm4gVEludGVybUFnZ3JlZ2F0
ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKCpmdW5jLCBuZXcgVEludGVybVNlcXVlbmNleyZhLCAmYn0p
OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybiBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEVxdWFsLCAmYSwgJmIpOworKyAg
ICAgICAgfQorKyAgICB9OworKworKyAgICBmb3IgKHNpemVfdCBpZHggPSAwOyBpZHggPCBzaXpl
OyArK2lkeCkKKysgICAgeworKyAgICAgICAgY29uc3QgVEZpZWxkICZhRmllbGQgICAgPSAqYUZp
ZWxkc1tpZHhdOworKyAgICAgICAgY29uc3QgVFR5cGUgJmFGaWVsZFR5cGUgPSAqYUZpZWxkLnR5
cGUoKTsKKysgICAgICAgIGF1dG8gJmFGaWVsZE5hbWUgICAgICAgID0gYUZpZWxkLm5hbWUoKTsK
KysKKysgICAgICAgIGlmIChhRmllbGRUeXBlLmlzQXJyYXkoKSkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBBU1NFUlQoIWFGaWVsZFR5cGUuaXNBcnJheU9mQXJyYXlzKCkpOyAgLy8gVE9ETwor
KyAgICAgICAgICAgIGludCBkaW0gPSBhRmllbGRUeXBlLmdldE91dGVybW9zdEFycmF5U2l6ZSgp
OworKyAgICAgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2QpCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICBhdXRvICZhQWNjZXNzID0gQWNjZXNzSW5kZXgoQWNjZXNz
RmllbGQoYVN0cnVjdCwgYUZpZWxkTmFtZSksIGQpOworKyAgICAgICAgICAgICAgICBhdXRvICZi
QWNjZXNzID0gQWNjZXNzSW5kZXgoQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSksIGQp
OworKyAgICAgICAgICAgICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJBY2Nlc3Ms
IGFBY2Nlc3MpOworKyAgICAgICAgICAgICAgICBhbmROb2Rlcy5wdXNoX2JhY2soZXFOb2RlKTsK
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7Cisr
ICAgICAgICAgICAgYXV0byAmYUFjY2VzcyA9IEFjY2Vzc0ZpZWxkKGFTdHJ1Y3QsIGFGaWVsZE5h
bWUpOworKyAgICAgICAgICAgIGF1dG8gJmJBY2Nlc3MgPSBBY2Nlc3NGaWVsZChiU3RydWN0LCBh
RmllbGROYW1lKTsKKysgICAgICAgICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJB
Y2Nlc3MsIGFBY2Nlc3MpOworKyAgICAgICAgICAgIGFuZE5vZGVzLnB1c2hfYmFjayhlcU5vZGUp
OworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIEFTU0VSVChhbmROb2Rlcy5zaXplKCkgPiAw
KTsgIC8vIEVtcHR5IHN0cnVjdHMgYXJlIG5vdCBhbGxvd2VkIGluIEdMU0wKKysgICAgVEludGVy
bVR5cGVkICpvdXROb2RlID0gYW5kTm9kZXMuYmFjaygpOworKyAgICBhbmROb2Rlcy5wb3BfYmFj
aygpOworKyAgICBmb3IgKFRJbnRlcm1UeXBlZCAqYW5kTm9kZSA6IGFuZE5vZGVzKQorKyAgICB7
CisrICAgICAgICBvdXROb2RlID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BMb2dp
Y2FsQW5kLCBhbmROb2RlLCBvdXROb2RlKTsKKysgICAgfQorKyAgICBib2R5RXF1YWxpdHkuYXBw
ZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJhbmNoKFRPcGVyYXRvcjo6RU9wUmV0dXJuLCBvdXRO
b2RlKSk7CisrICAgIGF1dG8gKmZ1bmNQcm90b0VxdWFsaXR5ID0gbmV3IFRJbnRlcm1GdW5jdGlv
blByb3RvdHlwZSgmZnVuY0VxdWFsaXR5KTsKKysgICAgcmV0dXJuIG5ldyBUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uKGZ1bmNQcm90b0VxdWFsaXR5LCAmYm9keUVxdWFsaXR5KTsKKyt9CisrCisr
c3RydWN0IERlY2xhcmVkU3RydWN0dXJlCisreworKyAgICBUSW50ZXJtRGVjbGFyYXRpb24gKmRl
Y2xOb2RlOworKyAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICplcXVhbGl0eUZ1bmN0aW9u
RGVmaW5pdGlvbjsKKysgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlOworK307CisrCisr
Ym9vbCBHZXRBc0RlY2xhcmVkU3RydWN0dXJlKFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAmbm9kZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRGVjbGFyZWRTdHJ1Y3R1cmUgJm91dCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRTdHJ1Y3R1cmUgKj4g
JnVzZWRTdHJ1Y3RzKQorK3sKKysgICAgaWYgKFRJbnRlcm1EZWNsYXJhdGlvbiAqZGVjbE5vZGUg
PSBub2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisrICAgIHsKKysgICAgICAgIEFTU0VSVChk
ZWNsTm9kZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworKyAgICAgICAgVEludGVybU5vZGUgJm5v
ZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKysKKysgICAgICAgIGlmIChUSW50ZXJt
U3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxl
KCk7CisrICAgICAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgpOwor
KyAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBzeW1ib2xFbnYu
cmVtYXAodHlwZS5nZXRTdHJ1Y3QoKSkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAg
ICBpZiAodHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBvdXQuZGVjbE5vZGUgID0gZGVjbE5vZGU7CisrICAgICAgICAgICAg
ICAgICAgICBvdXQuc3RydWN0dXJlID0gc3RydWN0dXJlOworKyAgICAgICAgICAgICAgICAgICAg
b3V0LmVxdWFsaXR5RnVuY3Rpb25EZWZpbml0aW9uID0KKysgICAgICAgICAgICAgICAgICAgICAg
ICB1c2VkU3RydWN0cy5maW5kKHN0cnVjdHVyZSkgPT0gdXNlZFN0cnVjdHMuZW5kKCkKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxscHRyCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogQ3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihzeW1ib2xUYWJsZSwgKnN0cnVj
dHVyZSk7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgICAgICAg
ICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gZmFs
c2U7CisrfQorKworK2NsYXNzIEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCisreworKyAgcHVibGljOgorKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7Cisr
ICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUU3RydWN0dXJlICo+IG1Vc2VkU3RydWN0czsK
KysKKysgICAgRmluZFN0cnVjdEVxdWFsaXR5VXNlKFN5bWJvbEVudiAmc3ltYm9sRW52KQorKyAg
ICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSksIG1TeW1ib2xFbnYo
c3ltYm9sRW52KQorKyAgICB7fQorKworKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50
ZXJtQmluYXJ5ICpiaW5hcnkpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIGNvbnN0IFRPcGVy
YXRvciBvcCA9IGJpbmFyeS0+Z2V0T3AoKTsKKysKKysgICAgICAgIHN3aXRjaCAob3ApCisrICAg
ICAgICB7CisrICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVxdWFsOgorKyAgICAgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKysgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgPSBiaW5hcnktPmdldExlZnQoKS0+Z2V0
VHlwZSgpOworKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmcmlnaHRUeXBlID0gYmluYXJ5
LT5nZXRSaWdodCgpLT5nZXRUeXBlKCk7CisrICAgICAgICAgICAgICAgIEFTU0VSVChsZWZ0VHlw
ZS5nZXRTdHJ1Y3QoKSA9PSByaWdodFR5cGUuZ2V0U3RydWN0KCkpOworKyAgICAgICAgICAgICAg
ICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gbVN5bWJvbEVudi5yZW1hcChsZWZ0
VHlwZS5nZXRTdHJ1Y3QoKSkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAg
ICAgIHVzZVN0cnVjdCgqc3RydWN0dXJlKTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAg
ICAgIH0KKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAg
ICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHVybiB0cnVl
OworKyAgICB9CisrCisrICBwcml2YXRlOgorKyAgICB2b2lkIHVzZVN0cnVjdChjb25zdCBUU3Ry
dWN0dXJlICZzdHJ1Y3R1cmUpCisrICAgIHsKKysgICAgICAgIGlmIChtVXNlZFN0cnVjdHMuaW5z
ZXJ0KCZzdHJ1Y3R1cmUpLnNlY29uZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBmb3IgKGNv
bnN0IFRGaWVsZCAqZmllbGQgOiBzdHJ1Y3R1cmUuZmllbGRzKCkpCisrICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3ViU3RydWN0ID0gbVN5bWJv
bEVudi5yZW1hcChmaWVsZC0+dHlwZSgpLT5nZXRTdHJ1Y3QoKSkpCisrICAgICAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3ViU3RydWN0KTsKKysgICAgICAg
ICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorK307CisrCisr
fSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisr
CisrYm9vbCBzaDo6VG9wb3NvcnRTdHJ1Y3RzKFRDb21waWxlciAmY29tcGlsZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAg
IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpCisreworKyAgICBGaW5kU3RydWN0RXF1YWxpdHlV
c2UgZmluZGVyKHN5bWJvbEVudik7CisrICAgIHJvb3QudHJhdmVyc2UoJmZpbmRlcik7CisrICAg
IHBwYy5oYXNTdHJ1Y3RFcSA9ICFmaW5kZXIubVVzZWRTdHJ1Y3RzLmVtcHR5KCk7CisrCisrICAg
IERlY2xhcmVkU3RydWN0dXJlIGRlY2xhcmVkU3RydWN0OworKyAgICBzdGQ6OnZlY3RvcjxEZWNs
YXJlZFN0cnVjdHVyZT4gZGVjbGFyZWRTdHJ1Y3RzOworKyAgICBzdGQ6OnZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiBub25TdHJ1Y3RTdG10Tm9kZXM7CisrCisrICAgIHsKKysgICAgICAgIGNvbnN0IHNp
emVfdCBzdG10Q291bnQgPSByb290LmdldENoaWxkQ291bnQoKTsKKysgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3RtdENvdW50OyArK2kpCisrICAgICAgICB7CisrICAgICAgICAgICAg
VEludGVybU5vZGUgJnN0bXROb2RlID0gKnJvb3QuZ2V0Q2hpbGROb2RlKGkpOworKyAgICAgICAg
ICAgIGlmIChHZXRBc0RlY2xhcmVkU3RydWN0dXJlKHN5bWJvbEVudiwgc3RtdE5vZGUsIGRlY2xh
cmVkU3RydWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBp
bGVyLmdldFN5bWJvbFRhYmxlKCksIGZpbmRlci5tVXNlZFN0cnVjdHMpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgZGVjbGFyZWRTdHJ1Y3RzLnB1c2hfYmFjayhkZWNsYXJlZFN0
cnVjdCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7
CisrICAgICAgICAgICAgICAgIG5vblN0cnVjdFN0bXROb2Rlcy5wdXNoX2JhY2soJnN0bXROb2Rl
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgeworKyAgICAg
ICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBzdHJ1Y3RzOworKyAgICAgICAgc3Rk
Ojp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTdHJ1Y3R1cmUgKiwgRGVjbGFyZWRTdHJ1Y3R1cmU+IHJh
d1RvRGVjbGFyZWQ7CisrCisrICAgICAgICBmb3IgKGNvbnN0IERlY2xhcmVkU3RydWN0dXJlICZk
IDogZGVjbGFyZWRTdHJ1Y3RzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHN0cnVjdHMucHVz
aF9iYWNrKGQuc3RydWN0dXJlKTsKKysgICAgICAgICAgICBBU1NFUlQocmF3VG9EZWNsYXJlZC5m
aW5kKGQuc3RydWN0dXJlKSA9PSByYXdUb0RlY2xhcmVkLmVuZCgpKTsKKysgICAgICAgICAgICBy
YXdUb0RlY2xhcmVkW2Quc3RydWN0dXJlXSA9IGQ7CisrICAgICAgICB9CisrCisrICAgICAgICAv
LyBOb3RlOiBHcmFwaCBtYXkgY29udGFpbiBtb3JlIHRoYW4gb25seSBleHBsaWNpdGx5IGRlY2xh
cmVkIHN0cnVjdHVyZXMuCisrICAgICAgICBHcmFwaDxjb25zdCBUU3RydWN0dXJlICo+IGcgICAg
ICAgICAgICAgICAgICAgPSBCdWlsZEdyYXBoKHN5bWJvbEVudiwgc3RydWN0cyk7CisrICAgICAg
ICBzdGQ6OnZlY3Rvcjxjb25zdCBUU3RydWN0dXJlICo+IHNvcnRlZFN0cnVjdHMgPSBUb3Bvc29y
dChnKTsKKysgICAgICAgIEFTU0VSVChkZWNsYXJlZFN0cnVjdHMuc2l6ZSgpIDw9IHNvcnRlZFN0
cnVjdHMuc2l6ZSgpKTsKKysKKysgICAgICAgIGRlY2xhcmVkU3RydWN0cy5jbGVhcigpOworKyAg
ICAgICAgZm9yIChjb25zdCBUU3RydWN0dXJlICpzIDogc29ydGVkU3RydWN0cykKKysgICAgICAg
IHsKKysgICAgICAgICAgICBhdXRvIGl0ID0gcmF3VG9EZWNsYXJlZC5maW5kKHMpOworKyAgICAg
ICAgICAgIGlmIChpdCAhPSByYXdUb0RlY2xhcmVkLmVuZCgpKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgYXV0byAmZCA9IGl0LT5zZWNvbmQ7CisrICAgICAgICAgICAgICAgIEFT
U0VSVChkLmRlY2xOb2RlKTsKKysgICAgICAgICAgICAgICAgZGVjbGFyZWRTdHJ1Y3RzLnB1c2hf
YmFjayhkKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgewor
KyAgICAgICAgVEludGVybVNlcXVlbmNlIG5ld1N0bXROb2RlczsKKysKKysgICAgICAgIGZvciAo
RGVjbGFyZWRTdHJ1Y3R1cmUgJmRlY2xhcmVkU3RydWN0IDogZGVjbGFyZWRTdHJ1Y3RzKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIEFTU0VSVChkZWNsYXJlZFN0cnVjdC5kZWNsTm9kZSk7Cisr
ICAgICAgICAgICAgbmV3U3RtdE5vZGVzLnB1c2hfYmFjayhkZWNsYXJlZFN0cnVjdC5kZWNsTm9k
ZSk7CisrICAgICAgICAgICAgaWYgKGRlY2xhcmVkU3RydWN0LmVxdWFsaXR5RnVuY3Rpb25EZWZp
bml0aW9uKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbmV3U3RtdE5vZGVzLnB1
c2hfYmFjayhkZWNsYXJlZFN0cnVjdC5lcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbik7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgfQorKworKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqc3Rt
dE5vZGUgOiBub25TdHJ1Y3RTdG10Tm9kZXMpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNT
RVJUKHN0bXROb2RlKTsKKysgICAgICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9iYWNrKHN0bXRO
b2RlKTsKKysgICAgICAgIH0KKysKKysgICAgICAgICpyb290LmdldFNlcXVlbmNlKCkgPSBuZXdT
dG10Tm9kZXM7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbXBpbGVyLnZhbGlkYXRlQVNUKCZy
b290KTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5oCituZXcgZmlsZSBtb2RlIDEw
MDY0NAoraW5kZXggMDAwMDAwMC4uYTM5MDhlMworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3RydWN0cy5o
CitAQCAtMCwwICsxLDI3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9UT1BPU09SVFNUUlVDVFNfSF8KKysjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RS
VUNUU19IXworKworKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgiCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgor
KworK25hbWVzcGFjZSBzaAorK3sKKysKKysvLyBEb2VzIGEgdG9wb3NvcnQgb24gc3RydWN0cyBi
YXNlZCBvbiB0eXBlIGRlcGVuZGVuY2llcy4KKysvLyBTdHJ1Y3QgdHlwZSBkZWNsYXJhdGlvbnMg
YXJlIG1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlIHJvb3QgYmxvY2suCisrQU5HTEVfTk9fRElTQ0FS
RCBib29sIFRvcG9zb3J0U3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUHJlbHVkZUNvbmZpZyAm
cHBjKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXworZGlmZiAt
LWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFw
TWFpbi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
V3JhcE1haW4uY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDE0YmM2
MworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1dyYXBNYWluLmNwcAorQEAgLTAsMCArMSw5NCBAQAorKy8vCisrLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysv
LworKworKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9XcmFwTWFpbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fz
dEhlbHBlcnMuaCIKKysKKyt1c2luZyBuYW1lc3BhY2Ugc2g7CisrCisrLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKysKKytuYW1lc3BhY2UKKyt7CisrCisrY2xhc3MgV3JhcHBlciA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyCisreworKyAgcHJpdmF0ZToKKysgICAgSWRHZW4gJm1JZEdlbjsKKysK
KysgIHB1YmxpYzoKKysgICAgV3JhcHBlcihUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLCBJZEdl
biAmaWRHZW4pCisrICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVl
LCAmc3ltYm9sVGFibGUpLCBtSWRHZW4oaWRHZW4pCisrICAgIHt9CisrCisrICAgIGJvb2wgdmlz
aXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICpibG9ja05vZGUpIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIGlmIChibG9ja05vZGUgIT0gZ2V0Um9vdE5vZGUoKSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGZvciAoVElu
dGVybU5vZGUgKm5vZGUgOiAqYmxvY2tOb2RlLT5nZXRTZXF1ZW5jZSgpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGlmIChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSA9
IG5vZGUtPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisrICAgICAgICAgICAgeworKyAgICAg
ICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0
aW9uKCk7CisrICAgICAgICAgICAgICAgIGlmIChmdW5jLmlzTWFpbigpKQorKyAgICAgICAgICAg
ICAgICB7CisrICAgICAgICAgICAgICAgICAgICB2aXNpdE1haW4oKmJsb2NrTm9kZSwgZnVuY0Rl
Zk5vZGUpOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysg
ICAgfQorKworKyAgcHJpdmF0ZToKKysgICAgdm9pZCB2aXNpdE1haW4oVEludGVybUJsb2NrICZy
b290LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSkKKysgICAgeworKyAg
ICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvbigp
OworKyAgICAgICAgQVNTRVJUKGZ1bmMuaXNNYWluKCkpOworKyAgICAgICAgQVNTRVJUKGZ1bmMu
Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljVHlwZSgpID09IFRCYXNpY1R5cGU6OkVidFZvaWQpOwor
KyAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UGFyYW1Db3VudCgpID09IDApOworKworKyAgICAgICAg
Y29uc3QgVEZ1bmN0aW9uICZleHRlcm5hbE1haW5GdW5jID0gKmZ1bmNEZWZOb2RlLT5nZXRGdW5j
dGlvbigpOworKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZpbnRlcm5hbE1haW5GdW5jID0gQ2xv
bmVGdW5jdGlvbigqbVN5bWJvbFRhYmxlLCBtSWRHZW4sIGV4dGVybmFsTWFpbkZ1bmMpOworKwor
KyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICpleHRlcm5hbE1haW5Qcm90byA9IGZ1
bmNEZWZOb2RlLT5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworKyAgICAgICAgVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICppbnRlcm5hbE1haW5Qcm90byA9CisrICAgICAgICAgICAgbmV3IFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSgmaW50ZXJuYWxNYWluRnVuYyk7CisrCisrICAgICAgICBUSW50
ZXJtQmxvY2sgKmV4dGVybmFsTWFpbkJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisrICAgICAg
ICBleHRlcm5hbE1haW5Cb2R5LT5hcHBlbmRTdGF0ZW1lbnQoCisrICAgICAgICAgICAgVEludGVy
bUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKGludGVybmFsTWFpbkZ1bmMsIG5ldyBUSW50
ZXJtU2VxdWVuY2UoKSkpOworKworKyAgICAgICAgVEludGVybUJsb2NrICppbnRlcm5hbE1haW5C
b2R5ID0gZnVuY0RlZk5vZGUtPmdldEJvZHkoKTsKKysKKysgICAgICAgIFRJbnRlcm1GdW5jdGlv
bkRlZmluaXRpb24gKmV4dGVybmFsTWFpbkRlZiA9CisrICAgICAgICAgICAgbmV3IFRJbnRlcm1G
dW5jdGlvbkRlZmluaXRpb24oZXh0ZXJuYWxNYWluUHJvdG8sIGV4dGVybmFsTWFpbkJvZHkpOwor
KyAgICAgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqaW50ZXJuYWxNYWluRGVmID0KKysg
ICAgICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm5hbE1haW5Qcm90
bywgaW50ZXJuYWxNYWluQm9keSk7CisrCisrICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMucHVz
aF9iYWNrKE5vZGVSZXBsYWNlV2l0aE11bHRpcGxlRW50cnkoCisrICAgICAgICAgICAgJnJvb3Qs
IGZ1bmNEZWZOb2RlLCBUSW50ZXJtU2VxdWVuY2V7aW50ZXJuYWxNYWluRGVmLCBleHRlcm5hbE1h
aW5EZWZ9KSk7CisrICAgIH0KKyt9OworKworK30gIC8vIG5hbWVzcGFjZQorKworK2Jvb2wgc2g6
OldyYXBNYWluKFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJsb2Nr
ICZyb290KQorK3sKKysgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLmdl
dFN5bWJvbFRhYmxlKCk7CisrICAgIFdyYXBwZXIgd3JhcHBlcihzeW1ib2xUYWJsZSwgaWRHZW4p
OworKyAgICByb290LnRyYXZlcnNlKCZ3cmFwcGVyKTsKKysgICAgaWYgKCF3cmFwcGVyLnVwZGF0
ZVRyZWUoJmNvbXBpbGVyLCAmcm9vdCkpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsK
KysgICAgfQorKyAgICByZXR1cm4gdHJ1ZTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmggYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uaAorbmV3IGZpbGUg
bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjViMGVkZmYKKy0tLSAvZGV2L251bGwKKysrKyBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5o
CitAQCAtMCwwICsxLDI4IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9XUkFQTUFJTl9IXworKyNkZWZpbmUgQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKysKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4u
aCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVy
c2UuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gQ2hhbmdlcworKy8vICAgIHZvaWQg
bWFpbihhcmdzKSB7IG1haW4tYm9keSB9CisrLy8gVG8KKysvLyAgICB2b2lkIEZSRVNIX05BTUUo
YXJncykgeyBtYWluLWJvZHkgfQorKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7IEZSRVNIX05BTUUo
YXJncyk7IH0KKysvLworKy8vIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdXNlZnVsIGlmIHRoZSBv
cmlnaW5hbCBgbWFpbmAgaGFzIG11bHRpcGxlIHJldHVybiBwYXRocyBiZWNhdXNlIHRoaXMKKysv
LyByZWR1Y2VzIGRvd24gdG8gYSBzaW5nbGUgcGF0aCBpbiB0aGUgbmV3IGBtYWluYC4gTmljZSBm
b3IgaW5zZXJ0aW5nIGNsZWFudXAgY29kZSBpbiBgbWFpbmAuCisrQU5HTEVfTk9fRElTQ0FSRCBi
b29sIFdyYXBNYWluKFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJs
b2NrICZyb290KTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1dSQVBNQUlOX0hfCitkaWZmIC0t
Z2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwCituZXcgZmls
ZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTBhOGJmMworLS0tIC9kZXYvbnVsbAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwCitAQCAt
MCwwICsxLDMwNSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMDIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQor
KyMgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQ3MTgpCisrI2VuZGlmCisrI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKysjaW5jbHVkZSA8
YWxnb3JpdGhtPgorKyNpbmNsdWRlIDxjbGltaXRzPgorKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0hhc2hOYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0
YWJsZVN0cmluZy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgi
CisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHlwZXMuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrY29uc3QgY2hh
ciAqZ2V0QmFzaWNNZXRhbFN0cmluZyhjb25zdCBUVHlwZSAqdCkKKyt7CisrICAgIHN3aXRjaCAo
dC0+Z2V0QmFzaWNUeXBlKCkpCisrICAgIHsKKysgICAgICAgIGNhc2UgRWJ0Vm9pZDoKKysgICAg
ICAgICAgICByZXR1cm4gInZvaWQiOworKyAgICAgICAgY2FzZSBFYnRGbG9hdDoKKysgICAgICAg
ICAgICByZXR1cm4gImZsb2F0IjsKKysgICAgICAgIGNhc2UgRWJ0SW50OgorKyAgICAgICAgICAg
IHJldHVybiAiaW50IjsKKysgICAgICAgIGNhc2UgRWJ0VUludDoKKysgICAgICAgICAgICByZXR1
cm4gInVpbnQiOworKyAgICAgICAgY2FzZSBFYnRCb29sOgorKyAgICAgICAgICAgIHJldHVybiAi
Ym9vbCI7CisrICAgICAgICBjYXNlIEVidFl1dkNzY1N0YW5kYXJkRVhUOgorKyAgICAgICAgICAg
IHJldHVybiAieXV2Q3NjU3RhbmRhcmRFWFQiOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworKyAgICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyM0QiOworKyAgICAgICAgY2FzZSBF
YnRTYW1wbGVyQ3ViZToKKysgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsKKysgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorKyAgICAgICAgICAgIHJldHVybiAic2Ft
cGxlckV4dGVybmFsT0VTIjsKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsMkRZMllF
WFQ6CisrICAgICAgICAgICAgcmV0dXJuICJfX3NhbXBsZXJFeHRlcm5hbDJEWTJZRVhUIjsKKysg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKysgICAgICAgICAgICByZXR1cm4gInNhbXBs
ZXIyRFJlY3QiOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKysgICAgICAgICAg
ICByZXR1cm4gInNhbXBsZXIyREFycmF5IjsKKysgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVM6
CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRNUyI7CisrICAgICAgICBjYXNlIEVidFNh
bXBsZXIyRE1TQXJyYXk6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRNU0FycmF5IjsK
KysgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVBcnJheToKKysgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXJDdWJlQXJyYXkiOworKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorKyAgICAg
ICAgICAgIHJldHVybiAiaXNhbXBsZXIyRCI7CisrICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6
CisrICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjNEIjsKKysgICAgICAgIGNhc2UgRWJ0SVNh
bXBsZXJDdWJlOgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlIjsKKysgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIy
REFycmF5IjsKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorKyAgICAgICAgICAgIHJl
dHVybiAiaXNhbXBsZXIyRE1TIjsKKysgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJyYXk6
CisrICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjJETVNBcnJheSI7CisrICAgICAgICBjYXNl
IEVidElTYW1wbGVyQ3ViZUFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJl
QXJyYXkiOworKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorKyAgICAgICAgICAgIHJldHVy
biAidXNhbXBsZXIyRCI7CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisrICAgICAgICAg
ICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgor
KyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXJDdWJlIjsKKysgICAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIyREFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyREFycmF5IjsKKysg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TOgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBs
ZXIyRE1TIjsKKysgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TQXJyYXk6CisrICAgICAgICAg
ICAgcmV0dXJuICJ1c2FtcGxlcjJETVNBcnJheSI7CisrICAgICAgICBjYXNlIEVidFVTYW1wbGVy
Q3ViZUFycmF5OgorKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXJDdWJlQXJyYXkiOworKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyMkRTaGFkb3ciOworKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKysgICAg
ICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlU2hhZG93IjsKKysgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEQXJyYXlTaGFkb3c6CisrICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRBcnJheVNo
YWRvdyI7CisrICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXlTaGFkb3c6CisrICAgICAg
ICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZUFycmF5U2hhZG93IjsKKysgICAgICAgIGNhc2UgRWJ0
U3RydWN0OgorKyAgICAgICAgICAgIHJldHVybiAic3RydWN0dXJlIjsKKysgICAgICAgIGNhc2Ug
RWJ0SW50ZXJmYWNlQmxvY2s6CisrICAgICAgICAgICAgcmV0dXJuICJpbnRlcmZhY2UgYmxvY2si
OworKyAgICAgICAgY2FzZSBFYnRJbWFnZTJEOgorKyAgICAgICAgICAgIHJldHVybiAidGV4dHVy
ZTJkIjsKKysgICAgICAgIGNhc2UgRWJ0SUltYWdlMkQ6CisrICAgICAgICAgICAgcmV0dXJuICJ0
ZXh0dXJlMmQ8aW50PiI7CisrICAgICAgICBjYXNlIEVidFVJbWFnZTJEOgorKyAgICAgICAgICAg
IHJldHVybiAidGV4dHVyZTJkPHVpbnQ+IjsKKysgICAgICAgIGNhc2UgRWJ0SW1hZ2UzRDoKKysg
ICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZCI7CisrICAgICAgICBjYXNlIEVidElJbWFnZTNE
OgorKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkPGludD4iOworKyAgICAgICAgY2FzZSBF
YnRVSW1hZ2UzRDoKKysgICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZDx1aW50PiI7CisrICAg
ICAgICBjYXNlIEVidEltYWdlMkRBcnJheToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVk
QXJyYXkoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlf
cmVmPHRleHR1cmUyZD4iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAg
ICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7Cisr
ICAgICAgICAgICAgfQorKyAgICAgICAgY2FzZSBFYnRJSW1hZ2UyREFycmF5OgorKyAgICAgICAg
ICAgIGlmICh0LT5pc1Vuc2l6ZWRBcnJheSgpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgcmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZTJkPGludD4+IjsKKysgICAgICAgICAgICB9
CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgcmV0
dXJuICJOT1RfSU1QTEVNRU5URUQiOworKyAgICAgICAgICAgIH0KKysgICAgICAgIGNhc2UgRWJ0
VUltYWdlMkRBcnJheToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1cmUy
ZDx1aW50Pj4iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAg
ICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisrICAgICAg
ICAgICAgfQorKyAgICAgICAgY2FzZSBFYnRJbWFnZUN1YmU6CisrICAgICAgICAgICAgcmV0dXJu
ICJ0ZXh0dXJlY3ViZSI7CisrICAgICAgICBjYXNlIEVidElJbWFnZUN1YmU6CisrICAgICAgICAg
ICAgcmV0dXJuICJ0ZXh0dXJlY3ViZTxpbnQ+IjsKKysgICAgICAgIGNhc2UgRWJ0VUltYWdlQ3Vi
ZToKKysgICAgICAgICAgICByZXR1cm4gInRleHR1cmVjdWJlPHVpbnQ+IjsKKysgICAgICAgIGNh
c2UgRWJ0SW1hZ2VDdWJlQXJyYXk6CisrICAgICAgICAgICAgaWYgKHQtPmlzVW5zaXplZEFycmF5
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0
ZXh0dXJlY3ViZT4iOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrICAgICAg
ICAgICAgeworKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisrICAg
ICAgICAgICAgfQorKyAgICAgICAgY2FzZSBFYnRJSW1hZ2VDdWJlQXJyYXk6CisrICAgICAgICAg
ICAgaWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlY3ViZTxpbnQ+PiI7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJl
dHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKysgICAgICAgICAgICB9CisrICAgICAgICBjYXNlIEVi
dFVJbWFnZUN1YmVBcnJheToKKysgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXlfcmVmPHRleHR1
cmVjdWJlPHVpbnQ+PiI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAg
ICAgICAgICB7CisrICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKysg
ICAgICAgICAgICB9CisrICAgICAgICBjYXNlIEVidEF0b21pY0NvdW50ZXI6CisrICAgICAgICAg
ICAgcmV0dXJuICJhdG9taWNfdWludCI7CisrICAgICAgICBjYXNlIEVidFNhbXBsZXJWaWRlb1dF
QkdMOgorKyAgICAgICAgICAgIHJldHVybiAiJHNhbXBsZXJWaWRlb1dFQkdMIjsKKysgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICByZXR1
cm4gInVua25vd24gdHlwZSI7CisrICAgIH0KKyt9CisrCisrY29uc3QgY2hhciAqZ2V0QnVpbHRJ
bk1ldGFsVHlwZU5hbWVTdHJpbmcoY29uc3QgVFR5cGUgKnQpCisreworKyAgICBpZiAodC0+aXNN
YXRyaXgoKSkKKysgICAgeworKyAgICAgICAgc3dpdGNoICh0LT5nZXRDb2xzKCkpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHQtPmdl
dFJvd3MoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAy
OgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQyIjsKKysgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0
MngzIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gImZsb2F0Mng0IjsKKysgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IGNhc2UgMzoKKysgICAgICAgICAgICAgICAgc3dpdGNoICh0LT5nZXRSb3dzKCkpCisrICAgICAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gImZsb2F0M3gyIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0MyI7CisrICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9h
dDN4NCI7CisrICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAg
ICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorKyAgICAgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJmbG9hdDR4MiI7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJmbG9hdDR4MyI7CisrICAgICAgICAgICAgICAgICAgICBjYXNl
IDQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDQiOworKyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgICB9Cisr
ICAgIH0KKysgICAgaWYgKHQtPmlzVmVjdG9yKCkpCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAo
dC0+Z2V0QmFzaWNUeXBlKCkpCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBFYnRGbG9h
dDoKKysgICAgICAgICAgICAgICAgc3dpdGNoICh0LT5nZXROb21pbmFsU2l6ZSgpKQorKyAgICAg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJmbG9hdDIiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQzIjsKKysgICAgICAgICAg
ICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0
NCI7CisrICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIEVidEludDoKKysgICAg
ICAgICAgICAgICAgc3dpdGNoICh0LT5nZXROb21pbmFsU2l6ZSgpKQorKyAgICAgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJpbnQyIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImludDMiOworKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50NCI7CisrICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgICAg
ICAgICAgIH0KKysgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisrICAgICAgICAgICAgICAgIHN3
aXRjaCAodC0+Z2V0Tm9taW5hbFNpemUoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiYm9v
bDIiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiYm9vbDMiOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiYm9vbDQiOworKyAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHQtPmdl
dE5vbWluYWxTaXplKCkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAg
IGNhc2UgMjoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInVpbnQyIjsKKysgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
InVpbnQzIjsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gInVpbnQ0IjsKKysgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisr
ICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
IGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisrICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworKyAgICAgICAgfQorKyAgICB9CisrICAgIEFTU0VSVCh0LT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpOworKyAgICBBU1NFUlQodC0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0SW50ZXJmYWNlQmxvY2spOworKyAgICByZXR1cm4gZ2V0QmFzaWNNZXRhbFN0cmlu
Zyh0KTsKKyt9CisrCisrSW1tdXRhYmxlU3RyaW5nIEdldE1ldGFsVHlwZU5hbWUoY29uc3QgVFR5
cGUgJnR5cGUsIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLCBOYW1lTWFwICpuYW1lTWFw
KQorK3sKKysgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorKyAgICAg
ICAgcmV0dXJuIEhhc2hOYW1lKHR5cGUuZ2V0U3RydWN0KCksIGhhc2hGdW5jdGlvbiwgbmFtZU1h
cCk7CisrICAgIGVsc2UKKysgICAgICAgIHJldHVybiBJbW11dGFibGVTdHJpbmcoZ2V0QnVpbHRJ
bk1ldGFsVHlwZU5hbWVTdHJpbmcoJnR5cGUpKTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNo
CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRp
bHMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmgKK25l
dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jZTNjZTNjCistLS0gL2Rldi9udWxs
CisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5oCitA
QCAtMCwwICsxLDMxIEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrI2lmbmRlZiBUUkFOU0xBVE9SX01F
VEFMX1VUSUxTX0hfCisrI2RlZmluZSBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisrCisrI2lu
Y2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisrI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oIgorKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0hhc2hOYW1lcy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJs
ZVN0cmluZy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFVuaXF1ZUlk
LmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKKytuYW1lc3BhY2Ug
c2gKKyt7CisrCisrY29uc3QgY2hhciAqZ2V0QmFzaWNNZXRhbFN0cmluZyhjb25zdCBUVHlwZSAq
dCk7CisrCisrY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVTdHJpbmcoY29uc3Qg
VFR5cGUgKnQpOworKworK0ltbXV0YWJsZVN0cmluZyBHZXRNZXRhbFR5cGVOYW1lKGNvbnN0IFRU
eXBlICZ0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0
aW9uNjQgaGFzaEZ1bmN0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5h
bWVNYXAgKm5hbWVNYXApOworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8g
VFJBTlNMQVRPUl9NRVRBTF9VVElMU19IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JWdWxrYW4uY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvclZ1bGthbi5jcHAKK2luZGV4IDIwMWNiYzkuLmM1ZWM2N2QgMTAwNjQ0CistLS0gYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yVnVsa2FuLmNwcAorKysrIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKK0BAIC0xNjMsNiArMTYzLDgg
QEAgY2xhc3MgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVyc2VyCisgY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRmxpcHBlZFBvaW50Q29vcmRO
YW1lICAgID0gSW1tdXRhYmxlU3RyaW5nKCJmbGlwcGVkUG9pbnRDb29yZCIpOworIGNvbnN0ZXhw
ciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRGcmFnQ29vcmROYW1lICAgICA9IEltbXV0YWJsZVN0
cmluZygiZmxpcHBlZEZyYWdDb29yZCIpOworIGNvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0Vt
dWxhdGVkRGVwdGhSYW5nZVBhcmFtcyA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVEZXB0aFJhbmdl
UGFyYW1zIik7CisrY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrVW5pZm9ybXNCbG9ja05hbWUg
ICAgICAgID0gSW1tdXRhYmxlU3RyaW5nKCJBTkdMRVVuaWZvcm1CbG9jayIpOworK2NvbnN0ZXhw
ciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zVmFyTmFtZSAgICAgICAgICA9IEltbXV0YWJsZVN0
cmluZygiQU5HTEVVbmlmb3JtcyIpOworIAorIGNvbnN0ZXhwciBnbDo6U2hhZGVyTWFwPGNvbnN0
IGNoYXIgKj4ga0RlZmF1bHRVbmlmb3JtTmFtZXMgPSB7CisgICAgIHtnbDo6U2hhZGVyVHlwZTo6
VmVydGV4LCB2azo6a0RlZmF1bHRVbmlmb3Jtc05hbWVWU30sCitAQCAtNDUwLDkgKzQ1Miw5IEBA
IGNvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyKFRJbnRl
cm1CbG9jayAqcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZp
ZWxkcy5lbmQoKSk7CisgCisgICAgIC8vIERlZmluZSBhIGRyaXZlciB1bmlmb3JtIGJsb2NrICJB
TkdMRVVuaWZvcm1CbG9jayIgd2l0aCBpbnN0YW5jZSBuYW1lICJBTkdMRVVuaWZvcm1zIi4KKy0g
ICAgcmV0dXJuIERlY2xhcmVJbnRlcmZhY2VCbG9jaygKKy0gICAgICAgIHJvb3QsIHN5bWJvbFRh
YmxlLCBkcml2ZXJGaWVsZExpc3QsIEV2cVVuaWZvcm0sIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0
ZSgpLCAwLAorLSAgICAgICAgSW1tdXRhYmxlU3RyaW5nKHZrOjprRHJpdmVyVW5pZm9ybXNCbG9j
a05hbWUpLCBJbW11dGFibGVTdHJpbmcodms6OmtEcml2ZXJVbmlmb3Jtc1Zhck5hbWUpKTsKKysg
ICAgcmV0dXJuIERlY2xhcmVJbnRlcmZhY2VCbG9jayhyb290LCBzeW1ib2xUYWJsZSwgZHJpdmVy
RmllbGRMaXN0LCBFdnFVbmlmb3JtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLCBrVW5pZm9ybXNCbG9ja05hbWUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga1VuaWZvcm1zVmFyTmFtZSk7CisgfQorIAor
IGNvbnN0IFRWYXJpYWJsZSAqQWRkQ29tcHV0ZURyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVy
bUJsb2NrICpyb290LCBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQorZGlmZiAtLWdpdCBhL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmggYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
eXBlcy5oCitpbmRleCBhM2UwMzk5Li44ZjZmYzQ2IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHlwZXMuaAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMu
aAorQEAgLTIzMiw2ICsyMzIsNyBAQCBjbGFzcyBUVHlwZQorIAorICAgICBib29sIGlzVmVjdG9y
KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsg
fQorICAgICBib29sIGlzVmVjdG9yQXJyYXkoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmIGlzQXJyYXkoKTsgfQorKyAgICBib29sIGlzUmFu
azAoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA9PSAxICYmIHNlY29uZGFyeVNpemUgPT0g
MTsgfQorICAgICBib29sIGlzU2NhbGFyKCkgY29uc3QKKyAgICAgeworICAgICAgICAgcmV0dXJu
IHByaW1hcnlTaXplID09IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmICFtU3RydWN0dXJlICYm
ICFpc0FycmF5KCk7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRh
dGVBU1QuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVBU1QuY3BwCitpbmRl
eCA3NmE4YmMyLi5iYTRkNmYzIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFsaWRhdGVBU1QuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFT
VC5jcHAKK0BAIC03NiwxMiArNzYsNyBAQCBWYWxpZGF0ZUFTVDo6VmFsaWRhdGVBU1QoVEludGVy
bU5vZGUgKnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyAqZGlh
Z25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhbGlkYXRlQVNUT3B0
aW9ucyAmb3B0aW9ucykKKyAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0cnVl
LCBudWxscHRyKSwgbU9wdGlvbnMob3B0aW9ucyksIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykK
Ky17CistICAgIGlmIChtT3B0aW9ucy52YWxpZGF0ZVNpbmdsZVBhcmVudCkKKy0gICAgeworLSAg
ICAgICAgbVBhcmVudFtyb290XSA9IG51bGxwdHI7CistICAgIH0KKy19Cisre30KKyAKKyB2b2lk
IFZhbGlkYXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpub2RlKQor
IHsKK0BAIC05MSwxMSArODYsMTIgQEAgdm9pZCBWYWxpZGF0ZUFTVDo6dmlzaXROb2RlKFZpc2l0
IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2hpbGRDb3VudDsgKytpKQorICAgICAgICAgeworICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICpjaGlsZCAgID0gbm9kZS0+Z2V0Q2hpbGROb2RlKGkpOworLSAgICAgICAgICAgIGlmIChtUGFy
ZW50LmZpbmQoY2hpbGQpICE9IG1QYXJlbnQuZW5kKCkpCisrICAgICAgICAgICAgVEludGVybU5v
ZGUgKiZwYXJlbnQgPSBtUGFyZW50W2NoaWxkXTsKKysgICAgICAgICAgICBpZiAocGFyZW50KQor
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgdmlzaXRlZCB0
d2ljZSBidXQgdGhyb3VnaCB0aGUgc2FtZSBwYXJlbnQsIHRoZSBwcm9ibGVtIGlzIGluIG9uZSBv
ZgorICAgICAgICAgICAgICAgICAvLyB0aGUgYW5jZXN0b3JzLgorLSAgICAgICAgICAgICAgICBp
ZiAobVBhcmVudFtjaGlsZF0gIT0gbm9kZSkKKysgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAh
PSBub2RlKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBtRGlhZ25v
c3RpY3MtPmVycm9yKG5vZGUtPmdldExpbmUoKSwgIkZvdW5kIGNoaWxkIHdpdGggdHdvIHBhcmVu
dHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHZhbGlkYXRl
U2luZ2xlUGFyZW50PiIpOworQEAgLTEwMywxNyArOTksMTcgQEAgdm9pZCBWYWxpZGF0ZUFTVDo6
dmlzaXROb2RlKFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSkKKyAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICBtUGFyZW50W2NoaWxkXSA9IG5v
ZGU7CisrICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsKKyAgICAgICAgIH0KKyAgICAgfQorIH0K
KyAKKy12b2lkIFZhbGlkYXRlQVNUOjpleHBlY3ROb25OdWxsQ2hpbGRyZW4oVmlzaXQgdmlzaXQs
IFRJbnRlcm1Ob2RlICpub2RlLCBzaXplX3QgbGVhc3RfY291bnQpCisrdm9pZCBWYWxpZGF0ZUFT
VDo6ZXhwZWN0Tm9uTnVsbENoaWxkcmVuKFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSwg
c2l6ZV90IGxlYXN0Q291bnQpCisgeworICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQgJiYgbU9w
dGlvbnMudmFsaWRhdGVOdWxsTm9kZXMpCisgICAgIHsKKyAgICAgICAgIHNpemVfdCBjaGlsZENv
dW50ID0gbm9kZS0+Z2V0Q2hpbGRDb3VudCgpOworLSAgICAgICAgaWYgKGNoaWxkQ291bnQgPCBs
ZWFzdF9jb3VudCkKKysgICAgICAgIGlmIChjaGlsZENvdW50IDwgbGVhc3RDb3VudCkKKyAgICAg
ICAgIHsKKyAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPmVycm9yKG5vZGUtPmdldExpbmUoKSwg
IlRvbyBmZXcgY2hpbGRyZW4iLCAiPHZhbGlkYXRlTnVsbE5vZGVzPiIpOworICAgICAgICAgICAg
IG1OdWxsTm9kZXNGYWlsZWQgPSB0cnVlOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4uY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZ190YWJfYXV0b2dlbi5jcHAKK2luZGV4IDEzMGI5OGEuLjMzYjgzZGIgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmNwcAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWJfYXV0b2dlbi5jcHAKK0BAIC0x
LDUgKzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjMuMi4g
ICovCisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxl
IGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJT
RCBsaWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2Ug
cGFyc2VycyBpbiBDCisgCisgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAt
MjAxNSwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RpZmYgLS1naXQgYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmggYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRvZ2VuLmgKK2luZGV4IDUzMDYwMzIuLjAyNTAz
MDAgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYl9hdXRv
Z2VuLmgKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiX2F1dG9nZW4u
aAorQEAgLTEsNSArMSw3IEBACisgLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29u
IDMuMy4yLiAgKi8KKyAKKysvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3Vi
dCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgQlNEIGxpY2Vuc2UuICovCisrCisgLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxp
a2UgcGFyc2VycyBpbiBDCisgCisgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAxNSwgMjAxOC0yMDE5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKK2RpZmYgLS1naXQg
YS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVy
cy5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRp
YWxpemVycy5jcHAKK2luZGV4IGRmYTIzYWEuLmJiYzhkY2QgMTAwNjQ0CistLS0gYS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6
ZXJzLmNwcAorQEAgLTUzLDcgKzUzLDggQEAgdm9pZCBHZXREZWZlcnJlZEluaXRpYWxpemVycyhU
SW50ZXJtRGVjbGFyYXRpb24gKmRlY2xhcmF0aW9uLAorICAgICAgICAgQVNTRVJUKHN5bWJvbE5v
ZGUpOworICAgICAgICAgVEludGVybVR5cGVkICpleHByZXNzaW9uID0gaW5pdC0+Z2V0UmlnaHQo
KTsKKyAKKy0gICAgICAgIGlmIChleHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25z
dCB8fCAhZXhwcmVzc2lvbi0+aGFzQ29uc3RhbnRWYWx1ZSgpKQorKyAgICAgICAgaWYgKGV4cHJl
c3Npb24tPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8ICFleHByZXNzaW9uLT5oYXNDb25z
dGFudFZhbHVlKCkgfHwKKysgICAgICAgICAgICBzeW1ib2xOb2RlLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFHbG9iYWwpCisgICAgICAgICB7CisgICAgICAgICAgICAgLy8gRm9yIHZhcmlhYmxlcyB3
aGljaCBhcmUgbm90IGNvbnN0YW50LCBkZWZlciB0aGVpciByZWFsIGluaXRpYWxpemF0aW9uIHVu
dGlsCisgICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgaW5pdGlhbGl6ZSB1bmlmb3Jtcy4KK2RpZmYg
LS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVuZUVtcHR5Q2FzZXMu
Y3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVFbXB0eUNhc2VzLmNw
cAoraW5kZXggMjg5ZGUyMS4uMmVlODIzOSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAKKysrKyBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAKK0BAIC0xNyw3ICsxNyw3IEBA
IG5hbWVzcGFjZSBzaAorIG5hbWVzcGFjZQorIHsKKyAKKy1ib29sIEFyZUVtcHR5QmxvY2tzKFRJ
bnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7CisrYm9vbCBBcmVFbXB0eUJsb2Nrcyhjb25zdCBU
SW50ZXJtU2VxdWVuY2UgKnN0YXRlbWVudHMpOworIAorIGJvb2wgSXNFbXB0eUJsb2NrKFRJbnRl
cm1Ob2RlICpub2RlKQorIHsKK0BAIC0zNyw3ICszNyw3IEBAIGJvb2wgSXNFbXB0eUJsb2NrKFRJ
bnRlcm1Ob2RlICpub2RlKQorIAorIC8vIFJldHVybiB0cnVlIGlmIGFsbCBzdGF0ZW1lbnRzIGlu
ICJzdGF0ZW1lbnRzIiBjb25zaXN0IG9ubHkgb2YgZW1wdHkgYmxvY2tzIGFuZCBuby1vcCBzdGF0
ZW1lbnRzLgorIC8vIFJldHVybnMgdHJ1ZSBhbHNvIGlmIHRoZXJlIGFyZSBubyBzdGF0ZW1lbnRz
LgorLWJvb2wgQXJlRW1wdHlCbG9ja3MoVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorK2Jv
b2wgQXJlRW1wdHlCbG9ja3MoY29uc3QgVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorIHsK
KyAgICAgZm9yIChzaXplX3QgaSA9IDB1OyBpIDwgc3RhdGVtZW50cy0+c2l6ZSgpOyArK2kpCisg
ICAgIHsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1v
dmVTd2l0Y2hGYWxsVGhyb3VnaC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29w
cy9SZW1vdmVTd2l0Y2hGYWxsVGhyb3VnaC5jcHAKK2luZGV4IDQ1MDBhZWEuLmRkOGRkNTQgMTAw
NjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hG
YWxsVGhyb3VnaC5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1Jl
bW92ZVN3aXRjaEZhbGxUaHJvdWdoLmNwcAorQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUmVtb3Zl
U3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorICAg
ICBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUpIG92ZXJyaWRlOworICAg
ICBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2RlKSBvdmVycmlkZTsK
KyAKKy0gICAgdm9pZCBvdXRwdXRTZXF1ZW5jZShUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlLCBz
aXplX3Qgc3RhcnRJbmRleCk7CisrICAgIHZvaWQgb3V0cHV0U2VxdWVuY2UoY29uc3QgVEludGVy
bVNlcXVlbmNlICpzZXF1ZW5jZSwgc2l6ZV90IHN0YXJ0SW5kZXgpOworICAgICB2b2lkIGhhbmRs
ZVByZXZpb3VzQ2FzZSgpOworIAorICAgICBUSW50ZXJtQmxvY2sgKm1TdGF0ZW1lbnRMaXN0Owor
QEAgLTE1MywxMSArMTUzLDEzIEBAIGJvb2wgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJz
ZXI6OnZpc2l0U3dpdGNoKFZpc2l0LCBUSW50ZXJtU3dpdGNoICpub2RlKQorICAgICByZXR1cm4g
ZmFsc2U7CisgfQorIAorLXZvaWQgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6Om91
dHB1dFNlcXVlbmNlKFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFydEluZGV4
KQorK3ZvaWQgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6Om91dHB1dFNlcXVlbmNl
KGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0YXJ0SW5kZXgpCisgewor
KyAgICBhdXRvICZvdXRTZXEgPSAqbVN0YXRlbWVudExpc3RPdXQtPmdldFNlcXVlbmNlKCk7Cisg
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgc2VxdWVuY2UtPnNpemUoKTsgKytp
KQorICAgICB7CistICAgICAgICBtU3RhdGVtZW50TGlzdE91dC0+Z2V0U2VxdWVuY2UoKS0+cHVz
aF9iYWNrKHNlcXVlbmNlLT5hdChpKSk7CisrICAgICAgICBvdXRTZXEucHVzaF9iYWNrKHNlcXVl
bmNlLT5hdChpKSk7CisgICAgIH0KKyB9CisgCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxpZnlMb29wQ29uZGl0aW9ucy5jcHAgYi9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmNwcAoraW5kZXgg
NzQxNDU0MC4uMGMyYWE4ZiAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmNwcAorQEAgLTIxLDEwICsy
MSwxNyBAQCBuYW1lc3BhY2Ugc2gKKyBuYW1lc3BhY2UKKyB7CisgCisrc3RydWN0IExvb3BJbmZv
CisreworKyAgICBjb25zdCBUVmFyaWFibGUgKmNvbmRpdGlvblZhcmlhYmxlID0gbnVsbHB0cjsK
KysgICAgVEludGVybVR5cGVkICpjb25kaXRpb24gICAgICAgICAgICA9IG51bGxwdHI7CisrICAg
IFRJbnRlcm1UeXBlZCAqZXhwcmVzc2lvbiAgICAgICAgICAgPSBudWxscHRyOworK307CisrCisg
Y2xhc3MgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciA6IHB1YmxpYyBUTFZhbHVlVHJh
Y2tpbmdUcmF2ZXJzZXIKKyB7CisgICBwdWJsaWM6CistICAgIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnNUcmF2ZXJzZXIodW5zaWduZWQgaW50IGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzaywKKysgICAg
U2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcihjb25zdCBJbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXIgKmNvbmRpdGlvbnNUb1NpbXBsaWZ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpOworIAorICAgICB2b2lkIHRyYXZl
cnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkgb3ZlcnJpZGU7CitAQCAtMzQsNiArNDEsNyBAQCBj
bGFzcyBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFj
a2luZ1RyYXZlcnNlcgorICAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50
ZXJtQWdncmVnYXRlICpub2RlKSBvdmVycmlkZTsKKyAgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICpub2RlKSBvdmVycmlkZTsKKyAgICAgYm9vbCB2aXNp
dERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJy
aWRlOworKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpu
b2RlKSBvdmVycmlkZTsKKyAKKyAgICAgYm9vbCBmb3VuZExvb3BUb0NoYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIG1Gb3VuZExvb3BUb0NoYW5nZTsgfQorIAorQEAgLTQyLDE2ICs1MCwxOSBAQCBjbGFz
cyBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2lu
Z1RyYXZlcnNlcgorICAgICAvLyBmb3VuZC4KKyAgICAgYm9vbCBtRm91bmRMb29wVG9DaGFuZ2U7
CisgICAgIGJvb2wgbUluc2lkZUxvb3BJbml0Q29uZGl0aW9uT3JFeHByZXNzaW9uOworLSAgICBJ
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5OworKyAgICBjb25z
dCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgKm1Db25kaXRpb25zVG9TaW1wbGlmeTsKKysKKysg
IHByaXZhdGU6CisrICAgIExvb3BJbmZvIG1Mb29wOworIH07CisgCisgU2ltcGxpZnlMb29wQ29u
ZGl0aW9uc1RyYXZlcnNlcjo6U2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcigKKy0gICAg
dW5zaWduZWQgaW50IGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzaywKKysgICAgY29uc3QgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25zVG9TaW1wbGlmeSwKKyAgICAgVFN5bWJvbFRh
YmxlICpzeW1ib2xUYWJsZSkKKyAgICAgOiBUTFZhbHVlVHJhY2tpbmdUcmF2ZXJzZXIodHJ1ZSwg
ZmFsc2UsIGZhbHNlLCBzeW1ib2xUYWJsZSksCisgICAgICAgbUZvdW5kTG9vcFRvQ2hhbmdlKGZh
bHNlKSwKKyAgICAgICBtSW5zaWRlTG9vcEluaXRDb25kaXRpb25PckV4cHJlc3Npb24oZmFsc2Up
LAorLSAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeShjb25kaXRpb25zVG9TaW1wbGlmeU1hc2sp
CisrICAgICAgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5KGNvbmRpdGlvbnNUb1NpbXBsaWZ5KQorIHt9
CisgCisgLy8gSWYgd2UncmUgaW5zaWRlIGEgbG9vcCBpbml0aWFsaXphdGlvbiwgY29uZGl0aW9u
LCBvciBleHByZXNzaW9uLCB3ZSBjaGVjayBmb3IgZXhwcmVzc2lvbnMgdGhhdAorQEAgLTY4LDcg
Kzc5LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdFVuYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkgKm5vZGUKKyAgICAgaWYgKG1Gb3VuZExvb3BUb0No
YW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFu
Z2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1Rv
U2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkp
OworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNo
KG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKKyB9CisgCitAQCAtODAs
NyArOTIsOSBAQCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0Qmlu
YXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpubworICAgICBpZiAobUZvdW5kTG9vcFRv
Q2hhbmdlKQorICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxyZWFkeSBkZWNpZGVkIHRvIGNo
YW5nZSB0aGlzIGxvb3AuCisgCistICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25z
VG9TaW1wbGlmeS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCksIGlzTFZhbHVlUmVxdWlyZWRI
ZXJlKCkpOworKyAgICBBU1NFUlQobUNvbmRpdGlvbnNUb1NpbXBsaWZ5KTsKKysgICAgbUZvdW5k
TG9vcFRvQ2hhbmdlID0KKysgICAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9k
ZSwgZ2V0UGFyZW50Tm9kZSgpLCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSgpKTsKKyAgICAgcmV0dXJu
ICFtRm91bmRMb29wVG9DaGFuZ2U7CisgfQorIAorQEAgLTkyLDcgKzEwNiw4IEBAIGJvb2wgU2lt
cGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQs
IFRJbnRlcm1BZ2dyZWdhCisgICAgIGlmIChtRm91bmRMb29wVG9DaGFuZ2UpCisgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KKyAK
Ky0gICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5Lm1hdGNoKG5v
ZGUsIGdldFBhcmVudE5vZGUoKSk7CisrICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkp
OworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNo
KG5vZGUsIGdldFBhcmVudE5vZGUoKSk7CisgICAgIHJldHVybiAhbUZvdW5kTG9vcFRvQ2hhbmdl
OworIH0KKyAKK0BAIC0xMDQsNyArMTE5LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25z
VHJhdmVyc2VyOjp2aXNpdFRlcm5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICoKKyAg
ICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFs
cmVhZHkgZGVjaWRlZCB0byBjaGFuZ2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRMb29wVG9D
aGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFTU0VSVCht
Q29uZGl0aW9uc1RvU2ltcGxpZnkpOworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0
aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0No
YW5nZTsKKyB9CisgCitAQCAtMTE2LDEwICsxMzIsMzUgQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25k
aXRpb25zVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtRGVj
bGEKKyAgICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkKKyAgICAgICAgIHJldHVybiBmYWxzZTsg
IC8vIEFscmVhZHkgZGVjaWRlZCB0byBjaGFuZ2UgdGhpcyBsb29wLgorIAorLSAgICBtRm91bmRM
b29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnkubWF0Y2gobm9kZSk7CisrICAgIEFT
U0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworKyAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBt
Q29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOworICAgICByZXR1cm4gIW1Gb3VuZExv
b3BUb0NoYW5nZTsKKyB9CisgCisrYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2Vy
Ojp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5jaCAqbm9kZSkKKyt7CisrICAg
IGlmIChub2RlLT5nZXRGbG93T3AoKSA9PSBFT3BDb250aW51ZSAmJiAobUxvb3AuY29uZGl0aW9u
IHx8IG1Mb29wLmV4cHJlc3Npb24pKQorKyAgICB7CisrICAgICAgICBUSW50ZXJtQmxvY2sgKnBh
cmVudCA9IGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpOworKyAgICAgICAgQVNTRVJUKHBh
cmVudCk7CisrICAgICAgICBUSW50ZXJtU2VxdWVuY2Ugc2VxOworKyAgICAgICAgaWYgKG1Mb29w
LmV4cHJlc3Npb24pCisrICAgICAgICB7CisrICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhtTG9v
cC5leHByZXNzaW9uLT5kZWVwQ29weSgpKTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChtTG9v
cC5jb25kaXRpb24pCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKG1Mb29wLmNvbmRp
dGlvblZhcmlhYmxlKTsKKysgICAgICAgICAgICBzZXEucHVzaF9iYWNrKAorKyAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wQXNzaWdubWVudE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1M
b29wLmNvbmRpdGlvbi0+ZGVlcENvcHkoKSkpOworKyAgICAgICAgfQorKyAgICAgICAgc2VxLnB1
c2hfYmFjayhub2RlKTsKKysgICAgICAgIG1NdWx0aVJlcGxhY2VtZW50cy5wdXNoX2JhY2soTm9k
ZVJlcGxhY2VXaXRoTXVsdGlwbGVFbnRyeShwYXJlbnQsIG5vZGUsIHN0ZDo6bW92ZShzZXEpKSk7
CisrICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworIHZvaWQgU2ltcGxpZnlMb29w
Q29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorIHsK
KyAgICAgLy8gTWFyayB0aGF0IHdlJ3JlIGluc2lkZSBhIGxvb3AgY29uZGl0aW9uIG9yIGV4cHJl
c3Npb24sIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGxvb3AgbmVlZHMgdG8gYmUKK0BAIC0xMjgsNyAr
MTY5LDcgQEAgdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp0cmF2ZXJzZUxv
b3AoVEludGVybUxvb3AgKm5vZGUpCisgICAgIFNjb3BlZE5vZGVJblRyYXZlcnNhbFBhdGggYWRk
VG9QYXRoKHRoaXMsIG5vZGUpOworIAorICAgICBtSW5zaWRlTG9vcEluaXRDb25kaXRpb25PckV4
cHJlc3Npb24gPSB0cnVlOworLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgICAgICAgICAgICAgICAg
ICAgPSBmYWxzZTsKKysgICAgbUZvdW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0g
IW1Db25kaXRpb25zVG9TaW1wbGlmeTsKKyAKKyAgICAgaWYgKCFtRm91bmRMb29wVG9DaGFuZ2Ug
JiYgbm9kZS0+Z2V0SW5pdCgpKQorICAgICB7CitAQCAtMTQ3LDIyICsxODgsNTQgQEAgdm9pZCBT
aW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpCisgCisgICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbiA9IGZh
bHNlOworIAorKyAgICBjb25zdCBMb29wSW5mbyBwcmV2TG9vcCA9IG1Mb29wOworKworICAgICBp
ZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQorICAgICB7CisgICAgICAgICBjb25zdCBUVHlwZSAqYm9v
bFR5cGUgICA9IFN0YXRpY1R5cGU6OkdldDxFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cVRlbXBv
cmFyeSwgMSwgMT4oKTsKKy0gICAgICAgIFRWYXJpYWJsZSAqY29uZGl0aW9uVmFyaWFibGUgPSBD
cmVhdGVUZW1wVmFyaWFibGUobVN5bWJvbFRhYmxlLCBib29sVHlwZSk7CisrICAgICAgICBtTG9v
cC5jb25kaXRpb25WYXJpYWJsZSA9IENyZWF0ZVRlbXBWYXJpYWJsZShtU3ltYm9sVGFibGUsIGJv
b2xUeXBlKTsKKysgICAgICAgIG1Mb29wLmNvbmRpdGlvbiAgICAgICAgID0gbm9kZS0+Z2V0Q29u
ZGl0aW9uKCk7CisrICAgICAgICBtTG9vcC5leHByZXNzaW9uICAgICAgICA9IG5vZGUtPmdldEV4
cHJlc3Npb24oKTsKKyAKKyAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGxvb3AgY29uZGl0aW9uIHdp
dGggYSBib29sZWFuIHZhcmlhYmxlIHRoYXQncyB1cGRhdGVkIG9uIGVhY2ggaXRlcmF0aW9uLgor
ICAgICAgICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAg
aWYgKGxvb3BUeXBlID09IEVMb29wV2hpbGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNT
RVJUKCFtTG9vcC5leHByZXNzaW9uKTsKKysKKysgICAgICAgICAgICBpZiAobUxvb3AuY29uZGl0
aW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg
IC8vIE1hc2sgY29udGludWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisr
ICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7CisrICAgICAgICAgICAg
fQorKyAgICAgICAgICAgIGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVu
aW9uKCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06Cisr
ICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorKyAgICAgICAgICAg
ICAgICAvLyBpbnRvCisrICAgICAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IGV4cHI7CisrICAg
ICAgICAgICAgICAgIC8vICAgd2hpbGUgKHMwKSB7IGJvZHk7IH0KKysgICAgICAgICAgICAgICAg
VEludGVybURlY2xhcmF0aW9uICp0ZW1wSW5pdERlY2xhcmF0aW9uID0KKysgICAgICAgICAgICAg
ICAgICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZhcmlh
YmxlLCBtTG9vcC5jb25kaXRpb24pOworKyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJ
blBhcmVudEJsb2NrKHRlbXBJbml0RGVjbGFyYXRpb24pOworKworKyAgICAgICAgICAgICAgICBu
b2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFy
aWFibGUpKTsKKysKKysgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQg
Y29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKysgICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0
aW9uID0gbnVsbHB0cjsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAg
ICAvLyAgIHdoaWxlIChleHByKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAgLy8gaW50bwor
ICAgICAgICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAgICAv
LyAgIHdoaWxlIChzMCkgeyB7IGJvZHk7IH0gczAgPSBleHByOyB9CisrICAgICAgICAgICAgICAg
IC8vCisrICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNm
b3JtZWQgaW50bzoKKysgICAgICAgICAgICAgICAgLy8gICBzMCA9IGV4cHI7IGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24g
PQorLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRp
b25WYXJpYWJsZSwgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCkpOworKyAgICAgICAg
ICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9u
VmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgIGluc2VydFN0YXRl
bWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisgCisgICAgICAgICAgICAg
ICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKK0BAIC0xNzEs
MjggKzI0NCw2MCBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnRyYXZl
cnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFj
aygKKy0gICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZh
cmlhYmxlLCBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOworKyAgICAgICAgICAg
ICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
LCBtTG9vcC5jb25kaXRpb24tPmRlZXBDb3B5KCkpKTsKKyAKKyAgICAgICAgICAgICAgICAgLy8g
Q2FuJ3QgdXNlIHF1ZXVlUmVwbGFjZW1lbnQgdG8gcmVwbGFjZSBvbGQgYm9keSwgc2luY2UgaXQg
bWF5IGhhdmUgYmVlbiBudWxscHRyLgorICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8g
ZG8gdGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3Rp
bGwgYmUKKyAgICAgICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQgdGhhdCB3b24ndCBjcmVh
dGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAgICBub2RlLT5zZXRCb2R5KG5ld0JvZHkp
OworLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9kZShj
b25kaXRpb25WYXJpYWJsZSkpOworKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRpb24o
Q3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKKysgICAgICAg
ICAgICB9CisgICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcERv
V2hpbGUpCisrICAgICAgICB7CisrICAgICAgICAgICAgQVNTRVJUKCFtTG9vcC5leHByZXNzaW9u
KTsKKysKKysgICAgICAgICAgICBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJvbE5vZGUo
KSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIC8vIE1hc2sgY29udGludWUgc3Rh
dGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisrICAgICAgICAgICAgICAgIG1Mb29w
LmNvbmRpdGlvbiA9IG51bGxwdHI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2Ug
aWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAgIC8vICAg
ZG8geworKyAgICAgICAgICAgICAgICAvLyAgICAgYm9keTsKKysgICAgICAgICAgICAgICAgLy8g
ICB9IHdoaWxlIChleHByKTsKKysgICAgICAgICAgICAgICAgLy8gaW50bworKyAgICAgICAgICAg
ICAgICAvLyAgIGJvb2wgczAgPSBleHByOworKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKysg
ICAgICAgICAgICAgICAgLy8gICAgIGJvZHk7CisrICAgICAgICAgICAgICAgIC8vICAgfSB3aGls
ZSAoczApOworKyAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVj
bGFyYXRpb24gPQorKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlv
bk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7CisrICAgICAg
ICAgICAgICAgIGluc2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlv
bik7CisrCisrICAgICAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3lt
Ym9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSkpOworKworKyAgICAgICAgICAgICAgICAv
LyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgorKyAg
ICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24gPSBudWxscHRyOworKyAgICAgICAgICAgIH0K
KysgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAvLyBU
cmFuc2Zvcm06CisgICAgICAgICAgICAgICAgIC8vICAgZG8geworICAgICAgICAgICAgICAgICAv
LyAgICAgYm9keTsKKyAgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHByKTsKKyAgICAg
ICAgICAgICAgICAgLy8gaW50bworLSAgICAgICAgICAgIC8vICAgYm9vbCBzMCA9IHRydWU7Cisr
ICAgICAgICAgICAgICAgIC8vICAgYm9vbCBzMDsKKyAgICAgICAgICAgICAgICAgLy8gICBkbyB7
CisgICAgICAgICAgICAgICAgIC8vICAgICB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICAgLy8g
ICAgIHMwID0gZXhwcjsKKyAgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChzMCk7CisrICAg
ICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50
bzoKKysgICAgICAgICAgICAgICAgLy8gICBzMCA9IGV4cHI7IGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorLSAgICAg
ICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJs
ZSwgQ3JlYXRlQm9vbE5vZGUodHJ1ZSkpOworKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVt
cERlY2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSk7CisgICAgICAgICAgICAg
ICAgIGluc2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7Cisg
CisgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxv
Y2soKTsKK0BAIC0yMDEsMTUgKzMwNiw2OCBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNU
cmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkp
OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVl
bmNlKCktPnB1c2hfYmFjaygKKy0gICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnRO
b2RlKGNvbmRpdGlvblZhcmlhYmxlLCBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkp
OworKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNv
bmRpdGlvblZhcmlhYmxlLCBtTG9vcC5jb25kaXRpb24pKTsKKyAKKyAgICAgICAgICAgICAgICAg
Ly8gQ2FuJ3QgdXNlIHF1ZXVlUmVwbGFjZW1lbnQgdG8gcmVwbGFjZSBvbGQgYm9keSwgc2luY2Ug
aXQgbWF5IGhhdmUgYmVlbiBudWxscHRyLgorICAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUg
dG8gZG8gdGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwg
c3RpbGwgYmUKKyAgICAgICAgICAgICAgICAgLy8gdHJhdmVyc2VkLCBidXQgdGhhdCB3b24ndCBj
cmVhdGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAgICBub2RlLT5zZXRCb2R5KG5ld0Jv
ZHkpOworLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVUZW1wU3ltYm9sTm9k
ZShjb25kaXRpb25WYXJpYWJsZSkpOworKyAgICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRp
b24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpKTsKKysgICAg
ICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9v
cEZvcikKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoIW1Mb29wLmNvbmRpdGlvbikKKysg
ICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IENyZWF0ZUJv
b2xOb2RlKHRydWUpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBUSW50ZXJtTG9v
cCAqd2hpbGVMb29wOworKyAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbG9vcFNjb3BlICAgICAg
ICAgICAgPSBuZXcgVEludGVybUJsb2NrKCk7CisrICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
ICpsb29wU2NvcGVTZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKKysKKysgICAg
ICAgICAgICAvLyBJbnNlcnQgImluaXQ7IgorKyAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0
KCkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBsb29wU2NvcGVTZXF1ZW5jZS0+
cHVzaF9iYWNrKG5vZGUtPmdldEluaXQoKSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAg
ICAgIGlmIChtTG9vcC5jb25kaXRpb24tPmdldEFzU3ltYm9sTm9kZSgpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRlIHRo
ZSBsb29wLgorKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAg
IC8vICAgZm9yIChpbml0OyBleHByOyBleHByQikgeyBib2R5OyB9CisrICAgICAgICAgICAgICAg
IC8vIGludG8KKysgICAgICAgICAgICAgICAgLy8gICB7CisrICAgICAgICAgICAgICAgIC8vICAg
ICBpbml0OworKyAgICAgICAgICAgICAgICAvLyAgICAgd2hpbGUgKGV4cHIpIHsKKysgICAgICAg
ICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisrICAgICAgICAgICAgICAgIC8vICAgICAgIGV4
cHJCOworKyAgICAgICAgICAgICAgICAvLyAgICAgfQorKyAgICAgICAgICAgICAgICAvLyAgIH0K
KysgICAgICAgICAgICAgICAgLy8KKysgICAgICAgICAgICAgICAgLy8gTG9jYWwgY2FzZSBzdGF0
ZW1lbnRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvOgorKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJC
OyBjb250aW51ZTsKKysKKysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJ7IGJvZHk7IH0iIGlu
IHRoZSB3aGlsZSBsb29wCisrICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqd2hpbGVMb29w
Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKysgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dEJvZHkoKSkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgd2hpbGVM
b29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGluIHRo
ZSB3aGlsZSBsb29wCisrICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkp
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOworKyAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoZXhwcikgeyB3
aGlsZUxvb3BCb2R5IH0iCisrICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9CisrICAgICAgICAg
ICAgICAgICAgICBuZXcgVEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0ciwgbUxvb3AuY29u
ZGl0aW9uLCBudWxscHRyLCB3aGlsZUxvb3BCb2R5KTsKKysKKysgICAgICAgICAgICAgICAgLy8g
TWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKysgICAg
ICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKKysgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgZWxzZSBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc0NvbnN0YW50VW5pb24o
KSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3AgY29u
ZGl0aW9uIGluc2lkZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgor
QEAgLTIyMSwzMSArMzc5LDU2IEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNl
cjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorICAgICAgICAgICAgICAgICAvLyAg
ICAgd2hpbGUgKHMwKSB7CisgICAgICAgICAgICAgICAgIC8vICAgICAgIHsgYm9keTsgfQorICAg
ICAgICAgICAgICAgICAvLyAgICAgICBleHByQjsKKy0gICAgICAgICAgICAvLyAgICAgICBzMCA9
IGV4cHI7CisgICAgICAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAgICAgIC8vICAg
fQorLSAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbG9vcFNjb3BlICAgICAgICAgICAgPSBuZXcg
VEludGVybUJsb2NrKCk7CistICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICpsb29wU2NvcGVT
ZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKKysgICAgICAgICAgICAgICAgLy8K
KysgICAgICAgICAgICAgICAgLy8gTG9jYWwgY2FzZSBzdGF0ZW1lbnRzIGFyZSB0cmFuc2Zvcm1l
ZCBpbnRvOgorKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJCOyBjb250aW51ZTsKKyAKKy0gICAg
ICAgICAgICAvLyBJbnNlcnQgImluaXQ7IgorLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0
KCkpCisrICAgICAgICAgICAgICAgIC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7IgorKyAgICAg
ICAgICAgICAgICBsb29wU2NvcGVTZXF1ZW5jZS0+cHVzaF9iYWNrKAorKyAgICAgICAgICAgICAg
ICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFi
bGUsIG1Mb29wLmNvbmRpdGlvbikpOworKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsgYm9k
eTsgfSIgaW4gdGhlIHdoaWxlIGxvb3AKKysgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICp3
aGlsZUxvb3BCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOworKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgICB7CistICAgICAgICAgICAgICAgIGxv
b3BTY29wZVNlcXVlbmNlLT5wdXNoX2JhY2sobm9kZS0+Z2V0SW5pdCgpKTsKKysgICAgICAgICAg
ICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5n
ZXRCb2R5KCkpOworICAgICAgICAgICAgICAgICB9CistCistICAgICAgICAgICAgLy8gSW5zZXJ0
ICJib29sIHMwID0gZXhwcjsiIGlmIGFwcGxpY2FibGUsICJib29sIHMwID0gdHJ1ZTsiIG90aGVy
d2lzZQorLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZGl0aW9uSW5pdGlhbGl6ZXIgPSBu
dWxscHRyOworLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKKysgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGluIHRoZSB3aGlsZSBsb29wCisrICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgIHsKKy0g
ICAgICAgICAgICAgICAgY29uZGl0aW9uSW5pdGlhbGl6ZXIgPSBub2RlLT5nZXRDb25kaXRpb24o
KS0+ZGVlcENvcHkoKTsKKysgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNl
cXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOworKyAgICAgICAgICAg
ICAgICB9CisrICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29w
Qm9keSB9IgorKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPSBuZXcgVEludGVybUxvb3AoRUxv
b3BXaGlsZSwgbnVsbHB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSwgbnVs
bHB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
TG9vcEJvZHkpOworKworKyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVu
dCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgorKyAgICAgICAgICAgICAgICBtTG9vcC5jb25k
aXRpb24gPSBudWxscHRyOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgeworLSAgICAgICAgICAgICAgICBjb25kaXRpb25Jbml0aWFsaXplciA9IENyZWF0
ZUJvb2xOb2RlKHRydWUpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICBsb29wU2NvcGVT
ZXF1ZW5jZS0+cHVzaF9iYWNrKAorLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xh
cmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwgY29uZGl0aW9uSW5pdGlhbGl6ZXIpKTsKKysg
ICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRlIHRoZSBsb29w
LgorKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisrICAgICAgICAgICAgICAgIC8vICAg
Zm9yIChpbml0OyBleHByOyBleHByQikgeyBib2R5OyB9CisrICAgICAgICAgICAgICAgIC8vIGlu
dG8KKysgICAgICAgICAgICAgICAgLy8gICB7CisrICAgICAgICAgICAgICAgIC8vICAgICBpbml0
OworKyAgICAgICAgICAgICAgICAvLyAgICAgYm9vbCBzMCA9IGV4cHI7CisrICAgICAgICAgICAg
ICAgIC8vICAgICB3aGlsZSAoczApIHsKKysgICAgICAgICAgICAgICAgLy8gICAgICAgeyBib2R5
OyB9CisrICAgICAgICAgICAgICAgIC8vICAgICAgIGV4cHJCOworKyAgICAgICAgICAgICAgICAv
LyAgICAgICBzMCA9IGV4cHI7CisrICAgICAgICAgICAgICAgIC8vICAgICB9CisrICAgICAgICAg
ICAgICAgIC8vICAgfQorKyAgICAgICAgICAgICAgICAvLworKyAgICAgICAgICAgICAgICAvLyBM
b2NhbCBjYXNlIHN0YXRlbWVudHMgYXJlIHRyYW5zZm9ybWVkIGludG86CisrICAgICAgICAgICAg
ICAgIC8vICAgZXhwckI7IHMwID0gZXhwcjsgY29udGludWU7CisgCisrICAgICAgICAgICAgICAg
IC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7IgorKyAgICAgICAgICAgICAgICBsb29wU2NvcGVT
ZXF1ZW5jZS0+cHVzaF9iYWNrKAorKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXRE
ZWNsYXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbikp
OworICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsgYm9keTsgfSIgaW4gdGhlIHdoaWxlIGxv
b3AKKyAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICp3aGlsZUxvb3BCb2R5ID0gbmV3IFRJ
bnRlcm1CbG9jaygpOworICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorQEAg
LTI1OCwyMyArNDQxLDIxIEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6
dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2RlKQorICAgICAgICAgICAgICAgICAgICAgd2hp
bGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEV4cHJlc3Npb24o
KSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0ICJzMCA9
IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAorLSAgICAgICAgICAgIGlmIChub2RlLT5nZXRDb25k
aXRpb24oKSkKKy0gICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHkt
PmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKKy0gICAgICAgICAgICAgICAgICAgIENyZWF0ZVRl
bXBBc3NpZ25tZW50Tm9kZShjb25kaXRpb25WYXJpYWJsZSwgbm9kZS0+Z2V0Q29uZGl0aW9uKCkt
PmRlZXBDb3B5KCkpKTsKKysgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBBc3NpZ25tZW50
Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uLT5kZWVwQ29weSgp
KSk7CisrICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hpbGVMb29wQm9k
eSB9IgorKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPSBuZXcgVEludGVybUxvb3AoRUxvb3BX
aGlsZSwgbnVsbHB0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSwgbnVsbHB0
ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlTG9v
cEJvZHkpOworICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICAvLyBDcmVhdGUgIndoaWxl
KHMwKSB7IHdoaWxlTG9vcEJvZHkgfSIKKy0gICAgICAgICAgICBUSW50ZXJtTG9vcCAqd2hpbGVM
b29wID0KKy0gICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1Mb29wKEVMb29wV2hpbGUsIG51bGxw
dHIsIENyZWF0ZVRlbXBTeW1ib2xOb2RlKGNvbmRpdGlvblZhcmlhYmxlKSwKKy0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIHdoaWxlTG9vcEJvZHkpOworICAgICAgICAg
ICAgIGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKHdoaWxlTG9vcCk7CisgICAg
ICAgICAgICAgcXVldWVSZXBsYWNlbWVudChsb29wU2NvcGUsIE9yaWdpbmFsTm9kZTo6SVNfRFJP
UFBFRCk7CisgCisgICAgICAgICAgICAgLy8gQWZ0ZXIgdGhpcyB0aGUgb2xkIGJvZHkgbm9kZSB3
aWxsIGJlIHRyYXZlcnNlZCBhbmQgbG9vcHMgaW5zaWRlIGl0IG1heSBiZQorLSAgICAgICAgICAg
IC8vIHRyYW5zZm9ybWVkLiBUaGlzIGlzIGZpbmUsIHNpbmNlIHRoZSBvbGQgYm9keSBub2RlIHdp
bGwgc3RpbGwgYmUgaW4gdGhlIEFTVCBhZnRlciB0aGUKKy0gICAgICAgICAgICAvLyB0cmFuc2Zv
cm1hdGlvbiB0aGF0J3MgcXVldWVkIGhlcmUsIGFuZCB0cmFuc2Zvcm1pbmcgbG9vcHMgaW5zaWRl
IGl0IGRvZXNuJ3QgbmVlZCB0bworLSAgICAgICAgICAgIC8vIGtub3cgdGhlIGV4YWN0IHBvc3Qt
dHJhbnNmb3JtIHBhdGggdG8gaXQuCisrICAgICAgICAgICAgLy8gdHJhbnNmb3JtZWQuIFRoaXMg
aXMgZmluZSwgc2luY2UgdGhlIG9sZCBib2R5IG5vZGUgd2lsbCBzdGlsbCBiZSBpbiB0aGUgQVNU
IGFmdGVyCisrICAgICAgICAgICAgLy8gdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQncyBxdWV1ZWQg
aGVyZSwgYW5kIHRyYW5zZm9ybWluZyBsb29wcyBpbnNpZGUgaXQgZG9lc24ndAorKyAgICAgICAg
ICAgIC8vIG5lZWQgdG8ga25vdyB0aGUgZXhhY3QgcG9zdC10cmFuc2Zvcm0gcGF0aCB0byBpdC4K
KyAgICAgICAgIH0KKyAgICAgfQorIAorQEAgLTI4MywxNiArNDY0LDI2IEBAIHZvaWQgU2ltcGxp
ZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VMb29wKFRJbnRlcm1Mb29wICpub2Rl
KQorICAgICAvLyBXZSB0cmF2ZXJzZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBldmVuIGlmIHRoZSBs
b29wIGlzIHRyYW5zZm9ybWVkLgorICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAg
bm9kZS0+Z2V0Qm9keSgpLT50cmF2ZXJzZSh0aGlzKTsKKysKKysgICAgbUxvb3AgPSBwcmV2TG9v
cDsKKyB9CisgCisgfSAgLy8gbmFtZXNwYWNlCisgCisrYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRp
b25zKFRDb21waWxlciAqY29tcGlsZXIsIFRJbnRlcm1Ob2RlICpyb290LCBUU3ltYm9sVGFibGUg
KnN5bWJvbFRhYmxlKQorK3sKKysgICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciB0
cmF2ZXJzZXIobnVsbHB0ciwgc3ltYm9sVGFibGUpOworKyAgICByb290LT50cmF2ZXJzZSgmdHJh
dmVyc2VyKTsKKysgICAgcmV0dXJuIHRyYXZlcnNlci51cGRhdGVUcmVlKGNvbXBpbGVyLCByb290
KTsKKyt9CisrCisgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGls
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpyb290LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29uZGl0aW9uc1RvU2ltcGxp
ZnlNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUgKnN5bWJv
bFRhYmxlKQorIHsKKy0gICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlciB0cmF2ZXJz
ZXIoY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLCBzeW1ib2xUYWJsZSk7CisrICAgIEludGVybU5v
ZGVQYXR0ZXJuTWF0Y2hlciBjb25kaXRpb25zVG9TaW1wbGlmeShjb25kaXRpb25zVG9TaW1wbGlm
eU1hc2spOworKyAgICBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIHRyYXZlcnNlcigm
Y29uZGl0aW9uc1RvU2ltcGxpZnksIHN5bWJvbFRhYmxlKTsKKyAgICAgcm9vdC0+dHJhdmVyc2Uo
JnRyYXZlcnNlcik7CisgICAgIHJldHVybiB0cmF2ZXJzZXIudXBkYXRlVHJlZShjb21waWxlciwg
cm9vdCk7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaAoraW5kZXggNGNkZWRlNi4uNjhiOThmOCAxMDA2
NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENv
bmRpdGlvbnMuaAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2ltcGxp
ZnlMb29wQ29uZGl0aW9ucy5oCitAQCAtMTksNiArMTksMTAgQEAgY2xhc3MgVENvbXBpbGVyOwor
IGNsYXNzIFRJbnRlcm1Ob2RlOworIGNsYXNzIFRTeW1ib2xUYWJsZTsKKyAKKytBTkdMRV9OT19E
SVNDQVJEIGJvb2wgU2ltcGxpZnlMb29wQ29uZGl0aW9ucyhUQ29tcGlsZXIgKmNvbXBpbGVyLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICpyb290LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRT
eW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpOworKworIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBTaW1w
bGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKnJvb3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvbmRp
dGlvbnNUb1NpbXBsaWZ5LAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9Bc05vZGUuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05v
ZGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFjNmRlMTgKKy0tLSAv
ZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUu
aAorQEAgLTAsMCArMSwyMTIgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisrI2RlZmluZSBDT01QSUxFUl9U
UkFOU0xBVE9SX1RSRUVVVElMX0lOVEVSTUFTTk9ERV9IXworKworKyNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUu
aCIKKysKKysjaW5jbHVkZSA8dXRpbGl0eT4KKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrbmFt
ZXNwYWNlIHByaXYKKyt7CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RydWN0IEFzTm9k
ZQorK3t9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtTm9kZT4KKyt7
CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybU5vZGUgKmV4ZWMoVEludGVybU5vZGUg
Km5vZGUpIHsgcmV0dXJuIG5vZGU7IH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFz
Tm9kZTxUSW50ZXJtVHlwZWQ+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1U
eXBlZCAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5v
ZGUgPyBub2RlLT5nZXRBc1R5cGVkKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1w
bGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybVN5bWJvbD4KKyt7CisrICAgIHN0YXRpYyBB
TkdMRV9JTkxJTkUgVEludGVybVN5bWJvbCAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAg
eworKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1N5bWJvbE5vZGUoKSA6IG51bGxw
dHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJt
Q29uc3RhbnRVbmlvbj4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUNvbnN0
YW50VW5pb24gKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBub2RlID8gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgOiBudWxscHRyOworKyAgICB9Cisr
fTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybUZ1bmN0aW9uUHJvdG90
eXBlPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5
cGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBub2Rl
ID8gbm9kZS0+Z2V0QXNGdW5jdGlvblByb3RvdHlwZU5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0K
Kyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtUHJlcHJvY2Vzc29y
RGlyZWN0aXZlPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtUHJlcHJvY2Vz
c29yRGlyZWN0aXZlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICBy
ZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzUHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkgOiBudWxscHRy
OworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybVN3
aXp6bGU+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Td2l6emxlICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUt
PmdldEFzU3dpenpsZU5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRl
IDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtQmluYXJ5PgorK3sKKysgICAgc3RhdGljIEFOR0xF
X0lOTElORSBUSW50ZXJtQmluYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpIDogbnVsbHB0cjsK
KysgICAgfQorK307CisrCisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1VbmFy
eT4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVVuYXJ5ICpleGVjKFRJbnRl
cm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFz
VW5hcnlOb2RlKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0
cnVjdCBBc05vZGU8VEludGVybVRlcm5hcnk+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5F
IFRJbnRlcm1UZXJuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzVGVybmFyeU5vZGUoKSA6IG51bGxwdHI7CisrICAg
IH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtSWZFbHNlPgor
K3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtSWZFbHNlICpleGVjKFRJbnRlcm1O
b2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzSWZF
bHNlTm9kZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307CisrCisrdGVtcGxhdGUgPD4KKytzdHJ1
Y3QgQXNOb2RlPFRJbnRlcm1Td2l0Y2g+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJ
bnRlcm1Td2l0Y2ggKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiBub2RlID8gbm9kZS0+Z2V0QXNTd2l0Y2hOb2RlKCkgOiBudWxscHRyOworKyAgICB9Cisr
fTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8VEludGVybUNhc2U+CisreworKyAg
ICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1DYXNlICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQ2FzZU5vZGUoKSA6
IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uPgorK3sKKysgICAgc3RhdGljIEFOR0xFX0lOTElORSBU
SW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7
CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkg
OiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBBc05vZGU8
VEludGVybUFnZ3JlZ2F0ZT4KKyt7CisrICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUFn
Z3JlZ2F0ZSAqZXhlYyhUSW50ZXJtTm9kZSAqbm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IG5vZGUgPyBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307Cisr
CisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1CbG9jaz4KKyt7CisrICAgIHN0
YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUJsb2NrICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQor
KyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQmxvY2soKSA6IG51bGxw
dHI7CisrICAgIH0KKyt9OworKworK3RlbXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJt
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5F
IFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqZXhlYyhUSW50ZXJtTm9kZSAqbm9k
ZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0dsb2JhbFF1YWxp
ZmllckRlY2xhcmF0aW9uTm9kZSgpIDogbnVsbHB0cjsKKysgICAgfQorK307CisrCisrdGVtcGxh
dGUgPD4KKytzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1EZWNsYXJhdGlvbj4KKyt7CisrICAgIHN0YXRp
YyBBTkdMRV9JTkxJTkUgVEludGVybURlY2xhcmF0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzRGVjbGFyYXRpb25O
b2RlKCkgOiBudWxscHRyOworKyAgICB9CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK3N0cnVjdCBB
c05vZGU8VEludGVybUxvb3A+CisreworKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1M
b29wICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbm9k
ZSA/IG5vZGUtPmdldEFzTG9vcE5vZGUoKSA6IG51bGxwdHI7CisrICAgIH0KKyt9OworKworK3Rl
bXBsYXRlIDw+Cisrc3RydWN0IEFzTm9kZTxUSW50ZXJtQnJhbmNoPgorK3sKKysgICAgc3RhdGlj
IEFOR0xFX0lOTElORSBUSW50ZXJtQnJhbmNoICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorKyAg
ICB7CisrICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQnJhbmNoTm9kZSgpIDogbnVs
bHB0cjsKKysgICAgfQorK307CisrCisrfSAgLy8gbmFtZXNwYWNlIHByaXYKKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKytBTkdMRV9JTkxJTkUgVCAqYXNOb2RlKFRJbnRlcm1Ob2RlICpub2Rl
KQorK3sKKysgICAgcmV0dXJuIHByaXY6OkFzTm9kZTxUPjo6ZXhlYyhub2RlKTsKKyt9CisrCisr
fSAgLy8gbmFtZXNwYWNlIHNoCisrCisrI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
RUVVVElMX0lOVEVSTUFTTk9ERV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3BwIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAKK2luZGV4
IGQwOGMzODYuLmFjYzc4OTIgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcAorKysrIGIvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5jcHAKK0BAIC02
NSw3ICs2NSw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpJc0R5bmFtaWNJbmRl
eGluZ09mU3dpenpsZWRWZWN0b3IoVEludGVybUJpbmFyeSAqCisgICAgIHJldHVybiBJc0R5bmFt
aWNJbmRleGluZ09mVmVjdG9yT3JNYXRyaXgobm9kZSkgJiYgbm9kZS0+Z2V0TGVmdCgpLT5nZXRB
c1N3aXp6bGVOb2RlKCk7CisgfQorIAorLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpt
YXRjaEludGVybmFsKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2Rl
KQorK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFsKFRJbnRlcm1C
aW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdAorIHsKKyAgICAgaWYg
KChtTWFzayAmIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkpICE9IDApCisgICAgIHsKK0BAIC04
Nyw3ICs4Nyw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVybmFs
KFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwCisgICAgIHJldHVybiBmYWxzZTsK
KyB9CisgCistYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFy
eSAqbm9kZSkKKytib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVVu
YXJ5ICpub2RlKSBjb25zdAorIHsKKyAgICAgaWYgKChtTWFzayAmIGtBcnJheUxlbmd0aE1ldGhv
ZCkgIT0gMCkKKyAgICAgeworQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVy
bk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFyeSAqbm9kZSkKKyAgICAgcmV0dXJuIGZhbHNlOwor
IH0KKyAKKy1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFy
eSAqbm9kZSwgVEludGVybU5vZGUgKnBhcmVudE5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVy
bk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnRO
b2RlKSBjb25zdAorIHsKKyAgICAgLy8gTC12YWx1ZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBu
ZWVkZWQgdG8gY2hlY2sgZm9yIGR5bmFtaWMgaW5kZXhpbmcgaW4gTC12YWx1ZS4KKyAgICAgLy8g
VHJhdmVyc2VycyB0aGF0IGRvbid0IHRyYWNrIGwtdmFsdWVzIGNhbiBzdGlsbCB1c2UgdGhpcyBj
bGFzcyBhbmQgbWF0Y2ggYmluYXJ5IG5vZGVzIHdpdGgKK0BAIC0xMTAsNyArMTEwLDcgQEAgYm9v
bCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJ
bnRlcm1Ob2RlICpwYXJlbnROb2QKKyAKKyBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6
bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybU5vZGUgKnBhcmVudE5vZGUsCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpIGNvbnN0
CisgeworICAgICBpZiAobWF0Y2hJbnRlcm5hbChub2RlLCBwYXJlbnROb2RlKSkKKyAgICAgewor
QEAgLTEyNiw3ICsxMjYsNyBAQCBib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2go
VEludGVybUJpbmFyeSAqbm9kZSwKKyAgICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKy1ib29sIElu
dGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSwgVElu
dGVybU5vZGUgKnBhcmVudE5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1h
dGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25z
dAorIHsKKyAgICAgaWYgKChtTWFzayAmIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkpICE9IDAp
CisgICAgIHsKK0BAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnQKKyAg
ICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKy1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6
bWF0Y2goVEludGVybVRlcm5hcnkgKm5vZGUpCisrYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKSBjb25zdAorIHsKKyAgICAgaWYgKChtTWFz
ayAmIGtVbmZvbGRlZFNob3J0Q2lyY3VpdEV4cHJlc3Npb24pICE9IDApCisgICAgIHsKK0BAIC0x
NzAsNyArMTcwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRl
cm1UZXJuYXJ5ICpub2RlKQorICAgICByZXR1cm4gZmFsc2U7CisgfQorIAorLWJvb2wgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpCisrYm9v
bCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9k
ZSkgY29uc3QKKyB7CisgICAgIGlmICgobU1hc2sgJiBrTXVsdGlEZWNsYXJhdGlvbikgIT0gMCkK
KyAgICAgeworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9J
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaAoraW5kZXggZTljNGJjZi4uNmYzZDg3MyAx
MDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2Rl
UGF0dGVybk1hdGNoZXIuaAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGls
L0ludGVybU5vZGVQYXR0ZXJuTWF0Y2hlci5oCitAQCAtMjgsNTIgKzI4LDUyIEBAIGNsYXNzIElu
dGVybU5vZGVQYXR0ZXJuTWF0Y2hlcgorICAgICBzdGF0aWMgYm9vbCBJc0R5bmFtaWNJbmRleGlu
Z09mVmVjdG9yT3JNYXRyaXgoVEludGVybUJpbmFyeSAqbm9kZSk7CisgICAgIHN0YXRpYyBib29s
IElzRHluYW1pY0luZGV4aW5nT2ZTd2l6emxlZFZlY3RvcihUSW50ZXJtQmluYXJ5ICpub2RlKTsK
KyAKKy0gICAgZW51bSBQYXR0ZXJuVHlwZQorKyAgICBlbnVtIFBhdHRlcm5UeXBlIDogdW5zaWdu
ZWQgaW50CisgICAgIHsKKyAgICAgICAgIC8vIE1hdGNoZXMgZXhwcmVzc2lvbnMgdGhhdCBhcmUg
dW5mb2xkZWQgdG8gaWYgc3RhdGVtZW50cyBieSBVbmZvbGRTaG9ydENpcmN1aXRUb0lmCistICAg
ICAgICBrVW5mb2xkZWRTaG9ydENpcmN1aXRFeHByZXNzaW9uID0gMHgwMDAxLAorKyAgICAgICAg
a1VuZm9sZGVkU2hvcnRDaXJjdWl0RXhwcmVzc2lvbiA9IDF1IDw8IDB1LAorIAorICAgICAgICAg
Ly8gTWF0Y2hlcyBleHByZXNzaW9ucyB0aGF0IHJldHVybiBhcnJheXMgd2l0aCB0aGUgZXhjZXB0
aW9uIG9mIHNpbXBsZSBzdGF0ZW1lbnRzIHdoZXJlIGEKKyAgICAgICAgIC8vIGNvbnN0cnVjdG9y
IG9yIGZ1bmN0aW9uIGNhbGwgcmVzdWx0IGlzIGFzc2lnbmVkLgorLSAgICAgICAga0V4cHJlc3Np
b25SZXR1cm5pbmdBcnJheSA9IDB4MDAwMSA8PCAxLAorKyAgICAgICAga0V4cHJlc3Npb25SZXR1
cm5pbmdBcnJheSA9IDF1IDw8IDF1LAorIAorICAgICAgICAgLy8gTWF0Y2hlcyBkeW5hbWljIGlu
ZGV4aW5nIG9mIHZlY3RvcnMgb3IgbWF0cmljZXMgaW4gbC12YWx1ZXMuCistICAgICAgICBrRHlu
YW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeEluTFZhbHVlID0gMHgwMDAxIDw8IDIsCisrICAg
ICAgICBrRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeEluTFZhbHVlID0gMXUgPDwgMnUs
CisgCisgICAgICAgICAvLyBNYXRjaGVzIGRlY2xhcmF0aW9ucyB3aXRoIG1vcmUgdGhhbiBvbmUg
ZGVjbGFyZWQgdmFyaWFibGVzLgorLSAgICAgICAga011bHRpRGVjbGFyYXRpb24gPSAweDAwMDEg
PDwgMywKKysgICAgICAgIGtNdWx0aURlY2xhcmF0aW9uID0gMXUgPDwgM3UsCisgCisgICAgICAg
ICAvLyBNYXRjaGVzIGRlY2xhcmF0aW9ucyBvZiBhcnJheXMuCistICAgICAgICBrQXJyYXlEZWNs
YXJhdGlvbiA9IDB4MDAwMSA8PCA0LAorKyAgICAgICAga0FycmF5RGVjbGFyYXRpb24gPSAxdSA8
PCA0dSwKKyAKKyAgICAgICAgIC8vIE1hdGNoZXMgZGVjbGFyYXRpb25zIG9mIHN0cnVjdHMgd2hl
cmUgdGhlIHN0cnVjdCB0eXBlIGRvZXMgbm90IGhhdmUgYSBuYW1lLgorLSAgICAgICAga05hbWVs
ZXNzU3RydWN0RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNSwKKysgICAgICAgIGtOYW1lbGVzc1N0
cnVjdERlY2xhcmF0aW9uID0gMXUgPDwgNXUsCisgCisgICAgICAgICAvLyBNYXRjaGVzIGFycmF5
IGxlbmd0aCgpIG1ldGhvZC4KKy0gICAgICAgIGtBcnJheUxlbmd0aE1ldGhvZCA9IDB4MDAwMSA8
PCA2LAorKyAgICAgICAga0FycmF5TGVuZ3RoTWV0aG9kID0gMXUgPDwgNnUsCisgCisgICAgICAg
ICAvLyBNYXRjaGVzIGEgdmVjdG9yIG9yIG1hdHJpeCBjb25zdHJ1Y3RvciB3aG9zZSBhcmd1bWVu
dHMgYXJlIHNjYWxhcml6ZWQgYnkgdGhlCisgICAgICAgICAvLyBTSF9TQ0FMQVJJWkVfVkVDX09S
X01BVF9DT05TVFJVQ1RPUl9BUkdVTUVOVFMgd29ya2Fyb3VuZC4KKy0gICAgICAgIGtTY2FsYXJp
emVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDB4MDAwMSA8PCA3CisrICAgICAgICBrU2NhbGFyaXpl
ZFZlY09yTWF0Q29uc3RydWN0b3IgPSAxdSA8PCA3dSwKKyAgICAgfTsKKyAgICAgSW50ZXJtTm9k
ZVBhdHRlcm5NYXRjaGVyKGNvbnN0IHVuc2lnbmVkIGludCBtYXNrKTsKKyAKKy0gICAgYm9vbCBt
YXRjaChUSW50ZXJtVW5hcnkgKm5vZGUpOworKyAgICBib29sIG1hdGNoKFRJbnRlcm1VbmFyeSAq
bm9kZSkgY29uc3Q7CisgCistICAgIGJvb2wgbWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwgVElu
dGVybU5vZGUgKnBhcmVudE5vZGUpOworKyAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5v
ZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdDsKKyAKKyAgICAgLy8gVXNlIHRoaXMg
dmVyc2lvbiBmb3IgY2hlY2tpbmcgYmluYXJ5IG5vZGUgbWF0Y2hlcyBpbiBjYXNlIHlvdSdyZSB1
c2luZyBmbGFnCisgICAgIC8vIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0cml4SW5MVmFs
dWUuCistICAgIGJvb2wgbWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUsIGJvb2wgaXNMVmFsdWVSZXF1aXJlZEhlcmUpOworKyAgICBib29sIG1hdGNoKFRJ
bnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlLCBib29sIGlzTFZhbHVl
UmVxdWlyZWRIZXJlKSBjb25zdDsKKyAKKy0gICAgYm9vbCBtYXRjaChUSW50ZXJtQWdncmVnYXRl
ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSk7CistICAgIGJvb2wgbWF0Y2goVEludGVy
bVRlcm5hcnkgKm5vZGUpOworLSAgICBib29sIG1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9k
ZSk7CisrICAgIGJvb2wgbWF0Y2goVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSwgVEludGVybU5vZGUg
KnBhcmVudE5vZGUpIGNvbnN0OworKyAgICBib29sIG1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2Rl
KSBjb25zdDsKKysgICAgYm9vbCBtYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIGNvbnN0
OworIAorICAgcHJpdmF0ZToKKyAgICAgY29uc3QgdW5zaWduZWQgaW50IG1NYXNrOworIAorLSAg
ICBib29sIG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUpOworKyAgICBib29sIG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwg
VEludGVybU5vZGUgKnBhcmVudE5vZGUpIGNvbnN0OworIH07CisgCisgfSAgLy8gbmFtZXNwYWNl
IHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bU5vZGVfdXRpbC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJt
Tm9kZV91dGlsLmNwcAoraW5kZXggNmFiMTNiYS4uZDNlMWZjYSAxMDA2NDQKKy0tLSBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCisrKysgYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmNwcAorQEAg
LTIyNCw2ICsyMjQsNTAgQEAgVFZhcmlhYmxlICpEZWNsYXJlVGVtcFZhcmlhYmxlKFRTeW1ib2xU
YWJsZSAqc3ltYm9sVGFibGUsCisgICAgIHJldHVybiB2YXJpYWJsZTsKKyB9CisgCisrc3RkOjpw
YWlyPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFibGUgKj4gRGVjbGFyZVN0cnVjdHVy
ZSgKKysgICAgVEludGVybUJsb2NrICpyb290LAorKyAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRh
YmxlLAorKyAgICBURmllbGRMaXN0ICpmaWVsZExpc3QsCisrICAgIFRRdWFsaWZpZXIgcXVhbGlm
aWVyLAorKyAgICBjb25zdCBUTWVtb3J5UXVhbGlmaWVyICZtZW1vcnlRdWFsaWZpZXIsCisrICAg
IHVpbnQzMl90IGFycmF5U2l6ZSwKKysgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzdHJ1Y3RU
eXBlTmFtZSwKKysgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICpzdHJ1Y3RJbnN0YW5jZU5hbWUp
CisreworKyAgICBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPQorKyAgICAgICAgbmV3IFRTdHJ1Y3R1
cmUoc3ltYm9sVGFibGUsIHN0cnVjdFR5cGVOYW1lLCBmaWVsZExpc3QsIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpOworKworKyAgICBhdXRvIG1ha2VTdHJ1Y3R1cmVUeXBlID0gWyZdKGJvb2wg
aXNTdHJ1Y3RTcGVjaWZpZXIpIHsKKysgICAgICAgIFRUeXBlICpzdHJ1Y3R1cmVUeXBlID0gbmV3
IFRUeXBlKHN0cnVjdHVyZSwgaXNTdHJ1Y3RTcGVjaWZpZXIpOworKyAgICAgICAgc3RydWN0dXJl
VHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisrICAgICAgICBzdHJ1Y3R1cmVUeXBlLT5z
ZXRNZW1vcnlRdWFsaWZpZXIobWVtb3J5UXVhbGlmaWVyKTsKKysgICAgICAgIGlmIChhcnJheVNp
emUgPiAwKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHN0cnVjdHVyZVR5cGUtPm1ha2VBcnJh
eShhcnJheVNpemUpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVR5cGU7
CisrICAgIH07CisrCisrICAgIFRJbnRlcm1TZXF1ZW5jZSBpbnNlcnRTZXF1ZW5jZTsKKysKKysg
ICAgVFZhcmlhYmxlICp0eXBlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJsZSwga0VtcHR5
SW1tdXRhYmxlU3RyaW5nLCBtYWtlU3RydWN0dXJlVHlwZSh0cnVlKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpFbXB0eSk7CisrICAgIGluc2Vy
dFNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue3R5cGVWYXJ9KTsKKysK
KysgICAgVFZhcmlhYmxlICppbnN0YW5jZVZhciA9IG51bGxwdHI7CisrICAgIGlmIChzdHJ1Y3RJ
bnN0YW5jZU5hbWUpCisrICAgIHsKKysgICAgICAgIGluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJs
ZShzeW1ib2xUYWJsZSwgKnN0cnVjdEluc3RhbmNlTmFtZSwgbWFrZVN0cnVjdHVyZVR5cGUoZmFs
c2UpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpOworKyAgICAgICAgaW5zZXJ0U2VxdWVuY2UucHVzaF9iYWNrKG5ldyBUSW50
ZXJtRGVjbGFyYXRpb257aW5zdGFuY2VWYXJ9KTsKKysgICAgfQorKworKyAgICBzaXplX3QgZmly
c3RGdW5jdGlvbkluZGV4ID0gRmluZEZpcnN0RnVuY3Rpb25EZWZpbml0aW9uSW5kZXgocm9vdCk7
CisrICAgIHJvb3QtPmluc2VydENoaWxkTm9kZXMoZmlyc3RGdW5jdGlvbkluZGV4LCBpbnNlcnRT
ZXF1ZW5jZSk7CisrCisrICAgIHJldHVybiB7dHlwZVZhciwgaW5zdGFuY2VWYXJ9OworK30KKysK
KyBjb25zdCBUVmFyaWFibGUgKkRlY2xhcmVJbnRlcmZhY2VCbG9jayhUSW50ZXJtQmxvY2sgKnJv
b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
ICpzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
RmllbGRMaXN0ICpmaWVsZExpc3QsCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybU5vZGVfdXRpbC5oCitpbmRleCAzOWI4NmRkLi5mNWQxYzkzIDEwMDY0
NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybU5vZGVfdXRp
bC5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91
dGlsLmgKK0BAIC00NSw2ICs0NSwxNSBAQCBUVmFyaWFibGUgKkRlY2xhcmVUZW1wVmFyaWFibGUo
VFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkICppbml0aWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqKmRlY2xhcmF0aW9uT3V0KTsKKytzdGQ6OnBhaXI8Y29u
c3QgVFZhcmlhYmxlICosIGNvbnN0IFRWYXJpYWJsZSAqPiBEZWNsYXJlU3RydWN0dXJlKAorKyAg
ICBUSW50ZXJtQmxvY2sgKnJvb3QsCisrICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCisr
ICAgIFRGaWVsZExpc3QgKmZpZWxkTGlzdCwKKysgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisr
ICAgIGNvbnN0IFRNZW1vcnlRdWFsaWZpZXIgJm1lbW9yeVF1YWxpZmllciwKKysgICAgdWludDMy
X3QgYXJyYXlTaXplLAorKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgJnN0cnVjdFR5cGVOYW1l
LAorKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgKnN0cnVjdEluc3RhbmNlTmFtZSk7CisgY29u
c3QgVFZhcmlhYmxlICpEZWNsYXJlSW50ZXJmYWNlQmxvY2soVEludGVybUJsb2NrICpyb290LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3lt
Ym9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZpZWxk
TGlzdCAqZmllbGRMaXN0LAorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9JbnRlcm1SZWJ1aWxkLmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAw
MDAuLmQ4ODM0NzMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmNwcAorQEAgLTAsMCArMSwxMDI4IEBACisrLy8KKysv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorKy8vCisrCisrI2luY2x1ZGUgPGFsZ29yaXRobT4KKysKKysjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9Db21waWxlci5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5
bWJvbFRhYmxlLmgiCisrI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0Fz
Tm9kZS5oIgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1S
ZWJ1aWxkLmgiCisrCisrI2RlZmluZSBHVUFSRDIoY29uZCwgZmFpbFZhbCkgXAorKyAgICBkbyAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICBc
CisrICAgICAgICBpZiAoIShjb25kKSkgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAg
ICAgICAgICAgIFwKKysgICAgICAgICAgICByZXR1cm4gZmFpbFZhbDsgICBcCisrICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB9IHdoaWxlIChmYWxzZSkKKysKKysjZGVmaW5l
IEdVQVJEKGNvbmQpIEdVQVJEMihjb25kLCBudWxscHRyKQorKworK25hbWVzcGFjZSBzaAorK3sK
KysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKytBTkdMRV9JTkxJTkUgYm9v
bCBBbGxCaXRzKFQgaGF5c3RhY2ssIFUgbmVlZGxlKQorK3sKKysgICAgcmV0dXJuIChoYXlzdGFj
ayAmIG5lZWRsZSkgPT0gbmVlZGxlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4KKytBTkdMRV9JTkxJTkUgYm9vbCBBbnlCaXRzKFQgaGF5c3RhY2ssIFUgbmVlZGxl
KQorK3sKKysgICAgcmV0dXJuIChoYXlzdGFjayAmIG5lZWRsZSkgIT0gMDsKKyt9CisrCisrLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFz
ZVJlc3VsdChCYXNlUmVzdWx0ICZvdGhlcikKKysgICAgOiBtQWN0aW9uKG90aGVyLm1BY3Rpb24p
LAorKyAgICAgIG1WaXNpdChvdGhlci5tVmlzaXQpLAorKyAgICAgIG1TaW5nbGUob3RoZXIubVNp
bmdsZSksCisrICAgICAgbU11bHRpKHN0ZDo6bW92ZShvdGhlci5tTXVsdGkpKQorK3t9CisrCisr
VEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5vZGUs
IFZpc2l0Qml0cyB2aXNpdCkKKysgICAgOiBtQWN0aW9uKEFjdGlvbjo6UmVwbGFjZVNpbmdsZSks
IG1WaXNpdCh2aXNpdCksIG1TaW5nbGUoJm5vZGUpCisre30KKysKKytUSW50ZXJtUmVidWlsZDo6
QmFzZVJlc3VsdDo6QmFzZVJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0
KQorKyAgICA6IG1BY3Rpb24obm9kZSA/IEFjdGlvbjo6UmVwbGFjZVNpbmdsZSA6IEFjdGlvbjo6
RHJvcCksCisrICAgICAgbVZpc2l0KG5vZGUgPyB2aXNpdCA6IFZpc2l0Qml0czo6TmVpdGhlciks
CisrICAgICAgbVNpbmdsZShub2RlKQorK3t9CisrCisrVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1
bHQ6OkJhc2VSZXN1bHQobnVsbHB0cl90KQorKyAgICA6IG1BY3Rpb24oQWN0aW9uOjpEcm9wKSwg
bVZpc2l0KFZpc2l0Qml0czo6TmVpdGhlciksIG1TaW5nbGUobnVsbHB0cikKKyt7fQorKworK1RJ
bnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KEZhaWwpCisrICAgIDogbUFjdGlv
bihBY3Rpb246OkZhaWwpLCBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwgbVNpbmdsZShudWxs
cHRyKQorK3t9CisrCisrVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoc3Rk
Ojp2ZWN0b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKysgICAgOiBtQWN0aW9uKEFjdGlvbjo6
UmVwbGFjZU11bHRpKSwKKysgICAgICBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVyKSwKKysgICAg
ICBtU2luZ2xlKG51bGxwdHIpLAorKyAgICAgIG1NdWx0aShzdGQ6Om1vdmUobm9kZXMpKQorK3t9
CisrCisrdm9pZCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6bW92ZUFzc2lnbkltcGwoQmFz
ZVJlc3VsdCAmb3RoZXIpCisreworKyAgICBtQWN0aW9uID0gb3RoZXIubUFjdGlvbjsKKysgICAg
bVZpc2l0ICA9IG90aGVyLm1WaXNpdDsKKysgICAgbVNpbmdsZSA9IG90aGVyLm1TaW5nbGU7Cisr
ICAgIG1NdWx0aSAgPSBzdGQ6Om1vdmUob3RoZXIubU11bHRpKTsKKyt9CisrCisrVEludGVybVJl
YnVpbGQ6OkJhc2VSZXN1bHQgVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Ok11bHRpKHN0ZDo6
dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpCisreworKyAgICBhdXRvIGl0ID0gc3RkOjpy
ZW1vdmUobm9kZXMuYmVnaW4oKSwgbm9kZXMuZW5kKCksIG51bGxwdHIpOworKyAgICBub2Rlcy5l
cmFzZShpdCwgbm9kZXMuZW5kKCkpOworKyAgICByZXR1cm4gc3RkOjptb3ZlKG5vZGVzKTsKKyt9
CisrCisrYm9vbCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6aXNGYWlsKCkgY29uc3QKKyt7
CisrICAgIHJldHVybiBtQWN0aW9uID09IEFjdGlvbjo6RmFpbDsKKyt9CisrCisrYm9vbCBUSW50
ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6aXNEcm9wKCkgY29uc3QKKyt7CisrICAgIHJldHVybiBt
QWN0aW9uID09IEFjdGlvbjo6RHJvcDsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1
aWxkOjpCYXNlUmVzdWx0OjpzaW5nbGUoKSBjb25zdAorK3sKKysgICAgcmV0dXJuIG1TaW5nbGU7
CisrfQorKworK2NvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICpUSW50ZXJtUmVidWls
ZDo6QmFzZVJlc3VsdDo6bXVsdGkoKSBjb25zdAorK3sKKysgICAgaWYgKG1BY3Rpb24gPT0gQWN0
aW9uOjpSZXBsYWNlTXVsdGkpCisrICAgIHsKKysgICAgICAgIHJldHVybiAmbU11bHRpOworKyAg
ICB9CisrICAgIHJldHVybiBudWxscHRyOworK30KKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworKworK3VzaW5nIFByZVJlc3VsdCA9IFRJbnRlcm1SZWJ1aWxkOjpQcmVSZXN1bHQ7CisrCisr
UHJlUmVzdWx0OjpQcmVSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkg
OiBCYXNlUmVzdWx0KG5vZGUsIHZpc2l0KSB7fQorK1ByZVJlc3VsdDo6UHJlUmVzdWx0KFRJbnRl
cm1Ob2RlICpub2RlLCBWaXNpdEJpdHMgdmlzaXQpIDogQmFzZVJlc3VsdChub2RlLCB2aXNpdCkg
e30KKytQcmVSZXN1bHQ6OlByZVJlc3VsdChudWxscHRyX3QpIDogQmFzZVJlc3VsdChudWxscHRy
KSB7fQorK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEZhaWwpIDogQmFzZVJlc3VsdChGYWlsKCkpIHt9
CisrCisrUHJlUmVzdWx0OjpQcmVSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKSA6IEJhc2VSZXN1
bHQob3RoZXIpIHt9CisrUHJlUmVzdWx0OjpQcmVSZXN1bHQoUHJlUmVzdWx0ICYmb3RoZXIpIDog
QmFzZVJlc3VsdChvdGhlcikge30KKysKKyt2b2lkIFByZVJlc3VsdDo6b3BlcmF0b3I9KFByZVJl
c3VsdCAmJm90aGVyKQorK3sKKysgICAgbW92ZUFzc2lnbkltcGwob3RoZXIpOworK30KKysKKysv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworKworK3VzaW5nIFBvc3RSZXN1bHQgPSBUSW50ZXJtUmVi
dWlsZDo6UG9zdFJlc3VsdDsKKysKKytQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KFRJbnRlcm1Ob2Rl
ICZub2RlKSA6IEJhc2VSZXN1bHQobm9kZSwgVmlzaXRCaXRzOjpOZWl0aGVyKSB7fQorK1Bvc3RS
ZXN1bHQ6OlBvc3RSZXN1bHQoVEludGVybU5vZGUgKm5vZGUpIDogQmFzZVJlc3VsdChub2RlLCBW
aXNpdEJpdHM6Ok5laXRoZXIpIHt9CisrUG9zdFJlc3VsdDo6UG9zdFJlc3VsdChudWxscHRyX3Qp
IDogQmFzZVJlc3VsdChudWxscHRyKSB7fQorK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoRmFpbCkg
OiBCYXNlUmVzdWx0KEZhaWwoKSkge30KKysKKytQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KFBvc3RS
ZXN1bHQgJiZvdGhlcikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorK1Bvc3RSZXN1bHQ6OlBvc3RS
ZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CisrCisrdm9p
ZCBQb3N0UmVzdWx0OjpvcGVyYXRvcj0oUG9zdFJlc3VsdCAmJm90aGVyKQorK3sKKysgICAgbW92
ZUFzc2lnbkltcGwob3RoZXIpOworK30KKysKKysvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwor
K1RJbnRlcm1SZWJ1aWxkOjpUSW50ZXJtUmVidWlsZChUQ29tcGlsZXIgJmNvbXBpbGVyLCBib29s
IHByZVZpc2l0LCBib29sIHBvc3RWaXNpdCkKKysgICAgOiBtQ29tcGlsZXIoY29tcGlsZXIpLAor
KyAgICAgIG1TeW1ib2xUYWJsZShjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKSwKKysgICAgICBt
UHJlVmlzaXQocHJlVmlzaXQpLAorKyAgICAgIG1Qb3N0VmlzaXQocG9zdFZpc2l0KQorK3sKKysg
ICAgQVNTRVJUKHByZVZpc2l0IHx8IHBvc3RWaXNpdCk7CisrfQorKworK1RJbnRlcm1SZWJ1aWxk
Ojp+VEludGVybVJlYnVpbGQoKQorK3sKKysgICAgQVNTRVJUKCFtTm9kZVN0YWNrLnZhbHVlKTsK
KysgICAgQVNTRVJUKCFtTm9kZVN0YWNrLnRhaWwpOworK30KKysKKytjb25zdCBURnVuY3Rpb24g
KlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnRGdW5jdGlvbigpIGNvbnN0CisreworKyAgICByZXR1
cm4gbVBhcmVudEZ1bmM7CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6Z2V0
UGFyZW50Tm9kZShzaXplX3Qgb2Zmc2V0KSBjb25zdAorK3sKKysgICAgQVNTRVJUKG1Ob2RlU3Rh
Y2sudGFpbCk7CisrICAgIGF1dG8gcGFyZW50ID0gKm1Ob2RlU3RhY2sudGFpbDsKKysgICAgd2hp
bGUgKG9mZnNldCA+IDApCisrICAgIHsKKysgICAgICAgIC0tb2Zmc2V0OworKyAgICAgICAgQVNT
RVJUKHBhcmVudC50YWlsKTsKKysgICAgICAgIHBhcmVudCA9ICpwYXJlbnQudGFpbDsKKysgICAg
fQorKyAgICByZXR1cm4gcGFyZW50LnZhbHVlOworK30KKysKKytib29sIFRJbnRlcm1SZWJ1aWxk
OjpyZWJ1aWxkUm9vdChUSW50ZXJtQmxvY2sgJnJvb3QpCisreworKyAgICBpZiAoIXJlYnVpbGRJ
blBsYWNlKHJvb3QpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysg
ICAgcmV0dXJuIG1Db21waWxlci52YWxpZGF0ZUFTVCgmcm9vdCk7CisrfQorKworK2Jvb2wgVElu
dGVybVJlYnVpbGQ6OnJlYnVpbGRJblBsYWNlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCisrewor
KyAgICByZXR1cm4gcmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworK30KKysKKytib29sIFRJbnRl
cm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtQmxvY2sgJm5vZGUpCisreworKyAgICBy
ZXR1cm4gcmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworK30KKysKKytib29sIFRJbnRlcm1SZWJ1
aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICBy
ZXR1cm4gcmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5h
bWUgTm9kZT4KKytib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZUltcGwoTm9kZSAm
bm9kZSkKKyt7CisrICAgIGF1dG8gKm5ld05vZGUgPSB0cmF2ZXJzZUFueUFzPE5vZGU+KG5vZGUp
OworKyAgICBpZiAoIW5ld05vZGUpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysg
ICAgfQorKworKyAgICBpZiAobmV3Tm9kZSAhPSAmbm9kZSkKKysgICAgeworKyAgICAgICAgKm5v
ZGUuZ2V0U2VxdWVuY2UoKSA9IHN0ZDo6bW92ZSgqbmV3Tm9kZS0+Z2V0U2VxdWVuY2UoKSk7Cisr
ICAgIH0KKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnJlYnVpbGQoVEludGVybU5vZGUgJm5vZGUpCisreworKyAgICByZXR1cm4gdHJhdmVy
c2VBbnkobm9kZSk7CisrfQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrdGVtcGxh
dGUgPHR5cGVuYW1lIE5vZGU+CisrTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55QXMo
VEludGVybU5vZGUgJm5vZGUpCisreworKyAgICBQb3N0UmVzdWx0IHJlc3VsdCh0cmF2ZXJzZUFu
eShub2RlKSk7CisrICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OkZhaWwgfHwgIXJl
c3VsdC5tU2luZ2xlKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgfQor
KyAgICByZXR1cm4gYXNOb2RlPE5vZGU+KHJlc3VsdC5tU2luZ2xlKTsKKyt9CisrCisrdGVtcGxh
dGUgPHR5cGVuYW1lIE5vZGU+CisrYm9vbCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBbnlBcyhU
SW50ZXJtTm9kZSAmbm9kZSwgTm9kZSAqJm91dCkKKyt7CisrICAgIFBvc3RSZXN1bHQgcmVzdWx0
KHRyYXZlcnNlQW55KG5vZGUpKTsKKysgICAgaWYgKHJlc3VsdC5tQWN0aW9uID09IEFjdGlvbjo6
RmFpbCB8fCByZXN1bHQubUFjdGlvbiA9PSBBY3Rpb246OlJlcGxhY2VNdWx0aSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIGlmICghcmVzdWx0Lm1TaW5nbGUp
CisrICAgIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyAgICB9CisrICAgIG91dCA9IGFzTm9k
ZTxOb2RlPihyZXN1bHQubVNpbmdsZSk7CisrICAgIHJldHVybiBvdXQ7CisrfQorKworK2Jvb2wg
VEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3QgY2hpbGRyZW4gPSBub2RlLmdl
dFNlcXVlbmNlKCk7CisrICAgIEFTU0VSVChjaGlsZHJlbik7CisrICAgIFRJbnRlcm1TZXF1ZW5j
ZSBuZXdDaGlsZHJlbjsKKysKKysgICAgZm9yIChUSW50ZXJtTm9kZSAqY2hpbGQgOiAqY2hpbGRy
ZW4pCisrICAgIHsKKysgICAgICAgIEFTU0VSVChjaGlsZCk7CisrICAgICAgICBQb3N0UmVzdWx0
IHJlc3VsdCh0cmF2ZXJzZUFueSgqY2hpbGQpKTsKKysKKysgICAgICAgIHN3aXRjaCAocmVzdWx0
Lm1BY3Rpb24pCisrICAgICAgICB7CisrICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VT
aW5nbGU6CisrICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2hfYmFjayhyZXN1bHQubVNp
bmdsZSk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgQWN0
aW9uOjpSZXBsYWNlTXVsdGk6CisrICAgICAgICAgICAgICAgIGZvciAoVEludGVybU5vZGUgKm5l
d05vZGUgOiByZXN1bHQubU11bHRpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAg
ICAgICAgICBpZiAobmV3Tm9kZSkKKysgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoX2JhY2sobmV3Tm9kZSk7CisrICAgICAgICAg
ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgYnJlYWs7
CisrCisrICAgICAgICAgICAgY2FzZSBBY3Rpb246OkRyb3A6CisrICAgICAgICAgICAgICAgIGJy
ZWFrOworKworKyAgICAgICAgICAgIGNhc2UgQWN0aW9uOjpGYWlsOgorKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgKmNoaWxkcmVuID0g
c3RkOjptb3ZlKG5ld0NoaWxkcmVuKTsKKysKKysgICAgcmV0dXJuIHRydWU7CisrfQorKworKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrc3RydWN0IFRJbnRlcm1SZWJ1aWxkOjpOb2RlU3Rh
Y2tHdWFyZAorK3sKKysgICAgQ29uc0xpc3Q8VEludGVybU5vZGUgKj4gb2xkTm9kZVN0YWNrOwor
KyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrOworKyAgICBOb2RlU3RhY2tH
dWFyZChDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrKQorKyAgICAgICAgOiBvbGRO
b2RlU3RhY2sobm9kZVN0YWNrKSwgbm9kZVN0YWNrKG5vZGVTdGFjaykKKysgICAge30KKysgICAg
fk5vZGVTdGFja0d1YXJkKCkgeyBub2RlU3RhY2sgPSBvbGROb2RlU3RhY2s7IH0KKyt9OworKwor
K1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZvcmln
aW5hbE5vZGUpCisreworKyAgICBQcmVSZXN1bHQgcHJlUmVzdWx0ID0gdHJhdmVyc2VQcmUob3Jp
Z2luYWxOb2RlKTsKKysgICAgaWYgKCFwcmVSZXN1bHQubVNpbmdsZSkKKysgICAgeworKyAgICAg
ICAgQVNTRVJUKHByZVJlc3VsdC5tVmlzaXQgPT0gVmlzaXRCaXRzOjpOZWl0aGVyKTsKKysgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmUocHJlUmVzdWx0KTsKKysgICAgfQorKworKyAgICBUSW50ZXJt
Tm9kZSAqY3Vyck5vZGUgICAgICAgPSBwcmVSZXN1bHQubVNpbmdsZTsKKysgICAgY29uc3QgVmlz
aXRCaXRzIHZpc2l0ICAgICAgID0gcHJlUmVzdWx0Lm1WaXNpdDsKKysgICAgY29uc3QgTm9kZVR5
cGUgY3Vyck5vZGVUeXBlID0gZ2V0Tm9kZVR5cGUoKmN1cnJOb2RlKTsKKysKKysgICAgY3Vyck5v
ZGUgPSB0cmF2ZXJzZUNoaWxkcmVuKGN1cnJOb2RlVHlwZSwgb3JpZ2luYWxOb2RlLCAqY3Vyck5v
ZGUsIHZpc2l0KTsKKysgICAgaWYgKCFjdXJyTm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJu
IEZhaWwoKTsKKysgICAgfQorKworKyAgICByZXR1cm4gdHJhdmVyc2VQb3N0KGN1cnJOb2RlVHlw
ZSwgb3JpZ2luYWxOb2RlLCAqY3Vyck5vZGUsIHZpc2l0KTsKKyt9CisrCisrUHJlUmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVByZShUSW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlKQorK3sK
KysgICAgaWYgKCFtUHJlVmlzaXQpCisrICAgIHsKKysgICAgICAgIHJldHVybiB7b3JpZ2luYWxO
b2RlLCBWaXNpdEJpdHM6OkJvdGh9OworKyAgICB9CisrCisrICAgIE5vZGVTdGFja0d1YXJkIGd1
YXJkKG1Ob2RlU3RhY2spOworKyAgICBtTm9kZVN0YWNrID0geyZvcmlnaW5hbE5vZGUsICZndWFy
ZC5vbGROb2RlU3RhY2t9OworKworKyAgICBjb25zdCBOb2RlVHlwZSBvcmlnaW5hbE5vZGVUeXBl
ID0gZ2V0Tm9kZVR5cGUob3JpZ2luYWxOb2RlKTsKKysKKysgICAgc3dpdGNoIChvcmlnaW5hbE5v
ZGVUeXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtub3duOgorKyAgICAg
ICAgICAgIEFTU0VSVChmYWxzZSk7CisrICAgICAgICAgICAgcmV0dXJuIEZhaWwoKTsKKysgICAg
ICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1i
b2xQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5v
ZGVUeXBlOjpDb25zdGFudFVuaW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdENvbnN0YW50
VW5pb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisrICAgICAgICBj
YXNlIE5vZGVUeXBlOjpGdW5jdGlvblByb3RvdHlwZToKKysgICAgICAgICAgICByZXR1cm4gdmlz
aXRGdW5jdGlvblByb3RvdHlwZVByZSgqb3JpZ2luYWxOb2RlLmdldEFzRnVuY3Rpb25Qcm90b3R5
cGVOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0aXZl
OgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVByZSgqb3Jp
Z2luYWxOb2RlLmdldEFzUHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkpOworKyAgICAgICAgY2FzZSBO
b2RlVHlwZTo6VW5hcnk6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQcmUoKm9yaWdp
bmFsTm9kZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFy
eToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRCaW5hcnlQcmUoKm9yaWdpbmFsTm9kZS5nZXRB
c0JpbmFyeU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorKyAgICAg
ICAgICAgIHJldHVybiB2aXNpdFRlcm5hcnlQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc1Rlcm5hcnlO
b2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRTd2l6emxlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKysgICAgICAgICAgICByZXR1cm4gdmlz
aXRJZkVsc2VQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7CisrICAgICAgICBj
YXNlIE5vZGVUeXBlOjpTd2l0Y2g6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dpdGNoUHJl
KCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlw
ZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRDYXNlUHJlKCpvcmlnaW5hbE5vZGUu
Z2V0QXNDYXNlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5p
dGlvbjoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoKm9y
aWdpbmFsTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKysgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkFnZ3JlZ2F0ZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRBZ2dyZWdhdGVQcmUo
Km9yaWdpbmFsTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6
OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJsb2NrUHJlKCpvcmlnaW5hbE5vZGUu
Z2V0QXNCbG9jaygpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uUHJlKAorKyAgICAgICAgICAgICAgICAqb3JpZ2luYWxOb2RlLmdldEFzR2xvYmFsUXVh
bGlmaWVyRGVjbGFyYXRpb25Ob2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RGVjbGFy
YXRpb246CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0RGVjbGFyYXRpb25QcmUoKm9yaWdpbmFs
Tm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxv
b3A6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0TG9vcFByZSgqb3JpZ2luYWxOb2RlLmdldEFz
TG9vcE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCcmFuY2g6CisrICAgICAgICAg
ICAgcmV0dXJuIHZpc2l0QnJhbmNoUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkp
OworKyAgICB9CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VD
aGlsZHJlbihOb2RlVHlwZSBjdXJyTm9kZVR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
ICZjdXJyTm9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmlzaXRCaXRzIHZpc2l0KQorK3sKKysgICAgaWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJp
dHM6OkNoaWxkcmVuKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKysgICAg
fQorKworKyAgICBpZiAoQW55Qml0cyh2aXNpdCwgVmlzaXRCaXRzOjpDaGlsZHJlblJlcXVpcmVz
U2FtZSkgJiYgJm9yaWdpbmFsTm9kZSAhPSAmY3Vyck5vZGUpCisrICAgIHsKKysgICAgICAgIHJl
dHVybiAmY3Vyck5vZGU7CisrICAgIH0KKysKKysgICAgTm9kZVN0YWNrR3VhcmQgZ3VhcmQobU5v
ZGVTdGFjayk7CisrICAgIG1Ob2RlU3RhY2sgPSB7JmN1cnJOb2RlLCAmZ3VhcmQub2xkTm9kZVN0
YWNrfTsKKysKKysgICAgc3dpdGNoIChjdXJyTm9kZVR5cGUpCisrICAgIHsKKysgICAgICAgIGNh
c2UgTm9kZVR5cGU6OlVua25vd246CisrICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKysgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoK
KysgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
Q29uc3RhbnRVbmlvbjoKKysgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25Qcm90b3R5cGU6CisrICAgICAgICAgICAgcmV0dXJuICZj
dXJyTm9kZTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToK
KysgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
VW5hcnk6CisrICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVW5hcnlDaGlsZHJlbigqY3Vyck5v
ZGUuZ2V0QXNVbmFyeU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCaW5hcnk6Cisr
ICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQmluYXJ5Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFz
QmluYXJ5Tm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlRlcm5hcnk6CisrICAgICAg
ICAgICAgcmV0dXJuIHRyYXZlcnNlVGVybmFyeUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc1Rlcm5h
cnlOb2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAg
ICByZXR1cm4gdHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzU3dpenpsZU5v
ZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpJZkVsc2U6CisrICAgICAgICAgICAgcmV0
dXJuIHRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzSWZFbHNlTm9kZSgpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXRjaDoKKysgICAgICAgICAgICByZXR1cm4gdHJh
dmVyc2VTd2l0Y2hDaGlsZHJlbigqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworKyAgICAg
ICAgY2FzZSBOb2RlVHlwZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VDYXNl
Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQ2FzZU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVU
eXBlOjpGdW5jdGlvbkRlZmluaXRpb246CisrICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlRnVu
Y3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9u
KCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QWdncmVnYXRlOgorKyAgICAgICAgICAgIHJl
dHVybiB0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgp
KTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB0
cmF2ZXJzZUJsb2NrQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7CisrICAgICAgICBj
YXNlIE5vZGVUeXBlOjpHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbjoKKysgICAgICAgICAgICBy
ZXR1cm4gdHJhdmVyc2VHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbkNoaWxkcmVuKAorKyAgICAg
ICAgICAgICAgICAqY3Vyck5vZGUuZ2V0QXNHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUo
KSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpEZWNsYXJhdGlvbjoKKysgICAgICAgICAgICBy
ZXR1cm4gdHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0RlY2xhcmF0
aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisrICAgICAgICAgICAg
cmV0dXJuIHRyYXZlcnNlTG9vcENoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0xvb3BOb2RlKCkpOwor
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QnJhbmNoOgorKyAgICAgICAgICAgIHJldHVybiB0cmF2
ZXJzZUJyYW5jaENoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0JyYW5jaE5vZGUoKSk7CisrICAgIH0K
Kyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VQb3N0KE5vZGVUeXBl
IGN1cnJOb2RlVHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVEludGVybU5vZGUgJm9yaWdpbmFsTm9kZSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJmN1cnJOb2RlLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpCisreworKyAgICBpZiAo
IW1Qb3N0VmlzaXQpCisrICAgIHsKKysgICAgICAgIHJldHVybiBjdXJyTm9kZTsKKysgICAgfQor
KworKyAgICBpZiAoIUFueUJpdHModmlzaXQsIFZpc2l0Qml0czo6UG9zdCkpCisrICAgIHsKKysg
ICAgICAgIHJldHVybiBjdXJyTm9kZTsKKysgICAgfQorKworKyAgICBpZiAoQW55Qml0cyh2aXNp
dCwgVmlzaXRCaXRzOjpQb3N0UmVxdWlyZXNTYW1lKSAmJiAmb3JpZ2luYWxOb2RlICE9ICZjdXJy
Tm9kZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworKyAgICB9CisrCisrICAg
IE5vZGVTdGFja0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2spOworKyAgICBtTm9kZVN0YWNrID0geyZj
dXJyTm9kZSwgJmd1YXJkLm9sZE5vZGVTdGFja307CisrCisrICAgIHN3aXRjaCAoY3Vyck5vZGVU
eXBlKQorKyAgICB7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmtub3duOgorKyAgICAgICAg
ICAgIEFTU0VSVChmYWxzZSk7CisrICAgICAgICAgICAgcmV0dXJuIEZhaWwoKTsKKysgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1ib2xQ
b3N0KCpjdXJyTm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBl
OjpDb25zdGFudFVuaW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdENvbnN0YW50VW5pb25Q
b3N0KCpjdXJyTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisrICAgICAgICBjYXNlIE5vZGVU
eXBlOjpGdW5jdGlvblByb3RvdHlwZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5jdGlv
blByb3RvdHlwZVBvc3QoKmN1cnJOb2RlLmdldEFzRnVuY3Rpb25Qcm90b3R5cGVOb2RlKCkpOwor
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29yRGlyZWN0aXZlOgorKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoKmN1cnJOb2RlLmdldEFz
UHJlcHJvY2Vzc29yRGlyZWN0aXZlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5hcnk6
CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc1VuYXJ5
Tm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKysgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRCaW5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc0JpbmFyeU5vZGUoKSk7CisrICAg
ICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdFRl
cm5hcnlQb3N0KCpjdXJyTm9kZS5nZXRBc1Rlcm5hcnlOb2RlKCkpOworKyAgICAgICAgY2FzZSBO
b2RlVHlwZTo6U3dpenpsZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l6emxlUG9zdCgq
Y3Vyck5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Oklm
RWxzZToKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRJZkVsc2VQb3N0KCpjdXJyTm9kZS5nZXRB
c0lmRWxzZU5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpTd2l0Y2g6CisrICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0U3dpdGNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkp
OworKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6Q2FzZToKKysgICAgICAgICAgICByZXR1cm4gdmlz
aXRDYXNlUG9zdCgqY3Vyck5vZGUuZ2V0QXNDYXNlTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjoKKysgICAgICAgICAgICByZXR1cm4gdmlzaXRGdW5j
dGlvbkRlZmluaXRpb25Qb3N0KCpjdXJyTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsK
KysgICAgICAgIGNhc2UgTm9kZVR5cGU6OkFnZ3JlZ2F0ZToKKysgICAgICAgICAgICByZXR1cm4g
dmlzaXRBZ2dyZWdhdGVQb3N0KCpjdXJyTm9kZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKysgICAgICAg
IGNhc2UgTm9kZVR5cGU6OkJsb2NrOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJsb2NrUG9z
dCgqY3Vyck5vZGUuZ2V0QXNCbG9jaygpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2Jh
bFF1YWxpZmllckRlY2xhcmF0aW9uOgorKyAgICAgICAgICAgIHJldHVybiB2aXNpdEdsb2JhbFF1
YWxpZmllckRlY2xhcmF0aW9uUG9zdCgKKysgICAgICAgICAgICAgICAgKmN1cnJOb2RlLmdldEFz
R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Ob2RlKCkpOworKyAgICAgICAgY2FzZSBOb2RlVHlw
ZTo6RGVjbGFyYXRpb246CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0RGVjbGFyYXRpb25Qb3N0
KCpjdXJyTm9kZS5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKTsKKysgICAgICAgIGNhc2UgTm9kZVR5
cGU6Okxvb3A6CisrICAgICAgICAgICAgcmV0dXJuIHZpc2l0TG9vcFBvc3QoKmN1cnJOb2RlLmdl
dEFzTG9vcE5vZGUoKSk7CisrICAgICAgICBjYXNlIE5vZGVUeXBlOjpCcmFuY2g6CisrICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0QnJhbmNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkp
OworKyAgICB9CisrfQorKworKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCisrVEludGVybU5v
ZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUNoaWxkcmVuKFRJbnRlcm1BZ2dy
ZWdhdGUgJm5vZGUpCisreworKyAgICBpZiAodHJhdmVyc2VBZ2dyZWdhdGVCYXNlQ2hpbGRyZW4o
bm9kZSkpCisrICAgIHsKKysgICAgICAgIHJldHVybiAmbm9kZTsKKysgICAgfQorKyAgICByZXR1
cm4gbnVsbHB0cjsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJz
ZUJsb2NrQ2hpbGRyZW4oVEludGVybUJsb2NrICZub2RlKQorK3sKKysgICAgaWYgKHRyYXZlcnNl
QWdncmVnYXRlQmFzZUNoaWxkcmVuKG5vZGUpKQorKyAgICB7CisrICAgICAgICByZXR1cm4gJm5v
ZGU7CisrICAgIH0KKysgICAgcmV0dXJuIG51bGxwdHI7CisrfQorKworK1RJbnRlcm1Ob2RlICpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VEZWNsYXJhdGlvbkNoaWxkcmVuKFRJbnRlcm1EZWNsYXJh
dGlvbiAmbm9kZSkKKyt7CisrICAgIGlmICh0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihu
b2RlKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuICZub2RlOworKyAgICB9CisrICAgIHJldHVy
biBudWxscHRyOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNl
U3dpenpsZUNoaWxkcmVuKFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgYXV0byAqY29u
c3Qgb3BlcmFuZCA9IG5vZGUuZ2V0T3BlcmFuZCgpOworKyAgICBBU1NFUlQob3BlcmFuZCk7Cisr
CisrICAgIGF1dG8gKm5ld09wZXJhbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKm9w
ZXJhbmQpOworKyAgICBHVUFSRChuZXdPcGVyYW5kKTsKKysKKysgICAgaWYgKG5ld09wZXJhbmQg
IT0gb3BlcmFuZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3dpenpsZShu
ZXdPcGVyYW5kLCBub2RlLmdldFN3aXp6bGVPZmZzZXRzKCkpOworKyAgICB9CisrCisrICAgIHJl
dHVybiAmbm9kZTsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJz
ZUJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkgJm5vZGUpCisreworKyAgICBhdXRvICpjb25z
dCBsZWZ0ID0gbm9kZS5nZXRMZWZ0KCk7CisrICAgIEFTU0VSVChsZWZ0KTsKKysgICAgYXV0byAq
Y29uc3QgcmlnaHQgPSBub2RlLmdldFJpZ2h0KCk7CisrICAgIEFTU0VSVChyaWdodCk7CisrCisr
ICAgIGF1dG8gKmNvbnN0IG5ld0xlZnQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmxl
ZnQpOworKyAgICBHVUFSRChuZXdMZWZ0KTsKKysgICAgYXV0byAqY29uc3QgbmV3UmlnaHQgPSB0
cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKnJpZ2h0KTsKKysgICAgR1VBUkQobmV3UmlnaHQp
OworKworKyAgICBpZiAobmV3TGVmdCAhPSBsZWZ0IHx8IG5ld1JpZ2h0ICE9IHJpZ2h0KQorKyAg
ICB7CisrICAgICAgICBUT3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7CisrICAgICAgICBzd2l0
Y2ggKG9wKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdFN0cnVjdDoKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChuZXdM
ZWZ0LT5nZXRUeXBlKCkuZ2V0SW50ZXJmYWNlQmxvY2soKSkKKysgICAgICAgICAgICAgICAgewor
KyAgICAgICAgICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0SW50ZXJm
YWNlQmxvY2s7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s6CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBpZiAobmV3
TGVmdC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAg
ICAgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q7CisrICAg
ICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgYnJlYWs7CisrCisr
ICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENvbW1hOgorKyAgICAgICAgICAgICAgICBy
ZXR1cm4gVEludGVybUJpbmFyeTo6Q3JlYXRlQ29tbWEobmV3TGVmdCwgbmV3UmlnaHQsIG1Db21w
aWxlci5nZXRTaGFkZXJWZXJzaW9uKCkpOworKworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAg
ICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgcmV0dXJuIG5ldyBU
SW50ZXJtQmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7CisrICAgIH0KKysKKysgICAgcmV0
dXJuICZub2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNl
VW5hcnlDaGlsZHJlbihUSW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICBhdXRvICpjb25zdCBv
cGVyYW5kID0gbm9kZS5nZXRPcGVyYW5kKCk7CisrICAgIEFTU0VSVChvcGVyYW5kKTsKKysKKysg
ICAgYXV0byAqY29uc3QgbmV3T3BlcmFuZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigq
b3BlcmFuZCk7CisrICAgIEdVQVJEKG5ld09wZXJhbmQpOworKworKyAgICBpZiAobmV3T3BlcmFu
ZCAhPSBvcGVyYW5kKQorKyAgICB7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1VbmFyeShu
b2RlLmdldE9wKCksIG5ld09wZXJhbmQsIG5vZGUuZ2V0RnVuY3Rpb24oKSk7CisrICAgIH0KKysK
KysgICAgcmV0dXJuICZub2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6
OnRyYXZlcnNlVGVybmFyeUNoaWxkcmVuKFRJbnRlcm1UZXJuYXJ5ICZub2RlKQorK3sKKysgICAg
YXV0byAqY29uc3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisrICAgIEFTU0VSVChjb25k
KTsKKysgICAgYXV0byAqY29uc3QgdHJ1ZV8gPSBub2RlLmdldFRydWVFeHByZXNzaW9uKCk7Cisr
ICAgIEFTU0VSVCh0cnVlXyk7CisrICAgIGF1dG8gKmNvbnN0IGZhbHNlXyA9IG5vZGUuZ2V0RmFs
c2VFeHByZXNzaW9uKCk7CisrICAgIEFTU0VSVChmYWxzZV8pOworKworKyAgICBhdXRvICpjb25z
dCBuZXdDb25kID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpjb25kKTsKKysgICAgR1VB
UkQobmV3Q29uZCk7CisrICAgIGF1dG8gKmNvbnN0IG5ld1RydWUgPSB0cmF2ZXJzZUFueUFzPFRJ
bnRlcm1UeXBlZD4oKnRydWVfKTsKKysgICAgR1VBUkQobmV3VHJ1ZSk7CisrICAgIGF1dG8gKmNv
bnN0IG5ld0ZhbHNlID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpmYWxzZV8pOworKyAg
ICBHVUFSRChuZXdGYWxzZSk7CisrCisrICAgIGlmIChuZXdDb25kICE9IGNvbmQgfHwgbmV3VHJ1
ZSAhPSB0cnVlXyB8fCBuZXdGYWxzZSAhPSBmYWxzZV8pCisrICAgIHsKKysgICAgICAgIHJldHVy
biBuZXcgVEludGVybVRlcm5hcnkobmV3Q29uZCwgbmV3VHJ1ZSwgbmV3RmFsc2UpOworKyAgICB9
CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9CisrCisrVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1
aWxkOjp0cmF2ZXJzZUlmRWxzZUNoaWxkcmVuKFRJbnRlcm1JZkVsc2UgJm5vZGUpCisreworKyAg
ICBhdXRvICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKysgICAgQVNTRVJUKGNv
bmQpOworKyAgICBhdXRvICpjb25zdCB0cnVlXyAgPSBub2RlLmdldFRydWVCbG9jaygpOworKyAg
ICBhdXRvICpjb25zdCBmYWxzZV8gPSBub2RlLmdldEZhbHNlQmxvY2soKTsKKysKKysgICAgYXV0
byAqY29uc3QgbmV3Q29uZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqY29uZCk7Cisr
ICAgIEdVQVJEKG5ld0NvbmQpOworKyAgICBUSW50ZXJtQmxvY2sgKm5ld1RydWUgPSBudWxscHRy
OworKyAgICBpZiAodHJ1ZV8pCisrICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMo
KnRydWVfLCBuZXdUcnVlKSk7CisrICAgIH0KKysgICAgVEludGVybUJsb2NrICpuZXdGYWxzZSA9
IG51bGxwdHI7CisrICAgIGlmIChmYWxzZV8pCisrICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZl
cnNlQW55QXMoKmZhbHNlXywgbmV3RmFsc2UpKTsKKysgICAgfQorKworKyAgICBpZiAobmV3Q29u
ZCAhPSBjb25kIHx8IG5ld1RydWUgIT0gdHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorKyAg
ICB7CisrICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1JZkVsc2UobmV3Q29uZCwgbmV3VHJ1ZSwg
bmV3RmFsc2UpOworKyAgICB9CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9CisrCisrVEludGVy
bU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVN3aXRjaENoaWxkcmVuKFRJbnRlcm1Td2l0
Y2ggJm5vZGUpCisreworKyAgICBhdXRvICpjb25zdCBpbml0ID0gbm9kZS5nZXRJbml0KCk7Cisr
ICAgIEFTU0VSVChpbml0KTsKKysgICAgYXV0byAqY29uc3Qgc3RtdHMgPSBub2RlLmdldFN0YXRl
bWVudExpc3QoKTsKKysgICAgQVNTRVJUKHN0bXRzKTsKKysKKysgICAgYXV0byAqY29uc3QgbmV3
SW5pdCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqaW5pdCk7CisrICAgIEdVQVJEKG5l
d0luaXQpOworKyAgICBhdXRvICpjb25zdCBuZXdTdG10cyA9IHRyYXZlcnNlQW55QXM8VEludGVy
bUJsb2NrPigqc3RtdHMpOworKyAgICBHVUFSRChuZXdTdG10cyk7CisrCisrICAgIGlmIChuZXdJ
bml0ICE9IGluaXQgfHwgbmV3U3RtdHMgIT0gc3RtdHMpCisrICAgIHsKKysgICAgICAgIHJldHVy
biBuZXcgVEludGVybVN3aXRjaChuZXdJbml0LCBuZXdTdG10cyk7CisrICAgIH0KKysKKysgICAg
cmV0dXJuICZub2RlOworK30KKysKKytUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZl
cnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNlICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3Qg
Y29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisrCisrICAgIFRJbnRlcm1UeXBlZCAqbmV3Q29u
ZCA9IG51bGxwdHI7CisrICAgIGlmIChjb25kKQorKyAgICB7CisrICAgICAgICBHVUFSRCh0cmF2
ZXJzZUFueUFzKCpjb25kLCBuZXdDb25kKSk7CisrICAgIH0KKysKKysgICAgaWYgKG5ld0NvbmQg
IT0gY29uZCkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQ2FzZShuZXdDb25k
KTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5vZGU7CisrfQorKworK1RJbnRlcm1Ob2RlICpU
SW50ZXJtUmVidWlsZDo6dHJhdmVyc2VGdW5jdGlvbkRlZmluaXRpb25DaGlsZHJlbihUSW50ZXJt
RnVuY3Rpb25EZWZpbml0aW9uICZub2RlKQorK3sKKysgICAgR1VBUkQoIW1QYXJlbnRGdW5jKTsg
IC8vIEZ1bmN0aW9uIGRlZmluaXRpb25zIGNhbm5vdCBiZSBuZXN0ZWQuCisrICAgIG1QYXJlbnRG
dW5jID0gbm9kZS5nZXRGdW5jdGlvbigpOworKyAgICBzdHJ1Y3QgT25FeGl0CisrICAgIHsKKysg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqJnBhcmVudEZ1bmM7CisrICAgICAgICBPbkV4aXQoY29u
c3QgVEZ1bmN0aW9uIComcGFyZW50RnVuYykgOiBwYXJlbnRGdW5jKHBhcmVudEZ1bmMpIHt9Cisr
ICAgICAgICB+T25FeGl0KCkgeyBwYXJlbnRGdW5jID0gbnVsbHB0cjsgfQorKyAgICB9IG9uRXhp
dChtUGFyZW50RnVuYyk7CisrCisrICAgIGF1dG8gKmNvbnN0IHByb3RvID0gbm9kZS5nZXRGdW5j
dGlvblByb3RvdHlwZSgpOworKyAgICBBU1NFUlQocHJvdG8pOworKyAgICBhdXRvICpjb25zdCBi
b2R5ID0gbm9kZS5nZXRCb2R5KCk7CisrICAgIEFTU0VSVChib2R5KTsKKysKKysgICAgYXV0byAq
Y29uc3QgbmV3UHJvdG8gPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZT4o
KnByb3RvKTsKKysgICAgR1VBUkQobmV3UHJvdG8pOworKyAgICBhdXRvICpjb25zdCBuZXdCb2R5
ID0gdHJhdmVyc2VBbnlBczxUSW50ZXJtQmxvY2s+KCpib2R5KTsKKysgICAgR1VBUkQobmV3Qm9k
eSk7CisrCisrICAgIGlmIChuZXdQcm90byAhPSBwcm90byB8fCBuZXdCb2R5ICE9IGJvZHkpCisr
ICAgIHsKKysgICAgICAgIHJldHVybiBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihuZXdQ
cm90bywgbmV3Qm9keSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuICZub2RlOworK30KKysKKytU
SW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFsUXVhbGlmaWVyRGVjbGFy
YXRpb25DaGlsZHJlbigKKysgICAgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZu
b2RlKQorK3sKKysgICAgYXV0byAqY29uc3Qgc3ltYm9sID0gbm9kZS5nZXRTeW1ib2woKTsKKysg
ICAgQVNTRVJUKHN5bWJvbCk7CisrCisrICAgIGF1dG8gKmNvbnN0IG5ld1N5bWJvbCA9IHRyYXZl
cnNlQW55QXM8VEludGVybVN5bWJvbD4oKnN5bWJvbCk7CisrICAgIEdVQVJEKG5ld1N5bWJvbCk7
CisrCisrICAgIGlmIChuZXdTeW1ib2wgIT0gc3ltYm9sKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gbmV3IFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihuZXdTeW1ib2wsIG5vZGUu
aXNQcmVjaXNlKCksIG5vZGUuZ2V0TGluZSgpKTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5v
ZGU7CisrfQorKworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VMb29wQ2hp
bGRyZW4oVEludGVybUxvb3AgJm5vZGUpCisreworKyAgICBjb25zdCBUTG9vcFR5cGUgbG9vcFR5
cGUgPSBub2RlLmdldFR5cGUoKTsKKysKKysgICAgYXV0byAqY29uc3QgaW5pdCA9IG5vZGUuZ2V0
SW5pdCgpOworKyAgICBhdXRvICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKysg
ICAgYXV0byAqY29uc3QgZXhwciA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworKyAgICBhdXRvICpj
b25zdCBib2R5ID0gbm9kZS5nZXRCb2R5KCk7CisrICAgIEFTU0VSVChib2R5KTsKKysKKysjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykKKysgICAgc3dpdGNoIChsb29wVHlwZSkKKysg
ICAgeworKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorKyAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wV2hpbGU6CisrICAgICAgICBjYXNl
IFRMb29wVHlwZTo6RUxvb3BEb1doaWxlOgorKyAgICAgICAgICAgIEFTU0VSVChjb25kKTsKKysg
ICAgICAgICAgICBBU1NFUlQoIWluaXQgJiYgIWV4cHIpOworKyAgICAgICAgICAgIGJyZWFrOwor
KyAgICB9CisrI2VuZGlmCisrCisrICAgIGF1dG8gKmNvbnN0IG5ld0JvZHkgPSB0cmF2ZXJzZUFu
eUFzPFRJbnRlcm1CbG9jaz4oKmJvZHkpOworKyAgICBHVUFSRChuZXdCb2R5KTsKKysgICAgVElu
dGVybU5vZGUgKm5ld0luaXQgPSBudWxscHRyOworKyAgICBpZiAoaW5pdCkKKysgICAgeworKyAg
ICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqaW5pdCwgbmV3SW5pdCkpOworKyAgICB9CisrICAg
IFRJbnRlcm1UeXBlZCAqbmV3Q29uZCA9IG51bGxwdHI7CisrICAgIGlmIChjb25kKQorKyAgICB7
CisrICAgICAgICBHVUFSRCh0cmF2ZXJzZUFueUFzKCpjb25kLCBuZXdDb25kKSk7CisrICAgIH0K
KysgICAgVEludGVybVR5cGVkICpuZXdFeHByID0gbnVsbHB0cjsKKysgICAgaWYgKGV4cHIpCisr
ICAgIHsKKysgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMoKmV4cHIsIG5ld0V4cHIpKTsKKysg
ICAgfQorKworKyAgICBpZiAobmV3SW5pdCAhPSBpbml0IHx8IG5ld0NvbmQgIT0gY29uZCB8fCBu
ZXdFeHByICE9IGV4cHIgfHwgbmV3Qm9keSAhPSBib2R5KQorKyAgICB7CisrICAgICAgICBzd2l0
Y2ggKGxvb3BUeXBlKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpF
TG9vcEZvcjoKKysgICAgICAgICAgICAgICAgR1VBUkQobmV3Qm9keSk7CisrICAgICAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcFdoaWxlOgorKyAg
ICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisrICAgICAgICAgICAgICAg
IEdVQVJEKG5ld0NvbmQgJiYgbmV3Qm9keSk7CisrICAgICAgICAgICAgICAgIEdVQVJEKCFuZXdJ
bml0ICYmICFuZXdFeHByKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9Cisr
ICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1Mb29wKGxvb3BUeXBlLCBuZXdJbml0LCBuZXdDb25k
LCBuZXdFeHByLCBuZXdCb2R5KTsKKysgICAgfQorKworKyAgICByZXR1cm4gJm5vZGU7CisrfQor
KworK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VCcmFuY2hDaGlsZHJlbihU
SW50ZXJtQnJhbmNoICZub2RlKQorK3sKKysgICAgYXV0byAqY29uc3QgZXhwciA9IG5vZGUuZ2V0
RXhwcmVzc2lvbigpOworKworKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOwor
KyAgICBpZiAoZXhwcikKKysgICAgeworKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBczxUSW50
ZXJtVHlwZWQ+KCpleHByLCBuZXdFeHByKSk7CisrICAgIH0KKysKKysgICAgaWYgKG5ld0V4cHIg
IT0gZXhwcikKKysgICAgeworKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQnJhbmNoKG5vZGUu
Z2V0Rmxvd09wKCksIG5ld0V4cHIpOworKyAgICB9CisrCisrICAgIHJldHVybiAmbm9kZTsKKyt9
CisrCisrLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVp
bGQ6OnZpc2l0U3ltYm9sUHJlKFRJbnRlcm1TeW1ib2wgJm5vZGUpCisreworKyAgICByZXR1cm4g
e25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKQorK3sK
KysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQg
VEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoVEludGVybUZ1bmN0aW9u
UHJvdG90eXBlICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9
OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGly
ZWN0aXZlUHJlKFRJbnRlcm1QcmVwcm9jZXNzb3JEaXJlY3RpdmUgJm5vZGUpCisreworKyAgICBy
ZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJt
UmVidWlsZDo6dmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRCaW5hcnlQcmUoVEludGVybUJpbmFyeSAmbm9kZSkKKyt7CisrICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdFRlcm5hcnlQcmUoVEludGVybVRlcm5hcnkgJm5vZGUpCisreworKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgcmV0
dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnZpc2l0SWZFbHNlUHJlKFRJbnRlcm1JZkVsc2UgJm5vZGUpCisreworKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVi
dWlsZDo6dmlzaXRTd2l0Y2hQcmUoVEludGVybVN3aXRjaCAmbm9kZSkKKyt7CisrICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdENhc2VQcmUoVEludGVybUNhc2UgJm5vZGUpCisreworKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6
dmlzaXRMb29wUHJlKFRJbnRlcm1Mb29wICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBW
aXNpdEJpdHM6OkJvdGh9OworK30KKysKKytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0
QnJhbmNoUHJlKFRJbnRlcm1CcmFuY2ggJm5vZGUpCisreworKyAgICByZXR1cm4ge25vZGUsIFZp
c2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRE
ZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4g
e25vZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRCbG9ja1ByZShUSW50ZXJtQmxvY2sgJm5vZGUpCisreworKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07CisrfQorKworK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6
dmlzaXRBZ2dyZWdhdGVQcmUoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSkKKyt7CisrICAgIHJldHVy
biB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrUHJlUmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICZub2RlKQorK3sKKysgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworK30KKysK
KytQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b25QcmUoCisrICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSkKKyt7
CisrICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyt9CisrCisrLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN5bWJv
bFBvc3QoVEludGVybVN5bWJvbCAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysK
KytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRl
cm1Db25zdGFudFVuaW9uICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bv
c3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQb3N0KFRJbnRl
cm1GdW5jdGlvblByb3RvdHlwZSAmbm9kZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysK
KytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBv
c3QoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSkKKyt7CisrICAgIHJldHVybiBu
b2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFVuYXJ5UG9zdChU
SW50ZXJtVW5hcnkgJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisrUG9zdFJl
c3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCaW5hcnlQb3N0KFRJbnRlcm1CaW5hcnkgJm5vZGUp
CisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRUZXJuYXJ5UG9zdChUSW50ZXJtVGVybmFyeSAmbm9kZSkKKyt7CisrICAgIHJldHVy
biBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3aXp6bGVQ
b3N0KFRJbnRlcm1Td2l6emxlICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKwor
K1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0SWZFbHNlUG9zdChUSW50ZXJtSWZFbHNl
ICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0U3dpdGNoUG9zdChUSW50ZXJtU3dpdGNoICZub2RlKQorK3sKKysgICAg
cmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Q2Fz
ZVBvc3QoVEludGVybUNhc2UgJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsKKyt9CisrCisr
UG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRMb29wUG9zdChUSW50ZXJtTG9vcCAmbm9k
ZSkKKyt7CisrICAgIHJldHVybiBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdEJyYW5jaFBvc3QoVEludGVybUJyYW5jaCAmbm9kZSkKKyt7CisrICAgIHJldHVy
biBub2RlOworK30KKysKKytQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdERlY2xhcmF0
aW9uUG9zdChUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4gbm9kZTsK
Kyt9CisrCisrUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCbG9ja1Bvc3QoVEludGVy
bUJsb2NrICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQg
VEludGVybVJlYnVpbGQ6OnZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZub2Rl
KQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVybVJlYnVp
bGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9u
ICZub2RlKQorK3sKKysgICAgcmV0dXJuIG5vZGU7CisrfQorKworK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Qb3N0KAorKyAgICBUSW50
ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5vZGUpCisreworKyAgICByZXR1cm4gbm9k
ZTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIHNoCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCBiL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp
bmRleCAwMDAwMDAwLi4zMDk3ZTQwCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oCitAQCAtMCwwICsxLDMyOCBAQAor
Ky8vCisrLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKysvLworKworKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9J
TlRFUk1SRUJVSUxEX0hfCisrI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX0lO
VEVSTVJFQlVJTERfSF8KKysKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvSW50ZXJtVHJhdmVyc2UuaCIKKysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVl
X3V0aWwvTm9kZVR5cGUuaCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrLy8gV2Fsa3MgdGhl
IHRyZWUgdG8gcmVidWlsZCBub2Rlcy4KKysvLyBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvIGJl
IGRlcml2ZWQgd2l0aCBvdmVycmlkZGVuIHZpc2l0WFhYIGZ1bmN0aW9ucy4KKysvLworKy8vIEVh
Y2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGEgVmlzaXQgcGFyYW1ldGVy
IHNpbXBseSBoYXMgdGhlIHZpc2l0b3IgY2FsbGVkCisrLy8gZXhhY3RseSBvbmNlLCByZWdhcmRs
ZXNzIG9mIChwcmVWaXNpdCkgb3IgKHBvc3RWaXNpdCkgdmFsdWVzLgorKworKy8vIEVhY2ggdmlz
aXRYWFggZnVuY3Rpb24gdGhhdCBoYXMgYSBWaXNpdCBwYXJhbWV0ZXIgYmVoYXZlcyBhcyBmb2xs
b3dzOgorKy8vICAgICogSWYgKHByZVZpc2l0KToKKysvLyAgICAgIC0gVGhlIG5vZGUgaXMgdmlz
aXRlZCBiZWZvcmUgY2hpbGRyZW4gYXJlIHRyYXZlcnNlZC4KKysvLyAgICAgIC0gVGhlIHJldHVy
bmVkIHZhbHVlIGlzIHVzZWQgdG8gcmVwbGFjZSB0aGUgdmlzaXRlZCBub2RlLiBUaGUgcmV0dXJu
ZWQgdmFsdWUgbWF5IGJlIHRoZSBzYW1lCisrLy8gICAgICAgIGFzIHRoZSBvcmlnaW5hbCBub2Rl
LgorKy8vICAgICAgLSBJZiBtdWx0aXBsZSBub2RlcyBhcmUgcmV0dXJuZWQsIGNoaWxkcmVuIGFu
ZCBwb3N0IHZpc2l0cyBvZiB0aGUgcmV0dXJuZWQgbm9kZXMgYXJlIG5vdAorKy8vICAgICAgICBw
cmVmb3JtZWQsIGV2ZW4gaWYgaXQgaXMgYSBzaW5nbGV0b24gY29sbGVjdGlvbi4KKysvLyAgICAq
IElmIChjaGlsZFZpc2l0KQorKy8vICAgICAgLSBJZiBhbnkgbmV3IGNoaWxkcmVuIGFyZSByZXR1
cm5lZCwgdGhlIG5vZGUgaXMgYXV0b21hdGljYWxseSByZWJ1aWx0IHdpdGggdGhlIG5ldyBjaGls
ZHJlbgorKy8vICAgICAgICBiZWZvcmUgcG9zdCB2aXNpdC4KKysvLyAgICAgIC0gRGVwZW5kaW5n
IG9uIHRoZSB0eXBlIG9mIHRoZSBub2RlLCBudWxsIGNoaWxkcmVuIG1heSBiZSBkaXNjYXJkZWQu
CisrLy8gICAgICAtIElsbC10eXBlZCBjaGlsZHJlbiBjYXVzZSByZWJ1aWxkIGVycm9ycy4gSWxs
LXR5cGVkIG1lYW5zIHRoZSBub2RlIHRvIGF1dG9tYXRpY2FsbHkgcmVidWlsZAorKy8vICAgICAg
ICBjYW5ub3QgYWNjZXB0IGEgY2hpbGQgb2YgYSBjZXJ0YWluIHR5cGUgYXMgaW5wdXQgdG8gaXRz
IGNvbnN0cnVjdG9yLgorKy8vICAgICAgLSBPbmx5IGluc3RhbmNlcyBvZiBUSW50ZXJtQWdncmVn
YXRlQmFzZSBjYW4gYWNjZXB0IE11bHRpIHJlc3VsdHMgZm9yIGFueSBvZiBpdHMgY2hpbGRyZW4u
CisrLy8gICAgICAgIElmIHN1cHBsaWVkLCB0aGUgbm9kZXMgYXJlIHNwbGljZWQgY2hpbGRyZW4g
YXQgdGhlIHNwb3Qgb2YgdGhlIG9yaWdpbmFsIGNoaWxkLgorKy8vICAgICogSWYgKHBvc3RWaXNp
dCkKKysvLyAgICAgIC0gVGhlIG5vZGUgaXMgdmlzaXRlZCBhZnRlciBhbnkgY2hpbGRyZW4gYXJl
IHRyYXZlcnNlZC4KKysvLyAgICAgIC0gT25seSBhZnRlciBzdWNoIGEgcmVidWlsZCAob3IgbGFj
ayB0aGVyZW9mKSwgdGhlIHBvc3QtdmlzaXQgaXMgcGVyZm9ybWVkLgorKy8vCisrLy8gTm9kZXMg
aW4gdmlzaXQgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIHRvIGJlIG1vZGlmaWVkIGluIHBsYWNlLCBp
bmNsdWRpbmcgVEludGVybUFnZ3JlZ2F0ZUJhc2UKKysvLyBjaGlsZCBzZXF1ZW5jZXMuCisrLy8K
KysvLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsIHRoZSB2aXNpdFhYWCBmdW5j
dGlvbnMgc3VwcG9ydCBmdWxsIHByZSBhbmQgcG9zdCB0cmF2ZXJzYWwKKysvLyB3aXRob3V0IG1v
ZGlmeWluZyB0aGUgdmlzaXRlZCBub2Rlcy4KKysvLworK2NsYXNzIFRJbnRlcm1SZWJ1aWxkIDog
YW5nbGU6Ok5vbkNvcHlhYmxlCisreworKworKyAgICBlbnVtIGNsYXNzIEFjdGlvbgorKyAgICB7
CisrICAgICAgICBSZXBsYWNlU2luZ2xlLAorKyAgICAgICAgUmVwbGFjZU11bHRpLAorKyAgICAg
ICAgRHJvcCwKKysgICAgICAgIEZhaWwsCisrICAgIH07CisrCisrICBwdWJsaWM6CisrICAgIHN0
cnVjdCBGYWlsCisrICAgIHt9OworKworKyAgICBlbnVtIFZpc2l0Qml0cyA6IHNpemVfdAorKyAg
ICB7CisrICAgICAgICAvLyBObyBiaXRzIGFyZSBzZXQuCisrICAgICAgICBFbXB0eSA9IDB1LAor
KworKyAgICAgICAgLy8gQWxsb3cgdmlzaXQgb2YgcmV0dXJuZWQgbm9kZSdzIGNoaWxkcmVuLgor
KyAgICAgICAgQ2hpbGRyZW4gPSAxdSA8PCAwdSwKKysKKysgICAgICAgIC8vIEFsbG93IHBvc3Qg
dmlzaXQgb2YgcmV0dXJuZWQgbm9kZS4KKysgICAgICAgIFBvc3QgPSAxdSA8PCAxdSwKKysKKysg
ICAgICAgIC8vIElmIChDaGlsZHJlbikgYml0LCBvbmx5IHZpc2l0IGlmIHRoZSByZXR1cm5lZCBu
b2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBub2RlLgorKyAgICAgICAgQ2hpbGRyZW5S
ZXF1aXJlc1NhbWUgPSAxdSA8PCAydSwKKysKKysgICAgICAgIC8vIElmIChQb3N0KSBiaXQsIG9u
bHkgdmlzaXQgaWYgdGhlIHJldHVybmVkIG5vZGUgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFs
IG5vZGUuCisrICAgICAgICBQb3N0UmVxdWlyZXNTYW1lID0gMXUgPDwgM3UsCisrCisrICAgICAg
ICBSZXF1aXJlU2FtZSAgPSBDaGlsZHJlblJlcXVpcmVzU2FtZSB8IFBvc3RSZXF1aXJlc1NhbWUs
CisrICAgICAgICBOZWl0aGVyICAgICAgPSBFbXB0eSwKKysgICAgICAgIEJvdGggICAgICAgICA9
IENoaWxkcmVuIHwgUG9zdCwKKysgICAgICAgIEJvdGhXaGVuU2FtZSA9IEJvdGggfCBSZXF1aXJl
U2FtZSwKKysgICAgfTsKKysKKysgIHByaXZhdGU6CisrICAgIHN0cnVjdCBOb2RlU3RhY2tHdWFy
ZDsKKysKKysgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrICAgIHN0cnVjdCBDb25zTGlzdAor
KyAgICB7CisrICAgICAgICBUIHZhbHVlOworKyAgICAgICAgQ29uc0xpc3Q8VD4gKnRhaWw7Cisr
ICAgIH07CisrCisrICAgIGNsYXNzIEJhc2VSZXN1bHQKKysgICAgeworKyAgICAgICAgQmFzZVJl
c3VsdChjb25zdCBCYXNlUmVzdWx0ICYpID0gZGVsZXRlOworKyAgICAgICAgQmFzZVJlc3VsdCAm
b3BlcmF0b3I9KGNvbnN0IEJhc2VSZXN1bHQgJikgPSBkZWxldGU7CisrCisrICAgICAgcHVibGlj
OgorKyAgICAgICAgQmFzZVJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpID0gZGVmYXVsdDsKKysg
ICAgICAgIEJhc2VSZXN1bHQoQmFzZVJlc3VsdCAmb3RoZXIpOyAgLy8gRm9yIHN1YmNsYXNzIG1v
dmUgY29uc3RydWN0b3IgaW1wbHMKKysgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5v
ZGUsIFZpc2l0Qml0cyB2aXNpdCk7CisrICAgICAgICBCYXNlUmVzdWx0KFRJbnRlcm1Ob2RlICpu
b2RlLCBWaXNpdEJpdHMgdmlzaXQpOworKyAgICAgICAgQmFzZVJlc3VsdChudWxscHRyX3QpOwor
KyAgICAgICAgQmFzZVJlc3VsdChGYWlsKTsKKysgICAgICAgIEJhc2VSZXN1bHQoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2Rlcyk7CisrCisrICAgICAgICB2b2lkIG1vdmVBc3NpZ25J
bXBsKEJhc2VSZXN1bHQgJm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGFzc2lnbiBpbXBs
cworKworKyAgICAgICAgc3RhdGljIEJhc2VSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0b3I8VEludGVy
bU5vZGUgKj4gJiZub2Rlcyk7CisrCisrICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4K
KysgICAgICAgIHN0YXRpYyBCYXNlUmVzdWx0IE11bHRpKEl0ZXIgbm9kZXNCZWdpbiwgSXRlciBu
b2Rlc0VuZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiBub2RlczsKKysgICAgICAgICAgICBmb3IgKEl0ZXIgbm9kZXNDdXJyID0gbm9kZXNCZWdp
bjsgbm9kZXNDdXJyICE9IG5vZGVzRW5kOyArK25vZGVzQ3VycikKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIG5vZGVzLnB1c2hfYmFjaygqbm9kZXNDdXJyKTsKKysgICAgICAgICAg
ICB9CisrICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShub2Rlcyk7CisrICAgICAgICB9Cisr
CisrICAgICAgICBib29sIGlzRmFpbCgpIGNvbnN0OworKyAgICAgICAgYm9vbCBpc0Ryb3AoKSBj
b25zdDsKKysgICAgICAgIFRJbnRlcm1Ob2RlICpzaW5nbGUoKSBjb25zdDsKKysgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICptdWx0aSgpIGNvbnN0OworKworKyAgICAg
IHB1YmxpYzoKKysgICAgICAgIEFjdGlvbiBtQWN0aW9uOworKyAgICAgICAgVmlzaXRCaXRzIG1W
aXNpdDsKKysgICAgICAgIFRJbnRlcm1Ob2RlICptU2luZ2xlOworKyAgICAgICAgc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gbU11bHRpOworKyAgICB9OworKworKyAgcHVibGljOgorKyAgICBj
bGFzcyBQcmVSZXN1bHQgOiBwcml2YXRlIEJhc2VSZXN1bHQKKysgICAgeworKyAgICAgICAgZnJp
ZW5kIGNsYXNzIFRJbnRlcm1SZWJ1aWxkOworKworKyAgICAgIHB1YmxpYzoKKysgICAgICAgIFBy
ZVJlc3VsdChQcmVSZXN1bHQgJiZvdGhlcik7CisrICAgICAgICBQcmVSZXN1bHQoVEludGVybU5v
ZGUgJm5vZGUsIFZpc2l0Qml0cyB2aXNpdCA9IFZpc2l0Qml0czo6Qm90aFdoZW5TYW1lKTsKKysg
ICAgICAgIFByZVJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSwgVmlzaXRCaXRzIHZpc2l0ID0gVmlz
aXRCaXRzOjpCb3RoV2hlblNhbWUpOworKyAgICAgICAgUHJlUmVzdWx0KG51bGxwdHJfdCk7ICAv
LyBVc2VkIHRvIGRyb3AgYSBub2RlLgorKyAgICAgICAgUHJlUmVzdWx0KEZhaWwpOyAgICAgICAv
LyBVc2VkIHRvIHNpZ25hbCBmYWlsdXJlLgorKworKyAgICAgICAgdm9pZCBvcGVyYXRvcj0oUHJl
UmVzdWx0ICYmb3RoZXIpOworKworKyAgICAgICAgc3RhdGljIFByZVJlc3VsdCBNdWx0aShzdGQ6
OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAmJm5vZGVzKQorKyAgICAgICAgeworKyAgICAgICAgICAg
IHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUobm9kZXMpKTsKKysgICAgICAgIH0K
KysKKysgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorKyAgICAgICAgc3RhdGljIFBy
ZVJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisrICAgICAgICB7
CisrICAgICAgICAgICAgcmV0dXJuIEJhc2VSZXN1bHQ6Ok11bHRpKG5vZGVzQmVnaW4sIG5vZGVz
RW5kKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRHJvcDsK
KysgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRmFpbDsKKysgICAgICAgIHVzaW5nIEJhc2VS
ZXN1bHQ6Om11bHRpOworKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6c2luZ2xlOworKworKyAg
ICAgIHByaXZhdGU6CisrICAgICAgICBQcmVSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKTsKKysg
ICAgfTsKKysKKysgICAgY2xhc3MgUG9zdFJlc3VsdCA6IHByaXZhdGUgQmFzZVJlc3VsdAorKyAg
ICB7CisrICAgICAgICBmcmllbmQgY2xhc3MgVEludGVybVJlYnVpbGQ7CisrCisrICAgICAgcHVi
bGljOgorKyAgICAgICAgUG9zdFJlc3VsdChQb3N0UmVzdWx0ICYmb3RoZXIpOworKyAgICAgICAg
UG9zdFJlc3VsdChUSW50ZXJtTm9kZSAmbm9kZSk7CisrICAgICAgICBQb3N0UmVzdWx0KFRJbnRl
cm1Ob2RlICpub2RlKTsKKysgICAgICAgIFBvc3RSZXN1bHQobnVsbHB0cl90KTsgIC8vIFVzZWQg
dG8gZHJvcCBhIG5vZGUKKysgICAgICAgIFBvc3RSZXN1bHQoRmFpbCk7ICAgICAgIC8vIFVzZWQg
dG8gc2lnbmFsIGZhaWx1cmUuCisrCisrICAgICAgICB2b2lkIG9wZXJhdG9yPShQb3N0UmVzdWx0
ICYmb3RoZXIpOworKworKyAgICAgICAgc3RhdGljIFBvc3RSZXN1bHQgTXVsdGkoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKysgICAgICAgIHsKKysgICAgICAgICAgICByZXR1
cm4gQmFzZVJlc3VsdDo6TXVsdGkoc3RkOjptb3ZlKG5vZGVzKSk7CisrICAgICAgICB9CisrCisr
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4KKysgICAgICAgIHN0YXRpYyBQb3N0UmVz
dWx0IE11bHRpKEl0ZXIgbm9kZXNCZWdpbiwgSXRlciBub2Rlc0VuZCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICByZXR1cm4gQmFzZVJlc3VsdDo6TXVsdGkobm9kZXNCZWdpbiwgbm9kZXNFbmQp
OworKyAgICAgICAgfQorKworKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNEcm9wOworKyAg
ICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNGYWlsOworKyAgICAgICAgdXNpbmcgQmFzZVJlc3Vs
dDo6bXVsdGk7CisrICAgICAgICB1c2luZyBCYXNlUmVzdWx0OjpzaW5nbGU7CisrCisrICAgICAg
cHJpdmF0ZToKKysgICAgICAgIFBvc3RSZXN1bHQoQmFzZVJlc3VsdCAmJm90aGVyKTsKKysgICAg
fTsKKysKKysgIHB1YmxpYzoKKysgICAgVEludGVybVJlYnVpbGQoVENvbXBpbGVyICZjb21waWxl
ciwgYm9vbCBwcmVWaXNpdCwgYm9vbCBwb3N0VmlzaXQpOworKworKyAgICB2aXJ0dWFsIH5USW50
ZXJtUmVidWlsZCgpOworKworKyAgICAvLyBSZWJ1aWxkcyB0aGUgdHJlZSBzdGFydGluZyBhdCB0
aGUgcHJvdmlkZWQgcm9vdC4gSWYgYSBuZXcgbm9kZSB3b3VsZCBiZSByZXR1cm5lZCBmb3IgdGhl
CisrICAgIC8vIHJvb3QsIHRoZSByb290IG5vZGUncyBjaGlsZHJlbiBiZWNvbWUgdGhhdCBvZiB0
aGUgbmV3IG5vZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBpZiBmYWlsdXJlCisrICAgIC8vIG9j
Y3VycmVkLgorKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZFJvb3QoVEludGVybUJs
b2NrICZyb290KTsKKysKKysgIHByb3RlY3RlZDoKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlz
aXRTeW1ib2xQcmUoVEludGVybVN5bWJvbCAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0
IHZpc2l0Q29uc3RhbnRVbmlvblByZShUSW50ZXJtQ29uc3RhbnRVbmlvbiAmbm9kZSk7CisrICAg
IHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRQcmVwcm9j
ZXNzb3JEaXJlY3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSk7Cisr
ICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0VW5hcnlQcmUoVEludGVybVVuYXJ5ICZub2RlKTsK
KysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCaW5hcnlQcmUoVEludGVybUJpbmFyeSAmbm9k
ZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFy
eSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0U3dpenpsZVByZShUSW50ZXJt
U3dpenpsZSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0SWZFbHNlUHJlKFRJ
bnRlcm1JZkVsc2UgJm5vZGUpOworKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN3aXRjaFBy
ZShUSW50ZXJtU3dpdGNoICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRDYXNl
UHJlKFRJbnRlcm1DYXNlICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRMb29w
UHJlKFRJbnRlcm1Mb29wICZub2RlKTsKKysgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCcmFu
Y2hQcmUoVEludGVybUJyYW5jaCAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0
RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKTsKKysgICAgdmlydHVhbCBQ
cmVSZXN1bHQgdmlzaXRCbG9ja1ByZShUSW50ZXJtQmxvY2sgJm5vZGUpOworKyAgICB2aXJ0dWFs
IFByZVJlc3VsdCB2aXNpdEFnZ3JlZ2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKysg
ICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmluaXRpb25QcmUoVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbiAmbm9kZSk7CisrICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0R2xv
YmFsUXVhbGlmaWVyRGVjbGFyYXRpb25QcmUoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uICZub2RlKTsKKysKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0U3ltYm9sUG9zdChU
SW50ZXJtU3ltYm9sICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0Q29uc3Rh
bnRVbmlvblBvc3QoVEludGVybUNvbnN0YW50VW5pb24gJm5vZGUpOworKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJvdG90
eXBlICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0UHJlcHJvY2Vzc29yRGly
ZWN0aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZub2RlKTsKKysgICAgdmly
dHVhbCBQb3N0UmVzdWx0IHZpc2l0VW5hcnlQb3N0KFRJbnRlcm1VbmFyeSAmbm9kZSk7CisrICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBvc3QoVEludGVybUJpbmFyeSAmbm9kZSk7
CisrICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5
ICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0U3dpenpsZVBvc3QoVEludGVy
bVN3aXp6bGUgJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0
KFRJbnRlcm1JZkVsc2UgJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRTd2l0
Y2hQb3N0KFRJbnRlcm1Td2l0Y2ggJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlz
aXRDYXNlUG9zdChUSW50ZXJtQ2FzZSAmbm9kZSk7CisrICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2
aXNpdExvb3BQb3N0KFRJbnRlcm1Mb29wICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0UmVzdWx0
IHZpc2l0QnJhbmNoUG9zdChUSW50ZXJtQnJhbmNoICZub2RlKTsKKysgICAgdmlydHVhbCBQb3N0
UmVzdWx0IHZpc2l0RGVjbGFyYXRpb25Qb3N0KFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSk7Cisr
ICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJsb2NrUG9zdChUSW50ZXJtQmxvY2sgJm5vZGUp
OworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dy
ZWdhdGUgJm5vZGUpOworKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvbkRlZmlu
aXRpb25Qb3N0KFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJm5vZGUpOworKyAgICB2aXJ0dWFs
IFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblBvc3QoVEludGVybUds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKTsKKysKKysgICAgLy8gQ2FuIGJlIHVzZWQg
dG8gcmVidWlsZCBhIHNwZWNpZmljIG5vZGUgZHVyaW5nIGEgdHJhdmVyc2FsLiBVc2VmdWwgZm9y
IGZpbmUgY29udHJvbCBvZgorKyAgICAvLyByZWJ1aWxkaW5nIGEgbm9kZSdzIGNoaWxkcmVuLgor
KyAgICBBTkdMRV9OT19ESVNDQVJEIFBvc3RSZXN1bHQgcmVidWlsZChUSW50ZXJtTm9kZSAmbm9k
ZSk7CisrCisrICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBh
IG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorKyAg
ICAvLyBiZWNvbWUgdGhhdCBvZiB0aGUgbmV3IG5vZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBp
ZiBmYWlsdXJlIG9jY3VycmVkLgorKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZElu
UGxhY2UoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisrCisrICAgIC8vIFJlYnVpbGRzIHRoZSBw
cm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBhIG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0
aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorKyAgICAvLyBiZWNvbWUgdGhhdCBvZiB0aGUgbmV3IG5v
ZGUgaW5zdGVhZC4gUmV0dXJucyBmYWxzZSBpZiBmYWlsdXJlIG9jY3VycmVkLgorKyAgICBBTkdM
RV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2UoVEludGVybUJsb2NrICZub2RlKTsKKysK
KysgICAgLy8gUmVidWlsZHMgdGhlIHByb3ZpZGVkIG5vZGUgaW4gcGxhY2UuIElmIGEgbmV3IG5v
ZGUgd291bGQgYmUgcmV0dXJuZWQsIHRoZSBvbGQgbm9kZSdzIGNoaWxkcmVuCisrICAgIC8vIGJl
Y29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1
cmUgb2NjdXJyZWQuCisrICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCByZWJ1aWxkSW5QbGFjZShU
SW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpOworKworKyAgICAvLyBJZiBjdXJyZW50bHkgYXQgb3Ig
YmVsb3cgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBib2R5LCB0aGlzIHJldHVybnMgdGhlIGZ1bmN0
aW9uIHRoYXQgZW5jbG9zZXMKKysgICAgLy8gdGhlIGN1cnJlbnRseSB2aXNpdGVkIG5vZGUuIChU
aGlzIHJldHVybnMgbnVsbCBpZiBhdCBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG5vZGUuKQorKyAg
ICBjb25zdCBURnVuY3Rpb24gKmdldFBhcmVudEZ1bmN0aW9uKCkgY29uc3Q7CisrCisrICAgIFRJ
bnRlcm1Ob2RlICpnZXRQYXJlbnROb2RlKHNpemVfdCBvZmZzZXQgPSAwKSBjb25zdDsKKysKKysg
IHByaXZhdGU6CisrICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgorKyAgICBBTkdMRV9OT19E
SVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2VJbXBsKE5vZGUgJm5vZGUpOworKworKyAgICBQb3N0
UmVzdWx0IHRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZub2RlKTsKKysKKysgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIE5vZGU+CisrICAgIE5vZGUgKnRyYXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5v
ZGUpOworKworKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KKysgICAgYm9vbCB0cmF2ZXJz
ZUFueUFzKFRJbnRlcm1Ob2RlICZub2RlLCBOb2RlIComb3V0KTsKKysKKysgICAgUHJlUmVzdWx0
IHRyYXZlcnNlUHJlKFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUpOworKyAgICBUSW50ZXJtTm9k
ZSAqdHJhdmVyc2VDaGlsZHJlbihOb2RlVHlwZSBjdXJyTm9kZVR5cGUsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaXRCaXRzIHZpc2l0KTsKKysg
ICAgUG9zdFJlc3VsdCB0cmF2ZXJzZVBvc3QoTm9kZVR5cGUgbm9kZVR5cGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmlzaXRCaXRzIHZpc2l0KTsKKysKKysgICAgYm9vbCB0cmF2
ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlQmFzZSAmbm9kZSk7Cisr
CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVVuYXJ5Q2hpbGRyZW4oVEludGVybVVuYXJ5ICZu
b2RlKTsKKysgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQmluYXJ5Q2hpbGRyZW4oVEludGVybUJp
bmFyeSAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVRlcm5hcnlDaGlsZHJlbihU
SW50ZXJtVGVybmFyeSAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVN3aXp6bGVD
aGlsZHJlbihUSW50ZXJtU3dpenpsZSAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJz
ZUlmRWxzZUNoaWxkcmVuKFRJbnRlcm1JZkVsc2UgJm5vZGUpOworKyAgICBUSW50ZXJtTm9kZSAq
dHJhdmVyc2VTd2l0Y2hDaGlsZHJlbihUSW50ZXJtU3dpdGNoICZub2RlKTsKKysgICAgVEludGVy
bU5vZGUgKnRyYXZlcnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNlICZub2RlKTsKKysgICAgVElu
dGVybU5vZGUgKnRyYXZlcnNlTG9vcENoaWxkcmVuKFRJbnRlcm1Mb29wICZub2RlKTsKKysgICAg
VEludGVybU5vZGUgKnRyYXZlcnNlQnJhbmNoQ2hpbGRyZW4oVEludGVybUJyYW5jaCAmbm9kZSk7
CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZURlY2xhcmF0aW9uQ2hpbGRyZW4oVEludGVybURl
Y2xhcmF0aW9uICZub2RlKTsKKysgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQmxvY2tDaGlsZHJl
bihUSW50ZXJtQmxvY2sgJm5vZGUpOworKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VBZ2dyZWdh
dGVDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKysgICAgVEludGVybU5vZGUgKnRy
YXZlcnNlRnVuY3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAmbm9kZSk7CisrICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uQ2hpbGRyZW4oCisrICAgICAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24gJm5vZGUpOworKworKyAgcHJvdGVjdGVkOgorKyAgICBUQ29tcGlsZXIgJm1Db21waWxlcjsK
KysgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisrICAgIGNvbnN0IFRGdW5jdGlvbiAq
bVBhcmVudEZ1bmMgPSBudWxscHRyOworKyAgICBHZXROb2RlVHlwZSBnZXROb2RlVHlwZTsKKysK
KysgIHByaXZhdGU6CisrICAgIENvbnNMaXN0PFRJbnRlcm1Ob2RlICo+IG1Ob2RlU3RhY2t7bnVs
bHB0ciwgbnVsbHB0cn07CisrICAgIGJvb2wgbVByZVZpc2l0OworKyAgICBib29sIG1Qb3N0Vmlz
aXQ7CisrfTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugc2gKKysKKysjZW5kaWYgIC8vIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXworZGlmZiAtLWdpdCBhL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Ob2RlVHlwZS5oIGIvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl
eCAwMDAwMDAwLi5hNTllNWFmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvTm9kZVR5cGUuaAorQEAgLTAsMCArMSwxNTUgQEAKKysvLworKy8v
IENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisrLy8KKysKKysjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVf
SF8KKysjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZUEVfSF8KKysK
KysjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2Uu
aCIKKysKKytuYW1lc3BhY2Ugc2gKKyt7CisrCisrZW51bSBjbGFzcyBOb2RlVHlwZQorK3sKKysg
ICAgVW5rbm93biwKKysgICAgU3ltYm9sLAorKyAgICBDb25zdGFudFVuaW9uLAorKyAgICBGdW5j
dGlvblByb3RvdHlwZSwKKysgICAgUHJlcHJvY2Vzc29yRGlyZWN0aXZlLAorKyAgICBVbmFyeSwK
KysgICAgQmluYXJ5LAorKyAgICBUZXJuYXJ5LAorKyAgICBTd2l6emxlLAorKyAgICBJZkVsc2Us
CisrICAgIFN3aXRjaCwKKysgICAgQ2FzZSwKKysgICAgRnVuY3Rpb25EZWZpbml0aW9uLAorKyAg
ICBBZ2dyZWdhdGUsCisrICAgIEJsb2NrLAorKyAgICBHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
biwKKysgICAgRGVjbGFyYXRpb24sCisrICAgIExvb3AsCisrICAgIEJyYW5jaCwKKyt9OworKwor
Ky8vIFRoaXMgaXMgYSBmdW5jdGlvbiBsaWtlIG9iamVjdCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24g
dGhhdCBzdGFjayBhbGxvY2F0ZXMgdGhpcyBiZWNhdXNlCisrLy8gVEludGVybVRyYXZlcnNlciBp
cyBhIGhlYXZ5IG9iamVjdCB0byBjb25zdHJ1Y3QuCisrY2xhc3MgR2V0Tm9kZVR5cGUgOiBwcml2
YXRlIFRJbnRlcm1UcmF2ZXJzZXIKKyt7CisrICAgIE5vZGVUeXBlIG5vZGVUeXBlOworKworKyAg
cHVibGljOgorKyAgICBHZXROb2RlVHlwZSgpIDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxz
ZSwgZmFsc2UpIHt9CisrCisrICAgIE5vZGVUeXBlIG9wZXJhdG9yKCkoVEludGVybU5vZGUgJm5v
ZGUpCisrICAgIHsKKysgICAgICAgIG5vZGUudmlzaXQoVmlzaXQ6OlByZVZpc2l0LCB0aGlzKTsK
KysgICAgICAgIHJldHVybiBub2RlVHlwZTsKKysgICAgfQorKworKyAgcHJpdmF0ZToKKysgICAg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRlIHsgbm9kZVR5cGUgPSBO
b2RlVHlwZTo6U3ltYm9sOyB9CisrCisrICAgIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRl
cm1Db25zdGFudFVuaW9uICopIG92ZXJyaWRlIHsgbm9kZVR5cGUgPSBOb2RlVHlwZTo6Q29uc3Rh
bnRVbmlvbjsgfQorKworKyAgICB2b2lkIHZpc2l0RnVuY3Rpb25Qcm90b3R5cGUoVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0g
Tm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOworKyAgICB9CisrCisrICAgIHZvaWQgdmlzaXRQ
cmVwcm9jZXNzb3JEaXJlY3RpdmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAqKSBvdmVy
cmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpQcmVwcm9jZXNzb3JE
aXJlY3RpdmU7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRl
cm1Td2l6emxlICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5
cGU6OlN3aXp6bGU7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9v
bCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqKSBvdmVycmlkZQorKyAgICB7Cisr
ICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCaW5hcnk7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkg
Kikgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6VW5hcnk7
CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFRlcm5h
cnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5v
ZGVUeXBlID0gTm9kZVR5cGU6OlRlcm5hcnk7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAg
IH0KKysKKysgICAgYm9vbCB2aXNpdElmRWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqKSBvdmVy
cmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpJZkVsc2U7CisrICAg
ICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdFN3aXRjaChWaXNp
dCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9
IE5vZGVUeXBlOjpTd2l0Y2g7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysg
ICAgYm9vbCB2aXNpdENhc2UoVmlzaXQsIFRJbnRlcm1DYXNlICopIG92ZXJyaWRlCisrICAgIHsK
KysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkNhc2U7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvbihWaXNpdCwg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBu
b2RlVHlwZSA9IE5vZGVUeXBlOjpGdW5jdGlvbkRlZmluaXRpb247CisrICAgICAgICByZXR1cm4g
ZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICBub2RlVHlwZSA9IE5vZGVU
eXBlOjpBZ2dyZWdhdGU7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAg
Ym9vbCB2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKikgb3ZlcnJpZGUKKysgICAgewor
KyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6QmxvY2s7CisrICAgICAgICByZXR1cm4gZmFs
c2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
KFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKysg
ICAgeworKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6R2xvYmFsUXVhbGlmaWVyRGVjbGFy
YXRpb247CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNp
dERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6RGVjbGFyYXRpb247CisrICAgICAgICBy
ZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRl
cm1Mb29wICopIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6
Okxvb3A7CisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgIH0KKysKKysgICAgYm9vbCB2aXNp
dEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCAqKSBvdmVycmlkZQorKyAgICB7CisrICAgICAg
ICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCcmFuY2g7CisrICAgICAgICByZXR1cm4gZmFsc2U7Cisr
ICAgIH0KKyt9OworKworK30gIC8vIG5hbWVzcGFjZSBzaAorKworKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9OT0RFVFlQRV9IXworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3V0aWwuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5j
cHAKK2luZGV4IDM0NjQ3MGUuLjU4MmRkYzcgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci91dGlsLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5jcHAK
K0BAIC04MDQsNiArODA0LDEwIEBAIGJvb2wgSXNPdXRwdXRNZXRhbChTaFNoYWRlck91dHB1dCBv
dXRwdXQpCisgeworICAgICByZXR1cm4gb3V0cHV0ID09IFNIX0dMU0xfTUVUQUxfT1VUUFVUOwor
IH0KKytib29sIElzT3V0cHV0TWV0YWxEaXJlY3QoU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQorK3sK
KysgICAgcmV0dXJuIG91dHB1dCA9PSBTSF9NU0xfTUVUQUxfT1VUUFVUOworK30KKyAKKyBib29s
IElzSW5TaGFkZXJTdG9yYWdlQmxvY2soVEludGVybVR5cGVkICpub2RlKQorIHsKK2RpZmYgLS1n
aXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmggYi9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci91dGlsLmgKK2luZGV4IDUzZWU3NTUuLmY5YWU5YmIgMTAwNjQ0CistLS0gYS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci91dGlsLmgKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0
aWwuaAorQEAgLTc3LDYgKzc3LDcgQEAgYm9vbCBJc091dHB1dEdMU0woU2hTaGFkZXJPdXRwdXQg
b3V0cHV0KTsKKyBib29sIElzT3V0cHV0SExTTChTaFNoYWRlck91dHB1dCBvdXRwdXQpOworIGJv
b2wgSXNPdXRwdXRWdWxrYW4oU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKyBib29sIElzT3V0cHV0
TWV0YWwoU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKytib29sIElzT3V0cHV0TWV0YWxEaXJlY3Qo
U2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKKyAKKyBib29sIElzSW5TaGFkZXJTdG9yYWdlQmxvY2so
VEludGVybVR5cGVkICpub2RlKTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9T
eXN0ZW1JbmZvLmNwcCBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCitpbmRleCBm
NzQ4OTQ5Li41NGMzZGI1IDEwMDY0NAorLS0tIGEvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5m
by5jcHAKKysrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uY3BwCitAQCAtNDcsNiAr
NDcsOCBAQCBzdGQ6OnN0cmluZyBWZW5kb3JOYW1lKFZlbmRvcklEIHZlbmRvcikKKyAgICAgICAg
ICAgICByZXR1cm4gIlZpdmFudGUiOworICAgICAgICAgY2FzZSBrVmVuZG9ySURfVk1XYXJlOgor
ICAgICAgICAgICAgIHJldHVybiAiVk1XYXJlIjsKKysgICAgICAgIGNhc2Uga1ZlbmRvcklEX0Fw
cGxlOgorKyAgICAgICAgICAgIHJldHVybiAiQXBwbGUiOworICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICByZXR1cm4gIlVua25vd24gKCIgKyBzdGQ6OnRvX3N0cmluZyh2ZW5kb3IpICsg
IikiOworICAgICB9CitAQCAtMTYwLDYgKzE2MiwxMSBAQCBib29sIElzVml2YW50ZShWZW5kb3JJ
RCB2ZW5kb3JJZCkKKyAgICAgcmV0dXJuIHZlbmRvcklkID09IGtWZW5kb3JJRF9WaXZhbnRlOwor
IH0KKyAKKytib29sIElzQXBwbGUoVmVuZG9ySUQgdmVuZG9ySWQpCisreworKyAgICByZXR1cm4g
dmVuZG9ySWQgPT0ga1ZlbmRvcklEX0FwcGxlOworK30KKysKKyBib29sIFBhcnNlQU1EQnJhaG1h
RHJpdmVyVmVyc2lvbihjb25zdCBzdGQ6OnN0cmluZyAmY29udGVudCwgc3RkOjpzdHJpbmcgKnZl
cnNpb24pCisgeworICAgICBjb25zdCBzaXplX3QgYmVnaW4gPSBjb250ZW50LmZpbmRfZmlyc3Rf
b2YoIjAxMjM0NTY3ODkiKTsKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1J
bmZvLmggYi9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKK2luZGV4IGFkMTc2OTguLjUw
OWExZTkgMTAwNjQ0CistLS0gYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgKKysrKyBi
L3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaAorQEAgLTY3LDkgKzY3LDggQEAgc3RydWN0
IFN5c3RlbUluZm8KKyAgICAgYm9vbCBpc0FNRFN3aXRjaGFibGUgPSBmYWxzZTsKKyAgICAgLy8g
T25seSB0cnVlIG9uIGR1YWwtR1BVIE1hYyBsYXB0b3BzLgorICAgICBib29sIGlzTWFjU3dpdGNo
YWJsZSA9IGZhbHNlOworLSAgICAvLyBPbmx5IHRydWUgb24gQXBwbGUgU2lsaWNvbiBNYWNzIHdo
ZW4gcnVubmluZyBpT1MgYmluYXJpZXMuCistICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5h
cHBsZS5jb20vZG9jdW1lbnRhdGlvbi9mb3VuZGF0aW9uL25zcHJvY2Vzc2luZm8vMzYwODU1Ni1p
b3NhcHBvbm1hYworLSAgICBib29sIGlzaU9TQXBwT25NYWMgPSBmYWxzZTsKKysgICAgLy8gT25s
eSB0cnVlIG9uIEFwcGxlIFNpbGljb24gTWFjcyB3aGVuIHJ1bm5pbmcgaW4gbWFjQ2F0YWx5c3Qu
CisrICAgIGJvb2wgbmVlZHNFQUdMT25NYWMgICA9IGZhbHNlOworIAorICAgICAvLyBPbmx5IGF2
YWlsYWJsZSBvbiBBbmRyb2lkCisgICAgIHN0ZDo6c3RyaW5nIG1hY2hpbmVNYW51ZmFjdHVyZXI7
CitAQCAtOTksNiArOTgsNyBAQCBjb25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX0ludGVsICAg
ID0gMHg4MDg2OworIGNvbnN0ZXhwciBWZW5kb3JJRCBrVmVuZG9ySURfTlZJRElBICAgPSAweDEw
REU7CisgY29uc3RleHByIFZlbmRvcklEIGtWZW5kb3JJRF9RdWFsY29tbSA9IDB4NTE0MzsKKyBj
b25zdGV4cHIgVmVuZG9ySUQga1ZlbmRvcklEX1ZNV2FyZSAgID0gMHgxNWFkOworK2NvbnN0ZXhw
ciBWZW5kb3JJRCBrVmVuZG9ySURfQXBwbGUgICAgPSAweDEwNkI7CisgCisgLy8gS25vd24gbm9u
LVBDSSAoaS5lLiBLaHJvbm9zLXJlZ2lzdGVyZWQpIHZlbmRvciBJRHMKKyBjb25zdGV4cHIgVmVu
ZG9ySUQga1ZlbmRvcklEX1ZpdmFudGUgICAgID0gMHgxMDAwMTsKK0BAIC0xMjQsNiArMTI0LDcg
QEAgYm9vbCBJc1N3aWZ0c2hhZGVyKFZlbmRvcklEIHZlbmRvcklkKTsKKyBib29sIElzVmVyaVNp
bGljb24oVmVuZG9ySUQgdmVuZG9ySWQpOworIGJvb2wgSXNWTVdhcmUoVmVuZG9ySUQgdmVuZG9y
SWQpOworIGJvb2wgSXNWaXZhbnRlKFZlbmRvcklEIHZlbmRvcklkKTsKKytib29sIElzQXBwbGUo
VmVuZG9ySUQgdmVuZG9ySWQpOworIAorIC8vIFVzZSBhIGhldXJpc3RpYyB0byBhdHRlbXB0IHRv
IGZpbmQgdGhlIEdQVSB1c2VkIGZvciAzRCBncmFwaGljcy4gU2V0cyBhY3RpdmVHUFVJbmRleCwK
KyAvLyBpc09wdGltdXMsIGFuZCBpc0FNRFN3aXRjaGFibGUuCitkaWZmIC0tZ2l0IGEvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbSBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3Rl
bUluZm9fYXBwbGUubW0KK2luZGV4IGM3NzU2ZjYuLjE1MDBmZmYgMTAwNjQ0CistLS0gYS9zcmMv
Z3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCisrKysgYi9zcmMvZ3B1X2luZm9fdXRp
bC9TeXN0ZW1JbmZvX2FwcGxlLm1tCitAQCAtMSw1ICsxLDUgQEAKKyAvLworLS8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr
Ly8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisgLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworZGlmZiAt
LWdpdCBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9faW9zLmNwcCBiL3NyYy9ncHVfaW5m
b191dGlsL1N5c3RlbUluZm9faW9zLmNwcAoraW5kZXggMzIzYWYyYy4uN2E5ZDlmYSAxMDA2NDQK
Ky0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9faW9zLmNwcAorKysrIGIvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3MuY3BwCitAQCAtMTgsOCArMTgsMTYgQEAgbmFtZXNw
YWNlIGFuZ2xlCisgYm9vbCBHZXRTeXN0ZW1JbmZvX2lvcyhTeXN0ZW1JbmZvICppbmZvKQorIHsK
KyAgICAgeworKyAgICAgICAgLy8gICAgICAgIEdQVURldmljZUluZm8gZGV2aWNlSW5mbzsKKysg
ICAgICAgIC8vICAgICAgICBkZXZpY2VJbmZvLnZlbmRvcklkICAgICAgPSBrVmVuZG9ySURfQXBw
bGU7CisrICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby5kZXZpY2VJZCAgICAgID0gMDsKKysg
ICAgICAgIC8vICAgICAgICBkZXZpY2VJbmZvLmRyaXZlclZlbmRvciAgPSAiQXBwbGUiOworKyAg
ICAgICAgLy8gICAgICAgIGRldmljZUluZm8uZHJpdmVyVmVyc2lvbiA9ICIwLjAiOworKyAgICAg
ICAgLy8gICAgICAgIGRldmljZUluZm8uZHJpdmVyRGF0ZSAgICA9ICIxLzEvMTk3MCI7CisrCisg
ICAgICAgICAvLyBUT0RPKGFuZ2xlYnVnLmNvbS80Mjc1KTogR2V0IHRoZSBhY3R1YWwgc3lzdGVt
IHZlcnNpb24uCisgICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Cisr
ICAgICAgICAvLyBpbmZvLT5ncHVzLnB1c2hfYmFjayhkZXZpY2VJbmZvKTsKKyAgICAgfQorIAor
ICAgICByZXR1cm4gdHJ1ZTsKK2RpZmYgLS1naXQgYS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1J
bmZvX21hY29zLm1tIGIvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19tYWNvcy5tbQoraW5k
ZXggYjFjZDA1NS4uYzVlMDM5ZSAxMDA2NDQKKy0tLSBhL3NyYy9ncHVfaW5mb191dGlsL1N5c3Rl
bUluZm9fbWFjb3MubW0KKysrKyBiL3NyYy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fbWFjb3Mu
bW0KK0BAIC0zMjIsNiArMzIyLDEwIEBAIGJvb2wgR2V0U3lzdGVtSW5mb19tYWMoU3lzdGVtSW5m
byAqaW5mbykKKyAgICAgICAgIGluZm8tPmlzTWFjU3dpdGNoYWJsZSA9IHRydWU7CisgICAgIH0K
KyAgICAgCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmlu
ZWQoQU5HTEVfQ1BVX0FSTTY0KQorKyAgICBpbmZvLT5uZWVkc0VBR0xPbk1hYyA9IHRydWU7Cisr
I2VuZGlmCisrCisgICAgIHJldHVybiB0cnVlOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvQ2Fwcy5jcHAgYi9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKK2luZGV4IGY5MDY3ODMuLjc5
MzEwMDkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKKysrKyBiL3NyYy9saWJB
TkdMRS9DYXBzLmNwcAorQEAgLTE3MCw4ICsxNzAsOCBAQCBzdGF0aWMgYm9vbCBHZXRGb3JtYXRT
dXBwb3J0QmFzZShjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMsCisgeworICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcXVpcmVkRm9ybWF0c1NpemU7IGkrKykKKyAgICAgewor
LSAgICAgICAgY29uc3QgVGV4dHVyZUNhcHMgJmNhcCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJl
ZEZvcm1hdHNbaV0pOworIAorKyAgICAgICAgY29uc3QgVGV4dHVyZUNhcHMgJmNhcCA9IHRleHR1
cmVDYXBzLmdldChyZXF1aXJlZEZvcm1hdHNbaV0pOworICAgICAgICAgaWYgKHJlcXVpcmVzVGV4
dHVyaW5nICYmICFjYXAudGV4dHVyYWJsZSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CitAQCAtNDYyLDcgKzQ2Miw2IEBAIHN0YXRpYyBib29sIERldGVybWluZUFTVENM
RFJUZXh0dXJlU3VwcG9ydChjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVyZUNhcHMpCisgICAg
ICAgICBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSLCAgR0xfQ09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIsCisgICAgICAgICBHTF9DT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiwgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
QVNUQ18xMngxMl9LSFIsCisgICAgIH07CistCisgICAgIHJldHVybiBHZXRGb3JtYXRTdXBwb3J0
KHRleHR1cmVDYXBzLCByZXF1aXJlZEZvcm1hdHMsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwg
ZmFsc2UpOworIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAgYi9z
cmMvbGliQU5HTEUvRGlzcGxheS5jcHAKK2luZGV4IGRkZTQzMzcuLjY1NzgxNGYgMTAwNjQ0Cist
LS0gYS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9EaXNwbGF5
LmNwcAorQEAgLTE4MSw3ICsxODEsMTMgQEAgRUdMQXR0cmliIEdldERpc3BsYXlUeXBlRnJvbUVu
dmlyb25tZW50KCkKKyAgICAgICAgIHJldHVybiBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9OVUxM
X0FOR0xFOworICAgICB9CisgI2VuZGlmCisrI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX01FVEFM
KQorKyAgICBpZiAoYW5nbGVEZWZhdWx0RW52ID09ICJtZXRhbCIpCisrICAgIHsKKysgICAgICAg
IHJldHVybiBFR0xfUExBVEZPUk1fQU5HTEVfVFlQRV9NRVRBTF9BTkdMRTsKKysgICAgfQorIAor
KyNlbmRpZgorICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyAgICAgcmV0dXJuIEVH
TF9QTEFURk9STV9BTkdMRV9UWVBFX0QzRDExX0FOR0xFOworICNlbGlmIGRlZmluZWQoQU5HTEVf
RU5BQkxFX0QzRDkpCitAQCAtMTMyNSw2ICsxMzMxLDQ3IEBAIEVycm9yIERpc3BsYXk6Om1ha2VD
dXJyZW50KGdsOjpDb250ZXh0ICpwcmV2aW91c0NvbnRleHQsCisgICAgIHJldHVybiBOb0Vycm9y
KCk7CisgfQorIAorK0Vycm9yIERpc3BsYXk6Om1ha2VDdXJyZW50KGNvbnN0IFRocmVhZCAqdGhy
ZWFkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVnbDo6U3VyZmFjZSAqZHJhd1N1cmZh
Y2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgZWdsOjpTdXJmYWNlICpyZWFkU3VyZmFj
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7
CisrICAgIGlmICghbUluaXRpYWxpemVkKQorKyAgICB7CisrICAgICAgICByZXR1cm4gTm9FcnJv
cigpOworKyAgICB9CisrCisrICAgIGdsOjpDb250ZXh0ICpwcmV2aW91c0NvbnRleHQgPSB0aHJl
YWQtPmdldENvbnRleHQoKTsKKysgICAgaWYgKHByZXZpb3VzQ29udGV4dCkKKysgICAgeworKyAg
ICAgICAgQU5HTEVfVFJZKHByZXZpb3VzQ29udGV4dC0+dW5NYWtlQ3VycmVudCh0aGlzKSk7Cisr
ICAgIH0KKysKKysgICAgQU5HTEVfVFJZKG1JbXBsZW1lbnRhdGlvbi0+bWFrZUN1cnJlbnQodGhp
cywgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlLCBjb250ZXh0KSk7CisrCisrICAgIGlmIChjb250
ZXh0ICE9IG51bGxwdHIpCisrICAgIHsKKysgICAgICAgIEFOR0xFX1RSWShjb250ZXh0LT5tYWtl
Q3VycmVudCh0aGlzLCBkcmF3U3VyZmFjZSwgcmVhZFN1cmZhY2UpKTsKKysgICAgfQorKworKyAg
ICAvLyBUaWNrIGFsbCB0aGUgc2NyYXRjaCBidWZmZXJzIHRvIG1ha2Ugc3VyZSB0aGV5IGdldCBj
bGVhbmVkIHVwIGV2ZW50dWFsbHkgaWYgdGhleSBzdG9wIGJlaW5nCisrICAgIC8vIHVzZWQuCisr
ICAgIHsKKysgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKG1TY3JhdGNo
QnVmZmVyTXV0ZXgpOworKworKyAgICAgICAgZm9yIChhbmdsZTo6U2NyYXRjaEJ1ZmZlciAmc2Nh
dGNoQnVmZmVyIDogbVNjcmF0Y2hCdWZmZXJzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNj
YXRjaEJ1ZmZlci50aWNrKCk7CisrICAgICAgICB9CisrICAgICAgICBmb3IgKGFuZ2xlOjpTY3Jh
dGNoQnVmZmVyICZ6ZXJvRmlsbGVkQnVmZmVyIDogbVplcm9GaWxsZWRCdWZmZXJzKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHplcm9GaWxsZWRCdWZmZXIudGljaygpOworKyAgICAgICAgfQor
KyAgICB9CisrCisrICAgIHJldHVybiBOb0Vycm9yKCk7CisrfQorKworIEVycm9yIERpc3BsYXk6
OnJlc3RvcmVMb3N0RGV2aWNlKCkKKyB7CisgICAgIGZvciAoQ29udGV4dFNldDo6aXRlcmF0b3Ig
Y3R4ID0gbUNvbnRleHRTZXQuYmVnaW4oKTsgY3R4ICE9IG1Db250ZXh0U2V0LmVuZCgpOyBjdHgr
KykKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvRGlzcGxheS5oIGIvc3JjL2xpYkFOR0xFL0Rp
c3BsYXkuaAoraW5kZXggNGFjNjMzNi4uMTZmYWYyYiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9EaXNwbGF5LmgKKysrKyBiL3NyYy9saWJBTkdMRS9EaXNwbGF5LmgKK0BAIC0xNjYsNiArMTY2
LDExIEBAIGNsYXNzIERpc3BsYXkgZmluYWwgOiBwdWJsaWMgTGFiZWxlZE9iamVjdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGVNYXAgJmF0dHJpYnMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKipvdXRDb250ZXh0KTsKKyAKKysgICAgRXJy
b3IgbWFrZUN1cnJlbnQoY29uc3QgVGhyZWFkICp0aHJlYWQsCisrICAgICAgICAgICAgICAgICAg
ICAgIFN1cmZhY2UgKmRyYXdTdXJmYWNlLAorKyAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNl
ICpyZWFkU3VyZmFjZSwKKysgICAgICAgICAgICAgICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQpOworKworICAgICBFcnJvciBjcmVhdGVTeW5jKGNvbnN0IGdsOjpDb250ZXh0ICpjdXJyZW50
Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlTWFwICZhdHRyaWJzLAorZGlmZiAtLWdpdCBhL3Ny
Yy9saWJBTkdMRS9Qcm9ncmFtLmggYi9zcmMvbGliQU5HTEUvUHJvZ3JhbS5oCitpbmRleCBmZTNl
YzI4Li5iYTkyNjdhIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL1Byb2dyYW0uaAorKysrIGIv
c3JjL2xpYkFOR0xFL1Byb2dyYW0uaAorQEAgLTI3Niw2ICsyNzYsMTEgQEAgY2xhc3MgUHJvZ3Jh
bVN0YXRlIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgIHsKKyAgICAgICAgIHJldHVy
biBtRXhlY3V0YWJsZS0+Z2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpOworICAg
ICB9CisrICAgIHZvaWQgc2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygKKysgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gX21MaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4g
bUV4ZWN1dGFibGUtPnNldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoX21MaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKysgICAgfQorICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxHTHNpemVpPiAmZ2V0VHJhbnNmb3JtRmVlZGJhY2tTdHJpZGVzKCkgY29uc3QKKyAgICAgewor
ICAgICAgICAgcmV0dXJuIG1FeGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMo
KTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvUHJvZ3JhbUV4ZWN1dGFibGUuaCBiL3NyYy9s
aWJBTkdMRS9Qcm9ncmFtRXhlY3V0YWJsZS5oCitpbmRleCA5NTA4MzJiLi40OGYzYmQyIDEwMDY0
NAorLS0tIGEvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRhYmxlLmgKKysrKyBiL3NyYy9saWJB
TkdMRS9Qcm9ncmFtRXhlY3V0YWJsZS5oCitAQCAtMjI5LDYgKzIyOSwxMSBAQCBjbGFzcyBQcm9n
cmFtRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBhbmdsZTo6U3ViamVjdAorICAgICB7CisgICAg
ICAgICByZXR1cm4gbUxpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M7CisgICAgIH0KKysg
ICAgdm9pZCBzZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKAorKyAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nPiBfbUxpbmtlZFRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZ3MpCisrICAgIHsKKysgICAgICAgIG1MaW5rZWRUcmFuc2Zvcm1GZWVk
YmFja1ZhcnlpbmdzID0gX21MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOworKyAgICB9
CisgICAgIEdMaW50IGdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7IH0KKyAgICAgR0x1aW50IGdldFVuaWZv
cm1CbG9ja0JpbmRpbmcoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBjb25zdAorICAgICB7Citk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL1NoYWRlci5jcHAgYi9zcmMvbGliQU5HTEUvU2hhZGVy
LmNwcAoraW5kZXggNmY5YTc4YS4uOTYwMDZkOSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9T
aGFkZXIuY3BwCisrKysgYi9zcmMvbGliQU5HTEUvU2hhZGVyLmNwcAorQEAgLTY1NSw3ICs2NTUs
OSBAQCBzdGQ6OnN0cmluZyBTaGFkZXI6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ01hcHBl
ZE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcgJnRmVgorICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgR0x1aW50IGZpZWxkSW5kZXggPSAwOworICAgICAgICAgICAgICAgICBjb25zdCBhdXRv
ICpmaWVsZCA9IHZhcnlpbmcuZmluZEZpZWxkKHRmVmFyeWluZ05hbWUsICZmaWVsZEluZGV4KTsK
Ky0gICAgICAgICAgICAgICAgQVNTRVJUKGZpZWxkICE9IG51bGxwdHIgJiYgIWZpZWxkLT5pc1N0
cnVjdCgpICYmICFmaWVsZC0+aXNBcnJheSgpKTsKKysgICAgICAgICAgICAgICAgaWYgKCFmaWVs
ZCkKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICBBU1NF
UlQoIWZpZWxkLT5pc1N0cnVjdCgpICYmICFmaWVsZC0+aXNBcnJheSgpKTsKKyAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhcnlpbmcubWFwcGVkTmFtZSArICIuIiArIGZpZWxkLT5tYXBwZWROYW1l
OworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUv
U3RhdGUuY3BwIGIvc3JjL2xpYkFOR0xFL1N0YXRlLmNwcAoraW5kZXggN2IwOGQ4ZC4uYTgwNDQ4
NiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9TdGF0ZS5jcHAKKysrKyBiL3NyYy9saWJBTkdM
RS9TdGF0ZS5jcHAKK0BAIC02LDYgKzYsOSBAQAorIAorIC8vIFN0YXRlLmNwcDogSW1wbGVtZW50
cyB0aGUgU3RhdGUgY2xhc3MsIGVuY2Fwc3VsYXRpbmcgcmF3IEdMIHN0YXRlLgorIAorKy8vIE9s
ZGVyIGNsYW5nIHZlcnNpb25zIGhhdmUgYSBmYWxzZSBwb3NpdGl2ZSBvbiB0aGlzIHdhcm5pbmcg
aGVyZS4KKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdnbG9iYWwtY29uc3Ry
dWN0b3JzIgorKworICNpbmNsdWRlICJsaWJBTkdMRS9TdGF0ZS5oIgorIAorICNpbmNsdWRlIDxz
dHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvZm9ybWF0dXRpbHMuY3BwIGIvc3Jj
L2xpYkFOR0xFL2Zvcm1hdHV0aWxzLmNwcAoraW5kZXggM2Y5ZjM3ZC4uNWU2MjhmMiAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9mb3JtYXR1dGlscy5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9m
b3JtYXR1dGlscy5jcHAKK0BAIC0xMDM0LDcgKzEwMzQsNyBAQCBzdGF0aWMgSW50ZXJuYWxGb3Jt
YXRJbmZvTWFwIEJ1aWxkSW50ZXJuYWxGb3JtYXRJbmZvTWFwKCkKKyAgICAgYW5nbGU6OlN5c3Rl
bUluZm8gaW5mbzsKKyAgICAgaWYgKGFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICAg
eworLSAgICAgICAgaWYgKGluZm8uaXNpT1NBcHBPbk1hYykKKysgICAgICAgIGlmIChpbmZvLm5l
ZWRzRUFHTE9uTWFjKQorICAgICAgICAgeworICAgICAgICAgICAgIC8vIFVzaW5nIE9wZW5HTEVT
LmZyYW1ld29yay4KKyAgICAgICAgICAgICBBZGRSR0JBRm9ybWF0KCZtYXAsIEdMX0JHUkFfRVhU
LCAgICAgICBmYWxzZSwgIDgsICA4LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhULCAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNl
LCBSZXF1aXJlRVM8MiwgMD4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsd2F5
c1N1cHBvcnRlZCwgUmVxdWlyZUVTPDIsIDA+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTmV2ZXJTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkKTsKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9k
cml2ZXJfdXRpbHMuY3BwCitpbmRleCBkNGM2YWVkLi4yMjM2NGIzIDEwMDY0NAorLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwCitAQCAtMjA1LDcgKzIwNSw3IEBAIGJvb2wgb3BlcmF0
b3I+PShjb25zdCBPU1ZlcnNpb24gJmEsIGNvbnN0IE9TVmVyc2lvbiAmYikKKyAgICAgICAgICAg
IHN0ZDo6dGllKGIubWFqb3JWZXJzaW9uLCBiLm1pbm9yVmVyc2lvbiwgYi5wYXRjaFZlcnNpb24p
OworIH0KKyAKKy0jaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQTEUpCisrI2lmICFkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKQorIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKQor
IHsKKyAgICAgLy8gUmV0dXJuIGEgZGVmYXVsdCB2ZXJzaW9uCitAQCAtMjEzLDYgKzIxMywxNCBA
QCBPU1ZlcnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKKyB9CisgI2VuZGlmCisgCisrI2lmICFkZWZp
bmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKKytPU1ZlcnNpb24gR2V0aU9TVmVyc2lvbigpCisrewor
KyAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNpb24KKysgICAgcmV0dXJuIE9TVmVyc2lvbigw
LCAwLCAwKTsKKyt9CisrI2VuZGlmCisrCisgI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTElO
VVgpCisgYm9vbCBQYXJzZUxpbnV4T1NWZXJzaW9uKGNvbnN0IGNoYXIgKnZlcnNpb24sIGludCAq
bWFqb3IsIGludCAqbWlub3IsIGludCAqcGF0Y2gpCisgeworZGlmZiAtLWdpdCBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHMuaAoraW5kZXggMjYxOWJjMy4uNzg3NzJhZSAxMDA2NDQKKy0tLSBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2RyaXZlcl91dGlscy5oCitAQCAtMTY3LDYgKzE2NywxNSBAQCBpbmxpbmUgYm9vbCBJc0FwcGxl
KCkKKyAjZW5kaWYKKyB9CisgCisraW5saW5lIGJvb2wgSXNNYWMoKQorK3sKKysjaWYgZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9BUFBMRSkgJiYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykK
KysgICAgcmV0dXJuIHRydWU7CisrI2Vsc2UKKysgICAgcmV0dXJuIGZhbHNlOworKyNlbmRpZgor
K30KKysKKyBpbmxpbmUgYm9vbCBJc0Z1Y2hzaWEoKQorIHsKKyAjaWYgZGVmaW5lZChBTkdMRV9Q
TEFURk9STV9GVUNIU0lBKQorQEAgLTIwNCw2ICsyMTMsOCBAQCBib29sIG9wZXJhdG9yPj0oY29u
c3QgT1NWZXJzaW9uICZhLCBjb25zdCBPU1ZlcnNpb24gJmIpOworIAorIE9TVmVyc2lvbiBHZXRN
YWNPU1ZlcnNpb24oKTsKKyAKKytPU1ZlcnNpb24gR2V0aU9TVmVyc2lvbigpOworKworIE9TVmVy
c2lvbiBHZXRMaW51eE9TVmVyc2lvbigpOworIAorIGlubGluZSBib29sIElzQW5kcm9pZCgpCitk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19pb3MubW0gYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbQorbmV3IGZpbGUgbW9kZSAx
MDA2NDQKK2luZGV4IDAwMDAwMDAuLmU3YTg0NWMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfaW9zLm1tCitAQCAtMCwwICsxLDI4IEBACisr
Ly8KKysvLyBDb3B5cmlnaHQgMjAxOSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorKy8vCisrCisrLy8gZHJpdmVyX3V0aWxzX2lvcy5tbSA6IHByb3ZpZGVzIGlvcy1z
cGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGRyaXZlci4KKysKKysjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzLmgiCisrCisrI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisrCisrbmFtZXNwYWNlIHJ4CisreworKworK09TVmVyc2lvbiBHZXRp
T1NWZXJzaW9uKCkKKyt7CisrICAgIE9TVmVyc2lvbiByZXN1bHQ7CisrCisrICAgIE5TT3BlcmF0
aW5nU3lzdGVtVmVyc2lvbiB2ZXJzaW9uID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBv
cGVyYXRpbmdTeXN0ZW1WZXJzaW9uXTsKKysgICAgcmVzdWx0Lm1ham9yVmVyc2lvbiAgICAgICAg
ICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24ubWFqb3JWZXJzaW9uKTsKKysgICAgcmVz
dWx0Lm1pbm9yVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24u
bWlub3JWZXJzaW9uKTsKKysgICAgcmVzdWx0LnBhdGNoVmVyc2lvbiAgICAgICAgICAgICAgPSBz
dGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24ucGF0Y2hWZXJzaW9uKTsKKysKKysgICAgcmV0dXJuIHJl
c3VsdDsKKyt9CisrCisrfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHNfbWFjLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlsc19tYWMu
bW0KK2luZGV4IDNhZjQ2ZmMuLjliNTNlYjcgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2Ry
aXZlcl91dGlsc19tYWMubW0KK0BAIC0xMyw2ICsxMyw3IEBACisgbmFtZXNwYWNlIHJ4Cisgewor
IAorKyNpZiAhVEFSR0VUX09TX0lPUworIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKQorIHsK
KyAgICAgT1NWZXJzaW9uIHJlc3VsdDsKK0BAIC0yNCw1ICsyNSw1IEBAIE9TVmVyc2lvbiBHZXRN
YWNPU1ZlcnNpb24oKQorIAorICAgICByZXR1cm4gcmVzdWx0OworIH0KKy0KKysjZW5kaWYKKyB9
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxl
LmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaAorbmV3IGZp
bGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmM2E2ZDcKKy0tLSAvZGV2L251bGwKKysr
KyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oCitAQCAtMCww
ICsxLDExMiBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKysvLworKworKy8vIFNvZnRMaW5raW5nX2FwcGxlLmNwcDogTWFjcm9zIGZvciBzb2Z0
LWxpbmtpbmcgRnJhbWV3b3JrcyBhbmQgRnVuY3Rpb25zLgorKworKyNpZm5kZWYgU09GVF9MSU5L
SU5HX0FQUExFX0hfCisrI2RlZmluZSBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KKysKKysjaW5jbHVk
ZSAiY29tbW9uL3BsYXRmb3JtLmgiCisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fQVBQ
TEUpCisrCisrIyAgICBpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKysKKysjICAgIGltcG9ydCA8
ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KKysjICAgIGltcG9ydCA8ZGxmY24uaD4KKysjICAgIGltcG9y
dCA8b2JqYy9ydW50aW1lLmg+CisrCisrIyAgICBkZWZpbmUgUkVMRUFTRV9BU1NFUlQoZXhwcmVz
c2lvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKysgICAgICAgIChleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg
ICAgICA/IHN0YXRpY19jYXN0PHZvaWQ+KDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgIDogKEZBVEFMKCkg
PDwgIlx0ISBBc3NlcnQgZmFpbGVkIGluICIgPDwgX19GVU5DVElPTl9fIDw8ICIgKCIgPDwgX19G
SUxFX18gPDwgIjoiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICA8PCBfX0xJTkVfXyA8PCAi
KTogIiA8PCAjZXhwcmVzc2lvbiA8PCAiXG5cdCEgTWVzc2FnZTogIiA8PCBtZXNzYWdlKSkKKysK
KysjICAgIGlmZGVmIF9fY3BsdXNwbHVzCisrIyAgICAgICAgZGVmaW5lIEVYVEVSTl9DX0JFR0lO
IGV4dGVybiAiQyIgeworKyMgICAgICAgIGRlZmluZSBFWFRFUk5fQ19FTkQgfQorKyMgICAgZWxz
ZQorKyMgICAgICAgIGRlZmluZSBFWFRFUk5fQ19CRUdJTgorKyMgICAgICAgIGRlZmluZSBFWFRF
Uk5fQ19FTkQKKysjICAgIGVuZGlmCisrCisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0ZSQU1FV09S
S19IRUFERVIoZnJhbWV3b3JrKSBleHRlcm4gdm9pZCAqZnJhbWV3b3JrIyNMaWJyYXJ5KCk7Cisr
CisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoZnJhbWV3b3JrKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgdm9p
ZCAqZnJhbWV3b3JrIyNMaWJyYXJ5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNl
ICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorKyAgICAgICAgICAgIHN0YXRpYyB2b2lkICpmcmFtZXdvcmtMaWJyYXJ5ID0gTlVMTDsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg
ICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBmcmFtZXdvcmtM
aWJyYXJ5ID0gZGxvcGVuKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICIvU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy8iICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsvIiAjZnJhbWV3b3JrLCBSVExEX05PVyk7
IFwKKysgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1ld29ya0xpYnJhcnksICJVbmFi
bGUgdG8gbG9hZCAiICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsiKTsgICAgICBcCisrICAgICAgICAg
ICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBmcmFt
ZXdvcmtMaWJyYXJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBTT0ZUX0xJTktf
RlVOQ1RJT05fSEVBREVSKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRUeXBlLCBwYXJh
bWV0ZXJEZWNsYXJhdGlvbnMsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtZXRlck5hbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKysgICAgICAgIEVYVEVSTl9DX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg
ICAgICAgIHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIEVYVEVS
Tl9DX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGV4dGVybiByZXN1bHRUeXBl
IGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAg
ICAgICAgICAgICAgICAgIFwKKysgICAgICAgIGV4dGVybiByZXN1bHRUeXBlKCpzb2Z0TGluayMj
ZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9uczsgICAgICAgICAg
ICAgIFwKKysgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp
IHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyAgIFwKKysgICAg
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICByZXR1
cm4gc29mdExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlck5hbWVzOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBT
T0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKGZyYW1ld29yaywgZnVuY3Rpb25OYW1lLCByZXN1bHRU
eXBlLCBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMsICBcCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJOYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVzdWx0VHlwZSgqc29mdExpbmsjI2ZyYW1l
d29yayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMgPSAgICAgICAgICAgICAg
ICAgICAgIFwKKysgICAgICAgICAgICBpbml0IyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICByZXN1bHRUeXBlIGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRl
ckRlY2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwg
XnsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgICAgICAgc29mdExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25O
YW1lID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KysgICAgICAgICAgICAgICAgICAocmVzdWx0VHlwZSgqKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnMp
ZGxzeW0oZnJhbWV3b3JrIyNMaWJyYXJ5KCksICNmdW5jdGlvbk5hbWUpOyBcCisrICAgICAgICAg
ICAgfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBz
b2Z0TGluayMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyTmFtZXM7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0KKysKKysjICAgIGRlZmluZSBTT0ZU
X0xJTktfQ0xBU1NfSEVBREVSKGNsYXNzTmFtZSkgICAgXAorKyAgICAgICAgQGNsYXNzIGNsYXNz
TmFtZTsgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBleHRlcm4gQ2xhc3MgKCpn
ZXQjI2NsYXNzTmFtZSMjQ2xhc3MpKCk7IFwKKysgICAgICAgIGNsYXNzTmFtZSAqYWxsb2MjI2Ns
YXNzTmFtZSMjSW5zdGFuY2UoKTsgXAorKyAgICAgICAgaW5saW5lIGNsYXNzTmFtZSAqYWxsb2Mj
I2NsYXNzTmFtZSMjSW5zdGFuY2UoKSB7IHJldHVybiBbZ2V0IyNjbGFzc05hbWUjI0NsYXNzKCkg
YWxsb2NdOyB9CisrCisrIyAgICBkZWZpbmUgU09GVF9MSU5LX0NMQVNTKGZyYW1ld29yaywgY2xh
c3NOYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg
IEBjbGFzcyBjbGFzc05hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2Ns
YXNzTmFtZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisrICAgICAgICBDbGFzcyAoKmdldCMjY2xhc3NOYW1lIyNDbGFzcykoKSA9IGluaXQjI2Ns
YXNzTmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHN0YXRpYyBD
bGFzcyBjbGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg
ICAgICBzdGF0aWMgQ2xhc3MgY2xhc3NOYW1lIyNGdW5jdGlvbigpIHsgcmV0dXJuIGNsYXNzIyNj
bGFzc05hbWU7IH0gICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
KyAgICAgICAgICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICBmcmFtZXdv
cmsjI0xpYnJhcnkoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKysgICAgICAgICAgICAgIGNsYXNzIyNjbGFzc05hbWUgPSBvYmpjX2dldENs
YXNzKCNjbGFzc05hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3MjI2NsYXNzTmFtZSwgIm9iamNfZ2V0Q2xhc3MgZmFp
bGVkIGZvciAiICNjbGFzc05hbWUpOyBcCisrICAgICAgICAgICAgICBnZXQjI2NsYXNzTmFtZSMj
Q2xhc3MgPSBjbGFzc05hbWUjI0Z1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKysgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVy
biBjbGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg
ICAgIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgcHVzaCIpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIF9QcmFnbWEoImNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLWZ1bmN0aW9uXCIiKSBzdGF0aWMgY2xhc3NO
YW1lICBcCisrICAgICAgICAgICAgICAgICphbGxvYyMjY2xhc3NOYW1lIyNJbnN0YW5jZSgpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIHJldHVybiBbZ2V0IyNjbGFzc05hbWUj
I0NsYXNzKCkgYWxsb2NdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIF9QcmFnbWEoImNsYW5n
IGRpYWdub3N0aWMgcG9wIikKKysKKysjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfUExBVEZPUk1f
QVBQTEUpCisrCisrI2VuZGlmICAvLyBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KK2RpZmYgLS1naXQg
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAgYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvYXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKK2luZGV4
IGRlMjE2ZmIuLjU1ZGNkOTAgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
YXBwbGUvRGlzcGxheUFwcGxlX2FwaS5jcHAKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9hcHBsZS9EaXNwbGF5QXBwbGVfYXBpLmNwcAorQEAgLTEwLDYgKzEwLDcgQEAKKyAjaWZuZGVm
IExJQkFOR0xFX1JFTkRFUkVSX0dMX0FQUExFX0RJU1BMQVlBUFBMRV9BUElfSF8KKyAjZGVmaW5l
IExJQkFOR0xFX1JFTkRFUkVSX0dMX0FQUExFX0RJU1BMQVlBUFBMRV9BUElfSF8KKyAKKysjaW5j
bHVkZSAiZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL0Rpc3BsYXlJbXBsLmgiCisgCisgI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFD
T1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCitAQCAtMzMsMTEgKzM0
LDEwIEBAIERpc3BsYXlJbXBsICpDcmVhdGVEaXNwbGF5Q0dMT3JFQUdMKGNvbnN0IGVnbDo6RGlz
cGxheVN0YXRlICZzdGF0ZSkKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKyAgICAgaWYg
KCFhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCisgICAgIHsKKy0gICAgICAgIGltcGwgPSBu
dWxscHRyOworLSAgICAgICAgYnJlYWs7CisrICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
fQorIAorLSAgICBpZiAoaW5mby5pc2lPU0FwcE9uTWFjKQorKyAgICBpZiAoaW5mby5uZWVkc0VB
R0xPbk1hYykKKyAgICAgeworICAgICAgICAgcmV0dXJuIG5ldyByeDo6RGlzcGxheUVBR0woc3Rh
dGUpOworICAgICB9CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9D
R0xGdW5jdGlvbnMuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlv
bnMuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTk1YzBmNgorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlv
bnMuY3BwCitAQCAtMCwwICsxLDc3IEBACisrLy8KKysvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorKy8vCisrCisrLy8gQ0dMRnVuY3Rpb25zLmNwcDogRXhwb3Np
bmcgdGhlIHNvZnQtbGlua2VkIENHTCBpbnRlcmZhY2UuCisrCisrI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuaCIKKysjaW5jbHVkZSAiY29tbW9uL3BsYXRm
b3JtLmgiCisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQo
QU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCisrCisrU09GVF9MSU5LX0ZSQU1FV09SS19TT1VS
Q0UoT3BlbkdMKQorKworK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICBDR0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSAqYXR0cmlicywKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDR0xQaXhlbEZvcm1hdE9iaiAqcGl4LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50ICpucGl4KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChhdHRyaWJzLCBw
aXgsIG5waXgpKQorK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0dMQ3JlYXRlQ29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgIENHTEVycm9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTFBpeGVsRm9y
bWF0T2JqIHBpeCwgQ0dMQ29udGV4dE9iaiBzaGFyZSwgQ0dMQ29udGV4dE9iaiAqY3R4KSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgIChwaXgsIHNoYXJlLCBjdHgpKQorK1NPRlRfTElOS19G
VU5DVElPTl9TT1VSQ0UoCisrICAgIE9wZW5HTCwKKysgICAgQ0dMRGVzY3JpYmVQaXhlbEZvcm1h
dCwKKysgICAgQ0dMRXJyb3IsCisrICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIEdMaW50IHBp
eF9udW0sIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYiwgR0xpbnQgKnZhbHVlKSwKKysg
ICAgKHBpeCwgcGl4X251bSwgYXR0cmliLCB2YWx1ZSkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NP
VVJDRShPcGVuR0wsIENHTERlc3Ryb3lDb250ZXh0LCBDR0xFcnJvciwgKENHTENvbnRleHRPYmog
Y3R4KSwgKGN0eCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTERlc3Ry
b3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgpLCAocGl4KSkK
KytTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwgQ0dMRXJyb3JTdHJpbmcsIGNvbnN0
IGNoYXIgKiwgKENHTEVycm9yIGVycm9yKSwgKGVycm9yKSkKKytTT0ZUX0xJTktfRlVOQ1RJT05f
U09VUkNFKE9wZW5HTCwgQ0dMUmVsZWFzZUNvbnRleHQsIHZvaWQsIChDR0xDb250ZXh0T2JqIGN0
eCksIChjdHgpKQorK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xTZXRDdXJy
ZW50Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorK1NPRlRf
TElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0dMU2V0VmlydHVhbFNjcmVlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9y
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTENvbnRleHRPYmogY3R4LCBHTGludCBz
Y3JlZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eCwgc2NyZWVuKSkKKytTT0ZU
X0xJTktfRlVOQ1RJT05fU09VUkNFKAorKyAgICBPcGVuR0wsCisrICAgIENHTFRleEltYWdlSU9T
dXJmYWNlMkQsCisrICAgIENHTEVycm9yLAorKyAgICAoQ0dMQ29udGV4dE9iaiBjdHgsCisrICAg
ICBHTGVudW0gdGFyZ2V0LAorKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKysgICAgIEdM
c2l6ZWkgd2lkdGgsCisrICAgICBHTHNpemVpIGhlaWdodCwKKysgICAgIEdMZW51bSBmb3JtYXQs
CisrICAgICBHTGVudW0gdHlwZSwKKysgICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UsCisrICAg
ICBHTHVpbnQgcGxhbmUpLAorKyAgICAoY3R4LCB0YXJnZXQsIGludGVybmFsX2Zvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBpb1N1cmZhY2UsIHBsYW5lKSkKKytTT0ZUX0xJTktf
RlVOQ1RJT05fU09VUkNFKE9wZW5HTCwgQ0dMVXBkYXRlQ29udGV4dCwgQ0dMRXJyb3IsIChDR0xD
b250ZXh0T2JqIGN0eCksIChjdHgpKQorKworK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoCisr
ICAgIE9wZW5HTCwKKysgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKysgICAgQ0dMRXJyb3IsCisr
ICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCwgR0xpbnQgcmVuZF9udW0sIENHTFJlbmRlcmVy
UHJvcGVydHkgcHJvcCwgR0xpbnQgKnZhbHVlKSwKKysgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9w
LCB2YWx1ZSkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICBDR0xEZXN0cm95UmVuZGVyZXJJbmZvLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dMRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMUmVu
ZGVyZXJJbmZvT2JqIHJlbmQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbmQpKQor
K1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dMUXVlcnlSZW5kZXJlckluZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBD
R0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIChHTHVpbnQgZGlzcGxheV9tYXNr
LCBDR0xSZW5kZXJlckluZm9PYmogKnJlbmQsIEdMaW50ICpucmVuZCksCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAoZGlzcGxheV9tYXNrLCByZW5kLCBucmVuZCkpCisrCisrI2VuZGlmICAv
LyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ0NBVEFMWVNUKQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
Q0dMRnVuY3Rpb25zLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0NHTEZ1bmN0aW9u
cy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTZiODcxZQorLS0tIC9k
ZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMu
aAorQEAgLTAsMCArMSw4NCBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKysvLworKworKy8vIENHTEZ1bmN0aW9ucy5oOiBFeHBvc2luZyB0aGUg
c29mdC1saW5rZWQgQ0dMIGludGVyZmFjZS4KKysKKysjaWZuZGVmIENHTF9GVU5DVElPTlNfSF8K
KysjZGVmaW5lIENHTF9GVU5DVElPTlNfSF8KKysKKysjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3Jt
LmgiCisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpCisrCisrIyAgICBpbmNsdWRlIDxPcGVuR0wvT3BlbkdM
Lmg+CisrCisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19h
cHBsZS5oIgorKworK1NPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKE9wZW5HTCkKKysKKytTT0ZU
X0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
IENHTENob29zZVBpeGVsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJy
b3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQ0dMUGl4ZWxGb3JtYXRBdHRy
aWJ1dGUgKmF0dHJpYnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMUGl4ZWxGb3Jt
YXRPYmogKnBpeCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCAqbnBpeCksCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlicywgcGl4LCBucGl4KSkKKytTT0ZUX0xJ
TktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENH
TENyZWF0ZUNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgIChDR0xQaXhlbEZvcm1hdE9iaiBwaXgsIENHTENvbnRl
eHRPYmogc2hhcmUsIENHTENvbnRleHRPYmogKmN0eCksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAocGl4LCBzaGFyZSwgY3R4KSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKAorKyAg
ICBPcGVuR0wsCisrICAgIENHTERlc2NyaWJlUGl4ZWxGb3JtYXQsCisrICAgIENHTEVycm9yLAor
KyAgICAoQ0dMUGl4ZWxGb3JtYXRPYmogcGl4LCBHTGludCBwaXhfbnVtLCBDR0xQaXhlbEZvcm1h
dEF0dHJpYnV0ZSBhdHRyaWIsIEdMaW50ICp2YWx1ZSksCisrICAgIChwaXgsIHBpeF9udW0sIGF0
dHJpYiwgdmFsdWUpKQorK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoCisrICAgIE9wZW5HTCwK
KysgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKysgICAgQ0dMRXJyb3IsCisrICAgIChDR0xSZW5k
ZXJlckluZm9PYmogcmVuZCwgR0xpbnQgcmVuZF9udW0sIENHTFJlbmRlcmVyUHJvcGVydHkgcHJv
cCwgR0xpbnQgKnZhbHVlKSwKKysgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1ZSkpCisr
U09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTERlc3Ryb3lDb250ZXh0LCBDR0xF
cnJvciwgKENHTENvbnRleHRPYmogY3R4KSwgKGN0eCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX0hF
QURFUihPcGVuR0wsIENHTERlc3Ryb3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhlbEZv
cm1hdE9iaiBwaXgpLCAocGl4KSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTERlc3Ryb3lSZW5kZXJlckluZm8sCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCksCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAocmVuZCkpCisrU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENHTEVycm9yU3Ry
aW5nLCBjb25zdCBjaGFyICosIChDR0xFcnJvciBlcnJvciksIChlcnJvcikpCisrU09GVF9MSU5L
X0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xR
dWVyeVJlbmRlcmVySW5mbywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKEdMdWludCBkaXNwbGF5X21hc2ssIENHTFJlbmRl
cmVySW5mb09iaiAqcmVuZCwgR0xpbnQgKm5yZW5kKSwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgIChkaXNwbGF5X21hc2ssIHJlbmQsIG5yZW5kKSkKKytTT0ZUX0xJTktfRlVOQ1RJT05fSEVB
REVSKE9wZW5HTCwgQ0dMUmVsZWFzZUNvbnRleHQsIHZvaWQsIChDR0xDb250ZXh0T2JqIGN0eCks
IChjdHgpKQorK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xTZXRDdXJyZW50
Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorK1NPRlRfTElO
S19GVU5DVElPTl9IRUFERVIoT3BlbkdMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dM
U2V0VmlydHVhbFNjcmVlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKENHTENvbnRleHRPYmogY3R4LCBHTGludCBzY3Jl
ZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eCwgc2NyZWVuKSkKKytTT0ZUX0xJ
TktfRlVOQ1RJT05fSEVBREVSKAorKyAgICBPcGVuR0wsCisrICAgIENHTFRleEltYWdlSU9TdXJm
YWNlMkQsCisrICAgIENHTEVycm9yLAorKyAgICAoQ0dMQ29udGV4dE9iaiBjdHgsCisrICAgICBH
TGVudW0gdGFyZ2V0LAorKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKysgICAgIEdMc2l6
ZWkgd2lkdGgsCisrICAgICBHTHNpemVpIGhlaWdodCwKKysgICAgIEdMZW51bSBmb3JtYXQsCisr
ICAgICBHTGVudW0gdHlwZSwKKysgICAgIElPU3VyZmFjZVJlZiBpb1N1cmZhY2UsCisrICAgICBH
THVpbnQgcGxhbmUpLAorKyAgICAoY3R4LCB0YXJnZXQsIGludGVybmFsX2Zvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBpb1N1cmZhY2UsIHBsYW5lKSkKKytTT0ZUX0xJTktfRlVO
Q1RJT05fSEVBREVSKE9wZW5HTCwgQ0dMVXBkYXRlQ29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250
ZXh0T2JqIGN0eCksIChjdHgpKQorKworKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdMRV9QTEFURk9S
TV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysKKysjZW5k
aWYgIC8vIENHTF9GVU5DVElPTlNfSF8KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvZ2wvY2dsL0NvbnRleHRDR0wuY3BwIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9D
b250ZXh0Q0dMLmNwcAoraW5kZXggYmRmNTU5Ny4uYmU5OWI4NSAxMDA2NDQKKy0tLSBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9jZ2wvQ29udGV4dENHTC5jcHAKK0BAIC0xMyw2ICsxMyw4IEBACisgI2lu
Y2x1ZGUgImxpYkFOR0xFL0Rpc3BsYXkuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIv
Z2wvY2dsL0Rpc3BsYXlDR0wuaCIKKyAKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNP
UykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysKKyBuYW1lc3BhY2Ug
cngKKyB7CisgCitAQCAtNjMsMyArNjUsNSBAQCB2b2lkIENvbnRleHRDR0w6Om9uRGVzdHJveShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB9CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4Cisr
CisrI2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tCitpbmRleCBiNWE2MzFh
Li45MGU4MDU4IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNw
bGF5Q0dMLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wu
bW0KK0BAIC0yOSw2ICsyOSw4IEBACisgIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9n
bC9jZ2wvV2luZG93U3VyZmFjZUNHTC5oIgorICMgICAgaW5jbHVkZSAicGxhdGZvcm0vUGxhdGZv
cm1NZXRob2RzLmgiCisgCisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wv
Q0dMRnVuY3Rpb25zLmgiCisrCisgbmFtZXNwYWNlCisgeworIAorQEAgLTE2Myw5ICsxNjUsMTAg
QEAgc3RhdGljIHZvaWQgU2V0R1BVQnlSZWdpc3RyeUlEKENHTENvbnRleHRPYmogY29udGV4dE9i
aiwKKyAgICAgbUVHTERpc3BsYXkgPSBkaXNwbGF5OworIAorICAgICBhbmdsZTo6U3lzdGVtSW5m
byBpbmZvOworLSAgICAvLyBJdCdzIGxlZ2FsIGZvciBHZXRTeXN0ZW1JbmZvIHRvIHJldHVybiBm
YWxzZSBhbmQgdGhlcmVieQorLSAgICAvLyBjb250YWluIGluY29tcGxldGUgaW5mb3JtYXRpb24u
CistICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKTsKKysgICAgaWYgKCFhbmds
ZTo6R2V0U3lzdGVtSW5mbygmaW5mbykpCisrICAgIHsKKysgICAgICAgIHJldHVybiBlZ2w6OkVn
bE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBBTkdMRSdzIFN5c3RlbUluZm8u
IjsKKysgICAgfQorIAorICAgICAvLyBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgZWZmZWN0IG9m
IHRoZQorICAgICAvLyBkaXNhYmxlR1BVU3dpdGNoaW5nU3VwcG9ydCB3b3JrYXJvdW5kIGluIEZl
YXR1cmVzR0wuCitAQCAtNDQwLDcgKzQ0Myw3IEBAIHN0YXRpYyB2b2lkIFNldEdQVUJ5UmVnaXN0
cnlJRChDR0xDb250ZXh0T2JqIGNvbnRleHRPYmosCisgCisgYm9vbCBEaXNwbGF5Q0dMOjppc1Zh
bGlkTmF0aXZlV2luZG93KEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdAorIHsKKy0g
ICAgTlNPYmplY3QgKmxheWVyID0gKF9fYnJpZGdlIE5TT2JqZWN0ICopd2luZG93OworKyAgICBO
U09iamVjdCAqbGF5ZXIgPSByZWludGVycHJldF9jYXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7Cisg
ICAgIHJldHVybiBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOworIH0KKyAK
K2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9EaXNwbGF5RUFHTC5t
bSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tCitpbmRleCBh
Nzk1MDM3Li5jNTVhZTdmIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2Vh
Z2wvRGlzcGxheUVBR0wubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rp
c3BsYXlFQUdMLm1tCitAQCAtMjcsNiArMjcsOCBAQAorICMgICAgaW1wb3J0IDxRdWFydHpDb3Jl
L1F1YXJ0ekNvcmUuaD4KKyAjICAgIGltcG9ydCA8ZGxmY24uaD4KKyAKKysjICAgIGltcG9ydCAi
bGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLmgiCisrCisgbmFtZXNwYWNl
CisgeworIAorQEAgLTY0LDkgKzY2LDEwIEBACisgICAgIG1FR0xEaXNwbGF5ID0gZGlzcGxheTsK
KyAKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKy0gICAgLy8gSXQncyBsZWdhbCBmb3Ig
R2V0U3lzdGVtSW5mbyB0byByZXR1cm4gZmFsc2UgYW5kIHRoZXJlYnkKKy0gICAgLy8gY29udGFp
biBpbmNvbXBsZXRlIGluZm9ybWF0aW9uLgorLSAgICAodm9pZClhbmdsZTo6R2V0U3lzdGVtSW5m
bygmaW5mbyk7CisrICAgIGlmICghYW5nbGU6OkdldFN5c3RlbUluZm8oJmluZm8pKQorKyAgICB7
CisrICAgICAgICByZXR1cm4gZWdsOjpFZ2xOb3RJbml0aWFsaXplZCgpIDw8ICJVbmFibGUgdG8g
cXVlcnkgQU5HTEUncyBTeXN0ZW1JbmZvLiI7CisrICAgIH0KKyAKKyAgICAgbUNvbnRleHQgPSBb
YWxsb2NFQUdMQ29udGV4dEluc3RhbmNlKCkgaW5pdFdpdGhBUEk6a0VBR0xSZW5kZXJpbmdBUElP
cGVuR0xFUzNdOworICAgICBpZiAobUNvbnRleHQgPT0gbnVsbHB0cikKK0BAIC0xMTMsNiArMTE2
LDcgQEAKKyAgICAgaWYgKG1Db250ZXh0ICE9IG51bGxwdHIpCisgICAgIHsKKyAgICAgICAgIFtn
ZXRFQUdMQ29udGV4dENsYXNzKCkgc2V0Q3VycmVudENvbnRleHQ6bmlsXTsKKysgICAgICAgIFtt
Q29udGV4dCByZWxlYXNlXTsKKyAgICAgICAgIG1Db250ZXh0ID0gbnVsbHB0cjsKKyAgICAgICAg
IG1UaHJlYWRzV2l0aENvbnRleHRDdXJyZW50LmNsZWFyKCk7CisgICAgIH0KK0BAIC0yNzUsNyAr
Mjc5LDcgQEAKKyAKKyBib29sIERpc3BsYXlFQUdMOjppc1ZhbGlkTmF0aXZlV2luZG93KEVHTE5h
dGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdAorIHsKKy0gICAgTlNPYmplY3QgKmxheWVyID0g
KF9fYnJpZGdlIE5TT2JqZWN0ICopd2luZG93OworKyAgICBOU09iamVjdCAqbGF5ZXIgPSByZWlu
dGVycHJldF9jYXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7CisgICAgIHJldHVybiBbbGF5ZXIgaXNL
aW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOworIH0KKyAKK0BAIC0zMTEsOSArMzE1LDggQEAK
KyAgICAgb3V0RXh0ZW5zaW9ucy0+c3VyZmFjZWxlc3NDb250ZXh0ICAgID0gdHJ1ZTsKKyAgICAg
b3V0RXh0ZW5zaW9ucy0+ZGV2aWNlUXVlcnkgICAgICAgICAgID0gdHJ1ZTsKKyAKKy0gICAgLy8g
Q29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGFucyBzZW1hcGhvcmVzIGNhbiBi
ZSBzaGFyZWQgZ2xvYmFsbHkKKysgICAgLy8gQ29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRl
eHR1cmVzIGNhbiBiZSBzaGFyZWQgZ2xvYmFsbHkKKyAgICAgb3V0RXh0ZW5zaW9ucy0+ZGlzcGxh
eVRleHR1cmVTaGFyZUdyb3VwID0gdHJ1ZTsKKy0gICAgb3V0RXh0ZW5zaW9ucy0+ZGlzcGxheVNl
bWFwaG9yZVNoYXJlR3JvdXAgPSB0cnVlOworIAorICAgICBvdXRFeHRlbnNpb25zLT5wb3dlclBy
ZWZlcmVuY2UgPSBmYWxzZTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9FQUdMRnVuY3Rpb25zLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9F
QUdMRnVuY3Rpb25zLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45MjEy
NTEzCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9F
QUdMRnVuY3Rpb25zLmgKK0BAIC0wLDAgKzEsMzAgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIw
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysKKysvLyBFQUdMRnVuY3Rpb25zLmg6
IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBFQUdMIGludGVyZmFjZS4KKysKKysjaWZuZGVmIEVB
R0xfRlVOQ1RJT05TX0hfCisrI2RlZmluZSBFQUdMX0ZVTkNUSU9OU19IXworKworKyNpbmNsdWRl
ICJjb21tb24vcGxhdGZvcm0uaCIKKysKKysjaWYgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9T
KSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8IFwKKysgICAgKGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FS
TTY0KSkKKysKKysjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorKyMgICAgaW1wb3J0IDxP
cGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKysjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTElPU3Vy
ZmFjZS5oPgorKworKyMgICAgaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2wvU29mdExpbmtp
bmdfYXBwbGUuaCIKKysKKytTT0ZUX0xJTktfRlJBTUVXT1JLX0hFQURFUihPcGVuR0xFUykKKysK
KytTT0ZUX0xJTktfQ0xBU1NfSEVBREVSKEVBR0xDb250ZXh0KQorKworKyNlbmRpZiAgLy8gKGRl
ZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUND
QVRBTFlTVCkpIHx8CisrICAgICAgICAvLyAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRB
TFlTVCkgJiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQorKworKyNlbmRpZiAgLy8gQ0dMX0ZV
TkNUSU9OU19IXworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VB
R0xGdW5jdGlvbnMubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rp
b25zLm1tCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMGIxZWI3MAorLS0t
IC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0
aW9ucy5tbQorQEAgLTAsMCArMSwyNSBAQAorKy8vCisrLy8gQ29weXJpZ2h0IDIwMjAgQXBwbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisrLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKysvLworKworKy8vIEVBR0xGdW5jdGlvbnMuY3BwOiBFeHBv
c2luZyB0aGUgc29mdC1saW5rZWQgRUFHTCBpbnRlcmZhY2UuCisrCisrI2luY2x1ZGUgImNvbW1v
bi9wbGF0Zm9ybS5oIgorKworKyNpZiAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSkgfHwgXAorKyAgICAoZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgJiYgZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQor
KworKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMLmg+CisrIyAgICBpbXBvcnQgPE9wZW5HTEVT
L0VBR0xEcmF3YWJsZS5oPgorKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+
CisrCisrIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBs
ZS5oIgorKworK1NPRlRfTElOS19GUkFNRVdPUktfU09VUkNFKE9wZW5HTEVTKQorKworK1NPRlRf
TElOS19DTEFTUyhPcGVuR0xFUywgRUFHTENvbnRleHQpCisrCisrI2VuZGlmICAvLyAoZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFM
WVNUKSkgfHwKKysgICAgICAgIC8vIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNU
KSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKIGRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9GdW5jdGlvbnNF
QUdMLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9GdW5jdGlvbnNFQUdMLmgKIGlu
ZGV4IGVjZTIzNWEuLmFlMDIwN2IgMTAwNjQ0CiAtLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9GdW5jdGlvbnNFQUdMLmgKQEAgLTMwMiw2MCArMjIwNTIsMTMxMTUgQEAgaW5kZXgg
ZWNlMjM1YS4uYWUwMjA3YiAxMDA2NDQKICAjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTERyYXdh
YmxlLmg+CiAgIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xJT1N1cmZhY2UuaD4KICAKLS0jICAg
IGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL1NvZnRMaW5raW5nLmgiCi0rIyAg
ICBpbmNsdWRlICJjb21tb24vYXBwbGUvU29mdExpbmtpbmcuaCIKKy0jICAgIGluY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL2dsL2FwcGxlL1NvZnRMaW5raW5nLmgiCisrIyAgICBpbmNsdWRlICJj
b21tb24vYXBwbGUvU29mdExpbmtpbmcuaCIKKyAKKyBTT0ZUX0xJTktfRlJBTUVXT1JLX0hFQURF
UihPcGVuR0xFUykKKyAKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFn
bC9GdW5jdGlvbnNFQUdMLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRnVuY3Rp
b25zRUFHTC5tbQoraW5kZXggNzc3OTc5Mi4uMDc2ZDA3MiAxMDA2NDQKKy0tLSBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KK0BAIC0xNCw3ICsxNCw3IEBACisg
IyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgorICMgICAgaW1wb3J0IDxPcGVu
R0xFUy9FQUdMSU9TdXJmYWNlLmg+CisgCistIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9nbC9hcHBsZS9Tb2Z0TGlua2luZy5oIgorKyMgICAgaW5jbHVkZSAiY29tbW9uL2FwcGxlL1Nv
ZnRMaW5raW5nLmgiCisgCisgU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoT3BlbkdMRVMpCisg
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3Vy
ZmFjZUVBR0wubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJm
YWNlRUFHTC5tbQoraW5kZXggZjE2YzNlNy4uZTMwOWE4NiAxMDA2NDQKKy0tLSBhL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbQorQEAgLTgz
LDggKzgzLDggQEAgaW50IEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRleChHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMZW51bSB0eXBlKQorICAgICAgIG1XaWR0aCgwKSwKKyAgICAgICBtSGVpZ2h0KDAp
LAorICAgICAgIG1QbGFuZSgwKSwKKy0gICAgICBtUm93U3RyaWRlSW5QaXhlbHMoMCksCisgICAg
ICAgbUZvcm1hdEluZGV4KC0xKSwKKysgICAgICBtUm93U3RyaWRlSW5QaXhlbHMoMCksCisgICAg
ICAgbUFscGhhSW5pdGlhbGl6ZWQoZmFsc2UpCisgeworICAgICAvLyBLZWVwIHJlZmVyZW5jZSB0
byB0aGUgSU9TdXJmYWNlIHNvIGl0IGRvZXNuJ3QgZ2V0IGRlbGV0ZWQgd2hpbGUgdGhlIHBidWZm
ZXIgZXhpc3RzLgorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJl
cmdsX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxz
LmNwcAoraW5kZXggOTk3NzJjNC4uMTFmNDdlNiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxzLmNwcAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCitAQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9pZCBH
ZW5lcmF0ZUNhcHMoY29uc3QgRnVuY3Rpb25zR0wgKmZ1bmN0aW9ucywKKyAKKyAjaWYgZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRB
TFlTVCkKKyAgICAgYW5nbGU6OlN5c3RlbUluZm8gaW5mbzsKKy0gICAgaWYgKGFuZ2xlOjpHZXRT
eXN0ZW1JbmZvKCZpbmZvKSAmJiAhaW5mby5pc2lPU0FwcE9uTWFjKQorKyAgICBpZiAoYW5nbGU6
OkdldFN5c3RlbUluZm8oJmluZm8pICYmICFpbmZvLm5lZWRzRUFHTE9uTWFjKQorICAgICB7Cisg
ICAgICAgICBWZW5kb3JJRCB2ZW5kb3IgPSBHZXRWZW5kb3JJRChmdW5jdGlvbnMpOworICAgICAg
ICAgaWYgKChJc0FNRCh2ZW5kb3IpIHx8IElzSW50ZWwodmVuZG9yKSkgJiYgKm1heFN1cHBvcnRl
ZEVTVmVyc2lvbiA+PSBnbDo6VmVyc2lvbigzLCAwKSkKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCitpbmRleCBkNzBhZTU4Li42MTVkZDQ0IDEw
MDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5j
cHAKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3Bw
CitAQCAtMjgxLDkgKzI4MSwxMSBAQCBzdGQ6OnN0cmluZyBTdWJzdGl0dXRlVHJhbnNmb3JtRmVl
ZGJhY2tNYXJrZXJzKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbFNvdXJjZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcg
JnhmYk91dCkKKyB7CisgICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyU3RhcnQgPSBvcmln
aW5hbFNvdXJjZS5maW5kKGtYZmJEZWNsTWFya2VyKTsKKysgICAgQVNTRVJUKHhmYkRlY2xNYXJr
ZXJTdGFydCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CisgICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNs
TWFya2VyRW5kID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYkRlY2xNYXJr
ZXIpOworIAorICAgICBjb25zdCBzaXplX3QgeGZiT3V0TWFya2VyU3RhcnQgPSBvcmlnaW5hbFNv
dXJjZS5maW5kKGtYZmJPdXRNYXJrZXIsIHhmYkRlY2xNYXJrZXJTdGFydCk7CisrICAgIEFTU0VS
VCh4ZmJPdXRNYXJrZXJTdGFydCAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CisgICAgIGNvbnN0IHNp
emVfdCB4ZmJPdXRNYXJrZXJFbmQgPSB4ZmJPdXRNYXJrZXJTdGFydCArIENvbnN0U3RyTGVuKGtY
ZmJPdXRNYXJrZXIpOworIAorICAgICAvLyBUaGUgc2hhZGVyIGlzIHRoZSBmb2xsb3dpbmcgZm9y
bToKK0BAIC0zNjIsNyArMzY0LDggQEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrRW11
bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFt
U3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJvZ3JhbUludGVyZmFj
ZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN0cmluZyAqdmVydGV4U2hhZGVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJs
ZUluZm9NYXBPdXQpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTaGFkZXJJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZWFy
bHlSZXR1cm4pCisgeworICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nPiAmdmFyeWluZ3MgPQorICAgICAgICAgcHJvZ3JhbVN0YXRlLmdldExpbmtlZFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoKTsKK0BAIC00MTMsNiArNDE2LDEwIEBAIHZvaWQgR2Vu
ZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMoY29uc3QgR2xzbGFuZ1NvdXJj
ZU9wdGlvbnMgJm9wdGlvCisgICAgICAgICAgICAgb3V0cHV0T2Zmc2V0ICs9IGluZm8uY29sdW1u
Q291bnQgKiBpbmZvLnJvd0NvdW50ICogdmFyeWluZy5zaXplKCk7CisgICAgICAgICB9CisgICAg
IH0KKysgICAgaWYgKGVhcmx5UmV0dXJuKQorKyAgICB7CisrICAgICAgICB4ZmJPdXQgKz0gInJl
dHVybjsiOworKyAgICB9CisgICAgIHhmYk91dCArPSAifVxuIjsKKyAKKyAgICAgKnZlcnRleFNo
YWRlciA9IFN1YnN0aXR1dGVUcmFuc2Zvcm1GZWVkYmFja01hcmtlcnMoKnZlcnRleFNoYWRlciwg
eGZiRGVjbCwgeGZiT3V0KTsKK0BAIC0zMzY4LDExICszMzc1LDYgQEAgc3RkOjpzdHJpbmcgR2xz
bGFuZ0dldE1hcHBlZFNhbXBsZXJOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUp
CisgICAgIHJldHVybiBzYW1wbGVyTmFtZTsKKyB9CisgCistc3RkOjpzdHJpbmcgR2V0WGZiQnVm
ZmVyTmFtZShjb25zdCB1aW50MzJfdCBidWZmZXJJbmRleCkKKy17CistICAgIHJldHVybiAieGZi
QnVmZmVyIiArIFN0cihidWZmZXJJbmRleCk7CistfQorLQorIHZvaWQgR2xzbGFuZ0dlblRyYW5z
Zm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAm
b3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHNsYW5nUHJvZ3JhbUludGVyZmFj
ZUluZm8gKnByb2dyYW1JbnRlcmZhY2VJbmZvLAorQEAgLTMzODAsNyArMzM4Miw3IEBAIHZvaWQg
R2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5n
U291cmNlT3B0aW9ucyAmb3B0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoYWRlckludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZv
TWFwT3V0KQorIHsKKyAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1
dHMob3B0aW9ucywgcHJvZ3JhbVN0YXRlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKy0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyLCB2YXJp
YWJsZUluZm9NYXBPdXQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhTaGFkZXIsIHZhcmlhYmxlSW5mb01hcE91dCwgZmFsc2UpOworIH0KKyAK
KyB2b2lkIEdsc2xhbmdBc3NpZ25Mb2NhdGlvbnMoY29uc3QgR2xzbGFuZ1NvdXJjZU9wdGlvbnMg
Jm9wdGlvbnMsCitAQCAtMzQyOCw2ICszNDMwLDU3IEBAIHZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0
aW9ucyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5mb01hcE91dCk7CisgfQorIAorK3N0ZDo6c3RyaW5n
IEdldFhmYkJ1ZmZlck5hbWUoY29uc3QgdWludDMyX3QgYnVmZmVySW5kZXgpCisreworKyAgICBy
ZXR1cm4gInhmYkJ1ZmZlciIgKyBTdHIoYnVmZmVySW5kZXgpOworK30KKysKKysKKyt2b2lkIEds
c2xhbmdBc3NpZ25Mb2NhdGlvbnMoR2xzbGFuZ1NvdXJjZU9wdGlvbnMgJm9wdGlvbnMsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAmcHJv
Z3JhbUV4ZWN1dGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpT
aGFkZXJUeXBlIHNoYWRlclR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdsc2xh
bmdQcm9ncmFtSW50ZXJmYWNlSW5mbyAqcHJvZ3JhbUludGVyZmFjZUluZm8sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFy
aWFibGVJbmZvTWFwT3V0KQorK3sKKysgICAgLy8gQXNzaWduIG91dHB1dHMgdG8gdGhlIGZyYWdt
ZW50IHNoYWRlciwgaWYgYW55LgorKyAgICBpZiAoKHNoYWRlclR5cGUgPT0gZ2w6OlNoYWRlclR5
cGU6OkZyYWdtZW50KSAmJgorKyAgICAgICAgcHJvZ3JhbUV4ZWN1dGFibGUuaGFzTGlua2VkU2hh
ZGVyU3RhZ2UoZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50KSkKKysgICAgeworKyAgICAgICAgQXNz
aWduT3V0cHV0TG9jYXRpb25zKHByb2dyYW1FeGVjdXRhYmxlLCBnbDo6U2hhZGVyVHlwZTo6RnJh
Z21lbnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJigqdmFyaWFibGVJbmZvTWFw
T3V0KVtnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnRdKTsKKysgICAgfQorKworKyAgICAvLyBBc3Np
Z24gYXR0cmlidXRlcyB0byB0aGUgdmVydGV4IHNoYWRlciwgaWYgYW55LgorKyAgICBpZiAoKHNo
YWRlclR5cGUgPT0gZ2w6OlNoYWRlclR5cGU6OlZlcnRleCkgJiYKKysgICAgICAgIHByb2dyYW1F
eGVjdXRhYmxlLmhhc0xpbmtlZFNoYWRlclN0YWdlKGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgpKQor
KyAgICB7CisrICAgICAgICBBc3NpZ25BdHRyaWJ1dGVMb2NhdGlvbnMocHJvZ3JhbUV4ZWN1dGFi
bGUsIGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7Cisr
ICAgIH0KKysKKysgICAgaWYgKCFwcm9ncmFtRXhlY3V0YWJsZS5oYXNMaW5rZWRTaGFkZXJTdGFn
ZShnbDo6U2hhZGVyVHlwZTo6Q29tcHV0ZSkpCisrICAgIHsKKysgICAgICAgIC8vIEFzc2lnbiB2
YXJ5aW5nIGxvY2F0aW9ucy4KKysgICAgICAgIEFzc2lnblZhcnlpbmdMb2NhdGlvbnMob3B0aW9u
cywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5cGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworKwor
KyAgICAgICAgaWYgKCFwcm9ncmFtRXhlY3V0YWJsZS5nZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzKCkuZW1wdHkoKSAmJgorKyAgICAgICAgICAgIG9wdGlvbnMuc3VwcG9ydHNUcmFu
c2Zvcm1GZWVkYmFja0V4dGVuc2lvbiAmJiAoc2hhZGVyVHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6
VmVydGV4KSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBBc3NpZ25UcmFuc2Zvcm1GZWVkYmFj
a0V4dGVuc2lvblF1YWxpZmllcnMoCisrICAgICAgICAgICAgICAgIHByb2dyYW1FeGVjdXRhYmxl
LCBwcm9ncmFtSW50ZXJmYWNlSW5mby0+bG9jYXRpb25zVXNlZEZvclhmYkV4dGVuc2lvbiwKKysg
ICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwgJigqdmFyaWFibGVJbmZvTWFw
T3V0KVtnbDo6U2hhZGVyVHlwZTo6VmVydGV4XSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysg
ICAgQXNzaWduVW5pZm9ybUJpbmRpbmdzKG9wdGlvbnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFk
ZXJUeXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKysgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlSW5mb01hcE91dCk7CisrICAgIEFzc2lnblRleHR1cmVCaW5kaW5ncyhvcHRpb25z
LCBwcm9ncmFtRXhlY3V0YWJsZSwgc2hhZGVyVHlwZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworKyAgICBBc3Np
Z25Ob25UZXh0dXJlQmluZGluZ3Mob3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5
cGUsIHByb2dyYW1JbnRlcmZhY2VJbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGVJbmZvTWFwT3V0KTsKKyt9CisrCisgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNl
KGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZvcHRpb25zLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZy
ZXNvdXJjZXMsCitAQCAtMzQ2Miw3ICszNTE1LDggQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291
cmNlKGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZvcHRpb25zLAorICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1
dHMoCisgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCBwcm9ncmFtU3RhdGUsIHByb2dyYW1J
bnRlcmZhY2VJbmZvLCB2ZXJ0ZXhTb3VyY2UsCistICAgICAgICAgICAgICAgICAgICAmKCp2YXJp
YWJsZUluZm9NYXBPdXQpW2dsOjpTaGFkZXJUeXBlOjpWZXJ0ZXhdKTsKKysgICAgICAgICAgICAg
ICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0sCisr
ICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrRWFybHlSZXR1cm4p
OworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgeworZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaAoraW5kZXggMmJk
MmM2MS4uNjAyNDhjZCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5n
X3dyYXBwZXJfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3Jh
cHBlcl91dGlscy5oCitAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgR2xzbGFuZ1NvdXJjZU9wdGlv
bnMKKyAgICAgYm9vbCBzdXBwb3J0c1RyYW5zZm9ybUZlZWRiYWNrRXh0ZW5zaW9uID0gZmFsc2U7
CisgICAgIGJvb2wgZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrICAgICAgICAgICA9IGZhbHNlOwor
ICAgICBib29sIGVtdWxhdGVCcmVzZW5oYW1MaW5lcyAgICAgICAgICAgICAgPSBmYWxzZTsKKysg
ICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0Vhcmx5UmV0dXJuICAgICAgID0gZmFsc2U7CisgfTsK
KyAKKyB1c2luZyBTcGlydkJsb2IgPSBzdGQ6OnZlY3Rvcjx1aW50MzJfdD47CitkaWZmIC0tZ2l0
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX2RhdGEuanNvbiBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19kYXRhLmpzb24KK2luZGV4IDhjM2ZkMDUu
LjdiY2RlZDAgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlv
bnNfZGF0YS5qc29uCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNf
ZGF0YS5qc29uCitAQCAtNjcyLDYgKzY3Miw5IEBACisgICAgICJEMzJfRkxPQVRfUzhYMjRfVUlO
VCI6IHsKKyAgICAgICAiR0xfVU5TSUdORURfSU5UXzI0XzgiOiAiTG9hZEQyNFM4VG9EMzJGUzhY
MjQiLAorICAgICAgICJHTF9VTlNJR05FRF9JTlQiOiAiTG9hZEQzMlRvRDMyRlgzMiIKKysgICAg
fSwKKysgICAgIkQzMl9GTE9BVCI6IHsKKysgICAgICAiR0xfVU5TSUdORURfSU5UIjogIkxvYWRE
MjRTOFRvRDMyRiIKKyAgICAgfQorICAgfSwKKyAgICJHTF9SMzJJIjogeworZGlmZiAtLWdpdCBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcCBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcAor
aW5kZXggMjBlNzA2Zi4uMmVmMDFjYSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcAorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2xvYWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwCitAQCAtNDQ2LDggKzQ0Niw3
IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JHQjhfTE9TU1lfREVDT0RFX0VU
QzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9STV9CCisgICAgIH0KKyB9CisgCistTG9hZEltYWdlRnVu
Y3Rpb25JbmZvIENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRD
Ml9SOEc4QjhBMV9VTk9STV9CTE9DSygKKy0gICAgR0xlbnVtIHR5cGUpCisrTG9hZEltYWdlRnVu
Y3Rpb25JbmZvIENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzJfdG9fRVRD
Ml9SOEc4QjhBMV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlw
ZSkKKyAgICAgeworQEAgLTQ3MSw4ICs0NzAsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09N
UFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9STQor
ICAgICB9CisgfQorIAorLUxvYWRJbWFnZUZ1bmN0aW9uSW5mbworLUNPTVBSRVNTRURfUkdCOF9Q
VU5DSFRIUk9VR0hfQUxQSEExX0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JBX1VO
T1JNX0JMT0NLKEdMZW51bSB0eXBlKQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VE
X1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFf
UkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgeworQEAgLTEzMTIsOCArMTMxMCw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVT
U0VEX1NSR0I4X0VUQzJfdG9fUjhHOEI4QThfVU5PUk1fU1JHQihHTGVudW0gdHlwZSkKKyAgICAg
fQorIH0KKyAKKy1Mb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdCOF9MT1NTWV9E
RUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCX1VOT1JNX1NSR0JfQkxPQ0soCistICAgIEdMZW51
bSB0eXBlKQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X0xPU1NZX0RF
Q09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JfVU5PUk1fU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkK
KyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgeworQEAgLTEzMjUsOCArMTMyMiw3IEBAIExv
YWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FO
R0xFX3RvX0JDMV9SR0JfVU5PUk1fCisgICAgIH0KKyB9CisgCistTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhH
OEI4QTFfU1JHQl9CTE9DSygKKy0gICAgR0xlbnVtIHR5cGUpCisrTG9hZEltYWdlRnVuY3Rpb25J
bmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhH
OEI4QTFfU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlwZSkKKyAg
ICAgeworQEAgLTEzNTAsOSArMTM0Niw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVT
U0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9SCisgICAg
IH0KKyB9CisgCistTG9hZEltYWdlRnVuY3Rpb25JbmZvCistQ09NUFJFU1NFRF9TUkdCOF9QVU5D
SFRIUk9VR0hfQUxQSEExX0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JBX1VOT1JN
X1NSR0JfQkxPQ0soCistICAgIEdMZW51bSB0eXBlKQorK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBD
T01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfTE9TU1lfREVDT0RFX0VUQzJfQU5H
TEVfdG9fQkMxX1JHQkFfVU5PUk1fU1JHQl9CTE9DSyhHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3
aXRjaCAodHlwZSkKKyAgICAgeworQEAgLTE1MTAsNiArMTUwNCwxOCBAQCBMb2FkSW1hZ2VGdW5j
dGlvbkluZm8gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDI0X1VOT1JNX1g4X1VJTlQoR0xlbnVtIHR5
cGUpCisgICAgIH0KKyB9CisgCisrTG9hZEltYWdlRnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVO
VDI0X3RvX0QzMl9GTE9BVChHTGVudW0gdHlwZSkKKyt7CisrICAgIHN3aXRjaCAodHlwZSkKKysg
ICAgeworKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisrICAgICAgICAgICAgcmV0dXJu
IExvYWRJbWFnZUZ1bmN0aW9uSW5mbyhMb2FkRDI0UzhUb0QzMkYsIHRydWUpOworKyAgICAgICAg
ZGVmYXVsdDoKKysgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAgICAgICAgIHJldHVy
biBMb2FkSW1hZ2VGdW5jdGlvbkluZm8oVW5yZWFjaGFibGVMb2FkRnVuY3Rpb24sIHRydWUpOwor
KyAgICB9CisrfQorKworIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBERVBUSF9DT01QT05FTlQyNF90
b19EMzJfRkxPQVRfUzhYMjRfVUlOVChHTGVudW0gdHlwZSkKKyB7CisgICAgIHN3aXRjaCAodHlw
ZSkKK0BAIC0zNjI0LDYgKzM2MzAsOCBAQCBMb2FkRnVuY3Rpb25NYXAgR2V0TG9hZEZ1bmN0aW9u
c01hcChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEZvcm1hdElEIGFuZ2xlRm9ybWF0KQorICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QyNF9VTk9STV9TOF9V
SU5UOworICAgICAgICAgICAgICAgICBjYXNlIEZvcm1hdElEOjpEMjRfVU5PUk1fWDhfVUlOVDoK
KyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9DT01QT05FTlQyNF90b19EMjRfVU5P
Uk1fWDhfVUlOVDsKKysgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUOgor
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QzMl9GTE9B
VDsKKyAgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6
CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDMyX0ZM
T0FUX1M4WDI0X1VJTlQ7CisgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CitkaWZmIC0tZ2l0IGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0JVSUxELmduCitpbmRleCA4NjhjNDc2Li4wZDUwZDgxIDEwMDY0NAorLS0tIGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JVSUxELmduCisrKysgYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvQlVJTEQuZ24KK0BAIC02LDcgKzYsNyBAQAorIAorIGltcG9ydCgiLi4v
Li4vLi4vLi4vZ25pL2FuZ2xlLmduaSIpCisgCistYXNzZXJ0KGlzX21hYykKKythc3NlcnQoaXNf
bWFjIHx8IGlzX2lvcykKKyBhc3NlcnQoYW5nbGVfZW5hYmxlX21ldGFsKQorIAorIF9tZXRhbF9i
YWNrZW5kX3NvdXJjZXMgPSBbCitAQCAtMjEsNiArMjEsOCBAQCBfbWV0YWxfYmFja2VuZF9zb3Vy
Y2VzID0gWworICAgIkRpc3BsYXlNdGxfYXBpLmgiLAorICAgIkZyYW1lQnVmZmVyTXRsLmgiLAor
ICAgIkZyYW1lQnVmZmVyTXRsLm1tIiwKKysgICJJT1N1cmZhY2VTdXJmYWNlTXRsLmgiLAorKyAg
IklPU3VyZmFjZVN1cmZhY2VNdGwubW0iLAorICAgIlByb2dyYW1NdGwuaCIsCisgICAiUHJvZ3Jh
bU10bC5tbSIsCisgICAiUXVlcnlNdGwuaCIsCitAQCAtNTIsNiArNTQsOCBAQCBfbWV0YWxfYmFj
a2VuZF9zb3VyY2VzID0gWworICAgIm10bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbSIsCisgICAi
bXRsX2Zvcm1hdF91dGlscy5oIiwKKyAgICJtdGxfZm9ybWF0X3V0aWxzLm1tIiwKKysgICJtdGxf
Z2xzbGFuZ19tdGxfdXRpbHMuaCIsCisrICAibXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIiwKKyAg
ICJtdGxfZ2xzbGFuZ191dGlscy5oIiwKKyAgICJtdGxfZ2xzbGFuZ191dGlscy5tbSIsCisgICAi
bXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgiLAorQEAgLTY1LDEyICs2OSwxMSBAQCBfbWV0YWxf
YmFja2VuZF9zb3VyY2VzID0gWworICAgIm10bF91dGlscy5oIiwKKyAgICJtdGxfdXRpbHMubW0i
LAorICAgInNoYWRlcnMvY29uc3RhbnRzLmgiLAorLSAgInNoYWRlcnMvZm9ybWF0X2F1dG9nZW4u
aCIsCistICAic2hhZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIsCisr
ICAic2hhZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19hdXRvZ2VuLmluYyIKKyBdCisgCisg
Y29uZmlnKCJhbmdsZV9tZXRhbF9iYWNrZW5kX2NvbmZpZyIpIHsKKy0gIGRlZmluZXMgPSBbICJB
TkdMRV9FTkFCTEVfTUVUQUwiIF0KKysgIGRlZmluZXMgPSBbICJBTkdMRV9FTkFCTEVfTUVUQUwi
LCAiQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWIiBdCisgICBsZGZsYWdzID0gWworICAgICAiLXdl
YWtfZnJhbWV3b3JrIiwKKyAgICAgIk1ldGFsIiwKK0BAIC05NiwxMiArOTksMTYgQEAgYW5nbGVf
c291cmNlX3NldCgiYW5nbGVfbWV0YWxfYmFja2VuZCIpIHsKKyAgICAgIiR7YW5nbGVfcm9vdH06
bGliQU5HTEVfaGVhZGVycyIsCisgICBdCisgCistICBkZXBzID0gWyAiJHthbmdsZV9zcGlydl9j
cm9zc19kaXJ9L2duOnNwaXJ2X2Nyb3NzX3NvdXJjZXMiIF0KKysgIGRlcHMgPSBbCisrICAgICIk
YW5nbGVfc3BpcnZfdG9vbHNfZGlyOnNwdnRvb2xzX3ZhbCIsCisrICAgICIke2FuZ2xlX3NwaXJ2
X2Nyb3NzX2Rpcn0vZ246c3BpcnZfY3Jvc3Nfc291cmNlcyIsCisrICBdCisgCisgICBvYmpjX2Zs
YWdzID0gWworICAgICAiLVduby1udWxsYWJpbGl0eS1jb21wbGV0ZW5lc3MiLAorICAgICAiLVdu
by11bmd1YXJkZWQtYXZhaWxhYmlsaXR5IiwKKyAgICAgIi1mbm8tb2JqYy1hcmMiLAorKyAgICAi
LVduby1leHRyYS1zZW1pLXN0bXQiLAorICAgXQorICAgY2ZsYWdzX29iamMgKz0gb2JqY19mbGFn
cworICAgY2ZsYWdzX29iamNjICs9IG9iamNfZmxhZ3MKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQnVmZmVyTXRsLmgKK2luZGV4IDc2MjU0OWUuLjlmOWVjNmMgMTAwNjQ0CistLS0gYS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaAorQEAgLTE1MiwxMCArMTUyLDE1IEBAIGNsYXNzIEJ1
ZmZlck10bCA6IHB1YmxpYyBCdWZmZXJJbXBsLCBwdWJsaWMgQnVmZmVySG9sZGVyTXRsCisgCisg
ICAgIENvbnZlcnNpb25CdWZmZXJNdGwgKmdldFVuaWZvcm1Db252ZXJzaW9uQnVmZmVyKENvbnRl
eHRNdGwgKmNvbnRleHQsIHNpemVfdCBvZmZzZXQpOworIAorKyAgICAvLyBOT1RFKGhxbGUpOiBJ
ZiB0aGUgYnVmZmVyIGlzIG1vZGlmZWQgYnkgR1BVLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhw
bGljaXRseQorKyAgICAvLyBjYWxsZWQuCisrICAgIHZvaWQgbWFya0NvbnZlcnNpb25CdWZmZXJz
RGlydHkoKTsKKysKKyAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1TdGF0ZS5nZXRTaXplKCkpOyB9CisgCisgICBwcml2YXRlOgorICAgICBhbmds
ZTo6UmVzdWx0IHNldERhdGFJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXJCaW5kaW5nIHRhcmdldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpCdWZmZXJVc2FnZSB1c2FnZSk7CitAQCAtMTY3LDIwICsxNzIsMjQgQEAgY2xh
c3MgQnVmZmVyTXRsIDogcHVibGljIEJ1ZmZlckltcGwsIHB1YmxpYyBCdWZmZXJIb2xkZXJNdGwK
KyAgICAgYW5nbGU6OlJlc3VsdCBjb21taXRTaGFkb3dDb3B5KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KTsKKyAgICAgYW5nbGU6OlJlc3VsdCBjb21taXRTaGFkb3dDb3B5KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBzaXplX3Qgc2l6ZSk7CisgCistICAgIHZvaWQgbWFya0NvbnZlcnNp
b25CdWZmZXJzRGlydHkoKTsKKy0KKyAgICAgdm9pZCBjbGVhckNvbnZlcnNpb25CdWZmZXJzKCk7
CisrCisgICAgIGJvb2wgY2xpZW50U2hhZG93Q29weURhdGFOZWVkU3luYyhDb250ZXh0TXRsICpj
b250ZXh0TXRsKTsKKyAgICAgdm9pZCBlbnN1cmVTaGFkb3dDb3B5U3luY2VkRnJvbUdQVShDb250
ZXh0TXRsICpjb250ZXh0TXRsKTsKKyAgICAgdWludDhfdCAqc3luY0FuZE9idGFpblNoYWRvd0Nv
cHkoQ29udGV4dE10bCAqY29udGV4dE10bCk7CisgCisrICAgIC8vIENvbnZlbmllbnQgbWV0aG9k
CisrICAgIGNvbnN0IHVpbnQ4X3QgKmdldENsaWVudFNoYWRvd0NvcHlEYXRhKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0KQorKyAgICB7CisrICAgICAgICByZXR1cm4gZ2V0Q2xpZW50U2hhZG93
Q29weURhdGEobXRsOjpHZXRJbXBsKGNvbnRleHQpKTsKKysgICAgfQorICAgICAvLyBDbGllbnQg
c2lkZSBzaGFkb3cgYnVmZmVyCisgICAgIGFuZ2xlOjpNZW1vcnlCdWZmZXIgbVNoYWRvd0NvcHk7
CisgCisgICAgIC8vIEdQVSBzaWRlIGJ1ZmZlcnMgcG9vbAorICAgICBtdGw6OkJ1ZmZlclBvb2wg
bUJ1ZmZlclBvb2w7CisgCistICAgIC8vIEEgY2FjaGUgb2YgY29udmVydGVkIGJ1ZmZlciBkYXRh
LgorKyAgICAvLyBBIGNhY2hlIG9mIGNvbnZlcnRlZCB2ZXJ0ZXggZGF0YS4KKyAgICAgc3RkOjp2
ZWN0b3I8VmVydGV4Q29udmVyc2lvbkJ1ZmZlck10bD4gbVZlcnRleENvbnZlcnNpb25CdWZmZXJz
OworIAorICAgICBzdGQ6OnZlY3RvcjxJbmRleENvbnZlcnNpb25CdWZmZXJNdGw+IG1JbmRleENv
bnZlcnNpb25CdWZmZXJzOworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9CdWZmZXJNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLm1t
CitpbmRleCA2NGM3ZGU4Li44MDk2OTk2IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0J1ZmZlck10bC5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0J1ZmZlck10bC5tbQorQEAgLTIzLDYgKzIzLDEwIEBACisgLy8gU3RhcnQgd2l0aCBhIGZhaXJs
eSBzbWFsbCBidWZmZXIgc2l6ZS4gV2UgY2FuIGluY3JlYXNlIHRoaXMgZHluYW1pY2FsbHkgYXMg
d2UgY29udmVydCBtb3JlIGRhdGEuCisgY29uc3RleHByIHNpemVfdCBrQ29udmVydGVkRWxlbWVu
dEFycmF5QnVmZmVySW5pdGlhbFNpemUgPSAxMDI0ICogODsKKyAKKysvLyBUaGUgbWF4IHNpemUg
dGhhdCB3ZSB3aWxsIHVzZSBidWZmZXIgcG9vbCBmb3IgZHluYW1pYyB1cGRhdGUuCisrLy8gSWYg
dGhlIGJ1ZmZlciBzaXplIGV4Y2VlZHMgdGhpcyBsaW1pdCwgd2Ugd2lsbCB1c2Ugb25seSBvbmUg
YnVmZmVyIGluc3RlYWQgb2YgdXNpbmcgdGhlIHBvb2wuCisrY29uc3RleHByIHNpemVfdCBrRHlu
YW1pY0J1ZmZlclBvb2xNYXhCdWZTaXplID0gMTI4ICogMTAyNDsKKysKKyB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW5kZXhUeXBlPgorIGFuZ2xlOjpSZXN1bHQgR2V0Rmlyc3RMYXN0SW5kaWNlcyhjb25z
dCBJbmRleFR5cGUgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBjb3VudCwKK0BAIC0xMDUsNyArMTA5LDcgQEAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgaW50ZW5kZWRTaXplLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpCdWZmZXJVc2FnZSB1c2FnZSkKKyB7CistICAgIHJldHVybiBzZXRE
YXRhSW1wbChjb250ZXh0LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsKKysgICAgcmV0dXJu
IHNldERhdGFJbXBsKGNvbnRleHQsIHRhcmdldCwgZGF0YSwgaW50ZW5kZWRTaXplLCB1c2FnZSk7
CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXRTdWJEYXRhKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorQEAgLTE2NCw3ICsxNjgsOCBAQAorIHsKKyAgICAgaWYgKGFjY2Vz
cyAmIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVQpCisgICAgIHsKKy0gICAgICAgIEFOR0xF
X1RSWShzZXREYXRhSW1wbChjb250ZXh0LCBudWxscHRyLCBzaXplKCksIG1TdGF0ZS5nZXRVc2Fn
ZSgpKSk7CisrICAgICAgICBBTkdMRV9UUlkoc2V0RGF0YUltcGwoY29udGV4dCwgZ2w6OkJ1ZmZl
ckJpbmRpbmc6OkludmFsaWRFbnVtLCBudWxscHRyLCBzaXplKCksCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVN0YXRlLmdldFVzYWdlKCkpKTsKKyAgICAgfQorIAorICAgICBpZiAo
bWFwUHRyKQorQEAgLTM5NSw2ICs0MDAsNyBAQAorIH0KKyAKKyBhbmdsZTo6UmVzdWx0IEJ1ZmZl
ck10bDo6c2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXJCaW5kaW5nIHRhcmdldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVuZGVkU2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlclVzYWdlIHVz
YWdlKQorQEAgLTQxMyw2ICs0MTksMTMgQEAKKyAKKyAgICAgc2l6ZV90IGFkanVzdGVkU2l6ZSA9
IHN0ZDo6bWF4PHNpemVfdD4oMSwgaW50ZW5kZWRTaXplKTsKKyAKKysgICAgLy8gRW5zdXJlcyBu
byB2YWxpZGF0aW9uIGxheWVyIGlzc3VlcyBpbiBzdGQxNDAgd2l0aCBkYXRhIHR5cGVzIGxpa2Ug
dmVjMyBiZWluZyAxMiBieXRlcyB2cyAxNgorKyAgICAvLyBpbiBNU0wuCisrICAgIGlmICh0YXJn
ZXQgPT0gZ2w6OkJ1ZmZlckJpbmRpbmc6OlVuaWZvcm0pCisrICAgIHsKKysgICAgICAgIGFkanVz
dGVkU2l6ZSA9IHJvdW5kVXBQb3cyKGFkanVzdGVkU2l6ZSwgKHNpemVfdCkxNik7CisrICAgIH0K
KysKKyAgICAgc2l6ZV90IG1heEJ1ZmZlcnM7CisgICAgIHN3aXRjaCAodXNhZ2UpCisgICAgIHsK
K0BAIC00MjcsNyArNDQwLDcgQEAKKyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgLy8g
ZHluYW1pYyBidWZmZXIsIGFsbG93IHVwIHRvIDEwIHVwZGF0ZSBwZXIgZnJhbWUvZW5jb2Rpbmcg
d2l0aG91dAorICAgICAgICAgICAgIC8vIHdhaXRpbmcgZm9yIEdQVS4KKy0gICAgICAgICAgICBp
ZiAoYWRqdXN0ZWRTaXplIDw9IG10bDo6a1NoYXJlZE1lbUJ1ZmZlck1heEJ1ZlNpemVIaW50KQor
KyAgICAgICAgICAgIGlmIChhZGp1c3RlZFNpemUgPD0ga0R5bmFtaWNCdWZmZXJQb29sTWF4QnVm
U2l6ZSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIG1heEJ1ZmZlcnMgPSAxMDsK
KyAgICAgICAgICAgICAgICAgbUJ1ZmZlclBvb2wuc2V0QWx3YXlzVXNlU2hhcmVkTWVtKCk7Citk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tCitpbmRleCBhNTg2Njcw
Li4zZTI5YjRkIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBp
bGVyTXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29tcGlsZXJNdGwu
bW0KK0BAIC0xMCw2ICsxMCw3IEBACisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0NvbXBpbGVyTXRsLmgiCisgCisgI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9ubWVudFZh
cmlhYmxlLmgiCisgCisgbmFtZXNwYWNlIHJ4CisgeworQEAgLTIwLDcgKzIxLDE2IEBACisgCisg
U2hTaGFkZXJPdXRwdXQgQ29tcGlsZXJNdGw6OmdldFRyYW5zbGF0b3JPdXRwdXRUeXBlKCkgY29u
c3QKKyB7CisrICAgIGlmIChzaDo6cmVhZEJvb2xFbnZWYXIoIkFOR0xFX0dFTl9NVExfV0lUSF9T
UElSViIpKQorKyAgICB7CisrICAgICAgICAvLyBXZSB3YW50IHRvIHJldHVybiBHTCBvdXRwdXQg
Zmlyc3QsIHdlIGNhbid0IGFjdHVhbGx5CisrICAgICAgICAvLyBnZXQgTVNMIGNvZGUgdW50aWwg
bGluayB0aW1lLiBUcmFuc2xhdGlvbiB0aW1lIGlzIHRvbyBlYXJseQorICAgICAgICAgcmV0dXJu
IFNIX0dMU0xfTUVUQUxfT1VUUFVUOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAg
ICAgcmV0dXJuIFNIX01TTF9NRVRBTF9PVVRQVVQ7CisrICAgIH0KKyB9CisgCisgfSAgLy8gbmFt
ZXNwYWNlIHJ4CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRl
eHRNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgKK2luZGV4
IDE2ODdjOGMuLjJmMzkzNzEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvQ29udGV4dE10bC5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4
dE10bC5oCitAQCAtMjksOCArMjksOCBAQCBjbGFzcyBGcmFtZWJ1ZmZlck10bDsKKyBjbGFzcyBW
ZXJ0ZXhBcnJheU10bDsKKyBjbGFzcyBQcm9ncmFtTXRsOworIGNsYXNzIFJlbmRlclRhcmdldE10
bDsKKy1jbGFzcyBXaW5kb3dTdXJmYWNlTXRsOworLWNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrTXRs
OworK2NsYXNzIFN1cmZhY2VNdGxQcm90b2NvbDsKKytjbGFzcyBCdWZmZXJNdGw7CisgCisgY2xh
c3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAor
IHsKK0BAIC04NSw3ICs4NSw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dElt
cGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0eXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqaW5kaWNlcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRl
eCkgb3ZlcnJpZGU7CisgICAgIGFuZ2xlOjpSZXN1bHQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFz
ZVZlcnRleEJhc2VJbnN0YW5jZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpQcmltaXRpdmVNb2RlIG1vZGUsCitAQCAtMTU3LDYgKzE1NywxMiBAQCBjbGFzcyBDb250ZXh0
TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEdMaW50ICpiYXNlVmVydGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMdWludCAqYmFz
ZUluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBkcmF3Y291bnQpIG92ZXJyaWRlOworKyAg
ICBhbmdsZTo6UmVzdWx0IGRyYXdFbGVtZW50c1NpbXBsZVR5cGVzUHJpbWl0aXZlUmVzdGFydChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqaW5kaWNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMpOworIAorICAgICAvLyBEZXZpY2UgbG9z
cworICAgICBnbDo6R3JhcGhpY3NSZXNldFN0YXR1cyBnZXRSZXNldFN0YXR1cygpIG92ZXJyaWRl
OworQEAgLTE5Niw2ICsyMDIsOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJ
bXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgIGNvbnN0IGdsOjpFeHRlbnNpb25zICZnZXRO
YXRpdmVFeHRlbnNpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgIGNvbnN0IGdsOjpMaW1pdGF0
aW9ucyAmZ2V0TmF0aXZlTGltaXRhdGlvbnMoKSBjb25zdCBvdmVycmlkZTsKKyAKKysgICAgY29u
c3QgUHJvZ3JhbU10bCAqZ2V0UHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1Qcm9ncmFtOyB9Cisr
CisgICAgIC8vIFNoYWRlciBjcmVhdGlvbgorICAgICBDb21waWxlckltcGwgKmNyZWF0ZUNvbXBp
bGVyKCkgb3ZlcnJpZGU7CisgICAgIFNoYWRlckltcGwgKmNyZWF0ZVNoYWRlcihjb25zdCBnbDo6
U2hhZGVyU3RhdGUgJnN0YXRlKSBvdmVycmlkZTsKK0BAIC0yNDksMTIgKzI1NywyNCBAQCBjbGFz
cyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0Cisg
ICAgIGFuZ2xlOjpSZXN1bHQgbWVtb3J5QmFycmllcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgR0xiaXRmaWVsZCBiYXJyaWVycykgb3ZlcnJpZGU7CisgICAgIGFuZ2xlOjpSZXN1bHQgbWVt
b3J5QmFycmllckJ5UmVnaW9uKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGJpdGZpZWxk
IGJhcnJpZXJzKSBvdmVycmlkZTsKKyAKKysgICAgdm9pZCBpbnZhbGlkYXRlQ3VycmVudFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycygpOworKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0
ZUNoYW5nZWQoKTsKKysgICAgYW5nbGU6OlJlc3VsdCBvbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2so
CisrICAgICAgICBzaXplX3QgYnVmZmVyQ291bnQsCisrICAgICAgICBjb25zdCBnbDo6VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKTsKKysKKysgICAg
dm9pZCBvbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgIGFuZ2xlOjpSZXN1bHQgb25QYXVz
ZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisrCisrICAgIHZvaWQgcG9wdWxhdGVUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlclNldCgKKysgICAgICAgIHNpemVfdCBidWZmZXJDb3VudCwKKysgICAgICAgIGNv
bnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZl
cnMpOworICAgICAvLyBvdmVycmlkZSBtdGw6OkVycm9ySGFuZGxlcgorICAgICB2b2lkIGhhbmRs
ZUVycm9yKEdMZW51bSBlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpm
aWxlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKKy0gICAgdm9pZCBo
YW5kbGVFcnJvcihOU0Vycm9yICpfTnVsbGFibGUgZXJyb3IsCisrICAgIHZvaWQgaGFuZGxlRXJy
b3IoTlNFcnJvciAqZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmls
ZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZSkgb3ZlcnJpZGU7CitAQCAtMjcyLDEyICsy
OTIsMTIgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10
bDo6Q29udGV4dAorICAgICB2b2lkIG9uRHJhd0ZyYW1lQnVmZmVyQ2hhbmdlZFN0YXRlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZyYW1lYnVmZmVyTXRsICpmcmFtZWJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHJlbmRlclBhc3NDaGFuZ2VkKTsKKy0gICAgdm9pZCBv
bkJhY2tidWZmZXJSZXNpemVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBXaW5kb3dTdXJm
YWNlTXRsICpiYWNrYnVmZmVyKTsKKysgICAgdm9pZCBvbkJhY2tidWZmZXJSZXNpemVkKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LCBTdXJmYWNlTXRsUHJvdG9jb2wgKmJhY2tidWZmZXIpOwor
IAorICAgICAvLyBJbnZva2UgYnkgUXVlcnlNdGwKKy0gICAgYW5nbGU6OlJlc3VsdCBvbk9jY2x1
c2lvblF1ZXJ5QmVnaW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVy
eSk7CistICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKKy0gICAgdm9pZCBvbk9jY2x1c2lvblF1ZXJ5RGVzdHJv
eShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKKysgICAgYW5n
bGU6OlJlc3VsdCBvbk9jY2x1c2lvblF1ZXJ5QmVnYW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIFF1ZXJ5TXRsICpxdWVyeSk7CisrICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVuZGVkKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworKyAgICB2b2lkIG9u
T2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5
TXRsICpxdWVyeSk7CisgCisgICAgIC8vIFVzZWZ1bCBmb3IgdGVtcG9yYXJpbHkgcGF1c2UgdGhl
biByZXN0YXJ0IG9jY2x1c2lvbiBxdWVyeSBkdXJpbmcgY2xlYXIvYmxpdCB3aXRoIGRyYXcuCisg
ICAgIGJvb2wgaGFzQWN0aXZlT2NjbHVzaW9uUXVlcnkoKSBjb25zdCB7IHJldHVybiBtT2NjbHVz
aW9uUXVlcnk7IH0KK0BAIC0zNjcsNyArMzg3LDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1Ymxp
YyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB4ZmJQYXNzKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpOworIAorICAgICBhbmdsZTo6UmVzdWx0IGRyYXdUcmlG
YW5BcnJheXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwKK0BAIC00MTcsNiArNDM3LDE4IEBAIGNsYXNz
IENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQp
OworIAorKyAgICB2b2lkIGV4ZWNEcmF3SW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0
aXZlVHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFy
dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpOworKworKyAgICB2
b2lkIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5
cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4Q291
bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZSBpbmRl
eFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVm
ZmVyUmVmICZpbmRleEJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGJ1ZmZlck9mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgaW5zdGFuY2VzKTsKKysKKyAgICAgdm9pZCB1cGRhdGVFeHRlbmRlZFN0YXRlKGNv
bnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSk7CisgCisgICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoRnJh
bWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyTXRsLAorQEAgLTQ0Miw2ICs0NzQsNyBAQCBjbGFzcyBD
b250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAg
IGFuZ2xlOjpSZXN1bHQgZmlsbERyaXZlclhGQlVuaWZvcm1zKEdMaW50IGRyYXdDYWxsRmlyc3RW
ZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHZlcnRpY2VzUGVySW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5jZXMpOworKyAgICBhbmdsZTo6UmVzdWx0IGhh
bmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNFbXVsYXRpb24oY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5RGVw
dGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworICAgICBhbmdsZTo6
UmVzdWx0IGhhbmRsZURpcnR5RGVwdGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsK
KyAgICAgYW5nbGU6OlJlc3VsdCBoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpOworQEAgLTQ3MCw2ICs1MDMsNyBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVi
bGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CisgICAgICAgICBESVJUWV9CSVRf
UkVOREVSX1BJUEVMSU5FLAorICAgICAgICAgRElSVFlfQklUX1VOSUZPUk1fQlVGRkVSU19CSU5E
SU5HLAorICAgICAgICAgRElSVFlfQklUX1JBU1RFUklaRVJfRElTQ0FSRCwKKysgICAgICAgIERJ
UlRZX0JJVF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUywKKyAgICAgICAgIERJUlRZX0JJVF9N
QVgsCisgICAgIH07CisgCitAQCAtNDg4LDcgKzUyMiw3IEBAIGNsYXNzIENvbnRleHRNdGwgOiBw
dWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAgICAgICAgIHVpbnQzMl90
IHhmYkFjdGl2ZVVucGF1c2VkOworICAgICAgICAgdWludDMyX3QgeGZiVmVydGljZXNQZXJEcmF3
OworICAgICAgICAgLy8gTk9URTogRXhwbGljaXQgcGFkZGluZy4gRmlsbCBpbiB3aXRoIHVzZWZ1
bCBkYXRhIHdoZW4gbmVlZGVkIGluIHRoZSBmdXR1cmUuCistICAgICAgICBpbnQzMl90IHBhZGRp
bmdbM107CisrICAgICAgICBpbnQzMl90IHBhZGRpbmdfMFszXTsKKyAKKyAgICAgICAgIGludDMy
X3QgeGZiQnVmZmVyT2Zmc2V0c1s0XTsKKyAgICAgICAgIHVpbnQzMl90IGFjYkJ1ZmZlck9mZnNl
dHNbNF07CitAQCAtNTA4LDEyICs1NDIsMTUgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBD
b250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAorIAorICAgICAgICAgdWludDMyX3QgY292
ZXJhZ2VNYXNrOworIAorLSAgICAgICAgZmxvYXQgcGFkZGluZzJbM107CisrICAgICAgICBpbnQz
Ml90IGVtdWxhdGVkSW5zdGFuY2VJRDsKKysKKysgICAgICAgIC8vIE5PVEU6IEV4cGxpY2l0IHBh
ZGRpbmcuIEZpbGwgaW4gd2l0aCB1c2VmdWwgZGF0YSB3aGVuIG5lZWRlZCBpbiB0aGUgZnV0dXJl
LgorKyAgICAgICAgaW50MzJfdCBwYWRkaW5nXzFbMl07CisgICAgIH07CisgCisgICAgIHN0cnVj
dCBEZWZhdWx0QXR0cmlidXRlCisgICAgIHsKKy0gICAgICAgIHVpbnQ4X3QgdmFsdWVzW3NpemVv
ZihmbG9hdCkgKiA0XTsKKysgICAgICAgIGZsb2F0IHZhbHVlc1s0XTsKKyAgICAgfTsKKyAKKyAg
ICAgbXRsOjpPY2NsdXNpb25RdWVyeVBvb2wgbU9jY2x1c2lvblF1ZXJ5UG9vbDsKK0BAIC01MjIs
NiArNTU5LDEzIEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1Ymxp
YyBtdGw6OkNvbnRleHQKKyAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciBtUmVuZGVyRW5j
b2RlcjsKKyAgICAgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgbUJsaXRFbmNvZGVyOworICAgICBt
dGw6OkNvbXB1dGVDb21tYW5kRW5jb2RlciBtQ29tcHV0ZUVuY29kZXI7CisrICAgIC8vIFRPRE8o
amN1bm5pbmdoYW0pOgorKyAgICAvLyBDYWNoZSB0aGUgY3VycmVudCBkcmF3IGNhbGwncyBmaXJz
dFZlcnRleCB0byBiZSBwYXNzZWQgdG8KKysgICAgLy8gVHJhbnNmb3JtRmVlZGJhY2tNdGw6Omdl
dEJ1ZmZlck9mZnNldHMuICBXZSBzaG91bGQgc3dpdGNoCisrICAgIC8vIHRvIHVzaW5nIGdsX0Jh
c2VWZXJ0ZXggLT4gYmFzZV92ZXJ0ZXggaW4gTVNMCisrICAgIEdMaW50IG1YZmJCYXNlVmVydGV4
OworKyAgICAvLyBDYWNoZSB0aGUgY3VycmVudCBkcmF3IGNhbGwncyB2ZXJ0ZXggY291bnQgYXMg
d2VsbCB0byBzdXBwb3J0IGluc3RhbmNlZCBkcmF3IGNhbGxzCisrICAgIEdMdWludCBtWGZiVmVy
dGV4Q291bnRQZXJJbnN0YW5jZTsKKyAKKyAgICAgLy8gQ2FjaGVkIGJhY2stZW5kIG9iamVjdHMK
KyAgICAgRnJhbWVidWZmZXJNdGwgKm1EcmF3RnJhbWVidWZmZXIgPSBudWxscHRyOworQEAgLTU1
NCw2ICs1OTgsOCBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJs
aWMgbXRsOjpDb250ZXh0CisgICAgIG10bDo6QnVmZmVyUG9vbCBtVHJpRmFuSW5kZXhCdWZmZXI7
CisgICAgIC8vIG9uZSBidWZmZXIgY2FuIGJlIHJldXNlZCBmb3IgYW55IHN0YXJ0aW5nIHZlcnRl
eCBpbiBEcmF3QXJyYXlzKCkKKyAgICAgbXRsOjpCdWZmZXJSZWYgbVRyaUZhbkFycmF5c0luZGV4
QnVmZmVyOworKyAgICAvLworKyAgICBtdGw6OkJ1ZmZlclBvb2wgbVByaW1pdGl2ZVJlc3RhcnRC
dWZmZXI7CisgCisgICAgIC8vIER1bW15IHRleHR1cmUgdG8gYmUgdXNlZCBmb3IgdHJhbnNmb3Jt
IGZlZWRiYWNrIG9ubHkgcGFzcy4KKyAgICAgbXRsOjpUZXh0dXJlUmVmIG1EdW1teVhGQlJlbmRl
clRleHR1cmU7CitAQCAtNTYyLDYgKzYwOCw5IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMg
Q29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKKyAKKyAgICAgRGVmYXVsdEF0dHJpYnV0
ZSBtRGVmYXVsdEF0dHJpYnV0ZXNbbXRsOjprTWF4VmVydGV4QXR0cmlic107CisgCisrICAgIC8v
IFRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJzLgorKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29u
c3QgQnVmZmVyTXRsICo+IG1DdXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzOworKworICAg
ICBJbmNvbXBsZXRlVGV4dHVyZVNldCBtSW5jb21wbGV0ZVRleHR1cmVzOworICAgICBib29sIG1J
bmNvbXBsZXRlVGV4dHVyZXNJbml0aWFsaXplZCA9IGZhbHNlOworIH07CitkaWZmIC0tZ2l0IGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwubW0gYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbQoraW5kZXggMjdlNjk3OC4uNDVhMDkyOCAxMDA2
NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tCisrKysg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbQorQEAgLTQ0LDI1ICs0
NCw2IEBACisgY29uc3RleHByIHVpbnQzMl90IGtNYXhUcmlGYW5MaW5lTG9vcEJ1ZmZlcnNQZXJG
cmFtZSA9IDEwOworICNlbmRpZgorIAorLSNkZWZpbmUgQU5HTEVfTVRMX1hGQl9EUkFXKERSQVdf
UFJPQykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorLSAgICBpZiAoIW1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgLyogTm9ybWFsIGRyYXcgY2FsbCAq
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICAgICAgRFJBV19QUk9DKGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBlbHNlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAg
ICAgLyogRmlyc3QgcGFzczogd3JpdGUgdG8gWEZCIGJ1ZmZlcnMgaW4gdmVydGV4IHNoYWRlciwg
ZnJhZ21lbnQgc2hhZGVyIGluYWN0aXZlICovICAgXAorLSAgICAgICAgRFJBV19QUk9DKHRydWUp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorLSAgICAgICAgaWYgKCFtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVu
YWJsZWQoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAg
ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIC8qIFNlY29u
ZCBwYXNzOiBmdWxsIHJhc3Rlcml6YXRpb246IHZlcnRleCBzaGFkZXIgKyBmcmFnbWVudCBzaGFk
ZXIgYXJlIGFjdGl2ZS4gXAorLSAgICAgICAgICAgICAgIFZlcnRleCBzaGFkZXIgd3JpdGVzIHRv
IHN0YWdlIG91dHB1dCBidXQgd29uJ3Qgd3JpdGUgdG8gWEZCIGJ1ZmZlcnMgKi8gICAgICAgXAor
LSAgICAgICAgICAgIGludmFsaWRhdGVSZW5kZXJQaXBlbGluZSgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgIERSQVdf
UFJPQyhmYWxzZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorLSAgICB9CistCisgYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRyaWFuZ2xlRmFuQnVmZmVyRnJv
bVBvb2woQ29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHZlcnRleENvdW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUG9vbCAqcG9vbCwK
K0BAIC04NCw3ICs2NSw3IEBACisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
KyB9CisgCistYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZUxpbmVMb29wQnVmZmVyRnJvbVBvb2woQ29u
dGV4dE10bCAqY29udGV4dCwKKythbmdsZTo6UmVzdWx0IEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wo
Q29udGV4dE10bCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBpbmRpY2VzVG9SZXNlcnZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICpidWZmZXJPdXQsCitAQCAtMTA1LDEyICs4
Niw3IEBAIGJvb2wgTmVlZFRvSW52ZXJ0RGVwdGhSYW5nZShmbG9hdCBuZWFyLCBmbG9hdCBmYXIp
CisgICAgIHJldHVybiBuZWFyID4gZmFyOworIH0KKyAKKy1ib29sIElzVHJhbnNmb3JtRmVlZGJh
Y2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKy17CistICAgIHJldHVybiBnbFN0YXRl
LmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpICYmIGdsU3RhdGUuaXNSYXN0ZXJp
emVyRGlzY2FyZEVuYWJsZWQoKTsKKy19CistCistc3RkOjpzdHJpbmcgQ29udmVydE1hcmtlclRv
U3RyaW5nKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisrc3RkOjpzdHJpbmcg
Q29udmVydE1hcmtlclRvQ3BwKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisg
eworICAgICBzdGQ6OnN0cmluZyBjcHBTdHJpbmc7CisgICAgIGlmIChsZW5ndGggPT0gMCkKK0BA
IC0xNzMsNyArMTQ5LDcgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6
U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICAgICAgICAgICAgICB7aW5kZXhUeXBlT3JOb25lLCB2
ZXJ0ZXhPckluZGV4Q291bnQsIGluZGljZXMsIG1MaW5lTG9vcEluZGV4QnVmZmVyLCAwfSkpOwor
ICAgICAgICAgfQorIAorLSAgICAgICAgQU5HTEVfVFJZKGluZGV4QnVmZmVyUG9vbC0+Y29tbWl0
KG1Db250ZXh0TXRsKSk7CisrICAgICAgICBBTkdMRV9UUlkoaW5kZXhCdWZmZXJQb29sLT5jb21t
aXQobUNvbnRleHRNdGwsIGZhbHNlKSk7CisgCisgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CisgICAgIH0KK0BAIC0xOTEsNyArMTY3LDggQEAgYm9vbCBJc1RyYW5zZm9y
bUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgICAgbUNtZEJ1ZmZl
cigmZGlzcGxheS0+Y21kUXVldWUoKSksCisgICAgICAgbVJlbmRlckVuY29kZXIoJm1DbWRCdWZm
ZXIsIG1PY2NsdXNpb25RdWVyeVBvb2wpLAorICAgICAgIG1CbGl0RW5jb2RlcigmbUNtZEJ1ZmZl
ciksCistICAgICAgbUNvbXB1dGVFbmNvZGVyKCZtQ21kQnVmZmVyKQorKyAgICAgIG1Db21wdXRl
RW5jb2RlcigmbUNtZEJ1ZmZlciksCisrICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2Uo
MCkKKyB7fQorIAorIENvbnRleHRNdGw6On5Db250ZXh0TXRsKCkge30KK0BAIC0yMDgsNiArMTg1
LDggQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgIG1MaW5lTG9vcExhc3RTZWdtZW50SW5kZXhCdWZmZXIuaW5pdGlhbGl6ZSh0aGlz
LCAyICogc2l6ZW9mKHVpbnQzMl90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG10bDo6a0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heFRyaUZhbkxpbmVM
b29wQnVmZmVyc1BlckZyYW1lKTsKKysgICAgbVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIuaW5pdGlh
bGl6ZSh0aGlzLCAwLCBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrTWF4VHJpRmFuTGluZUxvb3BCdWZmZXJz
UGVyRnJhbWUpOworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQor
QEAgLTIyNywyMyArMjA2LDIwIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3Qg
Z2w6OlN0YXRlICZnbFN0YXRlKQorIAorIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZW5zdXJl
SW5jb21wbGV0ZVRleHR1cmVzQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB7
CistICAgIGlmIChBTkdMRV9MSUtFTFkobUluY29tcGxldGVUZXh0dXJlc0luaXRpYWxpemVkKSkK
KysgICAgaWYgKEFOR0xFX1VOTElLRUxZKCFtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQp
KQorICAgICB7CistICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CistICAg
IH0KKy0gICAgY29uc3RleHByIGdsOjpUZXh0dXJlVHlwZSBzdXBwb3J0ZWRUZXh0dXJlVHlwZXNb
XSA9IHtnbDo6VGV4dHVyZVR5cGU6Ol8yRCwgZ2w6OlRleHR1cmVUeXBlOjpfM0QsCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVUeXBlOjpfMkRBcnJheSwKKysgICAgICAgIGNvbnN0ZXhwciBnbDo6VGV4dHVyZVR5cGUg
c3VwcG9ydGVkVGV4dHVyZVR5cGVzW10gPSB7CisrICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBl
OjpfMkQsIGdsOjpUZXh0dXJlVHlwZTo6XzJEQXJyYXksIGdsOjpUZXh0dXJlVHlwZTo6XzNELAor
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlwZTo6Q3ViZU1hcH07CistICAgIGZvciAoZ2w6OlRl
eHR1cmVUeXBlIHRleFR5cGUgOiBzdXBwb3J0ZWRUZXh0dXJlVHlwZXMpCisrICAgICAgICBmb3Ig
KGF1dG8gdGV4VHlwZSA6IHN1cHBvcnRlZFRleHR1cmVUeXBlcykKKyAgICAgICAgIHsKKyAgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKy0gICAgICAgIEFOR0xFX1RSWShtSW5jb21w
bGV0ZVRleHR1cmVzLmdldEluY29tcGxldGVUZXh0dXJlKGNvbnRleHQsIHRleFR5cGUsIG51bGxw
dHIsICZ0ZXh0dXJlKSk7CistCistICAgICAgICBUZXh0dXJlTXRsICp0ZXh0dXJlTXRsICAgICAg
ICAgICAgICAgICAgICAgID0gbXRsOjpHZXRJbXBsKHRleHR1cmUpOworLSAgICAgICAgdGV4dHVy
ZU10bC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXQoKS5sYWJlbCA9IEAiSW5jb21wbGV0ZVRleHR1
cmUiOworKyAgICAgICAgICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRSh0ZXh0dXJlKTsKKysgICAg
ICAgICAgICBBTkdMRV9UUlkoCisrICAgICAgICAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXMu
Z2V0SW5jb21wbGV0ZVRleHR1cmUoY29udGV4dCwgdGV4VHlwZSwgbnVsbHB0ciwgJnRleHR1cmUp
KTsKKyAgICAgICAgIH0KKyAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNJbml0aWFsaXplZCA9
IHRydWU7CistCisrICAgIH0KKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwor
IH0KKyAKK0BAIC0yODIsNyArMjU4LDE3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHko
Y29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgIHRoaXMsIHswLCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oY291bnQpLCBtVHJpRmFuQXJyYXlzSW5kZXhCdWZmZXIsIDB9KSk7Cisg
ICAgIH0KKyAKKy0gICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmVVbnBhdXNlZCgpKTsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
VW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0
LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5nbGVGYW4sIGZpcnN0LCBjb3VudCwgaW5zdGFuY2Vz
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52
YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ1ZSkpOworKyAgICAgICAgLy8gRHJhdyB3aXRoIHRoZSB6ZXJv
IHN0YXJ0aW5nIGluZGV4IGJ1ZmZlciwgc2hpZnQgdGhlIHZlcnRleCBpbmRleCB1c2luZyBiYXNl
VmVydGV4CisrICAgICAgICAvLyBpbnN0YW5jZWQgZHJhdzoKKysgICAgICAgIG1SZW5kZXJFbmNv
ZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkQmFzZVZlcnRleChNVExQcmltaXRpdmVUeXBlVHJpYW5n
bGUsIGdlbkluZGljZXNDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNVExJbmRleFR5cGVVSW50MzIsIG1UcmlGYW5BcnJheXNJbmRl
eEJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBpbnN0YW5jZXMsIGZpcnN0KTsKKysgICAgfQorIAorICAgICBBTkdMRV9UUlko
c2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3Qs
IGNvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVt
ZW50c1R5cGU6OkludmFsaWRFbnVtLCByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCks
CitAQCAtMzExLDE2ICsyOTcsMjMgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25z
dCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICB0aGlzLCB7c3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGZpcnN0KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGNvdW50KSwgZ2VuSWR4QnVmZmVyLAor
ICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0pKTsKKyAKKy0gICAgQU5HTEVfVFJZ
KG1UcmlGYW5JbmRleEJ1ZmZlci5jb21taXQodGhpcykpOworKyAgICBBTkdMRV9UUlkobVRyaUZh
bkluZGV4QnVmZmVyLmNvbW1pdCh0aGlzLCBmYWxzZSkpOworIAorLSAgICBBU1NFUlQoIWdldFN0
YXRlKCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpOworKyAgICBpZiAobVN0
YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICB7CisrICAgICAg
ICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmds
ZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB2b2lkICo+KDApLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSk7Cisg
CisrICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFu
Z2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5z
dGFuY2VzKTsKKysgICAgfQorICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQ
cmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgZmFsc2UpKTsKKyAKKy0gICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQoTVRMUHJpbWl0
aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKy0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJP
ZmZzZXQpOworKyAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRy
aWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0
YW5jZXMpOworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAg
LTM2OCwyMiArMzYxLDI3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6
OlN0YXRlICZnbFN0YXRlKQorICAgICB1aW50MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CisgICAg
IHVpbnQzMl90IGdlbkluZGljZXNDb3VudCA9IGNvdW50ICsgMTsKKyAKKy0gICAgQU5HTEVfVFJZ
KEFsbG9jYXRlTGluZUxvb3BCdWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291bnQsICZt
TGluZUxvb3BJbmRleEJ1ZmZlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmZ2VuSWR4QnVmZmVyLCAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisrICAgIEFO
R0xFX1RSWShBbGxvY2F0ZUJ1ZmZlckZyb21Qb29sKHRoaXMsIGdlbkluZGljZXNDb3VudCwgJm1M
aW5lTG9vcEluZGV4QnVmZmVyLCAmZ2VuSWR4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisgICAgIEFOR0xFX1RSWShn
ZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21BcnJheXMo
CisgICAgICAgICB0aGlzLCB7c3RhdGljX2Nhc3Q8dWludDMyX3Q+KGZpcnN0KSwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGNvdW50KSwgZ2VuSWR4QnVmZmVyLAorICAgICAgICAgICAgICAgIGdlbklk
eEJ1ZmZlck9mZnNldH0pKTsKKyAKKy0gICAgQU5HTEVfVFJZKG1MaW5lTG9vcEluZGV4QnVmZmVy
LmNvbW1pdCh0aGlzKSk7CisrICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21t
aXQodGhpcywgZmFsc2UpKTsKKyAKKy0gICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJhbnNmb3Jt
RmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKTsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVw
RHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIGZpcnN0LCBjb3VudCwg
aW5zdGFuY2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRz
VHlwZTo6SW52YWxpZEVudW0sIG51bGxwdHIsIHRydWUpKTsKKyAKKysgICAgICAgIGV4ZWNEcmF3
SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291
bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgfQor
ICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5l
TG9vcCwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCBudWxscHRyLCBmYWxzZSkpOworIAor
LSAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBl
TGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZm
ZXJPZmZzZXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3Rh
bmNlcyk7CisrICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGlu
ZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0
YW5jZXMpOworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAg
LTQxMywyMSArNDExLDMzIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6
OlN0YXRlICZnbFN0YXRlKQorIAorICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6
OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CisgCistI2RlZmluZSBEUkFXX0dFTkVSSUNfQVJSQVko
eGZiUGFzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorLSAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUs
IGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVu
dW0sIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICBudWxscHRyLCB4ZmJQYXNzKSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBpZiAoaW5zdGFu
Y2VzID09IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCistICAgICAgICAvKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJv
bSBub3JtYWwgZHJhd0FycmF5cygpICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhtdGxUeXBlLCBmaXJzdCwgY291
bnQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0g
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIGVsc2UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbnN0YW5j
ZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsgICAgICAgICAgICAgICAg
ICAgICAgICBcCisrICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1
c2VkKCkpCisrICAgIHsKKysgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9k
ZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgbnVsbHB0ciwgdHJ1ZSkpOworKwor
KyAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8v
IFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIG5vcm1hbCBkcmF3QXJyYXlzKCkKKysgICAgICAg
ICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUsIGZpcnN0LCBjb3VudCk7CisrICAgICAg
ICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgZXhlY0RyYXdJbnN0
YW5jZWQobXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKysgICAgICAgIH0K
KyAgICAgfQorKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZpcnN0LCBj
b3VudCwgaW5zdGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sCisrICAg
ICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgZmFsc2UpKTsKKyAKKy0gICAgQU5HTEVfTVRM
X1hGQl9EUkFXKERSQVdfR0VORVJJQ19BUlJBWSkKKysgICAgaWYgKGluc3RhbmNlcyA9PSAwKQor
KyAgICB7CisrICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJh
d0FycmF5cygpCisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUsIGZpcnN0LCBj
b3VudCk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBleGVjRHJhd0luc3Rh
bmNlZChtdGxUeXBlLCBmaXJzdCwgY291bnQsIGluc3RhbmNlQ291bnQpOworKyAgICB9CisgCisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CitAQCAtNDgwLDE2ICs0OTAs
MjUgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZnZW5JZHhCdWZmZXJPZmZzZXQsICZnZW5JbmRpY2VzQ291bnQpKTsKKyAKKyAgICAgICAgIEFO
R0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9t
RWxlbWVudHNBcnJheSgKKy0gICAgICAgICAgICB0aGlzLCB7dHlwZSwgY291bnQsIGluZGljZXMs
IGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBwcmltaXRpdmVSZXN0YXJ0fSkpOwor
KyAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBn
ZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9LAorKyAgICAgICAgICAgICZnZW5J
bmRpY2VzQ291bnQpKTsKKyAKKy0gICAgICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIu
Y29tbWl0KHRoaXMpKTsKKysgICAgICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIuY29t
bWl0KHRoaXMsIGZhbHNlKSk7CisrCisrICAgICAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFOR0xFX1RS
WShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCAwLCBj
b3VudCwgaW5zdGFuY2VzLCB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kaWNlcywgdHJ1ZSkpOworKworKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNl
ZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBl
VUludDMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZm
ZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgICAgIH0KKyAKKyAgICAg
ICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFu
Z2xlRmFuLCAwLCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRpY2VzLCBmYWxzZSkpOworIAorLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJh
d0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291
bnQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExJbmRl
eFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LAorLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzKTsKKysgICAgICAg
IGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbklu
ZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwor
IAorICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9ICAvLyBp
ZiAoY291bnQgPiAzKQorQEAgLTUzMiwyNyArNTUxLDg3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVk
YmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgdWludDMyX3QgZ2Vu
SWR4QnVmZmVyT2Zmc2V0OworICAgICAgICAgdWludDMyX3QgcmVzZXJ2ZWRJbmRpY2VzID0gY291
bnQgKiAyOworICAgICAgICAgdWludDMyX3QgZ2VuSW5kaWNlc0NvdW50OworLSAgICAgICAgQU5H
TEVfVFJZKEFsbG9jYXRlTGluZUxvb3BCdWZmZXJGcm9tUG9vbCh0aGlzLCByZXNlcnZlZEluZGlj
ZXMsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwKKysgICAgICAgIEFOR0xFX1RSWShBbGxvY2F0ZUJ1
ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywgJm1MaW5lTG9vcEluZGV4QnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlbklkeEJ1ZmZl
ciwgJmdlbklkeEJ1ZmZlck9mZnNldCkpOworIAorICAgICAgICAgQU5HTEVfVFJZKGdldERpc3Bs
YXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXko
CisgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIs
IGdlbklkeEJ1ZmZlck9mZnNldCwgcHJpbWl0aXZlUmVzdGFydH0sCisgICAgICAgICAgICAgJmdl
bkluZGljZXNDb3VudCkpOworIAorLSAgICAgICAgQU5HTEVfVFJZKG1MaW5lTG9vcEluZGV4QnVm
ZmVyLmNvbW1pdCh0aGlzKSk7CisrICAgICAgICBBTkdMRV9UUlkobUxpbmVMb29wSW5kZXhCdWZm
ZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CisrCisrICAgICAgICBpZiAobVN0YXRlLmlzVHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEFO
R0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OkxpbmVMb29wLCAw
LCBjb3VudCwgaW5zdGFuY2VzLCB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kaWNlcywgdHJ1ZSkpOworKworKyAgICAgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3Rh
bmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4
VHlwZVVJbnQzMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4
QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CisrICAgICAgICB9CisgCisg
ICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpM
aW5lTG9vcCwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kaWNlcywgZmFsc2UpKTsKKyAKKy0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRy
YXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdlbkluZGljZXND
b3VudCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTElu
ZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXMpOworKyAgICAg
ICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdl
bkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMp
OworIAorICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9ICAv
LyBpZiAoY291bnQgPj0gMikKKyAgICAgcmV0dXJuIGRyYXdFbGVtZW50c0luc3RhbmNlZChjb250
ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZXMsIGNvdW50LCB0eXBlLCBpbmRpY2VzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyk7CisgfQorK2FuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzU2ltcGxlVHlwZXNQcmltaXRpdmVSZXN0YXJ0
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2Rl
IG1vZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1l
bnRzVHlwZSB0eXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBpbnN0YW5jZXMpCisreworKworKyAgICBtdGw6OkJ1ZmZlclJlZiBnZW5JZHhCdWZm
ZXI7CisrICAgIHVpbnQzMl90IGdlbklkeEJ1ZmZlck9mZnNldDsKKysgICAgdWludDMyX3QgcmVz
ZXJ2ZWRJbmRpY2VzID0gY291bnQ7CisrICAgIHNpemVfdCBnZW5JbmRpY2VzQ291bnQ7CisrICAg
IEFOR0xFX1RSWShBbGxvY2F0ZUJ1ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywg
Jm1QcmltaXRpdmVSZXN0YXJ0QnVmZmVyLCAmZ2VuSWR4QnVmZmVyLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4QnVmZmVyT2Zmc2V0KSk7CisrICAgIHN3aXRj
aCAobW9kZSkKKysgICAgeworKyAgICAgICAgY2FzZSBnbDo6UHJpbWl0aXZlTW9kZTo6UG9pbnRz
OgorKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKAorKyAgICAgICAgICAgICAgICB0aGlzLCB7
dHlwZSwgY291bnQsIGluZGljZXMsIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCB0
cnVlfSwKKysgICAgICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOworKyAgICAgICAgICAg
IGJyZWFrOworKyAgICAgICAgY2FzZSBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZXM6CisrICAgICAg
ICAgICAgQU5HTEVfVFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZVByaW1pdGl2
ZVJlc3RhcnRMaW5lc0J1ZmZlcigKKysgICAgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50
LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1ZX0sCisrICAg
ICAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKysgICAgICAgICAgICBicmVhazsKKysg
ICAgICAgIGNhc2UgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlczoKKysgICAgICAgICAgICBB
TkdMRV9UUlkoZ2V0RGlzcGxheSgpLT5nZXRVdGlscygpLmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFy
dFRyaWFuZ2xlc0J1ZmZlcigKKysgICAgICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBp
bmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1ZX0sCisrICAgICAg
ICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKysgICAgfQorKyAgICBBTkdMRV9UUlkobVByaW1p
dGl2ZVJlc3RhcnRCdWZmZXIuY29tbWl0KHRoaXMpKTsKKysgICAgTVRMUHJpbWl0aXZlVHlwZSBt
dGxUeXBlID0gbXRsOjpHZXRQcmltaXRpdmVUeXBlKG1vZGUpOworKyAgICBpZiAobVN0YXRlLmlz
VHJhbnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorKyAgICB7CisrICAgICAgICBBTkdM
RV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9p
ZCAqPigwKSwgdHJ1ZSkpOworKworKyAgICAgICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKG10
bFR5cGUsICh1aW50MzJfdClnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZl
ck9mZnNldCwgaW5zdGFuY2VzKTsKKysgICAgfQorKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNv
bnRleHQsIG1vZGUsIDAsIGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIGZhbHNlKSk7
CisrCisrICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCAodWludDMyX3QpZ2Vu
SW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldCwgaW5zdGFuY2VzKTsKKysK
KysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKyAKKyBhbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmlt
aXRpdmVNb2RlIG1vZGUsCitAQCAtNTYzLDcgKzY0Miw2IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVk
YmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorIHsKKyAgICAgLy8gUmVhbCBpbnN0
YW5jZXMgY291bnQuIFplcm8gbWVhbnMgdGhpcyBpcyBub3QgaW5zdGFuY2VkIGRyYXcuCisgICAg
IEdMc2l6ZWkgaW5zdGFuY2VDb3VudCA9IGluc3RhbmNlcyA/IGluc3RhbmNlcyA6IDE7CistCisg
ICAgIGlmIChtQ3VsbEFsbFBvbHlnb25zICYmIGdsOjpJc1BvbHlnb25Nb2RlKG1vZGUpKQorICAg
ICB7CisgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CitAQCAtNTc3LDE4
ICs2NTUsMzkgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUpCisgICAgIHsKKyAgICAgICAgIHJldHVybiBkcmF3TGluZUxvb3BFbGVtZW50cyhj
b250ZXh0LCBjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5zdGFuY2VDb3VudCk7CisgICAgIH0KKy0K
KyAgICAgbXRsOjpCdWZmZXJSZWYgaWR4QnVmZmVyOworICAgICBzaXplX3QgY29udmVydGVkT2Zm
c2V0ICAgICAgICAgICAgID0gMDsKKyAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgY29udmVydGVk
VHlwZSA9IHR5cGU7CisrICAgIHNpemVfdCBjb252ZXJ0ZWRDb3VudCAgICAgICAgICAgICAgPSAo
c2l6ZV90KWNvdW50OworIAorLSAgICBBTkdMRV9UUlkobVZlcnRleEFycmF5LT5nZXRJbmRleEJ1
ZmZlcihjb250ZXh0LCB0eXBlLCBjb3VudCwgaW5kaWNlcywgJmlkeEJ1ZmZlciwKKy0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnRlZE9mZnNldCwgJmNv
bnZlcnRlZFR5cGUpKTsKKysgICAgQU5HTEVfVFJZKG1WZXJ0ZXhBcnJheS0+Z2V0SW5kZXhCdWZm
ZXIoY29udGV4dCwgdHlwZSwgbW9kZSwgY291bnQsIGluZGljZXMsICZpZHhCdWZmZXIsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJ0ZWRPZmZzZXQs
ICZjb252ZXJ0ZWRUeXBlLCAmY29udmVydGVkQ291bnQpKTsKKyAKKyAgICAgQVNTRVJUKGlkeEJ1
ZmZlcik7CisgICAgIEFTU0VSVCgoY29udmVydGVkT2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJP
ZmZzZXRBbGlnbm1lbnQpID09IDApOworKyAgICB1aW50MzJfdCBjb252ZXJ0ZWRDb3VudGkzMiA9
ICh1aW50MzJfdCljb252ZXJ0ZWRDb3VudDsKKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfVFJZKHNldHVw
RHJhdyhjb250ZXh0LCBtb2RlLCAwLCBjb252ZXJ0ZWRDb3VudGkzMiwgaW5zdGFuY2VzLCB0eXBl
LCBpbmRpY2VzLCB0cnVlKSk7CisrICAgICAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5cGUgPSBt
dGw6OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CisgCistICAgIEFOR0xFX1RSWShzZXR1cERyYXco
Y29udGV4dCwgbW9kZSwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwgaW5kaWNlcywgZmFsc2Up
KTsKKysgICAgICAgIE1UTEluZGV4VHlwZSBtdGxJZHhUeXBlID0gbXRsOjpHZXRJbmRleFR5cGUo
Y29udmVydGVkVHlwZSk7CisrCisrICAgICAgICBpZiAoaW5zdGFuY2VzID09IDApCisrICAgICAg
ICB7CisrICAgICAgICAgICAgLy8gTm9ybWFsIGRyYXcKKysgICAgICAgICAgICBtUmVuZGVyRW5j
b2Rlci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwg
aWR4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZl
cnRlZE9mZnNldCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAg
ICAgICAgICAgLy8gSW5zdGFuY2VkIGRyYXcKKysgICAgICAgICAgICBleGVjRHJhd0luZGV4ZWRJ
bnN0YW5jZWQobXRsVHlwZSwgY29udmVydGVkQ291bnRpMzIsIG10bElkeFR5cGUsIGlkeEJ1ZmZl
ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkT2Zmc2V0
LCBpbnN0YW5jZUNvdW50KTsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBBTkdMRV9UUlko
c2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5jZXMs
IHR5cGUsIGluZGljZXMsIGZhbHNlKSk7CisgCisgICAgIE1UTFByaW1pdGl2ZVR5cGUgbXRsVHlw
ZSA9IG10bDo6R2V0UHJpbWl0aXZlVHlwZShtb2RlKTsKKyAKK0BAIC01OTcsMTIgKzY5NiwxMyBA
QCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkK
KyAgICAgaWYgKGluc3RhbmNlcyA9PSAwKQorICAgICB7CisgICAgICAgICAvLyBOb3JtYWwgZHJh
dworLSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQobXRsVHlwZSwgY291bnQsIG10
bElkeFR5cGUsIGlkeEJ1ZmZlciwgY29udmVydGVkT2Zmc2V0KTsKKysgICAgICAgIG1SZW5kZXJF
bmNvZGVyLmRyYXdJbmRleGVkKG10bFR5cGUsIGNvbnZlcnRlZENvdW50aTMyLCBtdGxJZHhUeXBl
LCBpZHhCdWZmZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0
ZWRPZmZzZXQpOworICAgICB9CisgICAgIGVsc2UKKyAgICAgeworICAgICAgICAgLy8gSW5zdGFu
Y2VkIGRyYXcKKy0gICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkSW5zdGFuY2VkKG10
bFR5cGUsIGNvdW50LCBtdGxJZHhUeXBlLCBpZHhCdWZmZXIsIGNvbnZlcnRlZE9mZnNldCwKKysg
ICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkz
MiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLCBjb252ZXJ0ZWRPZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb3VudCk7CisgICAgIH0KKyAKK0BAIC02MjUs
NyArNzI1LDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCisgeworLSAgICAvLyBOT1RFKGhx
bGUpOiBFUyAzLjIKKyAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICByZXR1cm4gYW5nbGU6OlJl
c3VsdDo6U3RvcDsKKyB9CitAQCAtNjQ5LDEwICs3NDgsOSBAQCBib29sIElzVHJhbnNmb3JtRmVl
ZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSBpbnN0YW5jZUNvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZl
cnRleCkKKyB7CistICAgIC8vIE5PVEUoaHFsZSk6IEVTIDMuMgorICAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworIH0KK0BAIC02NjksNyArNzY3
LDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0
b3A7CisgfQorLQorIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1JhbmdlRWxlbWVudHMo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IHN0YXJ0LAorQEAgLTY5MCw3ICs3
ODcsNiBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xT
dGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCisgeworLSAgICAvLyBO
T1RFKGhxbGUpOiBFUyAzLjIKKyAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6U3RvcDsKKyB9CitAQCAtNzEzLDYgKzgwOSw2NCBAQCBib29sIElzVHJhbnNm
b3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OlN0b3A7CisgfQorIAorK3ZvaWQgQ29udGV4dE10bDo6ZXhlY0RyYXdJbnN0
YW5jZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBlLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4U3RhcnQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKKyt7CisrICAgIGlmIChn
ZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcuZW5h
YmxlZCkKKysgICAgeworKyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luc3RhbmNlZChwcmlt
aXRpdmVUeXBlLCB2ZXJ0ZXhTdGFydCwgdmVydGV4Q291bnQsIGluc3RhbmNlcyk7CisrICAgIH0K
KysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KHByaW1pdGl2
ZVR5cGUsIHZlcnRleFN0YXJ0LCB2ZXJ0ZXhDb3VudCk7CisrICAgICAgICBmb3IgKHVpbnQzMl90
IGluc3QgPSAxOyBpbnN0IDwgaW5zdGFuY2VzOyArK2luc3QpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgbURyaXZlclVuaWZvcm1zLmVtdWxhdGVkSW5zdGFuY2VJRCA9IGluc3Q7CisrCisrICAg
ICAgICAgICAgbVJlbmRlckVuY29kZXIuc2V0VmVydGV4RGF0YShtRHJpdmVyVW5pZm9ybXMsIG10
bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsKKysKKysgICAgICAgICAgICBtVmVydGV4
QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgaW5zdCk7Cisr
CisrICAgICAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhdyhwcmltaXRpdmVUeXBlLCB2ZXJ0ZXhT
dGFydCwgdmVydGV4Q291bnQpOworKyAgICAgICAgfQorKyAgICAgICAgLy8gUmVzZXQgaW5zdGFu
Y2UgSUQgdG8gemVybworKyAgICAgICAgbVZlcnRleEFycmF5LT5lbXVsYXRlSW5zdGFuY2VEcmF3
U3RlcCgmbVJlbmRlckVuY29kZXIsIDApOworKyAgICB9CisrfQorKworK3ZvaWQgQ29udGV4dE10
bDo6ZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlw
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBp
bmRleENvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1U
TEluZGV4VHlwZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgJmluZGV4QnVmZmVyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2Vz
KQorK3sKKysgICAgaWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4
SW5zdGFuY2VkRHJhdy5lbmFibGVkKQorKyAgICB7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5k
cmF3SW5kZXhlZEluc3RhbmNlZChwcmltaXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUs
IGluZGV4QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgewor
KyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWQocHJpbWl0aXZlVHlwZSwgaW5kZXhD
b3VudCwgaW5kZXhUeXBlLCBpbmRleEJ1ZmZlciwgYnVmZmVyT2Zmc2V0KTsKKysgICAgICAgIGZv
ciAodWludDMyX3QgaW5zdCA9IDE7IGluc3QgPCBpbnN0YW5jZXM7ICsraW5zdCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBtRHJpdmVyVW5pZm9ybXMuZW11bGF0ZWRJbnN0YW5jZUlEID0gaW5z
dDsKKysKKysgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJV
bmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOworKworKyAgICAgICAg
ICAgIG1WZXJ0ZXhBcnJheS0+ZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVy
LCBpbnN0KTsKKysKKysgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChwcmlt
aXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUsIGluZGV4QnVmZmVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlck9mZnNldCk7CisrICAgICAgICB9
CisrICAgICAgICAvLyBSZXNldCBpbnN0YW5jZSBJRCB0byB6ZXJvCisrICAgICAgICBtVmVydGV4
QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgMCk7CisrICAg
IH0KKyt9CisrCisgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjptdWx0aURyYXdBcnJheXMoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTGludCAqZmlyc3RzLAorQEAgLTgwMiwxNSAr
OTU2LDE1IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZn
bFN0YXRlKQorIC8vIEVYVF9kZWJ1Z19tYXJrZXIKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
Omluc2VydEV2ZW50TWFya2VyKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCisg
eworKyAgICBtQ21kQnVmZmVyLmluc2VydERlYnVnU2lnbihDb252ZXJ0TWFya2VyVG9DcHAobGVu
Z3RoLCBtYXJrZXIpKTsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0K
KyAKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnB1c2hHcm91cE1hcmtlcihHTHNpemVpIGxl
bmd0aCwgY29uc3QgY2hhciAqbWFya2VyKQorIHsKKy0gICAgbUNtZEJ1ZmZlci5wdXNoRGVidWdH
cm91cChDb252ZXJ0TWFya2VyVG9TdHJpbmcobGVuZ3RoLCBtYXJrZXIpKTsKKysgICAgbUNtZEJ1
ZmZlci5wdXNoRGVidWdHcm91cChDb252ZXJ0TWFya2VyVG9DcHAobGVuZ3RoLCBtYXJrZXIpKTsK
KyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKy0KKyBhbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6OnBvcEdyb3VwTWFya2VyKCkKKyB7CisgICAgIG1DbWRCdWZmZXIucG9w
RGVidWdHcm91cCgpOworQEAgLTExNTUsMTAgKzEzMDksMTIgQEAgYm9vbCBJc1RyYW5zZm9ybUZl
ZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgeworICAgICByZXR1cm4gbmV3
IFF1ZXJ5TXRsKHR5cGUpOworIH0KKysKKyBGZW5jZU5WSW1wbCAqQ29udGV4dE10bDo6Y3JlYXRl
RmVuY2VOVigpCisgeworICAgICByZXR1cm4gbmV3IEZlbmNlTlZNdGwoKTsKKyB9CisrCisgU3lu
Y0ltcGwgKkNvbnRleHRNdGw6OmNyZWF0ZVN5bmMoKQorIHsKKyAgICAgcmV0dXJuIG5ldyBTeW5j
TXRsKCk7CitAQCAtMTIwNSw2ICsxMzYxLDY5IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09u
bHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICByZXR1cm4gbnVsbHB0cjsKKyB9Cisg
Cisrdm9pZCBDb250ZXh0TXRsOjppbnZhbGlkYXRlQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycygpCisreworKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVU
cmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAgICBtRGlydHlCaXRzLnNl
dChESVJUWV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpOworKyAgICB9CisrfQorKwor
K3ZvaWQgQ29udGV4dE10bDo6b25UcmFuc2Zvcm1GZWVkYmFja1N0YXRlQ2hhbmdlZCgpCisrewor
KyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVk
YmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMo
KTsKKysgICAgfQorK30KKysKKythbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uQmVnaW5UcmFu
c2Zvcm1GZWVkYmFjaygKKysgICAgc2l6ZV90IGJ1ZmZlckNvdW50LAorKyAgICBjb25zdCBnbDo6
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKQorK3sK
KysgICAgb25UcmFuc2Zvcm1GZWVkYmFja1N0YXRlQ2hhbmdlZCgpOworKworKyAgICBmb3IgKHNp
emVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYnVmZmVyQ291bnQ7ICsrYnVmZmVy
SW5kZXgpCisrICAgIHsKKysgICAgICAgIGlmIChtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycy5jb3VudChidWZmZXJzW2J1ZmZlckluZGV4XSkgIT0gMCkKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBlbmRFbmNvZGluZyhtUmVuZGVyRW5jb2Rlcik7CisrICAgICAgICAgICAgYnJlYWs7
CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgcG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlclNldChidWZmZXJDb3VudCwgYnVmZmVycyk7CisrCisrICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKyt9CisrCisrdm9pZCBDb250ZXh0TXRsOjpwb3B1bGF0ZVRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyU2V0KAorKyAgICBzaXplX3QgYnVmZmVyQ291bnQsCisrICAgIGNvbnN0
IGdsOjpUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZlcnMp
CisreworKyAgICBmb3IgKHNpemVfdCBidWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYnVm
ZmVyQ291bnQ7ICsrYnVmZmVySW5kZXgpCisrICAgIHsKKysgICAgICAgIG1DdXJyZW50VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzLmluc2VydChidWZmZXJzW2J1ZmZlckluZGV4XSk7CisrICAgIH0K
Kyt9CisrCisrdm9pZCBDb250ZXh0TXRsOjpvbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCkKKyt7Cisr
ICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRi
YWNrLmVuYWJsZWQpCisrICAgIHsKKysgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNo
YW5nZWQoKTsKKysgICAgfQorK30KKysKKythbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uUGF1
c2VUcmFuc2Zvcm1GZWVkYmFjaygpCisreworKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0
dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVkKQorKyAgICB7CisrICAgICAg
ICBvblRyYW5zZm9ybUZlZWRiYWNrU3RhdGVDaGFuZ2VkKCk7CisrICAgIH0KKysgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRN
dGw6OmRpc3BhdGNoQ29tcHV0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbnVtR3JvdXBzWCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbnVtR3JvdXBz
WSwKK0BAIC0xMzMxLDYgKzE1NTAsMTEgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShj
b25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIHJldHVybiBnZXREaXNwbGF5KCktPmdldFBp
eGVsRm9ybWF0KGFuZ2xlRm9ybWF0SWQpOworIH0KKyAKKytjb25zdCBtdGw6OkZvcm1hdENhcHMg
JkNvbnRleHRNdGw6OmdldE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgbXRsRm9ybWF0
KSBjb25zdAorK3sKKysgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2Fw
cyhtdGxGb3JtYXQpOworK30KKysKKyAvLyBTZWUgbXRsOjpGb3JtYXRUYWJsZTo6Z2V0VmVydGV4
Rm9ybWF0KCkKKyBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmQ29udGV4dE10bDo6Z2V0VmVydGV4
Rm9ybWF0KGFuZ2xlOjpGb3JtYXRJRCBhbmdsZUZvcm1hdElkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0aWdodGx5UGFja2VkKSBj
b25zdAorQEAgLTEzMzgsMTEgKzE1NjIsNiBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5
KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0
VmVydGV4Rm9ybWF0KGFuZ2xlRm9ybWF0SWQsIHRpZ2h0bHlQYWNrZWQpOworIH0KKyAKKy1jb25z
dCBtdGw6OkZvcm1hdENhcHMgJkNvbnRleHRNdGw6OmdldE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXQgbXRsRm9ybWF0KSBjb25zdAorLXsKKy0gICAgcmV0dXJuIGdldERpc3BsYXkoKS0+
Z2V0TmF0aXZlRm9ybWF0Q2FwcyhtdGxGb3JtYXQpOworLX0KKy0KKyBhbmdsZTo6UmVzdWx0IENv
bnRleHRNdGw6OmdldEluY29tcGxldGVUZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqKnRleHR1cmVPdXQpCitAQCAtMTM2Miw2ICsxNTgxLDIyIEBA
IGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQor
IAorICAgICAvLyBSZXNvbHZlIHZpc2liaWxpdHkgcmVzdWx0cworICAgICBtT2NjbHVzaW9uUXVl
cnlQb29sLnJlc29sdmVWaXNpYmlsaXR5UmVzdWx0cyh0aGlzKTsKKysKKysgICAgbUN1cnJlbnRU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMuY2xlYXIoKTsKKysKKysgICAgLy8gUmVzZXQgc2VyaWFs
cyBmb3IgWEZCIGlmIGFjdGl2ZS4KKysgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNr
QWN0aXZlVW5wYXVzZWQoKSkKKysgICAgeworKyAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVj
dXRhYmxlICpleGVjdXRhYmxlID0gbVN0YXRlLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CisrICAg
ICAgICBBU1NFUlQoZXhlY3V0YWJsZSk7CisrICAgICAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQg
PSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrCisrICAg
ICAgICBUcmFuc2Zvcm1GZWVkYmFja010bCAqdHJhbnNmb3JtRmVlZGJhY2tNdGwgPQorKyAgICAg
ICAgICAgIG10bDo6R2V0SW1wbChtU3RhdGUuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkp
OworKworKyAgICAgICAgcG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlclNldCh4ZmJCdWZm
ZXJDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJh
bnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlckhhbmRsZXMoKSk7CisrICAgIH0KKyB9CisgCisg
dm9pZCBDb250ZXh0TXRsOjplbmRFbmNvZGluZyhib29sIGZvcmNlU2F2ZVJlbmRlclBhc3NDb250
ZW50KQorQEAgLTEzOTAsNyArMTYyNSw3IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHko
Y29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorIAorIHZvaWQgQ29udGV4dE10bDo6Zmx1c2hDb21t
YW5kQnVmZXIoKQorIHsKKy0gICAgaWYgKCFtQ21kQnVmZmVyLnJlYWR5KCkpCisrICAgIGlmICgh
bUNtZEJ1ZmZlci52YWxpZCgpKQorICAgICB7CisgICAgICAgICByZXR1cm47CisgICAgIH0KK0BA
IC0xNDU0LDYgKzE2ODksMjcgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBn
bDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIC8vIE5lZWQgdG8gcmUtYXBwbHkgZXZlcnl0aGluZyBv
biBuZXh0IGRyYXcgY2FsbC4KKyAgICAgbURpcnR5Qml0cy5zZXQoKTsKKyAKKysgICAgaWQ8TVRM
RGV2aWNlPiBtZXRhbERldmljZSA9IGdldERpc3BsYXkoKS0+Z2V0TWV0YWxEZXZpY2UoKTsKKysg
ICAgaWYgKG10bDo6RGV2aWNlSGFzTWF4aW11bVJlbmRlclRhcmdldFNpemUobWV0YWxEZXZpY2Up
KQorKyAgICB7CisrICAgICAgICBNVExSZW5kZXJQYXNzRGVzY3JpcHRvciAqb2JqQ0Rlc2MgPSBb
TVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgcmVuZGVyUGFzc0Rlc2NyaXB0b3JdOworKyAgICAgICAg
ZGVzYy5jb252ZXJ0VG9NZXRhbERlc2Mob2JqQ0Rlc2MpOworKyAgICAgICAgTlNVSW50ZWdlciBt
YXhTaXplID0gbXRsOjpHZXRNYXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhtZXRh
bERldmljZSk7CisrICAgICAgICBOU1VJbnRlZ2VyIHJlbmRlclRhcmdldFNpemUgPQorKyAgICAg
ICAgICAgIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3Iob2Jq
Q0Rlc2MsIHRoaXMsIG1ldGFsRGV2aWNlKTsKKysgICAgICAgIGlmIChyZW5kZXJUYXJnZXRTaXpl
ID4gbWF4U2l6ZSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBOU1N0cmluZyAqZXJyb3JTdHJp
bmcgPQorKyAgICAgICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIlRoaXMg
c2V0IG9mIHJlbmRlciB0YXJnZXRzIHJlcXVpcmVzICVsdSBieXRlcyBvZiAiCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAicGl4ZWwgc3RvcmFnZS4gVGhpcyBk
ZXZpY2Ugc3VwcG9ydHMgJWx1IGJ5dGVzLiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldFNpemUsIG1heFNpemVdOworKyAgICAgICAgICAg
IE5TRXJyb3IgKmVyciA9IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIk1UTFZhbGlkYXRpb25F
cnJvciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
ZGU6LTEKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcklu
Zm86QHtOU0xvY2FsaXplZERlc2NyaXB0aW9uS2V5IDogZXJyb3JTdHJpbmd9XTsKKysgICAgICAg
ICAgICB0aGlzLT5oYW5kbGVFcnJvcihlcnIsIF9fRklMRV9fLCBBTkdMRV9GVU5DVElPTiwgX19M
SU5FX18pOworKyAgICAgICAgICAgIHJldHVybiBuaWw7CisrICAgICAgICB9CisrICAgIH0KKyAg
ICAgcmV0dXJuICZtUmVuZGVyRW5jb2Rlci5yZXN0YXJ0KGRlc2MpOworIH0KKyAKK0BAIC0xNDY3
LDkgKzE3MjMsMTAgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3Rh
dGUgJmdsU3RhdGUpCisgCisgICAgIG10bDo6UmVuZGVyUGFzc0Rlc2MgcnBEZXNjOworIAorLSAg
ICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlICAgICAgPSB0ZXh0dXJlVGFyZ2V0
OworLSAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5sZXZlbCAgICAgICAgPSBpbmRleC5n
ZXROYXRpdmVMZXZlbCgpOworLSAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5zbGljZU9y
RGVwdGggPSBpbmRleC5oYXNMYXllcigpID8gaW5kZXguZ2V0TGF5ZXJJbmRleCgpIDogMDsKKysg
ICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT50ZXh0dXJlID0gdGV4
dHVyZVRhcmdldDsKKysgICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0
LT5sZXZlbCAgID0gaW5kZXguZ2V0TmF0aXZlTGV2ZWwoKTsKKysgICAgcnBEZXNjLmNvbG9yQXR0
YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT5zbGljZU9yRGVwdGggPQorKyAgICAgICAgaW5kZXgu
aGFzTGF5ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7CisgICAgIHJwRGVzYy5udW1D
b2xvckF0dGFjaG1lbnRzID0gMTsKKyAgICAgcnBEZXNjLnNhbXBsZUNvdW50ICAgICAgICAgPSB0
ZXh0dXJlVGFyZ2V0LT5zYW1wbGVzKCk7CisgCitAQCAtMTUzNiwxMiArMTc5MywxMiBAQCBib29s
IElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyB2
b2lkIENvbnRleHRNdGw6OmVuc3VyZUNvbW1hbmRCdWZmZXJSZWFkeSgpCisgeworLSAgICBpZiAo
IW1DbWRCdWZmZXIucmVhZHkoKSkKKysgICAgaWYgKCFtQ21kQnVmZmVyLnZhbGlkKCkpCisgICAg
IHsKKyAgICAgICAgIG1DbWRCdWZmZXIucmVzdGFydCgpOworICAgICB9CisgCistICAgIEFTU0VS
VChtQ21kQnVmZmVyLnJlYWR5KCkpOworKyAgICBBU1NFUlQobUNtZEJ1ZmZlci52YWxpZCgpKTsK
KyB9CisgCisgdm9pZCBDb250ZXh0TXRsOjp1cGRhdGVWaWV3cG9ydChGcmFtZWJ1ZmZlck10bCAq
ZnJhbWVidWZmZXJNdGwsCitAQCAtMTY3Nyw3ICsxOTM0LDcgQEAgYm9vbCBJc1RyYW5zZm9ybUZl
ZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIH0KKyB9CisgCistdm9p
ZCBDb250ZXh0TXRsOjpvbkJhY2tidWZmZXJSZXNpemVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LCBXaW5kb3dTdXJmYWNlTXRsICpiYWNrYnVmZmVyKQorK3ZvaWQgQ29udGV4dE10bDo6b25C
YWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFjZU10bFBy
b3RvY29sICpiYWNrYnVmZmVyKQorIHsKKyAgICAgY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlICAg
ID0gZ2V0U3RhdGUoKTsKKyAgICAgRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyID0gbXRsOjpH
ZXRJbXBsKGdsU3RhdGUuZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOworQEAgLTE2ODYsMTAgKzE5NDMs
MTMgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3Rh
dGUpCisgICAgICAgICByZXR1cm47CisgICAgIH0KKyAKKysgICAgdXBkYXRlVmlld3BvcnQoZnJh
bWVidWZmZXIsIGdsU3RhdGUuZ2V0Vmlld3BvcnQoKSwgZ2xTdGF0ZS5nZXROZWFyUGxhbmUoKSwK
KysgICAgICAgICAgICAgICAgICAgZ2xTdGF0ZS5nZXRGYXJQbGFuZSgpKTsKKysgICAgdXBkYXRl
U2Npc3NvcihnbFN0YXRlKTsKKyAgICAgb25EcmF3RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUoY29u
dGV4dCwgZnJhbWVidWZmZXIsIHRydWUpOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0IENvbnRleHRN
dGw6Om9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVl
cnlNdGwgKnF1ZXJ5KQorK2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6b25PY2NsdXNpb25RdWVy
eUJlZ2FuKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCisgewor
ICAgICBBU1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IG51bGxwdHIpOworICAgICBtT2NjbHVzaW9u
UXVlcnkgPSBxdWVyeTsKK0BAIC0xNzA2LDcgKzE5NjYsNyBAQCBib29sIElzVHJhbnNmb3JtRmVl
ZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKy12b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVl
cnlFbmQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKKyt2b2lk
IENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlFbmRlZChjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KQorIHsKKyAgICAgQVNTRVJUKG1PY2NsdXNpb25RdWVyeSA9
PSBxdWVyeSk7CisgCitAQCAtMTcxOCw3ICsxOTc4LDcgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRi
YWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgCisgICAgIG1PY2NsdXNpb25RdWVy
eSA9IG51bGxwdHI7CisgfQorLXZvaWQgQ29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeURlc3Ry
b3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKKyt2b2lkIENv
bnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKKyB7CisgICAgIGlmIChxdWVyeS0+Z2V0QWxsb2NhdGVk
VmlzaWJpbGl0eU9mZnNldHMoKS5lbXB0eSgpKQorICAgICB7CitAQCAtMTcyNiw3ICsxOTg2LDcg
QEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUp
CisgICAgIH0KKyAgICAgaWYgKG1PY2NsdXNpb25RdWVyeSA9PSBxdWVyeSkKKyAgICAgeworLSAg
ICAgICAgb25PY2NsdXNpb25RdWVyeUVuZChjb250ZXh0LCBxdWVyeSk7CisrICAgICAgICBvbk9j
Y2x1c2lvblF1ZXJ5RW5kZWQoY29udGV4dCwgcXVlcnkpOworICAgICB9CisgICAgIG1PY2NsdXNp
b25RdWVyeVBvb2wuZGVhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KHRoaXMsIHF1ZXJ5KTsKKyB9CitAQCAt
MTc3MCwyMCArMjAzMCw2IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6
OlN0YXRlICZnbFN0YXRlKQorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cisg
fQorIAorLXZvaWQgQ29udGV4dE10bDo6b25UcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwgVHJhbnNmb3JtRmVlZGJhY2tNdGwgKnhmYikKKy17CistICAg
IC8vIE5PVEUoaHFsZSk6IFdlIGhhdmUgdG8gZW5kIGN1cnJlbnQgcmVuZGVyIHBhc3MgdG8gZW5h
YmxlIHN5bmNocm9uaXphdGlvbiBiZWZvcmUgWEZCCistICAgIC8vIGJ1ZmZlcnMgY291bGQgYmUg
dXNlZCBhcyB2ZXJ0ZXggaW5wdXQuIENvbnNpZGVyIGEgYmV0dGVyIGFwcHJvYWNoLgorLSAgICBl
bmRFbmNvZGluZyh0cnVlKTsKKy19CistCistdm9pZCBDb250ZXh0TXRsOjpvblRyYW5zZm9ybUZl
ZWRiYWNrSW5hY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRyYW5zZm9ybUZlZWRi
YWNrTXRsICp4ZmIpCisteworLSAgICAvLyBOT1RFKGhxbGUpOiBXZSBoYXZlIHRvIGVuZCBjdXJy
ZW50IHJlbmRlciBwYXNzIHRvIGVuYWJsZSBzeW5jaHJvbml6YXRpb24gYmVmb3JlIFhGQgorLSAg
ICAvLyBidWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25zaWRlciBhIGJl
dHRlciBhcHByb2FjaC4KKy0gICAgZW5kRW5jb2RpbmcodHJ1ZSk7CistfQorLQorIHZvaWQgQ29u
dGV4dE10bDo6cXVldWVFdmVudFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVu
dCwgdWludDY0X3QgdmFsdWUpCisgeworICAgICBlbnN1cmVDb21tYW5kQnVmZmVyUmVhZHkoKTsK
K0BAIC0xODQyLDEwICsyMDg4LDE5IEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29u
c3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAorLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgeGZiUGFzcykKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdykKKyB7CisgICAg
IEFTU0VSVChtUHJvZ3JhbSk7CisgCisrICAgIC8vIFVwZGF0ZSB0cmFuc2Zvcm0gZmVlZGJhY2sg
b2Zmc2V0cyBvbiBldmVyeSBkcmF3IGNhbGwuCisrICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1G
ZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCisrICAgIHsKKysgICAgICAgIEFTU0VSVChmaXJzdFZl
cnRleCAhPSAtMSk7CisrICAgICAgICBtWGZiQmFzZVZlcnRleCAgICAgICAgICAgICA9IGZpcnN0
VmVydGV4OworKyAgICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2UgPSB2ZXJ0ZXhPcklu
ZGV4Q291bnQ7CisrICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMoKTsKKysgICAgfQor
KworICAgICAvLyBpbnN0YW5jZXM9MCBtZWFucyBubyBpbnN0YW5jZWQgZHJhdy4KKyAgICAgR0xz
aXplaSBpbnN0YW5jZUNvdW50ID0gaW5zdGFuY2VzID8gaW5zdGFuY2VzIDogMTsKKyAKK0BAIC0x
ODYyLDIwICsyMTE3LDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShjb25zdCBnbDo6
U3RhdGUgJmdsU3RhdGUpCisgICAgICAgICBBTkdMRV9UUlkoaGFuZGxlRGlydHlBY3RpdmVUZXh0
dXJlcyhjb250ZXh0KSk7CisgICAgIH0KKyAKKy0gICAgaWYgKG1EaXJ0eUJpdHMudGVzdChESVJU
WV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEKSkKKy0gICAgeworLSAgICAgICAgaWYgKGdldFN0YXRl
KCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCkpCistICAgICAgICB7CistICAg
ICAgICAgICAgLy8gSWYgWEZCIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHJlc2V0IHJlbmRlciBwYXNz
IHNpbmNlIHdlIGNvdWxkIHVzZSBhIGR1bW15IHJlbmRlcgorLSAgICAgICAgICAgIC8vIHRhcmdl
dCBpZiBvbmx5IFhGQiBpcyBuZWVkZWQuCistICAgICAgICAgICAgaW52YWxpZGF0ZVN0YXRlKGNv
bnRleHQpOworLSAgICAgICAgfQorLSAgICAgICAgZWxzZQorLSAgICAgICAgeworLSAgICAgICAg
ICAgIGludmFsaWRhdGVSZW5kZXJQaXBlbGluZSgpOworLSAgICAgICAgfQorLSAgICB9CistCisg
ICAgIGlmICghbVJlbmRlckVuY29kZXIudmFsaWQoKSkKKyAgICAgeworICAgICAgICAgLy8gcmUt
YXBwbHkgZXZlcnl0aGluZworQEAgLTE4ODQsNyArMjEyNSwxMSBAQCBib29sIElzVHJhbnNmb3Jt
RmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAKKyAgICAgaWYgKG1EaXJ0
eUJpdHMudGVzdChESVJUWV9CSVRfRFJBV19GUkFNRUJVRkZFUikpCisgICAgIHsKKy0gICAgICAg
IEFOR0xFX1RSWShoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29udGV4dCkpOworKyAgICAgICAgLy8g
U3RhcnQgbmV3IHJlbmRlciBjb21tYW5kIGVuY29kZXIKKysgICAgICAgIEFOR0xFX01UTF9UUlko
dGhpcywgbURyYXdGcmFtZWJ1ZmZlci0+ZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQoY29udGV4dCkp
OworKworKyAgICAgICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZworKyAgICAgICAgaW52YWxpZGF0
ZVN0YXRlKGNvbnRleHQpOworICAgICB9CisgCisgICAgIGlmIChtT2NjbHVzaW9uUXVlcnkgJiYg
bU9jY2x1c2lvblF1ZXJ5UG9vbC5nZXROdW1SZW5kZXJQYXNzQWxsb2NhdGVkUXVlcmllcygpID09
IDApCitAQCAtMTg5NCwxNyArMjEzOSwxMSBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5
KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgICAgIEFOR0xFX1RSWShzdGFydE9jY2x1
c2lvblF1ZXJ5SW5SZW5kZXJQYXNzKG1PY2NsdXNpb25RdWVyeSwgZmFsc2UpKTsKKyAgICAgfQor
IAorLSAgICBib29sIGlzUGlwZWxpbmVEZXNjQ2hhbmdlZDsKKy0gICAgQU5HTEVfVFJZKGNoZWNr
SWZQaXBlbGluZUNoYW5nZWQoY29udGV4dCwgbW9kZSwgeGZiUGFzcywgJmlzUGlwZWxpbmVEZXNj
Q2hhbmdlZCkpOworKyAgICBib29sIGNoYW5nZWRQaXBlbGluZTsKKysgICAgQU5HTEVfVFJZKGNo
ZWNrSWZQaXBlbGluZUNoYW5nZWQoY29udGV4dCwgbW9kZSwgbVN0YXRlLmlzVHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmUoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNo
YW5nZWRQaXBlbGluZSkpOworIAorICAgICBib29sIHVuaWZvcm1CdWZmZXJzRGlydHkgPSBmYWxz
ZTsKKy0KKy0gICAgaWYgKElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGdldFN0YXRlKCkpKQorLSAg
ICB7CistICAgICAgICAvLyBGaWx0ZXIgb3V0IHVubmVlZGVkIGRpcnR5IGJpdHMKKy0gICAgICAg
IGZpbHRlck91dFhGQk9ubHlEaXJ0eUJpdHMoY29udGV4dCk7CistICAgIH0KKy0KKyAgICAgZm9y
IChzaXplX3QgYml0IDogbURpcnR5Qml0cykKKyAgICAgeworICAgICAgICAgc3dpdGNoIChiaXQp
CitAQCAtMTk1Myw4ICsyMTkyLDEwIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29u
c3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgICAgIGNhc2UgRElSVFlfQklUX1VOSUZP
Uk1fQlVGRkVSU19CSU5ESU5HOgorICAgICAgICAgICAgICAgICB1bmlmb3JtQnVmZmVyc0RpcnR5
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBESVJU
WV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM6CisrICAgICAgICAgICAgICAgIEFOR0xF
X1RSWShoYW5kbGVEaXJ0eUdyYXBoaWNzVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzRW11bGF0aW9u
KGNvbnRleHQpKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSBE
SVJUWV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEOgorLSAgICAgICAgICAgICAgICAvLyBBbHJlYWR5
IGhhbmRsZWQuCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CitAQCAtMTk2Miw3MSArMjIwMywyMCBA
QCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkK
KyAgICAgICAgIH0KKyAgICAgfQorIAorLSAgICBpZiAoeGZiUGFzcyAmJiAhbURpcnR5Qml0cy50
ZXN0KERJUlRZX0JJVF9EUklWRVJfVU5JRk9STVMpKQorLSAgICB7CistICAgICAgICAvLyBJZiBo
YW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKCkgd2FzIG5vdCBjYWxsZWQgYW5kIHRoaXMgaXMgWEZC
IHBhc3MsIHdlIHN0aWxsIG5lZWQgdG8KKy0gICAgICAgIC8vIHVwZGF0ZSBYRkIgcmVsYXRlZCB1
bmlmb3JtcworLSAgICAgICAgQU5HTEVfVFJZKAorLSAgICAgICAgICAgIGZpbGxEcml2ZXJYRkJV
bmlmb3JtcyhmaXJzdFZlcnRleCwgdmVydGV4T3JJbmRleENvdW50LCAvKiogc2tpcHBlZEluc3Rh
bmNlcyAqLyAwKSk7CistICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2
ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOworLSAgICB9Cist
CisgICAgIG1EaXJ0eUJpdHMucmVzZXQoKTsKKyAKKy0gICAgQU5HTEVfVFJZKG1Qcm9ncmFtLT5z
ZXR1cERyYXcoY29udGV4dCwgJm1SZW5kZXJFbmNvZGVyLCBtUmVuZGVyUGlwZWxpbmVEZXNjLAor
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BpcGVsaW5lRGVzY0NoYW5nZWQs
IHRleHR1cmVDaGFuZ2VkLCB1bmlmb3JtQnVmZmVyc0RpcnR5KSk7CistCistICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKy19CistCistdm9pZCBDb250ZXh0TXRsOjpmaWx0ZXJP
dXRYRkJPbmx5RGlydHlCaXRzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorLXsKKy0gICAg
QVNTRVJUKElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGdldFN0YXRlKCkpKTsKKy0KKy0gICAgQVNT
RVJUKG1SZW5kZXJFbmNvZGVyLnJlbmRlclBhc3NEZXNjKCkuY29sb3JBdHRhY2htZW50c1swXS50
ZXh0dXJlID09IG1EdW1teVhGQlJlbmRlclRleHR1cmUpOworLQorLSAgICAvLyBJbiB0cmFuc2Zv
cm0gZmVlZGJhY2sgb25seSBwYXNzLCBvbmx5IHZlcnRleCBzaGFkZXIncyByZWxhdGVkIHN0YXRl
cyBhcmUgbmVlZGVkLgorLSAgICBjb25zdGV4cHIgc2l6ZV90IGtVbm5lZWRlZEJpdHMgPQorLSAg
ICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9ERVBUSF9TVEVOQ0lMX0RFU0MpIHwK
Ky0gICAgICAgIGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfREVQVEhfQklBUykgfCBhbmds
ZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX1NURU5DSUxfUkVGKSB8CistICAgICAgICBhbmdsZTo6
Qml0PHNpemVfdD4oRElSVFlfQklUX0JMRU5EX0NPTE9SKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihE
SVJUWV9CSVRfVklFV1BPUlQpIHwKKy0gICAgICAgIGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9C
SVRfU0NJU1NPUikgfCBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0NVTExfTU9ERSkgfAor
LSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9XSU5ESU5HKTsKKy0KKy0gICAg
bURpcnR5Qml0cyAmPSB+a1VubmVlZGVkQml0czsKKy19CistCistYW5nbGU6OlJlc3VsdCBDb250
ZXh0TXRsOjpoYW5kbGVEaXJ0eVJlbmRlclBhc3MoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQp
CisteworLSAgICBpZiAoIUlzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KG1TdGF0ZSkpCisrICAgIGlm
ICh0cmFuc2Zvcm1GZWVkYmFja0RyYXcpCisgICAgIHsKKy0gICAgICAgIC8vIFN0YXJ0IG5ldyBy
ZW5kZXIgY29tbWFuZCBlbmNvZGVyCistICAgICAgICBBTkdMRV9NVExfVFJZKHRoaXMsIG1EcmF3
RnJhbWVidWZmZXItPmVuc3VyZVJlbmRlclBhc3NTdGFydGVkKGNvbnRleHQpKTsKKy0gICAgfQor
LSAgICBlbHNlCistICAgIHsKKy0gICAgICAgIC8vIFhGQiBpcyBhY3RpdmUgYW5kIHJhc3Rlcml6
YXRpb24gaXMgZGlzYWJsZWQuIFVzZSBkdW1teSByZW5kZXIgdGFyZ2V0LgorLSAgICAgICAgLy8g
V2UgY3VycmVudGx5IG5lZWQgdG8gZW5kIHRoZSByZW5kZXIgcGFzcyB3aGVuIFhGQiBpcyBhY3Rp
dmF0ZWQvZGVhY3RpdmF0ZWQgc28gdXNpbmcKKy0gICAgICAgIC8vIGEgc21hbGwgZHVtbXkgcmVu
ZGVyIHRhcmdldCB3b3VsZCBtYWtlIHRoZSByZW5kZXIgcGFzcyBlbmRpbmcgdmVyeSBjaGVhcC4K
Ky0gICAgICAgIGlmICghbUR1bW15WEZCUmVuZGVyVGV4dHVyZSkKKy0gICAgICAgIHsKKy0gICAg
ICAgICAgICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKHRoaXMsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQaXhlbEZv
cm1hdChhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhCOEE4X1VOT1JNKSwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsIHRydWUsIGZhbHNlLCAm
bUR1bW15WEZCUmVuZGVyVGV4dHVyZSkpOworLSAgICAgICAgfQorLSAgICAgICAgbXRsOjpSZW5k
ZXJDb21tYW5kRW5jb2RlciAqZW5jb2RlciA9IGdldFRleHR1cmVSZW5kZXJDb21tYW5kRW5jb2Rl
cigKKy0gICAgICAgICAgICBtRHVtbXlYRkJSZW5kZXJUZXh0dXJlLAorLSAgICAgICAgICAgIG10
bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRleChnbDo6SW1hZ2VJbmRleDo6
TWFrZTJEKDApKSk7CistICAgICAgICBlbmNvZGVyLT5zZXRDb2xvckxvYWRBY3Rpb24oTVRMTG9h
ZEFjdGlvbkRvbnRDYXJlLCBNVExDbGVhckNvbG9yKCksIDApOworLSAgICAgICAgZW5jb2Rlci0+
c2V0Q29sb3JTdG9yZUFjdGlvbihNVExTdG9yZUFjdGlvbkRvbnRDYXJlKTsKKy0KKy0jaWZuZGVm
IE5ERUJVRworLSAgICAgICAgZW5jb2Rlci0+c2V0TGFiZWwoQCJUcmFuc2Zvcm1GZWVkYmFja09u
bHlQYXNzIik7CistI2VuZGlmCisrICAgICAgICBtdGw6OlJlbmRlclV0aWxzICZ1dGlscyA9IGdl
dERpc3BsYXkoKS0+Z2V0VXRpbHMoKTsKKysgICAgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0ID0K
KysgICAgICAgICAgICB1dGlscy5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFja1BTTyhjb250ZXh0LCAm
bVJlbmRlckVuY29kZXIsIG1SZW5kZXJQaXBlbGluZURlc2MpOworKyAgICAgICAgQU5HTEVfVU5V
U0VEX1ZBUklBQkxFKHJlc3VsdCk7CisrICAgICAgICBhc3NlcnQocmVzdWx0ID09IGFuZ2xlOjpS
ZXN1bHQ6OkNvbnRpbnVlKTsKKysgICAgICAgIGNoYW5nZWRQaXBlbGluZSA9IHRydWU7CisgICAg
IH0KKyAKKy0gICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZworLSAgICBpbnZhbGlkYXRlU3RhdGUo
Y29udGV4dCk7CisrICAgIEFOR0xFX1RSWShtUHJvZ3JhbS0+c2V0dXBEcmF3KGNvbnRleHQsICZt
UmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYywgY2hhbmdlZFBpcGVsaW5lLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ2hhbmdlZCwgdW5pZm9ybUJ1
ZmZlcnNEaXJ0eSwgdHJhbnNmb3JtRmVlZGJhY2tEcmF3KSk7CisgCisgICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CitAQCAtMjAzNCwxMCArMjIyNCwxMCBAQCBib29sIElz
VHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyBhbmdsZTo6
UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5QWN0aXZlVGV4dHVyZXMoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpCisgeworICAgICBjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUgICAgICAg
ICAgICAgICAgPSBtU3RhdGU7CistICAgIGNvbnN0IGdsOjpQcm9ncmFtICpwcm9ncmFtID0gZ2xT
dGF0ZS5nZXRQcm9ncmFtKCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhl
Y3V0YWJsZSA9IGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAK
KyAgICAgY29uc3QgZ2w6OkFjdGl2ZVRleHR1cmVzQ2FjaGUgJnRleHR1cmVzICAgICA9IGdsU3Rh
dGUuZ2V0QWN0aXZlVGV4dHVyZXNDYWNoZSgpOworLSAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVy
ZU1hc2sgJmFjdGl2ZVRleHR1cmVzID0gcHJvZ3JhbS0+Z2V0RXhlY3V0YWJsZSgpLmdldEFjdGl2
ZVNhbXBsZXJzTWFzaygpOworKyAgICBjb25zdCBnbDo6QWN0aXZlVGV4dHVyZU1hc2sgJmFjdGl2
ZVRleHR1cmVzID0gZXhlY3V0YWJsZS0+Z2V0QWN0aXZlU2FtcGxlcnNNYXNrKCk7CisgCisgICAg
IGZvciAoc2l6ZV90IHRleHR1cmVVbml0IDogYWN0aXZlVGV4dHVyZXMpCisgICAgIHsKK0BAIC0y
MDY3LDYgKzIyNTcsNyBAQCBib29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpT
dGF0ZSAmZ2xTdGF0ZSkKKyAgICAgfQorIAorICAgICBBU1NFUlQobVJlbmRlckVuY29kZXIudmFs
aWQoKSk7CisrICAgIG1SZW5kZXJFbmNvZGVyLnNldEZyYWdtZW50RGF0YShtRGVmYXVsdEF0dHJp
YnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4KTsKKyAgICAgbVJlbmRlckVu
Y29kZXIuc2V0VmVydGV4RGF0YShtRGVmYXVsdEF0dHJpYnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRy
aWJzQmluZGluZ0luZGV4KTsKKyAKKyAgICAgbURpcnR5RGVmYXVsdEF0dHJpYnNNYXNrLnJlc2V0
KCk7CitAQCAtMjEyMCw5ICsyMzExLDYgQEAgYm9vbCBJc1RyYW5zZm9ybUZlZWRiYWNrT25seShj
b25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgICAgIH0KKyAgICAgbURyaXZlclVuaWZvcm1zLmNv
dmVyYWdlTWFzayA9IGNvdmVyYWdlTWFzazsKKyAKKy0gICAgQU5HTEVfVFJZKAorLSAgICAgICAg
ZmlsbERyaXZlclhGQlVuaWZvcm1zKGRyYXdDYWxsRmlyc3RWZXJ0ZXgsIHZlcnRpY2VzUGVySW5z
dGFuY2UsIC8qKiBza2lwcGVkSW5zdGFuY2VzICovIDApKTsKKy0KKyAgICAgQVNTRVJUKG1SZW5k
ZXJFbmNvZGVyLnZhbGlkKCkpOworICAgICBtUmVuZGVyRW5jb2Rlci5zZXRGcmFnbWVudERhdGEo
bURyaXZlclVuaWZvcm1zLCBtdGw6OmtEcml2ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CisgICAg
IG1SZW5kZXJFbmNvZGVyLnNldFZlcnRleERhdGEobURyaXZlclVuaWZvcm1zLCBtdGw6OmtEcml2
ZXJVbmlmb3Jtc0JpbmRpbmdJbmRleCk7CitAQCAtMjEzMCwyNSArMjMxOCwzMyBAQCBib29sIElz
VHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0IENvbnRl
eHRNdGw6OmZpbGxEcml2ZXJYRkJVbmlmb3JtcyhHTGludCBkcmF3Q2FsbEZpcnN0VmVydGV4LAor
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHZlcnRpY2VzUGVySW5zdGFuY2UsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyX3Qgc2tpcHBlZEluc3RhbmNlcykKKythbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OmhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNF
bXVsYXRpb24oCisrICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorIHsKKy0gICAgZ2w6
OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdldFN0YXRlKCkuZ2V0Q3Vy
cmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJs
ZSAqZXhlY3V0YWJsZSA9IG1TdGF0ZS5nZXRQcm9ncmFtRXhlY3V0YWJsZSgpOworKyAgICBBU1NF
UlQoZXhlY3V0YWJsZSk7CisgCistICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJBY3RpdmVVbnBhdXNl
ZCA9IGdldFN0YXRlKCkuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1c2VkKCk7CistICAg
IGlmICghdHJhbnNmb3JtRmVlZGJhY2sgfHwgIW1Ecml2ZXJVbmlmb3Jtcy54ZmJBY3RpdmVVbnBh
dXNlZCkKKysgICAgaWYgKCFleGVjdXRhYmxlLT5oYXNUcmFuc2Zvcm1GZWVkYmFja091dHB1dCgp
IHx8ICFtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSgpKQorICAgICB7CisgICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgIH0KKyAKKy0gICAgbURyaXZl
clVuaWZvcm1zLnhmYlZlcnRpY2VzUGVyRHJhdyA9IHZlcnRpY2VzUGVySW5zdGFuY2U7CisrICAg
IFRyYW5zZm9ybUZlZWRiYWNrTXRsICp0cmFuc2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1w
bChtU3RhdGUuZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkpOworKyAgICBzaXplX3QgYnVm
ZmVyQ291bnQgICAgICAgICAgICAgICAgICAgICAgICAgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrICAgIGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNBcnJheTxCdWZmZXJNdGwgKj4gJmJ1ZmZlckhhbmRsZXMgPQorKyAgICAgICAgdHJh
bnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZlckhhbmRsZXMoKTsKKyAKKy0gICAgVHJhbnNmb3Jt
RmVlZGJhY2tNdGwgKnRyYW5zZm9ybUZlZWRiYWNrTXRsID0gbXRsOjpHZXRJbXBsKHRyYW5zZm9y
bUZlZWRiYWNrKTsKKysgICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRl
eCA8IGJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorKyAgICB7CisrICAgICAgICBCdWZmZXJN
dGwgKmJ1ZmZlckhhbmRsZSA9IGJ1ZmZlckhhbmRsZXNbYnVmZmVySW5kZXhdOworKyAgICAgICAg
QVNTRVJUKGJ1ZmZlckhhbmRsZSk7CisrICAgICAgICBBU1NFUlQobVJlbmRlckVuY29kZXIudmFs
aWQoKSk7CisrICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRCdWZmZXJGb3JXcml0ZSgKKysgICAg
ICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCBidWZmZXJIYW5kbGUtPmdldEN1cnJlbnRC
dWZmZXIoKSwgMCwKKysgICAgICAgICAgICBtdGw6OmtUcmFuc2Zvcm1GZWVkYmFja0JpbmRpbmdJ
bmRleCArICh1aW50MzJfdClidWZmZXJJbmRleCk7CisrICAgIH0KKyAKKy0gICAgcmV0dXJuIHRy
YW5zZm9ybUZlZWRiYWNrTXRsLT5nZXRCdWZmZXJPZmZzZXRzKHRoaXMsIGRyYXdDYWxsRmlyc3RW
ZXJ0ZXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ZXJ0aWNlc1Blckluc3RhbmNlICogc2tpcHBlZEluc3RhbmNlcywKKy0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJC
dWZmZXJPZmZzZXRzKTsKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0K
KyAKKyBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5RGVwdGhTdGVuY2lsU3Rh
dGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCitAQCAtMjE1OSwxMyArMjM1NSwxMyBAQCBi
b29sIElzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKKyAg
ICAgbXRsOjpEZXB0aFN0ZW5jaWxEZXNjIGRzRGVzYyAgICAgICAgICAgICAgPSBtRGVwdGhTdGVu
Y2lsRGVzYzsKKyAgICAgY29uc3QgbXRsOjpSZW5kZXJQYXNzRGVzYyAmcmVuZGVyUGFzc0Rlc2Mg
PSBtUmVuZGVyRW5jb2Rlci5yZW5kZXJQYXNzRGVzYygpOworIAorLSAgICBpZiAoIXJlbmRlclBh
c3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKQorKyAgICBpZiAoIXJlbmRlclBhc3NEZXNj
LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsKKyAgICAgICAgIGRzRGVzYy5kZXB0
aFdyaXRlRW5hYmxlZCAgICA9IGZhbHNlOworICAgICAgICAgZHNEZXNjLmRlcHRoQ29tcGFyZUZ1
bmN0aW9uID0gTVRMQ29tcGFyZUZ1bmN0aW9uQWx3YXlzOworICAgICB9CisgCistICAgIGlmICgh
cmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSkKKysgICAgaWYgKCFyZW5k
ZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsKKyAgICAgICAg
IGRzRGVzYy5mcm9udEZhY2VTdGVuY2lsLnJlc2V0KCk7CisgICAgICAgICBkc0Rlc2MuYmFja0Zh
Y2VTdGVuY2lsLnJlc2V0KCk7CitAQCAtMjE5Niw4ICsyMzkyLDggQEAgYm9vbCBJc1RyYW5zZm9y
bUZlZWRiYWNrT25seShjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUpCisgCisgYW5nbGU6OlJlc3Vs
dCBDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6UHJpbWl0aXZlTW9kZSBwcmltaXRpdmVNb2RlLAorLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MsCistICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmlzUGlwZWxpbmVEZXNj
Q2hhbmdlZCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCB4YmZQYXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sICpwaXBlbGluZURlc2NDaGFuZ2VkKQorIHsKKyAgICAgQVNTRVJUKG1S
ZW5kZXJFbmNvZGVyLnZhbGlkKCkpOworICAgICBtdGw6OlByaW1pdGl2ZVRvcG9sb2d5Q2xhc3Mg
dG9wb2xvZ3lDbGFzcyA9IG10bDo6R2V0UHJpbWl0aXZlVG9wb2xvZ3lDbGFzcyhwcmltaXRpdmVN
b2RlKTsKK0BAIC0yMjE2LDI0ICsyNDEyLDEwIEBAIGJvb2wgSXNUcmFuc2Zvcm1GZWVkYmFja09u
bHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAgICAgICAgcmVuZGVyUGFzc0Rlc2MucG9w
dWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2MobUJsZW5kRGVzYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtUmVuZGVyUGlwZWxp
bmVEZXNjLm91dHB1dERlc2NyaXB0b3IpOworIAorLSAgICAgICAgaWYgKHhmYlBhc3MpCistICAg
ICAgICB7CistICAgICAgICAgICAgLy8gSW4gWEZCIHBhc3MsIHdlIGRpc2FibGUgZnJhZ21lbnQg
c2hhZGVyLgorLSAgICAgICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MucmFzdGVyaXphdGlvblR5
cGUgPSBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlvbjo6RGlzYWJsZWQ7CistICAgICAg
ICB9CistICAgICAgICBlbHNlIGlmIChtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQo
KSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICAvLyBJZiBYRkIgaXMgbm90IGFjdGl2ZSBhbmQg
cmFzdGVyaXplciBkaXNjYXJkIGlzIGVuYWJsZWQsIHdlIG5lZWQgdG8gZW11bGF0ZSB0aGUKKy0g
ICAgICAgICAgICAvLyBkaXNjYXJkLiBCZWNhdXNlIGluIHRoaXMgY2FzZSwgdmVydGV4IHNoYWRl
ciBtaWdodCB3cml0ZSB0byBzdGFnZSBvdXRwdXQgdmFsdWVzIGFuZAorLSAgICAgICAgICAgIC8v
IE1ldGFsIGRvZXNuJ3QgYWxsb3cgcmFzdGVyaXphdGlvbiB0byBiZSBkaXNhYmxlZC4KKy0gICAg
ICAgICAgICBtUmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0KKy0gICAgICAg
ICAgICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2Fy
ZDsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBt
UmVuZGVyUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0gbXRsOjpSZW5kZXJQaXBlbGlu
ZVJhc3Rlcml6YXRpb246OkVuYWJsZWQ7CistICAgICAgICB9CisgICAgICAgICBtUmVuZGVyUGlw
ZWxpbmVEZXNjLmlucHV0UHJpbWl0aXZlVG9wb2xvZ3kgPSB0b3BvbG9neUNsYXNzOworKyAgICAg
ICAgbVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9CisrICAgICAgICAgICAg
KG1TdGF0ZS5pc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpID8gbXRsOjpSZW5kZXJQaXBlbGlu
ZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2FyZAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0
aW9uOjpFbmFibGVkKTsKKyAgICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MuYWxwaGFUb0NvdmVy
YWdlRW5hYmxlZCA9IG1TdGF0ZS5pc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAg
ICAgICAgIG1SZW5kZXJQaXBlbGluZURlc2MuZW11bGF0ZUNvdmVyYWdlTWFzayAgICA9IG1TdGF0
ZS5pc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOworIAorQEAgLTIyNDEsNyArMjQyMyw3IEBAIGJv
b2wgSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoY29uc3QgZ2w6OlN0YXRlICZnbFN0YXRlKQorICAg
ICAgICAgICAgIG1EcmF3RnJhbWVidWZmZXItPmdldFN0YXRlKCkuZ2V0RW5hYmxlZERyYXdCdWZm
ZXJzKCkpOworICAgICB9CisgCistICAgICppc1BpcGVsaW5lRGVzY0NoYW5nZWQgPSBycHBDaGFu
Z2U7CisrICAgICpwaXBlbGluZURlc2NDaGFuZ2VkID0gcnBwQ2hhbmdlOworIAorICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvRGlzcGxheU10bC5oCitpbmRleCBiMDBkZTFiLi4yNDE3MTIyIDEwMDY0NAorLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaAorQEAgLTUyLDYgKzUyLDEwIEBAIGNsYXNzIERp
c3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAKKyAgICAgZWdsOjpFcnJvciB3YWl0Q2xp
ZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSBvdmVycmlkZTsKKyAgICAgZWdsOjpFcnJv
ciB3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgZW5naW5lKSBv
dmVycmlkZTsKKysgICAgZWdsOjpFcnJvciB2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6
OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3Qgb3Zl
cnJpZGU7CisgCisgICAgIFN1cmZhY2VJbXBsICpjcmVhdGVXaW5kb3dTdXJmYWNlKGNvbnN0IGVn
bDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3csCitAQCAtOTYsMTEgKzEwMCw2IEBAIGNs
YXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAKKyAgICAgYm9vbCBpc1ZhbGlk
TmF0aXZlV2luZG93KEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93KSBjb25zdCBvdmVycmlkZTsK
KyAKKy0gICAgZWdsOjpFcnJvciB2YWxpZGF0ZUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OkNvbmZp
ZyAqY29uZmlndXJhdGlvbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
R0xlbnVtIGJ1ZnR5cGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
Q2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3Qgb3ZlcnJpZGU7
CistCisgICAgIGVnbDo6Q29uZmlnU2V0IGdlbmVyYXRlQ29uZmlncygpIG92ZXJyaWRlOworIAor
ICAgICBzdGQ6OnN0cmluZyBnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3Q7CitAQCAtMTY1
LDYgKzE2NCw4IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUltcGwKKyAgICAg
dm9pZCBpbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0OworICAgICB2b2lkIGluaXRpYWxpemVU
ZXh0dXJlQ2FwcygpIGNvbnN0OworICAgICB2b2lkIGluaXRpYWxpemVGZWF0dXJlcygpOworKyAg
ICB2b2lkIGluaXRpYWxpemVMaW1pdGF0aW9ucygpOworKworICAgICBhbmdsZTo6UmVzdWx0IGlu
aXRpYWxpemVTaGFkZXJMaWJyYXJ5KCk7CisgCisgICAgIG10bDo6QXV0b09iakNQdHI8aWQ8TVRM
RGV2aWNlPj4gbU1ldGFsRGV2aWNlID0gbmlsOworZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0Rpc3BsYXlNdGwubW0KK2luZGV4IDI0N2Q3NmEuLmMxNTljMDUgMTAwNjQ0CistLS0gYS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5tbQorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwubW0KK0BAIC04LDEyICs4LDE0IEBACisgCisgI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyAKKysjaW5jbHVk
ZSAiY29tbW9uL3N5c3RlbV91dGlscy5oIgorICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3Rl
bUluZm8uaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvQ29udGV4dC5oIgorICNpbmNsdWRlICJsaWJB
TkdMRS9EaXNwbGF5LmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKKyAjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKysjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIgorICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1N5bmNNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2NvbW1vbi5oIgorQEAgLTIyLDkgKzI0LDYyIEBACisgCisgI2luY2x1ZGUgIkVHTC9l
Z2xleHQuaCIKKyAKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5l
ZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKytjb25zdGV4cHIgY2hhciBrQU5HTEVQcmVm
ZXJyZWREZXZpY2VFbnZbXSA9ICJBTkdMRV9QUkVGRVJSRURfREVWSUNFIjsKKysjZW5kaWYKKytj
b25zdGV4cHIgY2hhciBrQU5HTEVUcmFuc2Zvcm1GZWVkYmFja0VudltdID0gIkFOR0xFX01FVEFM
X1hGQl9FTkFCTEUiOworKworIG5hbWVzcGFjZSByeAorIHsKKyAKKytzdGF0aWMgRUdMaW50IEdl
dERlcHRoU2l6ZShHTGludCBpbnRlcm5hbGZvcm1hdCkKKyt7CisrICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpCisrICAgIHsKKysgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6CisrICAg
ICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2Ogor
KyAgICAgICAgICAgIHJldHVybiAxNjsKKysgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MjQ6CisrICAgICAgICAgICAgcmV0dXJuIDI0OworKyAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAgICAgICAgY2FzZSBHTF9E
RVBUSF9DT01QT05FTlQzMkY6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAgICAgICAgY2Fz
ZSBHTF9ERVBUSDI0X1NURU5DSUw4OgorKyAgICAgICAgICAgIHJldHVybiAyNDsKKysgICAgICAg
IGNhc2UgR0xfREVQVEgzMkZfU1RFTkNJTDg6CisrICAgICAgICAgICAgcmV0dXJuIDMyOworKyAg
ICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAvLyAgICBVTlJFQUNIQUJMRShpbnRlcm5hbGZv
cm1hdCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisrc3RhdGljIEVH
TGludCBHZXRTdGVuY2lsU2l6ZShHTGludCBpbnRlcm5hbGZvcm1hdCkKKyt7CisrICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpCisrICAgIHsKKysgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRF
WDg6CisrICAgICAgICAgICAgcmV0dXJuIDg7CisrICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OgorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQyNDoKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMzJfT0VTOgorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQzMkY6CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAg
ICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDg6CisrICAgICAgICAgICAgcmV0dXJuIDg7CisrICAg
ICAgICBjYXNlIEdMX0RFUFRIMzJGX1NURU5DSUw4OgorKyAgICAgICAgICAgIHJldHVybiA4Owor
KyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAvLyAgICBVTlJFQUNIQUJMRShpbnRlcm5h
bGZvcm1hdCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisgYm9vbCBJ
c01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgeworICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgbWFj
b3MgMTAuMTMrIGFuZCAxMSBmb3Igbm93LiBTaW5jZSB0aGV5IGFyZSByZXF1aXJlbWVudHMgZm9y
IE1ldGFsIDIuMC4KK0BAIC01Nyw3ICsxMTIsNyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxh
YmxlKCkKKyB9OworIAorIERpc3BsYXlNdGw6OkRpc3BsYXlNdGwoY29uc3QgZWdsOjpEaXNwbGF5
U3RhdGUgJnN0YXRlKQorLSAgICA6IERpc3BsYXlJbXBsKHN0YXRlKSwgbVV0aWxzKHRoaXMpLCBt
R2xzbGFuZ0luaXRpYWxpemVkKGZhbHNlKQorKyAgICA6IERpc3BsYXlJbXBsKHN0YXRlKSwgbVN0
YXRlQ2FjaGUobUZlYXR1cmVzKSwgbVV0aWxzKHRoaXMpCisge30KKyAKKyBEaXNwbGF5TXRsOjp+
RGlzcGxheU10bCgpIHt9CitAQCAtNzgsMTAgKzEzMywyNyBAQCBib29sIElzTWV0YWxEaXNwbGF5
QXZhaWxhYmxlKCkKKyB7CisgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgIHsKKy0gICAg
ICAgIG1NZXRhbERldmljZSA9IFtNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNlKCkgQU5HTEVf
TVRMX0FVVE9SRUxFQVNFXTsKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwg
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkKKysgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nIGFuZ2xlUHJlZmVycmVkRGV2aWNlID0gYW5nbGU6OkdldEVudmlyb25tZW50VmFyKGtB
TkdMRVByZWZlcnJlZERldmljZUVudik7CisrICAgICAgICBpZiAoYW5nbGVQcmVmZXJyZWREZXZp
Y2UgIT0gIiIpCisrICAgICAgICB7CisrICAgICAgICAgICAgTlNBcnJheTxpZDxNVExEZXZpY2U+
PiAqZGV2aWNlcyA9IFtNVExDb3B5QWxsRGV2aWNlcygpIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07
CisrICAgICAgICAgICAgZm9yIChpZDxNVExEZXZpY2U+IGRldmljZSBpbiBkZXZpY2VzKQorKyAg
ICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKFtkZXZpY2UubmFtZS5sb3dlcmNhc2VT
dHJpbmcKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluc1N0cmluZzpbTlNTdHJpbmcg
c3RyaW5nV2l0aFVURjhTdHJpbmc6YW5nbGVQcmVmZXJyZWREZXZpY2UuY19zdHIoKV0KKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxvd2VyY2FzZVN0cmluZ10p
CisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiVXNpbmcg
TWV0YWwgRGV2aWNlOiAlQCIsIFtkZXZpY2UgbmFtZV0pOworKyAgICAgICAgICAgICAgICAgICAg
bU1ldGFsRGV2aWNlID0gW2RldmljZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9Cisr
ICAgICAgICB9CisrI2VuZGlmCisgICAgICAgICBpZiAoIW1NZXRhbERldmljZSkKKyAgICAgICAg
IHsKKy0gICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKysgICAgICAgICAg
ICBtTWV0YWxEZXZpY2UgPSBbTVRMQ3JlYXRlU3lzdGVtRGVmYXVsdERldmljZSgpIEFOR0xFX01U
TF9BVVRPUkVMRUFTRV07CisgICAgICAgICB9CisgCisgICAgICAgICBtTWV0YWxEZXZpY2VWZW5k
b3JJZCA9IG10bDo6R2V0RGV2aWNlVmVuZG9ySWQobU1ldGFsRGV2aWNlKTsKK0BAIC04OSwxMiAr
MTYxLDEzIEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICAgICAgbUNtZFF1
ZXVlLnNldChbW21NZXRhbERldmljZS5nZXQoKSBuZXdDb21tYW5kUXVldWVdIEFOR0xFX01UTF9B
VVRPUkVMRUFTRV0pOworIAorICAgICAgICAgbUNhcHNJbml0aWFsaXplZCA9IGZhbHNlOworLQor
KyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKyAgICAgICAgIGlmICghbUdsc2xhbmdJbml0
aWFsaXplZCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBHbHNsYW5nSW5pdGlhbGl6ZSgpOwor
ICAgICAgICAgICAgIG1HbHNsYW5nSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgfQorKyNl
bmRpZgorIAorICAgICAgICAgaWYgKCFtU3RhdGUuZmVhdHVyZXNBbGxEaXNhYmxlZCkKKyAgICAg
ICAgIHsKK0BAIC0xMjAsMTIgKzE5MywxMyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxl
KCkKKyAgICAgbUNhcHNJbml0aWFsaXplZCA9IGZhbHNlOworIAorICAgICBtTWV0YWxEZXZpY2VW
ZW5kb3JJZCA9IDA7CistCisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorICAgICBpZiAo
bUdsc2xhbmdJbml0aWFsaXplZCkKKyAgICAgeworICAgICAgICAgR2xzbGFuZ1JlbGVhc2UoKTsK
KyAgICAgICAgIG1HbHNsYW5nSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICAgfQorKyNlbmRpZgor
IH0KKyAKKyBib29sIERpc3BsYXlNdGw6OnRlc3REZXZpY2VMb3N0KCkKK0BAIC0xNzEsNiArMjQ1
LDE1IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICByZXR1cm4gZWdsOjpO
b0Vycm9yKCk7CisgfQorIAorK2VnbDo6RXJyb3IgRGlzcGxheU10bDo6dmFsaWRhdGVDbGllbnRC
dWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50
QnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0CisreworKyAgICAvLyBUT0RPOiBG
aWxsIG91dCBwcm9wZXJseQorKyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisrfQorKworIGVn
bDo6RXJyb3IgRGlzcGxheU10bDo6d2FpdE5hdGl2ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgRUdMaW50IGVuZ2luZSkKKyB7CisgICAgIFVOSU1QTEVNRU5URUQoKTsKK0BAIC0xODcsNyAr
MjcwLDggQEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgU3VyZmFjZUltcGwgKkRp
c3BsYXlNdGw6OmNyZWF0ZVBidWZmZXJTdXJmYWNlKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCisgeworLSAgICByZXR1cm4gbmV3IFBCdWZm
ZXJTdXJmYWNlTXRsKHRoaXMsIHN0YXRlLCBhdHRyaWJzKTsKKysgICAgVU5JTVBMRU1FTlRFRCgp
OworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3VyZmFjZUltcGwgKj4oMCk7CisgfQorIAorIFN1
cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJvbUNsaWVudEJ1ZmZlcihjb25z
dCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCitAQCAtMTk1LDE1ICsyNzksNyBAQCBib29sIElz
TWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpCisgeworLSAgICBzd2l0Y2ggKGJ1ZnR5cGUp
CistICAgIHsKKy0gICAgICAgIGNhc2UgRUdMX0lPU1VSRkFDRV9BTkdMRToKKyAgICAgcmV0dXJu
IG5ldyBJT1N1cmZhY2VTdXJmYWNlTXRsKHRoaXMsIHN0YXRlLCBjbGllbnRCdWZmZXIsIGF0dHJp
YnMpOworLSAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworLSAgICB9CistICAgIHJldHVybiBudWxscHRyOworIH0KKyAKKyBT
dXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlUGl4bWFwU3VyZmFjZShjb25zdCBlZ2w6OlN1
cmZhY2VTdGF0ZSAmc3RhdGUsCitAQCAtMjQwLDE3ICszMTYsMTIgQEAgYm9vbCBJc01ldGFsRGlz
cGxheUF2YWlsYWJsZSgpCisgICAgIHJldHVybiBudWxscHRyOworIH0KKyAKKy1TaGFyZUdyb3Vw
SW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlU2hhcmVHcm91cCgpCisteworLSAgICByZXR1cm4gbmV3
IFNoYXJlR3JvdXBNdGwoKTsKKy19CistCisgZ2w6OlZlcnNpb24gRGlzcGxheU10bDo6Z2V0TWF4
U3VwcG9ydGVkRVNWZXJzaW9uKCkgY29uc3QKKyB7CisgICAgIC8vIE5PVEUoaHFsZSk6IFN1cHBv
cnRzIEdMRVMgMy4wIG9uIGlPUyBHUFUgZmFtaWx5IDQrIGZvciBub3cuCisgICAgIGlmIChzdXBw
b3J0c0VpdGhlckdQVUZhbWlseSg0LCAxKSkKKyAgICAgeworLSAgICAgICAgcmV0dXJuIG10bDo6
a01heFN1cHBvcnRlZEdMVmVyc2lvbjsKKysgICAgICAgIHJldHVybiBnbDo6VmVyc2lvbigzLCAw
KTsKKyAgICAgfQorICAgICByZXR1cm4gZ2w6OlZlcnNpb24oMiwgMCk7CisgfQorQEAgLTI2NSw2
ICszMzYsMTEgQEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgICAgIHJldHVybiBu
ZXcgRUdMU3luY010bChhdHRyaWJzKTsKKyB9CisgCisrU2hhcmVHcm91cEltcGwgKkRpc3BsYXlN
dGw6OmNyZWF0ZVNoYXJlR3JvdXAoKQorK3sKKysgICAgcmV0dXJuIG5ldyBTaGFyZUdyb3VwSW1w
bCgpOworK30KKysKKyBlZ2w6OkVycm9yIERpc3BsYXlNdGw6Om1ha2VDdXJyZW50KGVnbDo6RGlz
cGxheSAqZGlzcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVnbDo6
U3VyZmFjZSAqZHJhd1N1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlZ2w6OlN1cmZhY2UgKnJlYWRTdXJmYWNlLAorQEAgLTMyNiw3ICs0MDIsNyBAQCBib29sIElz
TWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgY29uZmlnLnRyYW5zcGFyZW50VHlwZSA9IEVH
TF9OT05FOworIAorICAgICAvLyBQYnVmZmVyCistICAgIGNvbmZpZy5iaW5kVG9UZXh0dXJlVGFy
Z2V0ID0gRUdMX1RFWFRVUkVfMkQ7CisrICAgIGNvbmZpZy5iaW5kVG9UZXh0dXJlVGFyZ2V0ID0g
RUdMX1RFWFRVUkVfUkVDVEFOR0xFX0FOR0xFOworICAgICBjb25maWcubWF4UEJ1ZmZlcldpZHRo
ICAgICA9IDQwOTY7CisgICAgIGNvbmZpZy5tYXhQQnVmZmVySGVpZ2h0ICAgID0gNDA5NjsKKyAg
ICAgY29uZmlnLm1heFBCdWZmZXJQaXhlbHMgICAgPSA0MDk2ICogNDA5NjsKK0BAIC0zNjEsMTMg
KzQzNyw2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorIAorICAgICBjb25maWcu
Y29sb3JDb21wb25lbnRUeXBlID0gRUdMX0NPTE9SX0NPTVBPTkVOVF9UWVBFX0ZJWEVEX0VYVDsK
KyAKKy0gICAgY29uc3RleHByIGludCBzYW1wbGVzU3VwcG9ydGVkW10gPSB7MCwgNH07CistCist
ICAgIGZvciAoaW50IHNhbXBsZXMgOiBzYW1wbGVzU3VwcG9ydGVkKQorLSAgICB7CistICAgICAg
ICBjb25maWcuc2FtcGxlcyAgICAgICA9IHNhbXBsZXM7CistICAgICAgICBjb25maWcuc2FtcGxl
QnVmZmVycyA9IChzYW1wbGVzID09IDApID8gMCA6IDE7CistCisgICAgIC8vIEJ1ZmZlciBzaXpl
cworICAgICBjb25maWcucmVkU2l6ZSAgICA9IDg7CisgICAgIGNvbmZpZy5ncmVlblNpemUgID0g
ODsKK0BAIC0zNzUsMjggKzQ0NCwxMiBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkK
KyAgICAgY29uZmlnLmFscGhhU2l6ZSAgPSA4OworICAgICBjb25maWcuYnVmZmVyU2l6ZSA9IGNv
bmZpZy5yZWRTaXplICsgY29uZmlnLmdyZWVuU2l6ZSArIGNvbmZpZy5ibHVlU2l6ZSArIGNvbmZp
Zy5hbHBoYVNpemU7CisgCistICAgICAgICAvLyBXaXRoIERTCistICAgICAgICBjb25maWcuZGVw
dGhTaXplICAgPSAyNDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDg7CistCistICAg
ICAgICBjb25maWdzLmFkZChjb25maWcpOworLQorLSAgICAgICAgLy8gV2l0aCBECistICAgICAg
ICBjb25maWcuZGVwdGhTaXplICAgPSAyNDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9
IDA7CistICAgICAgICBjb25maWdzLmFkZChjb25maWcpOworLQorLSAgICAgICAgLy8gV2l0aCBT
CistICAgICAgICBjb25maWcuZGVwdGhTaXplICAgPSAwOworLSAgICAgICAgY29uZmlnLnN0ZW5j
aWxTaXplID0gODsKKysgICAgLy8gVGVzdHMgbGlrZSBkRVFQLUdMRVMyLmZ1bmN0aW9uYWwuZGVw
dGhfcmFuZ2UuKiBhc3N1bWUgRUdMX0RFUFRIX1NJWkUgaXMgcHJvcGVybHkgc2V0IGV2ZW4gaWYK
KysgICAgLy8gcmVuZGVyQ29uZmlnIGF0dHJpYnV0ZXMgYXJlIHNldCB0byBnbHU6OlJlbmRlckNv
bmZpZzo6RE9OVF9DQVJFCisrICAgIGNvbmZpZy5kZXB0aFNpemUgICA9IEdldERlcHRoU2l6ZShj
b25maWcuZGVwdGhTdGVuY2lsRm9ybWF0KTsKKysgICAgY29uZmlnLnN0ZW5jaWxTaXplID0gR2V0
U3RlbmNpbFNpemUoY29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgIGNvbmZpZ3MuYWRk
KGNvbmZpZyk7CisgCistICAgICAgICAvLyBObyBEUworLSAgICAgICAgY29uZmlnLmRlcHRoU2l6
ZSAgID0gMDsKKy0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDA7CistICAgICAgICBjb25m
aWdzLmFkZChjb25maWcpOworLSAgICB9CistCisgICAgIHJldHVybiBjb25maWdzOworIH0KKyAK
K0BAIC00MDksMjYgKzQ2Miw2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAg
ICB9CisgfQorIAorLWVnbDo6RXJyb3IgRGlzcGxheU10bDo6dmFsaWRhdGVDbGllbnRCdWZmZXIo
Y29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCistICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVy
LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWds
OjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0CisteworLSAgICBzd2l0Y2ggKGJ1ZnR5cGUp
CistICAgIHsKKy0gICAgICAgIGNhc2UgRUdMX0lPU1VSRkFDRV9BTkdMRToKKy0gICAgICAgICAg
ICBpZiAoIUlPU3VyZmFjZVN1cmZhY2VNdGw6OlZhbGlkYXRlQXR0cmlidXRlcyhjbGllbnRCdWZm
ZXIsIGF0dHJpYnMpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIGVn
bDo6RWdsQmFkQXR0cmlidXRlKCk7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGJyZWFr
OworLSAgICAgICAgZGVmYXVsdDoKKy0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworLSAgICAg
ICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZEF0dHJpYnV0ZSgpOworLSAgICB9CistICAgIHJldHVy
biBlZ2w6Ok5vRXJyb3IoKTsKKy19CistCisgc3RkOjpzdHJpbmcgRGlzcGxheU10bDo6Z2V0UmVu
ZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0CisgeworICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQor
QEAgLTUxMiwxMCArNTQ1LDE2IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAg
ICBtTmF0aXZlQ2Fwcy5tYXhSZW5kZXJidWZmZXJTaXplICAgPSBtTmF0aXZlQ2Fwcy5tYXgyRFRl
eHR1cmVTaXplOworICAgICBtTmF0aXZlQ2Fwcy5taW5BbGlhc2VkUG9pbnRTaXplICAgPSAxOwor
ICAgICAvLyBOT1RFKGhxbGUpOiBNZXRhbCBoYXMgc29tZSBwcm9ibGVtcyBkcmF3aW5nIGJpZyBw
b2ludCBzaXplIGV2ZW4gdGhvdWdoCistICAgIC8vIE1ldGFsLUZlYXR1cmUtU2V0LVRhYmxlcy5w
ZGYgc2F5cyB0aGF0IG1heCBzdXBwb3J0ZWQgcG9pbnQgc2l6ZSBpcyA1MTEuIFdlIGxpbWl0IGl0
IHRvIDY0IGZvcgorLSAgICAvLyBub3cuCistICAgIC8vIGh0dHA6Ly9hbmdsZWJ1Zy5jb20vNDgx
NgorKyAgICAvLyBNZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmIHNheXMgdGhhdCBtYXggc3Vw
cG9ydGVkIHBvaW50IHNpemUgaXMgNTExLiBXZSBsaW1pdCBpdCB0byAyNTUKKysgICAgLy8gb24g
SW50ZWwgYW5kIDY0IG9uIEFNRCBmb3Igbm93LgorKyAgICBpZiAoW21NZXRhbERldmljZS5nZXQo
KS5uYW1lIHJhbmdlT2ZTdHJpbmc6QCJJbnRlbCJdLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCisr
ICAgIHsKKysgICAgICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRQb2ludFNpemUgPSAyNTU7Cisr
ICAgIH0KKysgICAgZWxzZQorKyAgICB7CisgICAgICAgICBtTmF0aXZlQ2Fwcy5tYXhBbGlhc2Vk
UG9pbnRTaXplID0gNjQ7CisrICAgIH0KKyAKKyAgICAgbU5hdGl2ZUNhcHMubWluQWxpYXNlZExp
bmVXaWR0aCA9IDEuMGY7CisgICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRMaW5lV2lkdGggPSAx
LjBmOworQEAgLTYxNSw2ICs2NTQsOSBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkK
KyAgICAgbU5hdGl2ZUNhcHMubWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMg
PQorICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQ
QVJBVEVfQ09NUE9ORU5UUzsKKyAKKysgICAgLy8gR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeQor
KyAgICBtTmF0aXZlQ2Fwcy5wcm9ncmFtQmluYXJ5Rm9ybWF0cy5wdXNoX2JhY2soR0xfUFJPR1JB
TV9CSU5BUllfQU5HTEUpOworKworICAgICAvLyBHTF9BUFBMRV9jbGlwX2Rpc3RhbmNlCisgICAg
IG1OYXRpdmVDYXBzLm1heENsaXBEaXN0YW5jZXMgPSA4OworIAorQEAgLTY0Nyw2ICs2ODksMTUg
QEAgYm9vbCBJc01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgICAgIG1OYXRpdmVFeHRlbnNpb25z
LnRleHR1cmVCb3JkZXJDbGFtcE9FUyAgPSBmYWxzZTsgIC8vIG5vdCBpbXBsZW1lbnRlZCB5ZXQK
KyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMudHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IHRydWU7Cisg
ICAgIG1OYXRpdmVFeHRlbnNpb25zLmRpc2NhcmRGcmFtZWJ1ZmZlciAgICAgPSB0cnVlOworKyAg
ICAvLyBOb3QgaW1wbGVtZW50ZWQgYnV0IGV4cG9zZQorKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy50
ZXh0dXJlUmVjdGFuZ2xlID0gdHJ1ZTsKKysKKysgICAgLy8gRVhUX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZQorKyAgICBpZiAobUZlYXR1cmVzLmFsbG93TXVsdGlzYW1wbGVTdG9yZUFu
ZFJlc29sdmUuZW5hYmxlZCAmJgorKyAgICAgICAgbUZlYXR1cmVzLmhhc0RlcHRoQXV0b1Jlc29s
dmUuZW5hYmxlZCAmJiBtRmVhdHVyZXMuaGFzU3RlbmNpbEF1dG9SZXNvbHZlLmVuYWJsZWQpCisr
ICAgIHsKKysgICAgICAgIG1OYXRpdmVFeHRlbnNpb25zLm11bHRpc2FtcGxlZFJlbmRlclRvVGV4
dHVyZSA9IHRydWU7CisrICAgIH0KKyAKKyAgICAgLy8gRW5hYmxlIEVYVF9ibGVuZF9taW5tYXgK
KyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuYmxlbmRNaW5NYXggPSB0cnVlOworQEAgLTY2Miw4ICs3
MTMsOCBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAgICAgbU5hdGl2ZUV4dGVu
c2lvbnMuc2VtYXBob3JlICAgPSBmYWxzZTsKKyAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuc2VtYXBo
b3JlRmQgPSBmYWxzZTsKKyAKKy0gICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFuY2VkQXJyYXlz
QU5HTEUgPSBtRmVhdHVyZXMuaGFzQmFzZVZlcnRleEluc3RhbmNlZERyYXcuZW5hYmxlZDsKKy0g
ICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFuY2VkQXJyYXlzRVhUICAgPSBtTmF0aXZlRXh0ZW5z
aW9ucy5pbnN0YW5jZWRBcnJheXNBTkdMRTsKKysgICAgbU5hdGl2ZUV4dGVuc2lvbnMuaW5zdGFu
Y2VkQXJyYXlzQU5HTEUgPSB0cnVlOworKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5pbnN0YW5jZWRB
cnJheXNFWFQgICA9IHRydWU7CisgCisgICAgIG1OYXRpdmVFeHRlbnNpb25zLnJvYnVzdEJ1ZmZl
ckFjY2Vzc0JlaGF2aW9yID0gZmFsc2U7CisgCitAQCAtNjg2LDYgKzczNyw5IEBAIGJvb2wgSXNN
ZXRhbERpc3BsYXlBdmFpbGFibGUoKQorIAorICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5lbGVtZW50
SW5kZXhVaW50T0VTID0gdHJ1ZTsKKyAKKysgICAgLy8gR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFy
eQorKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5nZXRQcm9ncmFtQmluYXJ5T0VTID0gdHJ1ZTsKKysK
KyAgICAgLy8gR0xfQVBQTEVfY2xpcF9kaXN0YW5jZQorICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5j
bGlwRGlzdGFuY2VBUFBMRSA9IHRydWU7CisgCitAQCAtNzEzLDExICs3NjcsMTcgQEAgYm9vbCBJ
c01ldGFsRGlzcGxheUF2YWlsYWJsZSgpCisgCisgICAgIC8vIFJlLXZlcmlmeSB0ZXh0dXJlIGV4
dGVuc2lvbnMuCisgICAgIG1OYXRpdmVFeHRlbnNpb25zLnNldFRleHR1cmVFeHRlbnNpb25TdXBw
b3J0KG1OYXRpdmVUZXh0dXJlQ2Fwcyk7CistCisrICAgIC8vIE1vZGlmeSBleHRlbnNpb25zIGJh
c2VkIG9mZiBvZiBzdXBwb3J0CisgICAgIC8vIERpc2FibGUgYWxsIGRlcHRoIGJ1ZmZlciBhbmQg
c3RlbmNpbCBidWZmZXIgcmVhZGJhY2sgZXh0ZW5zaW9ucyB1bnRpbCB3ZSBuZWVkIHRoZW0KKyAg
ICAgbU5hdGl2ZUV4dGVuc2lvbnMucmVhZERlcHRoTlYgICAgICAgICA9IGZhbHNlOworICAgICBt
TmF0aXZlRXh0ZW5zaW9ucy5yZWFkU3RlbmNpbE5WICAgICAgID0gZmFsc2U7CisgICAgIG1OYXRp
dmVFeHRlbnNpb25zLmRlcHRoQnVmZmVyRmxvYXQyTlYgPSBmYWxzZTsKKysgICAgbU5hdGl2ZUV4
dGVuc2lvbnMudGV4dHVyZUNvbXByZXNzaW9uQVNUQ0xEUktIUiAmPSBzdXBwb3J0c0lPU0dQVUZh
bWlseSgyKTsKKyt9CisrCisrdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplTGltaXRhdGlvbnMo
KQorK3sKKysgICAgbU5hdGl2ZUxpbWl0YXRpb25zLm5vVmVydGV4QXR0cmlidXRlQWxpYXNpbmcg
PSB0cnVlOworIH0KKyAKKyB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVGZWF0dXJlcygpCitA
QCAtNzc5LDYgKzgzOSw5IEBAIGJvb2wgSXNNZXRhbERpc3BsYXlBdmFpbGFibGUoKQorICAgICBB
TkdMRV9GRUFUVVJFX0NPTkRJVElPTigoJm1GZWF0dXJlcyksIGFsbG93U2VwYXJhdGVkRGVwdGhT
dGVuY2lsQnVmZmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzT1NYICYmICFp
c0NhdGFseXN0ICYmICFpc1NpbXVsYXRvcik7CisgCisrICAgIG1GZWF0dXJlcy5lbXVsYXRlVHJh
bnNmb3JtRmVlZGJhY2suZW5hYmxlZCA9CisrICAgICAgICBhbmdsZTo6R2V0RW52aXJvbm1lbnRW
YXIoa0FOR0xFVHJhbnNmb3JtRmVlZGJhY2tFbnYpWzBdID09ICcxJzsKKysKKyAgICAgYW5nbGU6
OlBsYXRmb3JtTWV0aG9kcyAqcGxhdGZvcm0gPSBBTkdMRVBsYXRmb3JtQ3VycmVudCgpOworICAg
ICBwbGF0Zm9ybS0+b3ZlcnJpZGVGZWF0dXJlc010bChwbGF0Zm9ybSwgJm1GZWF0dXJlcyk7Cisg
CitAQCAtNzg3LDYgKzg1MCwyNyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKKyAK
KyBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6OmluaXRpYWxpemVTaGFkZXJMaWJyYXJ5KCkKKyB7
CisrICAgICNpZmRlZiBBTkdMRV9NRVRBTF9YQ09ERV9CVUlMRFNfU0hBREVSUworKyAgICAgICAg
bURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVyQXN5bmNJbmZv
TXRsKTsKKysgICAgICAgIAorKyAgICAKKysgICAgICAgIE5TU3RyaW5nICpwYXRoID0gW05TQnVu
ZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdLmJ1bmRsZVBhdGg7
CisrICAgICAgICBOU0Vycm9yICogZXJyb3IgPSBudWxscHRyOworKyAgICAgICAgbURlZmF1bHRT
aGFkZXJzQXN5bmNJbmZvLT5kZWZhdWx0U2hhZGVycyA9IFtnZXRNZXRhbERldmljZSgpIG5ld0Rl
ZmF1bHRMaWJyYXJ5V2l0aEJ1bmRsZTpbTlNCdW5kbGUgYnVuZGxlV2l0aFBhdGg6cGF0aF0gZXJy
b3I6JmVycm9yXTsKKysKKysgICAgICAgIGlmIChlcnJvciAmJiAhbURlZmF1bHRTaGFkZXJzQXN5
bmNJbmZvLT5kZWZhdWx0U2hhZGVycykKKysgICAgICAgIHsKKysgICAgICAgICAgICBBTkdMRV9N
VExfT0JKQ19TQ09QRQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgRVJSKCkgPDwg
IkludGVybmFsIGVycm9yOiBuZXdEZWZhdWx0TGlicmFyeVdpdGhCdW5kbGUgZmFpbGVkLiAiIDw8
IGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uLlVURjhTdHJpbmc7CisrICAgICAgICAgICAgfQor
KyAgICAgICAgICAgIG1EZWZhdWx0U2hhZGVyc0FzeW5jSW5mby0+ZGVmYXVsdFNoYWRlcnNDb21w
aWxlRXJyb3IgPSBzdGQ6Om1vdmUoZXJyb3IpOworKyAgICAgICAgICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpTdG9wOworKyAgICAgICAgICAgICAgICAgCisrICAgICAgICB9CisrICAgICAgICBt
RGVmYXVsdFNoYWRlcnNBc3luY0luZm8tPmNvbXBpbGVkID0gdHJ1ZTsKKysgICAgICAgIAorKyAg
ICAjZWxzZQorICAgICBtRGVmYXVsdFNoYWRlcnNBc3luY0luZm8ucmVzZXQobmV3IERlZmF1bHRT
aGFkZXJBc3luY0luZm9NdGwpOworIAorICAgICAvLyBDcmVhdGUgcmVmZXJlbmNlcyB0byBhc3lu
YyBpbmZvIHN0cnVjdCBzaW5jZSBpdCBtaWdodCBiZSByZWxlYXNlZCBpbiB0ZXJtaW5hdGUoKSwg
YnV0IHRoZQorQEAgLTgxNSw3ICs4OTksNyBAQCBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxl
KCkKKyAKKyAgICAgICAgIFtuc1NvdXJjZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICB9
CistCisrICAgICNlbmRpZgorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cisg
fQorIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZl
ck10bC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmgKK2lu
ZGV4IGI0NThiZDkuLjVlNWNjZTkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvRnJhbWVCdWZmZXJNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L0ZyYW1lQnVmZmVyTXRsLmgKK0BAIC0yMywxMiArMjMsMTQgQEAgbmFtZXNwYWNlIG10bAorIGNs
YXNzIFJlbmRlckNvbW1hbmRFbmNvZGVyOworIH0gIC8vIG5hbWVzcGFjZSBtdGwKKyBjbGFzcyBD
b250ZXh0TXRsOworLWNsYXNzIFdpbmRvd1N1cmZhY2VNdGw7CisrY2xhc3MgU3VyZmFjZU10bDsK
KyAKKyBjbGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyB7Cisg
ICBwdWJsaWM6CistICAgIEZyYW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRl
ICZzdGF0ZSwgYm9vbCBmbGlwWSwgV2luZG93U3VyZmFjZU10bCAqYmFja2J1ZmZlcik7CisrICAg
IGV4cGxpY2l0IEZyYW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0
ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3VyZmFjZU10bFByb3RvY29sICpiYWNrYnVmZmVyKTsKKyAgICAg
fkZyYW1lYnVmZmVyTXRsKCkgb3ZlcnJpZGU7CisgICAgIHZvaWQgZGVzdHJveShjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgCitAQCAtOTcsNyArOTksNyBAQCBjbGFzcyBG
cmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyAKKyAgICAgZ2w6OlJlY3Rh
bmdsZSBnZXRDb21wbGV0ZVJlbmRlckFyZWEoKSBjb25zdDsKKyAgICAgaW50IGdldFNhbXBsZXMo
KSBjb25zdDsKKy0gICAgV2luZG93U3VyZmFjZU10bCAqZ2V0QXR0YWNoZWRCYWNrYnVmZmVyKCkg
Y29uc3QgeyByZXR1cm4gbUJhY2tidWZmZXI7IH0KKysgICAgU3VyZmFjZU10bFByb3RvY29sICpn
ZXRBdHRhY2hlZEJhY2tidWZmZXIoKSBjb25zdCB7IHJldHVybiBtQmFja2J1ZmZlcjsgfQorIAor
ICAgICBib29sIHJlbmRlclBhc3NIYXNTdGFydGVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpIGNv
bnN0OworICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVyICplbnN1cmVSZW5kZXJQYXNzU3Rh
cnRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CitAQCAtMTYyLDYgKzE2NCwxMCBAQCBj
bGFzcyBGcmFtZWJ1ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyAgICAgbXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2RlciAqZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGFzc0Rlc2MgJmRlc2MpOworIAorKyAg
ICB2b2lkIG92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTENsZWFyQ29sb3IgY2xlYXJDb2xvciwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMQ2xlYXJDb2xvciAqY29sb3JPdXQpOwor
KworICAgICBhbmdsZTo6UmVzdWx0IHVwZGF0ZUNvbG9yUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBzaXplX3QgY29sb3JJbmRleEdMKTsKKyAgICAgYW5nbGU6OlJlc3Vs
dCB1cGRhdGVEZXB0aFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7Cisg
ICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRlU3RlbmNpbFJlbmRlclRhcmdldChjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCk7CitAQCAtMTY5LDExICsxNzUsMzcgQEAgY2xhc3MgRnJhbWVidWZmZXJN
dGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpGcmFtZWJ1ZmZlckF0dGFjaG1lbnQgKmF0dGFjaG1l
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldE10bCAqKmNhY2hlZFJlbmRlclRhcmdldCk7CisgCisrICAgIC8vIFRoaXMgZnVuY3Rpb24g
ZWl0aGVyIHJldHVybnMgdGhlIHJlbmRlciB0YXJnZXQncyB0ZXh0dXJlIGl0c2VsZiBpZiB0aGUg
dGV4dHVyZSBpcyByZWFkYWJsZQorKyAgICAvLyBvciBjcmVhdGUgYSBjb3B5IG9mIHRoYXQgdGV4
dHVyZSB0aGF0IGlzIHJlYWRhYmxlIGlmIG5vdC4gVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkg
dXNlZAorKyAgICAvLyBmb3IgcGFja2VkIGRlcHRoIHN0ZW5jaWwgd2hlcmUgcmVhZGluZyBzdGVu
Y2lsIHJlcXVpcmVzIGEgc3RlbmNpbCB2aWV3LiBIb3dldmVyIGlmIGEgdGV4dHVyZQorKyAgICAv
LyBoYXMgYm90aCByZW5kZXIgdGFyZ2V0LCBwaXhlbCBmb3JtYXQgdmlldyAmIHNoYWRlciByZWFk
YWJsZSB1c2FnZSBmbGFncywgdGhlcmUgd2lsbCBiZQorKyAgICAvLyBzb21lIGdsaXRjaGVzIGhh
cHBlbiBpbiBNZXRhbCBmcmFtZXdvcmsuCisrICAgIC8vIFNvIHRoZSBzb2x1dGlvbiBpcyBjcmVh
dGluZyBhIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSB3aXRob3V0IHBpeGVsIGZvcm1hdCB2aWV3IGZs
YWcgYnV0IGhhcworKyAgICAvLyByZW5kZXIgdGFyZ2V0IGZsYWcsIHRoZW4gZHVyaW5nIGJsaXR0
aW5nIHByb2Nlc3MsIHRoaXMgdGV4dHVyZSBpcyBjb3BpZWQgdG8gYW5vdGhlcgorKyAgICAvLyBp
bnRlcm1pZGlhdGUgdGV4dHVyZSBoYXZpbmcgcGl4ZWwgZm9ybWF0IHZpZXcgZmxhZywgYnV0IG5v
dCByZW5kZXIgdGFyZ2V0IGZsYWcuCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2V0UmVhZGFibGVWaWV3
Rm9yUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJUYXJnZXRN
dGwgJnJ0dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZEFyZWEsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVEZXB0
aFZpZXcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVTdGVuY2lsVmlldywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xl
dmVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCAqcmVhZGFibGVWaWV3TGF5ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgKnJlYWRhYmxlVmlld0FyZWEpOwor
KworICAgICBhbmdsZTo6UmVzdWx0IHJlYWRQaXhlbHNUb1BCTyhjb25zdCBnbDo6Q29udGV4dCAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmYXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UGFja1BpeGVsc1BhcmFtcyAmcGFja1BpeGVsc1BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQpIGNvbnN0
OworIAorKyAgICBhbmdsZTo6UmVzdWx0IHJlYWRQaXhlbHNUb0J1ZmZlcihjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmV2ZXJzZVJvd09yZGVyLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZkc3RBbmds
ZUZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
ZHN0QnVmZmVyT2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBkc3RCdWZmZXJSb3dQaXRjaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXRsOjpCdWZmZXJSZWYgKmRzdEJ1ZmZlcikgY29uc3Q7CisrCisgICAg
IC8vIE5PVEU6IHdlIGNhbm5vdCB1c2UgUmVuZGVyVGFyZ2V0Q2FjaGUgaGVyZSBiZWNhdXNlIGl0
IGRvZXNuJ3Qgc3VwcG9ydCBzZXBhcmF0ZQorICAgICAvLyBkZXB0aCAmIHN0ZW5jaWwgYXR0YWNo
bWVudHMgYXMgb2Ygbm93LiBTZXBhcmF0ZSBkZXB0aCAmIHN0ZW5jaWwgY291bGQgYmUgdXNlZnVs
IHRvCisgICAgIC8vIHNhdmUgc3BhY2VzIG9uIGlPUyBkZXZpY2VzLiBTZWUgZG9jL1BhY2tlZERl
cHRoU3RlbmNpbFN1cHBvcnQubWQuCitAQCAtMTg5LDggKzIyMSwxMCBAQCBjbGFzcyBGcmFtZWJ1
ZmZlck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKKyAgICAgLy8gYXMgYnkgYSBjb21wdXRl
IHBhc3MuCisgICAgIGJvb2wgbVJlbmRlclBhc3NDbGVhblN0YXJ0ID0gZmFsc2U7CisgCistICAg
IFdpbmRvd1N1cmZhY2VNdGwgKm1CYWNrYnVmZmVyID0gbnVsbHB0cjsKKysgICAgU3VyZmFjZU10
bFByb3RvY29sICptQmFja2J1ZmZlciA9IG51bGxwdHI7CisgICAgIGNvbnN0IGJvb2wgbUZsaXBZ
ICAgICAgICAgICAgICAgPSBmYWxzZTsKKysKKysgICAgbXRsOjpCdWZmZXJSZWYgbVJlYWRQaXhl
bEJ1ZmZlcjsKKyB9OworIH0gIC8vIG5hbWVzcGFjZSByeAorIAorZGlmZiAtLWdpdCBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5tbSBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5tbQoraW5kZXggODRlNDIyNy4uZDcxZGU3MiAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5t
bQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tCitA
QCAtMzMsMTIgKzMzLDMwIEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6
VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAgICAgKmNvbG9yT3V0ID0KKyAgICAgICAgIG10bDo6RW11
bGF0ZWRBbHBoYUNsZWFyQ29sb3IoY2xlYXJDb2xvci50b01UTENsZWFyQ29sb3IoKSwgdGV4dHVy
ZS0+Z2V0Q29sb3JXcml0YWJsZU1hc2soKSk7CisgfQorKworK2NvbnN0IGdsOjpJbnRlcm5hbEZv
cm1hdCAmR2V0UmVhZEF0dGFjaG1lbnRJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldE10bCAqcmVuZGVyVGFyZ2V0KQorK3sKKysgICAgR0xlbnVtIGltcGxGb3JtYXQ7CisrCisr
ICAgIGlmIChyZW5kZXJUYXJnZXQgJiYgcmVuZGVyVGFyZ2V0LT5nZXRGb3JtYXQoKSkKKysgICAg
eworKyAgICAgICAgaW1wbEZvcm1hdCA9IHJlbmRlclRhcmdldC0+Z2V0Rm9ybWF0KCktPmFjdHVh
bEFuZ2xlRm9ybWF0KCkuZmJvSW1wbGVtZW50YXRpb25JbnRlcm5hbEZvcm1hdDsKKysgICAgfQor
KyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIGltcGxGb3JtYXQgPSBHTF9OT05FOworKyAgICB9
CisrCisrICAgIHJldHVybiBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdEluZm8oaW1wbEZvcm1h
dCk7CisrfQorKworIH0KKyAKKyAvLyBGcmFtZWJ1ZmZlck10bCBpbXBsZW1lbnRhdGlvbgorIEZy
YW1lYnVmZmVyTXRsOjpGcmFtZWJ1ZmZlck10bChjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAm
c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIp
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqYmFj
a2J1ZmZlcikKKyAgICAgOiBGcmFtZWJ1ZmZlckltcGwoc3RhdGUpLCBtQmFja2J1ZmZlcihiYWNr
YnVmZmVyKSwgbUZsaXBZKGZsaXBZKQorIHsKKyAgICAgcmVzZXQoKTsKK0BAIC01NSw2ICs3Myw4
IEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4
dHVyZSwKKyAgICAgbURlcHRoUmVuZGVyVGFyZ2V0ID0gbVN0ZW5jaWxSZW5kZXJUYXJnZXQgPSBu
dWxscHRyOworIAorICAgICBtUmVuZGVyUGFzc0ZpcnN0Q29sb3JBdHRhY2htZW50Rm9ybWF0ID0g
bnVsbHB0cjsKKysKKysgICAgbVJlYWRQaXhlbEJ1ZmZlciA9IG51bGxwdHI7CisgfQorIAorIHZv
aWQgRnJhbWVidWZmZXJNdGw6OmRlc3Ryb3koY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCitA
QCAtMTIyLDcgKzE0Miw2IEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6
VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEdMZmxvYXQgKnZhbHVlcykKKyB7CisgICAgIG10bDo6Q2xlYXJSZWN0
UGFyYW1zIGNsZWFyT3B0czsKKy0KKyAgICAgZ2w6OkRyYXdCdWZmZXJNYXNrIGNsZWFyQ29sb3JC
dWZmZXJzOworICAgICBpZiAoYnVmZmVyID09IEdMX0RFUFRIKQorICAgICB7CitAQCAtMTMzLDcg
KzE1Miw2IEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJl
ZiAmdGV4dHVyZSwKKyAgICAgICAgIGNsZWFyQ29sb3JCdWZmZXJzLnNldChkcmF3YnVmZmVyKTsK
KyAgICAgICAgIGNsZWFyT3B0cy5jbGVhckNvbG9yID0gbXRsOjpDbGVhckNvbG9yVmFsdWUodmFs
dWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICAgfQorLQorICAg
ICByZXR1cm4gY2xlYXJJbXBsKGNvbnRleHQsIGNsZWFyQ29sb3JCdWZmZXJzLCAmY2xlYXJPcHRz
KTsKKyB9CisgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJ1aXYoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCitAQCAtMTQ2LDcgKzE2NCw2IEBAIHZvaWQgT3ZlcnJp
ZGVNVExDbGVhckNvbG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAKKyAgICAg
bXRsOjpDbGVhclJlY3RQYXJhbXMgY2xlYXJPcHRzOworICAgICBjbGVhck9wdHMuY2xlYXJDb2xv
ciA9ICBtdGw6OkNsZWFyQ29sb3JWYWx1ZSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJd
LCB2YWx1ZXNbM10pOworLQorICAgICByZXR1cm4gY2xlYXJJbXBsKGNvbnRleHQsIGNsZWFyQ29s
b3JCdWZmZXJzLCAmY2xlYXJPcHRzKTsKKyB9CisgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10
bDo6Y2xlYXJCdWZmZXJpdihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKK0BAIC0xNTksNyAr
MTc2LDcgQEAgdm9pZCBPdmVycmlkZU1UTENsZWFyQ29sb3IoY29uc3QgbXRsOjpUZXh0dXJlUmVm
ICZ0ZXh0dXJlLAorICAgICBnbDo6RHJhd0J1ZmZlck1hc2sgY2xlYXJDb2xvckJ1ZmZlcnM7Cisg
ICAgIGlmIChidWZmZXIgPT0gR0xfU1RFTkNJTCkKKyAgICAgeworLSAgICAgICAgY2xlYXJPcHRz
LmNsZWFyU3RlbmNpbCA9IHZhbHVlc1swXSAmIG10bDo6a1N0ZW5jaWxNYXNrQWxsOworKyAgICAg
ICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IGdsOjpjbGFtcCh2YWx1ZXNbMF0sIDAsIHN0YXRp
Y19jYXN0PEdMaW50PihtdGw6OmtTdGVuY2lsTWFza0FsbCkpOworICAgICB9CisgICAgIGVsc2UK
KyAgICAgeworQEAgLTE3Nyw3ICsxOTQsNyBAQCB2b2lkIE92ZXJyaWRlTVRMQ2xlYXJDb2xvcihj
b25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCisgeworICAgICBtdGw6OkNsZWFyUmVjdFBh
cmFtcyBjbGVhck9wdHM7CisgICAgIGNsZWFyT3B0cy5jbGVhckRlcHRoICAgPSBkZXB0aDsKKy0g
ICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IHN0ZW5jaWwgJiBtdGw6OmtTdGVuY2lsTWFza0Fs
bDsKKysgICAgY2xlYXJPcHRzLmNsZWFyU3RlbmNpbCA9IGdsOjpjbGFtcChzdGVuY2lsLCAwLCBz
dGF0aWNfY2FzdDxHTGludD4obXRsOjprU3RlbmNpbE1hc2tBbGwpKTsKKyAKKyAgICAgcmV0dXJu
IGNsZWFySW1wbChjb250ZXh0LCBnbDo6RHJhd0J1ZmZlck1hc2soKSwgJmNsZWFyT3B0cyk7Cisg
fQorQEAgLTE4NSwxMiArMjAyLDcgQEAgdm9pZCBPdmVycmlkZU1UTENsZWFyQ29sb3IoY29uc3Qg
bXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAorIGNvbnN0IGdsOjpJbnRlcm5hbEZvcm1hdCAmRnJh
bWVidWZmZXJNdGw6OmdldEltcGxlbWVudGF0aW9uQ29sb3JSZWFkRm9ybWF0KAorICAgICBjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkgY29uc3QKKyB7CistICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgICA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKy0gICAgR0xlbnVtIHNpemVkRm9ybWF0
ICAgICAgID0gbVN0YXRlLmdldFJlYWRBdHRhY2htZW50KCktPmdldEZvcm1hdCgpLmluZm8tPnNp
emVkSW50ZXJuYWxGb3JtYXQ7CistICAgIGFuZ2xlOjpGb3JtYXRJRCBmb3JtYXRJRCA9IGFuZ2xl
OjpGb3JtYXQ6OkludGVybmFsRm9ybWF0VG9JRChzaXplZEZvcm1hdCk7CistICAgIGNvbnN0IG10
bDo6Rm9ybWF0ICZtdGxGb3JtYXQgPSBjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFBpeGVs
Rm9ybWF0KGZvcm1hdElEKTsKKy0gICAgR0xlbnVtIGltcGxGb3JtYXQgICAgICAgICAgICA9IG10
bEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLmZib0ltcGxlbWVudGF0aW9uSW50ZXJuYWxGb3Jt
YXQ7CistICAgIHJldHVybiBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdEluZm8oaW1wbEZvcm1h
dCk7CisrICAgIHJldHVybiBHZXRSZWFkQXR0YWNobWVudEluZm8oY29udGV4dCwgZ2V0Q29sb3JS
ZWFkUmVuZGVyVGFyZ2V0KGNvbnRleHQpKTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1
ZmZlck10bDo6cmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKK0BAIC01OTAs
NiArNjAyLDkgQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEsIGFuZ2xlRm9y
bWF0LCBvdXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAgICAgICAgIHsKKyAgICAgICAg
ICAgICBjb250ZXh0TXRsLT5vbkRyYXdGcmFtZUJ1ZmZlckNoYW5nZWRTdGF0ZShjb250ZXh0LCB0
aGlzLCByZW5kZXJQYXNzQ2hhbmdlZCk7CisgICAgICAgICB9CisrCisrICAgICAgICAvLyBSZWNy
ZWF0ZSBwaXhlbCByZWFkaW5nIGJ1ZmZlciBpZiBuZWVkZWQgaW4gZnV0dXJlLgorKyAgICAgICAg
bVJlYWRQaXhlbEJ1ZmZlciA9IG51bGxwdHI7CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworQEAgLTc0OCw3ICs3NjMsNyBAQCBQYWNrUGl4ZWxzUGFyYW1z
IHBhcmFtcyhmbGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVy
c2VSb3dPcgorIAorIHZvaWQgRnJhbWVidWZmZXJNdGw6Om9uRnJhbWVFbmQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpCisgeworLSAgICBpZiAoIW1CYWNrYnVmZmVyKQorKyAgICBpZiAoIW1C
YWNrYnVmZmVyIHx8IG1CYWNrYnVmZmVyLT5wcmVzZXJ2ZUJ1ZmZlcigpKQorICAgICB7CisgICAg
ICAgICByZXR1cm47CisgICAgIH0KK0BAIC04MTIsNiArODI3LDkyIEBAIFBhY2tQaXhlbHNQYXJh
bXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2
ZXJzZVJvd09yCisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCisr
YW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Z2V0UmVhZGFibGVWaWV3Rm9yUmVuZGVyVGFy
Z2V0KAorKyAgICBjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgY29uc3QgUmVuZGVy
VGFyZ2V0TXRsICZydHQsCisrICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRBcmVhLAorKyAg
ICBtdGw6OlRleHR1cmVSZWYgKnJlYWRhYmxlRGVwdGhWaWV3T3V0LAorKyAgICBtdGw6OlRleHR1
cmVSZWYgKnJlYWRhYmxlU3RlbmNpbFZpZXdPdXQsCisrICAgIHVpbnQzMl90ICpyZWFkYWJsZVZp
ZXdMZXZlbCwKKysgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xheWVyLAorKyAgICBnbDo6UmVj
dGFuZ2xlICpyZWFkYWJsZVZpZXdBcmVhKQorK3sKKysgICAgQ29udGV4dE10bCAqY29udGV4dE10
bCAgICAgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIG10bDo6VGV4dHVyZVJlZiBzcmNU
ZXh0dXJlID0gcnR0LmdldFRleHR1cmUoKTsKKysgICAgdWludDMyX3QgbGV2ZWwgICAgICAgICAg
ICAgPSBydHQuZ2V0TGV2ZWxJbmRleCgpLmdldCgpOworKyAgICB1aW50MzJfdCBzbGljZSAgICAg
ICAgICAgICA9IHJ0dC5nZXRMYXllckluZGV4KCk7CisrCisrICAgIC8vIE5PVEUoaHFsZSk6IHNs
aWNlIGlzIG5vdCB1c2VkIGF0bS4KKysgICAgQVNTRVJUKHNsaWNlID09IDApOworKworKyAgICBi
b29sIHJlYWRTdGVuY2lsID0gcmVhZGFibGVTdGVuY2lsVmlld091dDsKKysKKysgICAgaWYgKCFz
cmNUZXh0dXJlKQorKyAgICB7CisrICAgICAgICBpZiAocmVhZGFibGVEZXB0aFZpZXdPdXQpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3T3V0ID0gbnVsbHB0cjsK
KysgICAgICAgIH0KKysgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0KQorKyAgICAg
ICAgeworKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0gbnVsbHB0cjsKKysg
ICAgICAgIH0KKysgICAgICAgICpyZWFkYWJsZVZpZXdBcmVhID0gcmVhZEFyZWE7CisrICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrICAgIH0KKysKKysgICAgYm9vbCBz
a2lwQ29weSA9IHNyY1RleHR1cmUtPmlzU2hhZGVyUmVhZGFibGUoKTsKKysgICAgaWYgKHJ0dC5n
ZXRGb3JtYXQoKS0+aGFzRGVwdGhBbmRTdGVuY2lsQml0cygpICYmIHJlYWRTdGVuY2lsKQorKyAg
ICB7CisrICAgICAgICAvLyBJZiB0aGUgdGV4dHVyZSBpcyBwYWNrZWQgZGVwdGggc3RlbmNpbCwg
YW5kIHdlIG5lZWQgc3RlbmNpbCB2aWV3LAorKyAgICAgICAgLy8gdGhlbiBpdCBtdXN0IHN1cHBv
cnQgY3JlYXRpbmcgZGlmZmVyZW50IGZvcm1hdCB2aWV3LgorKyAgICAgICAgc2tpcENvcHkgPSBz
a2lwQ29weSAmJiBzcmNUZXh0dXJlLT5zdXBwb3J0Rm9ybWF0VmlldygpOworKyAgICB9CisrCisr
ICAgIGlmIChza2lwQ29weSkKKysgICAgeworKyAgICAgICAgLy8gVGV4dHVyZSBzdXBwb3J0cyBz
dGVuY2lsIHZpZXcsIGp1c3QgdXNlIGl0IGRpcmVjdGx5CisrICAgICAgICBpZiAocmVhZGFibGVE
ZXB0aFZpZXdPdXQpCisrICAgICAgICB7CisrICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3
T3V0ID0gc3JjVGV4dHVyZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5j
aWxWaWV3T3V0KQorKyAgICAgICAgeworKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3
T3V0ID0gc3JjVGV4dHVyZTsKKysgICAgICAgIH0KKysgICAgICAgICpyZWFkYWJsZVZpZXdMZXZl
bCA9IGxldmVsOworKyAgICAgICAgKnJlYWRhYmxlVmlld0xheWVyID0gc2xpY2U7CisrICAgICAg
ICAqcmVhZGFibGVWaWV3QXJlYSAgPSByZWFkQXJlYTsKKysgICAgfQorKyAgICBlbHNlCisrICAg
IHsKKysgICAgICAgIEFTU0VSVChzcmNUZXh0dXJlLT50ZXh0dXJlVHlwZSgpICE9IE1UTFRleHR1
cmVUeXBlM0QpOworKworKyAgICAgICAgLy8gVGV4dHVyZSBkb2Vzbid0IHN1cHBvcnQgc3RlbmNp
bCB2aWV3IG9yIG5vdCBzaGFkZXIgcmVhZGFibGUsIGNvcHkgdG8gYW4gaW50ZXJtaW5hdGUKKysg
ICAgICAgIC8vIHRleHR1cmUgdGhhdCBzdXBwb3J0cyBzdGVuY2lsIHZpZXcgYW5kIHNoYWRlciBy
ZWFkLgorKyAgICAgICAgbXRsOjpUZXh0dXJlUmVmIGZvcm1hdGFibGVWaWV3ID0gc3JjVGV4dHVy
ZS0+Z2V0UmVhZGFibGVDb3B5KAorKyAgICAgICAgICAgIGNvbnRleHRNdGwsIGNvbnRleHRNdGwt
PmdldEJsaXRDb21tYW5kRW5jb2RlcigpLCBsZXZlbCwgc2xpY2UsCisrICAgICAgICAgICAgTVRM
UmVnaW9uTWFrZTJEKHJlYWRBcmVhLngsIHJlYWRBcmVhLnksIHJlYWRBcmVhLndpZHRoLCByZWFk
QXJlYS5oZWlnaHQpKTsKKysKKysgICAgICAgIEFOR0xFX0NIRUNLX0dMX0FMTE9DKGNvbnRleHRN
dGwsIGZvcm1hdGFibGVWaWV3KTsKKysKKysgICAgICAgIGlmIChyZWFkYWJsZURlcHRoVmlld091
dCkKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcmVhZGFibGVEZXB0aFZpZXdPdXQgPSBmb3Jt
YXRhYmxlVmlldzsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChyZWFkYWJsZVN0ZW5jaWxWaWV3
T3V0KQorKyAgICAgICAgeworKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0g
Zm9ybWF0YWJsZVZpZXctPmdldFN0ZW5jaWxWaWV3KCk7CisrICAgICAgICB9CisrCisrICAgICAg
ICAqcmVhZGFibGVWaWV3TGV2ZWwgPSAwOworKyAgICAgICAgKnJlYWRhYmxlVmlld0xheWVyID0g
MDsKKysgICAgICAgICpyZWFkYWJsZVZpZXdBcmVhICA9IGdsOjpSZWN0YW5nbGUoMCwgMCwgcmVh
ZEFyZWEud2lkdGgsIHJlYWRBcmVhLmhlaWdodCk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVy
TXRsOjpwcmVwYXJlUmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlclBh
c3NEZXNjICpwRGVzY091dCkKKyB7CitAQCAtODMyLDkgKzkzMyw5IEBAIFBhY2tQaXhlbHNQYXJh
bXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2
ZXJzZVJvd09yCisgICAgICAgICBpZiAoY29sb3JSZW5kZXJUYXJnZXQpCisgICAgICAgICB7Cisg
ICAgICAgICAgICAgY29sb3JSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNj
KCZjb2xvckF0dGFjaG1lbnQpOworKyAgICAgICAgICAgIGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6
Om1heChkZXNjLnNhbXBsZUNvdW50LCBjb2xvclJlbmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxl
cygpKTsKKyAKKyAgICAgICAgICAgICBkZXNjLm51bUNvbG9yQXR0YWNobWVudHMgPSBzdGQ6Om1h
eChkZXNjLm51bUNvbG9yQXR0YWNobWVudHMsIGNvbG9ySW5kZXhHTCArIDEpOworLSAgICAgICAg
ICAgIGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6Om1heChkZXNjLnNhbXBsZUNvdW50LCBjb2xvclJl
bmRlclRhcmdldC0+Z2V0UmVuZGVyU2FtcGxlcygpKTsKKyAKKyAgICAgICAgICAgICBpZiAoIW1S
ZW5kZXJQYXNzRmlyc3RDb2xvckF0dGFjaG1lbnRGb3JtYXQpCisgICAgICAgICAgICAgeworQEAg
LTg2MiwyMiArOTYzLDI5IEBAIFBhY2tQaXhlbHNQYXJhbXMgcGFyYW1zKGZsaXBwZWRBcmVhLCBh
bmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2ZXJzZVJvd09yCisgICAgICAgICBtRGVw
dGhSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCZkZXNjLmRlcHRoQXR0
YWNobWVudCk7CisgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1w
bGVDb3VudCwgbURlcHRoUmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkpOworICAgICB9
CistICAgIGVsc2UKKy0gICAgeworLSAgICAgICAgZGVzYy5kZXB0aEF0dGFjaG1lbnQucmVzZXQo
KTsKKy0gICAgfQorIAorICAgICBpZiAobVN0ZW5jaWxSZW5kZXJUYXJnZXQpCisgICAgIHsKKyAg
ICAgICAgIG1TdGVuY2lsUmVuZGVyVGFyZ2V0LT50b1JlbmRlclBhc3NBdHRhY2htZW50RGVzYygm
ZGVzYy5zdGVuY2lsQXR0YWNobWVudCk7CisgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3Rk
OjptYXgoZGVzYy5zYW1wbGVDb3VudCwgbVN0ZW5jaWxSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNh
bXBsZXMoKSk7CisgICAgIH0KKysKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OworK30KKysKKysvLyBPdmVycmlkZSBjbGVhciBjb2xvciBiYXNlZCBvbiB0ZXh0dXJlJ3Mgd3Jp
dGUgbWFzaworK3ZvaWQgRnJhbWVidWZmZXJNdGw6Om92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBt
dGw6OlRleHR1cmVSZWYgJnRleHR1cmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1UTENsZWFyQ29sb3IgY2xlYXJDb2xvciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTVRMQ2xlYXJDb2xvciAqY29sb3JPdXQpCisreworKyAgICBp
ZiAodGV4dHVyZSkKKysgICAgeworKyAgICAgICAgKmNvbG9yT3V0ID0gbXRsOjpFbXVsYXRlZEFs
cGhhQ2xlYXJDb2xvcihjbGVhckNvbG9yLCB0ZXh0dXJlLT5nZXRDb2xvcldyaXRhYmxlTWFzaygp
KTsKKysgICAgfQorICAgICBlbHNlCisgICAgIHsKKy0gICAgICAgIGRlc2Muc3RlbmNpbEF0dGFj
aG1lbnQucmVzZXQoKTsKKysgICAgICAgICpjb2xvck91dCA9IGNsZWFyQ29sb3I7CisgICAgIH0K
Ky0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKyBhbmdsZTo6
UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhcldpdGhMb2FkT3AoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCitAQCAtOTIzLDcgKzEwMzEsNyBAQCBQYWNrUGl4ZWxzUGFyYW1zIHBhcmFtcyhm
bGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVyc2VSb3dPcgor
IAorICAgICAgICAgbXRsOjpSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyAmY29sb3JBdHRh
Y2htZW50ID0KKyAgICAgICAgICAgICB0ZW1wRGVzYy5jb2xvckF0dGFjaG1lbnRzW2NvbG9ySW5k
ZXhHTF07CistICAgICAgICBjb25zdCBtdGw6OlRleHR1cmVSZWYgJnRleHR1cmUgPSBjb2xvckF0
dGFjaG1lbnQudGV4dHVyZTsKKysgICAgICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVy
ZSA9IGNvbG9yQXR0YWNobWVudC50ZXh0dXJlKCk7CisgCisgICAgICAgICBpZiAoY2xlYXJDb2xv
ckJ1ZmZlcnMudGVzdChjb2xvckluZGV4R0wpKQorICAgICAgICAgeworQEAgLTk2Niw3ICsxMDc0
LDcgQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEsIGFuZ2xlRm9ybWF0LCBv
dXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAKKyAgICAgICAgIG10bDo6UmVuZGVyUGFz
c0NvbG9yQXR0YWNobWVudERlc2MgJmNvbG9yQXR0YWNobWVudCA9CisgICAgICAgICAgICAgbVJl
bmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNbY29sb3JJbmRleEdMXTsKKy0gICAgICAgIGNv
bnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSA9IGNvbG9yQXR0YWNobWVudC50ZXh0dXJlOwor
KyAgICAgICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlID0gY29sb3JBdHRhY2htZW50
LnRleHR1cmUoKTsKKyAKKyAgICAgICAgIGlmIChjbGVhckNvbG9yQnVmZmVycy50ZXN0KGNvbG9y
SW5kZXhHTCkpCisgICAgICAgICB7CitAQCAtMTE5Myw4ICsxMzAxLDkgQEAgUGFja1BpeGVsc1Bh
cmFtcyBwYXJhbXMoZmxpcHBlZEFyZWEsIGFuZ2xlRm9ybWF0LCBvdXRwdXRQaXRjaCwgcGFjay5y
ZXZlcnNlUm93T3IKKyAgICAgZ2w6OlJlY3RhbmdsZSBmbGlwcGVkQXJlYSA9IGdsQXJlYTsKKyAg
ICAgaWYgKG1GbGlwWSkKKyAgICAgeworLSAgICAgICAgZmxpcHBlZEFyZWEueSA9IHJlYWRSVC0+
Z2V0VGV4dHVyZSgpLT5oZWlnaHQocmVhZFJULT5nZXRMZXZlbEluZGV4KCkpIC0gZmxpcHBlZEFy
ZWEueSAtCistICAgICAgICAgICAgICAgICAgICAgICAgZmxpcHBlZEFyZWEuaGVpZ2h0OworKyAg
ICAgICAgZmxpcHBlZEFyZWEueSA9CisrICAgICAgICAgICAgcmVhZFJULT5nZXRUZXh0dXJlKCkt
PmhlaWdodChyZWFkUlQtPmdldExldmVsSW5kZXgoKSkgLQorKyAgICAgICAgICAgIGZsaXBwZWRB
cmVhLnkgLSBmbGlwcGVkQXJlYS5oZWlnaHQ7CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIGZsaXBw
ZWRBcmVhOworQEAgLTEyMTEsNyArMTMyMCw2IEBAIFBhY2tQaXhlbHNQYXJhbXMgcGFyYW1zKGZs
aXBwZWRBcmVhLCBhbmdsZUZvcm1hdCwgb3V0cHV0UGl0Y2gsIHBhY2sucmV2ZXJzZVJvd09yCisg
ICAgIHsKKyAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyAgICAgfQor
LQorICAgICBpZiAocGFja1BpeGVsc1BhcmFtcy5wYWNrQnVmZmVyKQorICAgICB7CisgICAgICAg
ICByZXR1cm4gcmVhZFBpeGVsc1RvUEJPKGNvbnRleHQsIGFyZWEsIHBhY2tQaXhlbHNQYXJhbXMs
IHJlbmRlclRhcmdldCk7CitAQCAtMTI3OSwxOSArMTM4NywzNiBAQCBQYWNrUGl4ZWxzUGFyYW1z
IHBhcmFtcyhmbGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBpdGNoLCBwYWNrLnJldmVy
c2VSb3dPcgorIAorICAgICBBTkdMRV9NVExfQ0hFQ0soY29udGV4dE10bCwgcGFja1BpeGVsc1Bh
cmFtcy5vZmZzZXQgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpLAorICAg
ICAgICAgICAgICAgICAgICAgR0xfSU5WQUxJRF9PUEVSQVRJT04pOworLSAgICBjb25zdCB1aW50
MzJfdCBkc3RCdWZmZXJPZmZzZXQgICAgICA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihwYWNrUGl4
ZWxzUGFyYW1zLm9mZnNldCk7CistICAgIGNvbnN0IHVpbnQzMl90IGRzdEJ1ZmZlclJvd1BpdGNo
ICAgID0gcGFja1BpeGVsc1BhcmFtcy5vdXRwdXRQaXRjaDsKKy0gICAgY29uc3QgYW5nbGU6OkZv
cm1hdCAmZHN0QW5nbGVGb3JtYXQgPSAqcGFja1BpeGVsc1BhcmFtcy5kZXN0Rm9ybWF0OworLSAg
ICBjb25zdCBib29sIHJldmVyc2VSb3dPcmRlciAgICAgICAgICA9IHBhY2tQaXhlbHNQYXJhbXMu
cmV2ZXJzZVJvd09yZGVyOworKyAgICB1aW50MzJfdCBvZmZzZXQgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdD4ocGFja1BpeGVsc1BhcmFtcy5vZmZzZXQpOworIAorICAgICBCdWZmZXJNdGwgKnBhY2tC
dWZmZXJNdGwgPSBtdGw6OkdldEltcGwocGFja1BpeGVsc1BhcmFtcy5wYWNrQnVmZmVyKTsKKyAg
ICAgbXRsOjpCdWZmZXJSZWYgZHN0QnVmZmVyID0gcGFja0J1ZmZlck10bC0+Z2V0Q3VycmVudEJ1
ZmZlcigpOworIAorKyAgICByZXR1cm4gcmVhZFBpeGVsc1RvQnVmZmVyKGNvbnRleHQsIGFyZWEs
IHJlbmRlclRhcmdldCwgcGFja1BpeGVsc1BhcmFtcy5yZXZlcnNlUm93T3JkZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKnBhY2tQaXhlbHNQYXJhbXMuZGVzdEZvcm1hdCwgb2Zm
c2V0LCBwYWNrUGl4ZWxzUGFyYW1zLm91dHB1dFBpdGNoLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZkc3RCdWZmZXIpOworK30KKysKKythbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVy
TXRsOjpyZWFkUGl4ZWxzVG9CdWZmZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJmFyZWEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclRhcmdldE10bCAqcmVuZGVyVGFyZ2V0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJldmVyc2VSb3dP
cmRlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgYW5nbGU6OkZvcm1hdCAmZHN0QW5nbGVGb3JtYXQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdEJ1ZmZlck9mZnNldCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgZHN0QnVmZmVyUm93UGl0Y2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICpwRHN0QnVmZmVyKSBjb25zdAor
K3sKKysgICAgQVNTRVJUKHJlbmRlclRhcmdldCk7CisrCisrICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrCisgICAgIGNvbnN0IG10bDo6Rm9ybWF0
ICZyZWFkRm9ybWF0ICAgICAgICA9ICpyZW5kZXJUYXJnZXQtPmdldEZvcm1hdCgpOworICAgICBj
b25zdCBhbmdsZTo6Rm9ybWF0ICZyZWFkQW5nbGVGb3JtYXQgPSByZWFkRm9ybWF0LmFjdHVhbEFu
Z2xlRm9ybWF0KCk7CisgCisgICAgIG10bDo6VGV4dHVyZVJlZiB0ZXh0dXJlID0gcmVuZGVyVGFy
Z2V0LT5nZXRUZXh0dXJlKCk7CisgCisrICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICZkc3RCdWZm
ZXIgPSAqcERzdEJ1ZmZlcjsKKysKKyAgICAgaWYgKGRzdEFuZ2xlRm9ybWF0LmlkICE9IHJlYWRB
bmdsZUZvcm1hdC5pZCB8fCB0ZXh0dXJlLT5zYW1wbGVzKCkgPiAxIHx8CisgICAgICAgICAoZHN0
QnVmZmVyT2Zmc2V0ICUgZHN0QW5nbGVGb3JtYXQucGl4ZWxCeXRlcykgfHwKKyAgICAgICAgIChk
c3RCdWZmZXJPZmZzZXQgJSBtdGw6OmtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCkp
CitAQCAtMTM1OSw4ICsxNDg0LDggQEAgUGFja1BpeGVsc1BhcmFtcyBwYXJhbXMoZmxpcHBlZEFy
ZWEsIGFuZ2xlRm9ybWF0LCBvdXRwdXRQaXRjaCwgcGFjay5yZXZlcnNlUm93T3IKKyAKKyAgICAg
ICAgICAgICB1aW50MzJfdCBidWZmZXJSb3dPZmZzZXQgPSBkc3RCdWZmZXJPZmZzZXQ7CisgICAg
ICAgICAgICAgLy8gQ29weSBwaXhlbHMgcm93IGJ5IHJvdworLSAgICAgICAgICAgIGZvciAoaW50
IHIgPSBzdGFydFJvdywgY29waWVkUm93cyA9IDA7IGNvcGllZFJvd3MgPCBhcmVhLmhlaWdodDsK
Ky0gICAgICAgICAgICAgICAgICsrY29waWVkUm93cywgLS1yLCBidWZmZXJSb3dPZmZzZXQgKz0g
ZHN0QnVmZmVyUm93UGl0Y2gpCisrICAgICAgICAgICAgZm9yIChpbnQgciA9IHN0YXJ0Um93LCBp
ID0gMDsgaSA8IGFyZWEuaGVpZ2h0OworKyAgICAgICAgICAgICAgICAgKytpLCAtLXIsIGJ1ZmZl
clJvd09mZnNldCArPSBkc3RCdWZmZXJSb3dQaXRjaCkKKyAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgIHNyY1Jvd1JlZ2lvbi55ID0gcjsKKyAKK0BAIC0xMzc1LDUgKzE1MDAsNCBAQCBQ
YWNrUGl4ZWxzUGFyYW1zIHBhcmFtcyhmbGlwcGVkQXJlYSwgYW5nbGVGb3JtYXQsIG91dHB1dFBp
dGNoLCBwYWNrLnJldmVyc2VSb3dPcgorIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7CisgfQorLQorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lP
U3VyZmFjZVN1cmZhY2VNdGwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAu
Ljk1NDhlNWQKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9JT1N1cmZhY2VTdXJmYWNlTXRsLmgKK0BAIC0wLDAgKzEsMTI2IEBACisrLy8KKysvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorKy8v
CisrCisrI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9JT1NVUkZBQ0VTVVJGQUNFTVRM
X0hfCisrI2RlZmluZSBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9JT1NVUkZBQ0VTVVJGQUNFTVRM
X0hfCisrCisrI2luY2x1ZGUgPElPU3VyZmFjZS9JT1N1cmZhY2VSZWYuaD4KKysjaW5jbHVkZSAi
bGliQU5HTEUvcmVuZGVyZXIvU3VyZmFjZUltcGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9TdXJmYWNlTXRsLmgiCisrCisrbmFtZXNwYWNlIG1ldGFsCisreworK2NsYXNzIEF0dHJp
YnV0ZU1hcDsKKyt9ICAvLyBuYW1lc3BhY2UgbWV0YWwKKysKKytuYW1lc3BhY2UgcngKKyt7Cisr
CisrY2xhc3MgRGlzcGxheU1UTDsKKysKKytjbGFzcyBJT1N1cmZhY2VTdXJmYWNlTXRsIDogcHVi
bGljIFN1cmZhY2VNdGxQcm90b2NvbAorK3sKKysgIHB1YmxpYzoKKysgICAgSU9TdXJmYWNlU3Vy
ZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBF
R0xDbGllbnRCdWZmZXIgYnVmZmVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVn
bDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKTsKKysgICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBv
dmVycmlkZTsKKysKKysgICAgdm9pZCBkZXN0cm95KGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxh
eSkgb3ZlcnJpZGU7CisrCisrICAgIGVnbDo6RXJyb3IgaW5pdGlhbGl6ZShjb25zdCBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkpIG92ZXJyaWRlOworKyAgICBGcmFtZWJ1ZmZlckltcGwgKmNyZWF0ZURl
ZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkZyYW1lYnVmZmVy
U3RhdGUgJnN0YXRlKSBvdmVycmlkZTsKKysKKysgICAgZWdsOjpFcnJvciBtYWtlQ3VycmVudChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAgIGVnbDo6RXJyb3IgdW5N
YWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAgIGVn
bDo6RXJyb3Igc3dhcChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAg
IGVnbDo6RXJyb3IgcG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB4LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRUdMaW50IHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xp
bnQgd2lkdGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgaGVpZ2h0KSBv
dmVycmlkZTsKKysKKysgICAgZWdsOjpFcnJvciBxdWVyeVN1cmZhY2VQb2ludGVyQU5HTEUoRUdM
aW50IGF0dHJpYnV0ZSwgdm9pZCAqKnZhbHVlKSBvdmVycmlkZTsKKysgICAgZWdsOjpFcnJvciBi
aW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKysgICAgZWdsOjpFcnJvciByZWxlYXNl
VGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGludCBidWZmZXIpIG92ZXJy
aWRlOworKyAgICBlZ2w6OkVycm9yIGdldFN5bmNWYWx1ZXMoRUdMdWludDY0S0hSICp1c3QsIEVH
THVpbnQ2NEtIUiAqbXNjLCBFR0x1aW50NjRLSFIgKnNiYykgb3ZlcnJpZGU7CisrICAgIGVnbDo6
RXJyb3IgZ2V0TXNjUmF0ZShFR0xpbnQgKm51bWVyYXRvciwgRUdMaW50ICpkZW5vbWluYXRvcikg
b3ZlcnJpZGU7CisrICAgIHZvaWQgc2V0U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZhbCkgb3Zl
cnJpZGU7CisrICAgIHZvaWQgc2V0Rml4ZWRXaWR0aChFR0xpbnQgd2lkdGgpIG92ZXJyaWRlOwor
KyAgICB2b2lkIHNldEZpeGVkSGVpZ2h0KEVHTGludCBoZWlnaHQpIG92ZXJyaWRlOworKworKyAg
ICAvLyBXaWR0aCBjYW4gY2hhbmdlIHdoZW4gdGhlIGNsaWVudCB3aW5kb3cgcmVzaXplcy4KKysg
ICAgRUdMaW50IGdldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CisrICAgIC8vIEhlaWdodCBjYW4g
Y2hhbmdlIHdoZW4gdGhlIGNsaWVudCB3aW5kb3cgcmVzaXplcy4KKysgICAgRUdMaW50IGdldEhl
aWdodCgpIGNvbnN0IG92ZXJyaWRlOworKworKyAgICBFR0xpbnQgaXNQb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisrICAgIEVHTGludCBnZXRTd2FwQmVoYXZpb3IoKSBj
b25zdCBvdmVycmlkZTsKKysKKysgICAgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVy
VGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGJpbmRpbmcsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJ
bmRleCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6
ZWkgc2FtcGxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZyYW1lYnVmZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KSBvdmVycmlkZTsKKysK
KysgICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisrICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJl
Q3VycmVudERyYXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJh
d2FibGVPdXQpIG92ZXJyaWRlOworKyAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIDE7IH0KKysgICAgYm9vbCBwcmVzZXJ2ZUJ1ZmZlcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisrICAgIG10bDo6VGV4dHVyZVJlZiBnZXRUZXh0dXJlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKysgICAgYm9vbCBoYXNSb2J1c3RSZXNvdXJjZUluaXQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorKyAgICBhbmdsZTo6UmVzdWx0IGVu
c3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworKyAgICB9CisrICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmZ2V0Q29sb3JUZXh0
dXJlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbUlPU3VyZmFjZVRleHR1cmU7IH0KKysKKysgIHByaXZh
dGU6CisrICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOworKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZUJhY2tpbmdUZXh0dXJl
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKysgICAgYW5nbGU6OlJlc3VsdCBjcmVhdGVU
ZXh0dXJlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbXRsOjpGb3JtYXQgJmZvcm1hdCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpUZXh0dXJlUmVmICp0ZXh0dXJlT3V0KTsKKysKKysgICAgYW5nbGU6OlJlc3VsdCBp
bml0aWFsaXplQWxwaGFDaGFubmVsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTHVpbnQg
dGV4dHVyZSk7CisrCisrI2lmIGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TX1NJTVVMQVRPUikK
KysgICAgSU9TdXJmYWNlTG9ja09wdGlvbnMgZ2V0SU9TdXJmYWNlTG9ja09wdGlvbnMoKSBjb25z
dDsKKysjZW5kaWYKKysKKysgICAgQ29udGV4dE10bCAqY29udGV4dE1UTDsKKysgICAgSU9TdXJm
YWNlUmVmIG1JT1N1cmZhY2U7CisrICAgIG10bDo6VGV4dHVyZVJlZiBtSU9TdXJmYWNlVGV4dHVy
ZTsKKysgICAgbXRsOjpUZXh0dXJlUmVmIG1JT1N1cmZhY2VUZXh0dXJlVmlldzsKKysgICAgbXRs
OjpGb3JtYXQgbUZvcm1hdDsKKysgICAgbXRsOjpGb3JtYXQgbUludGVybmFsRm9ybWF0OworKyAg
ICBSZW5kZXJUYXJnZXRNdGwgbVJlbmRlclRhcmdldDsKKysgICAgYm9vbCBtSU9TdXJmYWNlVGV4
dHVyZUNyZWF0ZWQ7CisrICAgIGludCBtV2lkdGg7CisrICAgIGludCBtSGVpZ2h0OworKyAgICBp
bnQgbVBsYW5lOworKyAgICBpbnQgbUZvcm1hdEluZGV4OworKyAgICBpbnQgbVJvd1N0cmlkZUlu
UGl4ZWxzOworKworKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPU19TSU1VTEFUT1IpCisr
ICAgIEdMdWludCBtQm91bmRUZXh0dXJlSUQ7CisrICAgIGJvb2wgbVVwbG9hZEZyb21JT1N1cmZh
Y2U7CisrICAgIGJvb2wgbVJlYWRiYWNrVG9JT1N1cmZhY2U7CisrI2VuZGlmCisrfTsKKysKKyt9
ICAvLyBuYW1lc3BhY2UgcngKKysKKysjZW5kaWYgIC8vIExJQkFOR0xFX1JFTkRFUkVSX0dMX0VB
R0xfSU9TVVJGQUNFU1VSRkFDRUVBR0xfSF8KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9JT1N1cmZhY2VTdXJmYWNlTXRsLm1tCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5k
ZXggMDAwMDAwMC4uOGI5NDg1OQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwubW0KK0BAIC0wLDAgKzEsNDY3IEBACisr
Ly8KKysvLyBDb3B5cmlnaHQgMjAxOSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKysvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorKy8vCisrLy8gSU9TdXJmYWNlU3VyZmFjZU10bC5tbToKKysvLyAgICBJbXBsZW1l
bnRzIHRoZSBjbGFzcyBtZXRob2RzIGZvciBJT1N1cmZhY2VTdXJmYWNlTXRsLgorKy8vCisrCisr
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0lPU3VyZmFjZVN1cmZhY2VNdGwuaCIK
KysKKysjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisrCisrI2luY2x1ZGUgImxpYkFO
R0xFL0Rpc3BsYXkuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvU3VyZmFjZS5oIgorKyNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisrI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oIgorKworKy8vIENvbXBpbGVyIGNhbiB0dXJuIG9u
IHByb2dyYW1tYXRpY2FsIGZyYW1lIGNhcHR1cmUgaW4gcmVsZWFzZSBidWlsZCBieSBkZWZpbmlu
ZworKy8vIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUgZmxhZy4KKysjaWYgZGVmaW5lZChOREVC
VUcpICYmICFkZWZpbmVkKEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUpCisrIyAgICBkZWZpbmUg
QU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVEIDAKKysjZWxzZQorKyMgICAgZGVmaW5l
IEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRCAxCisrI2VuZGlmCisrbmFtZXNwYWNl
IHJ4CisreworKworK25hbWVzcGFjZQorK3sKKysKKytzdHJ1Y3QgSU9TdXJmYWNlRm9ybWF0SW5m
bworK3sKKysgICAgR0xlbnVtIGludGVybmFsRm9ybWF0OworKyAgICBHTGVudW0gdHlwZTsKKysg
ICAgYW5nbGU6OkZvcm1hdElEIHBpeGVsRm9ybWF0OworKyAgICBhbmdsZTo6Rm9ybWF0SUQgaW50
ZXJuYWxQaXhlbEZvcm1hdDsKKyt9OworKworK3N0YXRpYyBjb25zdCBJT1N1cmZhY2VGb3JtYXRJ
bmZvIGtJT1N1cmZhY2VGb3JtYXRzW10gPSB7CisrICAgIHtHTF9SRUQsIEdMX1VOU0lHTkVEX0JZ
VEUsIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5PUk0sIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5PUk19
LAorKyAgICB7R0xfUjE2VUksIEdMX1VOU0lHTkVEX1NIT1JULCBhbmdsZTo6Rm9ybWF0SUQ6OlIx
NkcxNl9VSU5ULCBhbmdsZTo6Rm9ybWF0SUQ6OlIxNkcxNl9VSU5UfSwKKysgICAge0dMX1JHLCBH
TF9VTlNJR05FRF9CWVRFLCBhbmdsZTo6Rm9ybWF0SUQ6OlI4RzhfVU5PUk0sIGFuZ2xlOjpGb3Jt
YXRJRDo6UjhHOF9VTk9STX0sCisrICAgIHtHTF9SR0IsIEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xl
OjpGb3JtYXRJRDo6UjhHOEI4QThfVU5PUk0sIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5P
Uk19LAorKyAgICB7R0xfQkdSQV9FWFQsIEdMX1VOU0lHTkVEX0JZVEUsIGFuZ2xlOjpGb3JtYXRJ
RDo6QjhHOFI4QThfVU5PUk0sCisrICAgICBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JN
fSwKKysgICAge0dMX1JHQjEwX0EyLCBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsIGFu
Z2xlOjpGb3JtYXRJRDo6UjEwRzEwQjEwQTJfVU5PUk0sCisrICAgICBhbmdsZTo6Rm9ybWF0SUQ6
OlIxMEcxMEIxMEEyX1VOT1JNfSwKKysgICAge0dMX1JHQkEsIEdMX0hBTEZfRkxPQVQsIGFuZ2xl
OjpGb3JtYXRJRDo6UjE2RzE2QjE2QTE2X0ZMT0FULAorKyAgICAgYW5nbGU6OkZvcm1hdElEOjpS
MTZHMTZCMTZBMTZfRkxPQVR9LAorK307CisrCisraW50IEZpbmRJT1N1cmZhY2VGb3JtYXRJbmRl
eChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlKQorK3sKKysgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KEFycmF5U2l6ZShrSU9TdXJmYWNlRm9y
bWF0cykpOyArK2kpCisrICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8gJmZvcm1hdEluZm8gPSBr
SU9TdXJmYWNlRm9ybWF0c1tpXTsKKysgICAgICAgIGlmIChmb3JtYXRJbmZvLmludGVybmFsRm9y
bWF0ID09IGludGVybmFsRm9ybWF0ICYmIGZvcm1hdEluZm8udHlwZSA9PSB0eXBlKQorKyAgICAg
ICAgeworKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGkpOworKyAgICAgICAg
fQorKyAgICB9CisrICAgIHJldHVybiAtMTsKKyt9CisrCisrLy8gVE9ETyhqY3VubmluZ2hhbSkg
OiByZWZhY3RvciB0aGlzIGFuZCBzdXJmYWNlbXRsIHRvIHJlZHVjZSBjb3B5K3Bhc3RlZCBjb2Rl
CisrCisrQU5HTEVfTVRMX1VOVVNFRAorK2Jvb2wgSXNGcmFtZUNhcHR1cmVFbmFibGVkKCkKKyt7
CisrI2lmICFBTkdMRV9NRVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKysgICAgcmV0dXJuIGZh
bHNlOworKyNlbHNlCisrICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBmcmFtZSBjYXB0dXJlIHByb2dy
YW1tYXRpY2FsbHkgaWYgdGhlIEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkUKKysgICAgLy8gZW52
aXJvbm1lbnQgZmxhZyBpcyBzZXQuIE90aGVyd2lzZSwgaXQgd2lsbCBzbG93IGRvd24gdGhlIHJl
bmRlcmluZy4gVGhpcyBhbGxvd3MgdXNlciB0bworKyAgICAvLyBmaW5lbHkgY29udHJvbCB3aGV0
aGVyIHRoZXkgd2FudCB0byBjYXB0dXJlIHRoZSBmcmFtZSBmb3IgcGFydGljdWxhciBhcHBsaWNh
dGlvbiBvciBub3QuCisrICAgIGF1dG8gdmFyICAgICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVu
digiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRSIpOworKyAgICBzdGF0aWMgY29uc3QgYm9vbCBl
bmFibGVkID0gdmFyID8gKHN0cmNtcCh2YXIsICIxIikgPT0gMCkgOiBmYWxzZTsKKysKKysgICAg
cmV0dXJuIGVuYWJsZWQ7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01UTF9VTlVTRUQKKytzdGQ6
OnN0cmluZyBHZXRNZXRhbENhcHR1cmVGaWxlKCkKKyt7CisrI2lmICFBTkdMRV9NRVRBTF9GUkFN
RV9DQVBUVVJFX0VOQUJMRUQKKysgICAgcmV0dXJuICIiOworKyNlbHNlCisrICAgIGF1dG8gdmFy
ICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01FVEFMX0ZSQU1FX0NBUFRV
UkVfRklMRSIpOworKyAgICBjb25zdCBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHZhciA/IHZhciA6
ICIiOworKworKyAgICByZXR1cm4gZmlsZVBhdGg7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01U
TF9VTlVTRUQKKytzaXplX3QgTWF4QWxsb3dlZEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiAhQU5H
TEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisrICAgIHJldHVybiAwOworKyNlbHNlCisr
ICAgIGF1dG8gdmFyICAgICAgICAgICAgICAgICAgICAgID0gc3RkOjpnZXRlbnYoIkFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfTUFYIik7CisrICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4RnJh
bWVzID0gdmFyID8gc3RkOjphdG9pKHZhcikgOiAxMDA7CisrCisrICAgIHJldHVybiBtYXhGcmFt
ZXM7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01UTF9VTlVTRUQKKytzaXplX3QgTWluQWxsb3dl
ZEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiAhQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFC
TEVECisrICAgIHJldHVybiAwOworKyNlbHNlCisrICAgIGF1dG8gdmFyICAgICAgICAgICAgICAg
ICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9NSU4iKTsKKysg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5GcmFtZSA9IHZhciA/IHN0ZDo6YXRvaSh2YXIpIDog
MDsKKysKKysgICAgcmV0dXJuIG1pbkZyYW1lOworKyNlbmRpZgorK30KKysKKytBTkdMRV9NVExf
VU5VU0VECisrYm9vbCBGcmFtZUNhcHR1cmVEZXZpY2VTY29wZSgpCisreworKyNpZiAhQU5HTEVf
TUVUQUxfRlJBTUVfQ0FQVFVSRV9FTkFCTEVECisrICAgIHJldHVybiBmYWxzZTsKKysjZWxzZQor
KyAgICBhdXRvIHZhciAgICAgICAgICAgICAgICAgICAgICA9IHN0ZDo6Z2V0ZW52KCJBTkdMRV9N
RVRBTF9GUkFNRV9DQVBUVVJFX1NDT1BFIik7CisrICAgIHN0YXRpYyBjb25zdCBib29sIHNjb3Bl
RGV2aWNlID0gdmFyID8gKHN0cmNtcCh2YXIsICJkZXZpY2UiKSA9PSAwKSA6IGZhbHNlOworKwor
KyAgICByZXR1cm4gc2NvcGVEZXZpY2U7CisrI2VuZGlmCisrfQorKworK0FOR0xFX01UTF9VTlVT
RUQKKytzdGQ6OmF0b21pYzxzaXplX3Q+IGdGcmFtZUNhcHR1cmVkKDApOworKworK0FOR0xFX01U
TF9VTlVTRUQKKyt2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0YWxEZXZp
Y2UsIGlkPE1UTENvbW1hbmRRdWV1ZT4gbWV0YWxDbWRRdWV1ZSkKKyt7CisrI2lmIEFOR0xFX01F
VEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorKyAgICBpZiAoIUlzRnJhbWVDYXB0dXJlRW5hYmxl
ZCgpKQorKyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgaWYgKGdGcmFt
ZUNhcHR1cmVkID49IE1heEFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKysgICAgeworKyAgICAgICAg
cmV0dXJuOworKyAgICB9CisrCisrICAgIE1UTENhcHR1cmVNYW5hZ2VyICpjYXB0dXJlTWFuYWdl
ciA9IFtNVExDYXB0dXJlTWFuYWdlciBzaGFyZWRDYXB0dXJlTWFuYWdlcl07CisrICAgIGlmIChj
YXB0dXJlTWFuYWdlci5pc0NhcHR1cmluZykKKysgICAgeworKyAgICAgICAgcmV0dXJuOworKyAg
ICB9CisrCisrICAgIGdGcmFtZUNhcHR1cmVkKys7CisrCisrICAgIGlmIChnRnJhbWVDYXB0dXJl
ZCA8IE1pbkFsbG93ZWRGcmFtZUNhcHR1cmUoKSkKKysgICAgeworKyAgICAgICAgcmV0dXJuOwor
KyAgICB9CisrCisrIyAgICBpZmRlZiBfX01BQ18xMF8xNQorKyAgICBpZiAoQU5HTEVfQVBQTEVf
QVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMpKQorKyAgICB7CisrICAgICAgICBNVExDYXB0
dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBbW01UTENhcHR1cmVEZXNjcmlwdG9y
IGFsbG9jXSBpbml0XTsKKysgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3Qg
ICAgICAgICA9IG1ldGFsRGV2aWNlOworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZVBh
dGggICAgICAgICAgICAgID0gR2V0TWV0YWxDYXB0dXJlRmlsZSgpOworKyAgICAgICAgaWYgKGZp
bGVQYXRoICE9ICIiKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
IG51bWJlcmVkUGF0aCA9CisrICAgICAgICAgICAgICAgIGZpbGVQYXRoICsgc3RkOjp0b19zdHJp
bmcoZ0ZyYW1lQ2FwdHVyZWQgLSAxKSArICIuZ3B1dHJhY2UiOworKyAgICAgICAgICAgIGNhcHR1
cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uR1BVVHJhY2VE
b2N1bWVudDsKKysgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5vdXRwdXRVUkwgPQorKyAg
ICAgICAgICAgICAgICBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpudW1iZXJlZFBhdGguY19zdHIoKV0KKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc0RpcmVjdG9yeTpmYWxzZV07CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAg
ICAgICB7CisrICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBhdXNlIGV4ZWN1dGlvbiBvbmx5IGlm
IGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lkZSBYY29kZQorKyAgICAgICAgICAg
IGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uRGV2
ZWxvcGVyVG9vbHM7CisrICAgICAgICB9CisrCisrICAgICAgICBOU0Vycm9yICplcnJvcjsKKysg
ICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhEZXNjcmlwdG9yOmNh
cHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCisrICAgICAgICB7CisrICAgICAgICAgICAg
TlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyZSwgZXJyb3IgJUAiLCBlcnJvcik7CisrICAg
ICAgICB9CisrICAgIH0KKysgICAgZWxzZQorKyMgICAgZW5kaWYgIC8vIF9fTUFDXzEwXzE1Cisr
ICAgICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMpKQor
KyAgICB7CisrICAgICAgICBNVExDYXB0dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3Ig
PSBbW01UTENhcHR1cmVEZXNjcmlwdG9yIGFsbG9jXSBpbml0XTsKKysgICAgICAgIGNhcHR1cmVE
ZXNjcmlwdG9yLmNhcHR1cmVPYmplY3QgICAgICAgICA9IG1ldGFsRGV2aWNlOworKworKyAgICAg
ICAgTlNFcnJvciAqZXJyb3I7CisrICAgICAgICBpZiAoIVtjYXB0dXJlTWFuYWdlciBzdGFydENh
cHR1cmVXaXRoRGVzY3JpcHRvcjpjYXB0dXJlRGVzY3JpcHRvciBlcnJvcjomZXJyb3JdKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIE5TTG9nKEAiRmFpbGVkIHRvIHN0YXJ0IGNhcHR1cmUsIGVy
cm9yICVAIiwgZXJyb3IpOworKyAgICAgICAgfQorKyAgICB9CisrI2VuZGlmICAvLyBBTkdMRV9N
RVRBTF9GUkFNRV9DQVBUVVJFX0VOQUJMRUQKKyt9CisrCisrdm9pZCBTdGFydEZyYW1lQ2FwdHVy
ZShDb250ZXh0TXRsICpjb250ZXh0KQorK3sKKysgICAgU3RhcnRGcmFtZUNhcHR1cmUoY29udGV4
dC0+Z2V0TWV0YWxEZXZpY2UoKSwgY29udGV4dC0+Y21kUXVldWUoKS5nZXQoKSk7CisrfQorKwor
K3ZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisreworKyNpZiBBTkdMRV9NRVRBTF9GUkFNRV9DQVBU
VVJFX0VOQUJMRUQKKysgICAgaWYgKCFJc0ZyYW1lQ2FwdHVyZUVuYWJsZWQoKSkKKysgICAgewor
KyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIE1UTENhcHR1cmVNYW5hZ2VyICpjYXB0dXJl
TWFuYWdlciA9IFtNVExDYXB0dXJlTWFuYWdlciBzaGFyZWRDYXB0dXJlTWFuYWdlcl07CisrICAg
IGlmIChjYXB0dXJlTWFuYWdlci5pc0NhcHR1cmluZykKKysgICAgeworKyAgICAgICAgW2NhcHR1
cmVNYW5hZ2VyIHN0b3BDYXB0dXJlXTsKKysgICAgfQorKyNlbmRpZgorK30KKysKKyt9ICAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisrCisrSU9TdXJmYWNlU3VyZmFjZU10bDo6SU9TdXJmYWNlU3Vy
ZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGJ1ZmZlciwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0
cmlidXRlTWFwICZhdHRyaWJzKQorKyAgICA6IFN1cmZhY2VNdGxQcm90b2NvbChzdGF0ZSkKKyt7
CisrICAgIC8vIEtlZXAgcmVmZXJlbmNlIHRvIHRoZSBJT1N1cmZhY2Ugc28gaXQgZG9lc24ndCBn
ZXQgZGVsZXRlZCB3aGlsZSB0aGUgcGJ1ZmZlciBleGlzdHMuCisrICAgIG1JT1N1cmZhY2UgPSBy
ZWludGVycHJldF9jYXN0PElPU3VyZmFjZVJlZj4oYnVmZmVyKTsKKysgICAgQ0ZSZXRhaW4obUlP
U3VyZmFjZSk7CisrCisrICAgIC8vIEV4dHJhY3QgYXR0cmlicyB1c2VmdWwgZm9yIHRoZSBjYWxs
IHRvIEVBR0xUZXhJbWFnZUlPU3VyZmFjZTJECisrICAgIG1XaWR0aCAgPSBzdGF0aWNfY2FzdDxp
bnQ+KGF0dHJpYnMuZ2V0KEVHTF9XSURUSCkpOworKyAgICBtSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihhdHRyaWJzLmdldChFR0xfSEVJR0hUKSk7CisrICAgIG1QbGFuZSAgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGF0dHJpYnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUpKTsKKysgICAgLy8g
SG9wZWZ1bGx5IHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIHJvdyBpcyBhbHdheXMgYW4gaW50ZWdl
ciBudW1iZXIgb2YgcGl4ZWxzLiBXZSB1c2UKKysgICAgLy8gZ2xSZWFkUGl4ZWxzIHRvIGZpbGwg
dGhlIElPU3VyZmFjZSBpbiB0aGUgc2ltdWxhdG9yIGFuZCBpdCBjYW4gb25seSBzdXBwb3J0IHN0
cmlkZXMgdGhhdCBhcmUKKysgICAgLy8gYW4gaW50ZWdlciBudW1iZXIgb2YgcGl4ZWxzLgorKyAg
ICBBU1NFUlQoSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5lKG1JT1N1cmZhY2UsIG1QbGFu
ZSkgJQorKyAgICAgICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVudE9mUGxhbmUo
bUlPU3VyZmFjZSwgbVBsYW5lKSA9PQorKyAgICAgICAgICAgMCk7CisrICAgIG1Sb3dTdHJpZGVJ
blBpeGVscyA9IHN0YXRpY19jYXN0PGludD4oSU9TdXJmYWNlR2V0Qnl0ZXNQZXJSb3dPZlBsYW5l
KG1JT1N1cmZhY2UsIG1QbGFuZSkgLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElPU3VyZmFjZUdldEJ5dGVzUGVyRWxlbWVudE9mUGxhbmUobUlPU3VyZmFjZSwg
bVBsYW5lKSk7CisrCisrICAgIEVHTEF0dHJpYiBpbnRlcm5hbEZvcm1hdCA9IGF0dHJpYnMuZ2V0
KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSk7CisrICAgIEVHTEF0dHJpYiB0eXBl
ICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZUEVfQU5HTEUpOworKyAgICBt
Rm9ybWF0SW5kZXggPQorKyAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0YXRpY19j
YXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsK
KysgICAgQVNTRVJUKG1Gb3JtYXRJbmRleCA+PSAwKTsKKysgICAgbUZvcm1hdCAgICAgICAgID0g
ZGlzcGxheS0+Z2V0UGl4ZWxGb3JtYXQoa0lPU3VyZmFjZUZvcm1hdHNbbUZvcm1hdEluZGV4XS5w
aXhlbEZvcm1hdCk7CisrICAgIG1JbnRlcm5hbEZvcm1hdCA9IGRpc3BsYXktPmdldFBpeGVsRm9y
bWF0KGtJT1N1cmZhY2VGb3JtYXRzW21Gb3JtYXRJbmRleF0uaW50ZXJuYWxQaXhlbEZvcm1hdCk7
CisrfQorKworK0lPU3VyZmFjZVN1cmZhY2VNdGw6On5JT1N1cmZhY2VTdXJmYWNlTXRsKCkKKyt7
CisrICAgIFN0b3BGcmFtZUNhcHR1cmUoKTsKKysgICAgaWYgKG1JT1N1cmZhY2UgIT0gbnVsbHB0
cikKKysgICAgeworKyAgICAgICAgQ0ZSZWxlYXNlKG1JT1N1cmZhY2UpOworKyAgICAgICAgbUlP
U3VyZmFjZSA9IG51bGxwdHI7CisrICAgIH0KKyt9CisrCisrdm9pZCBJT1N1cmZhY2VTdXJmYWNl
TXRsOjpkZXN0cm95KGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkge30KKysKKytlZ2w6OkVy
cm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmluaXRpYWxpemUoY29uc3QgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5KQorK3sKKysgICAgRGlzcGxheU10bCAqZGlzcGxheU10bCAgICA9IG10bDo6R2V0SW1w
bChkaXNwbGF5KTsKKysgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSA9IGRpc3BsYXlNdGwt
PmdldE1ldGFsRGV2aWNlKCk7CisrCisrICAgIFN0YXJ0RnJhbWVDYXB0dXJlKG1ldGFsRGV2aWNl
LCBkaXNwbGF5TXRsLT5jbWRRdWV1ZSgpLmdldCgpKTsKKysgICAgcmV0dXJuIGVnbDo6Tm9FcnJv
cigpOworK30KKysKKytGcmFtZWJ1ZmZlckltcGwgKklPU3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0
ZURlZmF1bHRGcmFtZWJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAmc3RhdGUpCisreworKyAgICBhdXRvIGZibyA9IG5l
dyBGcmFtZWJ1ZmZlck10bChzdGF0ZSwgLyogZmxpcFkgKi8gdHJ1ZSwgLyogYmFja2J1ZmZlciAq
LyB0aGlzKTsKKysgICAgcmV0dXJuIGZibzsKKyt9CisrCisrZWdsOjpFcnJvciBJT1N1cmZhY2VT
dXJmYWNlTXRsOjptYWtlQ3VycmVudChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7Cisr
ICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAg
IFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOworKyAgICByZXR1cm4gZWdsOjpOb0Vycm9y
KCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6dW5NYWtlQ3VycmVu
dChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7CisrICAgIFN0b3BGcmFtZUNhcHR1cmUo
KTsKKysgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworK30KKysKKytlZ2w6OkVycm9yIElPU3Vy
ZmFjZVN1cmZhY2VNdGw6OnN3YXAoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisreworKyAg
ICBTdG9wRnJhbWVDYXB0dXJlKCk7CisrICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6
OkdldEltcGwoY29udGV4dCk7CisrICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOwor
KyAgICByZXR1cm4gZWdsOjpOb0Vycm9yKCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNl
U3VyZmFjZU10bDo6cG9zdFN1YkJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMaW50IHgsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGludCB5LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgd2lk
dGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTGlu
dCBoZWlnaHQpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6OkVn
bEJhZEFjY2VzcygpOworK30KKysKKytlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnF1
ZXJ5U3VyZmFjZVBvaW50ZXJBTkdMRShFR0xpbnQgYXR0cmlidXRlLCB2b2lkICoqdmFsdWUpCisr
eworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2Vzcygp
OworK30KKysKKytlZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OmJpbmRUZXhJbWFnZShj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKQorK3sKKysKKysgICAg
YW5nbGU6OlJlc3VsdCByZXMgPSBjcmVhdGVCYWNraW5nVGV4dHVyZShjb250ZXh0KTsKKysgICAg
aWYgKHJlcyA9PSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkKKysgICAgICAgIHJldHVybiBlZ2w6
Ok5vRXJyb3IoKTsKKysgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQWNjZXNz
KCk7CisrfQorKworK2VnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZU10bDo6cmVsZWFzZVRleElt
YWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgYnVmZmVyKQorK3sKKysgICAg
Ly8gVGhpcyB3aWxsIG5lZWQgaW1wbGVtZW50YXRpb24KKysgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKysgICAgaWYgKGNvbnRleHRNdGwtPmZsdXNo
KGNvbnRleHQpID09IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKQorKyAgICB7CisrICAgICAgICBt
SU9TdXJmYWNlVGV4dHVyZUNyZWF0ZWQgPSBmYWxzZTsKKysgICAgICAgIHJldHVybiBlZ2w6Ok5v
RXJyb3IoKTsKKysgICAgfQorKyAgICByZXR1cm4gZWdsOjpFZ2xCYWRBY2Nlc3MoKTsKKyt9Cisr
CisrZWdsOjpFcnJvciBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRTeW5jVmFsdWVzKEVHTHVpbnQ2
NEtIUiAqdXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFR0x1aW50NjRLSFIgKm1zYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRUdMdWludDY0S0hSICpzYmMpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7
CisrICAgIHJldHVybiBlZ2w6OkVnbEJhZEFjY2VzcygpOworK30KKysKKytlZ2w6OkVycm9yIElP
U3VyZmFjZVN1cmZhY2VNdGw6OmdldE1zY1JhdGUoRUdMaW50ICpudW1lcmF0b3IsIEVHTGludCAq
ZGVub21pbmF0b3IpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrICAgIHJldHVybiBlZ2w6
OkVnbEJhZEFjY2VzcygpOworK30KKysKKyt2b2lkIElPU3VyZmFjZVN1cmZhY2VNdGw6OnNldFN3
YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7Cisr
fQorKworK3ZvaWQgSU9TdXJmYWNlU3VyZmFjZU10bDo6c2V0Rml4ZWRXaWR0aChFR0xpbnQgd2lk
dGgpCisreworKyAgICBVTklNUExFTUVOVEVEKCk7CisrfQorKworK3ZvaWQgSU9TdXJmYWNlU3Vy
ZmFjZU10bDo6c2V0Rml4ZWRIZWlnaHQoRUdMaW50IGhlaWdodCkKKyt7CisrICAgIFVOSU1QTEVN
RU5URUQoKTsKKyt9CisrCisrLy8gd2lkdGggYW5kIGhlaWdodCBjYW4gY2hhbmdlIHdpdGggY2xp
ZW50IHdpbmRvdyByZXNpemluZworK0VHTGludCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpnZXRXaWR0
aCgpIGNvbnN0CisreworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RUdMaW50PihtV2lkdGgpOwor
K30KKysKKytFR0xpbnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0SGVpZ2h0KCkgY29uc3QKKyt7
CisrICAgIHJldHVybiBzdGF0aWNfY2FzdDxFR0xpbnQ+KG1IZWlnaHQpOworK30KKysKKytFR0xp
bnQgSU9TdXJmYWNlU3VyZmFjZU10bDo6aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCkgY29uc3QK
Kyt7CisrICAgIHJldHVybiBFR0xfRkFMU0U7CisrfQorKworK0VHTGludCBJT1N1cmZhY2VTdXJm
YWNlTXRsOjpnZXRTd2FwQmVoYXZpb3IoKSBjb25zdAorK3sKKysgICAgcmV0dXJuIEVHTF9CVUZG
RVJfREVTVFJPWUVEOworK30KKysKKythbmdsZTo6UmVzdWx0IElPU3VyZmFjZVN1cmZhY2VNdGw6
OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoCisrICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250
ZXh0LAorKyAgICBHTGVudW0gYmluZGluZywKKysgICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmlt
YWdlSW5kZXgsCisrICAgIEdMc2l6ZWkgc2FtcGxlcywKKysgICAgRnJhbWVidWZmZXJBdHRhY2ht
ZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpCisreworKyAgICBBTkdMRV9UUlkoZW5zdXJlVGV4dHVy
ZUNyZWF0ZWQoY29udGV4dCkpOworKyAgICAqcnRPdXQgPSAmbVJlbmRlclRhcmdldDsKKysgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKythbmdsZTo6UmVzdWx0IElP
U3VyZmFjZVN1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LCBib29sICpuZXdEcmF3YWJsZU91dCkKKyt7CisrICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9CisrYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VT
dXJmYWNlTXRsOjplbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6Q29udGV4
dCAqY29udGV4dCkKKyt7CisrICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9
CisrCisrYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjpjcmVhdGVCYWNraW5nVGV4
dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7CisrICAgIG10bDo6VGV4dHVyZVJl
ZiBtVGVtcG9yYXJ5U3VyZmFjZVJlZjsKKysgICAgQU5HTEVfVFJZKGNyZWF0ZVRleHR1cmUoY29u
dGV4dCwgbUZvcm1hdCwgbVdpZHRoLCBtSGVpZ2h0LCBmYWxzZSwgJm1UZW1wb3JhcnlTdXJmYWNl
UmVmKSk7CisrICAgIC8vIENyZWF0ZSB0ZXh0dXJlIHZpZXcgYXJvdW5kIHRoZSBiYXNlIGZvcm1h
dCBvZiB0aGUgdGV4dHVyZS4KKysgICAgbUlPU3VyZmFjZVRleHR1cmUgPQorKyAgICAgICAgbVRl
bXBvcmFyeVN1cmZhY2VSZWYtPmNyZWF0ZVZpZXdXaXRoRGlmZmVyZW50Rm9ybWF0KE1UTFBpeGVs
Rm9ybWF0QkdSQThVbm9ybSk7CisrICAgIG1SZW5kZXJUYXJnZXQuc2V0KG1JT1N1cmZhY2VUZXh0
dXJlLCBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWwsIDAsIG1JbnRlcm5hbEZvcm1hdCk7CisrICAg
IG1JT1N1cmZhY2VUZXh0dXJlQ3JlYXRlZCA9IHRydWU7CisrICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRs
OjplbnN1cmVUZXh0dXJlQ3JlYXRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7Cisr
ICAgIGlmICghbUlPU3VyZmFjZVRleHR1cmVDcmVhdGVkKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gY3JlYXRlQmFja2luZ1RleHR1cmUoY29udGV4dCk7CisrICAgIH0KKysgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworK30KKysKKyttdGw6OlRleHR1cmVSZWYgSU9TdXJmYWNl
U3VyZmFjZU10bDo6Z2V0VGV4dHVyZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyt7Cisr
ICAgIGlmIChlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb250ZXh0KSA9PSBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZSkKKysgICAgeworKyAgICAgICAgcmV0dXJuIG1JT1N1cmZhY2VUZXh0
dXJlOworKyAgICB9CisrICAgIHJldHVybiBudWxscHRyOworK30KKysKKythbmdsZTo6UmVzdWx0
IElPU3VyZmFjZVN1cmZhY2VNdGw6OmNyZWF0ZVRleHR1cmUoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVuZGVyVGFy
Z2V0T25seSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpUZXh0dXJlUmVmICp0ZXh0dXJlT3V0KQorK3sKKysgICAgQ29udGV4dE10bCAqY29u
dGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKysgICAgQU5HTEVfVFJZKG10bDo6VGV4
dHVyZTo6TWFrZUlPU3VyZmFjZVRleHR1cmUoY29udGV4dE10bCwgZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBtSU9TdXJmYWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtUGxhbmUsIHRleHR1cmVPdXQpKTsKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOworK30KKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1Byb2dyYW1NdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFt
TXRsLmgKK2luZGV4IDM4OWVjZTcuLmViOWJiMDEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvUHJvZ3JhbU10bC5oCitAQCAtMjAsMTIgKzIwLDEzIEBACisgI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91dGlscy5oIgorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfYnVmZmVyX3Bvb2wuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgiCistI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisrI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIgorICNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5oIgorIAorIG5hbWVzcGFjZSByeAorIHsK
KysjZGVmaW5lIFNIQURFUl9FTlRSWV9OQU1FIEAibWFpbjAiCisgY2xhc3MgQ29udGV4dE10bDsK
KyAKKyBzdHJ1Y3QgUHJvZ3JhbUFyZ3VtZW50QnVmZmVyRW5jb2Rlck10bAorQEAgLTEzNCw2ICsx
MzUsMTAgQEAgY2xhc3MgUHJvZ3JhbU10bCA6IHB1YmxpYyBQcm9ncmFtSW1wbCwgcHVibGljIG10
bDo6UmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemUKKyAgICAgYm9vbCBoYXNTcGVjaWFsaXpl
ZFNoYWRlcihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZyZW5kZXJQaXBlbGluZURl
c2MpIG92ZXJyaWRlOworIAorKyAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZU1zbFNoYWRlckxpYiht
dGw6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkTXNs
SW5mbyk7CisgICAgIC8vIENhbGxzIHRoaXMgYmVmb3JlIGRyYXdpbmcsIGNoYW5nZWRQaXBlbGlu
ZURlc2MgaXMgcGFzc2VkIHdoZW4gdmVydGV4IGF0dHJpYnV0ZXMgZGVzYyBhbmQvb3IKKyAgICAg
Ly8gc2hhZGVyIHByb2dyYW0gY2hhbmdlZC4KKyAgICAgYW5nbGU6OlJlc3VsdCBzZXR1cERyYXco
Y29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwKK0BAIC0xNDEsNyArMTQ2LDEyIEBAIGNsYXNz
IFByb2dyYW1NdGwgOiBwdWJsaWMgUHJvZ3JhbUltcGwsIHB1YmxpYyBtdGw6OlJlbmRlclBpcGVs
aW5lQ2FjaGVTcGVjaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10
bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcGlwZWxpbmVEZXNjQ2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBmb3JjZVRleHR1cmVzU2V0dGluZywKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5KTsKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdyk7CisrCisrICAgIHN0ZDo6c3RyaW5n
IGdldFhmYk1zbFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1YZmJNc2xTb3VyY2U7IH0KKysKKysg
ICAgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlICptTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hl
OworIAorICAgcHJpdmF0ZToKKyAgICAgdGVtcGxhdGUgPGludCBjb2xzLCBpbnQgcm93cz4KK0BA
IC0xNTYsNiArMTY2LDExIEBAIGNsYXNzIFByb2dyYW1NdGwgOiBwdWJsaWMgUHJvZ3JhbUltcGws
IHB1YmxpYyBtdGw6OlJlbmRlclBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplCisgICAgIHZvaWQgc2V0
VW5pZm9ybUltcGwoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IFQgKnYsIEdM
ZW51bSBlbnRyeVBvaW50VHlwZSk7CisgCisgICAgIGFuZ2xlOjpSZXN1bHQgaW5pdERlZmF1bHRV
bmlmb3JtQmxvY2tzKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQpOworKyAgICBhbmdsZTo6
UmVzdWx0IHJlc2l6ZURlZmF1bHRVbmlmb3JtQmxvY2tzTWVtb3J5KGNvbnN0IGdsOjpDb250ZXh0
ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzaXplX3Q+ICZyZXF1aXJlZEJ1ZmZlclNpemUp
OworKyAgICB2b2lkIHNhdmVEZWZhdWx0VW5pZm9ybUJsb2Nrc0luZm8oZ2w6OkJpbmFyeU91dHB1
dFN0cmVhbSAqc3RyZWFtKTsKKysgICAgYW5nbGU6OlJlc3VsdCBsb2FkRGVmYXVsdFVuaWZvcm1C
bG9ja3NJbmZvKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0
cmVhbSk7CisgCisgICAgIGFuZ2xlOjpSZXN1bHQgY29tbWl0VW5pZm9ybXMoQ29udGV4dE10bCAq
Y29udGV4dCwgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2Rlcik7CisgICAgIGFu
Z2xlOjpSZXN1bHQgdXBkYXRlVGV4dHVyZXMoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCwK
K0BAIC0xNzcsMjEgKzE5MiwzMyBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1J
bXBsLCBwdWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQorICAgICAgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxvY2tzLAorICAgICAgICAg
Z2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSk7CisgCistICAgIGFuZ2xlOjpSZXN1bHQgdXBkYXRl
WGZiQnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0LAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxpbmVE
ZXNjICZwaXBlbGluZURlc2MpOworLQorICAgICB2b2lkIHJlc2V0KENvbnRleHRNdGwgKmNvbnRl
eHQpOworIAorKyAgICB2b2lkIHNhdmVUcmFuc2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5T3V0cHV0
U3RyZWFtICpzdHJlYW0pOworKyAgICB2b2lkIGxvYWRUcmFuc2xhdGVkU2hhZGVycyhnbDo6Qmlu
YXJ5SW5wdXRTdHJlYW0gKnN0cmVhbSk7CisrCisrICAgIHZvaWQgc2F2ZVNoYWRlckludGVybmFs
SW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pOworKyAgICB2b2lkIGxvYWRTaGFk
ZXJJbnRlcm5hbEluZm8oZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0pOworKworKyNpZiBB
TkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysKKysgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbFNw
aXJ2KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2VzLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cpOwor
KyNlbmRpZgorKworKyAgICBhbmdsZTo6UmVzdWx0IGxpbmtJbXBsRGlyZWN0KGNvbnN0IGdsOjpD
b250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7CisrCisgICAgIHZvaWQg
bGlua1Jlc291cmNlcyhjb25zdCBnbDo6UHJvZ3JhbUxpbmtlZFJlc291cmNlcyAmcmVzb3VyY2Vz
KTsKKyAgICAgYW5nbGU6OlJlc3VsdCBsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2Vk
UmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6Oklu
Zm9Mb2cgJmluZm9Mb2cpOworIAorLSAgICBhbmdsZTo6UmVzdWx0IGNyZWF0ZU1zbFNoYWRlckxp
YihtdGw6OkNvbnRleHQgKmNvbnRleHQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nLAorLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtdGw6OlRyYW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVk
TXNsSW5mbyk7CisrICAgIGFuZ2xlOjpSZXN1bHQgbGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnN0
IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZyk7CisgCisgICAg
IC8vIFN0YXRlIGZvciB0aGUgZGVmYXVsdCB1bmlmb3JtIGJsb2Nrcy4KKyAgICAgc3RydWN0IERl
ZmF1bHRVbmlmb3JtQmxvY2sgZmluYWwgOiBwcml2YXRlIGFuZ2xlOjpOb25Db3B5YWJsZQorQEAg
LTIzMCw2ICsyNTcsNyBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBw
dWJsaWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQorICAgICAvLyBDYWNoZWQg
cmVmZXJlbmNlcyBvZiBjdXJyZW50IHNoYWRlciB2YXJpYW50cy4KKyAgICAgZ2w6OlNoYWRlck1h
cDxQcm9ncmFtU2hhZGVyT2JqVmFyaWFudE10bCAqPiBtQ3VycmVudFNoYWRlclZhcmlhbnRzOwor
IAorKyAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgbVZhcmlhYmxlSW5mb01h
cDsKKyAgICAgLy8gU2NyYXRjaCBkYXRhOgorICAgICAvLyBMZWdhbGl6ZWQgYnVmZmVycyBhbmQg
dGhlaXIgb2Zmc2V0cy4gRm9yIGV4YW1wbGUsIHVuaWZvcm0gYnVmZmVyJ3Mgb2Zmc2V0PTEgaXMg
bm90IGEgdmFsaWQKKyAgICAgLy8gb2Zmc2V0LCBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBsZWdh
bCBvZmZzZXQgYW5kIHRoZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoaXMgYXJyYXkuCitAQCAtMjM4
LDcgKzI2NiwxMCBAQCBjbGFzcyBQcm9ncmFtTXRsIDogcHVibGljIFByb2dyYW1JbXBsLCBwdWJs
aWMgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6ZQorICAgICAvLyBpbnRvIGFuIGFy
Z3VtZW50IGJ1ZmZlci4KKyAgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IG1Bcmd1bWVudEJ1ZmZl
clJlbmRlclN0YWdlVXNhZ2VzOworIAorKyAgICB1aW50MzJfdCBtU2hhZG93Q29tcGFyZU1vZGVz
W210bDo6a01heFNoYWRlclNhbXBsZXJzXSA9IHswfTsKKysKKyAgICAgbXRsOjpSZW5kZXJQaXBl
bGluZUNhY2hlIG1NZXRhbFJlbmRlclBpcGVsaW5lQ2FjaGU7CisrICAgIHN0ZDo6c3RyaW5nIG1Y
ZmJNc2xTb3VyY2U7CisgfTsKKyAKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUHJvZ3JhbU10bC5tbSBiL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCitpbmRleCA1MGUyZjYzLi42ZGE4NjY0IDEwMDY0
NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dyYW1NdGwubW0KKysrKyBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLm1tCitAQCAtMTQsMjUgKzE0
LDMxIEBACisgI2luY2x1ZGUgPHNzdHJlYW0+CisgCisgI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5o
IgorKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbnZpcm9u
bWVudFZhcmlhYmxlLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyAjaW5jbHVk
ZSAibGliQU5HTEUvUHJvZ3JhbUxpbmtlZFJlc291cmNlcy5oIgorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9EaXNwbGF5TXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1
cmVNdGwuaCIKKy0jaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdf
dXRpbHMuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdf
bXRsX3V0aWxzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91dGls
cy5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9yZW5kZXJlcl91dGlscy5oIgorIAor
KyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysjICAgIGluY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgiCisrI2VuZGlmCisrCisgbmFtZXNwYWNl
IHJ4CisgeworIAorIG5hbWVzcGFjZQorIHsKKy0KKy0jZGVmaW5lIFNIQURFUl9FTlRSWV9OQU1F
IEAibWFpbjAiCisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorIGNvbnN0ZXhwciBjaGFy
IGtTcGlydkNyb3NzU3BlY0NvbnN0U3VmZml4W10gPSAiX3RtcCI7CistCisrI2VuZGlmCisgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgY2xhc3MgU2NvcGVkQXV0b0NsZWFyVmVjdG9yCisgeworQEAg
LTc4LDYgKzg0LDcgQEAgdm9pZCBJbml0RGVmYXVsdFVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnZl
Y3RvcjxzaDo6VW5pZm9ybT4gJnVuaWZvcm1zLAorIAorICAgICBzaXplX3QgYmxvY2tTaXplID0g
YmxvY2tFbmNvZGVyLmdldEN1cnJlbnRPZmZzZXQoKTsKKyAKKysgICAgLy8gVE9ETyhqbWFkaWxs
KTogSSB0aGluayB3ZSBzdGlsbCBuZWVkIGEgdmFsaWQgYmxvY2sgZm9yIHRoZSBwaXBlbGluZSBl
dmVuIGlmIHplcm8gc2l6ZWQuCisgICAgIGlmIChibG9ja1NpemUgPT0gMCkKKyAgICAgeworICAg
ICAgICAgKmJsb2NrU2l6ZU91dCA9IDA7CitAQCAtMjI4LDExICsyMzUsMTYgQEAgdm9pZCBJbml0
QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAKKyBQcm9ncmFt
TXRsOjpEZWZhdWx0VW5pZm9ybUJsb2NrOjp+RGVmYXVsdFVuaWZvcm1CbG9jaygpID0gZGVmYXVs
dDsKKyAKKy1Qcm9ncmFtTXRsOjpQcm9ncmFtTXRsKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnN0
YXRlKQorLSAgICA6IFByb2dyYW1JbXBsKHN0YXRlKSwgbU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNo
ZSh0aGlzKQorLXt9CisrUHJvZ3JhbU10bDo6UHJvZ3JhbU10bChjb25zdCBnbDo6UHJvZ3JhbVN0
YXRlICZzdGF0ZSkgOiBQcm9ncmFtSW1wbChzdGF0ZSksCisrICAgIG1NZXRhbFJlbmRlclBpcGVs
aW5lQ2FjaGUodGhpcykKKyt7CisrICAgIG1NZXRhbFhmYlJlbmRlclBpcGVsaW5lQ2FjaGUgPSBu
ZXcgbXRsOjpSZW5kZXJQaXBlbGluZUNhY2hlKCk7CisrfQorIAorLVByb2dyYW1NdGw6On5Qcm9n
cmFtTXRsKCkge30KKytQcm9ncmFtTXRsOjp+UHJvZ3JhbU10bCgpCisreworKyAgICBkZWxldGUg
bU1ldGFsWGZiUmVuZGVyUGlwZWxpbmVDYWNoZTsKKyt9CisgCisgdm9pZCBQcm9ncmFtTXRsOjpk
ZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorIHsKK0BAIC0yNjIsMjUgKzI3NCw0
NiBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICB7CisgICAgICAgICB2YXIucmVzZXQoY29udGV4dCk7CisgICAgIH0KKy0KKyAgICAg
bU1ldGFsUmVuZGVyUGlwZWxpbmVDYWNoZS5jbGVhcigpOworKyAgICBtTWV0YWxYZmJSZW5kZXJQ
aXBlbGluZUNhY2hlLT5jbGVhcigpOworK30KKysKKyt2b2lkIFByb2dyYW1NdGw6OnNhdmVUcmFu
c2xhdGVkU2hhZGVycyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisreworKyAgICAv
LyBXcml0ZSBvdXQgc2hhZGVyIHNvdXJjZXMgZm9yIGFsbCBzaGFkZXIgdHlwZXMKKysgICAgZm9y
IChjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkp
CisrICAgIHsKKysgICAgICAgIHN0cmVhbS0+d3JpdGVTdHJpbmcobU1zbFNoYWRlclRyYW5zbGF0
ZUluZm9bc2hhZGVyVHlwZV0ubWV0YWxTaGFkZXJTb3VyY2UpOworKyAgICB9CisrICAgIHN0cmVh
bS0+d3JpdGVTdHJpbmcobVhmYk1zbFNvdXJjZSk7CisrfQorKworK3ZvaWQgUHJvZ3JhbU10bDo6
bG9hZFRyYW5zbGF0ZWRTaGFkZXJzKGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtKQorK3sK
KysgICAgLy8gUmVhZCBpbiBzaGFkZXIgc291cmNlcyBmb3IgYWxsIHNoYWRlciB0eXBlcworKyAg
ICBmb3IgKGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlw
ZXMoKSkKKysgICAgeworKyAgICAgICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlw
ZV0ubWV0YWxTaGFkZXJTb3VyY2UgPSBzdHJlYW0tPnJlYWRTdHJpbmcoKTsKKysgICAgfQorKyAg
ICBtWGZiTXNsU291cmNlID0gc3RyZWFtLT5yZWFkU3RyaW5nKCk7CisgfQorIAorIHN0ZDo6dW5p
cXVlX3B0cjxyeDo6TGlua0V2ZW50PiBQcm9ncmFtTXRsOjpsb2FkKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpCaW5hcnlJbnB1dFN0cmVhbSAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZpbmZvTG9nKQorIHsKKy0g
ICAgLy8gTk9URShocWxlKTogc3VwcG9ydCBiaW5hcnkgc2hhZGVyCistICAgIFVOSU1QTEVNRU5U
RUQoKTsKKy0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8TGlua0V2ZW50RG9uZT4oYW5nbGU6
OlJlc3VsdDo6U3RvcCk7CisrCisrICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPExpbmtFdmVu
dERvbmU+KGxpbmtUcmFuc2xhdGVkU2hhZGVycyhjb250ZXh0LCBzdHJlYW0sIGluZm9Mb2cpKTsK
KyB9CisgCisgdm9pZCBQcm9ncmFtTXRsOjpzYXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LCBnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisgeworLSAgICAvLyBOT1RFKGhxbGUp
OiBzdXBwb3J0IGJpbmFyeSBzaGFkZXIKKy0gICAgVU5JTVBMRU1FTlRFRCgpOworKyAgICBzYXZl
VHJhbnNsYXRlZFNoYWRlcnMoc3RyZWFtKTsKKysgICAgc2F2ZVNoYWRlckludGVybmFsSW5mbyhz
dHJlYW0pOworKyAgICBzYXZlRGVmYXVsdFVuaWZvcm1CbG9ja3NJbmZvKHN0cmVhbSk7CisgfQor
IAorKworIHZvaWQgUHJvZ3JhbU10bDo6c2V0QmluYXJ5UmV0cmlldmFibGVIaW50KGJvb2wgcmV0
cmlldmFibGUpCisgeworICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMjk0LDcgKzMyNyw3IEBA
IHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisg
c3RkOjp1bmlxdWVfcHRyPExpbmtFdmVudD4gUHJvZ3JhbU10bDo6bGluayhjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xv
ZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpQcm9ncmFtTWVyZ2VkVmFyeWluZ3MgJiAvKiBtZXJnZWRWYXJ5aW5ncyAqLykKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTWVy
Z2VkVmFyeWluZ3MgJm1lcmdlZFZhcnlpbmdzKQorIHsKKyAgICAgLy8gTGluayByZXNvdXJjZXMg
YmVmb3JlIGNhbGxpbmcgR2V0U2hhZGVyU291cmNlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSByZWFk
eSBmb3IgdGhlIHNldC9iaW5kaW5nCisgICAgIC8vIGFzc2lnbm1lbnQgZG9uZSBpbiB0aGF0IGZ1
bmN0aW9uLgorQEAgLTMwNCw3ICszMzcsOCBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29k
ZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxM
aW5rRXZlbnREb25lPihsaW5rSW1wbChjb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpKTsKKyB9
CisgCistYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjpsaW5rSW1wbChjb25zdCBnbDo6Q29udGV4
dCAqZ2xDb250ZXh0LAorKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKythbmdsZTo6UmVz
dWx0IFByb2dyYW1NdGw6OmxpbmtJbXBsU3BpcnYoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFt
TGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykKKyB7CitAQCAtMzU1LDYgKzM4OSw3NSBAQCB2
b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorIAor
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorKyNlbmRpZgorKworK2Fu
Z2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua0ltcGxEaXJlY3QoY29uc3QgZ2w6OkNvbnRleHQg
KmdsQ29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGds
OjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6SW5mb0xvZyAmaW5mb0xvZykKKyt7CisrICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKysKKysgICAgcmVzZXQo
Y29udGV4dE10bCk7CisrICAgIEFOR0xFX1RSWShpbml0RGVmYXVsdFVuaWZvcm1CbG9ja3MoZ2xD
b250ZXh0KSk7CisrICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCB2YXJpYWJs
ZUluZm9NYXA7CisrCisrICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+IHNoYWRlclNvdXJj
ZXM7CisrICAgIGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+IHRyYW5zbGF0ZWRNc2xTaGFkZXJz
OworKyAgICBtdGw6Ok1TTEdldFNoYWRlclNvdXJjZShtU3RhdGUsIHJlc291cmNlcywgJnNoYWRl
clNvdXJjZXMsICZ2YXJpYWJsZUluZm9NYXApOworKworKyAgICBBTkdMRV9UUlkobXRsOjpHbHNs
YW5nR2V0TVNMKGdsQ29udGV4dCwgbVN0YXRlLCBjb250ZXh0TXRsLT5nZXRDYXBzKCksIHNoYWRl
clNvdXJjZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVJbmZv
TWFwLCAmbU1zbFNoYWRlclRyYW5zbGF0ZUluZm8sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnRyYW5zbGF0ZWRNc2xTaGFkZXJzLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1TdGF0ZS5nZXRFeGVjdXRhYmxlKCkuZ2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJDb3VudCgpKSk7CisrCisrCisrICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6
IGdsOjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIC8vIENyZWF0ZSBh
Y3R1YWwgTWV0YWwgc2hhZGVyCisrICAgICAgICBBTkdMRV9UUlkoCisrICAgICAgICAgICAgY3Jl
YXRlTXNsU2hhZGVyTGliKGNvbnRleHRNdGwsIHNoYWRlclR5cGUsIGluZm9Mb2csICZtTXNsU2hh
ZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXSkpOworKyAgICB9CisrICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjps
aW5rSW1wbChjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291
cmNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJbmZvTG9nICZp
bmZvTG9nKQorK3sKKysgICAgLy8gVE9ETzogV2UgbmVlZCBzb21lIHdheSBvZiB0b2dnbGluZyB0
aGlzLgorKyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysgICAgaWYgKHNoOjpyZWFkQm9v
bEVudlZhcigiQU5HTEVfR0VOX01UTF9XSVRIX1NQSVJWIikpCisrICAgIHsKKysgICAgICAgcmV0
dXJuIGxpbmtJbXBsU3BpcnYoZ2xDb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpOworKyAgICB9
CisrICAgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgICByZXR1cm4gbGlua0ltcGxEaXJl
Y3QoZ2xDb250ZXh0LCByZXNvdXJjZXMsIGluZm9Mb2cpOworKyAgICB9CisrfQorKworKworK2Fu
Z2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bGlua1RyYW5zbGF0ZWRTaGFkZXJzKGNvbnN0IGdsOjpD
b250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0sCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkluZm9Mb2cgJmluZm9Mb2cp
CisreworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGdsQ29udGV4
dCk7CisrICAgIC8vIE5PVEUoaHFsZSk6IE5vIHRyYW5zZm9ybSBmZWVkYmFja3MgZm9yIG5vdywg
c2luY2Ugd2Ugb25seSBzdXBwb3J0IEVTIDIuMCBhdG0KKysKKysgICAgcmVzZXQoY29udGV4dE10
bCk7CisrCisrICAgIGxvYWRUcmFuc2xhdGVkU2hhZGVycyhzdHJlYW0pOworKyAgICBsb2FkU2hh
ZGVySW50ZXJuYWxJbmZvKHN0cmVhbSk7CisrICAgIEFOR0xFX1RSWShsb2FkRGVmYXVsdFVuaWZv
cm1CbG9ja3NJbmZvKGdsQ29udGV4dCwgc3RyZWFtKSk7CisrCisrICAgIEFOR0xFX1RSWShjcmVh
dGVNc2xTaGFkZXJMaWIoY29udGV4dE10bCwgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwgaW5mb0xv
ZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbU1zbFNoYWRlclRyYW5zbGF0ZUlu
Zm9bZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0pKTsKKysgICAgQU5HTEVfVFJZKGNyZWF0ZU1zbFNo
YWRlckxpYihjb250ZXh0TXRsLCBnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQsIGluZm9Mb2csCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW2ds
OjpTaGFkZXJUeXBlOjpGcmFnbWVudF0pKTsKKysKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworK30KKyAKKyB2b2lkIFByb2dyYW1NdGw6OmxpbmtSZXNvdXJjZXMoY29uc3Qg
Z2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcykKKyB7CitAQCAtMzY2LDggKzQ2
OSw2IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRl
eHQsCisgCisgYW5nbGU6OlJlc3VsdCBQcm9ncmFtTXRsOjppbml0RGVmYXVsdFVuaWZvcm1CbG9j
a3MoY29uc3QgZ2w6OkNvbnRleHQgKmdsQ29udGV4dCkKKyB7CistICAgIENvbnRleHRNdGwgKmNv
bnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKy0KKyAgICAgLy8gUHJvY2VzcyB2
ZXJ0ZXggYW5kIGZyYWdtZW50IHVuaWZvcm1zIGludG8gc3RkMTQwIHBhY2tpbmcuCisgICAgIGds
OjpTaGFkZXJNYXA8c2g6OkJsb2NrTGF5b3V0TWFwPiBsYXlvdXRNYXA7CisgICAgIGdsOjpTaGFk
ZXJNYXA8c2l6ZV90PiByZXF1aXJlZEJ1ZmZlclNpemU7CitAQCAtNDI2LDYgKzUyNywxNSBAQCB2
b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgfQorICAgICB9CisgCisrICAgIHJldHVybiByZXNpemVEZWZhdWx0VW5pZm9ybUJsb2Nr
c01lbW9yeShnbENvbnRleHQsIHJlcXVpcmVkQnVmZmVyU2l6ZSk7CisrfQorKworK2FuZ2xlOjpS
ZXN1bHQgUHJvZ3JhbU10bDo6cmVzaXplRGVmYXVsdFVuaWZvcm1CbG9ja3NNZW1vcnkoCisrICAg
IGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8
c2l6ZV90PiAmcmVxdWlyZWRCdWZmZXJTaXplKQorK3sKKysgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChnbENvbnRleHQpOworKworICAgICBmb3IgKGdsOjpTaGFkZXJU
eXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsR0xFUzJTaGFkZXJUeXBlcygpKQorICAgICB7CisgICAg
ICAgICBpZiAocmVxdWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID4gMCkKK0BAIC00NTMsNiAr
NTYzLDkgQEAgdm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlk
PE1UTEZ1bmN0aW9uPiAqc2hhZGVyT3V0KQorIHsKKyAgICAgc3RhdGljX2Fzc2VydChZRVMgPT0g
MSwgIllFUyBzaG91bGQgaGF2ZSB2YWx1ZSBvZiAxIik7CisrICAgICNpZiBBTkdMRV9FTkFCTEVf
TUVUQUxfU1BJUlYKKysgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHVzZVNwaXJ2ID0gc2g6OnJl
YWRCb29sRW52VmFyKCJBTkdMRV9HRU5fTVRMX1dJVEhfU1BJUlYiKTsKKysgICAgI2VuZGlmCisg
CisgICAgIG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gKnRyYW5zbGF0ZWRNc2xJbmZvID0gJm1N
c2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdOworICAgICBQcm9ncmFtU2hhZGVyT2Jq
VmFyaWFudE10bCAqc2hhZGVyVmFyaWFudDsKK0BAIC00OTAsOSArNjAzLDIyIEBAIHZvaWQgSW5p
dEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAg
ICAgQk9PTCBlbXVsYXRlRGlzY2FyZCA9IHJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9u
VHlwZSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlJlbmRlclBp
cGVsaW5lUmFzdGVyaXphdGlvbjo6RW11bGF0ZWREaXNjYXJkOworIAorLSAgICAgICAgICAgIE5T
U3RyaW5nICpkaXNjYXJkRW5hYmxlZFN0ciA9CistICAgICAgICAgICAgICAgIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJXMlcyIsIHNoOjptdGw6OmtSYXN0ZXJpemVyRGlzY2FyZEVuYWJs
ZWRDb25zdE5hbWUsCisrICAgICAgICAgICAgTlNTdHJpbmcgKmRpc2NhcmRFbmFibGVkU3RyOwor
KyNpZiBBTkdMRV9FTkFCTEVfTUVUQUxfU1BJUlYKKysgICAgICAgICAgICBpZiAodXNlU3BpcnYp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBkaXNjYXJkRW5hYmxlZFN0ciA9IFtO
U1N0cmluZworKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nV2l0aEZvcm1hdDpAIiVzJXMiLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaDo6VHJhbnNsYXRvck1ldGFs
OjpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga1NwaXJ2Q3Jvc3NTcGVjQ29uc3RTdWZmaXhdOwor
KyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgICAgICAg
eworKyAgICAgICAgICAgICAgICBkaXNjYXJkRW5hYmxlZFN0ciA9CisrICAgICAgICAgICAgICAg
ICAgICBbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6c2g6OlRyYW5zbGF0b3JNZXRhbERp
cmVjdDo6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdldFJhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZENvbnN0TmFtZSgpXTsKKysgICAg
ICAgICAgICB9CisgCisgICAgICAgICAgICAgZnVuY0NvbnN0YW50cyA9IFtbTVRMRnVuY3Rpb25D
b25zdGFudFZhbHVlcyBhbGxvY10gaW5pdF07CisgICAgICAgICAgICAgW2Z1bmNDb25zdGFudHMg
c2V0Q29uc3RhbnRWYWx1ZTomZW11bGF0ZURpc2NhcmQKK0BAIC01MTUsOSArNjQxLDIyIEBAIHZv
aWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgCisg
ICAgICAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorICAgICAgICAgeworLSAgICAgICAgICAgIE5T
U3RyaW5nICpjb3ZlcmFnZU1hc2tFbmFibGVkU3RyID0KKy0gICAgICAgICAgICAgICAgW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyVzIiwgc2g6Om10bDo6a0NvdmVyYWdlTWFza0VuYWJs
ZWRDb25zdE5hbWUsCisrICAgICAgICAgICAgTlNTdHJpbmcgKmNvdmVyYWdlTWFza0VuYWJsZWRT
dHI7CisrI2lmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorKyAgICAgICAgICAgIGlmICh1c2VT
cGlydikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGNvdmVyYWdlTWFza0VuYWJs
ZWRTdHIgPSBbTlNTdHJpbmcKKysgICAgICAgICAgICAgICAgICAgIHN0cmluZ1dpdGhGb3JtYXQ6
QCIlcyVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g6OlRyYW5z
bGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU3BpcnZDcm9zc1NwZWNDb25zdFN1ZmZpeF07
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysjZW5kaWYKKysgICAgICAgICAg
ICB7CisrICAgICAgICAgICAgICAgIGNvdmVyYWdlTWFza0VuYWJsZWRTdHIgPQorKyAgICAgICAg
ICAgICAgICAgICAgW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOnNoOjpUcmFuc2xhdG9y
TWV0YWxEaXJlY3Q6OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCldOworKyAgICAg
ICAgICAgIH0KKyAKKyAgICAgICAgICAgICBmdW5jQ29uc3RhbnRzID0gW1tNVExGdW5jdGlvbkNv
bnN0YW50VmFsdWVzIGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgICBbZnVuY0NvbnN0YW50cyBz
ZXRDb25zdGFudFZhbHVlOiZlbXVsYXRlQ292ZXJhZ2VNYXNrCitAQCAtNTU1LDYgKzY5NCw3IEBA
IHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisg
CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisrCisgYm9vbCBQcm9n
cmFtTXRsOjpoYXNTcGVjaWFsaXplZFNoYWRlcihnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXRsOjpSZW5kZXJQ
aXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykKKyB7CitAQCAtNTkyLDYgKzczMiw5MyBA
QCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAor
ICAgICB9CisgfQorIAorK3ZvaWQgUHJvZ3JhbU10bDo6c2F2ZURlZmF1bHRVbmlmb3JtQmxvY2tz
SW5mbyhnbDo6QmluYXJ5T3V0cHV0U3RyZWFtICpzdHJlYW0pCisreworKyAgICAvLyBTZXJpYWxp
emVzIHRoZSB1bmlmb3JtTGF5b3V0IGRhdGEgb2YgbURlZmF1bHRVbmlmb3JtQmxvY2tzCisrICAg
IGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFkZXJUeXBlcygpKQor
KyAgICB7CisrICAgICAgICBjb25zdCBzaXplX3QgdW5pZm9ybUNvdW50ID0gbURlZmF1bHRVbmlm
b3JtQmxvY2tzW3NoYWRlclR5cGVdLnVuaWZvcm1MYXlvdXQuc2l6ZSgpOworKyAgICAgICAgc3Ry
ZWFtLT53cml0ZUludDxzaXplX3Q+KHVuaWZvcm1Db3VudCk7CisrICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQ291bnQ7ICsr
dW5pZm9ybUluZGV4KQorKyAgICAgICAgeworKyAgICAgICAgICAgIHNoOjpCbG9ja01lbWJlcklu
Zm8gJmJsb2NrSW5mbyA9CisrICAgICAgICAgICAgICAgIG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tz
aGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0W3VuaWZvcm1JbmRleF07CisrICAgICAgICAgICAgZ2w6
OldyaXRlQmxvY2tNZW1iZXJJbmZvKHN0cmVhbSwgYmxvY2tJbmZvKTsKKysgICAgICAgIH0KKysg
ICAgfQorKworKyAgICAvLyBTZXJpYWxpemVzIHJlcXVpcmVkIHVuaWZvcm0gYmxvY2sgbWVtb3J5
IHNpemVzCisrICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGdsOjpBbGxTaGFk
ZXJUeXBlcygpKQorKyAgICB7CisrICAgICAgICBzdHJlYW0tPndyaXRlSW50KG1EZWZhdWx0VW5p
Zm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtRGF0YS5zaXplKCkpOworKyAgICB9CisrfQor
KworK2FuZ2xlOjpSZXN1bHQgUHJvZ3JhbU10bDo6bG9hZERlZmF1bHRVbmlmb3JtQmxvY2tzSW5m
byhjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QmluYXJ5SW5wdXRTdHJlYW0gKnN0
cmVhbSkKKyt7CisrICAgIGdsOjpTaGFkZXJNYXA8c2l6ZV90PiByZXF1aXJlZEJ1ZmZlclNpemU7
CisrICAgIHJlcXVpcmVkQnVmZmVyU2l6ZS5maWxsKDApOworKworKyAgICAvLyBEZXNlcmlhbGl6
ZXMgdGhlIHVuaWZvcm1MYXlvdXQgZGF0YSBvZiBtRGVmYXVsdFVuaWZvcm1CbG9ja3MKKysgICAg
Zm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbFNoYWRlclR5cGVzKCkpCisr
ICAgIHsKKysgICAgICAgIGNvbnN0IHNpemVfdCB1bmlmb3JtQ291bnQgPSBzdHJlYW0tPnJlYWRJ
bnQ8c2l6ZV90PigpOworKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0g
MDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUNvdW50OyArK3VuaWZvcm1JbmRleCkKKysgICAgICAg
IHsKKysgICAgICAgICAgICBzaDo6QmxvY2tNZW1iZXJJbmZvIGJsb2NrSW5mbzsKKysgICAgICAg
ICAgICBnbDo6TG9hZEJsb2NrTWVtYmVySW5mbyhzdHJlYW0sICZibG9ja0luZm8pOworKyAgICAg
ICAgICAgIG1EZWZhdWx0VW5pZm9ybUJsb2Nrc1tzaGFkZXJUeXBlXS51bmlmb3JtTGF5b3V0LnB1
c2hfYmFjayhibG9ja0luZm8pOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8vIERlc2Vy
aWFsaXplcyByZXF1aXJlZCB1bmlmb3JtIGJsb2NrIG1lbW9yeSBzaXplcworKyAgICBmb3IgKGds
OjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKysgICAgewor
KyAgICAgICAgcmVxdWlyZWRCdWZmZXJTaXplW3NoYWRlclR5cGVdID0gc3RyZWFtLT5yZWFkSW50
PHNpemVfdD4oKTsKKysgICAgfQorKworKyAgICByZXR1cm4gcmVzaXplRGVmYXVsdFVuaWZvcm1C
bG9ja3NNZW1vcnkoZ2xDb250ZXh0LCByZXF1aXJlZEJ1ZmZlclNpemUpOworK30KKysKKyt2b2lk
IFByb2dyYW1NdGw6OnNhdmVTaGFkZXJJbnRlcm5hbEluZm8oZ2w6OkJpbmFyeU91dHB1dFN0cmVh
bSAqc3RyZWFtKQorK3sKKysgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6
OkFsbFNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIHN0cmVhbS0+d3JpdGVJbnQ8aW50
PihtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5oYXNVQk9Bcmd1bWVudEJ1ZmZl
cik7CisrICAgICAgICBmb3IgKGNvbnN0IG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOgor
KyAgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxT
YW1wbGVyQmluZGluZ3MpCisrICAgICAgICB7CisrICAgICAgICAgICAgc3RyZWFtLT53cml0ZUlu
dDx1aW50MzJfdD4oYmluZGluZy50ZXh0dXJlQmluZGluZyk7CisrICAgICAgICAgICAgc3RyZWFt
LT53cml0ZUludDx1aW50MzJfdD4oYmluZGluZy5zYW1wbGVyQmluZGluZyk7CisrICAgICAgICB9
CisrCisrICAgICAgICBmb3IgKHVpbnQzMl90IHVib0JpbmRpbmcgOiBtTXNsU2hhZGVyVHJhbnNs
YXRlSW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5ncykKKysgICAgICAgIHsKKysgICAg
ICAgICAgICBzdHJlYW0tPndyaXRlSW50PHVpbnQzMl90Pih1Ym9CaW5kaW5nKTsKKysgICAgICAg
IH0KKysgICAgfQorK30KKysKKyt2b2lkIFByb2dyYW1NdGw6OmxvYWRTaGFkZXJJbnRlcm5hbElu
Zm8oZ2w6OkJpbmFyeUlucHV0U3RyZWFtICpzdHJlYW0pCisreworKyAgICBmb3IgKGdsOjpTaGFk
ZXJUeXBlIHNoYWRlclR5cGUgOiBnbDo6QWxsU2hhZGVyVHlwZXMoKSkKKysgICAgeworKyAgICAg
ICAgbU1zbFNoYWRlclRyYW5zbGF0ZUluZm9bc2hhZGVyVHlwZV0uaGFzVUJPQXJndW1lbnRCdWZm
ZXIgPSBzdHJlYW0tPnJlYWRJbnQ8aW50PigpICE9IDA7CisrICAgICAgICBmb3IgKG10bDo6U2Ft
cGxlckJpbmRpbmcgJmJpbmRpbmcgOgorKyAgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRl
SW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxTYW1wbGVyQmluZGluZ3MpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgYmluZGluZy50ZXh0dXJlQmluZGluZyA9IHN0cmVhbS0+cmVhZEludDx1aW50MzJf
dD4oKTsKKysgICAgICAgICAgICBiaW5kaW5nLnNhbXBsZXJCaW5kaW5nID0gc3RyZWFtLT5yZWFk
SW50PHVpbnQzMl90PigpOworKyAgICAgICAgfQorKworKyAgICAgICAgZm9yICh1aW50MzJfdCAm
dWJvQmluZGluZyA6IG1Nc2xTaGFkZXJUcmFuc2xhdGVJbmZvW3NoYWRlclR5cGVdLmFjdHVhbFVC
T0JpbmRpbmdzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHVib0JpbmRpbmcgPSBzdHJlYW0t
PnJlYWRJbnQ8dWludDMyX3Q+KCk7CisrICAgICAgICB9CisrICAgIH0KKyt9CisrCisgR0xib29s
ZWFuIFByb2dyYW1NdGw6OnZhbGlkYXRlKGNvbnN0IGdsOjpDYXBzICZjYXBzLCBnbDo6SW5mb0xv
ZyAqaW5mb0xvZykKKyB7CisgICAgIC8vIE5vLW9wLiBUaGUgc3BlYyBpcyB2ZXJ5IHZhZ3VlIGFi
b3V0IHRoZSBiZWhhdmlvciBvZiB2YWxpZGF0aW9uLgorQEAgLTg3NywxNCArMTEwNCwyNSBAQCB2
b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG10bDo6UmVuZGVyUGlwZWxp
bmVEZXNjICZwaXBlbGluZURlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBwaXBlbGluZURlc2NDaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZm9yY2VUZXh0dXJlc1NldHRpbmcsCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCB1bmlmb3JtQnVmZmVyc0RpcnR5KQorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdW5pZm9ybUJ1ZmZlcnNEaXJ0eSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJh
dykKKyB7CisgICAgIENvbnRleHRNdGwgKmNvbnRleHQgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0
KTsKKyAgICAgaWYgKHBpcGVsaW5lRGVzY0NoYW5nZWQpCisgICAgIHsKKyAgICAgICAgIC8vIFJl
bmRlciBwaXBlbGluZSBzdGF0ZSBuZWVkcyB0byBiZSBjaGFuZ2VkCistICAgICAgICBpZDxNVExS
ZW5kZXJQaXBlbGluZVN0YXRlPiBwaXBlbGluZVN0YXRlID0KKy0gICAgICAgICAgICBtTWV0YWxS
ZW5kZXJQaXBlbGluZUNhY2hlLmdldFJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgcGlwZWxp
bmVEZXNjKTsKKysgICAgICAgIGlkPE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+IHBpcGVsaW5lU3Rh
dGUgPSBuaWw7CisrICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tEcmF3KQorKyAgICAgICAg
eworKyAgICAgICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjIHhmYlBpcGVsaW5lRGVzYyA9
IG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjKHBpcGVsaW5lRGVzYyk7CisrICAgICAgICAgICAgeGZi
UGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlICAgID0gbXRsOjpSZW5kZXJQaXBlbGluZVJh
c3Rlcml6YXRpb246OkRpc2FibGVkOworKyAgICAgICAgICAgIHBpcGVsaW5lU3RhdGUgPQorKyAg
ICAgICAgICAgICAgICBtTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlLT5nZXRSZW5kZXJQaXBl
bGluZVN0YXRlKGNvbnRleHQsIHhmYlBpcGVsaW5lRGVzYyk7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgcGlwZWxpbmVTdGF0ZSA9IG1NZXRhbFJl
bmRlclBpcGVsaW5lQ2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0LCBwaXBlbGlu
ZURlc2MpOworKyAgICAgICAgfQorICAgICAgICAgaWYgKCFwaXBlbGluZVN0YXRlKQorICAgICAg
ICAgeworICAgICAgICAgICAgIC8vIEVycm9yIGFscmVhZHkgbG9nZ2VkIGluc2lkZSBnZXRSZW5k
ZXJQaXBlbGluZVN0YXRlKCkKK0BAIC05MTMsMTEgKzExNTEsNiBAQCB2b2lkIEluaXRBcmd1bWVu
dEJ1ZmZlckVuY29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgQU5HTEVfVFJZ
KHVwZGF0ZVVuaWZvcm1CdWZmZXJzKGNvbnRleHQsIGNtZEVuY29kZXIsIHBpcGVsaW5lRGVzYykp
OworICAgICB9CisgCistICAgIGlmIChwaXBlbGluZURlc2NDaGFuZ2VkKQorLSAgICB7CistICAg
ICAgICBBTkdMRV9UUlkodXBkYXRlWGZiQnVmZmVycyhjb250ZXh0LCBjbWRFbmNvZGVyLCBwaXBl
bGluZURlc2MpKTsKKy0gICAgfQorLQorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGlu
dWU7CisgfQorIAorQEAgLTk1MCw4ICsxMTgzLDEwIEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVy
RW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisgeworICAgICBDb250ZXh0TXRsICpjb250
ZXh0TXRsICAgICAgICAgICAgICAgICAgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsKKyAgICAg
Y29uc3QgYXV0byAmZ2xTdGF0ZSAgICAgICAgICAgICAgICAgICAgID0gZ2xDb250ZXh0LT5nZXRT
dGF0ZSgpOworKyAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBn
bENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAKKyAgICAgY29u
c3QgZ2w6OkFjdGl2ZVRleHR1cmVzQ2FjaGUgJmNvbXBsZXRlVGV4dHVyZXMgPSBnbFN0YXRlLmdl
dEFjdGl2ZVRleHR1cmVzQ2FjaGUoKTsKKysgICAgY29uc3QgZ2w6OkFjdGl2ZVRleHR1cmVUeXBl
QXJyYXkgJnRleHR1cmVUeXBlcyAgPSBleGVjdXRhYmxlLT5nZXRBY3RpdmVTYW1wbGVyVHlwZXMo
KTsKKyAKKyAgICAgZm9yIChnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6OkFsbEdMRVMy
U2hhZGVyVHlwZXMoKSkKKyAgICAgeworQEAgLTk2NCw2ICsxMTk5LDggQEAgdm9pZCBJbml0QXJn
dW1lbnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgIGNvbnN0
IG10bDo6VHJhbnNsYXRlZFNoYWRlckluZm8gJnNoYWRlckluZm8gPQorICAgICAgICAgICAgICpt
Q3VycmVudFNoYWRlclZhcmlhbnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mbzsKKyAK
KysgICAgICAgIGJvb2wgaGFzRGVwdGhTYW1wbGVyID0gZmFsc2U7CisrCisgICAgICAgICBmb3Ig
KHVpbnQzMl90IHRleHR1cmVJbmRleCA9IDA7IHRleHR1cmVJbmRleCA8IG1TdGF0ZS5nZXRTYW1w
bGVyQmluZGluZ3MoKS5zaXplKCk7CisgICAgICAgICAgICAgICsrdGV4dHVyZUluZGV4KQorICAg
ICAgICAgeworQEAgLTk3NSw3ICsxMjEyLDYgQEAgdm9pZCBJbml0QXJndW1lbnRCdWZmZXJFbmNv
ZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgfQorIAorLSAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlwZSB0ZXh0dXJlVHlw
ZSA9IHNhbXBsZXJCaW5kaW5nLnRleHR1cmVUeXBlOworIAorICAgICAgICAgICAgIGZvciAodWlu
dDMyX3QgYXJyYXlFbGVtZW50ID0gMDsgYXJyYXlFbGVtZW50IDwgc2FtcGxlckJpbmRpbmcuYm91
bmRUZXh0dXJlVW5pdHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgKythcnJheUVsZW1lbnQp
CitAQCAtOTgzLDYgKzEyMTksNyBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVuY29kZXIobXRs
OjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBHTHVpbnQgdGV4dHVyZVVuaXQg
ICAgICAgICAgPSBzYW1wbGVyQmluZGluZy5ib3VuZFRleHR1cmVVbml0c1thcnJheUVsZW1lbnRd
OworICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSAgICAgICAgPSBjb21wbGV0
ZVRleHR1cmVzW3RleHR1cmVVbml0XTsKKyAgICAgICAgICAgICAgICAgZ2w6OlNhbXBsZXIgKnNh
bXBsZXIgICAgICAgID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRTYW1wbGVyKHRleHR1cmVV
bml0KTsKKysgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gdGV4
dHVyZVR5cGVzW3RleHR1cmVVbml0XTsKKyAgICAgICAgICAgICAgICAgdWludDMyX3QgdGV4dHVy
ZVNsb3QgICAgICAgID0gbXNsQmluZGluZy50ZXh0dXJlQmluZGluZyArIGFycmF5RWxlbWVudDsK
KyAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2FtcGxlclNsb3QgICAgICAgID0gbXNsQmluZGlu
Zy5zYW1wbGVyQmluZGluZyArIGFycmF5RWxlbWVudDsKKyAgICAgICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlKQorQEAgLTk5NCwyNCArMTIzMSwyMSBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVu
Y29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBUZXh0dXJlTXRs
ICp0ZXh0dXJlTXRsID0gbXRsOjpHZXRJbXBsKHRleHR1cmUpOworICAgICAgICAgICAgICAgICBp
ZiAoc2FtcGxlckJpbmRpbmcuZm9ybWF0ID09IGdsOjpTYW1wbGVyRm9ybWF0OjpTaGFkb3cpCisg
ICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9hbmdsZWJ1
Zy5jb20vNTEwNworLSAgICAgICAgICAgICAgICAgICAgLy8gTWV0YWwgZG9lc24ndCBzdXBwb3J0
IGEgY29tcGFyZSBtb2RlIHdoZXJlIHNhbXBsaW5nIGEgc2hhZG93IHNhbXBsZXIgY291bGQKKy0g
ICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBhIHNhbWUgdmFsdWUgYXMgaWYgc2FtcGxpbmcg
ZnJvbSBhIG5vcm1hbCBzYW1wbGVyLgorLSAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydGlu
ZyB0aGlzIGNvdWxkIHJlcXVpcmUgaGFja2luZyBzcGlydi1jcm9zcyB0byBjaGFuZ2Ugc2FtcGxl
X2NvbXBhcmUoKQorLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2FtcGxlKCkuCistICAgICAg
ICAgICAgICAgICAgICBpZiAoQU5HTEVfVU5MSUtFTFkoc2FtcGxlclN0YXRlLT5nZXRDb21wYXJl
TW9kZSgpICE9IEdMX0NPTVBBUkVfUkVGX1RPX1RFWFRVUkUpKQorLSAgICAgICAgICAgICAgICAg
ICAgeworLSAgICAgICAgICAgICAgICAgICAgICAgIEVSUigpIDw8ICJHTF9URVhUVVJFX0NPTVBB
UkVfTU9ERSAhPSBHTF9DT01QQVJFX1JFRl9UT19URVhUVVJFIGlzIG5vdCAiCistICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCI7CistICAgICAgICAgICAgICAgICAg
ICAgICAgQU5HTEVfTVRMX1RSWShjb250ZXh0TXRsLAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlTW9kZSgpID09IEdMX0NPTVBB
UkVfUkVGX1RPX1RFWFRVUkUpOworLSAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAg
ICAgICAgICAgaGFzRGVwdGhTYW1wbGVyICAgICAgICAgICAgICAgICAgPSB0cnVlOworKyAgICAg
ICAgICAgICAgICAgICAgbVNoYWRvd0NvbXBhcmVNb2Rlc1t0ZXh0dXJlU2xvdF0gPSBtdGw6Ok1z
bEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNh
bXBsZXJTdGF0ZS0+Z2V0Q29tcGFyZU1vZGUoKSwgc2FtcGxlclN0YXRlLT5nZXRDb21wYXJlRnVu
YygpKTsKKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICBBTkdMRV9UUlko
dGV4dHVyZU10bC0+YmluZFRvU2hhZGVyKGdsQ29udGV4dCwgY21kRW5jb2Rlciwgc2hhZGVyVHlw
ZSwgc2FtcGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlU2xvdCwgc2FtcGxlclNsb3QpKTsKKyAgICAgICAgICAgICB9ICAvLyBm
b3IgYXJyYXkgZWxlbWVudHMKKyAgICAgICAgIH0gICAgICAvLyBmb3Igc2FtcGxlciBiaW5kaW5n
cworKworKyAgICAgICAgaWYgKGhhc0RlcHRoU2FtcGxlcikKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBjbWRFbmNvZGVyLT5zZXREYXRhKHNoYWRlclR5cGUsIG1TaGFkb3dDb21wYXJlTW9kZXMs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OmtTaGFkb3dTYW1wbGVyQ29t
cGFyZU1vZGVzQmluZGluZ0luZGV4KTsKKysgICAgICAgIH0KKyAgICAgfSAgLy8gZm9yIHNoYWRl
ciB0eXBlcworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CitAQCAtMTA0
MCwxMSArMTI3NCw2IEBAIHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRl
eHQgKmNvbnRleHQsCisgCisgICAgIGZvciAoZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSA6IGds
OjpBbGxHTEVTMlNoYWRlclR5cGVzKCkpCisgICAgIHsKKy0gICAgICAgIGlmICghbUN1cnJlbnRT
aGFkZXJWYXJpYW50c1tzaGFkZXJUeXBlXSkKKy0gICAgICAgIHsKKy0gICAgICAgICAgICBjb250
aW51ZTsKKy0gICAgICAgIH0KKy0KKyAgICAgICAgIGlmIChtQ3VycmVudFNoYWRlclZhcmlhbnRz
W3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mby0+aGFzVUJPQXJndW1lbnRCdWZmZXIpCisg
ICAgICAgICB7CisgICAgICAgICAgICAgQU5HTEVfVFJZKAorQEAgLTExNDksOCArMTM3OCw2IEBA
IHZvaWQgSW5pdEFyZ3VtZW50QnVmZmVyRW5jb2RlcihtdGw6OkNvbnRleHQgKmNvbnRleHQsCisg
ICAgIGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUpCisgeworICAgICBjb25zdCBnbDo6U3RhdGUg
JmdsU3RhdGUgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOworLSAgICBjb25zdCBtdGw6OlRyYW5zbGF0
ZWRTaGFkZXJJbmZvICZzaGFkZXJJbmZvID0KKy0gICAgICAgICptQ3VycmVudFNoYWRlclZhcmlh
bnRzW3NoYWRlclR5cGVdLT50cmFuc2xhdGVkU3JjSW5mbzsKKyAgICAgZm9yICh1aW50MzJfdCBi
dWZmZXJJbmRleCA9IDA7IGJ1ZmZlckluZGV4IDwgYmxvY2tzLnNpemUoKTsgKytidWZmZXJJbmRl
eCkKKyAgICAgeworICAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZibG9jayA9IGJs
b2Nrc1tidWZmZXJJbmRleF07CitAQCAtMTE2Miw3ICsxMzg5LDggQEAgdm9pZCBJbml0QXJndW1l
bnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIHVpbnQzMl90IGFjdHVhbEJ1ZmZlcklkeCA9
IHNoYWRlckluZm8uYWN0dWFsVUJPQmluZGluZ3NbYnVmZmVySW5kZXhdOworKyAgICAgICAgdWlu
dDMyX3QgYWN0dWFsQnVmZmVySWR4ID0KKysgICAgICAgICAgICBtTXNsU2hhZGVyVHJhbnNsYXRl
SW5mb1tzaGFkZXJUeXBlXS5hY3R1YWxVQk9CaW5kaW5nc1tidWZmZXJJbmRleF07CisgCisgICAg
ICAgICBpZiAoYWN0dWFsQnVmZmVySWR4ID49IG10bDo6a01heFNoYWRlckJ1ZmZlcnMpCisgICAg
ICAgICB7CitAQCAtMTE5OSwxMiArMTQyNywxMiBAQCB2b2lkIEluaXRBcmd1bWVudEJ1ZmZlckVu
Y29kZXIobXRsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICBbYnVmZmVyRW5jb2Rlci5tZXRhbEFy
Z0J1ZmZlckVuY29kZXIgc2V0QXJndW1lbnRCdWZmZXI6YXJndW1lbnRCdWZmZXItPmdldCgpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNl
dDphcmd1bWVudEJ1ZmZlck9mZnNldF07CisgCistICAgIHN0YXRpY19hc3NlcnQoTVRMUmVuZGVy
U3RhZ2VWZXJ0ZXggPT0gKDB4MSA8PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ2w6OlNoYWRlclR5
cGU6OlZlcnRleCkpLAorLSAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBnbCBTaGFkZXJUeXBl
IGVudW0gYW5kIE1ldGFsIGVudW0gdG8gcmVsYXRpdmUgdG8gZWFjaCBvdGhlciIpOworLSAgICBz
dGF0aWNfYXNzZXJ0KAorLSAgICAgICAgTVRMUmVuZGVyU3RhZ2VGcmFnbWVudCA9PSAoMHgxIDw8
IHN0YXRpY19jYXN0PHVpbnQzMl90PihnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnQpKSwKKy0gICAg
ICAgICJFeHBlY3RlZCBnbCBTaGFkZXJUeXBlIGVudW0gYW5kIE1ldGFsIGVudW0gdG8gcmVsYXRp
dmUgdG8gZWFjaCBvdGhlciIpOworLSAgICBhdXRvIG10bFJlbmRlclN0YWdlID0gc3RhdGljX2Nh
c3Q8TVRMUmVuZGVyU3RhZ2VzPigweDEgPDwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNoYWRlclR5
cGUpKTsKKysgICAgY29uc3RleHByIGdsOjpTaGFkZXJNYXA8TVRMUmVuZGVyU3RhZ2VzPiBrU2hh
ZGVyU3RhZ2VNYXAgPSB7CisrICAgICAgICB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwgbXRsOjpr
UmVuZGVyU3RhZ2VWZXJ0ZXh9LAorKyAgICAgICAge2dsOjpTaGFkZXJUeXBlOjpGcmFnbWVudCwg
bXRsOjprUmVuZGVyU3RhZ2VGcmFnbWVudH0sCisrICAgIH07CisrCisrICAgIGF1dG8gbXRsUmVu
ZGVyU3RhZ2UgPSBrU2hhZGVyU3RhZ2VNYXBbc2hhZGVyVHlwZV07CisgCisgICAgIGZvciAodWlu
dDMyX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVm
ZmVySW5kZXgpCisgICAgIHsKK0BAIC0xMjM5LDQ5ICsxNDY3LDQgQEAgdm9pZCBJbml0QXJndW1l
bnRCdWZmZXJFbmNvZGVyKG10bDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1hbmdsZTo6UmVzdWx0IFByb2dyYW1NdGw6OnVw
ZGF0ZVhmYkJ1ZmZlcnMoQ29udGV4dE10bCAqY29udGV4dCwKKy0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5j
b2RlciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYykKKy17CistICAgIGNvbnN0IGds
OjpTdGF0ZSAmZ2xTdGF0ZSAgICAgICAgICAgICAgICAgPSBjb250ZXh0LT5nZXRTdGF0ZSgpOwor
LSAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gZ2xTdGF0ZS5n
ZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKy0KKy0gICAgaWYgKHBpcGVsaW5lRGVzYy5y
YXN0ZXJpemF0aW9uRW5hYmxlZCgpIHx8ICFnbFN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmVVbnBhdXNlZCgpIHx8CistICAgICAgICBBTkdMRV9VTkxJS0VMWSghdHJhbnNmb3JtRmVlZGJh
Y2spKQorLSAgICB7CistICAgICAgICAvLyBYRkIgb3V0cHV0IGNhbiBvbmx5IGJlIHVzZWQgd2l0
aCByYXN0ZXJpemF0aW9uIGRpc2FibGVkLgorLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworLSAgICB9CistCistICAgIHNpemVfdCB4ZmJCdWZmZXJDb3VudCA9IGdsU3Rh
dGUuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJDb3Vu
dCgpOworLQorLSAgICBBU1NFUlQoeGZiQnVmZmVyQ291bnQgPiAwKTsKKy0gICAgQVNTRVJUKG1T
dGF0ZS5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUoKSAhPSBHTF9JTlRFUkxFQVZFRF9B
VFRSSUJTIHx8CistICAgICAgICAgICB4ZmJCdWZmZXJDb3VudCA9PSAxKTsKKy0KKy0gICAgZm9y
IChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IHhmYkJ1ZmZlckNvdW50OyAr
K2J1ZmZlckluZGV4KQorLSAgICB7CistICAgICAgICB1aW50MzJfdCBhY3R1YWxCdWZmZXJJZHgg
PSBtTXNsWGZiT25seVZlcnRleFNoYWRlckluZm8uYWN0dWFsWEZCQmluZGluZ3NbYnVmZmVySW5k
ZXhdOworLQorLSAgICAgICAgaWYgKGFjdHVhbEJ1ZmZlcklkeCA+PSBtdGw6OmtNYXhTaGFkZXJC
dWZmZXJzKQorLSAgICAgICAgeworLSAgICAgICAgICAgIGNvbnRpbnVlOworLSAgICAgICAgfQor
LQorLSAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZi
dWZmZXJCaW5kaW5nID0KKy0gICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+Z2V0SW5kZXhl
ZEJ1ZmZlcihidWZmZXJJbmRleCk7CistICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBidWZm
ZXJCaW5kaW5nLmdldCgpOworLSAgICAgICAgQVNTRVJUKChidWZmZXJCaW5kaW5nLmdldE9mZnNl
dCgpICUgNCkgPT0gMCk7CistICAgICAgICBBU1NFUlQoYnVmZmVyICE9IG51bGxwdHIpOworLQor
LSAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6OkdldEltcGwoYnVmZmVyKTsKKy0K
Ky0gICAgICAgIC8vIFVzZSBvZmZzZXQ9MCwgYWN0dWFsIG9mZnNldCB3aWxsIGJlIHNldCBpbiBE
cml2ZXIgVW5pZm9ybSBpbnNpZGUgQ29udGV4dE10bC4KKy0gICAgICAgIGNtZEVuY29kZXItPnNl
dEJ1ZmZlckZvcldyaXRlKGdsOjpTaGFkZXJUeXBlOjpWZXJ0ZXgsIGJ1ZmZlck10bC0+Z2V0Q3Vy
cmVudEJ1ZmZlcigpLCAwLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWN0dWFsQnVmZmVySWR4KTsKKy0gICAgfQorLQorLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CistfQorLQorIH0gIC8vIG5hbWVzcGFjZSByeAorZGlmZiAtLWdpdCBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1F1ZXJ5TXRsLmgKK2luZGV4IDIxODU0ZjYuLjI3OGYxZGYgMTAwNjQ0CistLS0gYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgKK0BAIC0xLDUgKzEsNSBAQAorIC8vCistLy8gQ29w
eXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKysvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisgLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKyAvLworQEAgLTk4LDggKzk4LDcgQEAgY2xhc3MgUXVlcnlNdGwgOiBwdWJs
aWMgUXVlcnlJbXBsCisgICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICZnZXRWaXNpYmlsaXR5UmVz
dWx0QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbVZpc2liaWxpdHlSZXN1bHRCdWZmZXI7IH0KKyAg
ICAgLy8gUmVzZXQgdGhlIG9jY2x1c2lvbiBxdWVyeSByZXN1bHQgc3RvcmVkIGluIGJ1ZmZlciB0
byB6ZXJvCisgICAgIHZvaWQgcmVzZXRWaXNpYmlsaXR5UmVzdWx0KENvbnRleHRNdGwgKmNvbnRl
eHRNdGwpOworLQorLSAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOworKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQoR0xzaXpl
aXB0ciBwcmltaXRpdmVzRHJhd24pOworIAorICAgcHJpdmF0ZToKKyAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitAQCAtMTA4LDggKzEwNywxMyBAQCBjbGFzcyBRdWVyeU10bCA6IHB1YmxpYyBR
dWVyeUltcGwKKyAgICAgLy8gTGlzdCBvZiBvZmZzZXRzIGluIHRoZSByZW5kZXIgcGFzcydzIG9j
Y2x1c2lvbiBxdWVyeSBwb29sIGJ1ZmZlciBhbGxvY2F0ZWQgZm9yIHRoaXMgcXVlcnkKKyAgICAg
VmlzaWJpbGl0eUJ1ZmZlck9mZnNldHNNdGwgbVZpc2liaWxpdHlCdWZmZXJPZmZzZXRzOworICAg
ICBtdGw6OkJ1ZmZlclJlZiBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcjsKKysgICAgLy8gVXNlZCB3
aXRoIFRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0ZW4gd2hlbiB0cmFuc2Zvcm0gZmVl
ZGJhY2sgaXMgZW11bGF0ZWQuCisrICAgIHNpemVfdCBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRp
dmVzRHJhd247CisgCistICAgIHNpemVfdCBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJh
d24gPSAwOworKyAgICAvLyBUT0RPKGpjdW5uaW5naGFtKTogY3VycmVudGx5IG9ubHkgdXNlZCBm
b3IgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduCisrICAgIC8vIGJ1dCBjYW4gYmUg
dXNlZCBmb3IgcmVzdCBvZiByZXN1bHRzCisrICAgIHVpbnQ2NF90IG1DYWNoZWRSZXN1bHQ7Cisr
ICAgIGJvb2wgbUNhY2hlZFJlc3VsdFZhbGlkOworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRsLm1tCitpbmRleCBmNWU5YmYzLi5h
YjBlN2JmIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1F1ZXJ5TXRs
Lm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwubW0KK0BAIC0x
LDUgKzEsNSBAQAorIC8vCistLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisgLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworQEAgLTEzLDcgKzEzLDEy
IEBACisgCisgbmFtZXNwYWNlIHJ4CisgeworLVF1ZXJ5TXRsOjpRdWVyeU10bChnbDo6UXVlcnlU
eXBlIHR5cGUpIDogUXVlcnlJbXBsKHR5cGUpIHt9CisrUXVlcnlNdGw6OlF1ZXJ5TXRsKGdsOjpR
dWVyeVR5cGUgdHlwZSkKKysgICAgOiBRdWVyeUltcGwodHlwZSksCisrICAgICAgbVRyYW5zZm9y
bUZlZWRiYWNrUHJpbWl0aXZlc0RyYXduKDApLAorKyAgICAgIG1DYWNoZWRSZXN1bHQoMCksCisr
ICAgICAgbUNhY2hlZFJlc3VsdFZhbGlkKGZhbHNlKQorK3t9CisgCisgUXVlcnlNdGw6On5RdWVy
eU10bCgpIHt9CisgCitAQCAtMjIsMTMgKzI3LDE0IEBACisgICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgICAgIGlmICghZ2V0QWxsb2NhdGVkVmlz
aWJpbGl0eU9mZnNldHMoKS5lbXB0eSgpKQorICAgICB7CistICAgICAgICBjb250ZXh0TXRsLT5v
bk9jY2x1c2lvblF1ZXJ5RGVzdHJveShjb250ZXh0LCB0aGlzKTsKKysgICAgICAgIGNvbnRleHRN
dGwtPm9uT2NjbHVzaW9uUXVlcnlEZXN0cm95ZWQoY29udGV4dCwgdGhpcyk7CisgICAgIH0KKyAg
ICAgbVZpc2liaWxpdHlSZXN1bHRCdWZmZXIgPSBudWxscHRyOworIH0KKyAKKyBhbmdsZTo6UmVz
dWx0IFF1ZXJ5TXRsOjpiZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB7CisrICAg
IG1DYWNoZWRSZXN1bHRWYWxpZCAgICAgPSBmYWxzZTsKKyAgICAgQ29udGV4dE10bCAqY29udGV4
dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICAgc3dpdGNoIChnZXRUeXBlKCkpCisg
ICAgIHsKK0BAIC00Nyw3ICs1Myw3IEBACisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICB9CisgCistICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnRleHRNdGwtPm9uT2NjbHVzaW9uUXVl
cnlCZWdpbihjb250ZXh0LCB0aGlzKSk7CisrICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnRleHRN
dGwtPm9uT2NjbHVzaW9uUXVlcnlCZWdhbihjb250ZXh0LCB0aGlzKSk7CisgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJp
bWl0aXZlc1dyaXR0ZW46CisgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZl
c0RyYXduID0gMDsKK0BAIC02NiwxMiArNzIsMjIgQEAKKyAgICAgeworICAgICAgICAgY2FzZSBn
bDo6UXVlcnlUeXBlOjpBbnlTYW1wbGVzOgorICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpB
bnlTYW1wbGVzQ29uc2VydmF0aXZlOgorLSAgICAgICAgICAgIGNvbnRleHRNdGwtPm9uT2NjbHVz
aW9uUXVlcnlFbmQoY29udGV4dCwgdGhpcyk7CisrICAgICAgICAgICAgY29udGV4dE10bC0+b25P
Y2NsdXNpb25RdWVyeUVuZGVkKGNvbnRleHQsIHRoaXMpOworICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgY2FzZSBnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNX
cml0dGVuOgorKyAgICAgICAgeworKyAgICAgICAgICAgIG1DYWNoZWRSZXN1bHQgPSBtVHJhbnNm
b3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd247CisrCisgICAgICAgICAgICAgLy8gVGhlcmUgY291
bGQgYmUgdHJhbnNmb3JtIGZlZWRiYWNrIGluIHByb2dyZXNzLCBzbyBhZGQgdGhlIHByaW1pdGl2
ZXMgZHJhd24gc28gZmFyCisgICAgICAgICAgICAgLy8gZnJvbSB0aGUgY3VycmVudCB0cmFuc2Zv
cm0gZmVlZGJhY2sgb2JqZWN0LgorLSAgICAgICAgICAgIG9uVHJhbnNmb3JtRmVlZGJhY2tFbmQo
Y29udGV4dCk7CisrICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1G
ZWVkYmFjayA9CisrICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCk7CisrICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNr
KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbUNhY2hlZFJlc3VsdCArPSB0cmFu
c2Zvcm1GZWVkYmFjay0+Z2V0UHJpbWl0aXZlc0RyYXduKCk7CisrICAgICAgICAgICAgfQorKyAg
ICAgICAgICAgIG1DYWNoZWRSZXN1bHRWYWxpZCA9IHRydWU7CisrICAgICAgICB9CisgICAgICAg
ICBicmVhazsKKyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OworQEAgLTExMCw3ICsxMjYsNyBAQAorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAg
ICAgICBjYXNlIGdsOjpRdWVyeVR5cGU6OlRyYW5zZm9ybUZlZWRiYWNrUHJpbWl0aXZlc1dyaXR0
ZW46CistICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PFQ+KG1UcmFuc2Zvcm1GZWVk
YmFja1ByaW1pdGl2ZXNEcmF3bik7CisrICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0
PFQ+KG1DYWNoZWRSZXN1bHQpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMTM3LDcgKzE1Myw3IEBACisg
ICAgICAgICAgICAgKmF2YWlsYWJsZSA9ICFtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlci0+aXNCZWlu
Z1VzZWRCeUdQVShjb250ZXh0TXRsKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNh
c2UgZ2w6OlF1ZXJ5VHlwZTo6VHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzV3JpdHRlbjoKKy0g
ICAgICAgICAgICAqYXZhaWxhYmxlID0gdHJ1ZTsKKysgICAgICAgICAgICAqYXZhaWxhYmxlID0g
bUNhY2hlZFJlc3VsdFZhbGlkOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CitAQCAtMTc1LDEzICsxOTEsOSBAQAor
ICAgICBtVmlzaWJpbGl0eVJlc3VsdEJ1ZmZlci0+c3luY0NvbnRlbnQoY29udGV4dE10bCwgYmxp
dEVuY29kZXIpOworIH0KKyAKKy12b2lkIFF1ZXJ5TXRsOjpvblRyYW5zZm9ybUZlZWRiYWNrRW5k
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorK3ZvaWQgUXVlcnlNdGw6Om9uVHJhbnNmb3Jt
RmVlZGJhY2tFbmQoR0xzaXplaXB0ciBwcmltaXRpdmVzRHJhd24pCisgeworLSAgICBnbDo6VHJh
bnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0U3RhdGUoKS5n
ZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKy0gICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNr
KQorLSAgICB7CistICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tQcmltaXRpdmVzRHJhd24gKz0g
dHJhbnNmb3JtRmVlZGJhY2stPmdldFByaW1pdGl2ZXNEcmF3bigpOworLSAgICB9CisrICAgIG1U
cmFuc2Zvcm1GZWVkYmFja1ByaW1pdGl2ZXNEcmF3biArPSBwcmltaXRpdmVzRHJhd247CisgfQor
IAorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVm
ZmVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmgK
K2luZGV4IDZmZDdiMWIuLjA1MzAyMGMgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvUmVuZGVyQnVmZmVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9SZW5kZXJCdWZmZXJNdGwuaAorQEAgLTU3LDYgKzU3LDcgQEAgY2xhc3MgUmVuZGVyYnVm
ZmVyTXRsIDogcHVibGljIFJlbmRlcmJ1ZmZlckltcGwKKyAKKyAgICAgbXRsOjpGb3JtYXQgbUZv
cm1hdDsKKyAgICAgbXRsOjpUZXh0dXJlUmVmIG1UZXh0dXJlOworKyAgICBtdGw6OlRleHR1cmVS
ZWYgbUltcGxpY2l0TVNUZXh0dXJlOworICAgICBSZW5kZXJUYXJnZXRNdGwgbVJlbmRlclRhcmdl
dDsKKyB9OworIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5k
ZXJCdWZmZXJNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyQnVmZmVy
TXRsLm1tCitpbmRleCA2M2Q2ZjRiLi4yZjliNWY2IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1JlbmRlckJ1ZmZlck10bC5tbQorQEAgLTI4LDYgKzI4LDcgQEAKKyB2b2lk
IFJlbmRlcmJ1ZmZlck10bDo6cmVsZWFzZVRleHR1cmUoKQorIHsKKyAgICAgbVRleHR1cmUgICAg
ICAgICAgID0gbnVsbHB0cjsKKysgICAgbUltcGxpY2l0TVNUZXh0dXJlID0gbnVsbHB0cjsKKyB9
CisgCisgYW5nbGU6OlJlc3VsdCBSZW5kZXJidWZmZXJNdGw6OnNldFN0b3JhZ2VJbXBsKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorQEAgLTQyLDggKzQzLDkgQEAKKyAgICAgeworICAgICAg
ICAgLy8gQ2hlY2sgYWdhaW5zdCB0aGUgc3RhdGUgaWYgd2UgbmVlZCB0byByZWNyZWF0ZSB0aGUg
c3RvcmFnZS4KKyAgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBtU3RhdGUuZ2V0Rm9ybWF0
KCkuaW5mby0+aW50ZXJuYWxGb3JtYXQgfHwKKy0gICAgICAgICAgICB3aWR0aCAhPSBtU3RhdGUu
Z2V0V2lkdGgoKSB8fCBoZWlnaHQgIT0gbVN0YXRlLmdldEhlaWdodCgpIHx8CistICAgICAgICAg
ICAgc2FtcGxlcyAhPSBtU3RhdGUuZ2V0U2FtcGxlcygpKQorKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEdMc2l6ZWk+KHdpZHRoKSAhPSBtU3RhdGUuZ2V0V2lkdGgoKSB8fAorKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PEdMc2l6ZWk+KGhlaWdodCkgIT0gbVN0YXRlLmdldEhlaWdodCgpIHx8Cisr
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R0xzaXplaT4oc2FtcGxlcykgIT0gbVN0YXRlLmdldFNh
bXBsZXMoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZWxlYXNlVGV4dHVyZSgpOworICAg
ICAgICAgfQorQEAgLTcyLDMwICs3NCw2MiBAQAorIAorICAgICBpZiAoKG1UZXh0dXJlID09IG51
bGxwdHIgfHwgIW1UZXh0dXJlLT52YWxpZCgpKSAmJiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0g
MCkpCisgICAgIHsKKy0gICAgICAgIGlmIChhY3R1YWxTYW1wbGVzID09IDEpCisrICAgICAgICBp
ZiAoYWN0dWFsU2FtcGxlcyA9PSAxIHx8IChtRm9ybWF0Lmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMo
KSAmJiBtRm9ybWF0LmdldENhcHMoKS5yZXNvbHZlKSkKKyAgICAgICAgIHsKKy0gICAgICAgICAg
ICBBTkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRUZXh0dXJlKGNvbnRleHRNdGwsIG1Gb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZhbHNlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbUZvcm1hdC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCks
ICZtVGV4dHVyZSkpOworKyAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1cmU6Ok1ha2Uy
RFRleHR1cmUoY29udGV4dE10bCwgbUZvcm1hdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdpZHRo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHVpbnQzMl90PihoZWlnaHQpLCAxLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFs
bG93Rm9ybWF0VmlldyAqLyBmYWxzZSwgJm1UZXh0dXJlKSk7CisrCisrICAgICAgICAgICAgLy8g
VXNlIGltcGxpY2l0IHJlc29sdmUgZm9yIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSB3aGVuZXZlciBw
b3NzaWJsZS4gVGhpcyBpcyBiZWNhdXNlCisrICAgICAgICAgICAgLy8gZm9yIGRlcHRoIHN0ZW5j
aWwgdGV4dHVyZSwgaWYgc3RlbmNpbCBuZWVkcyB0byBiZSBibGl0dGVkLCBhIGZvcm1hdHRlZCBj
bG9uZSBoYXMKKysgICAgICAgICAgICAvLyB0byBiZSBjcmVhdGVkLiBBbmQgaXQgaXMgZXhwZW5z
aXZlIHRvIGNsb25lIGEgbXVsdGlzYW1wbGUgdGV4dHVyZS4KKysgICAgICAgICAgICBpZiAoYWN0
dWFsU2FtcGxlcyA+IDEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBUaGlz
IGZvcm1hdCBtdXN0IHN1cHBvcnRzIGltcGxpY2l0IHJlc29sdmUKKysgICAgICAgICAgICAgICAg
QVNTRVJUKG1Gb3JtYXQuZ2V0Q2FwcygpLnJlc29sdmUpOworKworKyAgICAgICAgICAgICAgICBB
TkdMRV9UUlkobXRsOjpUZXh0dXJlOjpNYWtlMkRNU1RleHR1cmUoCisrICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0TXRsLCBtRm9ybWF0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4od2lkdGgpLAor
KyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGhlaWdodCksIGFjdHVh
bFNhbXBsZXMsCisrICAgICAgICAgICAgICAgICAgICAvKiByZW5kZXJUYXJnZXRPbmx5ICovIHRy
dWUsCisrICAgICAgICAgICAgICAgICAgICAvKiBhbGxvd0Zvcm1hdFZpZXcgKi8gZmFsc2UsICZt
SW1wbGljaXRNU1RleHR1cmUpKTsKKysgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAg
ICBlbHNlCisgICAgICAgICB7CistICAgICAgICAgICAgQU5HTEVfVFJZKG10bDo6VGV4dHVyZTo6
TWFrZTJETVNUZXh0dXJlKAorLSAgICAgICAgICAgICAgICBjb250ZXh0TXRsLCBtRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBhY3R1YWxTYW1wbGVzLAorKyAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6
OlRleHR1cmU6Ok1ha2UyRE1TVGV4dHVyZShjb250ZXh0TXRsLCBtRm9ybWF0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1
aW50MzJfdD4od2lkdGgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaGVpZ2h0KSwgYWN0dWFsU2FtcGxl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogcmVuZGVyVGFyZ2V0T25seSAqLyBmYWxzZSwKKy0gICAgICAgICAgICAgICAgLyogYWxsb3dG
b3JtYXRWaWV3ICovIG1Gb3JtYXQuaGFzRGVwdGhBbmRTdGVuY2lsQml0cygpLCAmbVRleHR1cmUp
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogYWxsb3dGb3JtYXRWaWV3ICovIGZhbHNlLCAmbVRleHR1cmUpKTsKKyAgICAgICAgIH0KKyAK
Ky0gICAgICAgIG1SZW5kZXJUYXJnZXQuc2V0KG1UZXh0dXJlLCBtdGw6OmtaZXJvTmF0aXZlTWlw
TGV2ZWwsIDAsIG1Gb3JtYXQpOworKyAgICAgICAgbVJlbmRlclRhcmdldC5zZXRXaXRoSW1wbGlj
aXRNU1RleHR1cmUobVRleHR1cmUsIG1JbXBsaWNpdE1TVGV4dHVyZSwgbXRsOjprWmVyb05hdGl2
ZU1pcExldmVsLCAwLCBtRm9ybWF0KTsKKyAKKyAgICAgICAgIC8vIEZvciBlbXVsYXRlZCBjaGFu
bmVscyB0aGF0IEdMIHRleHR1cmUgaW50ZW5kcyB0byBub3QgaGF2ZSwKKyAgICAgICAgIC8vIHdl
IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGVpciBjb250ZW50LgorICAgICAgICAgYm9vbCBlbXVsYXRl
ZENoYW5uZWxzID0gbXRsOjpJc0Zvcm1hdEVtdWxhdGVkKG1Gb3JtYXQpOworICAgICAgICAgaWYg
KGVtdWxhdGVkQ2hhbm5lbHMpCisgICAgICAgICB7CistICAgICAgICAgICAgYXV0byBpbmRleCA9
IG10bDo6SW1hZ2VOYXRpdmVJbmRleDo6RnJvbUJhc2VaZXJvR0xJbmRleChnbDo6SW1hZ2VJbmRl
eDo6TWFrZTJEKDApKTsKKysgICAgICAgICAgICBnbDo6SW1hZ2VJbmRleCBpbmRleDsKKyAKKy0g
ICAgICAgICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnRl
eHQsIG1UZXh0dXJlLCBtRm9ybWF0LCBpbmRleCkpOworKyAgICAgICAgICAgIGlmIChhY3R1YWxT
YW1wbGVzID4gMSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGluZGV4ID0gZ2w6
OkltYWdlSW5kZXg6Ok1ha2UyRE11bHRpc2FtcGxlKCk7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGluZGV4ID0gZ2w6
OkltYWdlSW5kZXg6Ok1ha2UyRCgwKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAg
QU5HTEVfVFJZKG10bDo6SW5pdGlhbGl6ZVRleHR1cmVDb250ZW50cyhjb250ZXh0LCBtVGV4dHVy
ZSwgbUZvcm1hdCwgbXRsOjpJbWFnZU5hdGl2ZUluZGV4KGluZGV4LCAwKSkpOworKyAgICAgICAg
ICAgIGlmIChtSW1wbGljaXRNU1RleHR1cmUpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg
ICAgICBBTkdMRV9UUlkobXRsOjpJbml0aWFsaXplVGV4dHVyZUNvbnRlbnRzKGNvbnRleHQsIG1J
bXBsaWNpdE1TVGV4dHVyZSwgbUZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkltYWdlTmF0aXZlSW5kZXgoZ2w6Oklt
YWdlSW5kZXg6Ok1ha2UyRE11bHRpc2FtcGxlKCksIDApKSk7CisgICAgICAgICAgICAgfQorKyAg
ICAgICAgfSAgLy8gaWYgKGVtdWxhdGVkQ2hhbm5lbHMpCisgICAgIH0KKyAKKyAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworQEAgLTEzMyw3ICsxNjcsNiBAQAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
c2FtcGxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQgKipydE91dCkKKyB7
CistICAgIC8vIE5PVEUoaHFsZSk6IFN1cHBvcnQgTVNBQS4KKyAgICAgQVNTRVJUKG1UZXh0dXJl
ICYmIG1UZXh0dXJlLT52YWxpZCgpKTsKKyAgICAgKnJ0T3V0ID0gJm1SZW5kZXJUYXJnZXQ7Cisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmggYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgKK2luZGV4IGJhZjRlNGQuLjBjNTc1MTcgMTAw
NjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVuZGVyVGFyZ2V0TXRsLmgK
KysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwuaAorQEAg
LTQ2LDIwICs0NiwxOCBAQCBjbGFzcyBSZW5kZXJUYXJnZXRNdGwgZmluYWwgOiBwdWJsaWMgRnJh
bWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0CisgICAgIHZvaWQgZHVwbGljYXRlRnJvbShj
b25zdCBSZW5kZXJUYXJnZXRNdGwgJnNyYyk7CisgICAgIHZvaWQgcmVzZXQoKTsKKyAKKy0gICAg
bXRsOjpUZXh0dXJlUmVmIGdldFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZS5sb2Nr
KCk7IH0KKy0gICAgbXRsOjpUZXh0dXJlUmVmIGdldEltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbUltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsgfQorLSAgICBjb25zdCBtdGw6Ok1p
cG1hcE5hdGl2ZUxldmVsICZnZXRMZXZlbEluZGV4KCkgY29uc3QgeyByZXR1cm4gbUxldmVsSW5k
ZXg7IH0KKy0gICAgdWludDMyX3QgZ2V0TGF5ZXJJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1MYXll
ckluZGV4OyB9CisrICAgIG10bDo6VGV4dHVyZVJlZiBnZXRUZXh0dXJlKCkgY29uc3QgeyByZXR1
cm4gbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRUZXh0dXJlUmVmKCk7IH0KKysgICAgbXRs
OjpUZXh0dXJlUmVmIGdldEltcGxpY2l0TVNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbVRleHR1
cmVSZW5kZXJUYXJnZXRJbmZvLT5nZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpOyB9CisrICAgIGNv
bnN0IG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgJmdldExldmVsSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmxldmVsOyB9CisrICAgIHVpbnQzMl90IGdldExh
eWVySW5kZXgoKSBjb25zdCB7IHJldHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNsaWNl
T3JEZXB0aDsgfQorICAgICB1aW50MzJfdCBnZXRSZW5kZXJTYW1wbGVzKCkgY29uc3Q7CisgICAg
IGNvbnN0IG10bDo6Rm9ybWF0ICpnZXRGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtRm9ybWF0OyB9
CisgCisgICAgIHZvaWQgdG9SZW5kZXJQYXNzQXR0YWNobWVudERlc2MobXRsOjpSZW5kZXJQYXNz
QXR0YWNobWVudERlc2MgKnJwYURlc2NPdXQpIGNvbnN0OworIAorICAgcHJpdmF0ZToKKy0gICAg
bXRsOjpUZXh0dXJlV2Vha1JlZiBtVGV4dHVyZTsKKy0gICAgbXRsOjpUZXh0dXJlV2Vha1JlZiBt
SW1wbGljaXRNU1RleHR1cmU7CistICAgIG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwgbUxldmVsSW5k
ZXggPSBtdGw6OmtaZXJvTmF0aXZlTWlwTGV2ZWw7CistICAgIHVpbnQzMl90IG1MYXllckluZGV4
ICAgICAgICAgICAgICAgPSAwOworKy8vIFRoaXMgaXMgc2hhcmVkIHBvaW50ZXIgdG8gYXZvaWQg
Y3Jhc2hpbmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQgYWZ0ZXIgYm91bmQgdG8gYSBmcmFtZSBidWZm
ZXIuCisrICAgIHN0ZDo6c2hhcmVkX3B0cjxtdGw6OlJlbmRlclBhc3NBdHRhY2htZW50VGV4dHVy
ZVRhcmdldERlc2M+IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbzsKKyAgICAgY29uc3QgbXRsOjpG
b3JtYXQgKm1Gb3JtYXQgPSBudWxscHRyOworIH07CisgfSAgLy8gbmFtZXNwYWNlIHJ4CitkaWZm
IC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1JlbmRlclRhcmdldE10bC5tbSBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9SZW5kZXJUYXJnZXRNdGwubW0KK2luZGV4IGU4
OWU3NjEuLmUxMjZkYmIgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
UmVuZGVyVGFyZ2V0TXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUmVu
ZGVyVGFyZ2V0TXRsLm1tCitAQCAtMTEsNyArMTEsMTAgQEAKKyAKKyBuYW1lc3BhY2UgcngKKyB7
CistUmVuZGVyVGFyZ2V0TXRsOjpSZW5kZXJUYXJnZXRNdGwoKSB7fQorK1JlbmRlclRhcmdldE10
bDo6UmVuZGVyVGFyZ2V0TXRsKCkgOgorKyAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKHN0ZDo6
bWFrZV9zaGFyZWQ8bXRsOjpSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1cmVUYXJnZXREZXNjPigp
KSwKKysgIG1Gb3JtYXQobnVsbHB0cikKKyt7fQorIAorIFJlbmRlclRhcmdldE10bDo6flJlbmRl
clRhcmdldE10bCgpCisgeworQEAgLTE5LDEwICsyMiw3IEBACisgfQorIAorIFJlbmRlclRhcmdl
dE10bDo6UmVuZGVyVGFyZ2V0TXRsKFJlbmRlclRhcmdldE10bCAmJm90aGVyKQorLSAgICA6IG1U
ZXh0dXJlKHN0ZDo6bW92ZShvdGhlci5tVGV4dHVyZSkpLAorLSAgICAgIG1JbXBsaWNpdE1TVGV4
dHVyZShzdGQ6Om1vdmUob3RoZXIubUltcGxpY2l0TVNUZXh0dXJlKSksCistICAgICAgbUxldmVs
SW5kZXgob3RoZXIubUxldmVsSW5kZXgpLAorLSAgICAgIG1MYXllckluZGV4KG90aGVyLm1MYXll
ckluZGV4KQorKyAgICA6IG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mbyhzdGQ6Om1vdmUob3RoZXIu
bVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvKSkKKyB7fQorIAorIHZvaWQgUmVuZGVyVGFyZ2V0TXRs
OjpzZXQoY29uc3QgbXRsOjpUZXh0dXJlUmVmICZ0ZXh0dXJlLAorQEAgLTM5LDIxICszOSwyMSBA
QAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgbGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdGw6OkZvcm1hdCAmZm9ybWF0KQorIHsKKy0gICAgbVRleHR1cmUgICAgICAgICAg
ID0gdGV4dHVyZTsKKy0gICAgbUltcGxpY2l0TVNUZXh0dXJlID0gaW1wbGljaXRNU1RleHR1cmU7
CistICAgIG1MZXZlbEluZGV4ICAgICAgICA9IGxldmVsOworLSAgICBtTGF5ZXJJbmRleCAgICAg
ICAgPSBsYXllcjsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJlICAgICAg
ICAgICA9IHRleHR1cmU7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+aW1wbGljaXRN
U1RleHR1cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJ
bmZvLT5sZXZlbCAgICAgICAgPSBsZXZlbDsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZv
LT5zbGljZU9yRGVwdGggICAgICAgID0gbGF5ZXI7CisgICAgIG1Gb3JtYXQgICAgICAgICAgICA9
ICZmb3JtYXQ7CisgfQorIAorIHZvaWQgUmVuZGVyVGFyZ2V0TXRsOjpzZXRUZXh0dXJlKGNvbnN0
IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSkKKyB7CistICAgIG1UZXh0dXJlID0gdGV4dHVyZTsK
KysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT50ZXh0dXJlID0gdGV4dHVyZTsKKyB9Cisg
Cisgdm9pZCBSZW5kZXJUYXJnZXRNdGw6OnNldEltcGxpY2l0TVNUZXh0dXJlKGNvbnN0IG10bDo6
VGV4dHVyZVJlZiAmaW1wbGljaXRNU1RleHR1cmUpCisgeworLSAgICBtSW1wbGljaXRNU1RleHR1
cmUgPSBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgbVRleHR1cmVSZW5kZXJUYXJnZXRJbmZvLT5p
bXBsaWNpdE1TVGV4dHVyZSA9IGltcGxpY2l0TVNUZXh0dXJlOworIH0KKyAKKyB2b2lkIFJlbmRl
clRhcmdldE10bDo6ZHVwbGljYXRlRnJvbShjb25zdCBSZW5kZXJUYXJnZXRNdGwgJnNyYykKK0BA
IC02NCwyNSArNjQsMTkgQEAKKyAKKyB2b2lkIFJlbmRlclRhcmdldE10bDo6cmVzZXQoKQorIHsK
Ky0gICAgbVRleHR1cmUucmVzZXQoKTsKKy0gICAgbUltcGxpY2l0TVNUZXh0dXJlLnJlc2V0KCk7
CistICAgIG1MZXZlbEluZGV4ID0gbXRsOjprWmVyb05hdGl2ZU1pcExldmVsOworLSAgICBtTGF5
ZXJJbmRleCA9IDA7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+dGV4dHVyZS5yZXNl
dCgpOworKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmltcGxpY2l0TVNUZXh0dXJlLnJl
c2V0KCk7CisrICAgIG1UZXh0dXJlUmVuZGVyVGFyZ2V0SW5mby0+bGV2ZWwgICAgICAgID0gbXRs
OjprWmVyb05hdGl2ZU1pcExldmVsOworKyAgICBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPnNs
aWNlT3JEZXB0aCA9IDA7CisgICAgIG1Gb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gbnVsbHB0cjsKKyB9CisgCisgdWludDMyX3QgUmVuZGVyVGFyZ2V0TXRsOjpnZXRSZW5k
ZXJTYW1wbGVzKCkgY29uc3QKKyB7CistICAgIG10bDo6VGV4dHVyZVJlZiBpbXBsaWNpdE1TVGV4
ID0gZ2V0SW1wbGljaXRNU1RleHR1cmUoKTsKKy0gICAgbXRsOjpUZXh0dXJlUmVmIHRleCAgICAg
ICAgICAgPSBnZXRUZXh0dXJlKCk7CistICAgIHJldHVybiBpbXBsaWNpdE1TVGV4ID8gaW1wbGlj
aXRNU1RleC0+c2FtcGxlcygpIDogKHRleCA/IHRleC0+c2FtcGxlcygpIDogMSk7CisrICAgIHJl
dHVybiBtVGV4dHVyZVJlbmRlclRhcmdldEluZm8tPmdldFJlbmRlclNhbXBsZXMoKTsKKyB9Cisg
dm9pZCBSZW5kZXJUYXJnZXRNdGw6OnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKG10bDo6UmVu
ZGVyUGFzc0F0dGFjaG1lbnREZXNjICpycGFEZXNjT3V0KSBjb25zdAorIHsKKy0gICAgcnBhRGVz
Y091dC0+dGV4dHVyZSAgICAgICAgICAgPSBtVGV4dHVyZS5sb2NrKCk7CistICAgIHJwYURlc2NP
dXQtPmltcGxpY2l0TVNUZXh0dXJlID0gbUltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsKKy0gICAg
cnBhRGVzY091dC0+bGV2ZWwgICAgICAgICAgICAgPSBtTGV2ZWxJbmRleDsKKy0gICAgcnBhRGVz
Y091dC0+c2xpY2VPckRlcHRoICAgICAgPSBtTGF5ZXJJbmRleDsKKy0gICAgcnBhRGVzY091dC0+
YmxlbmRhYmxlICAgICAgICAgPSBtRm9ybWF0ID8gbUZvcm1hdC0+Z2V0Q2FwcygpLmJsZW5kYWJs
ZSA6IGZhbHNlOworKyAgICBycGFEZXNjT3V0LT5yZW5kZXJUYXJnZXQgPSBtVGV4dHVyZVJlbmRl
clRhcmdldEluZm87CisgfQorIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvU2hhZGVyTXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRs
LmgKK2luZGV4IDdiMmNmZDUuLjUyZTkxYWYgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9TaGFkZXJNdGwuaAorQEAgLTExLDggKzExLDggQEAKKyAKKyAjaW5jbHVkZSA8bWFwPgorIAor
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgor
ICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9TaGFkZXJJbXBsLmgiCistCisgbmFtZXNwYWNl
IHJ4CisgeworIAorQEAgLTI2LDcgKzI2LDE5IEBAIGNsYXNzIFNoYWRlck10bCA6IHB1YmxpYyBT
aGFkZXJJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hDb21waWxlT3B0aW9u
cyBvcHRpb25zKSBvdmVycmlkZTsKKyAKKysgICAgc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rp
b24gKmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKQorKyAgICB7CisrICAgICAgICByZXR1
cm4gJnRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb247CisrICAgIH0KKyAgICAgc3RkOjpzdHJpbmcg
Z2V0RGVidWdJbmZvKCkgY29uc3Qgb3ZlcnJpZGU7CisrCisrICAgIHNoOjpUcmFuc2xhdG9yTWV0
YWxSZWZsZWN0aW9uIHRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gPSB7fTsKKysKKysgIHByaXZh
dGU6CisrICAgIHN0ZDo6c2hhcmVkX3B0cjxXYWl0YWJsZUNvbXBpbGVFdmVudD4gY29tcGlsZUlt
cGxNdGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoQ29tcGlsZXJJbnN0YW5j
ZSAqY29tcGlsZXJJbnN0YW5jZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmc291cmNlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoQ29t
cGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMpOworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1NoYWRlck10bC5tbSBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TaGFkZXJNdGwubW0KK2luZGV4IGY5MDlmYjUu
LmFkMDFkYmYgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVy
TXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLm1tCitA
QCAtMTAsOCArMTAsMTMgQEAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU2hh
ZGVyTXRsLmgiCisgCisgI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9D
b250ZXh0LmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL1NoYWRlci5oIgorKyNpbmNsdWRlICJsaWJB
TkdMRS9Xb3JrZXJUaHJlYWQuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
Q29udGV4dE10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5
TXRsLmgiCisgCisgbmFtZXNwYWNlIHJ4CisgeworQEAgLTIwLDEwICsyNSwxMDAgQEAKKyAKKyBT
aGFkZXJNdGw6On5TaGFkZXJNdGwoKSB7fQorIAorK2NsYXNzIFRyYW5zbGF0ZVRhc2sgOiBwdWJs
aWMgYW5nbGU6OkNsb3N1cmUKKyt7CisrICBwdWJsaWM6CisrICAgIFRyYW5zbGF0ZVRhc2soU2hI
YW5kbGUgaGFuZGxlLCBTaENvbXBpbGVPcHRpb25zIG9wdGlvbnMsIGNvbnN0IHN0ZDo6c3RyaW5n
ICZzb3VyY2UpCisrICAgICAgICA6IG1IYW5kbGUoaGFuZGxlKSwgbU9wdGlvbnMob3B0aW9ucyks
IG1Tb3VyY2Uoc291cmNlKSwgbVJlc3VsdChmYWxzZSkKKysgICAge30KKysKKysgICAgdm9pZCBv
cGVyYXRvcigpKCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgY29uc3QgY2hhciAqc291cmNl
ID0gbVNvdXJjZS5jX3N0cigpOworKyAgICAgICAgbVJlc3VsdCAgICAgICAgICAgID0gc2g6OkNv
bXBpbGUobUhhbmRsZSwgJnNvdXJjZSwgMSwgbU9wdGlvbnMpOworKyAgICB9CisrCisrICAgIGJv
b2wgZ2V0UmVzdWx0KCkgeyByZXR1cm4gbVJlc3VsdDsgfQorKworKyAgICBTaEhhbmRsZSBnZXRI
YW5kbGUoKSB7IHJldHVybiBtSGFuZGxlOyB9CisrCisrICBwcml2YXRlOgorKyAgICBTaEhhbmRs
ZSBtSGFuZGxlOworKyAgICBTaENvbXBpbGVPcHRpb25zIG1PcHRpb25zOworKyAgICBzdGQ6OnN0
cmluZyBtU291cmNlOworKyAgICBib29sIG1SZXN1bHQ7CisrfTsKKysKKytjbGFzcyBNVExXYWl0
YWJsZUNvbXBpbGVFdmVudEltcGwgZmluYWwgOiBwdWJsaWMgV2FpdGFibGVDb21waWxlRXZlbnQK
Kyt7CisrICBwdWJsaWM6CisrICAgIE1UTFdhaXRhYmxlQ29tcGlsZUV2ZW50SW1wbChTaGFkZXJN
dGwgKnNoYWRlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVk
X3B0cjxhbmdsZTo6V2FpdGFibGVFdmVudD4gd2FpdGFibGVFdmVudCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxUcmFuc2xhdGVUYXNrPiB0cmFuc2xh
dGVUYXNrKQorKyAgICAgICAgOiBXYWl0YWJsZUNvbXBpbGVFdmVudCh3YWl0YWJsZUV2ZW50KSwg
bVRyYW5zbGF0ZVRhc2sodHJhbnNsYXRlVGFzayksIG1TaGFkZXIoc2hhZGVyKQorKyAgICB7fQor
KworKyAgICBib29sIGdldFJlc3VsdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1UcmFuc2xhdGVUYXNr
LT5nZXRSZXN1bHQoKTsgfQorKworKyAgICBib29sIHBvc3RUcmFuc2xhdGUoc3RkOjpzdHJpbmcg
KmluZm9Mb2cpIG92ZXJyaWRlCisrICAgIHsKKysgICAgICAgIHNoOjpUU2hIYW5kbGVCYXNlICpi
YXNlICAgID0gc3RhdGljX2Nhc3Q8c2g6OlRTaEhhbmRsZUJhc2UgKj4obVRyYW5zbGF0ZVRhc2st
PmdldEhhbmRsZSgpKTsKKysgICAgICAgIGF1dG8gdHJhbnNsYXRvck1ldGFsRGlyZWN0ID0gYmFz
ZS0+Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJlY3QoKTsKKysgICAgICAgIGlmICh0cmFuc2xhdG9y
TWV0YWxEaXJlY3QgIT0gbnVsbHB0cikKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBDb3B5
IHJlZmxlY3Rpb24gZnJvbSB0cmFuc2xhdGlvbi4KKysgICAgICAgICAgICBtU2hhZGVyLT50cmFu
c2xhdG9yTWV0YWxSZWZsZWN0aW9uID0KKysgICAgICAgICAgICAgICAgKih0cmFuc2xhdG9yTWV0
YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKSk7CisrICAgICAgICAgICAg
dHJhbnNsYXRvck1ldGFsRGlyZWN0LT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCktPnJl
c2V0KCk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgfQorKworKyAg
cHJpdmF0ZToKKysgICAgc3RkOjpzaGFyZWRfcHRyPFRyYW5zbGF0ZVRhc2s+IG1UcmFuc2xhdGVU
YXNrOworKyAgICBTaGFkZXJNdGwgKm1TaGFkZXI7CisrfTsKKysKKytzdGQ6OnNoYXJlZF9wdHI8
V2FpdGFibGVDb21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGlsZUltcGxNdGwoCisrICAgIGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorKyAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpj
b21waWxlckluc3RhbmNlLAorKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmc291cmNlLAorKyAgICBT
aENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKQorK3sKKysjaWYgZGVmaW5lZChBTkdMRV9F
TkFCTEVfQVNTRVJUUykKKysgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFMSURBVEVfQVNUOwor
KyNlbmRpZgorKworKyAgICBhdXRvIHdvcmtlclRocmVhZFBvb2wgPSBjb250ZXh0LT5nZXRXb3Jr
ZXJUaHJlYWRQb29sKCk7CisrICAgIGF1dG8gdHJhbnNsYXRlVGFzayA9CisrICAgICAgICBzdGQ6
Om1ha2Vfc2hhcmVkPFRyYW5zbGF0ZVRhc2s+KGNvbXBpbGVySW5zdGFuY2UtPmdldEhhbmRsZSgp
LCBjb21waWxlT3B0aW9ucywgc291cmNlKTsKKysKKysgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFy
ZWQ8TVRMV2FpdGFibGVDb21waWxlRXZlbnRJbXBsPigKKysgICAgICAgIHRoaXMsIGFuZ2xlOjpX
b3JrZXJUaHJlYWRQb29sOjpQb3N0V29ya2VyVGFzayh3b3JrZXJUaHJlYWRQb29sLCB0cmFuc2xh
dGVUYXNrKSwKKysgICAgICAgIHRyYW5zbGF0ZVRhc2spOworK30KKysKKyBzdGQ6OnNoYXJlZF9w
dHI8V2FpdGFibGVDb21waWxlRXZlbnQ+IFNoYWRlck10bDo6Y29tcGlsZShjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6U2hDb21waWxlckluc3RhbmNlICpjb21waWxlckluc3RhbmNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNoQ29tcGlsZU9wdGlvbnMgb3B0aW9ucykKKyB7CisrICAgIENvbnRleHRNdGwgKmNvbnRl
eHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIGlmIChnZXRTdGF0ZSgpLmdldFNo
YWRlclR5cGUoKSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVydGV4ICYmCisrICAgICAgICAhY29udGV4
dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWRE
cmF3LmVuYWJsZWQpCisrICAgIHsKKysgICAgICAgIC8vIEVtdWxhdGUgZ2xfSW5zdGFuY2VJRAor
KyAgICAgICAgc2g6OlRTaEhhbmRsZUJhc2UgKmJhc2UgPSBzdGF0aWNfY2FzdDxzaDo6VFNoSGFu
ZGxlQmFzZSAqPihjb21waWxlckluc3RhbmNlLT5nZXRIYW5kbGUoKSk7CisrICAgICAgICBhdXRv
IHRyYW5zbGF0b3JNZXRhbERpcmVjdCA9IGJhc2UtPmdldEFzVHJhbnNsYXRvck1ldGFsRGlyZWN0
KCk7CisrICAgICAgICBpZiAodHJhbnNsYXRvck1ldGFsRGlyZWN0ID09IG51bGxwdHIpCisrICAg
ICAgICB7CisrICAgICAgICAgICAgYXV0byB0cmFuc2xhdG9yTWV0YWwgPSBzdGF0aWNfY2FzdDxz
aDo6VHJhbnNsYXRvck1ldGFsICo+KGJhc2UtPmdldEFzQ29tcGlsZXIoKSk7CisrICAgICAgICAg
ICAgdHJhbnNsYXRvck1ldGFsLT5lbmFibGVFbXVsYXRlZEluc3RhbmNlSUQodHJ1ZSk7CisrICAg
ICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgdHJhbnNsYXRv
ck1ldGFsRGlyZWN0LT5lbmFibGVFbXVsYXRlZEluc3RhbmNlSUQodHJ1ZSk7CisrICAgICAgICB9
CisrICAgIH0KKyAgICAgU2hDb21waWxlT3B0aW9ucyBjb21waWxlT3B0aW9ucyA9IFNIX0lOSVRJ
QUxJWkVfVU5JTklUSUFMSVpFRF9MT0NBTFM7CisgCisgICAgIGJvb2wgaXNXZWJHTCA9IGNvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS53ZWJnbENvbXBhdGliaWxpdHk7CitAQCAtMzMsOCArMTI4LDEx
IEBACisgICAgIH0KKyAKKyAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfQ0xBTVBfUE9JTlRfU0la
RTsKKysjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX01BQ0NBVEFMWVNUKQorKyAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9DTEFNUF9GUkFH
X0RFUFRIOworKyNlbmRpZgorIAorLSAgICByZXR1cm4gY29tcGlsZUltcGwoY29udGV4dCwgY29t
cGlsZXJJbnN0YW5jZSwgbVN0YXRlLmdldFNvdXJjZSgpLCBjb21waWxlT3B0aW9ucyB8IG9wdGlv
bnMpOworKyAgICByZXR1cm4gY29tcGlsZUltcGxNdGwoY29udGV4dCwgY29tcGlsZXJJbnN0YW5j
ZSwgZ2V0U3RhdGUoKS5nZXRTb3VyY2UoKSwgY29tcGlsZU9wdGlvbnMgfCBvcHRpb25zKTsKKyB9
CisgCisgc3RkOjpzdHJpbmcgU2hhZGVyTXRsOjpnZXREZWJ1Z0luZm8oKSBjb25zdAorZGlmZiAt
LWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLmggYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5oCitpbmRleCA5ZTg0Zjg4Li4wYWRjMzYw
IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaAor
KysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaAorQEAgLTI0LDcg
KzI0LDI3IEBAIG5hbWVzcGFjZSByeAorIAorIGNsYXNzIERpc3BsYXlNdGw7CisgCistY2xhc3Mg
U3VyZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlSW1wbAorK2NsYXNzIFN1cmZhY2VNdGxQcm90b2Nv
bCA6IHB1YmxpYyBTdXJmYWNlSW1wbAorK3sKKysgIHB1YmxpYzoKKysgICAgU3VyZmFjZU10bFBy
b3RvY29sKGNvbnN0IGVnbDo6U3VyZmFjZVN0YXRlICZzdGF0ZSkgOiBTdXJmYWNlSW1wbChzdGF0
ZSkge30KKysgICAgdmlydHVhbCBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0ICAgICAgPSAwOworKyAg
ICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVCdWZmZXIoKSBjb25zdCA9IDA7CisrCisrICAgIHZpcnR1
YWwgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gYmluZGluZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkltYWdlSW5kZXggJmltYWdlSW5kZXgs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
c2l6ZWkgc2FtcGxlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92
ZXJyaWRlID0gMDsKKysKKysgICAgdmlydHVhbCBib29sIGhhc1JvYnVzdFJlc291cmNlSW5pdCgp
IGNvbnN0ID0gMDsKKysgICAgdmlydHVhbCBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3
YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KSA9IDA7CisrICAgIHZpcnR1
YWwgYW5nbGU6OlJlc3VsdCBlbnN1cmVDdXJyZW50RHJhd2FibGVPYnRhaW5lZChjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwgYm9vbCAqbmV3RHJhd2FibGVPdXQpID0gMDsKKysgICAgdmlydHVh
bCBhbmdsZTo6UmVzdWx0IGVuc3VyZUNvbG9yVGV4dHVyZVJlYWR5Rm9yUmVhZFBpeGVscyhjb25z
dCBnbDo6Q29udGV4dCAqY29udGV4dCkgPSAwOworKyAgICB2aXJ0dWFsIGNvbnN0IG10bDo6VGV4
dHVyZVJlZiAmIGdldENvbG9yVGV4dHVyZSgpID0gMDsKKyt9OworKworK2NsYXNzIFN1cmZhY2VN
dGwgOiBwdWJsaWMgU3VyZmFjZU10bFByb3RvY29sCisgeworICAgcHVibGljOgorICAgICBTdXJm
YWNlTXRsKERpc3BsYXlNdGwgKmRpc3BsYXksCitAQCAtNjcsMTEgKzg3LDExIEBAIGNsYXNzIFN1
cmZhY2VNdGwgOiBwdWJsaWMgU3VyZmFjZUltcGwKKyAgICAgYW5nbGU6OlJlc3VsdCBpbml0aWFs
aXplQ29udGVudHMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZpbWFnZUluZGV4KSBv
dmVycmlkZTsKKyAKKy0gICAgY29uc3QgbXRsOjpUZXh0dXJlUmVmICZnZXRDb2xvclRleHR1cmUo
KSB7IHJldHVybiBtQ29sb3JUZXh0dXJlOyB9CisrICAgIGNvbnN0IG10bDo6VGV4dHVyZVJlZiAm
Z2V0Q29sb3JUZXh0dXJlKCkgb3ZlcnJpZGUgeyByZXR1cm4gbUNvbG9yVGV4dHVyZTsgfQorICAg
ICBjb25zdCBtdGw6OkZvcm1hdCAmZ2V0Q29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtQ29s
b3JGb3JtYXQ7IH0KKy0gICAgaW50IGdldFNhbXBsZXMoKSBjb25zdCB7IHJldHVybiBtU2FtcGxl
czsgfQorKyAgICBpbnQgZ2V0U2FtcGxlcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1TYW1w
bGVzOyB9CisgCistICAgIGJvb2wgaGFzUm9idXN0UmVzb3VyY2VJbml0KCkgY29uc3QgeyByZXR1
cm4gbVJvYnVzdFJlc291cmNlSW5pdDsgfQorKyAgICBib29sIGhhc1JvYnVzdFJlc291cmNlSW5p
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1Sb2J1c3RSZXNvdXJjZUluaXQ7IH0KKyAKKyAg
ICAgYW5nbGU6OlJlc3VsdCBnZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGJpbmRpbmcsCitAQCAtMTQ0LDEzICsxNjQsMTQgQEAgY2xhc3MgV2luZG93U3Vy
ZmFjZU10bCA6IHB1YmxpYyBTdXJmYWNlTXRsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIHNhbXBsZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5kZXJUYXJnZXQg
KipydE91dCkgb3ZlcnJpZGU7CisgCisrICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ3VycmVudERy
YXdhYmxlT2J0YWluZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworICAg
ICBhbmdsZTo6UmVzdWx0IGVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgKm5ld0RyYXdhYmxlT3V0IC8qKiBudWxsYWJsZSAqLyk7CisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2Fi
bGVPdXQgLyoqIG51bGxhYmxlICovKSBvdmVycmlkZTsKKyAKKyAgICAgLy8gRW5zdXJlIHRoZSB0
aGUgdGV4dHVyZSByZXR1cm5lZCBmcm9tIGdldENvbG9yVGV4dHVyZSgpIGlzIHJlYWR5IGZvciBn
bFJlYWRQaXhlbHMoKS4gVGhpcworICAgICAvLyBpbXBsaWNpdGx5IGNhbGxzIGVuc3VyZUN1cnJl
bnREcmF3YWJsZU9idGFpbmVkKCkuCistICAgIGFuZ2xlOjpSZXN1bHQgZW5zdXJlQ29sb3JUZXh0
dXJlUmVhZHlGb3JSZWFkUGl4ZWxzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKKy0KKysg
ICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVSZWFkeUZvclJlYWRQaXhlbHMoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRlOworKyAgICBib29sIHByZXNlcnZlQnVm
ZmVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbVJldGFpbkJ1ZmZlcjsgfQorICAgcHJpdmF0
ZToKKyAgICAgYW5nbGU6OlJlc3VsdCBzd2FwSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgb2J0YWluTmV4dERyYXdhYmxlKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0KTsKK0BAIC0xNjgsNiArMTg5LDggQEAgY2xhc3MgV2luZG93U3VyZmFjZU10
bCA6IHB1YmxpYyBTdXJmYWNlTXRsCisgICAgIC8vIGV2ZW50LiBXZSBkb24ndCB1c2UgbU1ldGFs
TGF5ZXIuZHJhd2FibGVTaXplIGRpcmVjdGx5IHNpbmNlIGl0IG1pZ2h0IGJlIGNoYW5nZWQgaW50
ZXJuYWxseSBieQorICAgICAvLyBtZXRhbCBydW50aW1lLgorICAgICBDR1NpemUgbUN1cnJlbnRL
bm93bkRyYXdhYmxlU2l6ZTsKKysKKysgICAgYm9vbCBtUmV0YWluQnVmZmVyID0gZmFsc2U7Cisg
fTsKKyAKKyAvLyBPZmZzY3JlZW4gc3VyZmFjZSwgYmFzZSBjbGFzcyBvZiBQQnVmZmVyLCBJT1N1
cmZhY2UuCitAQCAtMjEyLDM3ICsyMzUsNSBAQCBjbGFzcyBQQnVmZmVyU3VyZmFjZU10bCA6IHB1
YmxpYyBPZmZzY3JlZW5TdXJmYWNlTXRsCisgICAgIHZvaWQgc2V0Rml4ZWRIZWlnaHQoRUdMaW50
IGhlaWdodCkgb3ZlcnJpZGU7CisgfTsKKyAKKy0vLyBPZmZzY3JlZW4gY3JlYXRlZCBmcm9tIElP
U3VyZmFjZQorLWNsYXNzIElPU3VyZmFjZVN1cmZhY2VNdGwgOiBwdWJsaWMgT2Zmc2NyZWVuU3Vy
ZmFjZU10bAorLXsKKy0gIHB1YmxpYzoKKy0gICAgSU9TdXJmYWNlU3VyZmFjZU10bChEaXNwbGF5
TXRsICpkaXNwbGF5LAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6U3VyZmFj
ZVN0YXRlICZzdGF0ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIg
YnVmZmVyLAorLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFw
ICZhdHRyaWJzKTsKKy0gICAgfklPU3VyZmFjZVN1cmZhY2VNdGwoKSBvdmVycmlkZTsKKy0KKy0g
ICAgZWdsOjpFcnJvciBiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCist
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlLAorLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgYnVmZmVyKSBvdmVycmlkZTsKKy0gICAgZWds
OjpFcnJvciByZWxlYXNlVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIEVHTGlu
dCBidWZmZXIpIG92ZXJyaWRlOworLQorLSAgICBhbmdsZTo6UmVzdWx0IGdldEF0dGFjaG1lbnRS
ZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCistICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gYmluZGluZywKKy0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpJbWFnZUluZGV4ICZp
bWFnZUluZGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSBzYW1wbGVzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRnJhbWVidWZmZXJBdHRhY2htZW50UmVuZGVyVGFyZ2V0ICoqcnRPdXQpIG92ZXJyaWRl
OworLQorLSAgICBzdGF0aWMgYm9vbCBWYWxpZGF0ZUF0dHJpYnV0ZXMoRUdMQ2xpZW50QnVmZmVy
IGJ1ZmZlciwgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMpOworLQorLSAgcHJpdmF0
ZToKKy0gICAgYW5nbGU6OlJlc3VsdCBlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0KTsKKy0KKy0gICAgSU9TdXJmYWNlUmVmIG1JT1N1cmZhY2U7Cist
ICAgIE5TVUludGVnZXIgbUlPU3VyZmFjZVBsYW5lOworLSAgICBpbnQgbUlPU3VyZmFjZUZvcm1h
dElkeDsKKy19OworLQorIH0gIC8vIG5hbWVzcGFjZSByeAorLQorICNlbmRpZiAvKiBMSUJBTkdM
RV9SRU5ERVJFUl9NRVRBTF9TVVJGQUNFTVRMX0hfICovCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvU3VyZmFjZU10bC5tbQoraW5kZXggMzAzZmIxNi4uYzllZTI0YiAxMDA2NDQKKy0tLSBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TdXJmYWNlTXRsLm1tCisrKysgYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvU3VyZmFjZU10bC5tbQorQEAgLTMzLDU1ICszMywxOSBAQAor
IHsKKyAKKyAjZGVmaW5lIEFOR0xFX1RPX0VHTF9UUlkoRVhQUikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCistICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKytkbyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyt7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgaWYg
KEFOR0xFX1VOTElLRUxZKChFWFBSKSAhPSBhbmdsZTo6UmVzdWx0OjpDb250aW51ZSkpIFwKKyAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN1cmZhY2UoKTsgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKy0gICAgfSB3aGlsZSAoMCkKKyt9IHdoaWxlICgwKQorIAorIGNvbnN0
ZXhwciBhbmdsZTo6Rm9ybWF0SUQga0RlZmF1bHRGcmFtZUJ1ZmZlckRlcHRoRm9ybWF0SWQgICA9
IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUOworIGNvbnN0ZXhwciBhbmdsZTo6Rm9ybWF0SUQg
a0RlZmF1bHRGcmFtZUJ1ZmZlclN0ZW5jaWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6Uzhf
VUlOVDsKKyBjb25zdGV4cHIgYW5nbGU6OkZvcm1hdElEIGtEZWZhdWx0RnJhbWVCdWZmZXJEZXB0
aFN0ZW5jaWxGb3JtYXRJZCA9CisgICAgIGFuZ2xlOjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJ
TlQ7CisgCistc3RydWN0IElPU3VyZmFjZUZvcm1hdEluZm8KKy17CistICAgIEdMZW51bSBpbnRl
cm5hbEZvcm1hdDsKKy0gICAgR0xlbnVtIHR5cGU7CistICAgIHNpemVfdCBjb21wb25lbnRCeXRl
czsKKy0KKy0gICAgYW5nbGU6OkZvcm1hdElEIG5hdGl2ZUFuZ2xlRm9ybWF0SWQ7CistfTsKKy0K
Ky0vLyBjbGFuZy1mb3JtYXQgb2ZmCistLy8gTk9URShocWxlKTogU3VwcG9ydCBSMTZfVUlOVCBv
bmNlIEdMRVMzIGlzIGNvbXBsZXRlLgorLWNvbnN0ZXhwciBzdGQ6OmFycmF5PElPU3VyZmFjZUZv
cm1hdEluZm8sIDg+IGtJT1N1cmZhY2VGb3JtYXRzID0ge3sKKy0gICAge0dMX1JFRCwgICAgICBH
TF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDEsIGFuZ2xlOjpGb3JtYXRJRDo6UjhfVU5P
Uk19LAorLSAgICB7R0xfUkVELCAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAg
MiwgYW5nbGU6OkZvcm1hdElEOjpSMTZfVU5PUk19LAorLSAgICB7R0xfUkcsICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgMiwgYW5nbGU6OkZvcm1hdElEOjpSOEc4X1VOT1JN
fSwKKy0gICAge0dMX1JHLCAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgIDQs
IGFuZ2xlOjpGb3JtYXRJRDo6UjE2RzE2X1VOT1JNfSwKKy0gICAge0dMX1JHQiwgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgIDQsIGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThf
VU5PUk19LAorLSAgICB7R0xfQkdSQV9FWFQsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAg
ICAgNCwgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STX0sCistICAgIHtHTF9SR0JBLCAg
ICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICA4LCBhbmdsZTo6Rm9ybWF0SUQ6OlIx
NkcxNkIxNkExNl9GTE9BVH0sCistICAgIHtHTF9SR0IxMF9BMiwgR0xfVU5TSUdORURfSU5UXzJf
MTBfMTBfMTBfUkVWLCA0LCBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VOT1JNfSwKKy19
fTsKKy0vLyBjbGFuZy1mb3JtYXQgb24KKy0KKy1pbnQgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUpCisteworLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4oa0lPU3VyZmFjZUZvcm1hdHMuc2l6ZSgpKTsgKytp
KQorLSAgICB7CistICAgICAgICBjb25zdCBhdXRvICZmb3JtYXRJbmZvID0ga0lPU3VyZmFjZUZv
cm1hdHNbaV07CistICAgICAgICBpZiAoZm9ybWF0SW5mby5pbnRlcm5hbEZvcm1hdCA9PSBpbnRl
cm5hbEZvcm1hdCAmJiBmb3JtYXRJbmZvLnR5cGUgPT0gdHlwZSkKKy0gICAgICAgIHsKKy0gICAg
ICAgICAgICByZXR1cm4gaTsKKy0gICAgICAgIH0KKy0gICAgfQorLSAgICByZXR1cm4gLTE7Cist
fQorLQorIGFuZ2xlOjpSZXN1bHQgQ3JlYXRlT3JSZXNpemVUZXh0dXJlKGNvbnN0IGdsOjpDb250
ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG10bDo6Rm9ybWF0ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgd2lkdGgsCitAQCAtMTI4LDYgKzkyLDE5IEBAIGJvb2wgSXNGcmFtZUNhcHR1
cmVFbmFibGVkKCkKKyAjZW5kaWYKKyB9CisgCisrQU5HTEVfTVRMX1VOVVNFRAorK3N0ZDo6c3Ry
aW5nIEdldE1ldGFsQ2FwdHVyZUZpbGUoKQorK3sKKysjaWYgIUFOR0xFX01FVEFMX0ZSQU1FX0NB
UFRVUkVfRU5BQkxFRAorKyAgICByZXR1cm4gIiI7CisrI2Vsc2UKKysgICAgYXV0byB2YXIgICAg
ICAgICAgICAgICAgICAgPSBzdGQ6OmdldGVudigiQU5HTEVfTUVUQUxfRlJBTUVfQ0FQVFVSRV9G
SUxFIik7CisrICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gdmFyID8gdmFyIDogIiI7
CisrCisrICAgIHJldHVybiBmaWxlUGF0aDsKKysjZW5kaWYKKyt9CisrCisgQU5HTEVfTVRMX1VO
VVNFRAorIHNpemVfdCBNYXhBbGxvd2VkRnJhbWVDYXB0dXJlKCkKKyB7CitAQCAtMjAyLDYgKzE3
OSwyMSBAQCB2b2lkIFN0YXJ0RnJhbWVDYXB0dXJlKGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2Us
IGlkPE1UTENvbW1hbmRRdWV1ZT4gbWV0YWxDbWRRdQorICAgICB7CisgICAgICAgICBNVExDYXB0
dXJlRGVzY3JpcHRvciAqY2FwdHVyZURlc2NyaXB0b3IgPSBbW01UTENhcHR1cmVEZXNjcmlwdG9y
IGFsbG9jXSBpbml0XTsKKyAgICAgICAgIGNhcHR1cmVEZXNjcmlwdG9yLmNhcHR1cmVPYmplY3Qg
ICAgICAgICA9IG1ldGFsRGV2aWNlOworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZmlsZVBh
dGggICAgICAgICAgICAgID0gR2V0TWV0YWxDYXB0dXJlRmlsZSgpOworKyAgICAgICAgaWYgKGZp
bGVQYXRoICE9ICIiKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
IG51bWJlcmVkUGF0aCA9CisrICAgICAgICAgICAgICAgIGZpbGVQYXRoICsgc3RkOjp0b19zdHJp
bmcoZ0ZyYW1lQ2FwdHVyZWQgLSAxKSArICIuZ3B1dHJhY2UiOworKyAgICAgICAgICAgIGNhcHR1
cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uR1BVVHJhY2VE
b2N1bWVudDsKKysgICAgICAgICAgICBjYXB0dXJlRGVzY3JpcHRvci5vdXRwdXRVUkwgPQorKyAg
ICAgICAgICAgICAgICBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1N0cmluZyBzdHJpbmdXaXRo
VVRGOFN0cmluZzpudW1iZXJlZFBhdGguY19zdHIoKV0KKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpc0RpcmVjdG9yeTpmYWxzZV07CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAg
ICAgICB7CisrICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHBhdXNlIGV4ZWN1dGlvbiBvbmx5IGlm
IGFwcGxpY2F0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkIGluc2lkZSBYY29kZQorKyAgICAgICAgICAg
IGNhcHR1cmVEZXNjcmlwdG9yLmRlc3RpbmF0aW9uID0gTVRMQ2FwdHVyZURlc3RpbmF0aW9uRGV2
ZWxvcGVyVG9vbHM7CisrICAgICAgICB9CisgCisgICAgICAgICBOU0Vycm9yICplcnJvcjsKKyAg
ICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhEZXNjcmlwdG9yOmNh
cHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCitAQCAtMjExLDE0ICsyMDMsMTUgQEAgdm9p
ZCBTdGFydEZyYW1lQ2FwdHVyZShpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlLCBpZDxNVExDb21t
YW5kUXVldWU+IG1ldGFsQ21kUXUKKyAgICAgfQorICAgICBlbHNlCisgIyAgICBlbmRpZiAgLy8g
X19NQUNfMTBfMTUKKysgICAgICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDEwLjE1
LCAxMy4wLCAxMykpCisgICAgIHsKKy0gICAgICAgIGlmIChGcmFtZUNhcHR1cmVEZXZpY2VTY29w
ZSgpKQorLSAgICAgICAgeworLSAgICAgICAgICAgIFtjYXB0dXJlTWFuYWdlciBzdGFydENhcHR1
cmVXaXRoRGV2aWNlOm1ldGFsRGV2aWNlXTsKKy0gICAgICAgIH0KKy0gICAgICAgIGVsc2UKKysg
ICAgICAgIE1UTENhcHR1cmVEZXNjcmlwdG9yICpjYXB0dXJlRGVzY3JpcHRvciA9IFtbTVRMQ2Fw
dHVyZURlc2NyaXB0b3IgYWxsb2NdIGluaXRdOworKyAgICAgICAgY2FwdHVyZURlc2NyaXB0b3Iu
Y2FwdHVyZU9iamVjdCAgICAgICAgID0gbWV0YWxEZXZpY2U7CisrCisrICAgICAgICBOU0Vycm9y
ICplcnJvcjsKKysgICAgICAgIGlmICghW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhE
ZXNjcmlwdG9yOmNhcHR1cmVEZXNjcmlwdG9yIGVycm9yOiZlcnJvcl0pCisgICAgICAgICB7Cist
ICAgICAgICAgICAgW2NhcHR1cmVNYW5hZ2VyIHN0YXJ0Q2FwdHVyZVdpdGhDb21tYW5kUXVldWU6
bWV0YWxDbWRRdWV1ZV07CisrICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gc3RhcnQgY2Fw
dHVyZSwgZXJyb3IgJUAiLCBlcnJvcik7CisgICAgICAgICB9CisgICAgIH0KKyAjZW5kaWYgIC8v
IEFOR0xFX01FVEFMX0ZSQU1FX0NBUFRVUkVfRU5BQkxFRAorQEAgLTI0NSwxMSArMjM4LDEwIEBA
IHZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisgfQorIH0KKyAKKy0vLyBTdXJmYWNlTXRsIGltcGxl
bWVudGF0aW9uCisgU3VyZmFjZU10bDo6U3VyZmFjZU10bChEaXNwbGF5TXRsICpkaXNwbGF5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMp
CistICAgIDogU3VyZmFjZUltcGwoc3RhdGUpCisrICAgIDogU3VyZmFjZU10bFByb3RvY29sKHN0
YXRlKQorIHsKKyAgICAgbVJvYnVzdFJlc291cmNlSW5pdCA9CisgICAgICAgICBhdHRyaWJzLmdl
dChFR0xfUk9CVVNUX1JFU09VUkNFX0lOSVRJQUxJWkFUSU9OX0FOR0xFLCBFR0xfRkFMU0UpID09
IEVHTF9UUlVFOworQEAgLTY5Myw2ICs2ODUsMTAgQEAgdm9pZCBTdG9wRnJhbWVDYXB0dXJlKCkK
KyAgICAgcmV0dXJuIFN1cmZhY2VNdGw6OmdldEF0dGFjaG1lbnRSZW5kZXJUYXJnZXQoY29udGV4
dCwgYmluZGluZywgaW1hZ2VJbmRleCwgc2FtcGxlcywgcnRPdXQpOworIH0KKyAKKythbmdsZTo6
UmVzdWx0IFdpbmRvd1N1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorK3sKKysgICAgcmV0dXJuIGVuc3VyZUN1cnJlbnRE
cmF3YWJsZU9idGFpbmVkKGNvbnRleHQsIG51bGxwdHIpOworK30KKyBhbmdsZTo6UmVzdWx0IFdp
bmRvd1N1cmZhY2VNdGw6OmVuc3VyZUN1cnJlbnREcmF3YWJsZU9idGFpbmVkKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmV3RHJhd2FibGVPdXQpCisgeworQEAgLTk0
MywxNTcgKzkzOSw1IEBAIHZvaWQgU3RvcEZyYW1lQ2FwdHVyZSgpCisgICAgIG1TaXplLmhlaWdo
dCA9IGhlaWdodDsKKyB9CisgCistLy8gSU9TdXJmYWNlU3VyZmFjZU10bCBpbXBsZW1lbnRhdGlv
bi4KKy1JT1N1cmZhY2VTdXJmYWNlTXRsOjpJT1N1cmZhY2VTdXJmYWNlTXRsKERpc3BsYXlNdGwg
KmRpc3BsYXksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAorLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRyaWJ1dGVNYXAgJmF0dHJpYnMp
CistICAgIDogT2Zmc2NyZWVuU3VyZmFjZU10bChkaXNwbGF5LCBzdGF0ZSwgYXR0cmlicyksIG1J
T1N1cmZhY2UoKF9fYnJpZGdlIElPU3VyZmFjZVJlZikoYnVmZmVyKSkKKy17CistICAgIENGUmV0
YWluKG1JT1N1cmZhY2UpOworLQorLSAgICBtSU9TdXJmYWNlUGxhbmUgPSBzdGF0aWNfY2FzdDxp
bnQ+KGF0dHJpYnMuZ2V0KEVHTF9JT1NVUkZBQ0VfUExBTkVfQU5HTEUpKTsKKy0KKy0gICAgRUdM
QXR0cmliIGludGVybmFsRm9ybWF0ID0gYXR0cmlicy5nZXQoRUdMX1RFWFRVUkVfSU5URVJOQUxf
Rk9STUFUX0FOR0xFKTsKKy0gICAgRUdMQXR0cmliIHR5cGUgICAgICAgICAgID0gYXR0cmlicy5n
ZXQoRUdMX1RFWFRVUkVfVFlQRV9BTkdMRSk7CistICAgIG1JT1N1cmZhY2VGb3JtYXRJZHggPQor
LSAgICAgICAgRmluZElPU3VyZmFjZUZvcm1hdEluZGV4KHN0YXRpY19jYXN0PEdMZW51bT4oaW50
ZXJuYWxGb3JtYXQpLCBzdGF0aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsKKy0gICAgQVNTRVJUKG1J
T1N1cmZhY2VGb3JtYXRJZHggPj0gMCk7CistCistICAgIG1Db2xvckZvcm1hdCA9CistICAgICAg
ICBkaXNwbGF5LT5nZXRQaXhlbEZvcm1hdChrSU9TdXJmYWNlRm9ybWF0c1ttSU9TdXJmYWNlRm9y
bWF0SWR4XS5uYXRpdmVBbmdsZUZvcm1hdElkKTsKKy19CistSU9TdXJmYWNlU3VyZmFjZU10bDo6
fklPU3VyZmFjZVN1cmZhY2VNdGwoKQorLXsKKy0gICAgaWYgKG1JT1N1cmZhY2UgIT0gbnVsbHB0
cikKKy0gICAgeworLSAgICAgICAgQ0ZSZWxlYXNlKG1JT1N1cmZhY2UpOworLSAgICAgICAgbUlP
U3VyZmFjZSA9IG51bGxwdHI7CistICAgIH0KKy19CistCistZWdsOjpFcnJvciBJT1N1cmZhY2VT
dXJmYWNlTXRsOjpiaW5kVGV4SW1hZ2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRl
eHR1cmUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdM
aW50IGJ1ZmZlcikKKy17CistICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldElt
cGwoY29udGV4dCk7CistICAgIFN0YXJ0RnJhbWVDYXB0dXJlKGNvbnRleHRNdGwpOworLQorLSAg
ICAvLyBJbml0aWFsaXplIG9mZnNjcmVlbiB0ZXh0dXJlIGlmIG5lZWRlZDoKKy0gICAgQU5HTEVf
VE9fRUdMX1RSWShlbnN1cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnRleHQpKTsKKy0KKy0gICAg
cmV0dXJuIE9mZnNjcmVlblN1cmZhY2VNdGw6OmJpbmRUZXhJbWFnZShjb250ZXh0LCB0ZXh0dXJl
LCBidWZmZXIpOworLX0KKy0KKy1lZ2w6OkVycm9yIElPU3VyZmFjZVN1cmZhY2VNdGw6OnJlbGVh
c2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMaW50IGJ1ZmZlcikKKy17
CistICAgIGVnbDo6RXJyb3IgcmUgPSBPZmZzY3JlZW5TdXJmYWNlTXRsOjpyZWxlYXNlVGV4SW1h
Z2UoY29udGV4dCwgYnVmZmVyKTsKKy0gICAgU3RvcEZyYW1lQ2FwdHVyZSgpOworLSAgICByZXR1
cm4gcmU7CistfQorLQorLWFuZ2xlOjpSZXN1bHQgSU9TdXJmYWNlU3VyZmFjZU10bDo6Z2V0QXR0
YWNobWVudFJlbmRlclRhcmdldCgKKy0gICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCist
ICAgIEdMZW51bSBiaW5kaW5nLAorLSAgICBjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRl
eCwKKy0gICAgR0xzaXplaSBzYW1wbGVzLAorLSAgICBGcmFtZWJ1ZmZlckF0dGFjaG1lbnRSZW5k
ZXJUYXJnZXQgKipydE91dCkKKy17CistICAgIC8vIEluaXRpYWxpemUgb2Zmc2NyZWVuIHRleHR1
cmUgaWYgbmVlZGVkOgorLSAgICBBTkdMRV9UUlkoZW5zdXJlQ29sb3JUZXh0dXJlQ3JlYXRlZChj
b250ZXh0KSk7CistCistICAgIHJldHVybiBPZmZzY3JlZW5TdXJmYWNlTXRsOjpnZXRBdHRhY2ht
ZW50UmVuZGVyVGFyZ2V0KGNvbnRleHQsIGJpbmRpbmcsIGltYWdlSW5kZXgsIHNhbXBsZXMsCist
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJ0T3V0KTsKKy19CistCistYW5nbGU6OlJlc3VsdCBJT1N1cmZhY2VTdXJmYWNlTXRsOjplbnN1
cmVDb2xvclRleHR1cmVDcmVhdGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQorLXsKKy0g
ICAgaWYgKG1Db2xvclRleHR1cmUpCistICAgIHsKKy0gICAgICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKy0gICAgfQorLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRs
OjpHZXRJbXBsKGNvbnRleHQpOworLSAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorLSAgICB7Cist
ICAgICAgICBhdXRvIHRleERlc2MgPQorLSAgICAgICAgICAgIFtNVExUZXh0dXJlRGVzY3JpcHRv
ciB0ZXh0dXJlMkREZXNjcmlwdG9yV2l0aFBpeGVsRm9ybWF0Om1Db2xvckZvcm1hdC5tZXRhbEZv
cm1hdAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoOm1TaXplLndpZHRoCistICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6bVNpemUuaGVpZ2h0
CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtaXBtYXBwZWQ6Tk9dOworLQorLSAgICAgICAgdGV4RGVzYy51c2FnZSA9IE1UTFRleHR1
cmVVc2FnZVNoYWRlclJlYWQgfCBNVExUZXh0dXJlVXNhZ2VSZW5kZXJUYXJnZXQ7CistCistICAg
ICAgICBpZDxNVExUZXh0dXJlPiB0ZXh0dXJlID0KKy0gICAgICAgICAgICBbY29udGV4dE10bC0+
Z2V0TWV0YWxEZXZpY2UoKSBuZXdUZXh0dXJlV2l0aERlc2NyaXB0b3I6dGV4RGVzYworLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc3Vy
ZmFjZTptSU9TdXJmYWNlCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsYW5lOm1JT1N1cmZhY2VQbGFuZV07CistCistICAgICAg
ICBtQ29sb3JUZXh0dXJlID0gbXRsOjpUZXh0dXJlOjpNYWtlRnJvbU1ldGFsKFt0ZXh0dXJlIEFO
R0xFX01UTF9BVVRPUkVMRUFTRV0pOworLSAgICB9CistCistICAgIG1Db2xvclJlbmRlclRhcmdl
dC5zZXQobUNvbG9yVGV4dHVyZSwgbXRsOjprWmVyb05hdGl2ZU1pcExldmVsLCAwLCBtQ29sb3JG
b3JtYXQpOworLQorLSAgICBpZiAoa0lPU3VyZmFjZUZvcm1hdHNbbUlPU3VyZmFjZUZvcm1hdElk
eF0uaW50ZXJuYWxGb3JtYXQgPT0gR0xfUkdCKQorLSAgICB7CistICAgICAgICAvLyBUaGlzIGZv
cm1hdCBoYXMgZW11bGF0ZWQgYWxwaGEgY2hhbm5lbC4gSW5pdGlhbGl6ZSB0ZXh0dXJlJ3MgYWxw
aGEgY2hhbm5lbCB0byAxLjAuCistICAgICAgICBjb25zdCBtdGw6OkZvcm1hdCAmcmdiQ2xlYXJG
b3JtYXQgPQorLSAgICAgICAgICAgIGNvbnRleHRNdGwtPmdldFBpeGVsRm9ybWF0KGFuZ2xlOjpG
b3JtYXRJRDo6UjhHOEI4X1VOT1JNKTsKKy0gICAgICAgIEFOR0xFX1RSWShtdGw6OkluaXRpYWxp
emVUZXh0dXJlQ29udGVudHNHUFUoCistICAgICAgICAgICAgY29udGV4dCwgbUNvbG9yVGV4dHVy
ZSwgcmdiQ2xlYXJGb3JtYXQsCistICAgICAgICAgICAgbXRsOjpJbWFnZU5hdGl2ZUluZGV4OjpG
cm9tQmFzZVplcm9HTEluZGV4KGdsOjpJbWFnZUluZGV4OjpNYWtlMkQoMCkpLAorLSAgICAgICAg
ICAgIE1UTENvbG9yV3JpdGVNYXNrQWxwaGEpKTsKKy0KKy0gICAgICAgIC8vIERpc2FibGUgc3Vi
c2VxdWVudCByZW5kZXJpbmcgdG8gYWxwaGEgY2hhbm5lbC4KKy0gICAgICAgIG1Db2xvclRleHR1
cmUtPnNldENvbG9yV3JpdGFibGVNYXNrKE1UTENvbG9yV3JpdGVNYXNrQWxsICYgKH5NVExDb2xv
cldyaXRlTWFza0FscGhhKSk7CistICAgIH0KKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworLX0KKy0KKy0vLyBzdGF0aWMKKy1ib29sIElPU3VyZmFjZVN1cmZhY2VNdGw6
OlZhbGlkYXRlQXR0cmlidXRlcyhFR0xDbGllbnRCdWZmZXIgYnVmZmVyLAorLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFw
ICZhdHRyaWJzKQorLXsKKy0gICAgSU9TdXJmYWNlUmVmIGlvU3VyZmFjZSA9IChfX2JyaWRnZSBJ
T1N1cmZhY2VSZWYpKGJ1ZmZlcik7CistCistICAgIC8vIFRoZSBwbGFuZSBtdXN0IGV4aXN0IGZv
ciB0aGlzIElPU3VyZmFjZS4gSU9TdXJmYWNlR2V0UGxhbmVDb3VudCBjYW4gcmV0dXJuIDAgZm9y
IG5vbi1wbGFuYXIKKy0gICAgLy8gaW9TdXJmYWNlcyBidXQgd2Ugd2lsbCB0cmVhdCBub24tcGxh
bmFyIGxpa2UgaXQgaXMgYSBzaW5nbGUgcGxhbmUuCistICAgIHNpemVfdCBzdXJmYWNlUGxhbmVD
b3VudCA9IHN0ZDo6bWF4KHNpemVfdCgxKSwgSU9TdXJmYWNlR2V0UGxhbmVDb3VudChpb1N1cmZh
Y2UpKTsKKy0gICAgRUdMQXR0cmliIHBsYW5lICAgICAgICAgID0gYXR0cmlicy5nZXQoRUdMX0lP
U1VSRkFDRV9QTEFORV9BTkdMRSk7CistICAgIGlmIChwbGFuZSA8IDAgfHwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihwbGFuZSkgPj0gc3VyZmFjZVBsYW5lQ291bnQpCistICAgIHsKKy0gICAgICAgIHJl
dHVybiBmYWxzZTsKKy0gICAgfQorLQorLSAgICAvLyBUaGUgd2lkdGggaGVpZ2h0IHNwZWNpZmll
ZCBtdXN0IGJlIGF0IGxlYXN0ICgxLCAxKSBhbmQgYXQgbW9zdCB0aGUgcGxhbmUgc2l6ZQorLSAg
ICBFR0xBdHRyaWIgd2lkdGggID0gYXR0cmlicy5nZXQoRUdMX1dJRFRIKTsKKy0gICAgRUdMQXR0
cmliIGhlaWdodCA9IGF0dHJpYnMuZ2V0KEVHTF9IRUlHSFQpOworLSAgICBpZiAod2lkdGggPD0g
MCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHdpZHRoKSA+IElPU3VyZmFjZUdldFdpZHRoT2ZQbGFu
ZShpb1N1cmZhY2UsIHBsYW5lKSB8fAorLSAgICAgICAgaGVpZ2h0IDw9IDAgfHwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihoZWlnaHQpID4gSU9TdXJmYWNlR2V0SGVpZ2h0T2ZQbGFuZShpb1N1cmZhY2Us
IHBsYW5lKSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9CistCistICAg
IC8vIEZpbmQgdGhpcyBJT1N1cmZhY2UgZm9ybWF0CistICAgIEVHTEF0dHJpYiBpbnRlcm5hbEZv
cm1hdCA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX0lOVEVSTkFMX0ZPUk1BVF9BTkdMRSk7Cist
ICAgIEVHTEF0dHJpYiB0eXBlICAgICAgICAgICA9IGF0dHJpYnMuZ2V0KEVHTF9URVhUVVJFX1RZ
UEVfQU5HTEUpOworLQorLSAgICBpbnQgZm9ybWF0SW5kZXggPQorLSAgICAgICAgRmluZElPU3Vy
ZmFjZUZvcm1hdEluZGV4KHN0YXRpY19jYXN0PEdMZW51bT4oaW50ZXJuYWxGb3JtYXQpLCBzdGF0
aWNfY2FzdDxHTGVudW0+KHR5cGUpKTsKKy0KKy0gICAgaWYgKGZvcm1hdEluZGV4IDwgMCkKKy0g
ICAgeworLSAgICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9CistCistICAgIC8vIENoZWNrIHRo
YXQgdGhlIGZvcm1hdCBtYXRjaGVzIHRoaXMgSU9TdXJmYWNlIHBsYW5lCistICAgIGlmIChJT1N1
cmZhY2VHZXRCeXRlc1BlckVsZW1lbnRPZlBsYW5lKGlvU3VyZmFjZSwgcGxhbmUpICE9CistICAg
ICAgICBrSU9TdXJmYWNlRm9ybWF0c1tmb3JtYXRJbmRleF0uY29tcG9uZW50Qnl0ZXMpCistICAg
IHsKKy0gICAgICAgIHJldHVybiBmYWxzZTsKKy0gICAgfQorLQorLSAgICByZXR1cm4gdHJ1ZTsK
Ky19CisgCisgfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5j
TXRsLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5oCitpbmRleCA2MmY5
NmVlLi5mNGJjYWU5IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5
bmNNdGwuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwuaAorQEAg
LTEsNSArMSw1IEBACisgLy8KKy0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKyAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCitAQCAtMzMsNyArMzMs
NyBAQCBuYW1lc3BhY2UgbXRsCisgCisgLy8gQ29tbW9uIGNsYXNzIHRvIGJlIHVzZWQgYnkgYm90
aCBTeW5jSW1wbCBhbmQgRUdMU3luY0ltcGwuCisgLy8gTk9URTogU2hhcmVkRXZlbnQgaXMgb25s
eSBkZWNsYXJlZCBvbiBpT1MgMTIuMCsgb3IgbWFjIDEwLjE0KworLSNpZiBBTkdMRV9NVExfRVZF
TlRfQVZBSUxBQkxFCisrI2lmIGRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01B
Q18xMF8xNCkKKyBjbGFzcyBTeW5jCisgeworICAgcHVibGljOgorQEAgLTU5LDcgKzU5LDcgQEAg
Y2xhc3MgU3luYworICAgICBzdGQ6OnNoYXJlZF9wdHI8c3RkOjpjb25kaXRpb25fdmFyaWFibGU+
IG1DdjsKKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bXV0ZXg+IG1Mb2NrOworIH07CistI2Vs
c2UgICAvLyAjaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJMRQorKyNlbHNlICAgLy8gI2lmIGRl
ZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgZGVmaW5lZChfX01BQ18xMF8xNCkKKyBjbGFzcyBTeW5j
CisgeworICAgcHVibGljOgorQEAgLTkwLDcgKzkwLDcgQEAgY2xhc3MgU3luYworICAgICAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisgICAgIH0KKyB9OworLSNlbmRpZiAgLy8gI2lm
IEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUKKysjZW5kaWYgIC8vICNpZiBkZWZpbmVkKF9fSVBI
T05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCisgfSAgLy8gbmFtZXNwYWNlIG10bAor
IAorIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMgRmVuY2VOVkltcGwKK0BAIC05OCw5ICs5OCw3
IEBAIGNsYXNzIEZlbmNlTlZNdGwgOiBwdWJsaWMgRmVuY2VOVkltcGwKKyAgIHB1YmxpYzoKKyAg
ICAgRmVuY2VOVk10bCgpOworICAgICB+RmVuY2VOVk10bCgpIG92ZXJyaWRlOworLQorICAgICB2
b2lkIG9uRGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CistCisg
ICAgIGFuZ2xlOjpSZXN1bHQgc2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGVudW0g
Y29uZGl0aW9uKSBvdmVycmlkZTsKKyAgICAgYW5nbGU6OlJlc3VsdCB0ZXN0KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBHTGJvb2xlYW4gKm91dEZpbmlzaGVkKSBvdmVycmlkZTsKKyAgICAg
YW5nbGU6OlJlc3VsdCBmaW5pc2goY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpIG92ZXJyaWRl
OworQEAgLTE1Miw2ICsxNTAsOCBAQCBjbGFzcyBFR0xTeW5jTXRsIGZpbmFsIDogcHVibGljIEVH
TFN5bmNJbXBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xpbnQgZmxhZ3MpIG92ZXJy
aWRlOworICAgICBlZ2w6OkVycm9yIGdldFN0YXR1cyhjb25zdCBlZ2w6OkRpc3BsYXkgKmRpc3Bs
YXksIEVHTGludCAqb3V0U3RhdHVzKSBvdmVycmlkZTsKKyAKKysgICAgZWdsOjpFcnJvciBkdXBO
YXRpdmVGZW5jZUZEKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSwgRUdMaW50ICpyZXN1bHQp
IGNvbnN0IG92ZXJyaWRlOworKworICAgcHJpdmF0ZToKKyAgICAgbXRsOjpTeW5jIG1TeW5jOwor
IH07CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N5bmNNdGwubW0g
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQoraW5kZXggZGZmODAwMy4u
ZjhmM2VlNiAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRs
Lm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvU3luY010bC5tbQorQEAgLTEs
NSArMSw1IEBACisgLy8KKy0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKyAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCitAQCAtMjIsNyArMjIsNyBA
QAorIG5hbWVzcGFjZSBtdGwKKyB7CisgLy8gU2hhcmVkRXZlbnQgaXMgb25seSBhdmFpbGFibGUg
b24gaU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKKy0jaWYgQU5HTEVfTVRMX0VWRU5UX0FWQUlMQUJM
RQorKyNpZiBkZWZpbmVkKF9fSVBIT05FXzEyXzApIHx8IGRlZmluZWQoX19NQUNfMTBfMTQpCisg
U3luYzo6U3luYygpIHt9CisgU3luYzo6flN5bmMoKSB7fQorIAorQEAgLTg3LDcgKzg3LDcgQEAK
KyAgICAgLy8gb25EZXN0cm95KCksIGJ1dCB0aGUgY2FsbGJhY2sgbWlnaHQgc3RpbGwgbm90IGJl
IGZpcmVkIHlldC4KKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxl
PiBjdlJlZiA9IG1DdjsKKyAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6bXV0ZXg+IGxvY2tSZWYg
ICAgICAgICAgICA9IG1Mb2NrOworLQorKyNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCisg
ICAgIEF1dG9PYmpDT2JqPE1UTFNoYXJlZEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPQor
ICAgICAgICAgY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRPckNyZWF0ZVNoYXJlZEV2ZW50
TGlzdGVuZXIoKTsKKyAgICAgW21NZXRhbFNoYXJlZEV2ZW50LmdldCgpIG5vdGlmeUxpc3RlbmVy
OmV2ZW50TGlzdGVuZXIKK0BAIC0xMDYsNiArMTA2LDcgQEAKKyAKKyAgICAgQVNTRVJUKG1NZXRh
bFNoYXJlZEV2ZW50LmdldCgpLnNpZ25hbGVkVmFsdWUgPj0gbVNldENvdW50ZXIpOworICAgICAq
b3V0UmVzdWx0ID0gR0xfQ09ORElUSU9OX1NBVElTRklFRDsKKysjZW5kaWYKKyAKKyAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KK0BAIC0xMTgsNyArMTE5LDcgQEAKKyAg
ICAgKnNpZ25hbGVkID0gbU1ldGFsU2hhcmVkRXZlbnQuZ2V0KCkuc2lnbmFsZWRWYWx1ZSA+PSBt
U2V0Q291bnRlcjsKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKy0j
ZW5kaWYgIC8vICNpZiBBTkdMRV9NVExfRVZFTlRfQVZBSUxBQkxFCisrI2VuZGlmICAvLyAjaWYg
ZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0KQorIH0gIC8vIG5h
bWVzcGFjZSBtdGwKKyAKKyAvLyBGZW5jZU5WTXRsIGltcGxlbWVudGF0aW9uCitAQCAtMTI4LDcg
KzEyOSw4IEBACisgCisgdm9pZCBGZW5jZU5WTXRsOjpvbkRlc3Ryb3koY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpCisgeworLSAgICBtU3luYy5vbkRlc3Ryb3koKTsKKysgICAgVU5JTVBMRU1F
TlRFRCgpOworKyAgICByZXR1cm47CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgRmVuY2VOVk10bDo6
c2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gY29uZGl0aW9uKQorQEAgLTMw
Nyw0ICszMDksMTAgQEAKKyAgICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOworIH0KKyAKKytlZ2w6
OkVycm9yIEVHTFN5bmNNdGw6OmR1cE5hdGl2ZUZlbmNlRkQoY29uc3QgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5LCBFR0xpbnQgKnJlc3VsdCkgY29uc3QKKyt7CisrICAgIFVOUkVBQ0hBQkxFKCk7Cisr
ICAgIHJldHVybiBlZ2w6OkVnbEJhZERpc3BsYXkoKTsKKyt9CisrCisgfQorZGlmZiAtLWdpdCBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLmggYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5oCitpbmRleCA1YzIxNDFiLi41ZjRiMmQ0IDEwMDY0
NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaAorKysrIGIv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwuaAorQEAgLTE1LDkgKzE1LDkg
QEAKKyAjaW5jbHVkZSAiY29tbW9uL1BhY2tlZEVudW1zLmgiCisgI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL1RleHR1cmVJbXBsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL1JlbmRlclRhcmdldE10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9TdXJmYWNlTXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9j
b21tYW5kX2J1ZmZlci5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
cmVzb3VyY2VzLmgiCistCisgbmFtZXNwYWNlIHJ4CisgeworIAorQEAgLTMyLDYgKzMyLDggQEAg
Y2xhc3MgVGV4dHVyZU10bCA6IHB1YmxpYyBUZXh0dXJlSW1wbAorIHsKKyAgIHB1YmxpYzoKKyAg
ICAgVGV4dHVyZU10bChjb25zdCBnbDo6VGV4dHVyZVN0YXRlICZzdGF0ZSk7CisrICAgIC8vIFRl
eHR1cmUgIHZpZXcKKysgICAgVGV4dHVyZU10bChjb25zdCBUZXh0dXJlTXRsICZtdGwsIEdMZW51
bSBmb3JtYXQpOworICAgICB+VGV4dHVyZU10bCgpIG92ZXJyaWRlOworICAgICB2b2lkIG9uRGVz
dHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkgb3ZlcnJpZGU7CisgCitAQCAtMTkzLDYg
KzE5NSw3IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJsaWMgVGV4dHVyZUltcGwKKyAgICAgSW1h
Z2VEZWZpbml0aW9uTXRsICZnZXRJbWFnZURlZmluaXRpb24oY29uc3QgZ2w6OkltYWdlSW5kZXgg
JmltYWdlSW5kZXgpOworICAgICBSZW5kZXJUYXJnZXRNdGwgJmdldFJlbmRlclRhcmdldChjb25z
dCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCk7CisgICAgIGJvb2wgaXNJbmRleFdpdGhpbk1p
bk1heExldmVscyhjb25zdCBnbDo6SW1hZ2VJbmRleCAmaW1hZ2VJbmRleCkgY29uc3Q7CisrICAg
IG10bDo6VGV4dHVyZVJlZiAmZ2V0SW1wbGljaXRNU1RleHR1cmUoY29uc3QgZ2w6OkltYWdlSW5k
ZXggJmltYWdlSW5kZXgpOworIAorICAgICAvLyBJZiBsZXZlbHMgPSAwLCB0aGlzIGZ1bmN0aW9u
IHdpbGwgY3JlYXRlIGZ1bGwgbWlwbWFwcyB0ZXh0dXJlLgorICAgICBhbmdsZTo6UmVzdWx0IHNl
dFN0b3JhZ2VJbXBsKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorQEAgLTMxMiw4ICszMTUs
OSBAQCBjbGFzcyBUZXh0dXJlTXRsIDogcHVibGljIFRleHR1cmVJbXBsCisgICAgIGFuZ2xlOjpS
ZXN1bHQgZ2VuZXJhdGVNaXBtYXBDUFUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpOworIAor
ICAgICBtdGw6OkZvcm1hdCBtRm9ybWF0OworKyAgICBTdXJmYWNlTXRsUHJvdG9jb2wgKm1Cb3Vu
ZFN1cmZhY2UgPSBuaWw7CisgICAgIC8vIFRoZSByZWFsIHRleHR1cmUgdXNlZCBieSBNZXRhbCBk
cmF3IGNhbGxzLgorLSAgICBtdGw6OlRleHR1cmVSZWYgbU5hdGl2ZVRleHR1cmU7CisrICAgIG10
bDo6VGV4dHVyZVJlZiBtTmF0aXZlVGV4dHVyZSAgICAgICAgID0gbmlsOworICAgICBpZDxNVExT
YW1wbGVyU3RhdGU+IG1NZXRhbFNhbXBsZXJTdGF0ZSA9IG5pbDsKKyAKKyAgICAgLy8gTnVtYmVy
IG9mIHNsaWNlcworQEAgLTMyMywxOCArMzI3LDE0IEBAIGNsYXNzIFRleHR1cmVNdGwgOiBwdWJs
aWMgVGV4dHVyZUltcGwKKyAgICAgLy8gT25jZSB0aGUgaW1hZ2VzIGFycmF5IGlzIGNvbXBsZXRl
LCB0aGV5IHdpbGwgYmUgdHJhbnNmZXJyZWQgdG8gcmVhbCB0ZXh0dXJlIG9iamVjdC4KKyAgICAg
Ly8gTk9URToKKyAgICAgLy8gIC0gVGhlIHNlY29uZCBkaW1lbnNpb24gaXMgaW5kZXhlZCBieSBj
b25maWd1cmVkIGJhc2UgbGV2ZWwgKyBhY3R1YWwgbmF0aXZlIGxldmVsCistICAgIC8vICAtIEZv
ciBDdWJlIG1hcCwgdGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYgZW50cmllcyBpbiB0aGUgbVRleElt
YWdlRGVmcyB0YWJsZSwgb25lIGZvciBlYWNoCistICAgIC8vICBmYWNlLiBUaGlzIGlzIGJlY2F1
c2UgdGhlIEN1YmUgbWFwJ3MgaW1hZ2UgaXMgZGVmaW5lZCBwZXIgZmFjZSAmIHBlciBsZXZlbC4K
KysgICAgLy8gIC0gRm9yIEN1YmUgbWFwLCB0aGVyZSB3aWxsIGJlIGF0IG1vc3QgNiBlbnRyaWVz
IGluIHRoZSBtYXAgdGFibGUsIG9uZSBmb3IgZWFjaCBmYWNlLiBUaGlzIGlzCisrICAgIC8vICBi
ZWNhdXNlIHRoZSBDdWJlIG1hcCdzIGltYWdlIGlzIGRlZmluZWQgcGVyIGZhY2UgJiBwZXIgbGV2
ZWwuCisgICAgIC8vICAtIEZvciBvdGhlciB0ZXh0dXJlIHR5cGVzLCB0aGVyZSB3aWxsIGJlIG9u
bHkgb25lIGVudHJ5IGluIHRoZSBtYXAgdGFibGUuIEFsbCBvdGhlciB0ZXh0dXJlcworICAgICAv
LyAgZXhjZXB0IEN1YmUgbWFwIGhhcyB0ZXh0dXJlIGltYWdlIGRlZmluZWQgcGVyIGxldmVsIChh
bGwgc2xpY2VzIGluY2x1ZGVkKS4KKysgICAgLy8gIC0gVGhlc2UgdGhyZWUgdmFyaWFibGVzJyBz
ZWNvbmQgZGltZW5zaW9uIGFyZSBpbmRleGVkIGJ5IGltYWdlIGluZGV4IChiYXNlIGxldmVsIGlu
Y2x1ZGVkKS4KKyAgICAgc3RkOjptYXA8aW50LCBnbDo6VGV4TGV2ZWxBcnJheTxJbWFnZURlZmlu
aXRpb25NdGw+PiBtVGV4SW1hZ2VEZWZzOworLQorLSAgICAvLyBSZW5kZXIgVGFyZ2V0IHBlciBz
bGljZS9kZXB0aC9jdWJlIGZhY2UuCistICAgIC8vIC0gRm9yIDJEIHRleHR1cmU6IFRoZXJlIHdp
bGwgYmUgb25lIGtleSBlbnRyeSBpbiB0aGUgbWFwLgorLSAgICAvLyAtIEZvciBDdWJlIG1hcDog
VGhlcmUgd2lsbCBiZSBhdCBtb3N0IDYga2V5IGVudHJpZXMuCistICAgIC8vIC0gRm9yIGFycmF5
LzNEIHRleHR1cmU6IFRoZXJlIHdpbGwgYmUgYXQgbW9zdCBzbGljZXMvZGVwdGhzIG51bWJlciBv
ZiBrZXkgZW50cmllcy4KKy0gICAgLy8gLSBUaGUgc2Vjb25kIGRpbWVuc2lvbiBpcyBpbmRleGVk
IGJ5IGNvbmZpZ3VyZWQgYmFzZSBsZXZlbCArIGFjdHVhbCBuYXRpdmUgbGV2ZWwKKyAgICAgc3Rk
OjptYXA8aW50LCBnbDo6VGV4TGV2ZWxBcnJheTxSZW5kZXJUYXJnZXRNdGw+PiBtUGVyTGF5ZXJS
ZW5kZXJUYXJnZXRzOworKyAgICBzdGQ6Om1hcDxpbnQsIGdsOjpUZXhMZXZlbEFycmF5PG10bDo6
VGV4dHVyZVJlZj4+IG1JbXBsaWNpdE1TVGV4dHVyZXM7CisgCisgICAgIC8vIE1pcG1hcCB2aWV3
cyBhcmUgaW5kZXhlZCBieSBuYXRpdmUgbGV2ZWwgKGlnbm9yZWQgYmFzZSBsZXZlbCk6CisgICAg
IG10bDo6TmF0aXZlVGV4TGV2ZWxBcnJheSBtTmF0aXZlTGV2ZWxWaWV3czsKK2RpZmYgLS1naXQg
YS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVGV4dHVyZU10bC5tbSBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tCitpbmRleCA2MjNjMTA0Li4zYjFjOGFmIDEw
MDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RleHR1cmVNdGwubW0KKysr
KyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UZXh0dXJlTXRsLm1tCitAQCAtMjAsOCAr
MjAsOCBAQAorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgi
CisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwuaCIKKysjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9TdXJmYWNlU3VyZmFjZU10bC5oIgorICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TYW1wbGVyTXRsLmgiCistI2luY2x1ZGUgImxp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1cmZhY2VNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5oIgorQEAgLTUzNCw2ICs1MzQsMTAgQEAgR0xlbnVtIE92ZXJyaWRl
U3dpenpsZVZhbHVlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorIAorIGFuZ2xlOjpSZXN1
bHQgVGV4dHVyZU10bDo6ZW5zdXJlVGV4dHVyZUNyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQpCisgeworKyAgICBpZiAobUJvdW5kU3VyZmFjZSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICB9CisgICAgIGlmIChtTmF0aXZlVGV4
dHVyZSkKKyAgICAgeworICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwor
QEAgLTEyMDcsMjUgKzEyMTEsMTUgQEAgR0xlbnVtIE92ZXJyaWRlU3dpenpsZVZhbHVlKGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0LAorIAorIGFuZ2xlOjpSZXN1bHQgVGV4dHVyZU10bDo6Ymlu
ZFRleEltYWdlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OlN1cmZhY2UgKnN1cmZh
Y2UpCisgeworLSAgICByZWxlYXNlVGV4dHVyZSh0cnVlKTsKKy0KKy0gICAgYXV0byBwQnVmZmVy
ICAgICA9IEdldEltcGxBczxPZmZzY3JlZW5TdXJmYWNlTXRsPihzdXJmYWNlKTsKKy0gICAgbU5h
dGl2ZVRleHR1cmUgICA9IHBCdWZmZXItPmdldENvbG9yVGV4dHVyZSgpOworLSAgICBtRm9ybWF0
ICAgICAgICAgID0gcEJ1ZmZlci0+Z2V0Q29sb3JGb3JtYXQoKTsKKy0gICAgZ2w6OkV4dGVudHMg
c2l6ZSA9IG1OYXRpdmVUZXh0dXJlLT5zaXplQXQwKCk7CistICAgIG1Jc1BvdzIgICAgICAgICAg
PSBnbDo6aXNQb3cyKHNpemUud2lkdGgpICYmIGdsOjppc1BvdzIoc2l6ZS5oZWlnaHQpICYmIGds
Ojppc1BvdzIoc2l6ZS5kZXB0aCk7CistICAgIEFOR0xFX1RSWShlbnN1cmVTYW1wbGVyU3RhdGVD
cmVhdGVkKGNvbnRleHQpKTsKKy0KKy0gICAgLy8gVGVsbCBjb250ZXh0IHRvIHJlYmluZCB0ZXh0
dXJlcworLSAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQp
OworLSAgICBjb250ZXh0TXRsLT5pbnZhbGlkYXRlQ3VycmVudFRleHR1cmVzKCk7CistCisrICAg
IElPU3VyZmFjZVN1cmZhY2VNdGwgKnN1cmZhY2VNdGwgPSAoSU9TdXJmYWNlU3VyZmFjZU10bCAq
KW10bDo6R2V0SW1wbChzdXJmYWNlKTsKKysgICAgbUJvdW5kU3VyZmFjZSAgICAgICAgICAgICAg
ICAgICA9IHN1cmZhY2VNdGw7CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
KyB9CisgCisgYW5nbGU6OlJlc3VsdCBUZXh0dXJlTXRsOjpyZWxlYXNlVGV4SW1hZ2UoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworLSAgICByZWxlYXNlVGV4dHVyZSh0cnVlKTsKKysg
ICAgbUJvdW5kU3VyZmFjZSA9IG5pbDsKKysKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworIH0KKyAKK0BAIC0xMjM1LDYgKzEyMjksMTIgQEAgR0xlbnVtIE92ZXJyaWRlU3dp
enpsZVZhbHVlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHNhbXBsZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lYnVm
ZmVyQXR0YWNobWVudFJlbmRlclRhcmdldCAqKnJ0T3V0KQorIHsKKysgICAgaWYgKG1Cb3VuZFN1
cmZhY2UpCisrICAgIHsKKysgICAgICAgIEFOR0xFX1RSWSgKKysgICAgICAgICAgICBtQm91bmRT
dXJmYWNlLT5nZXRBdHRhY2htZW50UmVuZGVyVGFyZ2V0KGNvbnRleHQsIGJpbmRpbmcsIGltYWdl
SW5kZXgsIHNhbXBsZXMsIHJ0T3V0KSk7CisrICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6
Q29udGludWU7CisrICAgIH0KKyAgICAgQU5HTEVfVFJZKGVuc3VyZVRleHR1cmVDcmVhdGVkKGNv
bnRleHQpKTsKKyAKKyAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChj
b250ZXh0KTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNm
b3JtRmVlZGJhY2tNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1G
ZWVkYmFja010bC5oCitpbmRleCBhYTQ1YmY5Li4yMGEyYzIwIDEwMDY0NAorLS0tIGEvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLmgKKysrKyBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9UcmFuc2Zvcm1GZWVkYmFja010bC5oCitAQCAtMTAsMTIg
KzEwLDIwIEBACisgI2lmbmRlZiBMSUJBTkdMRV9SRU5ERVJFUl9NRVRBTF9UUkFOU0ZPUk1GRUVE
QkFDS01UTF9IXworICNkZWZpbmUgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfVFJBTlNGT1JNRkVF
REJBQ0tNVExfSF8KKyAKKysjaW5jbHVkZSA8TWV0YWwvTWV0YWwuaD4KKyAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvVHJhbnNmb3JtRmVlZGJhY2tJbXBsLmgiCisrI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgiCisgCistbmFtZXNwYWNlIHJ4CisrdHlwZWRlZiB1
aW50NjRfdCBNdGxEZXZpY2VTaXplOworKworK25hbWVzcGFjZSBnbAorIHsKKytjbGFzcyBQcm9n
cmFtU3RhdGU7CisrfSAgLy8gbmFtZXNwYWNlIGdsCisgCistY2xhc3MgQ29udGV4dE10bDsKKytu
YW1lc3BhY2UgcngKKyt7CisgCisgY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tNdGwgOiBwdWJsaWMg
VHJhbnNmb3JtRmVlZGJhY2tJbXBsCisgeworQEAgLTMyLDE3ICs0MCwyMyBAQCBjbGFzcyBUcmFu
c2Zvcm1GZWVkYmFja010bCA6IHB1YmxpYyBUcmFuc2Zvcm1GZWVkYmFja0ltcGwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGds
OjpCdWZmZXI+ICZiaW5kaW5nKSBvdmVycmlkZTsKKyAKKy0gICAgLy8gUGFyYW1zOgorLSAgICAv
LyAtIGRyYXdDYWxsRmlyc3RWZXJ0ZXggaXMgZmlyc3QgdmVydGV4IHVzZWQgYnkgZ2xEcmF3QXJy
YXlzKi4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZQorLSAgICAvLyBnbF9WZXJ0ZXhJbmRleCBp
cyBzdGFydGluZyBmcm9tIHRoaXMuCistICAgIC8vIC0gc2tpcHBlZFZlcnRpY2VzIGlzIG51bWJl
ciBvZiBza2lwcGVkIHZlcnRpY2VzICh1c2VmdWwgZm9yIG11bHRpcGxlIG1ldGFsIGRyYXdzIHBl
ciBHTCBkcmF3CistICAgIC8vIGNhbGwpLgorLSAgICBhbmdsZTo6UmVzdWx0IGdldEJ1ZmZlck9m
ZnNldHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAgdm9pZCBnZXRCdWZmZXJPZmZzZXRz
KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCBkcmF3Q2FsbEZpcnN0VmVydGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc2tpcHBlZFZlcnRpY2VzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCk7CisrICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICpvZmZzZXRzT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IG9mZnNldHNTaXplKSBjb25zdDsKKysKKysgICAgY29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiAmZ2V0QnVmZmVySGFuZGxlcygpIGNvbnN0CisrICAg
IHsKKysgICAgICAgIHJldHVybiBtQnVmZmVySGFuZGxlczsKKysgICAgfQorIAorICAgcHJpdmF0
ZToKKysgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiBt
QnVmZmVySGFuZGxlczsKKysgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PE10
bERldmljZVNpemU+IG1CdWZmZXJPZmZzZXRzOworKyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUJ1ZmZlclNpemVzOworKworKyAgICAvLyBBbGln
bmVkIG9mZnNldCBmb3IgZW11bGF0aW9uLiBDb3VsZCBiZSBzbWFsbGVyIHRoYW4gb2Zmc2V0Lgor
KyAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8TXRsRGV2aWNlU2l6ZT4gbUFs
aWduZWRCdWZmZXJPZmZzZXRzOworIH07CisgCisgfSAgLy8gbmFtZXNwYWNlIHJ4CitkaWZmIC0t
Z2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1t
IGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1tCitp
bmRleCBkOTQwYzNkLi5kZTdhOTA5IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL1RyYW5zZm9ybUZlZWRiYWNrTXRsLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tNdGwubW0KK0BAIC04LDE4ICs4LDI3IEBACisgLy8K
KyAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVHJhbnNmb3JtRmVlZGJhY2tN
dGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgiCisr
I2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCIKKysjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oIgorKyNpbmNsdWRlICJsaWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9Qcm9ncmFtTXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL1F1ZXJ5TXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9jb21tb24uaCIKKyAKKy0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisgI2luY2x1
ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvUXVlcnkuaCIKKy0j
aW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorLSNpbmNsdWRl
ICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9RdWVyeU10bC5oIgorKworKyNpbmNsdWRlICJjb21t
b24vZGVidWcuaCIKKyAKKyBuYW1lc3BhY2UgcngKKyB7CisgCisgVHJhbnNmb3JtRmVlZGJhY2tN
dGw6OlRyYW5zZm9ybUZlZWRiYWNrTXRsKGNvbnN0IGdsOjpUcmFuc2Zvcm1GZWVkYmFja1N0YXRl
ICZzdGF0ZSkKKy0gICAgOiBUcmFuc2Zvcm1GZWVkYmFja0ltcGwoc3RhdGUpCisrICAgIDogVHJh
bnNmb3JtRmVlZGJhY2tJbXBsKHN0YXRlKSwKKysgICAgICBtQnVmZmVySGFuZGxlc3t9LAorKyAg
ICAgIG1CdWZmZXJPZmZzZXRze30sCisrICAgICAgbUJ1ZmZlclNpemVze30sCisrICAgICAgbUFs
aWduZWRCdWZmZXJPZmZzZXRze30KKyB7fQorIAorIFRyYW5zZm9ybUZlZWRiYWNrTXRsOjp+VHJh
bnNmb3JtRmVlZGJhY2tNdGwoKSB7fQorQEAgLTI3LDQwICszNiw3OSBAQAorIGFuZ2xlOjpSZXN1
bHQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmJlZ2luKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRp
dmVNb2RlIHByaW1pdGl2ZU1vZGUpCisgeworLSAgICBtdGw6OkdldEltcGwoY29udGV4dCktPm9u
VHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoY29udGV4dCwgdGhpcyk7CisrICAgIENvbnRleHRNdGwg
KmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisrICAgIC8vIE5vdCBjdXJyZW50
bHkgc3VwcG9ydGVkIHdpdGggbXNsIGNvbXBpbGVyCisrICAgIGlmICghY29udGV4dE10bC0+Z2V0
RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjay5lbmFibGVk
KQorKyAgICB7CisrICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKKysgICAgfQor
IAorLSAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrICAgIGNvbnN0IGdsOjpQ
cm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0
UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKysgICAgQVNTRVJUKGV4ZWN1dGFibGUpOworKyAgICBzaXpl
X3QgeGZiQnVmZmVyQ291bnQgPSBleGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ckNvdW50KCk7CisrCisrICAgIGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVmZmVySW5k
ZXggPCB4ZmJCdWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKKysgICAgeworKyAgICAgICAgY29u
c3QgZ2w6Ok9mZnNldEJpbmRpbmdQb2ludGVyPGdsOjpCdWZmZXI+ICZiaW5kaW5nID0gbVN0YXRl
LmdldEluZGV4ZWRCdWZmZXIoYnVmZmVySW5kZXgpOworKyAgICAgICAgQVNTRVJUKGJpbmRpbmcu
Z2V0KCkpOworKworKyAgICAgICAgQnVmZmVyTXRsICpidWZmZXJNdGwgPSBtdGw6OkdldEltcGwo
YmluZGluZy5nZXQoKSk7CisrCisrICAgICAgICBhc3NlcnQoYnVmZmVyTXRsKTsKKysgICAgICAg
IG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSA9IGJpbmRpbmcuZ2V0T2Zmc2V0KCk7CisrICAg
ICAgICBtQnVmZmVyU2l6ZXNbYnVmZmVySW5kZXhdICAgPSBnbDo6R2V0Qm91bmRCdWZmZXJBdmFp
bGFibGVTaXplKGJpbmRpbmcpOworKyAgICAgICAgbUJ1ZmZlckhhbmRsZXNbYnVmZmVySW5kZXhd
ID0gYnVmZmVyTXRsOworKworKyAgICAgICAgQVNTRVJUKGNvbnRleHRNdGwtPmdldERpc3BsYXko
KS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCk7CisrICAg
ICAgICBjb25zdCBNdGxEZXZpY2VTaXplIG9mZnNldEFsaWdubWVudCA9IG10bDo6a1VuaWZvcm1C
dWZmZXJTZXR0aW5nT2Zmc2V0TWluQWxpZ25tZW50OworKworKyAgICAgICAgLy8gTWFrZSBzdXJl
IHRoZXJlJ3Mgbm8gcG9zc2libGUgdW5kZXIvb3ZlcmZsb3cgd2l0aCBiaW5kaW5nIHNpemUuCisr
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihNdGxEZXZpY2VTaXplKSA+PSBzaXplb2YoYmlu
ZGluZy5nZXRTaXplKCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAiTXRsRGV2aWNlU2l6ZSB0
b28gc21hbGwiKTsKKysKKysgICAgICAgIC8vIFNldCB0aGUgb2Zmc2V0IGFzIGNsb3NlIGFzIHBv
c3NpYmxlIHRvIHRoZSByZXF1ZXN0ZWQgb2Zmc2V0IHdoaWxlIHJlbWFpbmluZyBhbGlnbmVkLgor
KyAgICAgICAgbUFsaWduZWRCdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSA9CisrICAgICAgICAg
ICAgKG1CdWZmZXJPZmZzZXRzW2J1ZmZlckluZGV4XSAvIG9mZnNldEFsaWdubWVudCkgKiBvZmZz
ZXRBbGlnbm1lbnQ7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGNvbnRleHRNdGwtPm9uQmVnaW5U
cmFuc2Zvcm1GZWVkYmFjayh4ZmJCdWZmZXJDb3VudCwgbUJ1ZmZlckhhbmRsZXMpOworIH0KKyAK
KyBhbmdsZTo6UmVzdWx0IFRyYW5zZm9ybUZlZWRiYWNrTXRsOjplbmQoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQpCisgeworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsID0gbXRsOjpHZXRJ
bXBsKGNvbnRleHQpOworKyAgICAvLyBOb3QgY3VycmVudGx5IHN1cHBvcnRlZCB3aXRoIG1zbCBj
b21waWxlcgorKyAgICBpZiAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMo
KS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CisrICAgIH0KKysKKysgICAgLy8gSWYgdGhlcmUncyBh
biBhY3RpdmUgdHJhbnNmb3JtIGZlZWRiYWNrIHF1ZXJ5LCBhY2N1bXVsYXRlIHRoZSBwcmltaXRp
dmVzIGRyYXduLgorICAgICBjb25zdCBnbDo6U3RhdGUgJmdsU3RhdGUgPSBjb250ZXh0LT5nZXRT
dGF0ZSgpOworICAgICBnbDo6UXVlcnkgKnRyYW5zZm9ybUZlZWRiYWNrUXVlcnkgPQorICAgICAg
ICAgZ2xTdGF0ZS5nZXRBY3RpdmVRdWVyeShnbDo6UXVlcnlUeXBlOjpUcmFuc2Zvcm1GZWVkYmFj
a1ByaW1pdGl2ZXNXcml0dGVuKTsKKysKKyAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrUXVlcnkp
CisgICAgIHsKKy0gICAgICAgIG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5KS0+
b25UcmFuc2Zvcm1GZWVkYmFja0VuZChjb250ZXh0KTsKKysgICAgICAgIG10bDo6R2V0SW1wbCh0
cmFuc2Zvcm1GZWVkYmFja1F1ZXJ5KS0+b25UcmFuc2Zvcm1GZWVkYmFja0VuZChtU3RhdGUuZ2V0
UHJpbWl0aXZlc0RyYXduKCkpOworICAgICB9CistCistICAgIG10bDo6R2V0SW1wbChjb250ZXh0
KS0+b25UcmFuc2Zvcm1GZWVkYmFja0luYWN0aXZlKGNvbnRleHQsIHRoaXMpOworLQorKyAgICBj
b250ZXh0TXRsLT5vbkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgIHJldHVybiBhbmdsZTo6
UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFj
a010bDo6cGF1c2UoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCisgeworLSAgICAvLyBXaGVu
IFhGQiBpcyBwYXVzZWQsIE9wZW5HTCBhbGxvd3MgWEZCIGJ1ZmZlcnMgdG8gYmUgYm91bmQgZm9y
IG90aGVyIHB1cnBvc2VzLiBXZSBuZWVkIHRvIGNhbGwKKy0gICAgLy8gb25UcmFuc2Zvcm1GZWVk
YmFja0luYWN0aXZlKCkgdG8gaXNzdWUgYSBzeW5jLgorLSAgICBtdGw6OkdldEltcGwoY29udGV4
dCktPm9uVHJhbnNmb3JtRmVlZGJhY2tJbmFjdGl2ZShjb250ZXh0LCB0aGlzKTsKKy0KKy0gICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworKyAgICByZXR1cm4gY29udGV4dE10bC0+b25Q
YXVzZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisgfQorIAorIGFuZ2xlOjpSZXN1bHQgVHJhbnNmb3Jt
RmVlZGJhY2tNdGw6OnJlc3VtZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKKyB7CistICAg
IG10bDo6R2V0SW1wbChjb250ZXh0KS0+b25UcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZShjb250ZXh0
LCB0aGlzKTsKKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworKyAgICBD
b250ZXh0TXRsICpjb250ZXh0TXRsICAgICAgICAgICAgICAgICAgPSBtdGw6OkdldEltcGwoY29u
dGV4dCk7CisrICAgIGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNv
bnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKysgICAgQVNTRVJU
KGV4ZWN1dGFibGUpOworKyAgICBzaXplX3QgeGZiQnVmZmVyQ291bnQgPSBleGVjdXRhYmxlLT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckNvdW50KCk7CisrICAgIHJldHVybiBjb250ZXh0TXRs
LT5vbkJlZ2luVHJhbnNmb3JtRmVlZGJhY2soeGZiQnVmZmVyQ291bnQsIG1CdWZmZXJIYW5kbGVz
KTsKKyB9CisgCisgYW5nbGU6OlJlc3VsdCBUcmFuc2Zvcm1GZWVkYmFja010bDo6YmluZEluZGV4
ZWRCdWZmZXIoCitAQCAtNjgsMTcgKzExNiwyMCBAQAorICAgICBzaXplX3QgaW5kZXgsCisgICAg
IGNvbnN0IGdsOjpPZmZzZXRCaW5kaW5nUG9pbnRlcjxnbDo6QnVmZmVyPiAmYmluZGluZykKKyB7
CistICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdworKyAgICBVTklNUExFTUVOVEVEKCk7CisgCisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKKyB9CisgCistYW5nbGU6OlJlc3Vs
dCBUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVmZmVyT2Zmc2V0cyhDb250ZXh0TXRsICpjb250
ZXh0TXRsLAorK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2tNdGw6OmdldEJ1ZmZlck9mZnNldHMoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMaW50IGRyYXdDYWxsRmlyc3RWZXJ0ZXgsCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBza2lwcGVkVmVydGlj
ZXMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90ICpvZmZzZXRzT3V0KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCAqb2Zmc2V0c091dCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXRzU2l6ZSkgY29uc3QKKyB7CistICAg
IGludDY0X3QgdmVydGljZXNEcmF3biA9IHN0YXRpY19jYXN0PGludDY0X3Q+KG1TdGF0ZS5nZXRW
ZXJ0aWNlc0RyYXduKCkpICsgc2tpcHBlZFZlcnRpY2VzOworKyAgICBpZiAoIWNvbnRleHRNdGwt
PmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5h
YmxlZCkKKysgICAgICAgIHJldHVybjsKKysKKysgICAgR0xzaXplaXB0ciB2ZXJ0aWNlc0RyYXdu
ID0gbVN0YXRlLmdldFZlcnRpY2VzRHJhd24oKTsKKyAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8R0xz
aXplaT4gJmJ1ZmZlclN0cmlkZXMgPQorICAgICAgICAgbVN0YXRlLmdldEJvdW5kUHJvZ3JhbSgp
LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKTsKKyAgICAgY29uc3QgZ2w6OlByb2dyYW1F
eGVjdXRhYmxlICpleGVjdXRhYmxlID0gY29udGV4dE10bC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFt
RXhlY3V0YWJsZSgpOworQEAgLTg3LDI3ICsxMzgsMjUgQEAKKyAKKyAgICAgQVNTRVJUKHhmYkJ1
ZmZlckNvdW50ID4gMCk7CisgCisrICAgIC8vIFRoZSBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0
aGUgb2Zmc2V0cyBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgVGhlIG1heGltdW0gcG9zc2libGUK
KysgICAgLy8gbnVtYmVyIG9mIG91dHB1dHMgaXMgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSUy4KKysgICAgQVNTRVJUKG9mZnNldHNTaXplID49IHhmYkJ1
ZmZlckNvdW50KTsKKysKKyAgICAgZm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJ
bmRleCA8IHhmYkJ1ZmZlckNvdW50OyArK2J1ZmZlckluZGV4KQorICAgICB7CistICAgICAgICBj
b25zdCBnbDo6T2Zmc2V0QmluZGluZ1BvaW50ZXI8Z2w6OkJ1ZmZlcj4gJmJ1ZmZlckJpbmRpbmcg
PQorLSAgICAgICAgICAgIG1TdGF0ZS5nZXRJbmRleGVkQnVmZmVyKGJ1ZmZlckluZGV4KTsKKy0K
Ky0gICAgICAgIEFTU0VSVCgoYnVmZmVyQmluZGluZy5nZXRPZmZzZXQoKSAlIDQpID09IDApOwor
LQorLSAgICAgICAgLy8gT2Zmc2V0IHRoZSBnbF9WZXJ0ZXhJbmRleCBieSBkcmF3Q2FsbEZpcnN0
VmVydGV4CisrICAgICAgICBpbnQ2NF90IG9mZnNldEZyb21EZXNjcmlwdG9yID0KKysgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihtQnVmZmVyT2Zmc2V0c1tidWZmZXJJbmRleF0gLSBt
QWxpZ25lZEJ1ZmZlck9mZnNldHNbYnVmZmVySW5kZXhdKTsKKyAgICAgICAgIGludDY0X3QgZHJh
d0NhbGxWZXJ0ZXhPZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih2ZXJ0aWNlc0RyYXduKSAt
IGRyYXdDYWxsRmlyc3RWZXJ0ZXg7CisgCisgICAgICAgICBpbnQ2NF90IHdyaXRlT2Zmc2V0ID0K
Ky0gICAgICAgICAgICAoYnVmZmVyQmluZGluZy5nZXRPZmZzZXQoKSArIGRyYXdDYWxsVmVydGV4
T2Zmc2V0ICogYnVmZmVyU3RyaWRlc1tidWZmZXJJbmRleF0pIC8KKysgICAgICAgICAgICAob2Zm
c2V0RnJvbURlc2NyaXB0b3IgKyBkcmF3Q2FsbFZlcnRleE9mZnNldCAqIGJ1ZmZlclN0cmlkZXNb
YnVmZmVySW5kZXhdKSAvCisgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50NjRfdD4oc2l6ZW9m
KHVpbnQzMl90KSk7CisgCisgICAgICAgICBvZmZzZXRzT3V0W2J1ZmZlckluZGV4XSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KHdyaXRlT2Zmc2V0KTsKKyAKKy0gICAgICAgIC8vIENoZWNrIGZvciBv
dmVyZmxvdy4KKy0gICAgICAgIEFOR0xFX0NIRUNLX0dMX0FMTE9DKGNvbnRleHRNdGwsIG9mZnNl
dHNPdXRbYnVmZmVySW5kZXhdID09IHdyaXRlT2Zmc2V0KTsKKysgICAgICAgIC8vIEFzc2VydCBv
biBvdmVyZmxvdy4gIEZvciBub3csIHN1cHBvcnQgdHJhbnNmb3JtIGZlZWRiYWNrIHVwIHRvIDJH
Qi4KKysgICAgICAgIEFTU0VSVChvZmZzZXRzT3V0W2J1ZmZlckluZGV4XSA9PSB3cml0ZU9mZnNl
dCk7CisgICAgIH0KKy0KKy0gICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0K
KyAKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9W
ZXJ0ZXhBcnJheU10bC5oCitpbmRleCBjMmZiODQ2Li5mZTZiNWY3IDEwMDY0NAorLS0tIGEvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1ZlcnRleEFycmF5TXRsLmgKKysrKyBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5oCitAQCAtNDMsOCArNDMsOSBAQCBj
bGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMpOworIAorICAg
ICAvLyB2ZXJ0ZXhEZXNjQ2hhbmdlZCBpcyBib3RoIGlucHV0IGFuZCBvdXRwdXQsIHRoZSBpbnB1
dCB2YWx1ZSBpZiBpcyB0cnVlLCB3aWxsIGZvcmNlIG5ldworLSAgICAvLyBtdGw6OlZlcnRleERl
c2MgdG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQuIE90aGVyd2lzZSwgaXQgaXMgb25s
eSByZXR1cm5lZCB3aGVuIHRoZQorLSAgICAvLyB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkKKysgICAg
Ly8gbXRsOjpWZXJ0ZXhEZXNjIHRvIGJlIHJldHVybmVkIHZpYSB2ZXJ0ZXhEZXNjT3V0LiBUaGlz
IHR5cGljYWxseSBoYXBwZW5zIHdoZW4gYWN0aXZlIHNoYWRlcgorKyAgICAvLyBwcm9ncmFtIGlz
IGNoYW5nZWQuCisrICAgIC8vIE90aGVyd2lzZSwgaXQgaXMgb25seSByZXR1cm5lZCB3aGVuIHRo
ZSB2ZXJ0ZXggYXJyYXkgaXMgZGlydHkuCisgICAgIGFuZ2xlOjpSZXN1bHQgc2V0dXBEcmF3KGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgKnZlcnRleERlc2NDaGFuZ2VkLAorQEAgLTUyLDExICs1MywyNCBA
QCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUltcGwKKyAKKyAgICAg
YW5nbGU6OlJlc3VsdCBnZXRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBl
IGluZGV4VHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0
aXZlTW9kZSBwcmltaXRpdmVNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBpbmRleENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpCdWZmZXJSZWYgKmlkeEJ1ZmZlck91dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSAqaW5kZXhUeXBlT3V0KTsKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSAqaW5k
ZXhUeXBlT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5k
ZXhCdWZmZXJDb3VudE91dCk7CisrCisrICAgIC8vIFVzZSB0byBlbXVsYXRlIGluc3RhbmNlZCBk
cmF3IGZvciBpbnN0YW5jZSA8aW5zdGFuY2VJZD4uCisrICAgIC8vIFRoZSB0eXBpY2FsIGNhbGwg
c2VxdWVuY2UgZm9yIGVtdWxhdGVkIGluc3RhbmNlIGRyYXcgaXM6CisrICAgIC8vIC0gc2V0dXBE
cmF3KCkKKysgICAgLy8gLSBkcmF3LgorKyAgICAvLyAtIGVtdWxhdGVJbnN0YW5jZURyYXdTdGVw
KDEpCisrICAgIC8vIC0gZHJhdy4KKysgICAgLy8gLSBlbXVsYXRlSW5zdGFuY2VEcmF3U3RlcChu
KQorKyAgICAvLyAtIGRyYXcuCisrICAgIC8vIC0gZW11bGF0ZUluc3RhbmNlRHJhd1N0ZXAoMCkK
KysgICAgdm9pZCBlbXVsYXRlSW5zdGFuY2VEcmF3U3RlcChtdGw6OlJlbmRlckNvbW1hbmRFbmNv
ZGVyICpjbWRFbmNvZGVyLCB1aW50MzJfdCBpbnN0YW5jZUlkKTsKKyAKKyAgIHByaXZhdGU6Cisg
ICAgIHZvaWQgcmVzZXQoQ29udGV4dE10bCAqY29udGV4dCk7CitAQCAtNzIsMTUgKzg2LDE5IEBA
IGNsYXNzIFZlcnRleEFycmF5TXRsIDogcHVibGljIFZlcnRleEFycmF5SW1wbAorIAorICAgICBh
bmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlcihjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1l
bnRzVHlwZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG10bDo6QnVmZmVyUmVmICppZHhCdWZmZXJPdXQsCistICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0KTsKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kZXhCdWZmZXJD
b3VudE91dCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgc3RyZWFtSW5kZXhCdWZmZXJGcm9tQ2xpZW50
KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2
ZU1vZGUgcHJpbWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGluZGV4Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnNvdXJjZVBvaW50ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6QnVmZmVyUmVmICpp
ZHhCdWZmZXJPdXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0KTsKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQsCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVm
ZmVyQ291bnRPdXQpOworIAorICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlckdQ
VShjb25zdCBnbDo6Q29udGV4dCAqZ2xDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5cGUsCitAQCAtMTE3
LDcgKzEzNSwyMCBAQCBjbGFzcyBWZXJ0ZXhBcnJheU10bCA6IHB1YmxpYyBWZXJ0ZXhBcnJheUlt
cGwKKyAgICAgZ2w6OkF0dHJpYkFycmF5PEJ1ZmZlckhvbGRlck10bCAqPiBtQ3VycmVudEFycmF5
QnVmZmVyczsKKyAgICAgZ2w6OkF0dHJpYkFycmF5PFNpbXBsZVdlYWtCdWZmZXJIb2xkZXJNdGw+
IG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRlcnM7CisgICAgIGdsOjpBdHRyaWJBcnJheTxzaXpl
X3Q+IG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzOworKworKyAgICAvLyBTaXplIHRvIGJlIHVw
bG9hZGVkIGFzIGlubGluZSBjb25zdGFudCBkYXRhLiBVc2VkIGZvciBjbGllbnQgdmVydGV4IGF0
dHJpYnV0ZSdzIGRhdGEgdGhhdAorKyAgICAvLyBpcyBzbWFsbCBlbm91Z2ggdGhhdCB3ZSBjYW4g
c2VuZCBkaXJlY3RseSBhcyBpbmxpbmUgY29uc3RhbnQgZGF0YSBpbnN0ZWFkIG9mIHN0cmVhbWlu
ZworKyAgICAvLyB0aHJvdWdoIGEgYnVmZmVyLgorKyAgICBnbDo6QXR0cmliQXJyYXk8c2l6ZV90
PiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzOworKyAgICAvLyBBcnJheSBvZiBob3N0IGJ1
ZmZlcnMgc3RvcmluZyBjb252ZXJ0ZWQgZGF0YSBmb3IgY2xpZW50IGF0dHJpYnV0ZXMgdGhhdCBh
cmUgc21hbGwgZW5vdWdoLgorKyAgICBnbDo6QXR0cmliQXJyYXk8YW5nbGU6Ok1lbW9yeUJ1ZmZl
cj4gbUNvbnZlcnRlZENsaWVudFNtYWxsQXJyYXlzOworKyAgICBnbDo6QXR0cmliQXJyYXk8Y29u
c3QgdWludDhfdCAqPiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzOworKyAgICAvLyBN
YXggc2l6ZSBvZiBpbmxpbmUgY29uc3RhbnQgZGF0YSB0aGF0IGNhbiBiZSB1c2VkIGZvciBjbGll
bnQgdmVydGV4IGF0dHJpYnV0ZS4KKysgICAgc2l6ZV90IG1JbmxpbmVEYXRhTWF4U2l6ZTsKKysK
KysgICAgLy8gU3RyaWRlIHBlciB2ZXJ0ZXggYXR0cmlidXRlCisgICAgIGdsOjpBdHRyaWJBcnJh
eTxHTHVpbnQ+IG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzOworKyAgICAvLyBGb3JtYXQgcGVy
IHZlcnRleCBhdHRyaWJ1dGUKKyAgICAgZ2w6OkF0dHJpYkFycmF5PGNvbnN0IG10bDo6VmVydGV4
Rm9ybWF0ICo+IG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzOworIAorICAgICBjb25zdCBtdGw6
OlZlcnRleEZvcm1hdCAmbURlZmF1bHRGbG9hdFZlcnRleEZvcm1hdDsKK0BAIC0xMjcsNiArMTU4
LDggQEAgY2xhc3MgVmVydGV4QXJyYXlNdGwgOiBwdWJsaWMgVmVydGV4QXJyYXlJbXBsCisgICAg
IG10bDo6QnVmZmVyUG9vbCBtRHluYW1pY1ZlcnRleERhdGE7CisgICAgIG10bDo6QnVmZmVyUG9v
bCBtRHluYW1pY0luZGV4RGF0YTsKKyAKKysgICAgc3RkOjp2ZWN0b3I8dWludDMyX3Q+IG1FbXVs
YXRlZEluc3RhbmNlQXR0cmliczsKKysKKyAgICAgYm9vbCBtVmVydGV4QXJyYXlEaXJ0eSA9IHRy
dWU7CisgfTsKKyB9ICAvLyBuYW1lc3BhY2UgcngKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwubW0gYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvVmVydGV4QXJyYXlNdGwubW0KK2luZGV4IGNkOTYxYzEuLjAyMTk1ZDggMTAwNjQ0Cist
LS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4QXJyYXlNdGwubW0KKysrKyBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9WZXJ0ZXhBcnJheU10bC5tbQorQEAgLTgsNiAr
OCw5IEBACisgLy8KKyAKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvVmVydGV4
QXJyYXlNdGwuaCIKKysKKysjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisrCisgI2lu
Y2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5oIgorICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgiCisgI2luY2x1ZGUgImxpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKK0BAIC03NiwxNSArNzksMTUgQEAgc2l6ZV90
IEdldEluZGV4Q29udmVydGVkQnVmZmVyU2l6ZShnbDo6RHJhd0VsZW1lbnRzVHlwZSBpbmRleFR5
cGUsIHNpemVfdCBpbmRleEMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
aW50OF90ICpzb3VyY2VQb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgaW5kZXhDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6UHJpbWl0aXZlTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCkKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmJ1ZmZlck9mZnNldE91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmluZGV4Q291bnRPdXQpCisgeworICAgICBkeW5hbWljQnVmZmVyLT5yZWxl
YXNlSW5GbGlnaHRCdWZmZXJzKGNvbnRleHRNdGwpOworLQorICAgICBjb25zdCBzaXplX3QgYW1v
dW50ID0gR2V0SW5kZXhDb252ZXJ0ZWRCdWZmZXJTaXplKGluZGV4VHlwZSwgaW5kZXhDb3VudCk7
CisgICAgIEdMdWJ5dGUgKmRzdCAgICAgICAgPSBudWxscHRyOworLQorICAgICBBTkdMRV9UUlko
CisgICAgICAgICBkeW5hbWljQnVmZmVyLT5hbGxvY2F0ZShjb250ZXh0TXRsLCBhbW91bnQsICZk
c3QsIGJ1ZmZlck91dCwgYnVmZmVyT2Zmc2V0T3V0LCBudWxscHRyKSk7CisgCitAQCAtMTIxLDYg
KzEyNCw3IEBAIHNpemVfdCBHZXRJbmRleENvbnZlcnRlZEJ1ZmZlclNpemUoZ2w6OkRyYXdFbGVt
ZW50c1R5cGUgaW5kZXhUeXBlLCBzaXplX3QgaW5kZXhDCisgICAgIHsKKyAgICAgICAgIG1lbWNw
eShkc3QsIHNvdXJjZVBvaW50ZXIsIGFtb3VudCk7CisgICAgIH0KKysgICAgKmluZGV4Q291bnRP
dXQgPSBpbmRleENvdW50OworICAgICBBTkdMRV9UUlkoZHluYW1pY0J1ZmZlci0+Y29tbWl0KGNv
bnRleHRNdGwpKTsKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworQEAg
LTIwOCw2ICsyMTIsMzAgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZlckxheW91
dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAgICAgIGZvcm1hdCA9
ICZtRGVmYXVsdEZsb2F0VmVydGV4Rm9ybWF0OworICAgICB9CisgCisrICAgIGZvciAoc2l6ZV90
ICZpbmxpbmVEYXRhU2l6ZSA6IG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXMpCisrICAgIHsK
KysgICAgICAgIGlubGluZURhdGFTaXplID0gMDsKKysgICAgfQorKworKyAgICBmb3IgKGFuZ2xl
OjpNZW1vcnlCdWZmZXIgJmNvbnZlcnRlZENsaWVudEFycmF5IDogbUNvbnZlcnRlZENsaWVudFNt
YWxsQXJyYXlzKQorKyAgICB7CisrICAgICAgICBjb252ZXJ0ZWRDbGllbnRBcnJheS5jbGVhcigp
OworKyAgICB9CisrCisrICAgIGZvciAoY29uc3QgdWludDhfdCAqJmNsaWVudFBvaW50ZXIgOiBt
Q3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzKQorKyAgICB7CisrICAgICAgICBjbGllbnRQ
b2ludGVyID0gbnVsbHB0cjsKKysgICAgfQorKworKyAgICBpZiAoY29udGV4dC0+Z2V0RGlzcGxh
eSgpLT5nZXRGZWF0dXJlcygpLmFsbG93SW5saW5lQ29uc3RWZXJ0ZXhEYXRhLmVuYWJsZWQpCisr
ICAgIHsKKysgICAgICAgIG1JbmxpbmVEYXRhTWF4U2l6ZSA9IG10bDo6a0lubGluZUNvbnN0RGF0
YU1heFNpemU7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBtSW5saW5lRGF0
YU1heFNpemUgPSAwOworKyAgICB9CisrCisgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gdHJ1ZTsK
KyB9CisgCitAQCAtMzE1LDIyICszNDMsMjggQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRl
eEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyB9Cisg
CisgLy8gdmVydGV4RGVzY0NoYW5nZWQgaXMgYm90aCBpbnB1dCBhbmQgb3V0cHV0LCB0aGUgaW5w
dXQgdmFsdWUgaWYgaXMgdHJ1ZSwgd2lsbCBmb3JjZSBuZXcKKy0vLyBtdGw6OlZlcnRleERlc2Mg
dG8gYmUgcmV0dXJuZWQgdmlhIHZlcnRleERlc2NPdXQuIE90aGVyd2lzZSwgaXQgaXMgb25seSBy
ZXR1cm5lZCB3aGVuIHRoZQorLS8vIHZlcnRleCBhcnJheSBpcyBkaXJ0eQorKy8vIG10bDo6VmVy
dGV4RGVzYyB0byBiZSByZXR1cm5lZCB2aWEgdmVydGV4RGVzY091dC4gVGhpcyB0eXBpY2FsbHkg
aGFwcGVucyB3aGVuIGFjdGl2ZSBzaGFkZXIKKysvLyBwcm9ncmFtIGlzIGNoYW5nZWQuCisrLy8g
T3RoZXJ3aXNlLCBpdCBpcyBvbmx5IHJldHVybmVkIHdoZW4gdGhlIHZlcnRleCBhcnJheSBpcyBk
aXJ0eS4KKyBhbmdsZTo6UmVzdWx0IFZlcnRleEFycmF5TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6
OkNvbnRleHQgKmdsQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXRsOjpSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqdmVydGV4RGVzY0NoYW5nZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6VmVydGV4RGVzYyAq
dmVydGV4RGVzY091dCkKKyB7CisrICAgIC8vIE5PVEUoaHFsZSk6IGNvbnNpZGVyIG9ubHkgdXBk
YXRpbmcgZGlydHkgYXR0cmlidXRlcworICAgICBib29sIGRpcnR5ID0gbVZlcnRleEFycmF5RGly
dHkgfHwgKnZlcnRleERlc2NDaGFuZ2VkOworIAorICAgICBpZiAoZGlydHkpCisgICAgIHsKKysg
ICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoZ2xDb250ZXh0KTsK
KysKKyAgICAgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gZmFsc2U7CisrICAgICAgICBtRW11bGF0
ZWRJbnN0YW5jZUF0dHJpYnMuY2xlYXIoKTsKKyAKKy0gICAgICAgIGNvbnN0IGdsOjpQcm9ncmFt
U3RhdGUgJnByb2dyYW1TdGF0ZSA9IGdsQ29udGV4dC0+Z2V0U3RhdGUoKS5nZXRQcm9ncmFtKCkt
PmdldFN0YXRlKCk7CisrICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUV4ZWN1dGFibGUgKmV4ZWN1
dGFibGUgPSBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbUV4ZWN1dGFibGUoKTsKKyAg
ICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVzTWFzayAmcHJvZ3JhbUFjdGl2ZUF0dHJpYnNNYXNr
ID0KKy0gICAgICAgICAgICBnbENvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3JhbSgpLT5nZXRF
eGVjdXRhYmxlKCkuZ2V0QWN0aXZlQXR0cmliTG9jYXRpb25zTWFzaygpOworKyAgICAgICAgICAg
IGV4ZWN1dGFibGUtPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uc01hc2soKTsKKysgICAgICAgIGNv
bnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSA9IGdsQ29udGV4dC0+Z2V0U3RhdGUo
KS5nZXRQcm9ncmFtKCktPmdldFN0YXRlKCk7CisgCisgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6VmVydGV4QXR0cmlidXRlPiAmYXR0cmlicyA9IG1TdGF0ZS5nZXRWZXJ0ZXhBdHRyaWJ1
dGVzKCk7CisgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmVydGV4QmluZGluZz4gJmJp
bmRpbmdzICA9IG1TdGF0ZS5nZXRWZXJ0ZXhCaW5kaW5ncygpOworQEAgLTM2MCw4ICszOTQsNyBA
QCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVm
ZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5k
aW5nICZiaW5kaW5nID0gYmluZGluZ3NbYXR0cmliLmJpbmRpbmdJbmRleF07CisgCisgICAgICAg
ICAgICAgYm9vbCBhdHRyaWJFbmFibGVkID0gYXR0cmliLmVuYWJsZWQ7CistICAgICAgICAgICAg
aWYgKGF0dHJpYkVuYWJsZWQgJiYKKy0gICAgICAgICAgICAgICAgKCFtQ3VycmVudEFycmF5QnVm
ZmVyc1t2XSB8fCAhbUN1cnJlbnRBcnJheUJ1ZmZlcnNbdl0tPmdldEN1cnJlbnRCdWZmZXIoKSkp
CisrICAgICAgICAgICAgaWYgKGF0dHJpYkVuYWJsZWQgJiYgIW1DdXJyZW50QXJyYXlCdWZmZXJz
W3ZdICYmICFtQ3VycmVudEFycmF5SW5saW5lRGF0YVBvaW50ZXJzW3ZdKQorICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBpdCB0byBhdm9pZCBjcmFzaC4KKyAgICAg
ICAgICAgICAgICAgYXR0cmliRW5hYmxlZCA9IGZhbHNlOworQEAgLTM2OSwzMyArNDAyLDMwIEBA
IGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZm
ZXJMYXlvdXREZXNjICpsYXlvdXQpCisgCisgICAgICAgICAgICAgaWYgKCFhdHRyaWJFbmFibGVk
KQorICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgLy8gVXNlIGRlZmF1bHQgYXR0cmli
dXRlCisrICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5idWZmZXJJbmRleCA9IG10
bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4OworKyAgICAgICAgICAgICAgICBkZXNjLmF0
dHJpYnV0ZXNbdl0ub2Zmc2V0ICAgICAgPSB2ICogbXRsOjprRGVmYXVsdEF0dHJpYnV0ZVNpemU7
CisgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZmluZCB0aGUgYXR0cmlidXRlIGhhdmluZyB0
aGUgZXhhY3QgYmluZGluZyBsb2NhdGlvbiA9IHYgaW4gdGhlIHByb2dyYW0KKyAgICAgICAgICAg
ICAgICAgLy8gaW5wdXRzIGxpc3QgdG8gcmV0cmlldmUgaXRzIGNvcmVzcG9uZGluZyBkYXRhIHR5
cGU6CisgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHNoOjpTaGFkZXJWYXJpYWJs
ZT4gJnByb2dyYW1JbnB1dHMgPQorICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbVN0YXRlLmdl
dFByb2dyYW1JbnB1dHMoKTsKKyAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c2g6OlNoYWRl
clZhcmlhYmxlPjo6Y29uc3RfaXRlcmF0b3IgYXR0cmliSW5mb0l0ZSA9IHN0ZDo6ZmluZF9pZigK
KyAgICAgICAgICAgICAgICAgICAgIGJlZ2luKHByb2dyYW1JbnB1dHMpLCBlbmQocHJvZ3JhbUlu
cHV0cyksIFt2XShjb25zdCBzaDo6U2hhZGVyVmFyaWFibGUgJnN2KSB7CistICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pihzdi5sb2NhdGlvbikgPT0g
djsKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHN2LmxvY2F0aW9uKSA8PSB2ICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYg
PCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc3YubG9jYXRpb24pICsKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6VmFyaWFibGVBdHRyaWJ1dGVDb3VudChzdi50eXBl
KTsKKyAgICAgICAgICAgICAgICAgICAgIH0pOworIAorLSAgICAgICAgICAgICAgICBpZiAoYXR0
cmliSW5mb0l0ZSA9PSBlbmQocHJvZ3JhbUlucHV0cykpCisrICAgICAgICAgICAgICAgIEFTU0VS
VChhdHRyaWJJbmZvSXRlICE9IGVuZChwcm9ncmFtSW5wdXRzKSk7CisrICAgICAgICAgICAgICAg
IHN3aXRjaCAoZ2w6OlZhcmlhYmxlQ29tcG9uZW50VHlwZShhdHRyaWJJbmZvSXRlLT50eXBlKSkK
KyAgICAgICAgICAgICAgICAgeworLSAgICAgICAgICAgICAgICAgICAgLy8gTW9zdCBsaWtlbHkg
dGhpcyBpcyBhcnJheSBlbGVtZW50IHdpdGggaW5kZXggPiAwLgorLSAgICAgICAgICAgICAgICAg
ICAgLy8gQWxyZWFkeSBoYW5kbGVkIHdoZW4gZW5jb3VudGVyIGZpcnN0IGVsZW1lbnQuCistICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgICAgICAgICAgfQorLQorLSAgICAg
ICAgICAgICAgICB1aW50MzJfdCBhcnJheVNpemU7CistICAgICAgICAgICAgICAgIE1UTFZlcnRl
eEZvcm1hdCBmb3JtYXQ7CistCistICAgICAgICAgICAgICAgIGdldFZlcnRleEF0dHJpYkZvcm1h
dEFuZEFycmF5U2l6ZSgqYXR0cmliSW5mb0l0ZSwgJmZvcm1hdCwgJmFycmF5U2l6ZSk7CistCist
ICAgICAgICAgICAgICAgIGZvciAodWludDMyX3QgdmFJZHggPSB2OyB2YUlkeCA8IHYgKyBhcnJh
eVNpemU7ICsrdmFJZHgpCistICAgICAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgICAg
IGRlc2MuYXR0cmlidXRlc1t2YUlkeF0uYnVmZmVySW5kZXggPSBtdGw6OmtEZWZhdWx0QXR0cmli
c0JpbmRpbmdJbmRleDsKKy0gICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2YUlk
eF0ub2Zmc2V0ICAgICAgPSB2YUlkeCAqIG10bDo6a0RlZmF1bHRBdHRyaWJ1dGVTaXplOworLSAg
ICAgICAgICAgICAgICAgICAgZGVzYy5hdHRyaWJ1dGVzW3ZhSWR4XS5mb3JtYXQgICAgICA9IGZv
cm1hdDsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdEludFZlcnRleEZv
cm1hdC5tZXRhbEZvcm1hdDsKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc2MuYXR0cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdFVJbnRWZXJ0ZXhGb3Jt
YXQubWV0YWxGb3JtYXQ7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuYXR0
cmlidXRlc1t2XS5mb3JtYXQgPSBtRGVmYXVsdEZsb2F0VmVydGV4Rm9ybWF0Lm1ldGFsRm9ybWF0
OworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UK
K0BAIC00MTcsMTcgKzQ0NywzNSBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVy
TGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAg
ICAgICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RlcEZ1bmN0aW9uID0gTVRMVmVydGV4
U3RlcEZ1bmN0aW9uUGVyVmVydGV4OworICAgICAgICAgICAgICAgICAgICAgZGVzYy5sYXlvdXRz
W2J1ZmZlcklkeF0uc3RlcFJhdGUgICAgID0gMTsKKyAgICAgICAgICAgICAgICAgfQorLSAgICAg
ICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRleHRNdGwtPmdl
dERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5oYXNCYXNlVmVydGV4SW5zdGFuY2VkRHJhdy5lbmFi
bGVkKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBkZXNjLmxheW91
dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rpb24gPSBNVExWZXJ0ZXhTdGVwRnVuY3Rpb25QZXJJbnN0
YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJZHhdLnN0ZXBS
YXRlICAgICA9IGJpbmRpbmcuZ2V0RGl2aXNvcigpOworICAgICAgICAgICAgICAgICB9CisrICAg
ICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAg
ICAgLy8gRW11bGF0ZSBpbnN0YW5jZSBhdHRyaWJ1dGUKKysgICAgICAgICAgICAgICAgICAgIG1F
bXVsYXRlZEluc3RhbmNlQXR0cmlicy5wdXNoX2JhY2sodik7CisrICAgICAgICAgICAgICAgICAg
ICBkZXNjLmxheW91dHNbYnVmZmVySWR4XS5zdGVwRnVuY3Rpb24gPSBNVExWZXJ0ZXhTdGVwRnVu
Y3Rpb25Db25zdGFudDsKKysgICAgICAgICAgICAgICAgICAgIGRlc2MubGF5b3V0c1tidWZmZXJJ
ZHhdLnN0ZXBSYXRlICAgICA9IDA7CisrICAgICAgICAgICAgICAgIH0KKysKKyAgICAgICAgICAg
ICAgICAgZGVzYy5sYXlvdXRzW2J1ZmZlcklkeF0uc3RyaWRlID0gbUN1cnJlbnRBcnJheUJ1ZmZl
clN0cmlkZXNbdl07CisgCisrICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudEFycmF5QnVmZmVy
c1t2XSkKKysgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgY21kRW5jb2Rl
ci0+c2V0VmVydGV4QnVmZmVyKG1DdXJyZW50QXJyYXlCdWZmZXJzW3ZdLT5nZXRDdXJyZW50QnVm
ZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyT2Zmc2V0LCBidWZmZXJJZHgpOworICAgICAgICAgICAgICAgICB9CisrICAgICAgICAg
ICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgLy8g
Tm8gYnVmZmVyIHNwZWNpZmllZCwgdXNlIHRoZSBjbGllbnQgbWVtb3J5IGRpcmVjdGx5IGFzIGlu
bGluZSBjb25zdGFudCBkYXRhCisrICAgICAgICAgICAgICAgICAgICBBU1NFUlQobUN1cnJlbnRB
cnJheUlubGluZURhdGFTaXplc1t2XSA8PSBtSW5saW5lRGF0YU1heFNpemUpOworKyAgICAgICAg
ICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0VmVydGV4Qnl0ZXMobUN1cnJlbnRBcnJheUlubGlu
ZURhdGFQb2ludGVyc1t2XSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhU2l6ZXNbdl0sIGJ1ZmZlcklkeCk7Cisr
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisrICAgICAgICB9ICAvLyBmb3IgKHYp
CisgICAgIH0KKyAKKyAgICAgKnZlcnRleERlc2NDaGFuZ2VkID0gZGlydHk7CitAQCAtNDM1LDYg
KzQ4Myw0MiBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6
VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CisgfQorIAorK3ZvaWQgVmVydGV4QXJyYXlNdGw6OmVtdWxhdGVJbnN0YW5j
ZURyYXdTdGVwKG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgaW5zdGFuY2VJ
ZCkKKyt7CisrCisrICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpWZXJ0ZXhBdHRyaWJ1dGU+ICZh
dHRyaWJzID0gbVN0YXRlLmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKKysgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8Z2w6OlZlcnRleEJpbmRpbmc+ICZiaW5kaW5ncyAgPSBtU3RhdGUuZ2V0VmVydGV4Qmlu
ZGluZ3MoKTsKKysKKysgICAgZm9yICh1aW50MzJfdCBpbnN0YW5jZUF0dHJpYklkeCA6IG1FbXVs
YXRlZEluc3RhbmNlQXR0cmlicykKKysgICAgeworKyAgICAgICAgdWludDMyX3QgYnVmZmVySWR4
ICAgICAgICAgICAgICAgPSBtdGw6OmtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGluc3RhbmNlQXR0
cmliSWR4OworKyAgICAgICAgY29uc3QgYXV0byAmYXR0cmliICAgICAgICAgICAgICAgPSBhdHRy
aWJzW2luc3RhbmNlQXR0cmliSWR4XTsKKysgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhCaW5kaW5n
ICZiaW5kaW5nID0gYmluZGluZ3NbYXR0cmliLmJpbmRpbmdJbmRleF07CisrICAgICAgICB1aW50
MzJfdCBvZmZzZXQgPQorKyAgICAgICAgICAgIGluc3RhbmNlSWQgLyBiaW5kaW5nLmdldERpdmlz
b3IoKSAqIG1DdXJyZW50QXJyYXlCdWZmZXJTdHJpZGVzW2luc3RhbmNlQXR0cmliSWR4XTsKKysg
ICAgICAgIGlmIChtQ3VycmVudEFycmF5QnVmZmVyc1tpbnN0YW5jZUF0dHJpYklkeF0pCisrICAg
ICAgICB7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IHN0YXRpY19jYXN0PHVpbnQzMl90PihtQ3Vy
cmVudEFycmF5QnVmZmVyT2Zmc2V0c1tpbnN0YW5jZUF0dHJpYklkeF0pOworKworKyAgICAgICAg
ICAgIGNtZEVuY29kZXItPnNldFZlcnRleEJ1ZmZlcihtQ3VycmVudEFycmF5QnVmZmVyc1tpbnN0
YW5jZUF0dHJpYklkeF0tPmdldEN1cnJlbnRCdWZmZXIoKSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBidWZmZXJJZHgpOworKyAgICAgICAgfQorKyAg
ICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIE5vIGJ1ZmZlciBzcGVjaWZp
ZWQsIHVzZSB0aGUgY2xpZW50IG1lbW9yeSBkaXJlY3RseSBhcyBpbmxpbmUgY29uc3RhbnQgZGF0
YQorKyAgICAgICAgICAgIEFTU0VSVChtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3Rh
bmNlQXR0cmliSWR4XSA8PSBtSW5saW5lRGF0YU1heFNpemUpOworKyAgICAgICAgICAgIGlmIChv
ZmZzZXQgPiBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSkK
KysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG9mZnNldCA9IHN0YXRpY19jYXN0PHVp
bnQzMl90PihtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2luc3RhbmNlQXR0cmliSWR4XSk7
CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldFZlcnRleEJ5dGVz
KG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRlcnNbaW5zdGFuY2VBdHRyaWJJZHhdICsgb2Zm
c2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50QXJy
YXlJbmxpbmVEYXRhU2l6ZXNbaW5zdGFuY2VBdHRyaWJJZHhdIC0gb2Zmc2V0LAorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcklkeCk7CisrICAgICAgICB9Cisr
ICAgIH0KKyt9CisrCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6dXBkYXRlQ2xpZW50
QXR0cmlicyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0VmVydGV4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB2ZXJ0
ZXhPckluZGV4Q291bnQsCitAQCAtNDYzLDEwICs1NDcsNyBAQCBpbmxpbmUgdm9pZCBTZXREZWZh
dWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0
KQorICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEJpbmRpbmcgJmJpbmRpbmcgID0gYmluZGluZ3Nb
YXR0cmliLmJpbmRpbmdJbmRleF07CisgICAgICAgICBBU1NFUlQoYXR0cmliLmVuYWJsZWQgJiYg
YmluZGluZy5nZXRCdWZmZXIoKS5nZXQoKSA9PSBudWxscHRyKTsKKyAKKy0gICAgICAgIEdMdWlu
dCBzdHJpZGU7CistICAgICAgICBjb25zdCBtdGw6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0
ID0KKy0gICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9uRm9ybWF0KGNvbnRleHRNdGwsIGF0
dHJpYi5mb3JtYXQtPmlkLCAmc3RyaWRlKTsKKy0KKysgICAgICAgIC8vIFNvdXJjZSBjbGllbnQg
bWVtb3J5IHBvaW50ZXIKKyAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyYyA9IHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QgKj4oYXR0cmliLnBvaW50ZXIpOworICAgICAgICAgQVNTRVJUKHNyYyk7
CisgCitAQCAtNDg0LDIyICs1NjUsNzYgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1
ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAgICAg
ICAgICBzdGFydEVsZW1lbnQgPSAwOworICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IFVuc2ln
bmVkQ2VpbERpdmlkZShpbnN0YW5jZUNvdW50LCBiaW5kaW5nLmdldERpdmlzb3IoKSk7CisgICAg
ICAgICB9CisrICAgICAgICBzaXplX3QgYnl0ZXNJbnRlbmRlZFRvVXNlID0gKHN0YXJ0RWxlbWVu
dCArIGVsZW1lbnRDb3VudCkgKiBiaW5kaW5nLmdldFN0cmlkZSgpOworKworKyAgICAgICAgY29u
c3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJmZvcm1hdCA9IGNvbnRleHRNdGwtPmdldFZlcnRleEZvcm1h
dChhdHRyaWIuZm9ybWF0LT5pZCwgZmFsc2UpOworKyAgICAgICAgYm9vbCBuZWVkU3RyZWFtaW5n
ICAgICAgICAgICAgICA9IGZvcm1hdC5hY3R1YWxGb3JtYXRJZCAhPSBmb3JtYXQuaW50ZW5kZWRG
b3JtYXRJZCB8fAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRpbmcuZ2V0U3Ry
aWRlKCkgJSBtdGw6OmtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGlnbm1lbnQpICE9IDAgfHwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kaW5nLmdldFN0cmlkZSgpIDwgZm9y
bWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcykgfHwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ5dGVzSW50ZW5kZWRUb1VzZSA+IG1JbmxpbmVEYXRhTWF4U2l6ZTsKKysK
KysgICAgICAgIGlmICghbmVlZFN0cmVhbWluZykKKysgICAgICAgIHsKKysgICAgICAgICAgICAv
LyBEYXRhIHdpbGwgYmUgdXBsb2FkZWQgZGlyZWN0bHkgYXMgaW5saW5lIGNvbnN0YW50IGRhdGEK
KysgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgICAg
ICA9IG51bGxwdHI7CisrICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURhdGFQb2ludGVy
c1thdHRyaWJJbmRleF0gPSBzcmM7CisrICAgICAgICAgICAgbUN1cnJlbnRBcnJheUlubGluZURh
dGFTaXplc1thdHRyaWJJbmRleF0gICAgPSBieXRlc0ludGVuZGVkVG9Vc2U7CisrICAgICAgICAg
ICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdICAgICAgPSAwOworKyAg
ICAgICAgICAgIG1DdXJyZW50QXJyYXlCdWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSAgICAgID0g
JmZvcm1hdDsKKysgICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyU3RyaWRlc1thdHRyaWJJ
bmRleF0gICAgICA9IGJpbmRpbmcuZ2V0U3RyaWRlKCk7CisrICAgICAgICB9CisrICAgICAgICBl
bHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgR0x1aW50IGNvbnZlcnRlZFN0cmlkZTsKKysg
ICAgICAgICAgICAvLyBOZWVkIHRvIHN0cmVhbSB0aGUgY2xpZW50IHZlcnRleCBkYXRhIHRvIGEg
YnVmZmVyLgorKyAgICAgICAgICAgIGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZzdHJlYW1Gb3Jt
YXQgPQorKyAgICAgICAgICAgICAgICBHZXRWZXJ0ZXhDb252ZXJzaW9uRm9ybWF0KGNvbnRleHRN
dGwsIGF0dHJpYi5mb3JtYXQtPmlkLCAmY29udmVydGVkU3RyaWRlKTsKKysKKyAgICAgICAgICAg
ICAvLyBBbGxvY2F0ZSBzcGFjZSBmb3Igc3RhcnRFbGVtZW50ICsgZWxlbWVudENvdW50IHNvIGlu
ZGV4aW5nIHdpbGwgd29yay4gIElmIHdlIGRvbid0CisgICAgICAgICAgICAgLy8gc3RhcnQgYXQg
emVybyBhbGwgdGhlIGluZGljZXMgd2lsbCBiZSBvZmYuCisgICAgICAgICAgICAgLy8gT25seSBl
bGVtZW50Q291bnQgdmVydGljZXMgd2lsbCBiZSB1c2VkIGJ5IHRoZSB1cGNvbWluZyBkcmF3IHNv
IHRoYXQgaXMgYWxsIHdlIGNvcHkuCistICAgICAgICBzaXplX3QgYnl0ZXNUb0FsbG9jYXRlID0g
KHN0YXJ0RWxlbWVudCArIGVsZW1lbnRDb3VudCkgKiBzdHJpZGU7CisrICAgICAgICAgICAgc2l6
ZV90IGJ5dGVzVG9BbGxvY2F0ZSA9IChzdGFydEVsZW1lbnQgKyBlbGVtZW50Q291bnQpICogY29u
dmVydGVkU3RyaWRlOworICAgICAgICAgICAgIHNyYyArPSBzdGFydEVsZW1lbnQgKiBiaW5kaW5n
LmdldFN0cmlkZSgpOworLSAgICAgICAgc2l6ZV90IGRlc3RPZmZzZXQgPSBzdGFydEVsZW1lbnQg
KiBzdHJpZGU7CisrICAgICAgICAgICAgc2l6ZV90IGRlc3RPZmZzZXQgPSBzdGFydEVsZW1lbnQg
KiBjb252ZXJ0ZWRTdHJpZGU7CisgCistICAgICAgICBtRHluYW1pY1ZlcnRleERhdGEudXBkYXRl
QWxpZ25tZW50KGNvbnRleHRNdGwsIHZlcnRleEZvcm1hdC5hY3R1YWxBbmdsZUZvcm1hdCgpLnBp
eGVsQnl0ZXMpOworLSAgICAgICAgQU5HTEVfVFJZKFN0cmVhbVZlcnRleERhdGEoCistICAgICAg
ICAgICAgY29udGV4dE10bCwgJm1EeW5hbWljVmVydGV4RGF0YSwgc3JjLCBieXRlc1RvQWxsb2Nh
dGUsIGRlc3RPZmZzZXQsIGVsZW1lbnRDb3VudCwKKy0gICAgICAgICAgICBiaW5kaW5nLmdldFN0
cmlkZSgpLCB2ZXJ0ZXhGb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uLAorLSAgICAgICAgICAgICZt
Q29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYkluZGV4XSwgJm1DdXJyZW50QXJyYXlC
dWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSkpOworKyAgICAgICAgICAgIG1DdXJyZW50QXJyYXlC
dWZmZXJGb3JtYXRzW2F0dHJpYkluZGV4XSA9ICZzdHJlYW1Gb3JtYXQ7CisrICAgICAgICAgICAg
bUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNbYXR0cmliSW5kZXhdID0gY29udmVydGVkU3RyaWRl
OworKworKyAgICAgICAgICAgIGlmIChieXRlc1RvQWxsb2NhdGUgPD0gbUlubGluZURhdGFNYXhT
aXplKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMg
c21hbGwgZW5vdWdoLCB1c2UgaG9zdCBtZW1vcnkgaW5zdGVhZCBvZiBjcmVhdGluZyBHUFUgYnVm
ZmVyLiBUbworKyAgICAgICAgICAgICAgICAvLyBhdm9pZCBzeW5jaHJvbml6aW5nIGFjY2VzcyB0
byBHUFUgYnVmZmVyIHRoYXQgaXMgc3RpbGwgaW4gdXNlLgorKyAgICAgICAgICAgICAgICBhbmds
ZTo6TWVtb3J5QnVmZmVyICZjb252ZXJ0ZWRDbGllbnRBcnJheSA9CisrICAgICAgICAgICAgICAg
ICAgICBtQ29udmVydGVkQ2xpZW50U21hbGxBcnJheXNbYXR0cmliSW5kZXhdOworKyAgICAgICAg
ICAgICAgICBpZiAoYnl0ZXNUb0FsbG9jYXRlID4gY29udmVydGVkQ2xpZW50QXJyYXkuc2l6ZSgp
KQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBBTkdMRV9DSEVDS19H
TF9BTExPQyhjb250ZXh0TXRsLCBjb252ZXJ0ZWRDbGllbnRBcnJheS5yZXNpemUoYnl0ZXNUb0Fs
bG9jYXRlKSk7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgQVNTRVJU
KHN0cmVhbUZvcm1hdC52ZXJ0ZXhMb2FkRnVuY3Rpb24pOworKyAgICAgICAgICAgICAgICBzdHJl
YW1Gb3JtYXQudmVydGV4TG9hZEZ1bmN0aW9uKHNyYywgYmluZGluZy5nZXRTdHJpZGUoKSwgZWxl
bWVudENvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnZlcnRlZENsaWVudEFycmF5LmRhdGEoKSArIGRlc3RPZmZzZXQpOworKworKyAgICAg
ICAgICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyc1thdHRyaWJJbmRleF0gICAgICAgICAgICA9
IG51bGxwdHI7CisrICAgICAgICAgICAgICAgIG1DdXJyZW50QXJyYXlJbmxpbmVEYXRhUG9pbnRl
cnNbYXR0cmliSW5kZXhdID0gY29udmVydGVkQ2xpZW50QXJyYXkuZGF0YSgpOworKyAgICAgICAg
ICAgICAgICBtQ3VycmVudEFycmF5SW5saW5lRGF0YVNpemVzW2F0dHJpYkluZGV4XSAgICA9IGJ5
dGVzVG9BbGxvY2F0ZTsKKysgICAgICAgICAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNl
dHNbYXR0cmliSW5kZXhdICAgICAgPSAwOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBl
bHNlCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBTdHJlYW0gdGhlIGNsaWVu
dCBkYXRhIHRvIGEgR1BVIGJ1ZmZlci4gU3luY2hyb25pemF0aW9uIG1pZ2h0IGhhcHBlbiBpZiBi
dWZmZXIgaXMKKysgICAgICAgICAgICAgICAgLy8gaW4gdXNlLgorKyAgICAgICAgICAgICAgICBt
RHluYW1pY1ZlcnRleERhdGEudXBkYXRlQWxpZ25tZW50KGNvbnRleHRNdGwsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtRm9ybWF0LmFj
dHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRlcyk7CisrICAgICAgICAgICAgICAgIEFOR0xFX1RS
WShTdHJlYW1WZXJ0ZXhEYXRhKGNvbnRleHRNdGwsICZtRHluYW1pY1ZlcnRleERhdGEsIHNyYywg
Ynl0ZXNUb0FsbG9jYXRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0T2Zmc2V0LCBlbGVtZW50Q291bnQsIGJpbmRpbmcuZ2V0U3RyaWRlKCksCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUZvcm1hdC52ZXJ0
ZXhMb2FkRnVuY3Rpb24sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJzW2F0dHJpYkluZGV4XSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1DdXJyZW50QXJyYXlCdWZmZXJP
ZmZzZXRzW2F0dHJpYkluZGV4XSkpOworIAorICAgICAgICAgICAgICAgICBtQ3VycmVudEFycmF5
QnVmZmVyc1thdHRyaWJJbmRleF0gPSAmbUNvbnZlcnRlZEFycmF5QnVmZmVySG9sZGVyc1thdHRy
aWJJbmRleF07CistICAgICAgICBtQ3VycmVudEFycmF5QnVmZmVyRm9ybWF0c1thdHRyaWJJbmRl
eF0gPSAmdmVydGV4Rm9ybWF0OworLSAgICAgICAgbUN1cnJlbnRBcnJheUJ1ZmZlclN0cmlkZXNb
YXR0cmliSW5kZXhdID0gc3RyaWRlOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0gIC8vIGlm
IChuZWVkU3RyZWFtaW5nKQorICAgICB9CisgCisgICAgIG1WZXJ0ZXhBcnJheURpcnR5ID0gdHJ1
ZTsKK0BAIC01MjYsNyArNjYxLDcgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRleEJ1ZmZl
ckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAgICAgICAg
ICBib29sIG5lZWRDb252ZXJzaW9uID0KKyAgICAgICAgICAgICAgICAgZm9ybWF0LmFjdHVhbEZv
cm1hdElkICE9IGZvcm1hdC5pbnRlbmRlZEZvcm1hdElkIHx8CisgICAgICAgICAgICAgICAgIChi
aW5kaW5nLmdldE9mZnNldCgpICUgZm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCkucGl4ZWxCeXRl
cykgIT0gMCB8fAorLSAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIG10bDo6
a1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMCB8fAorKyAgICAgICAgICAg
ICAgICAoYmluZGluZy5nZXRPZmZzZXQoKSAlIDQpICE9IDAgfHwKKyAgICAgICAgICAgICAgICAg
KGJpbmRpbmcuZ2V0U3RyaWRlKCkgPCBmb3JtYXQuYWN0dWFsQW5nbGVGb3JtYXQoKS5waXhlbEJ5
dGVzKSB8fAorICAgICAgICAgICAgICAgICAoYmluZGluZy5nZXRTdHJpZGUoKSAlIG10bDo6a1Zl
cnRleEF0dHJpYkJ1ZmZlclN0cmlkZUFsaWdubWVudCkgIT0gMDsKKyAKK0BAIC01NjMsMTkgKzY5
OCwyMSBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVy
dGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorIAorIGFuZ2xlOjpSZXN1bHQgVmVydGV4QXJy
YXlNdGw6OmdldEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNU
eXBlIHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4QnVmZmVyT3V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
aWR4QnVmZmVyT2Zmc2V0T3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlICppbmRleFR5cGVPdXQpCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUg
KmluZGV4VHlwZU91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKmluZGV4QnVmZmVyQ291bnRPdXQpCisgeworICAgICBjb25zdCBnbDo6QnVm
ZmVyICpnbEVsZW1lbnRBcnJheUJ1ZmZlciA9IGdldFN0YXRlKCkuZ2V0RWxlbWVudEFycmF5QnVm
ZmVyKCk7CisgCisgICAgIHNpemVfdCBjb252ZXJ0ZWRPZmZzZXQgPSByZWludGVycHJldF9jYXN0
PHNpemVfdD4oaW5kaWNlcyk7CisgICAgIGlmICghZ2xFbGVtZW50QXJyYXlCdWZmZXIpCisgICAg
IHsKKy0gICAgICAgIEFOR0xFX1RSWShzdHJlYW1JbmRleEJ1ZmZlckZyb21DbGllbnQoY29udGV4
dCwgdHlwZSwgY291bnQsIGluZGljZXMsIGlkeEJ1ZmZlck91dCwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0KSk7CisrICAg
ICAgICBBTkdMRV9UUlkoc3RyZWFtSW5kZXhCdWZmZXJGcm9tQ2xpZW50KGNvbnRleHQsIHR5cGUs
IG1vZGUsIGNvdW50LCBpbmRpY2VzLCBpZHhCdWZmZXJPdXQsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNldE91dCwgaW5kZXhCdWZm
ZXJDb3VudE91dCkpOworICAgICB9CisgICAgIGVsc2UKKyAgICAgeworQEAgLTU4Myw4ICs3MjAs
OCBAQCBpbmxpbmUgdm9pZCBTZXREZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4
QnVmZmVyTGF5b3V0RGVzYyAqbGF5b3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb252ZXJ0ZWRPZmZzZXQgJSBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCkgIT0g
MDsKKyAgICAgICAgIGlmIChuZWVkQ29udmVyc2lvbikKKyAgICAgICAgIHsKKy0gICAgICAgICAg
ICBBTkdMRV9UUlkoY29udmVydEluZGV4QnVmZmVyKGNvbnRleHQsIHR5cGUsIGNvbnZlcnRlZE9m
ZnNldCwgaWR4QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWR4QnVmZmVyT2Zmc2V0T3V0KSk7CisrICAgICAgICAgICAgQU5HTEVfVFJZKGNvbnZl
cnRJbmRleEJ1ZmZlcihjb250ZXh0LCB0eXBlLCBtb2RlLCBjb252ZXJ0ZWRPZmZzZXQsIGlkeEJ1
ZmZlck91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1
ZmZlck9mZnNldE91dCwgaW5kZXhCdWZmZXJDb3VudE91dCkpOworICAgICAgICAgfQorICAgICAg
ICAgZWxzZQorICAgICAgICAgeworQEAgLTU5Miw2ICs3MjksNyBAQCBpbmxpbmUgdm9pZCBTZXRE
ZWZhdWx0VmVydGV4QnVmZmVyTGF5b3V0KG10bDo6VmVydGV4QnVmZmVyTGF5b3V0RGVzYyAqbGF5
b3V0KQorICAgICAgICAgICAgIEJ1ZmZlck10bCAqYnVmZmVyTXRsID0gbXRsOjpHZXRJbXBsKGds
RWxlbWVudEFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgICAqaWR4QnVmZmVyT3V0ICAgICAgICA9
IGJ1ZmZlck10bC0+Z2V0Q3VycmVudEJ1ZmZlcigpOworICAgICAgICAgICAgICppZHhCdWZmZXJP
ZmZzZXRPdXQgID0gY29udmVydGVkT2Zmc2V0OworKyAgICAgICAgICAgICppbmRleEJ1ZmZlckNv
dW50T3V0ID0gY291bnQ7CisgICAgICAgICB9CisgICAgIH0KKyAKK0BAIC02MDcsOSArNzQ1LDEx
IEBAIGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhC
dWZmZXJMYXlvdXREZXNjICpsYXlvdXQpCisgCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10
bDo6Y29udmVydEluZGV4QnVmZmVyKGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxl
bWVudHNUeXBlIGluZGV4VHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCdWZmZXJSZWYg
KmlkeEJ1ZmZlck91dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICppZHhCdWZmZXJPZmZzZXRPdXQpCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyT2Zmc2V0T3V0
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKmluZGV4QnVmZmVyQ291bnRPdXQpCisgeworICAgICBzaXplX3Qgb2Zmc2V0TW9kdWxvID0g
b2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQ7CisgICAgIEFTU0VSVChv
ZmZzZXRNb2R1bG8gIT0gMCB8fCBpbmRleFR5cGUgPT0gZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVu
c2lnbmVkQnl0ZSk7CitAQCAtNjM4LDE1ICs3NzgsMTUgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVs
dFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkK
KyAgICAgfQorIAorICAgICBzaXplX3QgaW5kZXhDb3VudCA9IEdldEluZGV4Q291bnQoaWR4QnVm
ZmVyLCBvZmZzZXRNb2R1bG8sIGluZGV4VHlwZSk7CistCistICAgIGlmICghY29udGV4dE10bC0+
Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0NoZWFwUmVuZGVyUGFzcy5lbmFibGVkICYm
CistICAgICAgICBjb250ZXh0TXRsLT5nZXRSZW5kZXJDb21tYW5kRW5jb2RlcigpKQorKyAgICBp
ZiAoKCFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQ
YXNzSXNDaGVhcC5lbmFibGVkICYmCisrICAgICAgICAgY29udGV4dE10bC0+Z2V0UmVuZGVyQ29t
bWFuZEVuY29kZXIoKSkpCisgICAgIHsKKyAgICAgICAgIC8vIFdlIHNob3VsZG4ndCB1c2UgR1BV
IHRvIGNvbnZlcnQgd2hlbiB3ZSBhcmUgaW4gYSBtaWRkbGUgb2YgYSByZW5kZXIgcGFzcy4KKyAg
ICAgICAgIEFOR0xFX1RSWShTdHJlYW1JbmRleERhdGEoY29udGV4dE10bCwgJmNvbnZlcnNpb24t
PmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlci0+Z2V0
Q2xpZW50U2hhZG93Q29weURhdGEoY29udGV4dE10bCkgKyBvZmZzZXRNb2R1bG8sCistICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VHlwZSwgaW5kZXhDb3VudCwgZ2xTdGF0
ZS5pc1ByaW1pdGl2ZVJlc3RhcnRFbmFibGVkKCksCistICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZjb252ZXJzaW9uLT5jb252ZXJ0ZWRCdWZmZXIsICZjb252ZXJzaW9uLT5jb252
ZXJ0ZWRPZmZzZXQpKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhU
eXBlLCBpbmRleENvdW50LCBtb2RlLCBnbFN0YXRlLmlzUHJpbWl0aXZlUmVzdGFydEVuYWJsZWQo
KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnNpb24tPmNvbnZl
cnRlZEJ1ZmZlciwgJmNvbnZlcnNpb24tPmNvbnZlcnRlZE9mZnNldCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhCdWZmZXJDb3VudE91dCkpOworICAgICB9CisgICAg
IGVsc2UKKyAgICAgeworQEAgLTY5NSwxOCArODM1LDIwIEBAIGlubGluZSB2b2lkIFNldERlZmF1
bHRWZXJ0ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZmZXJMYXlvdXREZXNjICpsYXlvdXQp
CisgCisgYW5nbGU6OlJlc3VsdCBWZXJ0ZXhBcnJheU10bDo6c3RyZWFtSW5kZXhCdWZmZXJGcm9t
Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlw
ZSBpbmRleFR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleENv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICpzb3VyY2VQb2ludGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqaWR4
QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgKmlkeEJ1ZmZlck9mZnNldE91dCkKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppZHhC
dWZmZXJPZmZzZXRPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWR4QnVmZmVyQ291bnRPdXQpCisgeworICAgICBB
U1NFUlQoZ2V0U3RhdGUoKS5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSA9PSBudWxscHRyKTsKKyAg
ICAgQ29udGV4dE10bCAqY29udGV4dE10bCA9IG10bDo6R2V0SW1wbChjb250ZXh0KTsKKyAKKyAg
ICAgYXV0byBzcmNEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihzb3VyY2VQb2lu
dGVyKTsKKy0gICAgQU5HTEVfVFJZKFN0cmVhbUluZGV4RGF0YShjb250ZXh0TXRsLCAmbUR5bmFt
aWNJbmRleERhdGEsIHNyY0RhdGEsIGluZGV4VHlwZSwgaW5kZXhDb3VudCwKKysgICAgQU5HTEVf
VFJZKFN0cmVhbUluZGV4RGF0YShjb250ZXh0TXRsLCAmbUR5bmFtaWNJbmRleERhdGEsIHNyY0Rh
dGEsIGluZGV4VHlwZSwgaW5kZXhDb3VudCwgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5nZXRTdGF0ZSgpLmlzUHJpbWl0aXZlUmVzdGFydEVuYWJsZWQoKSwg
aWR4QnVmZmVyT3V0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9m
ZnNldE91dCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeEJ1ZmZlck9mZnNl
dE91dCwgaWR4QnVmZmVyQ291bnRPdXQpKTsKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6
OkNvbnRpbnVlOworIH0KK0BAIC03NDQsNyArODg2LDYgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVs
dFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkK
KyAgICAgLy8gSGFzIHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIgaGFzIGNoYW5nZWQgc2luY2Ug
bGFzdCBjb252ZXJzaW9uPworICAgICBpZiAoIWNvbnZlcnNpb24tPmRpcnR5KQorICAgICB7Cist
ICAgICAgICAvLyBCdWZmZXIncyBkYXRhIGhhc24ndCBiZWVuIGNoYW5nZWQuIFJlLXVzZSBsYXN0
IGNvbnZlcnRlZCByZXN1bHRzCisgICAgICAgICBtQ29udmVydGVkQXJyYXlCdWZmZXJIb2xkZXJz
W2F0dHJpYkluZGV4XS5zZXQoY29udmVyc2lvbi0+Y29udmVydGVkQnVmZmVyKTsKKyAgICAgICAg
IG1DdXJyZW50QXJyYXlCdWZmZXJPZmZzZXRzW2F0dHJpYkluZGV4XSA9IGNvbnZlcnNpb24tPmNv
bnZlcnRlZE9mZnNldDsKKyAKK0BAIC03NjEsNyArOTAyLDcgQEAgaW5saW5lIHZvaWQgU2V0RGVm
YXVsdFZlcnRleEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91
dCkKKyAgICAgYm9vbCBjYW5FeHBhbmRDb21wb25lbnRzT25HUFUgPSBjb252ZXJ0ZWRGb3JtYXQu
YWN0dWFsU2FtZUdMVHlwZTsKKyAKKyAgICAgaWYgKGNvbnRleHRNdGwtPmdldFJlbmRlckNvbW1h
bmRFbmNvZGVyKCkgJiYKKy0gICAgICAgICFjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldEZl
YXR1cmVzKCkuaGFzQ2hlYXBSZW5kZXJQYXNzLmVuYWJsZWQgJiYKKysgICAgICAgICFjb250ZXh0
TXRsLT5nZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuYnJlYWtSZW5kZXJQYXNzSXNDaGVhcC5l
bmFibGVkICYmCisgICAgICAgICAhY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5nZXRGZWF0dXJl
cygpLmhhc0V4cGxpY2l0TWVtQmFycmllci5lbmFibGVkKQorICAgICB7CisgICAgICAgICAvLyBD
YW5ub3QgdXNlIEdQVSB0byBjb252ZXJ0IHdoZW4gd2UgYXJlIGluIGEgbWlkZGxlIG9mIGEgcmVu
ZGVyIHBhc3MuCitAQCAtNzkyLDYgKzkzMyw5IEBAIGlubGluZSB2b2lkIFNldERlZmF1bHRWZXJ0
ZXhCdWZmZXJMYXlvdXQobXRsOjpWZXJ0ZXhCdWZmZXJMYXlvdXREZXNjICpsYXlvdXQpCisgICAg
IGNvbnZlcnNpb24tPmNvbnZlcnRlZEJ1ZmZlciA9IG1Db252ZXJ0ZWRBcnJheUJ1ZmZlckhvbGRl
cnNbYXR0cmliSW5kZXhdLmdldEN1cnJlbnRCdWZmZXIoKTsKKyAgICAgY29udmVyc2lvbi0+Y29u
dmVydGVkT2Zmc2V0ID0gbUN1cnJlbnRBcnJheUJ1ZmZlck9mZnNldHNbYXR0cmliSW5kZXhdOwor
IAorKyAgICBBU1NFUlQoY29udmVyc2lvbi0+ZGlydHkpOworKyAgICBjb252ZXJzaW9uLT5kaXJ0
eSA9IGZhbHNlOworKworICNpZm5kZWYgTkRFQlVHCisgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BF
CisgICAgIHsKK0BAIC04MDEsOSArOTQ1LDYgQEAgaW5saW5lIHZvaWQgU2V0RGVmYXVsdFZlcnRl
eEJ1ZmZlckxheW91dChtdGw6OlZlcnRleEJ1ZmZlckxheW91dERlc2MgKmxheW91dCkKKyAgICAg
fQorICNlbmRpZgorIAorLSAgICBBU1NFUlQoY29udmVyc2lvbi0+ZGlydHkpOworLSAgICBjb252
ZXJzaW9uLT5kaXJ0eSA9IGZhbHNlOworLQorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29u
dGludWU7CisgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9k
b2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9k
b2MvQVBQTEVfY2xpcF9kaXN0YW5jZS5tZAoraW5kZXggZmEwNzNhZS4uMTNhZmRjMyAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9kb2MvQVBQTEVfY2xpcF9kaXN0YW5j
ZS5tZAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL2RvYy9BUFBMRV9jbGlwX2Rp
c3RhbmNlLm1kCitAQCAtNiw2ICs2LDMxIEBAIGxldmVsIHNpZGUuIFdyaXRpbmcgdG8gYGdsX0Ns
aXBEaXN0YW5jZVtpXWAgaW4gc2hhZGVyIHdpbGwgYmUgaWdub3JlZCBpZiBpdCBpcyBkCisgZG9l
c24ndCBoYXZlIGFueSBlcXVpdmFsZW50IEFQSSB0byBkaXNhYmxlL2VuYWJsZSB0aGUgd3JpdGlu
ZywgdGhvdWdoIHdyaXRpbmcgdG8gYSBgY2xpcF9kaXN0YW5jZWAKKyB2YXJpYWJsZSBhdXRvbWF0
aWNhbGx5IGVuYWJsZXMgaXQuCisgCistVG8gZW11bGF0ZSB0aGlzIGVuYWJsaW5nL2Rpc2FibGlu
ZyBBUEksIHRoZSBNZXRhbCBiYWNrLWVuZCB1c2VzIGEgc2ltaWxhciBpbXBsZW1lbnRhdGlvbiBh
cyB3aGF0CistW1Z1bGthbiBiYWNrLWVuZCBkb2VzXSguLi8uLi92dWxrYW4vZG9jL0FQUExFX2Ns
aXBfZGlzdGFuY2UubWQpLiBQbGVhc2UgcmVmZXIgdG8gdGhhdCBkb2N1bWVudCBmb3IKKy1tb3Jl
IGRldGFpbHMuCisrVG8gaW1wbGVtZW50IHRoaXMgZW5hYmxpbmcvZGlzYWJsaW5nIEFQSSBpbiBN
ZXRhbCBiYWNrLWVuZDoKKysKKystIFRoZSBzaGFkZXIgY29tcGlsZXIgd2lsbCB0cmFuc2xhdGUg
ZWFjaCBgZ2xfQ2xpcERpc3RhbmNlW2ldYCBhc3NpZ25tZW50IHRvIGFuIGFzc2lnbm1lbnQgdG8K
KysgIGBBTkdMRUNsaXBEaXN0YW5jZVtpXWAgdmFyaWFibGUuCisrLSBBIHNwZWNpYWwgZHJpdmVy
IHVuaWZvcm0gdmFyaWFibGUgYGNsaXBEaXN0YW5jZXNFbmFibGVkYCB3aWxsIGNvbnRhaW4gb25l
IGJpdCBmbGFnIGZvciBlYWNoCisrICBlbmFibGVkIGBnbF9DbGlwRGlzdGFuY2VbaV1gLiBUaGlz
IHZhcmlhYmxlIHN1cHBvcnRzIHVwIHRvIDMyIGBnbF9DbGlwRGlzdGFuY2VgIGluZGljZXMuCisr
LSBBdCB0aGUgZW5kIG9mIHZlcnRleCBzaGFkZXIsIHRoZSBlbmFibGVkIGBnbF9DbGlwRGlzdGFu
Y2VbaV1gIHdpbGwgYmUgYXNzaWduZWQgdGhlIHJlc3BlY3RpdmUKKysgIHZhbHVlIGZyb20gYEFO
R0xFQ2xpcERpc3RhbmNlW2ldYC4gT24gdGhlIG90aGVyIGhhbmQsIHRob3NlIGRpc2FibGVkIGVs
ZW1lbnRzIHdpbGwgYmUgYXNzaWduZWQKKysgIHplcm8gdmFsdWUuIFRoaXMgc3RlcCBpcyBkZXNj
cmliZWQgaW4gdGhlIGZvbGxvd2luZyBjb2RlOgorKyAgICBgYGAKKysgICAgZm9yIChpbnQgaW5k
ZXggOiBhcnJheWxlbmd0aChnbF9DbGlwRGlzdGFuY2UpKQorKyAgICB7CisrICAgICAgICBpZiAo
QU5HTEVVbmlmb3Jtcy5jbGlwRGlzdGFuY2VzRW5hYmxlZCAmICgweDEgPDwgaW5kZXgpKQorKyAg
ICAgICAgICAgIGdsX0NsaXBEaXN0YW5jZVtpbmRleF0gPSBBTkdMRUNsaXBEaXN0YW5jZVtpbmRl
eF07CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ2xfQ2xpcERpc3RhbmNlW2luZGV4XSA9
IDA7CisrICAgIH0KKysgICAgYGBgCisrLSBTb21lIG1pbm9yIG9wdGltaXphdGlvbnM6CisrICAg
IC0gT25seSB0aG9zZSBpbmRpY2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgaW4gdGhlIG9yaWdpbmFs
IGNvZGUgd2lsbCBiZSB1c2VkIGluIGlmIGVsc2UgYmxvY2sKKysgICAgICBhYm92ZS4KKysgICAg
LSBUaG9zZSBlbGVtZW50cyB3aG9zZSBpbmRleCBub3QgcmVmZXJlbmNlZCBpbiB0aGUgb3JpZ2lu
YWwgY29kZSB3aWxsIGJlIHplcm9pc2VkIGluc3RlYWQuCisrICAgIC0gSWYgdGhlIG9yaWdpbmFs
IGNvZGUgb25seSB1c2VzIHVwIHRvIGFuIGluZGV4IDwgYGdsX01heENsaXBEaXN0YW5jZXNgLCB0
aGVuCisrICAgICAgdGhlIGxvb3Agd2lsbCBoYXZlIGF0IG1vc3QgYGluZGV4KzFgIGl0ZXJhdGlv
bnMuIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBpbmRleCBub3QgYmVpbmcKKysgICAgICBpbnRl
Z3JhbCBjb25zdGFudCB2YWx1ZSBrbm93biBhdCBjb21waWxlIHRpbWUgdGhlbiBkZWNsYXJlZCBz
aXplIG9mIGBnbF9DbGlwRGlzdGFuY2VgCisrICAgICAgd2lsbCBiZSB0aGUgbG9vcCBzaXplLgor
KyAgICAtIEZpbmFsbHksIGlmIHRoZSBvcmlnaW5hbCBjb2RlIGRvZXNuJ3QgdXNlIGBnbF9DbGlw
RGlzdGFuY2VgLCB0aGVuIGFsbCB0aGUgc3RlcHMgYWJvdmUgd2lsbCBiZQorKyAgICAgIG9taXR0
ZWQuCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkgYi9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvZ2VuX210bF9mb3JtYXRfdGFibGUucHkKK2luZGV4IDNjZTE0MmUuLjZl
YWI0MDkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvZ2VuX210bF9m
b3JtYXRfdGFibGUucHkKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9nZW5fbXRs
X2Zvcm1hdF90YWJsZS5weQorQEAgLTQ4LDcgKzQ4LDYgQEAgbmFtZXNwYWNlIG10bAorIHZvaWQg
Rm9ybWF0Ojppbml0KGNvbnN0IERpc3BsYXlNdGwgKmRpc3BsYXksIGFuZ2xlOjpGb3JtYXRJRCBp
bnRlbmRlZEZvcm1hdElkXykKKyB7eworICAgICB0aGlzLT5pbnRlbmRlZEZvcm1hdElkID0gaW50
ZW5kZWRGb3JtYXRJZF87CistCisgICAgIGlkPE1UTERldmljZT4gbWV0YWxEZXZpY2UgPSBkaXNw
bGF5LT5nZXRNZXRhbERldmljZSgpOworIAorICAgICAvLyBBY3R1YWwgY29udmVyc2lvbgorQEAg
LTEwOSw2ICsxMDgsMjMgQEAgaW1hZ2VfZm9ybWF0X2Fzc2lnbl90ZW1wbGF0ZTIgPSAiIiIKKyAg
ICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2luaXRfZnVuY3Rpb25fZmFsbGJh
Y2t9OworICAgICAgICAgICAgIH19CisgIiIiCisrI0QxNiBpcyBmdWxseSBzdXBwb3J0ZWQgb24g
IEFwcGxlMysuIEhvd2V2ZXIsIG9uCisrI3ByZXZpb3VzICB2ZXJzaW9ucyBvZiBBcHBsZSBoYXJk
d2FyZSwgc29tZSBvcGVyYXRpb25zIGNhbiBjYXVzZQorKyN1bmRlZmluZWQgYmVoYXZpb3IuCisr
aW1hZ2VfZm9ybWF0X2Fzc2lnbl90ZW1wbGF0ZTMgPSAiIiIKKysgICAgICAgICAgICBpZiAoW21l
dGFsRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlM10pCisrICAgICAgICAg
ICAge3sKKysgICAgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgPSB7bXRsX2Zvcm1hdH07
CisrICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElE
Ojp7YWN0dWFsX2FuZ2xlX2Zvcm1hdH07CisrICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5j
dGlvbiA9IHtpbml0X2Z1bmN0aW9ufTsKKysgICAgICAgICAgICB9fQorKyAgICAgICAgICAgIGVs
c2UKKysgICAgICAgICAgICB7eworKyAgICAgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCA9
IHttdGxfZm9ybWF0X2ZhbGxiYWNrfTsKKysgICAgICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9y
bWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OnthY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxiYWNrfTsK
KysgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uID0ge2luaXRfZnVuY3Rpb25fZmFs
bGJhY2t9OworKyAgICAgICAgICAgIH19CisrIiIiCisgCisgY2FzZV9pbWFnZV9mb3JtYXRfdGVt
cGxhdGUxID0gIiIiICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6e2FuZ2xlX2Zvcm1hdH06
CisgICAgICAgICAgICAge2ltYWdlX2Zvcm1hdF9hc3NpZ259CitAQCAtMjEzLDYgKzIyOSw4IEBA
IGRlZiBnZXRfdmVydGV4X2NvcHlfZnVuY3Rpb25fYW5kX2RlZmF1bHRfYWxwaGEoc3JjX2Zvcm1h
dCwgZHN0X2Zvcm1hdCk6CisgCisgCisgIyBHZW5lcmF0ZSBmb3JtYXQgY29udmVyc2lvbiBzd2l0
Y2ggY2FzZSAoZ2VuZXJpYyBjYXNlKQorKworKworIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9j
YXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19tdGxf
bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbl9nZW5fZnVuYyk6Cisg
ICAgIGlmIGlzaW5zdGFuY2UoYWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBkaWN0KToKK0BAIC0y
NTUsNiArMjczLDggQEAgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2Nhc2UoYW5nbGVfZm9ybWF0
LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX20KKyAKKyAKKyAjIEdlbmVyYXRl
IGZvcm1hdCBjb252ZXJzaW9uIHN3aXRjaCBjYXNlIChzaW1wbGUgY2FzZSkKKysKKysKKyBkZWYg
Z2VuX2ltYWdlX21hcF9zd2l0Y2hfc2ltcGxlX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5n
bGVfZm9ybWF0X2luZm8sIGFuZ2xlX3RvX2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmdsZV90b19tdGxfbWFwKToKKyAKK0BAIC0yNzAsNiArMjkwLDggQEAgZGVm
IGdlbl9pbWFnZV9tYXBfc3dpdGNoX3NpbXBsZV9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2Fu
Z2xlX2Zvcm1hdF9pbmZvLCBhbmcKKyAKKyAKKyAjIEdlbmVyYXRlIGZvcm1hdCBjb252ZXJzaW9u
IHN3aXRjaCBjYXNlIChNYWMgY2FzZSkKKysKKysKKyBkZWYgZ2VuX2ltYWdlX21hcF9zd2l0Y2hf
bWFjX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFuZ2xlX3Rv
X2dsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZV90b19tdGxfbWFw
LCBtYWNfZmFsbGJhY2tzKToKKyAgICAgZ2xfZm9ybWF0ID0gYW5nbGVfdG9fZ2xbYW5nbGVfZm9y
bWF0XQorQEAgLTMwMSwxMSArMzIzLDQzIEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3aXRjaF9tYWNf
Y2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXRfaW5mbywgYW5nbGVfCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbl9mb3JtYXRfYXNzaWduX2NvZGUp
CisgCisgCisrZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX2lvc19jYXNlKGFuZ2xlX2Zvcm1hdCwg
YWN0dWFsX2FuZ2xlX2Zvcm1hdF9pbmZvLCBhbmdsZV90b19nbCwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYW5nbGVfdG9fbXRsX21hcCwgaW9zX2ZhbGxiYWNrcyk6CisrICAg
IGdsX2Zvcm1hdCA9IGFuZ2xlX3RvX2dsW2FuZ2xlX2Zvcm1hdF0KKysKKysgICAgZGVmIGdlbl9m
b3JtYXRfYXNzaWduX2NvZGUoYWN0dWFsX2FuZ2xlX2Zvcm1hdCwgYW5nbGVfdG9fbXRsX21hcCk6
CisrICAgICAgICBpZiBhY3R1YWxfYW5nbGVfZm9ybWF0IGluIGlvc19mYWxsYmFja3M6CisrICAg
ICAgICAgICAgIyBUaGlzIGZvcm1hdCAoRGVwdGgxNlVuaWZvcm0pIHJlcXVpcmVzIGZhbGxiYWNr
IHdoZW4gaU9TIGhhcmR3YXJlIGRvZXMgbm90IGZ1bGx5IHN1cHBvcnQgZGVwdGgxNi4KKysgICAg
ICAgICAgICAjIEZhbGxiYWNrIGZvcm1hdDoKKysgICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9y
bWF0X2ZhbGxiYWNrID0gaW9zX2ZhbGxiYWNrc1thY3R1YWxfYW5nbGVfZm9ybWF0XQorKyAgICAg
ICAgICAgICMgcmV0dXJuIGlmIGVsc2UgYmxvY2s6CisrICAgICAgICAgICAgcmV0dXJuIGltYWdl
X2Zvcm1hdF9hc3NpZ25fdGVtcGxhdGUzLmZvcm1hdCgKKysgICAgICAgICAgICAgICAgYWN0dWFs
X2FuZ2xlX2Zvcm1hdD1hY3R1YWxfYW5nbGVfZm9ybWF0LAorKyAgICAgICAgICAgICAgICBtdGxf
Zm9ybWF0PWFuZ2xlX3RvX210bF9tYXBbYWN0dWFsX2FuZ2xlX2Zvcm1hdF0sCisrICAgICAgICAg
ICAgICAgIGluaXRfZnVuY3Rpb249YW5nbGVfZm9ybWF0X3V0aWxzLmdldF9pbnRlcm5hbF9mb3Jt
YXRfaW5pdGlhbGl6ZXIoCisrICAgICAgICAgICAgICAgICAgICBnbF9mb3JtYXQsIGFjdHVhbF9h
bmdsZV9mb3JtYXQpLAorKyAgICAgICAgICAgICAgICBhY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxi
YWNrPWFjdHVhbF9hbmdsZV9mb3JtYXRfZmFsbGJhY2ssCisrICAgICAgICAgICAgICAgIG10bF9m
b3JtYXRfZmFsbGJhY2s9YW5nbGVfdG9fbXRsX21hcFthY3R1YWxfYW5nbGVfZm9ybWF0X2ZhbGxi
YWNrXSwKKysgICAgICAgICAgICAgICAgaW5pdF9mdW5jdGlvbl9mYWxsYmFjaz1hbmdsZV9mb3Jt
YXRfdXRpbHMuZ2V0X2ludGVybmFsX2Zvcm1hdF9pbml0aWFsaXplcigKKysgICAgICAgICAgICAg
ICAgICAgIGdsX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdF9mYWxsYmFjaykpCisrICAgICAg
ICBlbHNlOgorKyAgICAgICAgICAgICMgcmV0dXJuIG9yZGluYXJ5IGJsb2NrOgorKyAgICAgICAg
ICAgIHJldHVybiBpbWFnZV9mb3JtYXRfYXNzaWduX3RlbXBsYXRlMS5mb3JtYXQoCisrICAgICAg
ICAgICAgICAgIGFjdHVhbF9hbmdsZV9mb3JtYXQ9YWN0dWFsX2FuZ2xlX2Zvcm1hdCwKKysgICAg
ICAgICAgICAgICAgbXRsX2Zvcm1hdD1hbmdsZV90b19tdGxfbWFwW2FjdHVhbF9hbmdsZV9mb3Jt
YXRdLAorKyAgICAgICAgICAgICAgICBpbml0X2Z1bmN0aW9uPWFuZ2xlX2Zvcm1hdF91dGlscy5n
ZXRfaW50ZXJuYWxfZm9ybWF0X2luaXRpYWxpemVyKAorKyAgICAgICAgICAgICAgICAgICAgZ2xf
Zm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0KSkKKysKKysgICAgcmV0dXJuIGdlbl9pbWFnZV9t
YXBfc3dpdGNoX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0X2luZm8sIGFu
Z2xlX3RvX210bF9tYXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
bl9mb3JtYXRfYXNzaWduX2NvZGUpCisrCisrCisgZGVmIGdlbl9pbWFnZV9tYXBfc3dpdGNoX3N0
cmluZyhpbWFnZV90YWJsZSwgYW5nbGVfdG9fZ2wpOgorICAgICBhbmdsZV9vdmVycmlkZSA9IGlt
YWdlX3RhYmxlWyJvdmVycmlkZSJdCisgICAgIG1hY19vdmVycmlkZSA9IGltYWdlX3RhYmxlWyJv
dmVycmlkZV9tYWMiXQorICAgICBpb3Nfb3ZlcnJpZGUgPSBpbWFnZV90YWJsZVsib3ZlcnJpZGVf
aW9zIl0KKy0gICAgbWFjX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJkMjRzOF9mYWxsYmFja3Nf
bWFjIl0KKysgICAgbWFjX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJmYWxsYmFja3NfbWFjIl0K
KysgICAgaW9zX2ZhbGxiYWNrcyA9IGltYWdlX3RhYmxlWyJmYWxsYmFja3NfaW9zIl0KKyAgICAg
YW5nbGVfdG9fbXRsID0gaW1hZ2VfdGFibGVbIm1hcCJdCisgICAgIG1hY19zcGVjaWZpY19tYXAg
PSBpbWFnZV90YWJsZVsibWFwX21hYyJdCisgICAgIGlvc19zcGVjaWZpY19tYXAgPSBpbWFnZV90
YWJsZVsibWFwX2lvcyJdCitAQCAtMzIyLDggKzM3Niw4IEBAIGRlZiBnZW5faW1hZ2VfbWFwX3N3
aXRjaF9zdHJpbmcoaW1hZ2VfdGFibGUsIGFuZ2xlX3RvX2dsKToKKyAgICAgZGVmIGdlbl9pbWFn
ZV9tYXBfc3dpdGNoX2NvbW1vbl9jYXNlKGFuZ2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1h
dCk6CisgICAgICAgICBtYWNfY2FzZSA9IGdlbl9pbWFnZV9tYXBfc3dpdGNoX21hY19jYXNlKGFu
Z2xlX2Zvcm1hdCwgYWN0dWFsX2FuZ2xlX2Zvcm1hdCwgYW5nbGVfdG9fZ2wsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY19hbmdsZV90b19tdGws
IG1hY19mYWxsYmFja3MpCistICAgICAgICBub25fbWFjX2Nhc2UgPSBnZW5faW1hZ2VfbWFwX3N3
aXRjaF9zaW1wbGVfY2FzZShhbmdsZV9mb3JtYXQsIGFjdHVhbF9hbmdsZV9mb3JtYXQsCistICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmds
ZV90b19nbCwgYW5nbGVfdG9fbXRsKQorKyAgICAgICAgbm9uX21hY19jYXNlID0gZ2VuX2ltYWdl
X21hcF9zd2l0Y2hfaW9zX2Nhc2UoYW5nbGVfZm9ybWF0LCBhY3R1YWxfYW5nbGVfZm9ybWF0LAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5n
bGVfdG9fZ2wsIGFuZ2xlX3RvX210bCwgaW9zX2ZhbGxiYWNrcykKKyAgICAgICAgIGlmIG1hY19j
YXNlID09IG5vbl9tYWNfY2FzZToKKyAgICAgICAgICAgICByZXR1cm4gbWFjX2Nhc2UKKyAKK2Rp
ZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLmgKK2luZGV4IDIw
NzlmZDcuLjIwNGViYjkgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2J1ZmZlcl9wb29sLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
YnVmZmVyX3Bvb2wuaAorQEAgLTgxLDcgKzgxLDcgQEAgY2xhc3MgQnVmZmVyUG9vbAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5ld0J1ZmZlckFsbG9jYXRlZE91dCA9IG51bGxw
dHIpOworIAorICAgICAvLyBBZnRlciBhIHNlcXVlbmNlIG9mIENQVSB3cml0ZXMsIGNhbGwgY29t
bWl0IHRvIGVuc3VyZSB0aGUgZGF0YSBpcyB2aXNpYmxlIHRvIHRoZSBkZXZpY2UuCistICAgIGFu
Z2xlOjpSZXN1bHQgY29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworKyAgICBhbmdsZTo6
UmVzdWx0IGNvbW1pdChDb250ZXh0TXRsICpjb250ZXh0TXRsLCBib29sIGZsdXNoRW50aXJlQnVm
ZmVyID0gZmFsc2UpOworIAorICAgICAvLyBUaGlzIHJlbGVhc2VzIGFsbCB0aGUgYnVmZmVycyB0
aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgc2luY2UgdGhpcyB3YXMgbGFzdCBjYWxsZWQuCisgICAg
IHZvaWQgcmVsZWFzZUluRmxpZ2h0QnVmZmVycyhDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKK0BA
IC0xMTQsNyArMTE0LDYgQEAgY2xhc3MgQnVmZmVyUG9vbAorICAgICBhbmdsZTo6UmVzdWx0IGFs
bG9jYXRlTmV3QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworICAgICB2b2lkIGRlc3Ry
b3lCdWZmZXJMaXN0KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIHN0ZDo6ZGVxdWU8QnVmZmVyUmVm
PiAqYnVmZmVycyk7CisgICAgIGFuZ2xlOjpSZXN1bHQgZmluYWxpemVQZW5kaW5nQnVmZmVyKENv
bnRleHRNdGwgKmNvbnRleHRNdGwpOworLQorICAgICBzaXplX3QgbUluaXRpYWxTaXplOworICAg
ICBCdWZmZXJSZWYgbUJ1ZmZlcjsKKyAgICAgdWludDMyX3QgbU5leHRBbGxvY2F0aW9uT2Zmc2V0
OworQEAgLTEyNyw3ICsxMjYsNyBAQCBjbGFzcyBCdWZmZXJQb29sCisgCisgICAgIHNpemVfdCBt
QnVmZmVyc0FsbG9jYXRlZDsKKyAgICAgc2l6ZV90IG1NYXhCdWZmZXJzOworLSAgICBCdWZmZXJQ
b29sTWVtUG9saWN5IG1NZW1Qb2xpY3k7CisrICAgIEJ1ZmZlclBvb2xNZW1Qb2xpY3kgbU1lbVBv
bGljeSA9IEJ1ZmZlclBvb2xNZW1Qb2xpY3k6OkF1dG87CisgICAgIGJvb2wgbUFsd2F5c0FsbG9j
YXRlTmV3QnVmZmVyOworIH07CisgCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9idWZmZXJfcG9vbC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfYnVmZmVyX3Bvb2wubW0KK2luZGV4IDA0MjM4ZWYuLmE1OGI1YTUgMTAwNjQ0CistLS0gYS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2J1ZmZlcl9wb29sLm1tCitAQCAtMjUwLDExICsy
NTAsMTggQEAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworIH0KKyAKKy1h
bmdsZTo6UmVzdWx0IEJ1ZmZlclBvb2w6OmNvbW1pdChDb250ZXh0TXRsICpjb250ZXh0TXRsKQor
K2FuZ2xlOjpSZXN1bHQgQnVmZmVyUG9vbDo6Y29tbWl0KENvbnRleHRNdGwgKmNvbnRleHRNdGws
IGJvb2wgZmx1c2hFbnRpcmVCdWZmZXIpCisgeworICAgICBpZiAobUJ1ZmZlciAmJiBtTmV4dEFs
bG9jYXRpb25PZmZzZXQgPiBtTGFzdEZsdXNoT2Zmc2V0KQorKyAgICB7CisrICAgICAgICBpZiAo
Zmx1c2hFbnRpcmVCdWZmZXIpCisrICAgICAgICB7CisrICAgICAgICAgICAgbUJ1ZmZlci0+Zmx1
c2goY29udGV4dE10bCwgMCwgbUxhc3RGbHVzaE9mZnNldCk7CisrICAgICAgICB9CisrICAgICAg
ICBlbHNlCisgICAgICAgICB7CisgICAgICAgICAgICAgbUJ1ZmZlci0+Zmx1c2goY29udGV4dE10
bCwgbUxhc3RGbHVzaE9mZnNldCwgbU5leHRBbGxvY2F0aW9uT2Zmc2V0IC0gbUxhc3RGbHVzaE9m
ZnNldCk7CisrICAgICAgICB9CisgICAgICAgICBtTGFzdEZsdXNoT2Zmc2V0ID0gbU5leHRBbGxv
Y2F0aW9uT2Zmc2V0OworICAgICB9CisgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRf
YnVmZmVyLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVy
LmgKK2luZGV4IDU1ZmY2NDkuLjNhYTgyNmEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVmZmVyLmgKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaAorQEAgLTEwMiw3ICsxMDIsNyBAQCBjbGFz
cyBDb21tYW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFu
ZEJ1ZmZlcj4+LCBhbmdsZTo6TgorIAorICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBjb21tYW5kIGJ1
ZmZlciBjYW4gYmUgZW5jb2RlZCBpbnRvLiBSZXR1cm4gZmFsc2UgaWYgaXQgaGFzIGJlZW4gY29t
bWl0dGVkCisgICAgIC8vIGFuZCBoYXNuJ3QgYmVlbiByZXN0YXJ0ZWQuCistICAgIGJvb2wgcmVh
ZHkoKSBjb25zdDsKKysgICAgYm9vbCB2YWxpZCgpIGNvbnN0OworICAgICB2b2lkIGNvbW1pdCgp
OworICAgICAvLyB3YWl0IGZvciBjb21taXR0ZWQgY29tbWFuZCBidWZmZXIgdG8gZmluaXNoLgor
ICAgICB2b2lkIGZpbmlzaCgpOworQEAgLTExNSw2ICsxMTUsOCBAQCBjbGFzcyBDb21tYW5kQnVm
ZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZlcj4+LCBh
bmdsZTo6TgorIAorICAgICB2b2lkIHF1ZXVlRXZlbnRTaWduYWwoY29uc3QgbXRsOjpTaGFyZWRF
dmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKTsKKyAgICAgdm9pZCBzZXJ2ZXJXYWl0RXZl
bnQoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2NF90IHZhbHVlKTsKKysK
KysgICAgdm9pZCBpbnNlcnREZWJ1Z1NpZ24oY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcik7Cisg
ICAgIHZvaWQgcHVzaERlYnVnR3JvdXAoY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcik7CisgICAg
IHZvaWQgcG9wRGVidWdHcm91cCgpOworIAorQEAgLTEyOCw3ICsxMzAsNyBAQCBjbGFzcyBDb21t
YW5kQnVmZmVyIGZpbmFsIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEJ1ZmZl
cj4+LCBhbmdsZTo6TgorICAgICB2b2lkIHNldChpZDxNVExDb21tYW5kQnVmZmVyPiBtZXRhbEJ1
ZmZlcik7CisgICAgIHZvaWQgY2xlYW51cCgpOworIAorLSAgICBib29sIHJlYWR5SW1wbCgpIGNv
bnN0OworKyAgICBib29sIHZhbGlkSW1wbCgpIGNvbnN0OworICAgICB2b2lkIGNvbW1pdEltcGwo
KTsKKyAgICAgdm9pZCBmb3JjZUVuZGluZ0N1cnJlbnRFbmNvZGVyKCk7CisgCitAQCAtMTQ5LDYg
KzE1MSw3IEBAIGNsYXNzIENvbW1hbmRCdWZmZXIgZmluYWwgOiBwdWJsaWMgV3JhcHBlZE9iamVj
dDxpZDxNVExDb21tYW5kQnVmZmVyPj4sIGFuZ2xlOjpOCisgCisgICAgIG11dGFibGUgc3RkOjpt
dXRleCBtTG9jazsKKyAKKysgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1QZW5kaW5nRGVi
dWdTaWduczsKKyAgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPG10bDo6U2hhcmVkRXZlbnRSZWYs
IHVpbnQ2NF90Pj4gbVBlbmRpbmdTaWduYWxFdmVudHM7CisgCisgICAgIHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiBtRGVidWdHcm91cHM7CitAQCAtMTc2LDYgKzE3OSw4IEBAIGNsYXNzIENvbW1h
bmRFbmNvZGVyIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEVuY29kZXI+Piwg
YW5nbGU6Ok5vbkNvCisgICAgIENvbW1hbmRFbmNvZGVyICZtYXJrUmVzb3VyY2VCZWluZ1dyaXR0
ZW5CeUdQVShjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlcik7CisgICAgIENvbW1hbmRFbmNvZGVyICZt
YXJrUmVzb3VyY2VCZWluZ1dyaXR0ZW5CeUdQVShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKTsK
KyAKKysgICAgdm9pZCBpbnNlcnREZWJ1Z1NpZ24oTlNTdHJpbmcgKmxhYmVsKTsKKysKKyAgICAg
dmlydHVhbCB2b2lkIHB1c2hEZWJ1Z0dyb3VwKE5TU3RyaW5nICpsYWJlbCk7CisgICAgIHZpcnR1
YWwgdm9pZCBwb3BEZWJ1Z0dyb3VwKCk7CisgCitAQCAtMTg5LDYgKzE5NCw4IEBAIGNsYXNzIENv
bW1hbmRFbmNvZGVyIDogcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQ29tbWFuZEVuY29kZXI+
PiwgYW5nbGU6Ok5vbkNvCisgCisgICAgIHZvaWQgc2V0KGlkPE1UTENvbW1hbmRFbmNvZGVyPiBt
ZXRhbENtZEVuY29kZXIpOworIAorKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1w
bChOU1N0cmluZyAqbWFya2VyKTsKKysKKyAgIHByaXZhdGU6CisgICAgIGNvbnN0IFR5cGUgbVR5
cGU7CisgICAgIENvbW1hbmRCdWZmZXIgJm1DbWRCdWZmZXI7CitAQCAtMjAxLDcgKzIwOCw3IEBA
IGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0KKyAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgIGlubGluZSBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICZwdXNoKGNvbnN0IFQg
JnZhbCkKKyAgICAgeworLSAgICAgICAgY29uc3QgdWludDhfdCAqcHRyID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50OF90ICo+KCZ2YWwpOworKyAgICAgICAgYXV0byBwdHIgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QgKj4oJnZhbCk7CisgICAgICAgICBtQnVmZmVyLmluc2Vy
dChtQnVmZmVyLmVuZCgpLCBwdHIsIHB0ciArIHNpemVvZihUKSk7CisgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgIH0KK0BAIC0yMTcsNyArMjI0LDcgQEAgY2xhc3MgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0cmVhbQorICAgICB7CisgICAgICAgICBBU1NFUlQobVJlYWRQdHIgPD0gbUJ1ZmZlci5z
aXplKCkgLSBzaXplb2YoVCkpOworICAgICAgICAgVCByZTsKKy0gICAgICAgIHVpbnQ4X3QgKnB0
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCAqPigmcmUpOworKyAgICAgICAgYXV0byBwdHIg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QgKj4oJnJlKTsKKyAgICAgICAgIHN0ZDo6Y29weSht
QnVmZmVyLmRhdGEoKSArIG1SZWFkUHRyLCBtQnVmZmVyLmRhdGEoKSArIG1SZWFkUHRyICsgc2l6
ZW9mKFQpLCBwdHIpOworICAgICAgICAgcmV0dXJuIHJlOworICAgICB9CitAQCAtMjI1LDcgKzIz
Miw3IEBAIGNsYXNzIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0KKyAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgIGlubGluZSBUIGZldGNoKCkKKyAgICAgeworLSAgICAgICAgVCByZSA9
IHBlZWs8VD4oKTsKKysgICAgICAgIGF1dG8gcmUgPSBwZWVrPFQ+KCk7CisgICAgICAgICBtUmVh
ZFB0ciArPSBzaXplb2YoVCk7CisgICAgICAgICByZXR1cm4gcmU7CisgICAgIH0KK0BAIC0yMzMs
NyArMjQwLDcgQEAgY2xhc3MgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbQorICAgICBpbmxpbmUg
Y29uc3QgdWludDhfdCAqZmV0Y2goc2l6ZV90IGJ5dGVzKQorICAgICB7CisgICAgICAgICBBU1NF
UlQobVJlYWRQdHIgPD0gbUJ1ZmZlci5zaXplKCkgLSBieXRlcyk7CistICAgICAgICBzaXplX3Qg
Y3VyID0gbVJlYWRQdHI7CisrICAgICAgICBhdXRvIGN1ciA9IG1SZWFkUHRyOworICAgICAgICAg
bVJlYWRQdHIgKz0gYnl0ZXM7CisgICAgICAgICByZXR1cm4gbUJ1ZmZlci5kYXRhKCkgKyBjdXI7
CisgICAgIH0KK0BAIC00NzksMTIgKzQ4NiwxNiBAQCBjbGFzcyBSZW5kZXJDb21tYW5kRW5jb2Rl
ciBmaW5hbCA6IHB1YmxpYyBDb21tYW5kRW5jb2RlcgorICAgICB7CisgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+PihDb21tYW5kRW5jb2Rlcjo6
Z2V0KCkpOworICAgICB9CisrICAgIHZvaWQgaW5zZXJ0RGVidWdTaWduSW1wbChOU1N0cmluZyAq
bGFiZWwpIG92ZXJyaWRlOworIAorICAgICB2b2lkIGluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRl
bmN5QW5kU2Npc3NvclJlY3QoY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZhdHRhY2ht
ZW50KTsKKysgICAgdm9pZCBpbml0V3JpdGVEZXBlbmRlbmN5KGNvbnN0IFRleHR1cmVSZWYgJnRl
eHR1cmUpOworIAorICAgICB2b2lkIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKE1UTFJlbmRlclBh
c3NBdHRhY2htZW50RGVzY3JpcHRvciAqb2JqQ1JlbmRlclBhc3NBdHRhY2htZW50KTsKKyAKKyAg
ICAgdm9pZCBlbmNvZGVNZXRhbEVuY29kZXIoKTsKKysgICAgdm9pZCBzaW11bGF0ZURpc2NhcmRG
cmFtZWJ1ZmZlcigpOworKyAgICB2b2lkIGVuZEVuY29kaW5nSW1wbChib29sIGNvbnNpZGVyRGlz
Y2FyZFNpbXVsYXRpb24pOworIAorICAgICBSZW5kZXJDb21tYW5kRW5jb2RlciAmY29tbW9uU2V0
QnVmZmVyKGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMQnVmZmVyPiBtdGxCdWZmZXIsCitAQCAtNTYwLDEx
ICs1NzEsMjAgQEAgY2xhc3MgQmxpdENvbW1hbmRFbmNvZGVyIGZpbmFsIDogcHVibGljIENvbW1h
bmRFbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
c2xpY2VDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBsZXZlbENvdW50KTsKKyAKKysgICAgQmxpdENvbW1hbmRFbmNvZGVyICZjb3B5VGV4dHVyZShj
b25zdCBUZXh0dXJlUmVmICZzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc3JjU2xpY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc3JjTGV2ZWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGV4dHVyZVJlZiAmZHN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGRzdFNsaWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGRzdExldmVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHNsaWNlQ291bnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCk7CisrCisgICAgIEJsaXRDb21tYW5kRW5jb2Rl
ciAmZmlsbEJ1ZmZlcihjb25zdCBCdWZmZXJSZWYgJmJ1ZmZlciwgTlNSYW5nZSByYW5nZSwgdWlu
dDhfdCB2YWx1ZSk7CisgCisgICAgIEJsaXRDb21tYW5kRW5jb2RlciAmZ2VuZXJhdGVNaXBtYXBz
Rm9yVGV4dHVyZShjb25zdCBUZXh0dXJlUmVmICZ0ZXh0dXJlKTsKKy0gICAgQmxpdENvbW1hbmRF
bmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKEJ1ZmZlciAqYnVmZmVyUHRyKTsKKy0gICAgQmxp
dENvbW1hbmRFbmNvZGVyICZzeW5jaHJvbml6ZVJlc291cmNlKFRleHR1cmUgKnRleHR1cmVQdHIp
OworKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgJnN5bmNocm9uaXplUmVzb3VyY2UoY29uc3QgQnVm
ZmVyUmVmICZidWZmZXIpOworKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgJnN5bmNocm9uaXplUmVz
b3VyY2UoY29uc3QgVGV4dHVyZVJlZiAmdGV4dHVyZSk7CisgCisgICBwcml2YXRlOgorICAgICBp
ZDxNVExCbGl0Q29tbWFuZEVuY29kZXI+IGdldCgpCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9jb21tYW5kX2J1ZmZlci5tbSBiL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfY29tbWFuZF9idWZmZXIubW0KK2luZGV4IDQ0MzNiMDIuLmI0YTMzNDcg
MTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVm
ZmVyLm1tCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1hbmRfYnVm
ZmVyLm1tCitAQCAtMTEsNiArMTEsOSBAQAorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfY29tbWFuZF9idWZmZXIuaCIKKyAKKyAjaW5jbHVkZSA8Y2Fzc2VydD4KKysjaWYg
QU5HTEVfTVRMX1NJTVVMQVRFX0RJU0NBUkRfRlJBTUVCVUZGRVIKKysjICAgIGluY2x1ZGUgPHJh
bmRvbT4KKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oIgorQEAg
LTY1LDYgKzY4LDcgQEAKKyAgICAgUFJPQyhTZXRWaXNpYmlsaXR5UmVzdWx0TW9kZSkgICAgICAg
IFwKKyAgICAgUFJPQyhVc2VSZXNvdXJjZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgUFJP
QyhNZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlKSAgICAgIFwKKysgICAgUFJPQyhJbnNlcnREZWJ1
Z3NpZ24pICAgICAgICAgICAgICAgIFwKKyAgICAgUFJPQyhQdXNoRGVidWdHcm91cCkgICAgICAg
ICAgICAgICAgIFwKKyAgICAgUFJPQyhQb3BEZWJ1Z0dyb3VwKQorIAorQEAgLTg1LDQyICs4OSw0
MiBAQCB2b2lkIEludmFsaWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIs
IEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKgorIHZvaWQgU2V0UmVuZGVyUGlwZWxpbmVTdGF0
ZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsK
Ky0gICAgaWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTFJlbmRlclBpcGVsaW5lU3RhdGU+PigpOworKyAgICBhdXRvIHN0YXRlID0gc3RyZWFtLT5m
ZXRjaDxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4oKTsKKyAgICAgW2VuY29kZXIgc2V0UmVu
ZGVyUGlwZWxpbmVTdGF0ZTpzdGF0ZV07CisgICAgIFtzdGF0ZSBBTkdMRV9NVExfUkVMRUFTRV07
CisgfQorIAorIHZvaWQgU2V0VHJpYW5nbGVGaWxsTW9kZUNtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsK
Ky0gICAgTVRMVHJpYW5nbGVGaWxsTW9kZSBtb2RlID0gc3RyZWFtLT5mZXRjaDxNVExUcmlhbmds
ZUZpbGxNb2RlPigpOworKyAgICBhdXRvIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTFRyaWFuZ2xl
RmlsbE1vZGU+KCk7CisgICAgIFtlbmNvZGVyIHNldFRyaWFuZ2xlRmlsbE1vZGU6bW9kZV07Cisg
fQorIAorIHZvaWQgU2V0RnJvbnRGYWNpbmdXaW5kaW5nQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRF
bmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVk
aWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFdpbmRpbmcgd2luZGluZyA9
IHN0cmVhbS0+ZmV0Y2g8TVRMV2luZGluZz4oKTsKKysgICAgYXV0byB3aW5kaW5nID0gc3RyZWFt
LT5mZXRjaDxNVExXaW5kaW5nPigpOworICAgICBbZW5jb2RlciBzZXRGcm9udEZhY2luZ1dpbmRp
bmc6d2luZGluZ107CisgfQorIAorIHZvaWQgU2V0Q3VsbE1vZGVDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
KyB7CistICAgIE1UTEN1bGxNb2RlIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTEN1bGxNb2RlPigp
OworKyAgICBhdXRvIG1vZGUgPSBzdHJlYW0tPmZldGNoPE1UTEN1bGxNb2RlPigpOworICAgICBb
ZW5jb2RlciBzZXRDdWxsTW9kZTptb2RlXTsKKyB9CisgCisgdm9pZCBTZXREZXB0aFN0ZW5jaWxT
dGF0ZUNtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRl
Q29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgaWQ8TVRMRGVwdGhTdGVuY2lsU3RhdGU+
IHN0YXRlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+KCk7CisrICAg
IGF1dG8gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTERlcHRoU3RlbmNpbFN0YXRlPj4oKTsK
KyAgICAgW2VuY29kZXIgc2V0RGVwdGhTdGVuY2lsU3RhdGU6c3RhdGVdOworICAgICBbc3RhdGUg
QU5HTEVfTVRMX1JFTEVBU0VdOworIH0KKyAKKyB2b2lkIFNldERlcHRoQmlhc0NtZChpZDxNVExS
ZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAq
c3RyZWFtKQorIHsKKy0gICAgZmxvYXQgZGVwdGhCaWFzICA9IHN0cmVhbS0+ZmV0Y2g8ZmxvYXQ+
KCk7CistICAgIGZsb2F0IHNsb3BlU2NhbGUgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOworLSAg
ICBmbG9hdCBjbGFtcCAgICAgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKysgICAgYXV0byBk
ZXB0aEJpYXMgID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKysgICAgYXV0byBzbG9wZVNjYWxl
ID0gc3RyZWFtLT5mZXRjaDxmbG9hdD4oKTsKKysgICAgYXV0byBjbGFtcCAgICAgID0gc3RyZWFt
LT5mZXRjaDxmbG9hdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0RGVwdGhCaWFzOmRlcHRoQmlhcyBz
bG9wZVNjYWxlOnNsb3BlU2NhbGUgY2xhbXA6Y2xhbXBdOworIH0KKyAKK0BAIC0xMzQsMTMgKzEz
OCwxMyBAQCB2b2lkIFNldFN0ZW5jaWxSZWZWYWxzQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYQorIAorIHZvaWQgU2V0Vmlld3BvcnRDbWQo
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFZpZXdwb3J0IHZpZXdwb3J0ID0gc3RyZWFtLT5m
ZXRjaDxNVExWaWV3cG9ydD4oKTsKKysgICAgYXV0byB2aWV3cG9ydCA9IHN0cmVhbS0+ZmV0Y2g8
TVRMVmlld3BvcnQ+KCk7CisgICAgIFtlbmNvZGVyIHNldFZpZXdwb3J0OnZpZXdwb3J0XTsKKyB9
CisgCisgdm9pZCBTZXRTY2lzc29yUmVjdENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgTVRM
U2Npc3NvclJlY3QgcmVjdCA9IHN0cmVhbS0+ZmV0Y2g8TVRMU2Npc3NvclJlY3Q+KCk7CisrICAg
IGF1dG8gcmVjdCA9IHN0cmVhbS0+ZmV0Y2g8TVRMU2Npc3NvclJlY3Q+KCk7CisgICAgIFtlbmNv
ZGVyIHNldFNjaXNzb3JSZWN0OnJlY3RdOworIH0KKyAKK0BAIC0xNTUsOSArMTU5LDkgQEAgdm9p
ZCBTZXRCbGVuZENvbG9yQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJ
bnRlcm1lZGlhdGVDb21tYW5kU3QKKyAKKyB2b2lkIFNldFZlcnRleEJ1ZmZlckNtZChpZDxNVExS
ZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAq
c3RyZWFtKQorIHsKKy0gICAgaWQ8TVRMQnVmZmVyPiBidWZmZXIgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTEJ1ZmZlcj4+KCk7CistICAgIHVpbnQzMl90IG9mZnNldCAgICAgID0gc3RyZWFtLT5mZXRj
aDx1aW50MzJfdD4oKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNo
PHVpbnQzMl90PigpOworKyAgICBhdXRvIGJ1ZmZlciA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVm
ZmVyPj4oKTsKKysgICAgYXV0byBvZmZzZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwor
KyAgICBhdXRvIGluZGV4ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNv
ZGVyIHNldFZlcnRleEJ1ZmZlcjpidWZmZXIgb2Zmc2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsK
KyAgICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFTRV07CisgfQorQEAgLTE2NSwyNiArMTY5LDI2
IEBAIHZvaWQgU2V0VmVydGV4QnVmZmVyQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBl
bmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kCisgdm9pZCBTZXRWZXJ0ZXhCdWZmZXJPZmZzZXRD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0g
ICAgdWludDMyX3Qgb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgdWlu
dDMyX3QgaW5kZXggID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBvZmZz
ZXQgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworKyAgICBhdXRvIGluZGV4ICA9IHN0cmVh
bS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIHNldFZlcnRleEJ1ZmZlck9mZnNl
dDpvZmZzZXQgYXRJbmRleDppbmRleF07CisgfQorIAorIHZvaWQgU2V0VmVydGV4Qnl0ZXNDbWQo
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRT
dHJlYW0gKnN0cmVhbSkKKyB7CistICAgIHNpemVfdCBzaXplICAgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDxzaXplX3Q+KCk7CistICAgIGNvbnN0IHVpbnQ4X3QgKmJ5dGVzID0gc3RyZWFtLT5mZXRj
aChzaXplKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQz
Ml90PigpOworKyAgICBhdXRvIHNpemUgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisrICAg
IGF1dG8gYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOworKyAgICBhdXRvIGluZGV4ID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0VmVydGV4Qnl0ZXM6Ynl0
ZXMgbGVuZ3RoOnNpemUgYXRJbmRleDppbmRleF07CisgfQorIAorIHZvaWQgU2V0VmVydGV4U2Ft
cGxlclN0YXRlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVh
bSkKKyB7CistICAgIGlkPE1UTFNhbXBsZXJTdGF0ZT4gc3RhdGUgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTFNhbXBsZXJTdGF0ZT4+KCk7CisrICAgIGF1dG8gc3RhdGUgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDxpZDxNVExTYW1wbGVyU3RhdGU+PigpOworICAgICBmbG9hdCBsb2RNaW5DbGFtcCA9IHN0
cmVhbS0+ZmV0Y2g8ZmxvYXQ+KCk7CisgICAgIGZsb2F0IGxvZE1heENsYW1wID0gc3RyZWFtLT5m
ZXRjaDxmbG9hdD4oKTsKKy0gICAgdWludDMyX3QgaW5kZXggICAgICAgICAgICA9IHN0cmVhbS0+
ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5kZXggICAgICAgID0gc3RyZWFtLT5mZXRj
aDx1aW50MzJfdD4oKTsKKyAgICAgW2VuY29kZXIgc2V0VmVydGV4U2FtcGxlclN0YXRlOnN0YXRl
CisgICAgICAgICAgICAgICAgICAgICAgICBsb2RNaW5DbGFtcDpsb2RNaW5DbGFtcAorICAgICAg
ICAgICAgICAgICAgICAgICAgbG9kTWF4Q2xhbXA6bG9kTWF4Q2xhbXAKK0BAIC0xOTUsMTcgKzE5
OSwxNyBAQCB2b2lkIFNldFZlcnRleFNhbXBsZXJTdGF0ZUNtZChpZDxNVExSZW5kZXJDb21tYW5k
RW5jb2Rlcj4gZW5jb2RlciwKKyAKKyB2b2lkIFNldFZlcnRleFRleHR1cmVDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0
cmVhbSkKKyB7CistICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUgPSBzdHJlYW0tPmZldGNoPGlk
PE1UTFRleHR1cmU+PigpOworLSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxN
VExUZXh0dXJlPj4oKTsKKysgICAgYXV0byBpbmRleCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKyAgICAgW2VuY29kZXIgc2V0VmVydGV4VGV4dHVyZTp0ZXh0dXJlIGF0SW5kZXg6aW5k
ZXhdOworICAgICBbdGV4dHVyZSBBTkdMRV9NVExfUkVMRUFTRV07CisgfQorIAorIHZvaWQgU2V0
RnJhZ21lbnRCdWZmZXJDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIElu
dGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIGlkPE1UTEJ1ZmZlcj4g
YnVmZmVyID0gc3RyZWFtLT5mZXRjaDxpZDxNVExCdWZmZXI+PigpOworLSAgICB1aW50MzJfdCBv
ZmZzZXQgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVpbnQzMl90IGlu
ZGV4ICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBidWZmZXIg
PSBzdHJlYW0tPmZldGNoPGlkPE1UTEJ1ZmZlcj4+KCk7CisrICAgIGF1dG8gb2Zmc2V0ID0gc3Ry
ZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBpbmRleCAgPSBzdHJlYW0tPmZldGNo
PHVpbnQzMl90PigpOworICAgICBbZW5jb2RlciBzZXRGcmFnbWVudEJ1ZmZlcjpidWZmZXIgb2Zm
c2V0Om9mZnNldCBhdEluZGV4OmluZGV4XTsKKyAgICAgW2J1ZmZlciBBTkdMRV9NVExfUkVMRUFT
RV07CisgfQorQEAgLTIxMywyNiArMjE3LDI2IEBAIHZvaWQgU2V0RnJhZ21lbnRCdWZmZXJDbWQo
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hCisg
dm9pZCBTZXRGcmFnbWVudEJ1ZmZlck9mZnNldENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rl
cj4gZW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybWVkaWF0
ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIHVpbnQzMl90IG9mZnNldCA9IHN0cmVh
bS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVpbnQzMl90IGluZGV4ICA9IHN0cmVhbS0+ZmV0
Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gb2Zmc2V0ID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKysgICAgYXV0byBpbmRleCAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworICAg
ICBbZW5jb2RlciBzZXRGcmFnbWVudEJ1ZmZlck9mZnNldDpvZmZzZXQgYXRJbmRleDppbmRleF07
CisgfQorIAorIHZvaWQgU2V0RnJhZ21lbnRCeXRlc0NtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0g
ICAgc2l6ZV90IHNpemUgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKy0gICAg
Y29uc3QgdWludDhfdCAqYnl0ZXMgPSBzdHJlYW0tPmZldGNoKHNpemUpOworLSAgICB1aW50MzJf
dCBpbmRleCAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gc2l6
ZSAgPSBzdHJlYW0tPmZldGNoPHNpemVfdD4oKTsKKysgICAgYXV0byBieXRlcyA9IHN0cmVhbS0+
ZmV0Y2goc2l6ZSk7CisrICAgIGF1dG8gaW5kZXggPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90Pigp
OworICAgICBbZW5jb2RlciBzZXRGcmFnbWVudEJ5dGVzOmJ5dGVzIGxlbmd0aDpzaXplIGF0SW5k
ZXg6aW5kZXhdOworIH0KKyAKKyB2b2lkIFNldEZyYWdtZW50U2FtcGxlclN0YXRlQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgaWQ8
TVRMU2FtcGxlclN0YXRlPiBzdGF0ZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMU2FtcGxlclN0YXRl
Pj4oKTsKKysgICAgYXV0byBzdGF0ZSAgICAgICAgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFNhbXBs
ZXJTdGF0ZT4+KCk7CisgICAgIGZsb2F0IGxvZE1pbkNsYW1wID0gc3RyZWFtLT5mZXRjaDxmbG9h
dD4oKTsKKyAgICAgZmxvYXQgbG9kTWF4Q2xhbXAgPSBzdHJlYW0tPmZldGNoPGZsb2F0PigpOwor
LSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4o
KTsKKysgICAgYXV0byBpbmRleCAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOwor
ICAgICBbZW5jb2RlciBzZXRGcmFnbWVudFNhbXBsZXJTdGF0ZTpzdGF0ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2RNaW5DbGFtcDpsb2RNaW5DbGFtcAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2RNYXhDbGFtcDpsb2RNYXhDbGFtcAorQEAgLTI0MiwyNiArMjQ2LDI2IEBAIHZv
aWQgU2V0RnJhZ21lbnRTYW1wbGVyU3RhdGVDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+
IGVuY29kZXIsCisgCisgdm9pZCBTZXRGcmFnbWVudFRleHR1cmVDbWQoaWQ8TVRMUmVuZGVyQ29t
bWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkK
KyB7CistICAgIGlkPE1UTFRleHR1cmU+IHRleHR1cmUgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFRl
eHR1cmU+PigpOworLSAgICB1aW50MzJfdCBpbmRleCAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1
aW50MzJfdD4oKTsKKysgICAgYXV0byB0ZXh0dXJlID0gc3RyZWFtLT5mZXRjaDxpZDxNVExUZXh0
dXJlPj4oKTsKKysgICAgYXV0byBpbmRleCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsK
KyAgICAgW2VuY29kZXIgc2V0RnJhZ21lbnRUZXh0dXJlOnRleHR1cmUgYXRJbmRleDppbmRleF07
CisgICAgIFt0ZXh0dXJlIEFOR0xFX01UTF9SRUxFQVNFXTsKKyB9CisgCisgdm9pZCBEcmF3Q21k
KGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5k
U3RyZWFtICpzdHJlYW0pCisgeworLSAgICBNVExQcmltaXRpdmVUeXBlIHByaW1pdGl2ZVR5cGUg
PSBzdHJlYW0tPmZldGNoPE1UTFByaW1pdGl2ZVR5cGU+KCk7CistICAgIHVpbnQzMl90IHZlcnRl
eFN0YXJ0ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAgIHVpbnQz
Ml90IHZlcnRleENvdW50ICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Cisr
ICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4o
KTsKKysgICAgYXV0byB2ZXJ0ZXhTdGFydCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsK
KysgICAgYXV0byB2ZXJ0ZXhDb3VudCAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKyAg
ICAgW2VuY29kZXIgZHJhd1ByaW1pdGl2ZXM6cHJpbWl0aXZlVHlwZSB2ZXJ0ZXhTdGFydDp2ZXJ0
ZXhTdGFydCB2ZXJ0ZXhDb3VudDp2ZXJ0ZXhDb3VudF07CisgfQorIAorIHZvaWQgRHJhd0luc3Rh
bmNlZENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRl
Q29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRp
dmVUeXBlID0gc3RyZWFtLT5mZXRjaDxNVExQcmltaXRpdmVUeXBlPigpOworLSAgICB1aW50MzJf
dCB2ZXJ0ZXhTdGFydCAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90PigpOworLSAg
ICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCAgICAgICAgICAgPSBzdHJlYW0tPmZldGNoPHVpbnQzMl90
PigpOworLSAgICB1aW50MzJfdCBpbnN0YW5jZXMgICAgICAgICAgICAgPSBzdHJlYW0tPmZldGNo
PHVpbnQzMl90PigpOworKyAgICBhdXRvIHByaW1pdGl2ZVR5cGUgPSBzdHJlYW0tPmZldGNoPE1U
TFByaW1pdGl2ZVR5cGU+KCk7CisrICAgIGF1dG8gdmVydGV4U3RhcnQgICA9IHN0cmVhbS0+ZmV0
Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gdmVydGV4Q291bnQgICA9IHN0cmVhbS0+ZmV0Y2g8
dWludDMyX3Q+KCk7CisrICAgIGF1dG8gaW5zdGFuY2VzICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWlu
dDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIGRyYXdQcmltaXRpdmVzOnByaW1pdGl2ZVR5cGUKKyAg
ICAgICAgICAgICAgICAgdmVydGV4U3RhcnQ6dmVydGV4U3RhcnQKKyAgICAgICAgICAgICAgICAg
dmVydGV4Q291bnQ6dmVydGV4Q291bnQKK0BAIC0yNzAsMTEgKzI3NCwxMSBAQCB2b2lkIERyYXdJ
bnN0YW5jZWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVk
aWF0ZUNvbW1hbmRTdAorIAorIHZvaWQgRHJhd0luZGV4ZWRDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7
CistICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRM
UHJpbWl0aXZlVHlwZT4oKTsKKy0gICAgdWludDMyX3QgaW5kZXhDb3VudCAgICAgICAgICAgID0g
c3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgTVRMSW5kZXhUeXBlIGluZGV4VHlwZSAg
ICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+KCk7CistICAgIGlkPE1UTEJ1ZmZl
cj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKy0g
ICAgc2l6ZV90IGJ1ZmZlck9mZnNldCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+
KCk7CisrICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZl
VHlwZT4oKTsKKysgICAgYXV0byBpbmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKysgICAgYXV0byBpbmRleFR5cGUgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5
cGU+KCk7CisrICAgIGF1dG8gaW5kZXhCdWZmZXIgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVm
ZmVyPj4oKTsKKysgICAgYXV0byBidWZmZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+
KCk7CisgICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50CisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4VHlwZTppbmRleFR5cGUKK0BAIC0yODUsMTIgKzI4OSwxMiBA
QCB2b2lkIERyYXdJbmRleGVkQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVy
LCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZQorIAorIHZvaWQgRHJhd0luZGV4ZWRJbnN0YW5jZWRD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1h
bmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKy0gICAgdWludDMyX3QgaW5k
ZXhDb3VudCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKy0gICAgTVRM
SW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+
KCk7CistICAgIGlkPE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAgICA9IHN0cmVhbS0+ZmV0Y2g8
aWQ8TVRMQnVmZmVyPj4oKTsKKy0gICAgc2l6ZV90IGJ1ZmZlck9mZnNldCAgICAgICAgICAgID0g
c3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CistICAgIHVpbnQzMl90IGluc3RhbmNlcyAgICAgICAg
ICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisrICAgIGF1dG8gcHJpbWl0aXZlVHlw
ZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsKKysgICAgYXV0byBpbmRleENv
dW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJfdD4oKTsKKysgICAgYXV0byBpbmRleFR5cGUg
ICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5cGU+KCk7CisrICAgIGF1dG8gaW5kZXhCdWZm
ZXIgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKysgICAgYXV0byBidWZmZXJP
ZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CisrICAgIGF1dG8gaW5zdGFuY2VzICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CisgICAgIFtlbmNvZGVyIGRyYXdJbmRleGVk
UHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhD
b3VudDppbmRleENvdW50CisgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VHlwZTppbmRl
eFR5cGUKK0BAIC0zMDMsMTMgKzMwNywxMyBAQCB2b2lkIERyYXdJbmRleGVkSW5zdGFuY2VkQ21k
KGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDbworIHZv
aWQgRHJhd0luZGV4ZWRJbnN0YW5jZWRCYXNlVmVydGV4Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRF
bmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEludGVybWVkaWF0ZUNvbW1hbmRTdHJlYW0gKnN0cmVhbSkKKyB7CistICAgIE1UTFByaW1pdGl2
ZVR5cGUgcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZlVHlwZT4oKTsK
Ky0gICAgdWludDMyX3QgaW5kZXhDb3VudCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDx1aW50
MzJfdD4oKTsKKy0gICAgTVRMSW5kZXhUeXBlIGluZGV4VHlwZSAgICAgICAgID0gc3RyZWFtLT5m
ZXRjaDxNVExJbmRleFR5cGU+KCk7CistICAgIGlkPE1UTEJ1ZmZlcj4gaW5kZXhCdWZmZXIgICAg
ICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVmZmVyPj4oKTsKKy0gICAgc2l6ZV90IGJ1ZmZlck9m
ZnNldCAgICAgICAgICAgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+KCk7CistICAgIHVpbnQzMl90
IGluc3RhbmNlcyAgICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7CistICAg
IHVpbnQzMl90IGJhc2VWZXJ0ZXggICAgICAgICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+
KCk7CisrICAgIGF1dG8gcHJpbWl0aXZlVHlwZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMUHJpbWl0aXZl
VHlwZT4oKTsKKysgICAgYXV0byBpbmRleENvdW50ICAgID0gc3RyZWFtLT5mZXRjaDx1aW50MzJf
dD4oKTsKKysgICAgYXV0byBpbmRleFR5cGUgICAgID0gc3RyZWFtLT5mZXRjaDxNVExJbmRleFR5
cGU+KCk7CisrICAgIGF1dG8gaW5kZXhCdWZmZXIgICA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMQnVm
ZmVyPj4oKTsKKysgICAgYXV0byBidWZmZXJPZmZzZXQgID0gc3RyZWFtLT5mZXRjaDxzaXplX3Q+
KCk7CisrICAgIGF1dG8gaW5zdGFuY2VzICAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7
CisrICAgIGF1dG8gYmFzZVZlcnRleCAgICA9IHN0cmVhbS0+ZmV0Y2g8dWludDMyX3Q+KCk7Cisg
ICAgIFtlbmNvZGVyIGRyYXdJbmRleGVkUHJpbWl0aXZlczpwcmltaXRpdmVUeXBlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhDb3VudDppbmRleENvdW50CisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4VHlwZTppbmRleFR5cGUKK0BAIC0zMjQsMTYgKzMyOCwxNiBAQCB2b2lk
IERyYXdJbmRleGVkSW5zdGFuY2VkQmFzZVZlcnRleENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwKKyB2b2lkIFNldFZpc2liaWxpdHlSZXN1bHRNb2RlQ21kKGlkPE1UTFJl
bmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0gICAgTVRMVmlz
aWJpbGl0eVJlc3VsdE1vZGUgbW9kZSA9IHN0cmVhbS0+ZmV0Y2g8TVRMVmlzaWJpbGl0eVJlc3Vs
dE1vZGU+KCk7CistICAgIHNpemVfdCBvZmZzZXQgICAgICAgICAgICAgICAgPSBzdHJlYW0tPmZl
dGNoPHNpemVfdD4oKTsKKysgICAgYXV0byBtb2RlICAgPSBzdHJlYW0tPmZldGNoPE1UTFZpc2li
aWxpdHlSZXN1bHRNb2RlPigpOworKyAgICBhdXRvIG9mZnNldCA9IHN0cmVhbS0+ZmV0Y2g8c2l6
ZV90PigpOworICAgICBbZW5jb2RlciBzZXRWaXNpYmlsaXR5UmVzdWx0TW9kZTptb2RlIG9mZnNl
dDpvZmZzZXRdOworIH0KKyAKKyB2b2lkIFVzZVJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1h
bmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisg
eworLSAgICBpZDxNVExSZXNvdXJjZT4gcmVzb3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJl
c291cmNlPj4oKTsKKy0gICAgTVRMUmVzb3VyY2VVc2FnZSB1c2FnZSAgID0gc3RyZWFtLT5mZXRj
aDxNVExSZXNvdXJjZVVzYWdlPigpOworLSAgICBtdGw6OlJlbmRlclN0YWdlcyBzdGFnZXMgPSBz
dHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOworKyAgICBhdXRvIHJlc291cmNlID0g
c3RyZWFtLT5mZXRjaDxpZDxNVExSZXNvdXJjZT4+KCk7CisrICAgIGF1dG8gdXNhZ2UgICAgPSBz
dHJlYW0tPmZldGNoPE1UTFJlc291cmNlVXNhZ2U+KCk7CisrICAgIGF1dG8gc3RhZ2VzICAgPSBz
dHJlYW0tPmZldGNoPG10bDo6UmVuZGVyU3RhZ2VzPigpOworICAgICBBTkdMRV9VTlVTRURfVkFS
SUFCTEUoc3RhZ2VzKTsKKyAjaWYgZGVmaW5lZChfX0lQSE9ORV8xM18wKSB8fCBkZWZpbmVkKF9f
TUFDXzEwXzE1KQorICAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDSSgxMC4xNSwgMTMu
MCwgMTMuMCkpCitAQCAtMzUxLDkgKzM1NSw5IEBAIHZvaWQgVXNlUmVzb3VyY2VDbWQoaWQ8TVRM
UmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdHJlCisg
dm9pZCBNZW1vcnlCYXJyaWVyV2l0aFJlc291cmNlQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNv
ZGVyPiBlbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm1l
ZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisgeworLSAgICBpZDxNVExSZXNvdXJjZT4gcmVz
b3VyY2UgPSBzdHJlYW0tPmZldGNoPGlkPE1UTFJlc291cmNlPj4oKTsKKy0gICAgbXRsOjpSZW5k
ZXJTdGFnZXMgYWZ0ZXIgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0YWdlcz4oKTsKKy0g
ICAgbXRsOjpSZW5kZXJTdGFnZXMgYmVmb3JlID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0
YWdlcz4oKTsKKysgICAgYXV0byByZXNvdXJjZSA9IHN0cmVhbS0+ZmV0Y2g8aWQ8TVRMUmVzb3Vy
Y2U+PigpOworKyAgICBhdXRvIGFmdGVyICAgID0gc3RyZWFtLT5mZXRjaDxtdGw6OlJlbmRlclN0
YWdlcz4oKTsKKysgICAgYXV0byBiZWZvcmUgICA9IHN0cmVhbS0+ZmV0Y2g8bXRsOjpSZW5kZXJT
dGFnZXM+KCk7CisgICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRShhZnRlcik7CisgICAgIEFOR0xF
X1VOVVNFRF9WQVJJQUJMRShiZWZvcmUpOworICNpZiBkZWZpbmVkKF9fTUFDXzEwXzE0KSAmJiAo
VEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QpCitAQCAtMzY4LDkgKzM3Miwx
NiBAQCB2b2lkIE1lbW9yeUJhcnJpZXJXaXRoUmVzb3VyY2VDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsCisgICAgIFtyZXNvdXJjZSBBTkdMRV9NVExfUkVMRUFTRV07Cisg
fQorIAorK3ZvaWQgSW5zZXJ0RGVidWdzaWduQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVy
PiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3RyZWFtICpzdHJlYW0pCisreworKyAgICBh
dXRvIGxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworKyAgICBbZW5jb2RlciBp
bnNlcnREZWJ1Z1NpZ25wb3N0OmxhYmVsXTsKKysgICAgW2xhYmVsIEFOR0xFX01UTF9SRUxFQVNF
XTsKKyt9CisrCisgdm9pZCBQdXNoRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0cmVhbSAqc3RyZWFtKQorIHsKKy0g
ICAgTlNTdHJpbmcgKmxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworKyAgICBh
dXRvIGxhYmVsID0gc3RyZWFtLT5mZXRjaDxOU1N0cmluZyAqPigpOworICAgICBbZW5jb2RlciBw
dXNoRGVidWdHcm91cDpsYWJlbF07CisgICAgIFtsYWJlbCBBTkdMRV9NVExfUkVMRUFTRV07Cisg
fQorQEAgLTM4OCw3ICszOTksNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVy
Q29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorIAorIE5TU3Ry
aW5nICpjcHBMYWJlbFRvT2JqQyhjb25zdCBzdGQ6OnN0cmluZyAmbWFya2VyKQorIHsKKy0gICAg
TlNTdHJpbmcgKmxhYmVsID0gW05TU3RyaW5nIHN0cmluZ1dpdGhVVEY4U3RyaW5nOm1hcmtlci5j
X3N0cigpXTsKKysgICAgYXV0byBsYWJlbCA9IFtOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmlu
ZzptYXJrZXIuY19zdHIoKV07CisgICAgIGlmICghbGFiZWwpCisgICAgIHsKKyAgICAgICAgIC8v
IFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIGFzY2lpIHN0cmlu
Zy4KK0BAIC0zOTYsNyArNDA3LDYgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAgICAgfQor
ICAgICByZXR1cm4gbGFiZWw7CisgfQorLQorIH0KKyAKKyAvLyBDb21tYW5kUXVldWUgaW1wbGVt
ZW50YXRpb24KK0BAIC01NjUsMTEgKzU3NSwxMSBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8
TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAor
ICAgICBjbGVhbnVwKCk7CisgfQorIAorLWJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHkoKSBjb25z
dAorK2Jvb2wgQ29tbWFuZEJ1ZmZlcjo6dmFsaWQoKSBjb25zdAorIHsKKyAgICAgc3RkOjpsb2Nr
X2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKKyAKKy0gICAgcmV0dXJuIHJlYWR5SW1wbCgp
OworKyAgICByZXR1cm4gdmFsaWRJbXBsKCk7CisgfQorIAorIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6
Y29tbWl0KCkKK0BAIC01OTgsNyArNjA4LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1U
TFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAK
KyAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxnKG1Mb2NrKTsKKyAKKy0gICAgaWYg
KCFyZWFkeUltcGwoKSkKKysgICAgaWYgKCF2YWxpZEltcGwoKSkKKyAgICAgeworICAgICAgICAg
cmV0dXJuOworICAgICB9CitAQCAtNjIwLDcgKzYzMCw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENt
ZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0CisgCisgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CisgCist
ICAgIGlmICghcmVhZHlJbXBsKCkpCisrICAgIGlmICghdmFsaWRJbXBsKCkpCisgICAgIHsKKyAg
ICAgICAgIHJldHVybjsKKyAgICAgfQorQEAgLTY0Nyw1NyArNjU3LDU3IEBAIHZvaWQgUG9wRGVi
dWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRp
YXRlQ29tbWFuZFN0CisgICAgIEFTU0VSVChtZXRhbENtZEJ1ZmZlcik7CisgfQorIAorLXZvaWQg
Q29tbWFuZEJ1ZmZlcjo6cXVldWVFdmVudFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVm
ICZldmVudCwgdWludDY0X3QgdmFsdWUpCisrdm9pZCBDb21tYW5kQnVmZmVyOjppbnNlcnREZWJ1
Z1NpZ24oY29uc3Qgc3RkOjpzdHJpbmcgJm1hcmtlcikKKyB7CistICAgIHN0ZDo6bG9ja19ndWFy
ZDxzdGQ6Om11dGV4PiBsZyhtTG9jayk7CistCistICAgIEFTU0VSVChyZWFkeUltcGwoKSk7Cist
CistICAgIGlmIChtQWN0aXZlQ29tbWFuZEVuY29kZXIgJiYgbUFjdGl2ZUNvbW1hbmRFbmNvZGVy
LT5nZXRUeXBlKCkgPT0gQ29tbWFuZEVuY29kZXI6OlJFTkRFUikKKysgICAgbXRsOjpDb21tYW5k
RW5jb2RlciAqY3VycmVudEVuY29kZXIgPSBtQWN0aXZlQ29tbWFuZEVuY29kZXI7CisrICAgIGlm
IChjdXJyZW50RW5jb2RlcikKKyAgICAgeworLSAgICAgICAgLy8gV2UgY2Fubm90IHNldCBldmVu
dCB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSByZW5kZXIgcGFzcywgZGVmZXIgdGhlIHNldHRpbmcg
dW50aWwgdGhlCistICAgICAgICAvLyBwYXNzIGVuZC4KKy0gICAgICAgIG1QZW5kaW5nU2lnbmFs
RXZlbnRzLnB1c2hfYmFjayh7ZXZlbnQsIHZhbHVlfSk7CisrICAgICAgICBBTkdMRV9NVExfT0JK
Q19TQ09QRQorKyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8gbGFiZWwgPSBjcHBMYWJlbFRv
T2JqQyhtYXJrZXIpOworKyAgICAgICAgICAgIGN1cnJlbnRFbmNvZGVyLT5pbnNlcnREZWJ1Z1Np
Z24obGFiZWwpOworKyAgICAgICAgfQorICAgICB9CisgICAgIGVsc2UKKyAgICAgeworLSAgICAg
ICAgc2V0RXZlbnRJbXBsKGV2ZW50LCB2YWx1ZSk7CisrICAgICAgICBtUGVuZGluZ0RlYnVnU2ln
bnMucHVzaF9iYWNrKG1hcmtlcik7CisgICAgIH0KKyB9CisgCistdm9pZCBDb21tYW5kQnVmZmVy
OjpzZXJ2ZXJXYWl0RXZlbnQoY29uc3QgbXRsOjpTaGFyZWRFdmVudFJlZiAmZXZlbnQsIHVpbnQ2
NF90IHZhbHVlKQorK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cHVzaERlYnVnR3JvdXAoY29uc3Qgc3Rk
OjpzdHJpbmcgJm1hcmtlcikKKyB7CistICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
ZyhtTG9jayk7CistICAgIEFTU0VSVChyZWFkeUltcGwoKSk7CistCistICAgIHdhaXRFdmVudElt
cGwoZXZlbnQsIHZhbHVlKTsKKysgICAgLy8gTk9URShocWxlKTogdG8gaW1wbGVtZW50IHRoaXMK
KyB9CisgCistdm9pZCBDb21tYW5kQnVmZmVyOjpwdXNoRGVidWdHcm91cChjb25zdCBzdGQ6OnN0
cmluZyAmbWFya2VyKQorK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cG9wRGVidWdHcm91cCgpCisgewor
LSAgICBtRGVidWdHcm91cHMucHVzaF9iYWNrKG1hcmtlcik7CisrICAgIC8vIE5PVEUoaHFsZSk6
IHRvIGltcGxlbWVudCB0aGlzCisrfQorIAorK3ZvaWQgQ29tbWFuZEJ1ZmZlcjo6cXVldWVFdmVu
dFNpZ25hbChjb25zdCBtdGw6OlNoYXJlZEV2ZW50UmVmICZldmVudCwgdWludDY0X3QgdmFsdWUp
CisreworICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbGcobUxvY2spOworIAorLSAg
ICBpZiAocmVhZHlJbXBsKCkpCisrICAgIEFTU0VSVCh2YWxpZEltcGwoKSk7CisrCisrICAgIGlm
IChtQWN0aXZlQ29tbWFuZEVuY29kZXIgJiYgbUFjdGl2ZUNvbW1hbmRFbmNvZGVyLT5nZXRUeXBl
KCkgPT0gQ29tbWFuZEVuY29kZXI6OlJFTkRFUikKKyAgICAgeworLSAgICAgICAgcHVzaERlYnVn
R3JvdXBJbXBsKG1hcmtlcik7CisrICAgICAgICAvLyBXZSBjYW5ub3Qgc2V0IGV2ZW50IHdoZW4g
dGhlcmUgaXMgYW4gYWN0aXZlIHJlbmRlciBwYXNzLCBkZWZlciB0aGUgc2V0dGluZyB1bnRpbCB0
aGUKKysgICAgICAgIC8vIHBhc3MgZW5kLgorKyAgICAgICAgbVBlbmRpbmdTaWduYWxFdmVudHMu
cHVzaF9iYWNrKHtldmVudCwgdmFsdWV9KTsKKyAgICAgfQorLX0KKy0KKy12b2lkIENvbW1hbmRC
dWZmZXI6OnBvcERlYnVnR3JvdXAoKQorLXsKKy0gICAgaWYgKCFtRGVidWdHcm91cHMuZW1wdHko
KSkKKysgICAgZWxzZQorICAgICB7CistICAgICAgICBtRGVidWdHcm91cHMucG9wX2JhY2soKTsK
KysgICAgICAgIHNldEV2ZW50SW1wbChldmVudCwgdmFsdWUpOworICAgICB9CisrfQorIAorK3Zv
aWQgQ29tbWFuZEJ1ZmZlcjo6c2VydmVyV2FpdEV2ZW50KGNvbnN0IG10bDo6U2hhcmVkRXZlbnRS
ZWYgJmV2ZW50LCB1aW50NjRfdCB2YWx1ZSkKKyt7CisgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsZyhtTG9jayk7CisrICAgIEFTU0VSVCh2YWxpZEltcGwoKSk7CisgCistICAgIGlm
IChyZWFkeUltcGwoKSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuOworLSAgICB9CisrICAgIHdh
aXRFdmVudEltcGwoZXZlbnQsIHZhbHVlKTsKKyB9CisgCisgLyoqIHByaXZhdGUgdXNlIG9ubHkg
Ki8KK0BAIC03MDksNiArNzE5LDE1IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5k
ZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0Cisgdm9pZCBD
b21tYW5kQnVmZmVyOjpzZXRBY3RpdmVDb21tYW5kRW5jb2RlcihDb21tYW5kRW5jb2RlciAqZW5j
b2RlcikKKyB7CisgICAgIG1BY3RpdmVDb21tYW5kRW5jb2RlciA9IGVuY29kZXI7CisrICAgIGZv
ciAoYXV0byAmbWFya2VyIDogbVBlbmRpbmdEZWJ1Z1NpZ25zKQorKyAgICB7CisrICAgICAgICBB
TkdMRV9NVExfT0JKQ19TQ09QRQorKyAgICAgICAgeworKyAgICAgICAgICAgIGF1dG8gbGFiZWwg
PSBjcHBMYWJlbFRvT2JqQyhtYXJrZXIpOworKyAgICAgICAgICAgIGVuY29kZXItPmluc2VydERl
YnVnU2lnbihsYWJlbCk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgbVBlbmRpbmdEZWJ1Z1Np
Z25zLmNsZWFyKCk7CisgfQorIAorIHZvaWQgQ29tbWFuZEJ1ZmZlcjo6aW52YWxpZGF0ZUFjdGl2
ZUNvbW1hbmRFbmNvZGVyKENvbW1hbmRFbmNvZGVyICplbmNvZGVyKQorQEAgLTcyOSw3ICs3NDgs
NyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICBQYXJlbnRDbGFzczo6c2V0KG5pbCk7
CisgfQorIAorLWJvb2wgQ29tbWFuZEJ1ZmZlcjo6cmVhZHlJbXBsKCkgY29uc3QKKytib29sIENv
bW1hbmRCdWZmZXI6OnZhbGlkSW1wbCgpIGNvbnN0CisgeworICAgICBpZiAoIVBhcmVudENsYXNz
Ojp2YWxpZCgpKQorICAgICB7CitAQCAtNzQxLDcgKzc2MCw3IEBAIHZvaWQgUG9wRGVidWdHcm91
cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29t
bWFuZFN0CisgCisgdm9pZCBDb21tYW5kQnVmZmVyOjpjb21taXRJbXBsKCkKKyB7CistICAgIGlm
ICghcmVhZHlJbXBsKCkpCisrICAgIGlmICghdmFsaWRJbXBsKCkpCisgICAgIHsKKyAgICAgICAg
IHJldHVybjsKKyAgICAgfQorQEAgLTg4OSw2ICs5MDgsMTcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3Vw
Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21t
YW5kU3QKKyAgICAgW2dldCgpIHBvcERlYnVnR3JvdXBdOworIH0KKyAKKyt2b2lkIENvbW1hbmRF
bmNvZGVyOjppbnNlcnREZWJ1Z1NpZ24oTlNTdHJpbmcgKmxhYmVsKQorK3sKKysgICAgaW5zZXJ0
RGVidWdTaWduSW1wbChsYWJlbCk7CisrfQorKworK3ZvaWQgQ29tbWFuZEVuY29kZXI6Omluc2Vy
dERlYnVnU2lnbkltcGwoTlNTdHJpbmcgKmxhYmVsKQorK3sKKysgICAgLy8gRGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbgorKyAgICBbZ2V0KCkgaW5zZXJ0RGVidWdTaWducG9zdDpsYWJlbF07CisrfQor
KworIC8vIFJlbmRlckNvbW1hbmRFbmNvZGVyU2hhZGVyU3RhdGVzIGltcGxlbWVudGF0aW9uCisg
UmVuZGVyQ29tbWFuZEVuY29kZXJTaGFkZXJTdGF0ZXM6OlJlbmRlckNvbW1hbmRFbmNvZGVyU2hh
ZGVyU3RhdGVzKCkKKyB7CitAQCAtOTUxLDYgKzk4MSw5IEBAIHZvaWQgUG9wRGVidWdHcm91cENt
ZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFu
ZFN0CisgICAgIHsKKyAgICAgICAgIHNoYWRlclN0YXRlcy5yZXNldCgpOworICAgICB9CisrCisr
ICAgIHZpc2liaWxpdHlSZXN1bHRNb2RlICAgICAgICAgPSBNVExWaXNpYmlsaXR5UmVzdWx0TW9k
ZURpc2FibGVkOworKyAgICB2aXNpYmlsaXR5UmVzdWx0QnVmZmVyT2Zmc2V0ID0gMDsKKyB9Cisg
CisgLy8gUmVuZGVyQ29tbWFuZEVuY29kZXIgaW1wbGVtdGF0aW9uCitAQCAtMTAxNCwxMSArMTA0
NywxMiBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+
IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICB7CisgICAgICAgICBpZiAob2Jq
Q1JlbmRlclBhc3NBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3JlQWN0aW9uU3RvcmUp
CisgICAgICAgICB7CistICAgICAgICAgICAgLy8gTk9URShocWxlKTogQ3VycmVudGx5IGlmIHRo
ZSBzdG9yZSBhY3Rpb24gd2l0aCBpbXBsaWNpdCBNUyB0ZXh0dXJlIGlzCistICAgICAgICAgICAg
Ly8gTVRMU3RvcmVBY3Rpb25TdG9yZSwgaXQgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0IHRvIHN0
b3JlIGFuZCByZXNvbHZlIGFjdGlvbi4gSXQKKy0gICAgICAgICAgICAvLyBtaWdodCBpbnRyb2R1
Y2UgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuIENvbnNpZGVyIGFuIGltcHJvdmVtZW50IHN1Y2ggYXMg
b25seSBzdG9yZSB0aGUKKy0gICAgICAgICAgICAvLyBNUyB0ZXh0dXJlLCBhbmQgcmVzb2x2ZSBv
bmx5IGF0IHRoZSBlbmQgb2YgcmVhbCByZW5kZXIgcGFzcyAobm90IHJlbmRlciBwYXNzIHRoZSBp
cworLSAgICAgICAgICAgIC8vIGludGVycnVwdGVkIGJ5IGNvbXB1dGUgcGFzcykgb3IgYmVmb3Jl
IGdsQmxpdEZyYW1lYnVmZmVyIG9wZXJhdGlvbiBzdGFydHMuCisrICAgICAgICAgICAgLy8gTk9U
RShocWxlKTogQ3VycmVudGx5IGlmIHRoZSBzdG9yZSBhY3Rpb24gd2l0aCBpbXBsaWNpdCBNUyB0
ZXh0dXJlIGlzIE1UTFN0b3JlQWN0aW9uLAorKyAgICAgICAgICAgIC8vIGl0IGlzIGF1dG9tYXRp
Y2FsbHkgY29udmVydCB0byBzdG9yZSBhbmQgcmVzb2x2ZSBhY3Rpb24uIEl0IG1pZ2h0IGludHJv
ZHVjZQorKyAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgorKyAgICAgICAgICAg
IC8vIENvbnNpZGVyIGFuIGltcHJvdmVtZW50IHN1Y2ggYXMgb25seSBzdG9yZSB0aGUgTVMgdGV4
dHVyZSwgYW5kIHJlc29sdmUgb25seSBhdAorKyAgICAgICAgICAgIC8vIHRoZSBlbmQgb2YgcmVh
bCByZW5kZXIgcGFzcyAobm90IHJlbmRlciBwYXNzIHRoZSB3YXMgaW50ZXJydXB0ZWQgYnkgY29t
cHV0ZSBwYXNzKQorKyAgICAgICAgICAgIC8vIG9yIGJlZm9yZSBnbEJsaXRGcmFtZWJ1ZmZlciBv
cGVyYXRpb24gc3RhcnRzLgorICAgICAgICAgICAgIG9iakNSZW5kZXJQYXNzQXR0YWNobWVudC5z
dG9yZUFjdGlvbiA9IE1UTFN0b3JlQWN0aW9uU3RvcmVBbmRNdWx0aXNhbXBsZVJlc29sdmU7Cisg
ICAgICAgICB9CisgICAgICAgICBlbHNlIGlmIChvYmpDUmVuZGVyUGFzc0F0dGFjaG1lbnQuc3Rv
cmVBY3Rpb24gPT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkKK0BAIC0xMDM2LDYgKzEwNzAsMTEg
QEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNv
ZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyB9CisgCisgdm9pZCBSZW5kZXJDb21tYW5kRW5j
b2Rlcjo6ZW5kRW5jb2RpbmcoKQorK3sKKysgICAgZW5kRW5jb2RpbmdJbXBsKHRydWUpOworK30K
KysKKyt2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjplbmRFbmNvZGluZ0ltcGwoYm9vbCBjb25z
aWRlckRpc2NhcmRTaW11bGF0aW9uKQorIHsKKyAgICAgaWYgKCF2YWxpZCgpKQorICAgICAgICAg
cmV0dXJuOworQEAgLTEwNTAsMTEgKzEwODksMTEgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlk
PE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QK
KyAgICAgICAgIGZpbmFsaXplTG9hZFN0b3JlQWN0aW9uKG9iakNSZW5kZXJQYXNzRGVzYy5jb2xv
ckF0dGFjaG1lbnRzW2ldKTsKKyAgICAgfQorIAorLSAgICAvLyBVcGRhdGUgZGVwdGggc3RvcmUg
YWN0aW9uIHNldCBiZXR3ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2RpbmcoKQorKyAgICAvLyBV
cGRhdGUgc3RvcmUgYWN0aW9uIHNldCBiZXR3ZWVuIHJlc3RhcnQoKSBhbmQgZW5kRW5jb2Rpbmco
KQorICAgICBvYmpDUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnN0b3JlQWN0aW9uID0g
bVJlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudC5zdG9yZUFjdGlvbjsKKyAgICAgZmluYWxp
emVMb2FkU3RvcmVBY3Rpb24ob2JqQ1JlbmRlclBhc3NEZXNjLmRlcHRoQXR0YWNobWVudCk7Cisg
CistICAgIC8vIFVwZGF0ZSBzdGVuY2lsIHN0b3JlIGFjdGlvbiBzZXQgYmV0d2VlbiByZXN0YXJ0
KCkgYW5kIGVuZEVuY29kaW5nKCkKKysgICAgLy8gVXBkYXRlIHN0b3JlIGFjdGlvbiBzZXQgYmV0
d2VlbiByZXN0YXJ0KCkgYW5kIGVuZEVuY29kaW5nKCkKKyAgICAgb2JqQ1JlbmRlclBhc3NEZXNj
LnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9uID0KKyAgICAgICAgIG1SZW5kZXJQYXNzRGVz
Yy5zdGVuY2lsQXR0YWNobWVudC5zdG9yZUFjdGlvbjsKKyAgICAgZmluYWxpemVMb2FkU3RvcmVB
Y3Rpb24ob2JqQ1JlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKK0BAIC0xMDc1LDI2
ICsxMTE0LDc4IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgCisgICAgIENvbW1hbmRFbmNv
ZGVyOjplbmRFbmNvZGluZygpOworIAorKyNpZiBBTkdMRV9NVExfU0lNVUxBVEVfRElTQ0FSRF9G
UkFNRUJVRkZFUgorKyAgICBpZiAoY29uc2lkZXJEaXNjYXJkU2ltdWxhdGlvbikKKysgICAgewor
KyAgICAgICAgc2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIoKTsKKysgICAgfQorKyNlbmRpZgor
KworICAgICAvLyByZXNldCBzdGF0ZQorICAgICBtUmVuZGVyUGFzc0Rlc2MgPSBSZW5kZXJQYXNz
RGVzYygpOworICAgICBtU3RhdGVDYWNoZS5yZXNldCgpOworIH0KKyAKKy1pbmxpbmUgdm9pZCBS
ZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRTY2lz
c29yUmVjdCgKKy0gICAgY29uc3QgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjICZhdHRhY2htZW50
KQorK2lubGluZSB2b2lkIFJlbmRlckNvbW1hbmRFbmNvZGVyOjppbml0V3JpdGVEZXBlbmRlbmN5
KGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCisgeworLSAgICBUZXh0dXJlUmVmIHRleHR1cmUg
PSBhdHRhY2htZW50LnRleHR1cmU7CisgICAgIGlmICh0ZXh0dXJlKQorICAgICB7CisgICAgICAg
ICBjbWRCdWZmZXIoKS5zZXRXcml0ZURlcGVuZGVuY3kodGV4dHVyZSk7CisrICAgIH0KKyt9Cisr
Cisrdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6c2ltdWxhdGVEaXNjYXJkRnJhbWVidWZmZXIo
KQorK3sKKysgICAgLy8gU2ltdWxhdGUgdHJ1ZSBmcmFtZWJ1ZmZlciBkaXNjYXJkIG9wZXJhdGlv
biBieSBjbGVhcmluZyB0aGUgZnJhbWVidWZmZXIKKysjaWYgQU5HTEVfTVRMX1NJTVVMQVRFX0RJ
U0NBUkRfRlJBTUVCVUZGRVIKKysgICAgc3RkOjpyYW5kb21fZGV2aWNlIHJkOyAgIC8vIFdpbGwg
YmUgdXNlZCB0byBvYnRhaW4gYSBzZWVkIGZvciB0aGUgcmFuZG9tIG51bWJlciBlbmdpbmUKKysg
ICAgc3RkOjptdDE5OTM3IGdlbihyZCgpKTsgIC8vIFN0YW5kYXJkIG1lcnNlbm5lX3R3aXN0ZXJf
ZW5naW5lIHNlZWRlZCB3aXRoIHJkKCkKKysgICAgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0
aW9uPGZsb2F0PiBkaXMoMC4wLCAxLjBmKTsKKysgICAgYm9vbCBoYXNEaXNjYXJkID0gZmFsc2U7
CisrICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtUmVuZGVyUGFzc0Rlc2MubnVtQ29sb3JB
dHRhY2htZW50czsgKytpKQorKyAgICB7CisrICAgICAgICBpZiAobVJlbmRlclBhc3NEZXNjLmNv
bG9yQXR0YWNobWVudHNbaV0uc3RvcmVBY3Rpb24gPT0gTVRMU3RvcmVBY3Rpb25Eb250Q2FyZSkK
KysgICAgICAgIHsKKysgICAgICAgICAgICBoYXNEaXNjYXJkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gdHJ1ZTsKKysgICAgICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuY29s
b3JBdHRhY2htZW50c1tpXS5sb2FkQWN0aW9uID0gTVRMTG9hZEFjdGlvbkNsZWFyOworKyAgICAg
ICAgICAgIG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmNsZWFyQ29sb3IgPQor
KyAgICAgICAgICAgICAgICBNVExDbGVhckNvbG9yTWFrZShkaXMoZ2VuKSwgZGlzKGdlbiksIGRp
cyhnZW4pLCBkaXMoZ2VuKSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7
CisrICAgICAgICAgICAgbVJlbmRlclBhc3NEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0ubG9hZEFj
dGlvbiA9IE1UTExvYWRBY3Rpb25Mb2FkOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlm
IChtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnN0b3JlQWN0aW9uID09IE1UTFN0b3Jl
QWN0aW9uRG9udENhcmUpCisrICAgIHsKKysgICAgICAgIGhhc0Rpc2NhcmQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IHRydWU7CisrICAgICAgICBtUmVuZGVyUGFzc0Rlc2MuZGVw
dGhBdHRhY2htZW50LmxvYWRBY3Rpb24gPSBNVExMb2FkQWN0aW9uQ2xlYXI7CisrICAgICAgICBt
UmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LmNsZWFyRGVwdGggPSBkaXMoZ2VuKTsKKysg
ICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5kZXB0aEF0
dGFjaG1lbnQubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rpb25Mb2FkOworKyAgICB9CisgCistICAg
ICAgICBjb25zdCBNaXBtYXBOYXRpdmVMZXZlbCAmbWlwTGV2ZWwgPSBhdHRhY2htZW50LmxldmVs
OworKyAgICBpZiAobVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnN0b3JlQWN0aW9u
ID09IE1UTFN0b3JlQWN0aW9uRG9udENhcmUpCisrICAgIHsKKysgICAgICAgIGhhc0Rpc2NhcmQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSB0cnVlOworKyAgICAgICAgbVJl
bmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50LmxvYWRBY3Rpb24gICA9IE1UTExvYWRBY3Rp
b25DbGVhcjsKKysgICAgICAgIG1SZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0YWNobWVudC5jbGVh
clN0ZW5jaWwgPSByYW5kKCk7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICBt
UmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQubG9hZEFjdGlvbiA9IE1UTExvYWRBY3Rp
b25Mb2FkOworKyAgICB9CisgCistICAgICAgICBtUmVuZGVyUGFzc01heFNjaXNzb3JSZWN0Lndp
ZHRoID0KKy0gICAgICAgICAgICBzdGQ6Om1pbjxOU1VJbnRlZ2VyPihtUmVuZGVyUGFzc01heFNj
aXNzb3JSZWN0LndpZHRoLCB0ZXh0dXJlLT53aWR0aChtaXBMZXZlbCkpOworLSAgICAgICAgbVJl
bmRlclBhc3NNYXhTY2lzc29yUmVjdC5oZWlnaHQgPQorLSAgICAgICAgICAgIHN0ZDo6bWluPE5T
VUludGVnZXI+KG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0LCB0ZXh0dXJlLT5oZWln
aHQobWlwTGV2ZWwpKTsKKysgICAgaWYgKGhhc0Rpc2NhcmQpCisrICAgIHsKKysgICAgICAgIGF1
dG8gdG1wRGVzYyA9IG1SZW5kZXJQYXNzRGVzYzsKKysgICAgICAgIHJlc3RhcnQodG1wRGVzYyk7
CisrICAgICAgICBlbmRFbmNvZGluZ0ltcGwoZmFsc2UpOworICAgICB9CisrI2VuZGlmICAvLyBB
TkdMRV9NVExfU0lNVUxBVEVfRElTQ0FSRF9GUkFNRUJVRkZFUgorIH0KKyAKKyB2b2lkIFJlbmRl
ckNvbW1hbmRFbmNvZGVyOjplbmNvZGVNZXRhbEVuY29kZXIoKQorQEAgLTExMDIsNyArMTE5Myw3
IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5j
b2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisg
ICAgIHsKKyAgICAgICAgIEFOR0xFX01UTF9MT0coIkNyZWF0aW5nIG5ldyByZW5kZXIgY29tbWFu
ZCBlbmNvZGVyIHdpdGggZGVzYzogJUAiLAorLSAgICAgICAgICAgICAgICAgICAgICBtQ2FjaGVk
UmVuZGVyUGFzc0Rlc2NPYmpDLmdldCgpKTsKKysgICAgICAgICAgICAgICAgICAgICAgW21DYWNo
ZWRSZW5kZXJQYXNzRGVzY09iakMgZGVzY3JpcHRpb25dKTsKKyAKKyAgICAgICAgIGlkPE1UTFJl
bmRlckNvbW1hbmRFbmNvZGVyPiBtZXRhbENtZEVuY29kZXIgPQorICAgICAgICAgICAgIFtjbWRC
dWZmZXIoKS5nZXQoKSByZW5kZXJDb21tYW5kRW5jb2RlcldpdGhEZXNjcmlwdG9yOm1DYWNoZWRS
ZW5kZXJQYXNzRGVzY09iakNdOworQEAgLTExMTAsNyArMTIwMSwxMSBAQCB2b2lkIFBvcERlYnVn
R3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0
ZUNvbW1hbmRTdAorICAgICAgICAgc2V0KG1ldGFsQ21kRW5jb2Rlcik7CisgCisgICAgICAgICAv
LyBWZXJpZnkgdGhhdCBpdCB3YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKKy0gICAgICAgIEFTU0VS
VChtZXRhbENtZEVuY29kZXIpOworKyAgICAgICAgQVNTRVJUKGdldCgpKTsKKysKKysgICAgICAg
IC8vIFdvcmstYXJvdW5kIGRyaXZlciBidWcgb24gaU9TIGRldmljZXM6IHN0ZW5jaWwgbXVzdCBi
ZSBleHBsaWNpdGx5IHNldCB0byB6ZXJvCisrICAgICAgICAvLyBldmVuIGlmIHRoZSBkb2Mgc2F5
cyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBhbHJlYWR5IHplcm8uCisrICAgICAgICBbbWV0YWxDbWRF
bmNvZGVyIHNldFN0ZW5jaWxSZWZlcmVuY2VWYWx1ZTowXTsKKyAKKyAgICAgICAgIGlmIChtTGFi
ZWwpCisgICAgICAgICB7CitAQCAtMTExOSw3ICsxMjE0LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3Vw
Q21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21t
YW5kU3QKKyAKKyAgICAgICAgIHdoaWxlIChtQ29tbWFuZHMuZ29vZCgpKQorICAgICAgICAgewor
LSAgICAgICAgICAgIENtZFR5cGUgY21kVHlwZSAgICAgICAgICAgID0gbUNvbW1hbmRzLmZldGNo
PENtZFR5cGU+KCk7CisrICAgICAgICAgICAgYXV0byBjbWRUeXBlICAgICAgICAgICAgICAgPSBt
Q29tbWFuZHMuZmV0Y2g8Q21kVHlwZT4oKTsKKyAgICAgICAgICAgICBDb21tYW5kRW5jb2RlckZ1
bmMgZW5jb2RlciA9IGdDb21tYW5kRW5jb2RlcnNbc3RhdGljX2Nhc3Q8aW50PihjbWRUeXBlKV07
CisgICAgICAgICAgICAgZW5jb2RlcihtZXRhbENtZEVuY29kZXIsICZtQ29tbWFuZHMpOworICAg
ICAgICAgfQorQEAgLTExNDIsNDEgKzEyMzcsMzQgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlk
PE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QK
KyAgICAgICAgIGVuZEVuY29kaW5nKCk7CisgICAgIH0KKyAKKy0gICAgaWYgKCFjbWRCdWZmZXIo
KS5yZWFkeSgpKQorKyAgICBpZiAoIWNtZEJ1ZmZlcigpLnZhbGlkKCkpCisgICAgIHsKKyAgICAg
ICAgIHJlc2V0KCk7CisgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgIH0KKyAKKy0gICAgbUxh
YmVsLnJlc2V0KCk7CistCisgICAgIG1SZW5kZXJQYXNzRGVzYyA9IGRlc2M7CisgICAgIG1SZWNv
cmRpbmcgICAgICA9IHRydWU7CisgICAgIG1IYXNEcmF3Q2FsbHMgICA9IGZhbHNlOworLSAgICBt
UmVuZGVyUGFzc01heFNjaXNzb3JSZWN0ID0gey54ICAgICAgPSAwLAorLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC55ICAgICAgPSAwLAorLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC53aWR0aCAgPSBzdGQ6Om51bWVyaWNfbGltaXRzPE5TVUludGVnZXI+OjptYXgo
KSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaGVpZ2h0ID0gc3RkOjpudW1l
cmljX2xpbWl0czxOU1VJbnRlZ2VyPjo6bWF4KCl9OworIAorLSAgICAvLyBTZXQgd3JpdGluZyBk
ZXBlbmRlbmN5ICYgY29uc3RyYWluIHRoZSBzY2lzc29yIHJlY3QKKysgICAgLy8gbWFzayB3cml0
aW5nIGRlcGVuZGVuY3kgJiBzZXQgYXBwcm9wcmlhdGUgc3RvcmUgb3B0aW9ucworICAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbVJlbmRlclBhc3NEZXNjLm51bUNvbG9yQXR0YWNobWVudHM7
ICsraSkKKyAgICAgeworLSAgICAgICAgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVuY3lBbmRT
Y2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSk7CisrICAgICAg
ICBpbml0V3JpdGVEZXBlbmRlbmN5KG1SZW5kZXJQYXNzRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ld
LnRleHR1cmUoKSk7CisgICAgIH0KKyAKKy0gICAgaW5pdEF0dGFjaG1lbnRXcml0ZURlcGVuZGVu
Y3lBbmRTY2lzc29yUmVjdChtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50KTsKKysgICAg
aW5pdFdyaXRlRGVwZW5kZW5jeShtUmVuZGVyUGFzc0Rlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1
cmUoKSk7CisgCistICAgIGluaXRBdHRhY2htZW50V3JpdGVEZXBlbmRlbmN5QW5kU2Npc3NvclJl
Y3QobVJlbmRlclBhc3NEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKKysgICAgaW5pdFdyaXRlRGVw
ZW5kZW5jeShtUmVuZGVyUGFzc0Rlc2Muc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSgpKTsKKyAK
KyAgICAgLy8gQ29udmVydCB0byBPYmplY3RpdmUtQyBkZXNjcmlwdG9yCisgICAgIG1SZW5kZXJQ
YXNzRGVzYy5jb252ZXJ0VG9NZXRhbERlc2MobUNhY2hlZFJlbmRlclBhc3NEZXNjT2JqQyk7Cisg
CistICAgIC8vIFRoZSBhY3R1YWwgT2JqZWN0aXZlLUMgZW5jb2RlciB3aWxsIGJlIGNyZWF0ZWQg
bGF0ZXIgaW4gZW5kRW5jb2RpbmcoKSwgd2UgZG8gc28gaW4KKy0gICAgLy8gb3JkZXIgdG8gYmUg
YWJsZSB0byBzb3J0IHRoZSBjb21tYW5kcyBvciBkbyB0aGUgcHJlcHJvY2Vzc2luZyBiZWZvcmUg
dGhlIGFjdHVhbAorLSAgICAvLyBlbmNvZGluZy4KKysgICAgLy8gVGhlIGFjdHVhbCBPYmplY3Rp
dmUtQyBlbmNvZGVyIHdpbGwgYmUgY3JlYXRlZCBsYXRlciBpbiBlbmRFbmNvZGluZygpLCB3ZSBk
byBzbyBpbiBvcmRlcgorKyAgICAvLyB0byBiZSBhYmxlIHRvIHNvcnQgdGhlIGNvbW1hbmRzIG9y
IGRvIHRoZSBwcmVwcm9jZXNzaW5nIGJlZm9yZSB0aGUgYWN0dWFsIGVuY29kaW5nLgorIAorLSAg
ICAvLyBTaW5jZSB3ZSBkZWZlciB0aGUgbmF0aXZlIGVuY29kZXIgY3JlYXRpb24sIHdlIG5lZWQg
dG8gZXhwbGljaXRseSB0ZWxsIGNvbW1hbmQgYnVmZmVyCistICAgIC8vIHRoYXQgdGhpcyBvYmpl
Y3QgaXMgdGhlIGFjdGl2ZSBlbmNvZGVyOgorKyAgICAvLyBTaW5jZSB3ZSBkZWZlciB0aGUgbmF0
aXZlIGVuY29kZXIgY3JlYXRpb24sIHdlIG5lZWQgdG8gZXhwbGljaXRseSB0ZWxsIGNvbW1hbmQg
YnVmZmVyIHRoYXQKKysgICAgLy8gdGhpcyBvYmplY3QgaXMgdGhlIGFjdGl2ZSBlbmNvZGVyOgor
ICAgICBjbWRCdWZmZXIoKS5zZXRBY3RpdmVDb21tYW5kRW5jb2Rlcih0aGlzKTsKKyAKKyAgICAg
cmV0dXJuICp0aGlzOworQEAgLTEzMDIsMTYgKzEzOTAsNiBAQCB2b2lkIFBvcERlYnVnR3JvdXBD
bWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1h
bmRTdAorICAgICB7CisgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgIH0KKy0KKy0gICAgaWYg
KEFOR0xFX1VOTElLRUxZKHJlY3QueCArIHJlY3Qud2lkdGggPiBtUmVuZGVyUGFzc01heFNjaXNz
b3JSZWN0LndpZHRoIHx8CistICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkgKyByZWN0Lmhl
aWdodCA+IG1SZW5kZXJQYXNzTWF4U2Npc3NvclJlY3QuaGVpZ2h0KSkKKy0gICAgeworLSAgICAg
ICAgV0FSTigpIDw8ICJPdXQgb2YgYm91bmQgc2Npc3NvciByZWN0IGRldGVjdGVkICIgPDwgcmVj
dC54IDw8ICIgIiA8PCByZWN0LnkgPDwgIiAiCistICAgICAgICAgICAgICAgPDwgcmVjdC53aWR0
aCA8PCAiICIgPDwgcmVjdC5oZWlnaHQ7CistICAgICAgICAvLyBPdXQgb2YgYm91bmQgcmVjdCB3
aWxsIGNyYXNoIHRoZSBtZXRhbCBydW50aW1lLCBpZ25vcmUgaXQuCistICAgICAgICByZXR1cm4g
KnRoaXM7CistICAgIH0KKy0KKyAgICAgbVN0YXRlQ2FjaGUuc2Npc3NvclJlY3QgPSByZWN0Owor
IAorICAgICBtQ29tbWFuZHMucHVzaChDbWRUeXBlOjpTZXRTY2lzc29yUmVjdCkucHVzaChyZWN0
KTsKK0BAIC0xMzgzLDcgKzE0NjEsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVu
ZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIC8vIElmIGJ1ZmZl
ciBhbHJlYWR5IGJvdW5kIGJ1dCB3aXRoIGRpZmZlcmVudCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRo
ZSBvZmZzZXQgb25seS4KKysgICAgICAgIC8vIElmIGJ1ZmZlciBhbHJlYWR5IGJvdW5kIGJ1dCB3
aXRoIGRpZmZlcmVudCBvZmZzZXQsIHRoZW4gdXBkYXRlIHRoZSBvZmZlciBvbmx5LgorICAgICAg
ICAgc2hhZGVyU3RhdGVzLmJ1ZmZlck9mZnNldHNbaW5kZXhdID0gb2Zmc2V0OworIAorICAgICAg
ICAgbUNvbW1hbmRzLnB1c2goc3RhdGljX2Nhc3Q8Q21kVHlwZT4obVNldEJ1ZmZlck9mZnNldENt
ZHNbc2hhZGVyVHlwZV0pKQorQEAgLTE0OTAsMTIgKzE1NjgsNiBAQCB2b2lkIFBvcERlYnVnR3Jv
dXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNv
bW1hbmRTdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCB2ZXJ0ZXhTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQpCisgeworLSAgICBpZiAoQU5H
TEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKKy0gICAgeworLSAgICAg
ICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlwZWxpbmUgc3Rh
dGUgc2V0IHByaW9yIHRvIHRoaXMuCistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0KKy0K
KyAgICAgbUhhc0RyYXdDYWxscyA9IHRydWU7CisgICAgIG1Db21tYW5kcy5wdXNoKENtZFR5cGU6
OkRyYXcpLnB1c2gocHJpbWl0aXZlVHlwZSkucHVzaCh2ZXJ0ZXhTdGFydCkucHVzaCh2ZXJ0ZXhD
b3VudCk7CisgCitAQCAtMTUwNywxMiArMTU3OSw2IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChp
ZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90IHZlcnRleENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpCisgeworLSAg
ICBpZiAoQU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKKy0gICAg
eworLSAgICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlw
ZWxpbmUgc3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCistICAgICAgICByZXR1cm4gKnRoaXM7Cist
ICAgIH0KKy0KKyAgICAgbUhhc0RyYXdDYWxscyA9IHRydWU7CisgICAgIG1Db21tYW5kcy5wdXNo
KENtZFR5cGU6OkRyYXdJbnN0YW5jZWQpCisgICAgICAgICAucHVzaChwcmltaXRpdmVUeXBlKQor
QEAgLTE1MjksMTMgKzE1OTUsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVy
Q29tbWFuZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnVm
ZmVyUmVmICZpbmRleEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBidWZmZXJPZmZzZXQpCisgeworLSAgICBpZiAo
QU5HTEVfVU5MSUtFTFkoIW1TdGF0ZUNhY2hlLnJlbmRlclBpcGVsaW5lKSkKKy0gICAgeworLSAg
ICAgICAgLy8gSWdub3JlIGRyYXcgY2FsbCBpZiB0aGVyZSBpcyBubyByZW5kZXIgcGlwZWxpbmUg
c3RhdGUgc2V0IHByaW9yIHRvIHRoaXMuCistICAgICAgICByZXR1cm4gKnRoaXM7CistICAgIH0K
Ky0KKy0gICAgaWYgKEFOR0xFX1VOTElLRUxZKCFpbmRleEJ1ZmZlcikpCisrICAgIGlmICghaW5k
ZXhCdWZmZXIpCisgICAgIHsKKyAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgfQorQEAgLTE1
NjAsMTMgKzE2MjAsNyBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFu
ZEVuY29kZXI+IGVuY29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKKyB7CistICAgIGlm
IChBTkdMRV9VTkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlwZWxpbmUpKQorLSAgICB7Cist
ICAgICAgICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGlu
ZSBzdGF0ZSBzZXQgcHJpb3IgdG8gdGhpcy4KKy0gICAgICAgIHJldHVybiAqdGhpczsKKy0gICAg
fQorLQorLSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIWluZGV4QnVmZmVyKSkKKysgICAgaWYgKCFp
bmRleEJ1ZmZlcikKKyAgICAgeworICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICB9CitAQCAt
MTU5NCwxMyArMTY0OCw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21t
YW5kRW5jb2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIHVpbnQzMl90
IGluc3RhbmNlcywKKyAgICAgdWludDMyX3QgYmFzZVZlcnRleCkKKyB7CistICAgIGlmIChBTkdM
RV9VTkxJS0VMWSghbVN0YXRlQ2FjaGUucmVuZGVyUGlwZWxpbmUpKQorLSAgICB7CistICAgICAg
ICAvLyBJZ25vcmUgZHJhdyBjYWxsIGlmIHRoZXJlIGlzIG5vIHJlbmRlciBwaXBlbGluZSBzdGF0
ZSBzZXQgcHJpb3IgdG8gdGhpcy4KKy0gICAgICAgIHJldHVybiAqdGhpczsKKy0gICAgfQorLQor
LSAgICBpZiAoQU5HTEVfVU5MSUtFTFkoIWluZGV4QnVmZmVyKSkKKysgICAgaWYgKCFpbmRleEJ1
ZmZlcikKKyAgICAgeworICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICB9CitAQCAtMTY3Myw2
ICsxNzIxLDEyIEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgIHJldHVybiAqdGhpczsK
KyB9CisgCisrdm9pZCBSZW5kZXJDb21tYW5kRW5jb2Rlcjo6aW5zZXJ0RGVidWdTaWduSW1wbChO
U1N0cmluZyAqbGFiZWwpCisreworKyAgICAvLyBEZWZlciB0aGUgaW5zZXJ0aW9uIHVudGlsIGVu
ZEVuY29kaW5nKCkKKysgICAgbUNvbW1hbmRzLnB1c2goQ21kVHlwZTo6SW5zZXJ0RGVidWdzaWdu
KS5wdXNoKFtsYWJlbCBBTkdMRV9NVExfUkVUQUlOXSk7CisrfQorKworIHZvaWQgUmVuZGVyQ29t
bWFuZEVuY29kZXI6OnB1c2hEZWJ1Z0dyb3VwKE5TU3RyaW5nICpsYWJlbCkKKyB7CisgICAgIC8v
IERlZmVyIHRoZSBpbnNlcnRpb24gdW50aWwgZW5kRW5jb2RpbmcoKQorQEAgLTE3OTksNyArMTg1
Myw3IEBAIHZvaWQgUG9wRGVidWdHcm91cENtZChpZDxNVExSZW5kZXJDb21tYW5kRW5jb2Rlcj4g
ZW5jb2RlciwgSW50ZXJtZWRpYXRlQ29tbWFuZFN0CisgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICAgfQorIAorLSAgICAgICAgaWYgKCFjbWRCdWZmZXIoKS5yZWFkeSgpKQorKyAg
ICAgICAgaWYgKCFjbWRCdWZmZXIoKS52YWxpZCgpKQorICAgICAgICAgeworICAgICAgICAgICAg
IHJlc2V0KCk7CisgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworQEAgLTE5NjIsNiArMjAxNiw2
NiBAQCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVu
Y29kZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICByZXR1cm4gKnRoaXM7CisgfQorIAor
K0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVyZShjb25z
dCBUZXh0dXJlUmVmICZzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0U2xpY2UsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNyY1N0YXJ0TGV2
ZWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRleHR1cmVSZWYgJmRzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0U3RhcnRTbGljZSwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0U3Rh
cnRMZXZlbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3Qgc2xpY2VDb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGV2ZWxDb3VudCkKKyt7CisrICAgIGlm
ICghc3JjIHx8ICFkc3QpCisrICAgIHsKKysgICAgICAgIHJldHVybiAqdGhpczsKKysgICAgfQor
KworKyAgICBjbWRCdWZmZXIoKS5zZXRSZWFkRGVwZW5kZW5jeShzcmMpOworKyAgICBjbWRCdWZm
ZXIoKS5zZXRXcml0ZURlcGVuZGVuY3koZHN0KTsKKysKKysjaWYgZGVmaW5lZChfX0lQSE9ORV8x
M18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQorKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxB
QkxFX1hDSSgxMC4xNSwgMTMuMCwgMTMuMCkpCisrICAgIHsKKysgICAgICAgIFtnZXQoKSBjb3B5
RnJvbVRleHR1cmU6c3JjLT5nZXQoKQorKyAgICAgICAgICAgICAgICAgICBzb3VyY2VTbGljZTpz
cmNTdGFydFNsaWNlCisrICAgICAgICAgICAgICAgICAgIHNvdXJjZUxldmVsOnNyY1N0YXJ0TGV2
ZWwKKysgICAgICAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZHN0LT5nZXQoKQorKyAgICAgICAg
ICAgICAgZGVzdGluYXRpb25TbGljZTpkc3RTdGFydFNsaWNlCisrICAgICAgICAgICAgICBkZXN0
aW5hdGlvbkxldmVsOmRzdFN0YXJ0TGV2ZWwKKysgICAgICAgICAgICAgICAgICAgIHNsaWNlQ291
bnQ6c2xpY2VDb3VudAorKyAgICAgICAgICAgICAgICAgICAgbGV2ZWxDb3VudDpsZXZlbENvdW50
XTsKKysgICAgfQorKyAgICBlbHNlCisrI2VuZGlmCisrICAgIHsKKysgICAgICAgIE1UTE9yaWdp
biBvcmlnaW4gPSBNVExPcmlnaW5NYWtlKDAsIDAsIDApOworKyAgICAgICAgZm9yICh1aW50MzJf
dCBzbGljZSA9IDA7IHNsaWNlIDwgc2xpY2VDb3VudDsgKytzbGljZSkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICB1aW50MzJfdCBzcmNTbGljZSA9IHNyY1N0YXJ0U2xpY2UgKyBzbGljZTsKKysg
ICAgICAgICAgICB1aW50MzJfdCBkc3RTbGljZSA9IGRzdFN0YXJ0U2xpY2UgKyBzbGljZTsKKysg
ICAgICAgICAgICBmb3IgKHVpbnQzMl90IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyAr
K2xldmVsKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgbXRsOjpNaXBtYXBOYXRp
dmVMZXZlbCBzcmNMZXZlbCA9IG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwoc3JjU3RhcnRMZXZlbCAr
IGxldmVsKTsKKysgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0TGV2ZWwgPSBkc3RTdGFydExl
dmVsICsgbGV2ZWw7CisrICAgICAgICAgICAgICAgIE1UTFNpemUgc3JjU2l6ZSA9CisrICAgICAg
ICAgICAgICAgICAgICBNVExTaXplTWFrZShzcmMtPndpZHRoKHNyY0xldmVsKSwgc3JjLT5oZWln
aHQoc3JjTGV2ZWwpLCBzcmMtPmRlcHRoKHNyY0xldmVsKSk7CisrCisrICAgICAgICAgICAgICAg
IFtnZXQoKSBjb3B5RnJvbVRleHR1cmU6c3JjLT5nZXQoKQorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZVNsaWNlOnNyY1NsaWNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
c291cmNlTGV2ZWw6c3JjTGV2ZWwuZ2V0KCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
dXJjZU9yaWdpbjpvcmlnaW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlU2l6
ZTpzcmNTaXplCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1RleHR1cmU6ZHN0LT5n
ZXQoKQorKyAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblNsaWNlOmRzdFNsaWNlCisr
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uTGV2ZWw6ZHN0TGV2ZWwKKysgICAgICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yaWdpbjpvcmlnaW5dOworKyAgICAgICAgICAgIH0K
KysgICAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gKnRoaXM7CisrfQorKworIEJsaXRD
b21tYW5kRW5jb2RlciAmQmxpdENvbW1hbmRFbmNvZGVyOjpnZW5lcmF0ZU1pcG1hcHNGb3JUZXh0
dXJlKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1cmUpCisgeworICAgICBpZiAoIXRleHR1cmUpCitA
QCAtMTk3NCw3ICsyMDg4LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNv
bW1hbmRFbmNvZGVyPiBlbmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAKKyAgICAgcmV0
dXJuICp0aGlzOworIH0KKy1CbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6
c3luY2hyb25pemVSZXNvdXJjZShCdWZmZXIgKmJ1ZmZlcikKKytCbGl0Q29tbWFuZEVuY29kZXIg
JkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25pemVSZXNvdXJjZShjb25zdCBCdWZmZXJSZWYg
JmJ1ZmZlcikKKyB7CisgICAgIGlmICghYnVmZmVyKQorICAgICB7CitAQCAtMTk4OSw3ICsyMTAz
LDcgQEAgdm9pZCBQb3BEZWJ1Z0dyb3VwQ21kKGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBl
bmNvZGVyLCBJbnRlcm1lZGlhdGVDb21tYW5kU3QKKyAjZW5kaWYKKyAgICAgcmV0dXJuICp0aGlz
OworIH0KKy1CbGl0Q29tbWFuZEVuY29kZXIgJkJsaXRDb21tYW5kRW5jb2Rlcjo6c3luY2hyb25p
emVSZXNvdXJjZShUZXh0dXJlICp0ZXh0dXJlKQorK0JsaXRDb21tYW5kRW5jb2RlciAmQmxpdENv
bW1hbmRFbmNvZGVyOjpzeW5jaHJvbml6ZVJlc291cmNlKGNvbnN0IFRleHR1cmVSZWYgJnRleHR1
cmUpCisgeworICAgICBpZiAoIXRleHR1cmUpCisgICAgIHsKK0BAIC0yMDI4LDcgKzIxNDIsNyBA
QCB2b2lkIFBvcERlYnVnR3JvdXBDbWQoaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IGVuY29k
ZXIsIEludGVybWVkaWF0ZUNvbW1hbmRTdAorICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgIH0KKyAKKy0gICAgICAgIGlmICghY21kQnVmZmVyKCkucmVhZHkoKSkKKysgICAgICAg
IGlmICghY21kQnVmZmVyKCkudmFsaWQoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZXNl
dCgpOworICAgICAgICAgICAgIHJldHVybiAqdGhpczsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9jb21tb24uaAoraW5kZXggOTdjY2I5My4uM2ZjNWUzOSAxMDA2NDQKKy0tLSBhL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKKysrKyBiL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29tbW9uLmgKK0BAIC0yNyw5ICsyNywxOCBAQAorICNpbmNs
dWRlICJsaWJBTkdMRS9hbmdsZXR5cGVzLmgiCisgCisgI2lmIFRBUkdFVF9PU19JUEhPTkUKKysj
ICAgIGlmICFkZWZpbmVkKF9fSVBIT05FXzExXzApCisrIyAgICAgICAgZGVmaW5lIF9fSVBIT05F
XzExXzAgMTEwMDAwCisrIyAgICBlbmRpZgorICMgICAgaWYgIWRlZmluZWQoQU5HTEVfSU9TX0RF
UExPWV9UQVJHRVQpCisgIyAgICAgICAgZGVmaW5lIEFOR0xFX0lPU19ERVBMT1lfVEFSR0VUIF9f
SVBIT05FXzExXzAKKyAjICAgIGVuZGlmCisrIyAgICBpZiAhZGVmaW5lZChfX0lQSE9ORV9PU19W
RVJTSU9OX01BWF9BTExPV0VEKQorKyMgICAgICAgIGRlZmluZSBfX0lQSE9ORV9PU19WRVJTSU9O
X01BWF9BTExPV0VEIF9fSVBIT05FXzExXzAKKysjICAgIGVuZGlmCisrIyAgICBpZiAhZGVmaW5l
ZChfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQpCisrIyAgICAgICAgZGVmaW5lIF9fVFZfT1Nf
VkVSU0lPTl9NQVhfQUxMT1dFRCBfX0lQSE9ORV8xMV8wCisrIyAgICBlbmRpZgorICNlbmRpZgor
IAorICNpZiAhZGVmaW5lZChUQVJHRVRfT1NfTUFDQ0FUQUxZU1QpCitAQCAtNjYsNiArNzUsNyBA
QCBuYW1lc3BhY2UgZWdsCisgeworIGNsYXNzIERpc3BsYXk7CisgY2xhc3MgSW1hZ2U7CisrY2xh
c3MgU3VyZmFjZTsKKyB9ICAvLyBuYW1lc3BhY2UgZWdsCisgCisgI2RlZmluZSBBTkdMRV9HTF9P
QkpFQ1RTX1goUFJPQykgXAorQEAgLTEwMiw2ICsxMTIsNyBAQCBjbGFzcyBUZXh0dXJlTXRsOwor
IGNsYXNzIFByb2dyYW1NdGw7CisgY2xhc3MgU2FtcGxlck10bDsKKyBjbGFzcyBUcmFuc2Zvcm1G
ZWVkYmFja010bDsKKytjbGFzcyBTdXJmYWNlTXRsUHJvdG9jb2w7CisgCisgQU5HTEVfR0xfT0JK
RUNUU19YKEFOR0xFX1BSRV9ERUNMQVJFX01UTF9PQkpFQ1QpCisgCitAQCAtMTI4LDcgKzEzOSw4
IEBAIGNvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRBdHRyaWJ1dGVTaXplID0gNCAqIHNpemVvZihm
bG9hdCk7CisgLy8gTWV0YWwgbGltaXRzCisgY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJC
dWZmZXJzICAgICA9IDMxOworIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4U2hhZGVyU2FtcGxlcnMg
ICAgPSAxNjsKKy1jb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0gNCAq
IDEwMjQ7CisrY29uc3RleHByIHNpemVfdCBrSW5saW5lQ29uc3REYXRhTWF4U2l6ZSA9IDQgKiAx
MDI0OworK2NvbnN0ZXhwciBzaXplX3Qga0RlZmF1bHRVbmlmb3Jtc01heFNpemUgPSBrSW5saW5l
Q29uc3REYXRhTWF4U2l6ZTsKKyBjb25zdGV4cHIgdWludDMyX3Qga01heFZpZXdwb3J0cyAgICAg
ICAgID0gMTsKKyAKKyBjb25zdGV4cHIgdWludDMyX3Qga1ZlcnRleEF0dHJpYkJ1ZmZlclN0cmlk
ZUFsaWdubWVudCA9IDQ7CitAQCAtMTQyLDcgKzE1NCw3IEBAIGNvbnN0ZXhwciB1aW50MzJfdCBr
SW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgICAgPSA0OworIGNvbnN0ZXhwciB1aW50MzJf
dCBrQXJndW1lbnRCdWZmZXJPZmZzZXRBbGlnbm1lbnQgICAgPSBrVW5pZm9ybUJ1ZmZlclNldHRp
bmdPZmZzZXRNaW5BbGlnbm1lbnQ7CisgY29uc3RleHByIHVpbnQzMl90IGtUZXh0dXJlVG9CdWZm
ZXJCbGl0dGluZ0FsaWdubWVudCA9IDI1NjsKKyAKKy0vLyBGcm9udCBlbmQgYmluZGluZyBsaW1p
dHMKKysvLyBGb250IGVuZCBiaW5kaW5nIGxpbWl0cworIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4
R0xTYW1wbGVyQmluZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOworIGNvbnN0ZXhwciB1
aW50MzJfdCBrTWF4R0xVQk9CaW5kaW5ncyAgICAgPSAyICoga01heFNoYWRlclVCT3M7CisgCitA
QCAtMTU1LDIxICsxNjcsMjMgQEAgY29uc3RleHByIHVpbnQzMl90IGtEZWZhdWx0QXR0cmlic0Jp
bmRpbmdJbmRleCA9IGtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGtNYXhWZXIKKyBjb25zdGV4cHIg
dWludDMyX3Qga0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmlu
ZGluZ0luZGV4ICsgMTsKKyAvLyBCaW5kaW5nIGluZGV4IGZvciBkZWZhdWx0IHVuaWZvcm1zOgor
IGNvbnN0ZXhwciB1aW50MzJfdCBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1
bHRBdHRyaWJzQmluZGluZ0luZGV4ICsgMzsKKy0vLyBCaW5kaW5nIGluZGV4IGZvciBVQk8ncyBh
cmd1bWVudCBidWZmZXIgb3Igc3RhcnRpbmcgZGlzY3JldGUgc2xvdAorLWNvbnN0ZXhwciB1aW50
MzJfdCBrVUJPQXJndW1lbnRCdWZmZXJCaW5kaW5nSW5kZXggPSBrRGVmYXVsdFVuaWZvcm1zQmlu
ZGluZ0luZGV4ICsgMTsKKysvLyBCaW5kaW5nIGluZGV4IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sg
QnVmZmVycyAoNCkKKytjb25zdGV4cHIgdWludDMyX3Qga1RyYW5zZm9ybUZlZWRiYWNrQmluZGlu
Z0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJbmRleCArIDE7CisrLy8gQmluZGluZyBp
bmRleCBmb3Igc2hhZG93IHNhbXBsZXJzJyBjb21wYXJlIG1vZGVzCisrY29uc3RleHByIHVpbnQz
Ml90IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZl
ZWRiYWNrQmluZGluZ0luZGV4ICsgNDsKKysvLyBCaW5kaW5nIGluZGV4IGZvciBVQk8ncyBhcmd1
bWVudCBidWZmZXIKKytjb25zdGV4cHIgdWludDMyX3Qga1VCT0FyZ3VtZW50QnVmZmVyQmluZGlu
Z0luZGV4ID0ga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9kZXNCaW5kaW5nSW5kZXggKyAxOworIAor
LWNvbnN0ZXhwciB1aW50MzJfdCBrU3RlbmNpbE1hc2tBbGwgPSAweGZmOyAgLy8gT25seSA4IGJp
dHMgc3RlbmNpbCBpcyBzdXBwb3J0ZWQKKytjb25zdGV4cHIgdWludDMyX3Qga1N0ZW5jaWxNYXNr
QWxsID0gMHhmZjsgIC8vIE9ubHkgOCBiaXQgc3RlbmNpbCBpcyBzdXBwb3J0ZWQKKyAKKyAvLyBU
aGlzIHNwZWNpYWwgY29uc3RhbnQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgcGFydGljdWxh
ciB2ZXJ0ZXggZGVzY3JpcHRvcidzIGJ1ZmZlciBsYXlvdXQKKyAvLyBpbmRleCBpcyB1bnVzZWQu
CisgY29uc3RleHByIE1UTFZlcnRleFN0ZXBGdW5jdGlvbiBrVmVydGV4U3RlcEZ1bmN0aW9uSW52
YWxpZCA9CisgICAgIHN0YXRpY19jYXN0PE1UTFZlcnRleFN0ZXBGdW5jdGlvbj4oMHhmZik7Cisg
CistY29uc3RleHByIGludCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMTsKKy0KKy1jb25zdGV4cHIg
c2l6ZV90IGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUgPSBzaXplb2YodWludDY0X3QpOworK2Nv
bnN0ZXhwciBmbG9hdCBrRW11bGF0ZWRBbHBoYVZhbHVlID0gMS4wZjsKKyAKKy1jb25zdGV4cHIg
Z2w6OlZlcnNpb24ga01heFN1cHBvcnRlZEdMVmVyc2lvbiA9IGdsOjpWZXJzaW9uKDMsIDApOwor
K2NvbnN0ZXhwciB1aW50MzJfdCBrT2NjbHVzaW9uUXVlcnlSZXN1bHRTaXplID0gc2l6ZW9mKHVp
bnQ2NF90KTsKKyAKKyAvLyBXb3JrLWFyb3VuZCB0aGUgZW51bSBpcyBub3QgYXZhaWxhYmxlIG9u
IG1hY09TCisgI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NBVEFMWVNUCitAQCAt
MTc5LDEzICsxOTMsMTEgQEAgY29uc3RleHByIE1UTEJsaXRPcHRpb24ga0JsaXRPcHRpb25Sb3dM
aW5lYXJQVlJUQyAgICAgICAgICA9IE1UTEJsaXRPcHRpb25Sb3dMaW4KKyAjZW5kaWYKKyAKKyAj
aWYgZGVmaW5lZChfX0lQSE9ORV8xM18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQorLSMgICAg
ZGVmaW5lIEFOR0xFX01UTF9TV0laWkxFX0FWQUlMQUJMRSAxCisgdXNpbmcgVGV4dHVyZVN3aXp6
bGVDaGFubmVscyAgICAgICAgICAgICAgICAgICA9IE1UTFRleHR1cmVTd2l6emxlQ2hhbm5lbHM7
CisgdXNpbmcgUmVuZGVyU3RhZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IE1UTFJl
bmRlclN0YWdlczsKKyBjb25zdGV4cHIgTVRMUmVuZGVyU3RhZ2VzIGtSZW5kZXJTdGFnZVZlcnRl
eCAgID0gTVRMUmVuZGVyU3RhZ2VWZXJ0ZXg7CisgY29uc3RleHByIE1UTFJlbmRlclN0YWdlcyBr
UmVuZGVyU3RhZ2VGcmFnbWVudCA9IE1UTFJlbmRlclN0YWdlRnJhZ21lbnQ7CisgI2Vsc2UKKy0j
ICAgIGRlZmluZSBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUgMAorIHVzaW5nIFRleHR1cmVT
d2l6emxlQ2hhbm5lbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbnQ7CisgdXNp
bmcgUmVuZGVyU3RhZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IGludDsKKyBjb25zdGV4cHIgUmVuZGVyU3RhZ2VzIGtSZW5kZXJTdGFnZVZlcnRleCAgICAgICAg
ICAgICAgICAgID0gMTsKK0BAIC0yMTksMTIgKzIzMSwxNiBAQCBzdHJ1Y3QgSW1wbFR5cGVIZWxw
ZXI8ZWdsOjpEaXNwbGF5PgorIHsKKyAgICAgdXNpbmcgSW1wbFR5cGUgPSBEaXNwbGF5TXRsOwor
IH07CistCisrdGVtcGxhdGUgPD4KKytzdHJ1Y3QgSW1wbFR5cGVIZWxwZXI8ZWdsOjpTdXJmYWNl
PgorK3sKKysgICAgdXNpbmcgSW1wbFR5cGUgPSBTdXJmYWNlTXRsUHJvdG9jb2w7CisrfTsKKyB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyB1c2luZyBHZXRJbXBsVHlwZSA9IHR5cGVuYW1lIEltcGxU
eXBlSGVscGVyPFQ+OjpJbXBsVHlwZTsKKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKy1HZXRJ
bXBsVHlwZTxUPiAqR2V0SW1wbChjb25zdCBUICpfTm9ubnVsbCBnbE9iamVjdCkKKytHZXRJbXBs
VHlwZTxUPiAqR2V0SW1wbChjb25zdCBUICpnbE9iamVjdCkKKyB7CisgICAgIHJldHVybiBHZXRJ
bXBsQXM8R2V0SW1wbFR5cGU8VD4+KGdsT2JqZWN0KTsKKyB9CitAQCAtMzQ2LDIxICszNjIsMTYg
QEAgdXNpbmcgQXV0b09iakNPYmogPSBBdXRvT2JqQ1B0cjxUICo+OworIAorIC8vIE5PVEU6IFNo
YXJlZEV2ZW50IGlzIG9ubHkgZGVjbGFyZWQgb24gaU9TIDEyLjArIG9yIG1hYyAxMC4xNCsKKyAj
aWYgZGVmaW5lZChfX0lQSE9ORV8xMl8wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE0KQorLSMgICAg
ZGVmaW5lIEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUgMQorIHVzaW5nIFNoYXJlZEV2ZW50UmVm
ID0gQXV0b09iakNQdHI8aWQ8TVRMU2hhcmVkRXZlbnQ+PjsKKyAjZWxzZQorLSMgICAgZGVmaW5l
IEFOR0xFX01UTF9FVkVOVF9BVkFJTEFCTEUgMAorIHVzaW5nIFNoYXJlZEV2ZW50UmVmICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBBdXRvT2JqQ09iajxOU09iamVjdD47
CisgI2VuZGlmCisgCisgLy8gVGhlIG5hdGl2ZSBpbWFnZSBpbmRleCB1c2VkIGJ5IE1ldGFsIGJh
Y2stZW5kLCAgdGhlIGltYWdlIGluZGV4IHVzZXMgbmF0aXZlIG1pcG1hcCBsZXZlbCBpbnN0ZWFk
CisgLy8gb2YgInZpcnR1YWwiIGxldmVsIG1vZGlmaWVkIGJ5IE9wZW5HTCdzIGJhc2UgbGV2ZWwu
CisgdXNpbmcgTWlwbWFwTmF0aXZlTGV2ZWwgPSBnbDo6TGV2ZWxJbmRleFdyYXBwZXI8dWludDMy
X3Q+OworLQorIGNvbnN0ZXhwciBNaXBtYXBOYXRpdmVMZXZlbCBrWmVyb05hdGl2ZU1pcExldmVs
KDApOworLQorIGNsYXNzIEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvcjsKKy0KKyBjbGFzcyBJbWFn
ZU5hdGl2ZUluZGV4IGZpbmFsCisgeworICAgcHVibGljOgorQEAgLTM3MCw1NSArMzgxLDQyIEBA
IGNsYXNzIEltYWdlTmF0aXZlSW5kZXggZmluYWwKKyAgICAgICAgIG1OYXRpdmVJbmRleCA9IGds
OjpJbWFnZUluZGV4OjpNYWtlRnJvbVR5cGUoc3JjLmdldFR5cGUoKSwgc3JjLmdldExldmVsSW5k
ZXgoKSAtIGJhc2VMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3JjLmdldExheWVySW5kZXgoKSwgc3JjLmdldExheWVyQ291bnQoKSk7
CisgICAgIH0KKy0KKyAgICAgc3RhdGljIEltYWdlTmF0aXZlSW5kZXggRnJvbUJhc2VaZXJvR0xJ
bmRleChjb25zdCBnbDo6SW1hZ2VJbmRleCAmc3JjKQorICAgICB7CisgICAgICAgICByZXR1cm4g
SW1hZ2VOYXRpdmVJbmRleChzcmMsIDApOworICAgICB9CistCisgICAgIE1pcG1hcE5hdGl2ZUxl
dmVsIGdldE5hdGl2ZUxldmVsKCkgY29uc3QKKyAgICAgeworICAgICAgICAgcmV0dXJuIE1pcG1h
cE5hdGl2ZUxldmVsKG1OYXRpdmVJbmRleC5nZXRMZXZlbEluZGV4KCkpOworICAgICB9CistCisg
ICAgIGdsOjpUZXh0dXJlVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4
LmdldFR5cGUoKTsgfQorICAgICBHTGludCBnZXRMYXllckluZGV4KCkgY29uc3QgeyByZXR1cm4g
bU5hdGl2ZUluZGV4LmdldExheWVySW5kZXgoKTsgfQorICAgICBHTGludCBnZXRMYXllckNvdW50
KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LmdldExheWVyQ291bnQoKTsgfQorICAgICBH
TGludCBjdWJlTWFwRmFjZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LmN1YmVN
YXBGYWNlSW5kZXgoKTsgfQorLQorICAgICBib29sIGlzTGF5ZXJlZCgpIGNvbnN0IHsgcmV0dXJu
IG1OYXRpdmVJbmRleC5pc0xheWVyZWQoKTsgfQorICAgICBib29sIGhhc0xheWVyKCkgY29uc3Qg
eyByZXR1cm4gbU5hdGl2ZUluZGV4Lmhhc0xheWVyKCk7IH0KKyAgICAgYm9vbCBoYXMzRExheWVy
KCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LmhhczNETGF5ZXIoKTsgfQorICAgICBib29s
IHVzZXNUZXgzRCgpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVJbmRleC51c2VzVGV4M0QoKTsgfQor
LQorICAgICBib29sIHZhbGlkKCkgY29uc3QgeyByZXR1cm4gbU5hdGl2ZUluZGV4LnZhbGlkKCk7
IH0KKy0KKyAgICAgSW1hZ2VOYXRpdmVJbmRleEl0ZXJhdG9yIGdldExheWVySXRlcmF0b3IoR0xp
bnQgbGF5ZXJDb3VudCkgY29uc3Q7CistCisgICBwcml2YXRlOgorICAgICBnbDo6SW1hZ2VJbmRl
eCBtTmF0aXZlSW5kZXg7CisgfTsKKy0KKyBjbGFzcyBJbWFnZU5hdGl2ZUluZGV4SXRlcmF0b3Ig
ZmluYWwKKyB7CisgICBwdWJsaWM6CisgICAgIEltYWdlTmF0aXZlSW5kZXggbmV4dCgpIHsgcmV0
dXJuIEltYWdlTmF0aXZlSW5kZXgobU5hdGl2ZUluZGV4SXRlLm5leHQoKSwgMCk7IH0KKyAgICAg
SW1hZ2VOYXRpdmVJbmRleCBjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gSW1hZ2VOYXRpdmVJbmRl
eChtTmF0aXZlSW5kZXhJdGUuY3VycmVudCgpLCAwKTsgfQorICAgICBib29sIGhhc05leHQoKSBj
b25zdCB7IHJldHVybiBtTmF0aXZlSW5kZXhJdGUuaGFzTmV4dCgpOyB9CistCisgICBwcml2YXRl
OgorICAgICAvLyBUaGlzIGNsYXNzIGlzIG9ubHkgY29uc3RydWN0YWJsZSBmcm9tIEltYWdlTmF0
aXZlSW5kZXgKKyAgICAgZnJpZW5kIGNsYXNzIEltYWdlTmF0aXZlSW5kZXg7CistCisgICAgIGV4
cGxpY2l0IEltYWdlTmF0aXZlSW5kZXhJdGVyYXRvcihjb25zdCBnbDo6SW1hZ2VJbmRleEl0ZXJh
dG9yICZiYXNlWmVyb1NyYykKKyAgICAgICAgIDogbU5hdGl2ZUluZGV4SXRlKGJhc2VaZXJvU3Jj
KQorICAgICB7fQorLQorICAgICBnbDo6SW1hZ2VJbmRleEl0ZXJhdG9yIG1OYXRpdmVJbmRleEl0
ZTsKKyB9OworLQorIHVzaW5nIENsZWFyQ29sb3JWYWx1ZUJ5dGVzID0gc3RkOjphcnJheTx1aW50
OF90LCA0ICogc2l6ZW9mKGZsb2F0KT47CistCisgY2xhc3MgQ2xlYXJDb2xvclZhbHVlCisgewor
ICAgcHVibGljOgorQEAgLTQzNywyMiArNDM1LDE1IEBAIGNsYXNzIENsZWFyQ29sb3JWYWx1ZQor
ICAgICBjb25zdGV4cHIgQ2xlYXJDb2xvclZhbHVlKGNvbnN0IENsZWFyQ29sb3JWYWx1ZSAmc3Jj
KQorICAgICAgICAgOiBtVHlwZShzcmMubVR5cGUpLCBtVmFsdWVCeXRlcyhzcmMubVZhbHVlQnl0
ZXMpCisgICAgIHt9CistCisgICAgIE1UTENsZWFyQ29sb3IgdG9NVExDbGVhckNvbG9yKCkgY29u
c3Q7CistCisgICAgIFBpeGVsVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0K
Ky0KKyAgICAgY29uc3QgQ2xlYXJDb2xvclZhbHVlQnl0ZXMgJmdldFZhbHVlQnl0ZXMoKSBjb25z
dCB7IHJldHVybiBtVmFsdWVCeXRlczsgfQorLQorICAgICBDbGVhckNvbG9yVmFsdWUgJm9wZXJh
dG9yPShjb25zdCBDbGVhckNvbG9yVmFsdWUgJnNyYyk7CistCisgICAgIHZvaWQgc2V0QXNGbG9h
dChmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKTsKKyAgICAgdm9pZCBzZXRBc0lu
dChpbnQzMl90IHIsIGludDMyX3QgZywgaW50MzJfdCBiLCBpbnQzMl90IGEpOworICAgICB2b2lk
IHNldEFzVUludCh1aW50MzJfdCByLCB1aW50MzJfdCBnLCB1aW50MzJfdCBiLCB1aW50MzJfdCBh
KTsKKy0KKyAgIHByaXZhdGU6CisgICAgIFBpeGVsVHlwZSBtVHlwZTsKKy0KKyAgICAgdW5pb24K
KyAgICAgeworICAgICAgICAgc3RydWN0CitAQCAtNDY3LDcgKzQ1OCw2IEBAIGNsYXNzIENsZWFy
Q29sb3JWYWx1ZQorICAgICAgICAgeworICAgICAgICAgICAgIHVpbnQzMl90IG1SZWRVLCBtR3Jl
ZW5VLCBtQmx1ZVUsIG1BbHBoYVU7CisgICAgICAgICB9OworLQorICAgICAgICAgQ2xlYXJDb2xv
clZhbHVlQnl0ZXMgbVZhbHVlQnl0ZXM7CisgICAgIH07CisgfTsKK0BAIC00ODMsNyArNDczLDcg
QEAgY2xhc3MgRXJyb3JIYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBsaW5lKSA9IDA7CisgCistICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9y
ICpfTnVsbGFibGUgZXJyb3IsCisrICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFcnJvcihOU0Vycm9y
ICplcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lKSA9IDA7CitAQCAt
NDkzLDcgKzQ4Myw3IEBAIGNsYXNzIENvbnRleHQgOiBwdWJsaWMgRXJyb3JIYW5kbGVyCisgewor
ICAgcHVibGljOgorICAgICBDb250ZXh0KERpc3BsYXlNdGwgKmRpc3BsYXlNdGwpOworLSAgICBf
TnVsbGFibGUgaWQ8TVRMRGV2aWNlPiBnZXRNZXRhbERldmljZSgpIGNvbnN0OworKyAgICBpZDxN
VExEZXZpY2U+IGdldE1ldGFsRGV2aWNlKCkgY29uc3Q7CisgICAgIG10bDo6Q29tbWFuZFF1ZXVl
ICZjbWRRdWV1ZSgpOworIAorICAgICBEaXNwbGF5TXRsICpnZXREaXNwbGF5KCkgY29uc3QgeyBy
ZXR1cm4gbURpc3BsYXk7IH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2NvbnN0YW50cy5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb25z
dGFudHMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmEyMGIyY2QKKy0t
LSAvZGV2L251bGwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3Rh
bnRzLmgKK0BAIC0wLDAgKzEsNzMgQEAKKysvLworKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisrLy8KKysvLyBtdGxfY29tbW9uLmg6
CisrLy8gICAgICBEZWNsYXJlcyBudW1lcmljYWwgY29uc3RhbnRzIHVzZWQgaW4gTWV0YWwuCisr
Ly8gICAgICBlcnJvciBoYW5kbGVyIGJhc2UgY2xhc3MuCisrLy8KKysKKysjaWZuZGVmIExJQkFO
R0xFX1JFTkRFUkVSX01FVEFMX01UTF9DT05TVEFOVFNfSAorKyNkZWZpbmUgTElCQU5HTEVfUkVO
REVSRVJfTUVUQUxfTVRMX0NPTlNUQU5UU19ICisrI2luY2x1ZGUgImxpYkFOR0xFL0NvbnN0YW50
cy5oIgorKyNpbmNsdWRlICJsaWJBTkdMRS9WZXJzaW9uLmgiCisrI2luY2x1ZGUgImxpYkFOR0xF
L2FuZ2xldHlwZXMuaCIKKysKKytuYW1lc3BhY2UgcngKKyt7CisrbmFtZXNwYWNlIG10bAorK3sK
KysKKysvLyBOT1RFKGhxbGUpOiBzdXBwb3J0IHZhcmlhYmxlIG1heCBudW1iZXIgb2YgdmVydGV4
IGF0dHJpYnV0ZXMKKytjb25zdGV4cHIgdWludDMyX3Qga01heFZlcnRleEF0dHJpYnMgPSBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTOworKy8vIE5PVEUoaHFsZSk6IHN1cHBvcnQgdmFyaWFibGUgbWF4
IG51bWJlciBvZiByZW5kZXIgdGFyZ2V0cworK2NvbnN0ZXhwciB1aW50MzJfdCBrTWF4UmVuZGVy
VGFyZ2V0cyA9IDQ7CisrCisrY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJVQk9zID0gMTI7
CisrY29uc3RleHByIHVpbnQzMl90IGtNYXhVQk9TaXplICAgID0gMTYzODQ7CisrCisrY29uc3Rl
eHByIHNpemVfdCBrRGVmYXVsdEF0dHJpYnV0ZVNpemUgPSA0ICogc2l6ZW9mKGZsb2F0KTsKKysK
KysvLyBNZXRhbCBsaW1pdHMKKytjb25zdGV4cHIgdWludDMyX3Qga01heFNoYWRlckJ1ZmZlcnMg
ICAgID0gMzE7CisrY29uc3RleHByIHVpbnQzMl90IGtNYXhTaGFkZXJTYW1wbGVycyAgICA9IDE2
OworK2NvbnN0ZXhwciBzaXplX3Qga0lubGluZUNvbnN0RGF0YU1heFNpemUgPSA0ICogMTAyNDsK
Kytjb25zdGV4cHIgc2l6ZV90IGtEZWZhdWx0VW5pZm9ybXNNYXhTaXplID0ga0lubGluZUNvbnN0
RGF0YU1heFNpemU7CisrY29uc3RleHByIHVpbnQzMl90IGtNYXhWaWV3cG9ydHMgICAgICAgICA9
IDE7CisrCisrY29uc3RleHByIHVpbnQzMl90IGtWZXJ0ZXhBdHRyaWJCdWZmZXJTdHJpZGVBbGln
bm1lbnQgPSA0OworKy8vIEFsaWdubWVudCByZXF1aXJlbWVudCBmb3Igb2Zmc2V0IHBhc3NlZCB0
byBzZXRWZXJ0ZXh8RnJhZ21lbnRCdWZmZXIKKysjaWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRf
T1NfTUFDQ0FUQUxZU1QKKytjb25zdGV4cHIgdWludDMyX3Qga1VuaWZvcm1CdWZmZXJTZXR0aW5n
T2Zmc2V0TWluQWxpZ25tZW50ID0gMjU2OworKyNlbHNlCisrY29uc3RleHByIHVpbnQzMl90IGtV
bmlmb3JtQnVmZmVyU2V0dGluZ09mZnNldE1pbkFsaWdubWVudCA9IDQ7CisrI2VuZGlmCisrY29u
c3RleHByIHVpbnQzMl90IGtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVudCAgICAgICA9IDQ7Cisr
Y29uc3RleHByIHVpbnQzMl90IGtUZXh0dXJlVG9CdWZmZXJCbGl0dGluZ0FsaWdubWVudCA9IDI1
NjsKKysKKysvLyBGb250IGVuZCBiaW5kaW5nIGxpbWl0cworK2NvbnN0ZXhwciB1aW50MzJfdCBr
TWF4R0xTYW1wbGVyQmluZGluZ3MgPSAyICoga01heFNoYWRlclNhbXBsZXJzOworK2NvbnN0ZXhw
ciB1aW50MzJfdCBrTWF4R0xVQk9CaW5kaW5ncyAgICAgPSAyICoga01heFNoYWRlclVCT3M7Cisr
CisrLy8gQmluZGluZyBpbmRleCBzdGFydCBmb3IgdmVydGV4IGRhdGEgYnVmZmVyczoKKytjb25z
dGV4cHIgdWludDMyX3Qga1Zib0JpbmRpbmdJbmRleFN0YXJ0ID0gMDsKKysKKysvLyBCaW5kaW5n
IGluZGV4IGZvciBkZWZhdWx0IGF0dHJpYnV0ZSBidWZmZXI6CisrY29uc3RleHByIHVpbnQzMl90
IGtEZWZhdWx0QXR0cmlic0JpbmRpbmdJbmRleCA9IGtWYm9CaW5kaW5nSW5kZXhTdGFydCArIGtN
YXhWZXJ0ZXhBdHRyaWJzOworKy8vIEJpbmRpbmcgaW5kZXggZm9yIGRyaXZlciB1bmlmb3JtczoK
Kytjb25zdGV4cHIgdWludDMyX3Qga0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4ID0ga0RlZmF1
bHRBdHRyaWJzQmluZGluZ0luZGV4ICsgMTsKKysvLyBCaW5kaW5nIGluZGV4IGZvciBkZWZhdWx0
IHVuaWZvcm1zOgorK2NvbnN0ZXhwciB1aW50MzJfdCBrRGVmYXVsdFVuaWZvcm1zQmluZGluZ0lu
ZGV4ID0ga0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4ICsgMzsKKysvLyBCaW5kaW5nIGluZGV4
IGZvciBUcmFuc2Zvcm0gRmVlZGJhY2sgQnVmZmVycyAoNCkKKytjb25zdGV4cHIgdWludDMyX3Qg
a1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ID0ga0RlZmF1bHRVbmlmb3Jtc0JpbmRpbmdJ
bmRleCArIDE7CisrLy8gQmluZGluZyBpbmRleCBmb3Igc2hhZG93IHNhbXBsZXJzJyBjb21wYXJl
IG1vZGVzCisrY29uc3RleHByIHVpbnQzMl90IGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmlu
ZGluZ0luZGV4ID0ga1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgNDsKKysvLyBCaW5k
aW5nIGluZGV4IGZvciBVQk8ncyBhcmd1bWVudCBidWZmZXIKKytjb25zdGV4cHIgdWludDMyX3Qg
a1VCT0FyZ3VtZW50QnVmZmVyQmluZGluZ0luZGV4ID0ga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9k
ZXNCaW5kaW5nSW5kZXggKyAxOworKworK2NvbnN0ZXhwciB1aW50MzJfdCBrU3RlbmNpbE1hc2tB
bGwgPSAweGZmOyAgLy8gT25seSA4IGJpdHMgc3RlbmNpbCBpcyBzdXBwb3J0ZWQKKysKKyt9ICAv
LyBuYW1lc3BhY2UgbXRsCisrfSAgLy8gbmFtZXNwYWNlIHJ4CisrI2VuZGlmCitkaWZmIC0tZ2l0
IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfbWFwLmpzb24gYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF9tYXAuanNvbgoraW5kZXggNGExMmE5
MC4uMmRhNzQyMSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
Zm9ybWF0X21hcC5qc29uCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2Zv
cm1hdF9tYXAuanNvbgorQEAgLTc0LDExICs3NCwxMSBAQAorICAgICAgICAgICAgICJEMzJfRkxP
QVQiOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDMyRmxvYXQiLAorICAgICAgICAgICAgICJTOF9VSU5U
IjogIk1UTFBpeGVsRm9ybWF0U3RlbmNpbDgiLAorICAgICAgICAgICAgICJEMzJfRkxPQVRfUzhY
MjRfVUlOVCI6ICJNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVuY2lsOCIsCistICAgICAg
ICAgICAgIkIxMEcxMFIxMEEyX1VOT1JNIjogIk1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtIiwK
KyAgICAgICAgICAgICAiUjEwRzEwQjEwQTJfVUlOVCI6ICJNVExQaXhlbEZvcm1hdFJHQjEwQTJV
aW50IiwKKyAgICAgICAgICAgICAiUjEwRzEwQjEwQTJfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXRS
R0IxMEEyVW5vcm0iLAorICAgICAgICAgICAgICJSMTFHMTFCMTBfRkxPQVQiOiAiTVRMUGl4ZWxG
b3JtYXRSRzExQjEwRmxvYXQiLAorLSAgICAgICAgICAgICJSOUc5QjlFNV9TSEFSRURFWFAiOiAi
TVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCIKKysgICAgICAgICAgICAiUjlHOUI5RTVfU0hBUkVE
RVhQIjogIk1UTFBpeGVsRm9ybWF0UkdCOUU1RmxvYXQiLAorKyAgICAgICAgICAgICJEMTZfVU5P
Uk0iOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm0iCisgICAgICAgICB9LAorICAgICAgICAg
Im1hcF9pb3MiOiB7CisgICAgICAgICAgICAgIlI1RzZCNV9VTk9STSI6ICJNVExQaXhlbEZvcm1h
dEI1RzZSNVVub3JtIiwKK0BAIC05Miw2ICs5Miw3IEBACisgICAgICAgICAgICAgIlBWUlRDMV9S
R0JfNEJQUF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRCUFBf
c1JHQiIsCisgICAgICAgICAgICAgIlBWUlRDMV9SR0JBXzJCUFBfVU5PUk1fU1JHQl9CTE9DSyI6
ICJNVExQaXhlbEZvcm1hdFBWUlRDX1JHQkFfMkJQUF9zUkdCIiwKKyAgICAgICAgICAgICAiUFZS
VEMxX1JHQkFfNEJQUF9VTk9STV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0UFZSVENfUkdC
QV80QlBQX3NSR0IiLAorKyAgICAgICAgICAgICJFVEMxX1I4RzhCOF9VTk9STV9CTE9DSyI6ICJN
VExQaXhlbEZvcm1hdEVUQzJfUkdCOCIsCisgICAgICAgICAgICAgIkVUQzJfUjhHOEI4X1VOT1JN
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4IiwKKyAgICAgICAgICAgICAiRVRDMl9S
OEc4QjhfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVUQzJfUkdCOF9zUkdCIiwKKyAgICAg
ICAgICAgICAiRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVUQzJf
UkdCOEExIiwKK0BAIC0xMDAsMzkgKzEwMSwzOCBAQAorICAgICAgICAgICAgICJFVEMyX1I4RzhC
OEE4X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUkdCQThfc1JHQiIsCisgICAgICAg
ICAgICAgIkVBQ19SMTFfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRFQUNfUjExVW5vcm0i
LAorICAgICAgICAgICAgICJFQUNfUjExX1NOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RUFD
X1IxMVNub3JtIiwKKy0gICAgICAgICAgICAiRUFDX1IxMUcxMV9VTk9STV9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEVBQ19SRzExVW5vcm0iLAorKyAgICAgICAgICAgICJFQUNfUjExRzExX1VOT1JN
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0RUFDX1IxMVVub3JtIiwKKyAgICAgICAgICAgICAiRUFD
X1IxMUcxMV9TTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEVBQ19SRzExU25vcm0iLAorLSAg
ICAgICAgICAgICJBU1RDXzR4NF9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNHg0
X0xEUiIsCistICAgICAgICAgICAgIkFTVENfNHg0X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxGb3Jt
YXRBU1RDXzR4NF9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ181eDRfVU5PUk1fQkxPQ0siOiAi
TVRMUGl4ZWxGb3JtYXRBU1RDXzV4NF9MRFIiLAorLSAgICAgICAgICAgICJBU1RDXzV4NF9TUkdC
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfc1JHQiIsCistICAgICAgICAgICAgIkFT
VENfNXg1X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDVfTERSIiwKKy0gICAg
ICAgICAgICAiQVNUQ181eDVfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfNXg1X3NS
R0IiLAorLSAgICAgICAgICAgICJBU1RDXzZ4NV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1h
dEFTVENfNng1X0xEUiIsCistICAgICAgICAgICAgIkFTVENfNng1X1NSR0JfQkxPQ0siOiAiTVRM
UGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ182eDZfVU5PUk1f
QkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9MRFIiLAorLSAgICAgICAgICAgICJBU1RD
XzZ4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDZfc1JHQiIsCistICAgICAg
ICAgICAgIkFTVENfOHg1X1VOT1JNX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDVfTERS
IiwKKy0gICAgICAgICAgICAiQVNUQ184eDVfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFT
VENfOHg1X3NSR0IiLAorLSAgICAgICAgICAgICJBU1RDXzh4Nl9VTk9STV9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEFTVENfOHg2X0xEUiIsCistICAgICAgICAgICAgIkFTVENfOHg2X1NSR0JfQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ184
eDhfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9MRFIiLAorLSAgICAgICAg
ICAgICJBU1RDXzh4OF9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDhfc1JHQiIs
CistICAgICAgICAgICAgIkFTVENfMTB4NV9VTk9STV9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFT
VENfMTB4NV9MRFIiLAorLSAgICAgICAgICAgICJBU1RDXzEweDVfU1JHQl9CTE9DSyI6ICJNVExQ
aXhlbEZvcm1hdEFTVENfMTB4NV9zUkdCIiwKKy0gICAgICAgICAgICAiQVNUQ18xMHg2X1VOT1JN
X0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X0xEUiIsCistICAgICAgICAgICAgIkFT
VENfMTB4Nl9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg2X3NSR0IiLAorLSAg
ICAgICAgICAgICJBU1RDXzEweDhfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEw
eDhfTERSIiwKKy0gICAgICAgICAgICAiQVNUQ18xMHg4X1NSR0JfQkxPQ0siOiAiTVRMUGl4ZWxG
b3JtYXRBU1RDXzEweDhfc1JHQiIsCistICAgICAgICAgICAgIkFTVENfMTB4MTBfVU5PUk1fQkxP
Q0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX0xEUiIsCistICAgICAgICAgICAgIkFTVENf
MTB4MTBfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiIsCistICAg
ICAgICAgICAgIkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEy
eDEwX0xEUiIsCistICAgICAgICAgICAgIkFTVENfMTJ4MTBfU1JHQl9CTE9DSyI6ICJNVExQaXhl
bEZvcm1hdEFTVENfMTJ4MTBfc1JHQiIsCistICAgICAgICAgICAgIkFTVENfMTJ4MTJfVU5PUk1f
QkxPQ0siOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX0xEUiIsCistICAgICAgICAgICAgIkFT
VENfMTJ4MTJfU1JHQl9CTE9DSyI6ICJNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTJfc1JHQiIKKysg
ICAgICAgICAgICAiQVNUQ180eDRfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzR4
NF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ181eDRfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxG
b3JtYXRBU1RDXzV4NF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ181eDVfU1JHQl9CTE9DSyIg
OiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ182eDVf
U1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9zUkdCIiwKKysgICAgICAgICAg
ICAiQVNUQ182eDZfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzZ4Nl9zUkdCIiwK
KysgICAgICAgICAgICAiQVNUQ184eDVfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RD
Xzh4NV9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ184eDZfU1JHQl9CTE9DSyIgOiAiTVRMUGl4
ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ184eDhfU1JHQl9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ18x
MHg1X1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18xMHg1X3NSR0IiLAorKyAgICAg
ICAgICAgICJBU1RDXzEweDZfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDZf
c1JHQiIsCisrICAgICAgICAgICAgIkFTVENfMTB4OF9TUkdCX0JMT0NLIiA6ICJNVExQaXhlbEZv
cm1hdEFTVENfMTB4OF9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ18xMHgxMF9TUkdCX0JMT0NL
IiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4MTBfc1JHQiIsCisrICAgICAgICAgICAgIkFTVENf
MTJ4MTBfU1JHQl9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEwX3NSR0IiLAorKyAg
ICAgICAgICAgICJBU1RDXzEyeDEyX1NSR0JfQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18x
MngxMl9zUkdCIiwKKysgICAgICAgICAgICAiQVNUQ180eDRfVU5PUk1fQkxPQ0siIDogIk1UTFBp
eGVsRm9ybWF0QVNUQ180eDRfTERSIiwKKysgICAgICAgICAgICAiQVNUQ181eDRfVU5PUk1fQkxP
Q0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDRfTERSIiwKKysgICAgICAgICAgICAiQVNUQ181
eDVfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ181eDVfTERSIiwKKysgICAgICAg
ICAgICAiQVNUQ182eDVfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ182eDVfTERS
IiwKKysgICAgICAgICAgICAiQVNUQ182eDZfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0
QVNUQ182eDZfTERSIiwKKysgICAgICAgICAgICAiQVNUQ184eDVfVU5PUk1fQkxPQ0siIDogIk1U
TFBpeGVsRm9ybWF0QVNUQ184eDVfTERSIiwKKysgICAgICAgICAgICAiQVNUQ184eDZfVU5PUk1f
QkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDZfTERSIiwKKysgICAgICAgICAgICAiQVNU
Q184eDhfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ184eDhfTERSIiwKKysgICAg
ICAgICAgICAiQVNUQ18xMHg1X1VOT1JNX0JMT0NLIiA6ICJNVExQaXhlbEZvcm1hdEFTVENfMTB4
NV9MRFIiLAorKyAgICAgICAgICAgICJBU1RDXzEweDZfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVs
Rm9ybWF0QVNUQ18xMHg2X0xEUiIsCisrICAgICAgICAgICAgIkFTVENfMTB4OF9VTk9STV9CTE9D
SyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDhfTERSIiwKKysgICAgICAgICAgICAiQVNUQ18x
MHgxMF9VTk9STV9CTE9DSyIgOiAiTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX0xEUiIsCisrICAg
ICAgICAgICAgIkFTVENfMTJ4MTBfVU5PUk1fQkxPQ0siIDogIk1UTFBpeGVsRm9ybWF0QVNUQ18x
MngxMF9MRFIiLAorKyAgICAgICAgICAgICJBU1RDXzEyeDEyX1VOT1JNX0JMT0NLIiA6ICJNVExQ
aXhlbEZvcm1hdEFTVENfMTJ4MTJfTERSIgorICAgICAgICAgfSwKKyAgICAgICAgICJtYXBfbWFj
IjogeworLSAgICAgICAgICAgICJEMTZfVU5PUk0iOiAiTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5v
cm0iLAorICAgICAgICAgICAgICJEMjRfVU5PUk1fUzhfVUlOVCI6ICJNVExQaXhlbEZvcm1hdERl
cHRoMjRVbm9ybV9TdGVuY2lsOCIsCisgICAgICAgICAgICAgIkJDMV9SR0JBX1VOT1JNX0JMT0NL
IjogIk1UTFBpeGVsRm9ybWF0QkMxX1JHQkEiLAorICAgICAgICAgICAgICJCQzFfUkdCQV9VTk9S
TV9TUkdCX0JMT0NLIjogIk1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JHQiIsCitAQCAtMTc1LDkg
KzE3NSw3IEBACisgICAgICAgICAgICAgIkQzMl9VTk9STSI6ICJEMzJfRkxPQVQiCisgICAgICAg
ICB9LAorICAgICAgICAgIm92ZXJyaWRlX2lvcyI6IHsKKy0gICAgICAgICAgICAiRDI0X1VOT1JN
X1M4X1VJTlQiOiAiRDMyX0ZMT0FUX1M4WDI0X1VJTlQiLAorLSAgICAgICAgICAgICJEMTZfVU5P
Uk0iOiAiRDMyX0ZMT0FUIiwKKy0gICAgICAgICAgICAiRVRDMV9SOEc4QjhfVU5PUk1fQkxPQ0si
OiAiRVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0siCisrICAgICAgICAgICAgIkQyNF9VTk9STV9TOF9V
SU5UIjogIkQzMl9GTE9BVF9TOFgyNF9VSU5UIgorICAgICAgICAgfSwKKyAgICAgICAgICJvdmVy
cmlkZV9tYWMiOiB7CisgICAgICAgICAgICAgIlI1RzZCNV9VTk9STSI6ICJSOEc4QjhBOF9VTk9S
TSIsCitAQCAtMjAzLDcgKzIwMSw4IEBACisgICAgICAgICAgICAgIkVBQ19SMTFHMTFfVU5PUk1f
QkxPQ0siOiAiUjE2RzE2X1VOT1JNIiwKKyAgICAgICAgICAgICAiRUFDX1IxMUcxMV9TTk9STV9C
TE9DSyI6ICJSMTZHMTZfU05PUk0iCisgICAgICAgICB9LAorLSAgICAgICAgImQyNHM4X2ZhbGxi
YWNrc19tYWMiOiB7CisrICAgICAgICAiZmFsbGJhY2tzX21hYyI6IHsKKysgICAgICAgICAgICAi
QjhHOFI4QThfVU5PUk0iOiAiUjhHOEI4QThfVU5PUk0iLAorICAgICAgICAgICAgICJEMjRfVU5P
Uk1fUzhfVUlOVCI6ICJEMzJfRkxPQVRfUzhYMjRfVUlOVCIKKyAgICAgICAgIH0sCisgICAgICAg
ICAiY2FwcyI6IHsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X2Zvcm1hdF90YWJsZV9hdXRvZ2VuLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9mb3JtYXRfdGFibGVfYXV0b2dlbi5tbQoraW5kZXggYzIxYzU5My4uZDNlYTViMCAxMDA2NDQK
Ky0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3RhYmxlX2F1dG9n
ZW4ubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3RhYmxl
X2F1dG9nZW4ubW0KK0BAIC0yOCw3ICsyOCw2IEBACisgdm9pZCBGb3JtYXQ6OmluaXQoY29uc3Qg
RGlzcGxheU10bCAqZGlzcGxheSwgYW5nbGU6OkZvcm1hdElEIGludGVuZGVkRm9ybWF0SWRfKQor
IHsKKyAgICAgdGhpcy0+aW50ZW5kZWRGb3JtYXRJZCAgICA9IGludGVuZGVkRm9ybWF0SWRfOwor
LQorICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZGlzcGxheS0+Z2V0TWV0YWxEZXZp
Y2UoKTsKKyAKKyAgICAgLy8gQWN0dWFsIGNvbnZlcnNpb24KK0BAIC00MywxNSArNDIsMjYgQEAK
KyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFr
OworIAorLSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VOT1JNOgor
KyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorKyAgICAgICAgY2Fz
ZSBhbmdsZTo6Rm9ybWF0SUQ6OkI4RzhSOEE4X1VOT1JNOgorIAorLSAgICAgICAgICAgIHRoaXMt
Pm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm07CistICAgICAgICAg
ICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkIxMEcxMFIxMEEyX1VO
T1JNOworKyAgICAgICAgICAgIGlmIChtZXRhbERldmljZS5kZXB0aDI0U3RlbmNpbDhQaXhlbEZv
cm1hdFN1cHBvcnRlZCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHRoaXMtPm1l
dGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtOworKyAgICAgICAgICAgICAg
ICB0aGlzLT5hY3R1YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6QjhHOFI4QThfVU5PUk07
CisrICAgICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKysgICAg
ICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAg
ICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdFJHQkE4VW5vcm07Cisr
ICAgICAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpS
OEc4QjhBOF9VTk9STTsKKyAgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBu
dWxscHRyOworKyAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9
IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorKyNlbHNlICAvLyBUQVJHRVRfT1NfT1NY
IHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAorICAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6
OkI4RzhSOEE4X1VOT1JNOgorIAorICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAgID0g
TVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtOworQEAgLTYxLDYgKzcxLDcgQEAKKyAgICAgICAgICAg
ICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorKyNlbmRp
ZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgICAgIGNh
c2UgYW5nbGU6OkZvcm1hdElEOjpCOEc4UjhBOF9VTk9STV9TUkdCOgorIAorICAgICAgICAgICAg
IHRoaXMtPm1ldGFsRm9ybWF0ICAgID0gTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtX3NSR0I7CitA
QCAtNzAsNiArODEsMzYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgIGJyZWFrOworIAorKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19N
QUNDQVRBTFlTVAorKyAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkQxNl9VTk9STToKKysK
KysgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgx
NlVub3JtOworKyAgICAgICAgICAgIHRoaXMtPmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1h
dElEOjpEMTZfVU5PUk07CisrICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxs
cHRyOworKworKyAgICAgICAgICAgIHRoaXMtPnN3aXp6bGVkID0gZmFsc2U7CisrICAgICAgICAg
ICAgYnJlYWs7CisrCisrI2Vsc2UgIC8vIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NB
VEFMWVNUCisrICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOgorKworKyAg
ICAgICAgICAgIGlmIChbbWV0YWxEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6TVRMR1BVRmFtaWx5QXBw
bGUzXSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0
ICAgID0gTVRMUGl4ZWxGb3JtYXREZXB0aDE2VW5vcm07CisrICAgICAgICAgICAgICAgIHRoaXMt
PmFjdHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpEMTZfVU5PUk07CisrICAgICAgICAg
ICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKysgICAgICAgICAgICB9Cisr
ICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgdGhpcy0+
bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdDsKKysgICAgICAgICAg
ICAgICAgdGhpcy0+YWN0dWFsRm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkQzMl9GTE9BVDsK
KysgICAgICAgICAgICAgICAgdGhpcy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworKyAgICAg
ICAgICAgIH0KKysKKysgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworKyAgICAg
ICAgICAgIGJyZWFrOworKworKyNlbmRpZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1Nf
TUFDQ0FUQUxZU1QKKyAgICAgICAgIGNhc2UgYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ6Cisg
CisgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRo
MzJGbG9hdDsKK0BAIC04MTUsMTUgKzg1Niw2IEBACisgICAgICAgICAgICAgdGhpcy0+c3dpenps
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgIGNhc2UgYW5nbGU6
OkZvcm1hdElEOjpEMTZfVU5PUk06CistCistICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQg
ICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMTZVbm9ybTsKKy0gICAgICAgICAgICB0aGlzLT5hY3R1
YWxGb3JtYXRJZCA9IGFuZ2xlOjpGb3JtYXRJRDo6RDE2X1VOT1JNOworLSAgICAgICAgICAgIHRo
aXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKy0KKy0gICAgICAgICAgICB0aGlzLT5zd2l6
emxlZCA9IGZhbHNlOworLSAgICAgICAgICAgIGJyZWFrOworLQorICAgICAgICAgY2FzZSBhbmds
ZTo6Rm9ybWF0SUQ6OkQyNF9VTk9STV9TOF9VSU5UOgorIAorICAgICAgICAgICAgIGlmIChtZXRh
bERldmljZS5kZXB0aDI0U3RlbmNpbDhQaXhlbEZvcm1hdFN1cHBvcnRlZCAmJgorQEAgLTEyODEs
NyArMTMxMyw3IEBACisgCisgICAgICAgICBjYXNlIGFuZ2xlOjpGb3JtYXRJRDo6RUFDX1IxMUcx
MV9VTk9STV9CTE9DSzoKKyAKKy0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1U
TFBpeGVsRm9ybWF0RUFDX1JHMTFVbm9ybTsKKysgICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1h
dCAgICA9IE1UTFBpeGVsRm9ybWF0RUFDX1IxMVVub3JtOworICAgICAgICAgICAgIHRoaXMtPmFj
dHVhbEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpFQUNfUjExRzExX1VOT1JNX0JMT0NLOwor
ICAgICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKyAKK0BAIC0xMzA2
LDYgKzEzMzgsMTUgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworICAg
ICAgICAgICAgIGJyZWFrOworIAorKyAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzFf
UjhHOEI4X1VOT1JNX0JMT0NLOgorKworKyAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0ICAg
ID0gTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjg7CisrICAgICAgICAgICAgdGhpcy0+YWN0dWFsRm9y
bWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzFfUjhHOEI4X1VOT1JNX0JMT0NLOworKyAgICAg
ICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKysKKysgICAgICAgICAgICB0
aGlzLT5zd2l6emxlZCA9IGZhbHNlOworKyAgICAgICAgICAgIGJyZWFrOworKworICAgICAgICAg
Y2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSzoKKyAKKyAgICAg
ICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAgICA9IE1UTFBpeGVsRm9ybWF0RVRDMl9SR0I4QTFf
c1JHQjsKK0BAIC0xNDU5LDE1ICsxNTAwLDYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxl
ZCA9IGZhbHNlOworICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgY2FzZSBhbmdsZTo6
Rm9ybWF0SUQ6OkQxNl9VTk9STToKKy0KKy0gICAgICAgICAgICB0aGlzLT5tZXRhbEZvcm1hdCAg
ICA9IE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0OworLSAgICAgICAgICAgIHRoaXMtPmFjdHVh
bEZvcm1hdElkID0gYW5nbGU6OkZvcm1hdElEOjpEMzJfRkxPQVQ7CistICAgICAgICAgICAgdGhp
cy0+aW5pdEZ1bmN0aW9uICAgPSBudWxscHRyOworLQorLSAgICAgICAgICAgIHRoaXMtPnN3aXp6
bGVkID0gZmFsc2U7CistICAgICAgICAgICAgYnJlYWs7CistCisgICAgICAgICBjYXNlIGFuZ2xl
OjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJTlQ6CisgCisgICAgICAgICAgICAgdGhpcy0+bWV0
YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1hdERlcHRoMzJGbG9hdF9TdGVuY2lsODsKK0BAIC0x
NDc3LDE1ICsxNTA5LDYgQEAKKyAgICAgICAgICAgICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgY2FzZSBhbmdsZTo6Rm9ybWF0SUQ6OkVU
QzFfUjhHOEI4X1VOT1JNX0JMT0NLOgorLQorLSAgICAgICAgICAgIHRoaXMtPm1ldGFsRm9ybWF0
ICAgID0gTVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjg7CistICAgICAgICAgICAgdGhpcy0+YWN0dWFs
Rm9ybWF0SWQgPSBhbmdsZTo6Rm9ybWF0SUQ6OkVUQzJfUjhHOEI4X1VOT1JNX0JMT0NLOworLSAg
ICAgICAgICAgIHRoaXMtPmluaXRGdW5jdGlvbiAgID0gbnVsbHB0cjsKKy0KKy0gICAgICAgICAg
ICB0aGlzLT5zd2l6emxlZCA9IGZhbHNlOworLSAgICAgICAgICAgIGJyZWFrOworLQorICNlbmRp
ZiAgLy8gVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgdGhpcy0+bWV0YWxGb3JtYXQgICAgPSBNVExQaXhlbEZvcm1h
dEludmFsaWQ7CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9m
b3JtYXRfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0
aWxzLmgKK2luZGV4IGJiYjI3ZDQuLmYzOTY4MWQgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2Zvcm1hdF91dGlscy5oCitAQCAtNTUsNiArNTUsMTEgQEAgc3RydWN0
IEZvcm1hdENhcHMKKyAgICAgYm9vbCBibGVuZGFibGUgICAgICAgICAgICA9IGZhbHNlOworICAg
ICBib29sIG11bHRpc2FtcGxlICAgICAgICAgID0gZmFsc2U7ICAvLyBjYW4gYmUgdXNlZCBhcyBN
U0FBIHRhcmdldAorICAgICBib29sIHJlc29sdmUgICAgICAgICAgICAgID0gZmFsc2U7ICAvLyBD
YW4gYmUgdXNlZCBhcyByZXNvbHZlIHRhcmdldAorKyAgICBib29sIGNvbXByZXNzZWQgICAgICAg
ICAgID0gZmFsc2U7CisrICAgIE5TVUludGVnZXIgcGl4ZWxCeXRlcyAgICAgPSAwOworKyAgICBO
U1VJbnRlZ2VyIHBpeGVsQnl0ZXNNU0FBID0gMDsKKysgICAgTlNVSW50ZWdlciBjaGFubmVscyAg
ICAgICA9IDA7CisrICAgIHVpbnQ4X3QgYWxpZ25tZW50ICAgICAgICAgPSAwOworIH07CisgCisg
Ly8gUGl4ZWwgZm9ybWF0CitAQCAtMTQzLDYgKzE0OCw3IEBAIGNsYXNzIEZvcm1hdFRhYmxlIGZp
bmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICBwcml2YXRlOgorICAgICB2b2lkIGluaXROYXRp
dmVGb3JtYXRDYXBzQXV0b2dlbihjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5KTsKKyAgICAgdm9p
ZCBpbml0TmF0aXZlRm9ybWF0Q2Fwcyhjb25zdCBEaXNwbGF5TXRsICpkaXNwbGF5KTsKKysKKyAg
ICAgdm9pZCBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGZvcm1hdElkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCB3cml0YWJsZSwKK0BAIC0xNTAsNiArMTU2LDE3IEBAIGNsYXNzIEZvcm1hdFRhYmxlIGZp
bmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11
bHRpc2FtcGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFibGUpOworKworKyAgICB2b2lkIHNl
dEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisrICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGZpbHRlcmFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRh
YmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVuZGFibGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCByZXNvbHZlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvclJlbmRlcmFi
bGUsCisrICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGJ5dGVzUGVyQ2hhbm5lbCwK
KysgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgY2hhbm5lbHMpOworKworICAgICB2
b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHdyaXRhYmxlLAorQEAgLTE1OSw4ICsxNzYsMjQgQEAgY2xhc3MgRm9ybWF0VGFibGUgZmluYWwg
OiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JS
ZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRlcmFibGUp
OworIAorKyAgICB2b2lkIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0SWQsCisr
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZpbHRlcmFibGUsCisrICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHdyaXRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGVu
ZGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCByZXNvbHZlLAorKyAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjb2xvclJlbmRlcmFibGUsCisrICAgICAgICAgICAgICAgICAgICAgICBib29sIGRlcHRo
UmVuZGVyYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgIE5TVUludGVnZXIgYnl0ZXNQZXJD
aGFubmVsLAorKyAgICAgICAgICAgICAgICAgICAgICAgTlNVSW50ZWdlciBjaGFubmVscyk7Cisr
CisgICAgIHZvaWQgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0
SWQsIGJvb2wgZmlsdGVyYWJsZSk7CisgCisrICAgIHZvaWQgYWRqdXN0Rm9ybWF0Q2Fwc0ZvckRl
dmljZShpZDxNVExEZXZpY2U+IGRldmljZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1UTFBpeGVsRm9ybWF0IGlkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzdXBwb3J0c2lPUzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHN1cHBvcnRzaU9TNCk7CisrCisgICAgIHN0ZDo6YXJyYXk8Rm9ybWF0LCBhbmds
ZTo6a051bUFOR0xFRm9ybWF0cz4gbVBpeGVsRm9ybWF0VGFibGU7CisgICAgIHN0ZDo6dW5vcmRl
cmVkX21hcDxNVExQaXhlbEZvcm1hdCwgRm9ybWF0Q2Fwcz4gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fw
c1RhYmxlOworICAgICAvLyBPbmUgZm9yIHRpZ2h0bHkgcGFja2VkIGJ1ZmZlcnMsIG9uZSBmb3Ig
Z2VuZXJhbCBjYXNlcy4KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwv
bXRsX2Zvcm1hdF91dGlscy5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9y
bWF0X3V0aWxzLm1tCitpbmRleCBmYjFkNWNhLi40MTZhZDVjIDEwMDY0NAorLS0tIGEvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9mb3JtYXRfdXRpbHMubW0KKysrKyBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZm9ybWF0X3V0aWxzLm1tCitAQCAtNzcsOCArNzcsOCBA
QCB2b2lkIEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAoY29uc3QgRm9ybWF0VGFibGUgJmZvcm1hdFRh
YmxlLAorICAgICAgICAgICAgIHRleHR1cmVDYXBzLnJlbmRlcmJ1ZmZlciA9CisgICAgICAgICAg
ICAgICAgIG10bEZvcm1hdC5nZXRDYXBzKCkuY29sb3JSZW5kZXJhYmxlIHx8IG10bEZvcm1hdC5n
ZXRDYXBzKCkuZGVwdGhSZW5kZXJhYmxlOworICAgICAgICAgICAgIHRleHR1cmVDYXBzLnRleHR1
cmFibGUgICAgICAgID0gdHJ1ZTsKKy0gICAgICAgICAgICB0ZXh0dXJlQ2Fwcy5ibGVuZGFibGUg
ICAgICAgICA9IG10bEZvcm1hdC5nZXRDYXBzKCkuYmxlbmRhYmxlOworICAgICAgICAgICAgIHRl
eHR1cmVDYXBzLnRleHR1cmVBdHRhY2htZW50ID0gdGV4dHVyZUNhcHMucmVuZGVyYnVmZmVyOwor
KyAgICAgICAgICAgIHRleHR1cmVDYXBzLmJsZW5kYWJsZSAgICAgICAgID0gbXRsRm9ybWF0Lmdl
dENhcHMoKS5ibGVuZGFibGU7CisgICAgICAgICB9CisgCisgICAgICAgICBpZiAoZm9ybWF0Q2Fw
cy5tdWx0aXNhbXBsZSkKK0BAIC0xNDgsMTIgKzE0OCw2IEBAIHZvaWQgR2VuZXJhdGVUZXh0dXJl
Q2Fwc01hcChjb25zdCBGb3JtYXRUYWJsZSAmZm9ybWF0VGFibGUsCisgICAgICAgICAvLyBXZWJH
TCBhbGxvd3MgdW5zd2l6emxlZCBtYXBwaW5nIHdoZW4gc3dpenpsaW5nIGlzIG5vdCBhdmFpbGFi
bGUuIE5vIG5lZWQgdG8gY29udmVydC4KKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQor
LSAgICBpZiAoc3JjRm9ybWF0SWQgPT0gYW5nbGU6OkZvcm1hdElEOjpFVEMxX1I4RzhCOF9VTk9S
TV9CTE9DSyAmJgorLSAgICAgICAgYWN0dWFsRm9ybWF0SWQgPT0gYW5nbGU6OkZvcm1hdElEOjpF
VEMyX1I4RzhCOF9VTk9STV9CTE9DSykKKy0gICAgeworLSAgICAgICAgLy8gRVRDMSBSR0IgJiBF
VEMyIFJHQiBhcmUgdGVjaG5pY2FsbHkgdGhlIHNhbWUuCistICAgICAgICByZXR1cm4gZmFsc2U7
CistICAgIH0KKyAgICAgcmV0dXJuIHNyY0Zvcm1hdElkICE9IGFjdHVhbEZvcm1hdElkOworIH0K
KyAKK0BAIC0xOTIsOCArMTg2LDcgQEAgdm9pZCBHZW5lcmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0
IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJsZSwKKyAgICAgICAgIG1QaXhlbEZvcm1hdFRhYmxlW2ld
LmluaXQoZGlzcGxheSwgZm9ybWF0SWQpOworICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbaV0u
Y2FwcyA9ICZtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbbVBpeGVsRm9ybWF0VGFibGVbaV0u
bWV0YWxGb3JtYXRdOworIAorLSAgICAgICAgaWYgKCFtUGl4ZWxGb3JtYXRUYWJsZVtpXS5jYXBz
LT5kZXB0aFJlbmRlcmFibGUgJiYKKy0gICAgICAgICAgICBtUGl4ZWxGb3JtYXRUYWJsZVtpXS5h
Y3R1YWxGb3JtYXRJZCAhPSBtUGl4ZWxGb3JtYXRUYWJsZVtpXS5pbnRlbmRlZEZvcm1hdElkKQor
KyAgICAgICAgaWYgKG1QaXhlbEZvcm1hdFRhYmxlW2ldLmFjdHVhbEZvcm1hdElkICE9IG1QaXhl
bEZvcm1hdFRhYmxlW2ldLmludGVuZGVkRm9ybWF0SWQpCisgICAgICAgICB7CisgICAgICAgICAg
ICAgbVBpeGVsRm9ybWF0VGFibGVbaV0udGV4dHVyZUxvYWRGdW5jdGlvbnMgPSBhbmdsZTo6R2V0
TG9hZEZ1bmN0aW9uc01hcCgKKyAgICAgICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbaV0u
aW50ZW5kZWRBbmdsZUZvcm1hdCgpLmdsSW50ZXJuYWxGb3JtYXQsCitAQCAtMjA0LDYgKzE5Nywx
OSBAQCB2b2lkIEdlbmVyYXRlVGV4dHVyZUNhcHNNYXAoY29uc3QgRm9ybWF0VGFibGUgJmZvcm1h
dFRhYmxlLAorICAgICAgICAgbVZlcnRleEZvcm1hdFRhYmxlc1sxXVtpXS5pbml0KGZvcm1hdElk
LCB0cnVlKTsKKyAgICAgfQorIAorKyAgICAvLyBOT1RFKGhxbGUpOiBXb3JrLWFyb3VuZCBBTUQn
cyBpc3N1ZSB0aGF0IEQyNFM4IGZvcm1hdCBzb21ldGltZXMgcmV0dXJucyB6ZXJvIGR1cmluZyBz
YW1wbGluZzoKKysgICAgaWYgKGRpc3BsYXktPmdldFJlbmRlcmVyRGVzY3JpcHRpb24oKS5maW5k
KCJBTUQiKSAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKysgICAgeworKyAgICAgICAgLy8gRmFsbGJh
Y2sgdG8gRDMyX0ZMT0FUX1M4WDI0X1VJTlQuCisrICAgICAgICBGb3JtYXQgJmZvcm1hdCA9Cisr
ICAgICAgICAgICAgbVBpeGVsRm9ybWF0VGFibGVbc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFuZ2xl
OjpGb3JtYXRJRDo6RDI0X1VOT1JNX1M4X1VJTlQpXTsKKysgICAgICAgIGZvcm1hdC5hY3R1YWxG
b3JtYXRJZCAgICAgICA9IGFuZ2xlOjpGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0X1VJTlQ7Cisr
ICAgICAgICBmb3JtYXQubWV0YWxGb3JtYXQgICAgICAgICAgPSBNVExQaXhlbEZvcm1hdERlcHRo
MzJGbG9hdF9TdGVuY2lsODsKKysgICAgICAgIGZvcm1hdC5pbml0RnVuY3Rpb24gICAgICAgICA9
IG51bGxwdHI7CisrICAgICAgICBmb3JtYXQudGV4dHVyZUxvYWRGdW5jdGlvbnMgPSBudWxscHRy
OworKyAgICAgICAgZm9ybWF0LmNhcHMgPSAmbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW01U
TFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0ZW5jaWw4XTsKKysgICAgfQorKworICAgICByZXR1
cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorIAorQEAgLTIzOSwxMCArMjQ1LDIzIEBA
IHZvaWQgR2VuZXJhdGVUZXh0dXJlQ2Fwc01hcChjb25zdCBGb3JtYXRUYWJsZSAmZm9ybWF0VGFi
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVyYWJs
ZSkKKyB7CisgICAgIHNldEZvcm1hdENhcHMoZm9ybWF0SWQsIGZpbHRlcmFibGUsIHdyaXRhYmxl
LCBibGVuZGFibGUsIG11bHRpc2FtcGxlLCByZXNvbHZlLCBjb2xvclJlbmRlcmFibGUsCistICAg
ICAgICAgICAgICAgICAgZmFsc2UpOworKyAgICAgICAgICAgICAgICAgIGZhbHNlLCAwKTsKKyt9
Cisrdm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdCBmb3JtYXRJ
ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVyYWJsZSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsZW5kYWJsZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGUsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHJlc29sdmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGNvbG9yUmVuZGVyYWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TVUludGVnZXIgcGl4ZWxCeXRlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TVUludGVnZXIgY2hhbm5lbHMpCisreworKyAgICBzZXRGb3JtYXRDYXBzKGZvcm1hdElkLCBm
aWx0ZXJhYmxlLCB3cml0YWJsZSwgYmxlbmRhYmxlLCBtdWx0aXNhbXBsZSwgcmVzb2x2ZSwgY29s
b3JSZW5kZXJhYmxlLAorKyAgICAgICAgICAgICAgICAgIGZhbHNlLCBwaXhlbEJ5dGVzLCBjaGFu
bmVscyk7CisgfQorIAorLXZvaWQgRm9ybWF0VGFibGU6OnNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXQgaWQsCisrdm9pZCBGb3JtYXRUYWJsZTo6c2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1h
dCBmb3JtYXRJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmlsdGVy
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsZW5kYWJsZSwKK0BAIC0yNTAs
NiArMjY5LDIwIEBAIHZvaWQgR2VuZXJhdGVUZXh0dXJlQ2Fwc01hcChjb25zdCBGb3JtYXRUYWJs
ZSAmZm9ybWF0VGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJl
c29sdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yUmVuZGVy
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVwdGhSZW5kZXJh
YmxlKQorK3sKKysgICAgc2V0Rm9ybWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgd3JpdGFi
bGUsIGJsZW5kYWJsZSwgbXVsdGlzYW1wbGUsIHJlc29sdmUsIGNvbG9yUmVuZGVyYWJsZSwKKysg
ICAgICAgICAgICAgICAgICBkZXB0aFJlbmRlcmFibGUsIDAsIDApOworK30KKyt2b2lkIEZvcm1h
dFRhYmxlOjpzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0IGlkLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJhYmxlLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCB3cml0YWJsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYmxlbmRhYmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBtdWx0aXNhbXBsZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVz
b2x2ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JSZW5kZXJh
YmxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZXB0aFJlbmRlcmFi
bGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0
ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGNoYW5uZWxz
KQorIHsKKyAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5maWx0ZXJhYmxlICAg
ICAgPSBmaWx0ZXJhYmxlOworICAgICBtTmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLndy
aXRhYmxlICAgICAgICA9IHdyaXRhYmxlOworQEAgLTI1OCw2ICsyOTEsMTEgQEAgdm9pZCBHZW5l
cmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJsZSwKKyAgICAg
bU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5ibGVuZGFibGUgICAgICAgPSBibGVuZGFi
bGU7CisgICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ubXVsdGlzYW1wbGUgICAg
ID0gbXVsdGlzYW1wbGU7CisgICAgIG1OYXRpdmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0ucmVz
b2x2ZSAgICAgICAgID0gcmVzb2x2ZTsKKysgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxl
W2lkXS5waXhlbEJ5dGVzICAgICAgPSBwaXhlbEJ5dGVzOworKyAgICBtTmF0aXZlUGl4ZWxGb3Jt
YXRDYXBzVGFibGVbaWRdLnBpeGVsQnl0ZXNNU0FBICA9IHBpeGVsQnl0ZXM7CisrICAgIG1OYXRp
dmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uY2hhbm5lbHMgICAgICAgID0gY2hhbm5lbHM7Cisr
ICAgIGlmIChjaGFubmVscyAhPSAwKQorKyAgICAgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1Rh
YmxlW2lkXS5hbGlnbm1lbnQgPSBNQVgocGl4ZWxCeXRlcyAvIGNoYW5uZWxzLCAxVSk7CisgfQor
IAorIHZvaWQgRm9ybWF0VGFibGU6OnNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0IGZvcm1hdElkLCBib29sIGZpbHRlcmFibGUpCitAQCAtMjY1LDkgKzMwMywyNzQgQEAgdm9p
ZCBHZW5lcmF0ZVRleHR1cmVDYXBzTWFwKGNvbnN0IEZvcm1hdFRhYmxlICZmb3JtYXRUYWJsZSwK
KyAgICAgc2V0Rm9ybWF0Q2Fwcyhmb3JtYXRJZCwgZmlsdGVyYWJsZSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgfQorIAorK3ZvaWQgRm9ybWF0VGFibGU6OmFk
anVzdEZvcm1hdENhcHNGb3JEZXZpY2UoaWQ8TVRMRGV2aWNlPiBkZXZpY2UsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExQaXhlbEZvcm1hdCBpZCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNp
T1MyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
dXBwb3J0c2lPUzQpCisreworKyNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VUX09TX01BQ0NB
VEFMWVNUKQorKworKyAgICBOU1VJbnRlZ2VyIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gbU5hdGl2
ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzOworKyAgICBOU1VJbnRlZ2VyIHBp
eGVsQnl0ZXNSZW5kZXJNU0FBID0gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhl
bEJ5dGVzTVNBQTsKKysgICAgTlNVSW50ZWdlciBhbGlnbm1lbnQgICAgICAgICAgICA9IG1OYXRp
dmVQaXhlbEZvcm1hdENhcHNUYWJsZVtpZF0uYWxpZ25tZW50OworKworKy8vIE92ZXJyaWRlIHRo
ZSBjdXJyZW50IHBpeGVsQnl0ZXNSZW5kZXIKKysjICAgIGRlZmluZSBTUEVDSUZJQyhfcGl4ZWxG
b3JtYXQsIF9waXhlbEJ5dGVzUmVuZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorKyAgICAgICAgY2FzZSBfcGl4ZWxGb3JtYXQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisrICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg
ICBwaXhlbEJ5dGVzUmVuZGVyTVNBQSA9IF9waXhlbEJ5dGVzUmVuZGVyOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGFsaWdubWVudCA9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgIHN1cHBvcnRzaU9TNCA/IF9waXhl
bEJ5dGVzUmVuZGVyIC8gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jaGFubmVscyA6
IDQ7IFwKKysgICAgICAgICAgICBicmVhaworKy8vIE92ZXJyaWRlIHRoZSBjdXJyZW50IHBpeGVs
IGJ5dGVzIHJlbmRlciwgYW5kIE1TQUEKKysjICAgIGRlZmluZSBTUEVDSUZJQ19NU0FBKF9waXhl
bEZvcm1hdCwgX3BpeGVsQnl0ZXNSZW5kZXIsIF9waXhlbEJ5dGVzUmVuZGVyTVNBQSkgICAgICAg
ICAgICAgICAgXAorKyAgICAgICAgY2FzZSBfcGl4ZWxGb3JtYXQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr
ICAgICAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBfcGl4ZWxCeXRlc1JlbmRlcjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBw
aXhlbEJ5dGVzUmVuZGVyTVNBQSA9IF9waXhlbEJ5dGVzUmVuZGVyTVNBQTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgIGFsaWdubWVudCA9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgIHN1cHBvcnRzaU9TNCA/IF9waXhlbEJ5
dGVzUmVuZGVyIC8gbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5jaGFubmVscyA6IDQ7
IFwKKysgICAgICAgICAgICBicmVhaworKy8vIE92ZXJyaWRlIHRoZSBjdXJyZW50IHBpeGVsQnl0
ZXNSZW5kZXIsIGFuZCBhbGlnbm1lbnQKKysjICAgIGRlZmluZSBTUEVDSUZJQ19BTElHTihfcGl4
ZWxGb3JtYXQsIF9waXhlbEJ5dGVzUmVuZGVyLCBfYWxpZ25tZW50KSBcCisrICAgICAgICBjYXNl
IF9waXhlbEZvcm1hdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorKyAgICAgICAgICAgIHBpeGVsQnl0ZXNSZW5kZXIgICAgID0gX3BpeGVsQnl0ZXNSZW5k
ZXI7ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICBwaXhlbEJ5dGVzUmVuZGVyTVNB
QSA9IF9waXhlbEJ5dGVzUmVuZGVyOyAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAg
YWxpZ25tZW50ICAgICAgICAgICAgPSBfYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorKyAgICAgICAgICAgIGJyZWFrCisrCisrICAgIGlmICghbU5hdGl2ZVBpeGVsRm9ybWF0
Q2Fwc1RhYmxlW2lkXS5jb21wcmVzc2VkKQorKyAgICB7CisrICAgICAgICAvLyBPbiBBcHBsZUdQ
VUZhbWlseTQrLCB0aGVyZSBpcyBubyA0Ynl0ZSBtaW5pbXVtIHJlcXVpcmVtZW50IGZvciByZW5k
ZXIgdGFyZ2V0cworKyAgICAgICAgdWludDMyX3QgbWluU2l6ZSAgICAgPSBzdXBwb3J0c2lPUzQg
PyAxVSA6IDRVOworKyAgICAgICAgcGl4ZWxCeXRlc1JlbmRlciAgICAgPSBNQVgobU5hdGl2ZVBp
eGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5waXhlbEJ5dGVzLCBtaW5TaXplKTsKKysgICAgICAgIHBp
eGVsQnl0ZXNSZW5kZXJNU0FBID0gcGl4ZWxCeXRlc1JlbmRlcjsKKysgICAgICAgIGFsaWdubWVu
dCA9CisrICAgICAgICAgICAgc3VwcG9ydHNpT1M0ID8gTUFYKHBpeGVsQnl0ZXNSZW5kZXIgLyBt
TmF0aXZlUGl4ZWxGb3JtYXRDYXBzVGFibGVbaWRdLmNoYW5uZWxzLCAxVSkgOiA0OworKyAgICB9
CisrCisrICAgIC8vIFRoaXMgbGlzdCBvZiB0YWJsZXMgc3RhcnRzIGZyb20gYSBnZW5lcmFsIG11
bHRpLXBsYXRmb3JtIHRhYmxlLAorKyAgICAvLyB0byBzcGVjaWZpYyBwbGF0Zm9ybXMgKGkuZS4g
aW9zMiwgaW9zNCkgaW5oZXJpdGluZyBmcm9tIHRoZSBwcmV2aW91cyB0YWJsZXMKKysKKysgICAg
Ly8gU3RhcnQgb2ZmIHdpdGggdGhlIGdlbmVyYWwgY2FzZQorKyAgICBzd2l0Y2ggKChOU1VJbnRl
Z2VyKWlkKQorKyAgICB7CisrICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEI1RzZSNVVu
b3JtLCA0VSk7CisrICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEExQkdSNVVub3JtLCA0
VSk7CisrICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEFCR1I0VW5vcm0sIDRVKTsKKysg
ICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdSNUExVW5vcm0sIDRVKTsKKysKKysgICAg
ICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwgNFUpOworKyAgICAgICAgU1BF
Q0lGSUMoTVRMUGl4ZWxGb3JtYXRCR1JBOFVub3JtLCA0VSk7CisrCisrICAgICAgICBTUEVDSUZJ
Q19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybV9zUkdCLCA0VSwgOFUpOworKyAgICAgICAg
U1BFQ0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm1fc1JHQiwgNFUsIDhVKTsKKysg
ICAgICAgIFNQRUNJRklDX01TQUEoTVRMUGl4ZWxGb3JtYXRSR0JBOFNub3JtLCA0VSwgOFUpOwor
KyAgICAgICAgU1BFQ0lGSUNfTVNBQShNVExQaXhlbEZvcm1hdFJHQjEwQTJVaW50LCA0VSwgOFUp
OworKworKyAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVW5vcm0sIDhVKTsK
KysgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdSMTBBMlVub3JtLCA4VSk7CisrCisr
ICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJHMTFCMTBGbG9hdCwgOFUpOworKworKyAg
ICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCwgOFUpOworKworKyAgICAg
ICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRTdGVuY2lsOCwgMVUpOworKyAgICB9CisrCisrICAg
IC8vIE92ZXJyaWRlIGJhc2VkIGlvczIKKysgICAgaWYgKHN1cHBvcnRzaU9TMikKKysgICAgewor
KyAgICAgICAgc3dpdGNoICgoTlNVSW50ZWdlcilpZCkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEI1RzZSNVVub3JtLCA4VSk7CisrICAgICAgICAgICAg
U1BFQ0lGSUMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgOFUpOworKyAgICAgICAgICAgIFNQ
RUNJRklDKE1UTFBpeGVsRm9ybWF0QUJHUjRVbm9ybSwgOFUpOworKyAgICAgICAgICAgIFNQRUNJ
RklDKE1UTFBpeGVsRm9ybWF0QkdSNUExVW5vcm0sIDhVKTsKKysgICAgICAgICAgICBTUEVDSUZJ
Q19NU0FBKE1UTFBpeGVsRm9ybWF0UkdCQThVbm9ybSwgNFUsIDhVKTsKKysgICAgICAgICAgICBT
UEVDSUZJQ19NU0FBKE1UTFBpeGVsRm9ybWF0QkdSQThVbm9ybSwgNFUsIDhVKTsKKysgICAgICAg
IH0KKysgICAgfQorKworKyAgICAvLyBPdmVycmlkZSBiYXNlZCBvbiBpb3M0CisrICAgIGlmIChz
dXBwb3J0c2lPUzQpCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAoKE5TVUludGVnZXIpaWQpCisr
ICAgICAgICB7CisrICAgICAgICAgICAgU1BFQ0lGSUNfQUxJR04oTVRMUGl4ZWxGb3JtYXRCNUc2
UjVVbm9ybSwgNlUsIDJVKTsKKysgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJH
QkE4VW5vcm0sIDRVKTsKKysgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdEJHUkE4
VW5vcm0sIDRVKTsKKysKKysgICAgICAgICAgICBTUEVDSUZJQyhNVExQaXhlbEZvcm1hdFJHQkE4
VW5vcm1fc1JHQiwgNFUpOworKyAgICAgICAgICAgIFNQRUNJRklDKE1UTFBpeGVsRm9ybWF0QkdS
QThVbm9ybV9zUkdCLCA0VSk7CisrCisrICAgICAgICAgICAgU1BFQ0lGSUMoTVRMUGl4ZWxGb3Jt
YXRSR0JBOFNub3JtLCA0VSk7CisrCisrICAgICAgICAgICAgU1BFQ0lGSUNfQUxJR04oTVRMUGl4
ZWxGb3JtYXRSR0IxMEEyVW5vcm0sIDRVLCA0VSk7CisrICAgICAgICAgICAgU1BFQ0lGSUNfQUxJ
R04oTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm0sIDRVLCA0VSk7CisrICAgICAgICAgICAgU1BF
Q0lGSUMoTVRMUGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgOFUpOworKworKyAgICAgICAgICAgIFNQ
RUNJRklDX0FMSUdOKE1UTFBpeGVsRm9ybWF0UkcxMUIxMEZsb2F0LCA0VSwgNFUpOworKworKyAg
ICAgICAgICAgIFNQRUNJRklDX0FMSUdOKE1UTFBpeGVsRm9ybWF0UkdCOUU1RmxvYXQsIDRVLCA0
VSk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxl
W2lkXS5waXhlbEJ5dGVzICAgICA9IHBpeGVsQnl0ZXNSZW5kZXI7CisrICAgIG1OYXRpdmVQaXhl
bEZvcm1hdENhcHNUYWJsZVtpZF0ucGl4ZWxCeXRlc01TQUEgPSBwaXhlbEJ5dGVzUmVuZGVyTVNB
QTsKKysgICAgbU5hdGl2ZVBpeGVsRm9ybWF0Q2Fwc1RhYmxlW2lkXS5hbGlnbm1lbnQgICAgICA9
IGFsaWdubWVudDsKKysKKysjICAgIHVuZGVmIFNQRUNJRklDCisrIyAgICB1bmRlZiBTUEVDSUZJ
Q19BTElHTgorKyMgICAgdW5kZWYgU1BFQ0lGSUNfTVNBQQorKyNlbmRpZgorKyAgICAvLyBtYWNP
UyBkb2VzIG5vdCBuZWVkIHRvIHBlcmZvcm0gYW55IGFkZGl0b2luYWwgYWRqdXN0bWVudC4gVGhl
c2UgdmFsdWVzIGFyZSBvbmx5IHVzZWQgdG8gY2hlY2sKKysgICAgLy8gdmFsaWQgTVJUIHNpemVz
IG9uIGlPUy4KKyt9CisrCisgdm9pZCBGb3JtYXRUYWJsZTo6aW5pdE5hdGl2ZUZvcm1hdENhcHMo
Y29uc3QgRGlzcGxheU10bCAqZGlzcGxheSkKKyB7CistICAgIGluaXROYXRpdmVGb3JtYXRDYXBz
QXV0b2dlbihkaXNwbGF5KTsKKysgICAgY29uc3QgYW5nbGU6OkZlYXR1cmVzTXRsICZmZWF0dXJl
c010bCA9IGRpc3BsYXktPmdldEZlYXR1cmVzKCk7CisrICAgIC8vIFNraXAgYXV0byByZXNvbHZl
IGlmIGVpdGhlciBoYXNEZXB0aC9TdGVuY2lsQXV0b1Jlc29sdmUgb3IgYWxsb3dNdWx0aXNhbXBs
ZVN0b3JlQW5kUmVzb2x2ZQorKyAgICAvLyBmZWF0dXJlIGFyZSBkaXNhYmxlZC4KKysgICAgYm9v
bCBzdXBwb3J0RGVwdGhBdXRvUmVzb2x2ZSA9IGZlYXR1cmVzTXRsLmhhc0RlcHRoQXV0b1Jlc29s
dmUuZW5hYmxlZCAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVy
ZXNNdGwuYWxsb3dNdWx0aXNhbXBsZVN0b3JlQW5kUmVzb2x2ZS5lbmFibGVkOworKyAgICBib29s
IHN1cHBvcnRTdGVuY2lsQXV0b1Jlc29sdmUgPSBmZWF0dXJlc010bC5oYXNTdGVuY2lsQXV0b1Jl
c29sdmUuZW5hYmxlZCAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
ZWF0dXJlc010bC5hbGxvd011bHRpc2FtcGxlU3RvcmVBbmRSZXNvbHZlLmVuYWJsZWQ7CisrICAg
IGJvb2wgc3VwcG9ydERlcHRoU3RlbmNpbEF1dG9SZXNvbHZlID0gc3VwcG9ydERlcHRoQXV0b1Jl
c29sdmUgJiYgc3VwcG9ydFN0ZW5jaWxBdXRvUmVzb2x2ZTsKKysKKysgICAgLy8gU291cmNlOiBo
dHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbWV0YWwvTWV0YWwtRmVhdHVyZS1TZXQtVGFibGVz
LnBkZgorKyAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCisrCisrICAgIC8vICAgICAgICAgICAgfCAg
Zm9ybWF0SWQgICAgICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgIHwg
IGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfCBieXRlc1BlckNoYW5uZWwgfCBjaGFubmVsCisr
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBOFVub3JtLCAgICAgICAgdHJ1ZSwgICAg
ICAgICAgICBmYWxzZSwgICAgICAgZmFsc2UsICAgICAgICAgIGZhbHNlLCAgICAgICBmYWxzZSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAxVSwgMVUpOworKyAgICBzZXRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhVbm9ybSwgICAgICAgIHRydWUsICAgICAgICAgICAg
dHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgMVUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdFI4U25vcm0sICAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAg
ICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQ
VUZhbWlseSgyLCAxKSwgIHRydWUsICAxVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UjE2VW5vcm0sICAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRy
dWUsICAgICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5
KDEsIDEpLCAgICAgICAgdHJ1ZSwgIDJVLCAxVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSMTZTbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1
ZSwgICAgICAgICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHko
MSwgMSksICAgICAgICB0cnVlLCAgMlUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdFJHOFVub3JtLCAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVl
LCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ1ZSwgIDFVLCAxVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRS
RzhTbm9ybSwgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAg
ICAgIHRydWUsICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMiwgMSksICB0
cnVlLCAgMlUsIDJVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHMTZVbm9y
bSwgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1
ZSwgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRy
dWUsICA0VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNlNub3Jt
LCAgICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsIDEpLCAgICAgICAgdHJ1
ZSwgIDRVLCAyVSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBMTZVbm9y
bSwgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUs
ICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwgMSksICAgICAgICB0cnVl
LCAgOFUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkExNlNub3Jt
LCAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLCAxKSwgICAgICAgIHRydWUs
ICA4VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2RmxvYXQs
ICAgIHRydWUsICAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAg
ICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgOFUsIDRV
KTsKKysKKysgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAgICAgICAgICAgICAg
ICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
YmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRSR0JBOFVub3JtLCAgICAgICAgICB0cnVlLCAgICAgICAgICAgIHRydWUsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgIDRVLCA0VSk7CisrICAg
IHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSR0JBOFVub3JtX3NSR0IsICAgICB0cnVlLCAg
ICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWlseSgyKSwgICAgICB0cnVlLCAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZSwgICA0VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdC
QThTbm9ybSwgICAgICAgICAgdHJ1ZSwgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDIsIDEpLCAgICAgIHRydWUsICAgNFUsIDRVKTsKKysgICAgc2V0Rm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm0sICAgICAgICAgIHRydWUsICAgICAgICAg
ICAgdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRy
dWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUs
ICAgNFUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJHUkE4VW5vcm1f
c1JHQiwgICAgIHRydWUsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzSU9TR1BVRmFtaWx5KDIp
LCAgICAgIHRydWUsICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0cnVlLCAgIDRVLCA0VSk7CisrCisrICAgIC8vICAgICAgICAg
ICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAg
ICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSB8ICBtdWx0aXNhbXBsZSB8ICByZXNvbHZlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAorKyAgICBzZXRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjE2RmxvYXQsICAgICAgIHRydWUsICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0
cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgIDJVLCAxVSk7Cisr
ICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRSRzE2RmxvYXQsICAgICAgdHJ1ZSwgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgICAgNFUs
IDJVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFIzMkZsb2F0LCAgICBkaXNw
bGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgdHJ1ZSwgICAgICAgIHRydWUsICAg
ICAgICAgICB0cnVlLCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSks
ICAgICAgICB0cnVlLCAgICA0VSwgMVUpOworKworKyNpZiBUQVJHRVRfT1NfSU9TICYmICFUQVJH
RVRfT1NfTUFDQ0FUQUxZU1QKKysgICAgLy8gICAgICAgICAgICB8ICBmb3JtYXRJZCAgICAgICAg
ICAgICAgICAgIHwgZmlsdGVyYWJsZSAgICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11
bHRpc2FtcGxlIHwgIHJlc29sdmUgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisrICAgIHNldEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRCNUc2UjVVbm9ybSwgICAgICB0cnVlLCAgICAgICAgICAgIGZh
bHNlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAgICB0cnVlLCAgICAgIHRydWUs
ICAyVSwgM1UpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QUJHUjRVbm9ybSwg
ICAgICAgdHJ1ZSwgICAgICAgICAgICBmYWxzZSwgICAgICAgIHRydWUsICAgICAgICAgICB0cnVl
LCAgICAgICAgdHJ1ZSwgICAgICB0cnVlLCAgMlUsIDRVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhN
VExQaXhlbEZvcm1hdEJHUjVBMVVub3JtLCAgICAgIHRydWUsICAgICAgICAgICAgZmFsc2UsICAg
ICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDJVLCA0
VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBMUJHUjVVbm9ybSwgICAgICB0
cnVlLCAgICAgICAgICAgIGZhbHNlLCAgICAgICAgdHJ1ZSwgICAgICAgICAgIHRydWUsICAgICAg
ICB0cnVlLCAgICAgIHRydWUsICAyVSwgNFUpOworKyNlbmRpZgorKworKyAgICAvLyAgICAgICAg
ICAgIHwgIGZvcm1hdElkICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgIHwgIHdyaXRh
YmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgYmxlbmRhYmxlIHwgIG11bHRp
c2FtcGxlIHwgIHJlc29sdmUgICB8IGNvbG9yUmVuZGVyYWJsZSB8CisrICAgIHNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRCR1IxMEEyVW5vcm0sICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXkt
PnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1
ZSwgICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDRVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRSR0IxMEEyVW5vcm0sICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1
cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwg
ICAgICAgIHRydWUsICAgICAgdHJ1ZSwgIDRVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRM
UGl4ZWxGb3JtYXRSR0IxMEEyVWludCwgICAgICBmYWxzZSwgICAgICAgIGRpc3BsYXktPnN1cHBv
cnRzRWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICBmYWxzZSwgICAgICAgICAgdHJ1ZSwgICAg
ICAgIGZhbHNlLCAgICAgdHJ1ZSwgIDRVLCA0VSk7CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRSRzExQjEwRmxvYXQsICAgICB0cnVlLCAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDMsIDEpLCAgICAgICB0cnVlLCAgICAgICAgICAgdHJ1ZSwgICAgICAg
IHRydWUsICAgICAgdHJ1ZSwgIDRVLCAzVSk7CisrCisrICAgIC8vICAgICAgICAgICAgfCAgZm9y
bWF0SWQgICAgICAgICAgICAgICAgICB8IGZpbHRlcmFibGUgICAgfCAgd3JpdGFibGUgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgYmxlbmRhYmxlICAgICAgICAgICAgICAgICAgICAgfCAgbXVs
dGlzYW1wbGUgICAgICAgICAgICAgICAgICAgIHwgIHJlc29sdmUgICAgICAgICAgICAgICAgICAg
ICAgIHwgY29sb3JSZW5kZXJhYmxlICAgICAgICAgICAgICAgICB8CisrICAgIHNldEZvcm1hdENh
cHMoTVRMUGl4ZWxGb3JtYXRSR0I5RTVGbG9hdCwgICAgICAgdHJ1ZSwgICAgICAgICAgZGlzcGxh
eS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMyksICBkaXNwbGF5LT5zdXBwb3J0c0lPU0dQVUZhbWls
eSgxKSwgIGRpc3BsYXktPnN1cHBvcnRzSU9TR1BVRmFtaWx5KDEpLCBkaXNwbGF5LT5zdXBwb3J0
c0lPU0dQVUZhbWlseSgxKSwgZGlzcGxheS0+c3VwcG9ydHNJT1NHUFVGYW1pbHkoMSksIDRVLCAz
VSk7CisrCisrICAgIC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgICB8IGZp
bHRlcmFibGUgICAgfCAgd3JpdGFibGUgIHwgIGJsZW5kYWJsZSAgfCAgbXVsdGlzYW1wbGUgICAg
ICAgICAgICAgICAgICAgICAgICB8ICByZXNvbHZlICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAor
KyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhVaW50LCAgICAgICAgZmFsc2UsICAg
ICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAxVSwgMVUpOworKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UjhTaW50LCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVl
LCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgICAgICAgICB0cnVlLCAxVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UjE2VWludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFs
c2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAg
ICAgICB0cnVlLCAyVSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UjE2
U2ludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAg
IHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0
VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukc4VWludCwgICAgICAg
ZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAyVSwgMlUpOworKyAg
ICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0Ukc4U2ludCwgICAgICAgZmFsc2UsICAgICAg
ICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCAyVSwgMlUpOworKyAgICBzZXRGb3JtYXRD
YXBzKE1UTFBpeGVsRm9ybWF0UjMyVWludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAg
ICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEs
MSksICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1U
TFBpeGVsRm9ybWF0UjMyU2ludCwgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAg
ZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBm
YWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0UkcxNlVpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2Us
ICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAg
ICB0cnVlLCA0VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkcxNlNp
bnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRy
dWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwg
MlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThVaW50LCAgICAgZmFs
c2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBz
ZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQThTaW50LCAgICAgZmFsc2UsICAgICAgICAg
ICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA0VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0UkczMlVpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAg
ICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSks
ICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBp
eGVsRm9ybWF0UkczMlNpbnQsICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFs
c2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxz
ZSwgICAgICAgICB0cnVlLCA4VSwgMlUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UkdCQTE2VWludCwgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAg
ICAgICAgIHRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0
cnVlLCA4VSwgNFUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTE2U2lu
dCwgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIHRydWUs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICB0cnVlLCA4VSwgNFUp
OworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UkdCQTMyVWludCwgICAgZmFsc2Us
ICAgICAgICAgICB0cnVlLCAgICAgICAgZmFsc2UsICAgICAgICAgIGRpc3BsYXktPnN1cHBvcnRz
RWl0aGVyR1BVRmFtaWx5KDEsMSksICBmYWxzZSwgICAgICAgICB0cnVlLCAxNlUsIDRVKTsKKysg
ICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkEzMlNpbnQsICAgIGZhbHNlLCAgICAg
ICAgICAgdHJ1ZSwgICAgICAgIGZhbHNlLCAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhl
ckdQVUZhbWlseSgxLDEpLCAgZmFsc2UsICAgICAgICAgdHJ1ZSwgMTZVLCA0VSk7CisrCisrICAg
IC8vICAgICAgICAgICAgfCAgZm9ybWF0SWQgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxl
ICAgICAgICAgICAgICAgICAgICAgIHwgIHdyaXRhYmxlICB8ICBibGVuZGFibGUgICAgICAgICAg
ICAgICAgICAgICB8ICBtdWx0aXNhbXBsZSAgICAgICAgICAgICAgICAgICAgIHwgIHJlc29sdmUg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2xvclJlbmRlcmFibGUgfAorKyAgICBzZXRGb3Jt
YXRDYXBzKE1UTFBpeGVsRm9ybWF0UkczMkZsb2F0LCAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0Vp
dGhlckdQVUZhbWlseSgxLDEpLCAgIHRydWUsICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkaXNwbGF5LT5zdXBwb3J0c0VpdGhlckdQVUZhbWlseSgxLDEpLCAgZGlzcGxh
eS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICAgICAgICB0cnVlLCAgOFUsIDJVKTsK
KysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFJHQkEzMkZsb2F0LCAgICAgZGlzcGxh
eS0+c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgICB0cnVlLCAgICAgICAgZGlzcGxheS0+
c3VwcG9ydHNFaXRoZXJHUFVGYW1pbHkoMSwxKSwgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJHUFVG
YW1pbHkoMSwxKSwgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgICAg
ICAgdHJ1ZSwgIDE2VSwgNFUpOworKworKyAgICAvLyAgICAgICAgICAgIHwgIGZvcm1hdElkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJhYmxlICAgICAgICAgICAgICAgICAgICAg
ICB8ICB3cml0YWJsZSAgfCAgYmxlbmRhYmxlIHwgIG11bHRpc2FtcGxlIHwgIHJlc29sdmUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sb3JSZW5kZXJhYmxlIHwgZGVwdGhSZW5k
ZXJhYmxlICAgICAgICAgICAgICAgICAgICB8CisrICAgIHNldEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXREZXB0aDMyRmxvYXQsICAgICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNFaXRoZXJH
UFVGYW1pbHkoMSwxKSwgICBmYWxzZSwgICAgICAgIGZhbHNlLCAgICAgICAgICAgdHJ1ZSwgICAg
c3VwcG9ydERlcHRoQXV0b1Jlc29sdmUsICAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAg
ICAgICB0cnVlLCAgNFUsIDFVKTsKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdFN0
ZW5jaWw4LCAgICAgICAgICAgICAgICAgICBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZhbHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBmYWxzZSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAgIHRydWUsICAx
VSwgMVUpOworKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgzMkZsb2F0X1N0
ZW5jaWw4LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgZmFs
c2UsICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBvcnREZXB0aFN0ZW5jaWxB
dXRvUmVzb2x2ZSwgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgdHJ1ZSwgIDhVLCAyVSk7
CisrLy9Ub0RvOiBAYXZhaWxhYmxlIG9uIDEzLjAKKysgICAgc2V0Rm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdERlcHRoMTZVbm9ybSwgICAgICAgICAgICAgICB0cnVlLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgZmFsc2UsICAgICAgICAgICB0cnVlLCAgICBzdXBw
b3J0RGVwdGhBdXRvUmVzb2x2ZSwgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgICAgICAgICAg
IHRydWUsICAyVSwgMVUpOworKyNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRB
TFlTVAorKyAgICBzZXRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RGVwdGgyNFVub3JtX1N0ZW5j
aWw4LCAgICAgIGRpc3BsYXktPnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KDEsMSksICAgZmFsc2Us
ICAgICAgICBmYWxzZSwgICAgICAgICAgIHRydWUsICAgIHN1cHBvcnREZXB0aFN0ZW5jaWxBdXRv
UmVzb2x2ZSwgICAgICAgICAgICAgZmFsc2UsICAgICAgICAgICAgZGlzcGxheS0+c3VwcG9ydHNF
aXRoZXJHUFVGYW1pbHkoMSwxKSwgNFUsIDJVKTsKKysKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRCQzFfUkdCQSwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMxX1JHQkFfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENv
bXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QkMyX1JHQkEsIHRydWUpOworKyAgICBz
ZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDMl9SR0JBX3NSR0IsIHRydWUp
OworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEJDM19SR0JBLCB0
cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRCQzNfUkdC
QV9zUkdCLCB0cnVlKTsKKysjZWxzZQorKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQ
aXhlbEZvcm1hdFBWUlRDX1JHQl8yQlBQLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1h
dENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JfMkJQUF9zUkdCLCB0cnVlKTsKKysgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JfNEJQUCwgdHJ1ZSk7
CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCXzRC
UFBfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9y
bWF0UFZSVENfUkdCQV8yQlBQLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzJCUFBfc1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0UFZSVENfUkdCQV80QlBQLCB0cnVlKTsKKysg
ICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRQVlJUQ19SR0JBXzRCUFBf
c1JHQiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
RUFDX1IxMVVub3JtLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4
ZWxGb3JtYXRFQUNfUjExU25vcm0sIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2Fw
cyhNVExQaXhlbEZvcm1hdEVBQ19SRzExVW5vcm0sIHRydWUpOworKyAgICBzZXRDb21wcmVzc2Vk
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SRzExU25vcm0sIHRydWUpOworKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVBQ19SR0JBOCwgdHJ1ZSk7CisrICAg
IHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RUFDX1JHQkE4X3NSR0IsIHRy
dWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEVUQzJfUkdC
OCwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0RVRD
Ml9SR0I4X3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhl
bEZvcm1hdEVUQzJfUkdCOEExLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRFVEMyX1JHQjhBMV9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3Nl
ZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzR4NF9zUkdCLCB0cnVlKTsKKysgICAgc2V0
Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NF9zUkdCLCB0cnVlKTsK
KysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzV4NV9zUkdC
LCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RD
XzZ4NV9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxG
b3JtYXRBU1RDXzZ4Nl9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRBU1RDXzh4NV9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZv
cm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29t
cHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4OF9zUkdCLCB0cnVlKTsKKysg
ICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEweDVfc1JHQiwg
dHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18x
MHg2X3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZv
cm1hdEFTVENfMTB4OF9zUkdCLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRBU1RDXzEweDEwX3NSR0IsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2Vk
Rm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfc1JHQiwgdHJ1ZSk7CisrICAgIHNl
dENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMngxMl9zUkdCLCB0cnVl
KTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzR4NF9M
RFIsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFT
VENfNXg0X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0QVNUQ181eDVfTERSLCB0cnVlKTsKKysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMo
TVRMUGl4ZWxGb3JtYXRBU1RDXzZ4NV9MRFIsIHRydWUpOworKyAgICBzZXRDb21wcmVzc2VkRm9y
bWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfNng2X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXBy
ZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ184eDVfTERSLCB0cnVlKTsKKysgICAg
c2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzh4Nl9MRFIsIHRydWUp
OworKyAgICBzZXRDb21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfOHg4X0xE
UiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNU
Q18xMHg1X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBzKE1UTFBpeGVs
Rm9ybWF0QVNUQ18xMHg2X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRGb3JtYXRDYXBz
KE1UTFBpeGVsRm9ybWF0QVNUQ18xMHg4X0xEUiwgdHJ1ZSk7CisrICAgIHNldENvbXByZXNzZWRG
b3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0QVNUQ18xMHgxMF9MRFIsIHRydWUpOworKyAgICBzZXRD
b21wcmVzc2VkRm9ybWF0Q2FwcyhNVExQaXhlbEZvcm1hdEFTVENfMTJ4MTBfTERSLCB0cnVlKTsK
KysgICAgc2V0Q29tcHJlc3NlZEZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXRBU1RDXzEyeDEyX0xE
UiwgdHJ1ZSk7CisrI2VuZGlmCisrICAgIC8vIGNsYW5nLWZvcm1hdCBvbgorIH0KKyAKKyB9ICAv
LyBuYW1lc3BhY2UgbXRsCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX210bF91dGlscy5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9nbHNsYW5nX210bF91dGlscy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw
MC4uZGJjMTA5OQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL210bF9nbHNsYW5nX210bF91dGlscy5oCitAQCAtMCwwICsxLDU3IEBACisrLy8KKysvLyAg
bXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgKKysvLyAgQU5HTEUKKysvLworKy8vICBDcmVhdGVkIGJ5
IEt5bGUgUGlkZGluZ3RvbiBvbiAxMS8xMC8yMC4KKysvLworKworKyNpZm5kZWYgbXRsX2dsc2xh
bmdfbXRsX3V0aWxzX2gKKysjZGVmaW5lIG10bF9nbHNsYW5nX210bF91dGlsc19oCisrI2luY2x1
ZGUgImxpYkFOR0xFL0NvbnRleHQuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvUHJv
Z3JhbUltcGwuaCIKKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVy
X3V0aWxzLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9jb21tb24u
aCIKKysKKytuYW1lc3BhY2UgcngKKyt7CisrbmFtZXNwYWNlIG10bAorK3sKKytzdHJ1Y3QgU2Ft
cGxlckJpbmRpbmcKKyt7CisrICAgIHVpbnQzMl90IHRleHR1cmVCaW5kaW5nID0gMDsKKysgICAg
dWludDMyX3Qgc2FtcGxlckJpbmRpbmcgPSAwOworK307CisrCisrc3RydWN0IFRyYW5zbGF0ZWRT
aGFkZXJJbmZvCisreworKyAgICB2b2lkIHJlc2V0KCk7CisrICAgIC8vIFRyYW5zbGF0ZWQgTWV0
YWwgc291cmNlIGNvZGUKKysgICAgc3RkOjpzdHJpbmcgbWV0YWxTaGFkZXJTb3VyY2U7CisrICAg
IC8vIE1ldGFsIGxpYnJhcnkgY29tcGlsZWQgZnJvbSBzb3VyY2UgY29kZSBhYm92ZS4gVXNlZCBi
eSBQcm9ncmFtTXRsLgorKyAgICBBdXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gbWV0YWxMaWJy
YXJ5OworKyAgICBzdGQ6OmFycmF5PFNhbXBsZXJCaW5kaW5nLCBrTWF4R0xTYW1wbGVyQmluZGlu
Z3M+IGFjdHVhbFNhbXBsZXJCaW5kaW5nczsKKysgICAgc3RkOjphcnJheTx1aW50MzJfdCwga01h
eEdMVUJPQmluZGluZ3M+IGFjdHVhbFVCT0JpbmRpbmdzOworKyAgICBzdGQ6OmFycmF5PHVpbnQz
Ml90LCBrTWF4U2hhZGVyWEZCcz4gYWN0dWFsWEZCQmluZGluZ3M7CisrICAgIGJvb2wgaGFzVUJP
QXJndW1lbnRCdWZmZXI7CisrfTsKKyt2b2lkIE1TTEdldFNoYWRlclNvdXJjZShjb25zdCBnbDo6
UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlByb2dyYW1MaW5rZWRSZXNvdXJjZXMgJnJlc291cmNlcywKKysgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAqc2hhZGVyU291cmNlc091dCwK
KysgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9N
YXAgKnZhcmlhYmxlSW5mb01hcE91dCk7CisrCisrYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0TVNM
KGNvbnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMgJmdsQ2FwcywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJj
ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcEludGVyZmFj
ZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6U2hhZGVyTWFwPFRyYW5zbGF0ZWRTaGFkZXJJbmZvPiAqbXNsU2hhZGVySW5m
b091dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0
cmluZz4gKm1zbENvZGVPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4
ZmJCdWZmZXJDb3VudCk7CisrCisrLy8gR2V0IGVxdWl2YWxlbnQgc2hhZG93IGNvbXBhcmUgbW9k
ZSB0aGF0IGlzIHVzZWQgaW4gdHJhbnNsYXRlZCBtc2wgc2hhZGVyLgorK3VpbnQgTXNsR2V0U2hh
ZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdMZW51bSBmdW5jKTsKKysKKyt9ICAv
LyBuYW1lc3BhY2UgbXRsCisrfSAgLy8gbmFtZXNwYWNlIHJ4CisrCisrI2VuZGlmIC8qIG10bF9n
bHNsYW5nX210bF91dGlsc19oICovCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRl
eCAwMDAwMDAwLi4zNWY1YmVmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tCitAQCAtMCwwICsxLDI0MSBAQAor
Ky8vCisrLy8gIG1nbF9nbHNsYW5nX210bF91dGlscy5tCisrLy8gIEFOR0xFIChzdGF0aWMpCisr
Ly8KKysvLyAgQ3JlYXRlZCBieSBLeWxlIFBpZGRpbmd0b24gb24gMTEvMTAvMjAuCisrLy8KKysK
KysjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKysKKysjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIKKysjaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvU2hhZGVyTXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5oIgorKworK25hbWVzcGFjZSByeAorK3sK
KytuYW1lc3BhY2UgbXRsCisreworKworK3ZvaWQgVHJhbnNsYXRlZFNoYWRlckluZm86OnJlc2V0
KCkKKyt7CisrICAgIG1ldGFsU2hhZGVyU291cmNlLmNsZWFyKCk7CisrICAgIG1ldGFsTGlicmFy
eSAgICAgICAgID0gbmlsOworKyAgICBoYXNVQk9Bcmd1bWVudEJ1ZmZlciA9IGZhbHNlOworKyAg
ICBmb3IgKG10bDo6U2FtcGxlckJpbmRpbmcgJmJpbmRpbmcgOiBhY3R1YWxTYW1wbGVyQmluZGlu
Z3MpCisrICAgIHsKKysgICAgICAgIGJpbmRpbmcudGV4dHVyZUJpbmRpbmcgPSBtdGw6OmtNYXhT
aGFkZXJTYW1wbGVyczsKKysgICAgfQorKworKyAgICBmb3IgKHVpbnQzMl90ICZiaW5kaW5nIDog
YWN0dWFsVUJPQmluZGluZ3MpCisrICAgIHsKKysgICAgICAgIGJpbmRpbmcgPSBtdGw6OmtNYXhT
aGFkZXJCdWZmZXJzOworKyAgICB9CisrCisrICAgIGZvciAodWludDMyX3QgJmJpbmRpbmcgOiBh
Y3R1YWxYRkJCaW5kaW5ncykKKysgICAgeworKyAgICAgICAgYmluZGluZyA9IG10bDo6a01heFNo
YWRlckJ1ZmZlcnM7CisrICAgIH0KKyt9CisrCisrLy8gT3JpZ2luYWwgbWFwcGluZyBvZiBmcm9u
dCBlbmQgZnJvbSBzYW1wbGVyIG5hbWUgdG8gbXVsdGlwbGUgc2FtcGxlciBzbG90cyAoaW4gZm9y
bSBvZgorKy8vIHNsb3Q6Y291bnQgcGFpcikKKyt1c2luZyBPcmlnaW5hbFNhbXBsZXJCaW5kaW5n
TWFwID0KKysgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3Rvcjxz
dGQ6OnBhaXI8dWludDMyX3QsIHVpbnQzMl90Pj4+OworKworK2Jvb2wgTWFwcGVkU2FtcGxlck5h
bWVOZWVkc1VzZXJEZWZpbmVkUHJlZml4KGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUp
CisreworKyAgICByZXR1cm4gb3JpZ2luYWxOYW1lLmZpbmQoJy4nKSA9PSBzdGQ6OnN0cmluZzo6
bnBvczsKKyt9CisrCisrc3RhdGljIHN0ZDo6c3RyaW5nIE1TTEdldE1hcHBlZFNhbXBsZXJOYW1l
KGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUpCisreworKyAgICBzdGQ6OnN0cmluZyBz
YW1wbGVyTmFtZSA9IG9yaWdpbmFsTmFtZTsKKysKKysgICAgLy8gU2FtcGxlcnMgaW4gc3RydWN0
cyBhcmUgZXh0cmFjdGVkLgorKyAgICBzdGQ6OnJlcGxhY2Uoc2FtcGxlck5hbWUuYmVnaW4oKSwg
c2FtcGxlck5hbWUuZW5kKCksICcuJywgJ18nKTsKKysKKysgICAgLy8gUmVtb3ZlIGFycmF5IGVs
ZW1lbnRzCisrICAgIGF1dG8gb3V0ID0gc2FtcGxlck5hbWUuYmVnaW4oKTsKKysgICAgZm9yIChh
dXRvIGluID0gc2FtcGxlck5hbWUuYmVnaW4oKTsgaW4gIT0gc2FtcGxlck5hbWUuZW5kKCk7IGlu
KyspCisrICAgIHsKKysgICAgICAgIGlmICgqaW4gPT0gJ1snKQorKyAgICAgICAgeworKyAgICAg
ICAgICAgIHdoaWxlICgqaW4gIT0gJ10nKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAg
ICAgaW4rKzsKKysgICAgICAgICAgICAgICAgQVNTRVJUKGluICE9IHNhbXBsZXJOYW1lLmVuZCgp
KTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7
CisrICAgICAgICAgICAgKm91dCsrID0gKmluOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAg
IHNhbXBsZXJOYW1lLmVyYXNlKG91dCwgc2FtcGxlck5hbWUuZW5kKCkpOworKworKyAgICBpZiAo
TWFwcGVkU2FtcGxlck5hbWVOZWVkc1VzZXJEZWZpbmVkUHJlZml4KG9yaWdpbmFsTmFtZSkpCisr
ICAgIHsKKysgICAgICAgIHNhbXBsZXJOYW1lID0gc2g6OmtVc2VyRGVmaW5lZE5hbWVQcmVmaXgg
KyBzYW1wbGVyTmFtZTsKKysgICAgfQorKworKyAgICByZXR1cm4gc2FtcGxlck5hbWU7CisrfQor
KworK3ZvaWQgTVNMR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dy
YW1TdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UHJvZ3JhbUxpbmtl
ZFJlc291cmNlcyAmcmVzb3VyY2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFk
ZXJNYXA8c3RkOjpzdHJpbmc+ICpzaGFkZXJTb3VyY2VzT3V0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgIFNoYWRlck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAqdmFyaWFibGVJbmZvTWFw
T3V0KQorK3sKKysgICAgZm9yIChjb25zdCBnbDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlIDogZ2w6
OkFsbFNoYWRlclR5cGVzKCkpCisrICAgIHsKKysgICAgICAgIGdsOjpTaGFkZXIgKmdsU2hhZGVy
ICAgICAgICAgICAgPSBwcm9ncmFtU3RhdGUuZ2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZSk7
CisrICAgICAgICAoKnNoYWRlclNvdXJjZXNPdXQpW3NoYWRlclR5cGVdID0gZ2xTaGFkZXIgPyBn
bFNoYWRlci0+Z2V0VHJhbnNsYXRlZFNvdXJjZSgpIDogIiI7CisrICAgIH0KKyt9CisrCisrdm9p
ZCBHZXRBc3NpZ25lZFNhbXBsZXJCaW5kaW5ncyhjb25zdCBzaDo6VHJhbnNsYXRvck1ldGFsUmVm
bGVjdGlvbiAqcmVmbGVjdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE9yaWdpbmFsU2FtcGxlckJpbmRpbmdNYXAgJm9yaWdpbmFsQmluZGluZ3MsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+
ICZzdHJ1Y3RTYW1wbGVycywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
YXJyYXk8U2FtcGxlckJpbmRpbmcsIG10bDo6a01heEdMU2FtcGxlckJpbmRpbmdzPiAqYmluZGlu
Z3MpCisreworKyAgICBmb3IgKGF1dG8gJnNhbXBsZXIgOiByZWZsZWN0aW9uLT5nZXRTYW1wbGVy
QmluZGluZ3MoKSkKKysgICAgeworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUgICAg
ICAgICAgPSBzYW1wbGVyLmZpcnN0OworKyAgICAgICAgY29uc3QgdWludDMyX3QgYWN0dWFsU2Ft
cGxlclNsb3QgPSAodWludDMyX3QpcmVmbGVjdGlvbi0+Z2V0U2FtcGxlckJpbmRpbmcobmFtZSk7
CisrICAgICAgICBjb25zdCB1aW50MzJfdCBhY3R1YWxUZXh0dXJlU2xvdCA9ICh1aW50MzJfdCly
ZWZsZWN0aW9uLT5nZXRUZXh0dXJlQmluZGluZyhuYW1lKTsKKysKKysgICAgICAgIC8vIEFzc2ln
biBzZXF1ZW50aWFsIGluZGV4IGZvciBzdWJzZXF1ZW50IGFycmF5IGVsZW1lbnRzCisrICAgICAg
ICBjb25zdCBib29sIHN0cnVjdFNhbXBsZXIgPSBzdHJ1Y3RTYW1wbGVycy5maW5kKG5hbWUpICE9
IHN0cnVjdFNhbXBsZXJzLmVuZCgpOworKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbWFwcGVk
TmFtZSA9CisrICAgICAgICAgICAgc3RydWN0U2FtcGxlciA/IG5hbWUgOiBNU0xHZXRNYXBwZWRT
YW1wbGVyTmFtZShzaDo6a1VzZXJEZWZpbmVkTmFtZVByZWZpeCArIG5hbWUpOworKyAgICAgICAg
YXV0byBvcmlnaW5hbCA9IG9yaWdpbmFsQmluZGluZ3MuZmluZChtYXBwZWROYW1lKTsKKysgICAg
ICAgIGlmIChvcmlnaW5hbCAhPSBvcmlnaW5hbEJpbmRpbmdzLmVuZCgpKQorKyAgICAgICAgewor
KyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMy
X3Q+PiAmcmVzT3JpZ25hbEJpbmRpbmdzID0KKysgICAgICAgICAgICAgICAgb3JpZ2luYWxCaW5k
aW5ncy5hdChtYXBwZWROYW1lKTsKKysgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50VGV4dHVy
ZVNsb3QgPSBhY3R1YWxUZXh0dXJlU2xvdDsKKysgICAgICAgICAgICB1aW50MzJfdCBjdXJyZW50
U2FtcGxlclNsb3QgPSBhY3R1YWxTYW1wbGVyU2xvdDsKKysgICAgICAgICAgICBmb3IgKGNvbnN0
IHN0ZDo6cGFpcjx1aW50MzJfdCwgdWludDMyX3Q+ICZvcmlnaW5hbEJpbmRpbmdSYW5nZSA6IHJl
c09yaWduYWxCaW5kaW5ncykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIFNhbXBs
ZXJCaW5kaW5nICZhY3R1YWxCaW5kaW5nID0gYmluZGluZ3MtPmF0KG9yaWdpbmFsQmluZGluZ1Jh
bmdlLmZpcnN0KTsKKysgICAgICAgICAgICAgICAgYWN0dWFsQmluZGluZy50ZXh0dXJlQmluZGlu
ZyAgPSBjdXJyZW50VGV4dHVyZVNsb3Q7CisrICAgICAgICAgICAgICAgIGFjdHVhbEJpbmRpbmcu
c2FtcGxlckJpbmRpbmcgID0gY3VycmVudFNhbXBsZXJTbG90OworKworKyAgICAgICAgICAgICAg
ICBjdXJyZW50VGV4dHVyZVNsb3QgKz0gb3JpZ2luYWxCaW5kaW5nUmFuZ2Uuc2Vjb25kOworKyAg
ICAgICAgICAgICAgICBjdXJyZW50U2FtcGxlclNsb3QgKz0gb3JpZ2luYWxCaW5kaW5nUmFuZ2Uu
c2Vjb25kOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgfQorK30KKysKKytzaDo6
VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqZ2V0UmVmbGVjdGlvbkZyb21TaGFkZXIoZ2w6OlNo
YWRlciAqc2hhZGVyKQorK3sKKysgICAgU2hhZGVyTXRsICpzaGFkZXJJbnN0YW5jZSA9IHN0YXRp
Y19jYXN0PFNoYWRlck10bCAqPihzaGFkZXItPmdldEltcGxlbWVudGF0aW9uKCkpOworKyAgICBy
ZXR1cm4gc2hhZGVySW5zdGFuY2UtPmdldFRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24oKTsKKyt9
CisrCisrc2g6OlRyYW5zbGF0b3JNZXRhbFJlZmxlY3Rpb24gKmdldFJlZmxlY3Rpb25Gcm9tQ29t
cGlsZXIoZ2w6OkNvbXBpbGVyICpjb21waWxlciwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZSB0eXBlKQorK3sK
KysgICAgYXV0byBjb21waWxlckluc3RhbmNlICAgICAgPSBjb21waWxlci0+Z2V0SW5zdGFuY2Uo
dHlwZSk7CisrICAgIHNoOjpUU2hIYW5kbGVCYXNlICpiYXNlICAgID0gc3RhdGljX2Nhc3Q8c2g6
OlRTaEhhbmRsZUJhc2UgKj4oY29tcGlsZXJJbnN0YW5jZS5nZXRIYW5kbGUoKSk7CisrICAgIGF1
dG8gdHJhbnNsYXRvck1ldGFsRGlyZWN0ID0gYmFzZS0+Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJl
Y3QoKTsKKysgICAgY29tcGlsZXItPnB1dEluc3RhbmNlKHN0ZDo6bW92ZShjb21waWxlckluc3Rh
bmNlKSk7CisrICAgIHJldHVybiB0cmFuc2xhdG9yTWV0YWxEaXJlY3QtPmdldFRyYW5zbGF0b3JN
ZXRhbFJlZmxlY3Rpb24oKTsKKyt9CisrCisrYW5nbGU6OlJlc3VsdCBHbHNsYW5nR2V0TVNMKGNv
bnN0IGdsOjpDb250ZXh0ICpnbENvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpQcm9ncmFtU3RhdGUgJnByb2dyYW1TdGF0ZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMgJmdsQ2FwcywKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gJnNoYWRlclNvdXJjZXMs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRlck1hcEludGVyZmFjZVZh
cmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6U2hhZGVyTWFwPFRyYW5zbGF0ZWRTaGFkZXJJbmZvPiAqbXNsU2hhZGVySW5mb091
dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmlu
Zz4gKm1zbENvZGVPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB4ZmJC
dWZmZXJDb3VudCkKKyt7CisrICAgIC8vIFJldHJpZXZlIG9yaWdpbmFsIHVuaWZvcm0gYnVmZmVy
IGJpbmRpbmdzIGdlbmVyYXRlZCBieSBmcm9udCBlbmQuIFdlIHdpbGwgbmVlZCB0byBkbyBhIHJl
bWFwLgorKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiB1Ym9P
cmlnaW5hbEJpbmRpbmdzOworKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxv
Y2s+ICZibG9ja3MgPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybUJsb2NrcygpOworKyAgICBmb3Ig
KHVpbnQzMl90IGJ1ZmZlcklkeCA9IDA7IGJ1ZmZlcklkeCA8IGJsb2Nrcy5zaXplKCk7ICsrYnVm
ZmVySWR4KQorKyAgICB7CisrICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmJsb2Nr
ID0gYmxvY2tzW2J1ZmZlcklkeF07CisrICAgICAgICBpZiAoIXVib09yaWdpbmFsQmluZGluZ3Mu
Y291bnQoYmxvY2subWFwcGVkTmFtZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAgdWJvT3Jp
Z2luYWxCaW5kaW5nc1tibG9jay5tYXBwZWROYW1lXSA9IGJ1ZmZlcklkeDsKKysgICAgICAgIH0K
KysgICAgfQorKyAgICAvLyBSZXRyaWV2ZSBvcmlnaW5hbCBzYW1wbGVyIGJpbmRpbmdzIHByb2R1
Y2VkIGJ5IGZyb250IGVuZC4KKysgICAgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCBvcmlnaW5h
bFNhbXBsZXJCaW5kaW5nczsKKysgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlNhbXBsZXJCaW5k
aW5nPiAmc2FtcGxlckJpbmRpbmdzID0gcHJvZ3JhbVN0YXRlLmdldFNhbXBsZXJCaW5kaW5ncygp
OworKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVW5pZm9ybT4gJnVuaWZvcm1zICAg
ICAgICAgPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9ybXMoKTsKKysKKysgICAgc3RkOjp1bm9yZGVy
ZWRfc2V0PHN0ZDo6c3RyaW5nPiBzdHJ1Y3RTYW1wbGVycyA9IHt9OworKworKyAgICBmb3IgKHVp
bnQzMl90IHRleHR1cmVJbmRleCA9IDA7IHRleHR1cmVJbmRleCA8IHNhbXBsZXJCaW5kaW5ncy5z
aXplKCk7ICsrdGV4dHVyZUluZGV4KQorKyAgICB7CisrICAgICAgICBjb25zdCBnbDo6U2FtcGxl
ckJpbmRpbmcgJnNhbXBsZXJCaW5kaW5nID0gc2FtcGxlckJpbmRpbmdzW3RleHR1cmVJbmRleF07
CisrICAgICAgICB1aW50MzJfdCB1bmlmb3JtSW5kZXggPSBwcm9ncmFtU3RhdGUuZ2V0VW5pZm9y
bUluZGV4RnJvbVNhbXBsZXJJbmRleCh0ZXh0dXJlSW5kZXgpOworKyAgICAgICAgY29uc3QgZ2w6
OkxpbmtlZFVuaWZvcm0gJnNhbXBsZXJVbmlmb3JtID0gdW5pZm9ybXNbdW5pZm9ybUluZGV4XTsK
KysgICAgICAgIGJvb2wgaXNTYW1wbGVySW5TdHJ1Y3QgICAgICAgID0gc2FtcGxlclVuaWZvcm0u
bmFtZS5maW5kKCcuJykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisrICAgICAgICBzdGQ6OnN0cmlu
ZyBtYXBwZWRTYW1wbGVyTmFtZSA9IGlzU2FtcGxlckluU3RydWN0CisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1TTEdldE1hcHBlZFNhbXBsZXJOYW1lKHNh
bXBsZXJVbmlmb3JtLm5hbWUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IE1TTEdldE1hcHBlZFNhbXBsZXJOYW1lKHNhbXBsZXJVbmlmb3JtLm1hcHBlZE5h
bWUpOworKyAgICAgICAgLy8gVGhlc2UgbmVlZCB0byBiZSBwcmVmaXhlZCBsYXRlciBzZXBlcmF0
ZWx5CisrICAgICAgICBpZiAoaXNTYW1wbGVySW5TdHJ1Y3QpCisrICAgICAgICAgICAgc3RydWN0
U2FtcGxlcnMuaW5zZXJ0KG1hcHBlZFNhbXBsZXJOYW1lKTsKKysgICAgICAgIG9yaWdpbmFsU2Ft
cGxlckJpbmRpbmdzW21hcHBlZFNhbXBsZXJOYW1lXS5wdXNoX2JhY2soCisrICAgICAgICAgICAg
e3RleHR1cmVJbmRleCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHNhbXBsZXJCaW5kaW5nLmJvdW5k
VGV4dHVyZVVuaXRzLnNpemUoKSl9KTsKKysgICAgfQorKyAgICBmb3IgKGdsOjpTaGFkZXJUeXBl
IHR5cGUgOiB7Z2w6OlNoYWRlclR5cGU6OlZlcnRleCwgZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50
fSkKKysgICAgeworKyAgICAgICAgKCptc2xDb2RlT3V0KVt0eXBlXSAgICAgICAgICAgICAgICAg
ICAgICAgICA9IHNoYWRlclNvdXJjZXNbdHlwZV07CisrICAgICAgICAoKm1zbFNoYWRlckluZm9P
dXQpW3R5cGVdLm1ldGFsU2hhZGVyU291cmNlID0gc2hhZGVyU291cmNlc1t0eXBlXTsKKysgICAg
ICAgIGdsOjpTaGFkZXIgKnNoYWRlciAgICAgICAgICAgICAgICAgICAgICAgID0gcHJvZ3JhbVN0
YXRlLmdldEF0dGFjaGVkU2hhZGVyKHR5cGUpOworKyAgICAgICAgc2g6OlRyYW5zbGF0b3JNZXRh
bFJlZmxlY3Rpb24gKnJlZmxlY3Rpb24gPSBnZXRSZWZsZWN0aW9uRnJvbVNoYWRlcihzaGFkZXIp
OworKyAgICAgICAgLy8gUmV0cmlldmUgYXV0b21hdGljIHRleHR1cmUgc2xvdCBhc3NpZ25tZW50
cworKyAgICAgICAgaWYgKG9yaWdpbmFsU2FtcGxlckJpbmRpbmdzLnNpemUoKSA+IDApCisrICAg
ICAgICB7CisrICAgICAgICAgICAgR2V0QXNzaWduZWRTYW1wbGVyQmluZGluZ3MocmVmbGVjdGlv
biwgb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsIHN0cnVjdFNhbXBsZXJzLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZvT3V0LT5hdCh0eXBlKS5h
Y3R1YWxTYW1wbGVyQmluZGluZ3MpOworKyAgICAgICAgfQorKyAgICAgICAgcmVmbGVjdGlvbi0+
cmVzZXQoKTsKKysgICAgfQorKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Cisr
fQorKworK3VpbnQgTXNsR2V0U2hhZGVyU2hhZG93Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUsIEdM
ZW51bSBmdW5jKQorK3sKKysgICAgLy8gU2VlIFNwaXJ2VG9Nc2xDb21waWxlcjo6ZW1pdF9oZWFk
ZXIoKQorKyAgICBpZiAobW9kZSA9PSBHTF9OT05FKQorKyAgICB7CisrICAgICAgICByZXR1cm4g
MDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHN3aXRjaCAoZnVuYykKKysg
ICAgICAgIHsKKysgICAgICAgICAgICBjYXNlIEdMX0xFU1M6CisrICAgICAgICAgICAgICAgIHJl
dHVybiAxOworKyAgICAgICAgICAgIGNhc2UgR0xfTEVRVUFMOgorKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMjsKKysgICAgICAgICAgICBjYXNlIEdMX0dSRUFURVI6CisrICAgICAgICAgICAgICAg
IHJldHVybiAzOworKyAgICAgICAgICAgIGNhc2UgR0xfR0VRVUFMOgorKyAgICAgICAgICAgICAg
ICByZXR1cm4gNDsKKysgICAgICAgICAgICBjYXNlIEdMX05FVkVSOgorKyAgICAgICAgICAgICAg
ICByZXR1cm4gNTsKKysgICAgICAgICAgICBjYXNlIEdMX0FMV0FZUzoKKysgICAgICAgICAgICAg
ICAgcmV0dXJuIDY7CisrICAgICAgICAgICAgY2FzZSBHTF9FUVVBTDoKKysgICAgICAgICAgICAg
ICAgcmV0dXJuIDc7CisrICAgICAgICAgICAgY2FzZSBHTF9OT1RFUVVBTDoKKysgICAgICAgICAg
ICAgICAgcmV0dXJuIDg7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9Cisr
ICAgIH0KKyt9CisrfSAgLy8gbmFtZXNwYWNlIG10bAorK30gIC8vIG5hbWVzcGFjZSByeAorZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5o
IGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX3V0aWxzLmgKK2luZGV4
IDEzYzk3ZWUuLmMwMjQ0NmEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX3V0aWxzLmgKK0BAIC0xNCwzMyArMTQsMTEgQEAKKyAjaW5jbHVkZSAibGli
QU5HTEUvcmVuZGVyZXIvUHJvZ3JhbUltcGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9jb21tb24uaCIKKy0KKysjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiCisgbmFtZXNwYWNlIHJ4CisgeworIG5hbWVzcGFj
ZSBtdGwKKyB7CistCistc3RydWN0IFNhbXBsZXJCaW5kaW5nCisteworLSAgICB1aW50MzJfdCB0
ZXh0dXJlQmluZGluZyA9IDA7CistICAgIHVpbnQzMl90IHNhbXBsZXJCaW5kaW5nID0gMDsKKy19
OworLQorLXN0cnVjdCBUcmFuc2xhdGVkU2hhZGVySW5mbworLXsKKy0gICAgdm9pZCByZXNldCgp
OworLQorLSAgICAvLyBUcmFuc2xhdGVkIE1ldGFsIHNvdXJjZSBjb2RlCistICAgIHN0ZDo6c3Ry
aW5nIG1ldGFsU2hhZGVyU291cmNlOworLSAgICAvLyBNZXRhbCBsaWJyYXJ5IGNvbXBpbGVkIGZy
b20gc291cmNlIGNvZGUgYWJvdmUuIFVzZWQgYnkgUHJvZ3JhbU10bC4KKy0gICAgQXV0b09iakNQ
dHI8aWQ8TVRMTGlicmFyeT4+IG1ldGFsTGlicmFyeTsKKy0KKy0gICAgc3RkOjphcnJheTxTYW1w
bGVyQmluZGluZywga01heEdMU2FtcGxlckJpbmRpbmdzPiBhY3R1YWxTYW1wbGVyQmluZGluZ3M7
CistICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhHTFVCT0JpbmRpbmdzPiBhY3R1YWxVQk9C
aW5kaW5nczsKKy0gICAgc3RkOjphcnJheTx1aW50MzJfdCwga01heFNoYWRlclhGQnM+IGFjdHVh
bFhGQkJpbmRpbmdzOworLSAgICBib29sIGhhc1VCT0FyZ3VtZW50QnVmZmVyOworLX07CistCisg
Ly8gLSBzaGFkZXJTb3VyY2VzT3V0IGlzIHJlc3VsdCBHTFNMIGNvZGUgcGVyIHNoYWRlciBzdGFn
ZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMgdHVybmVkIG9mZi4KKyAvLyAtIHhmYk9ubHlTaGFkZXJT
b3VyY2VPdXQgd2lsbCBjb250YWluIHZlcnRleCBzaGFkZXIncyBHTFNMIGNvZGUgd2hlbiBYRkIg
ZW11bGF0aW9uIGlzIHR1cm5lZCBvbi4KKyB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29u
c3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorQEAgLTU3LDYgKzM1LDEzIEBAIGFu
Z2xlOjpSZXN1bHQgR2xzbGFuZ0dldFNoYWRlclNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoYWRl
ck1hcEludGVyZmFjZVZhcmlhYmxlSW5mb01hcCAmdmFyaWFibGVJbmZvTWFwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9y
PHVpbnQzMl90Pj4gKnNoYWRlckNvZGVPdXQpOworIAorK2FuZ2xlOjpSZXN1bHQgTVNMR2V0U2hh
ZGVyU3BpcnZDb2RlKEVycm9ySGFuZGxlciAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6U2hhZGVyQml0U2V0ICZsaW5rZWRTaGFkZXJTdGFn
ZXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNhcHMg
JmdsQ2FwcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
U2hhZGVyTWFwPHN0ZDo6c3RyaW5nPiAmc2hhZGVyU291cmNlcywKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJbnRlcmZhY2VWYXJpYWJsZUluZm9N
YXAgJnZhcmlhYmxlSW5mb01hcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6U2hhZGVyTWFwPHN0ZDo6dmVjdG9yPHVpbnQzMl90Pj4gKnNoYWRlckNvZGVPdXQpOwor
KworIC8vIFRyYW5zbGF0ZSBmcm9tIFNQSVItViBjb2RlIHRvIE1ldGFsIHNoYWRlciBzb3VyY2Ug
Y29kZS4KKyAvLyAtIHNwaXJ2U2hhZGVyQ29kZSBpcyBTUElSViBjb2RlIHBlciBzaGFkZXIgc3Rh
Z2Ugd2hlbiBYRkIgZW11bGF0aW9uIGlzIHR1cm5lZCBvZmYuCisgLy8gLSB4ZmJPbmx5U3BpcnZD
b2RlIGlzICB2ZXJ0ZXggc2hhZGVyJ3MgU1BJUlYgY29kZSB3aGVuIFhGQiBlbXVsYXRpb24gaXMg
dHVybmVkIG9uLgorQEAgLTcwLDYgKzU1LDIzIEBAIGFuZ2xlOjpSZXN1bHQgU3BpcnZDb2RlVG9N
c2woQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpT
aGFkZXJNYXA8VHJhbnNsYXRlZFNoYWRlckluZm8+ICptc2xTaGFkZXJJbmZvT3V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlZFNoYWRlckluZm8gKm1zbFhmYk9ubHlT
aGFkZXJJbmZvT3V0IC8qKiBudWxsYWJsZSAqLyk7CisgCisrdm9pZCBNU0xHZXRTaGFkZXJTb3Vy
Y2UoY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxzdGQ6OnN0cmluZz4gKnNoYWRl
clNvdXJjZXNPdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVyTWFwSW50ZXJmYWNl
VmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQpOworKworK2FuZ2xlOjpSZXN1bHQg
R2xzbGFuZ0dldE1TTChDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6U2hhZGVyQml0U2V0ICZsaW5rZWRTaGFkZXJTdGFnZXMsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDYXBzICZnbENhcHMsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJNYXA8c3RkOjpzdHJpbmc+ICZzaGFk
ZXJTb3VyY2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaGFkZXJNYXBJ
bnRlcmZhY2VWYXJpYWJsZUluZm9NYXAgJnZhcmlhYmxlSW5mb01hcCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OlNoYWRlck1hcDxUcmFuc2xhdGVkU2hhZGVySW5mbz4gKm1zbFNo
YWRlckluZm9PdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJNYXA8
c3RkOjpzdHJpbmc+ICptc2xDb2RlT3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgeGZiQnVmZmVyQ291bnQpOworKworKy8vIEdldCBlcXVpdmFsZW50IHNoYWRvdyBjb21w
YXJlIG1vZGUgdGhhdCBpcyB1c2VkIGluIHRyYW5zbGF0ZWQgbXNsIHNoYWRlci4KKyt1aW50IE1z
bEdldFNoYWRlclNoYWRvd0NvbXBhcmVNb2RlKEdMZW51bSBtb2RlLCBHTGVudW0gZnVuYyk7Cisr
CisgfSAgLy8gbmFtZXNwYWNlIG10bAorIH0gIC8vIG5hbWVzcGFjZSByeAorIAorZGlmZiAtLWdp
dCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbSBiL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ191dGlscy5tbQoraW5kZXggY2Fh
MGU1Ni4uNGNmNzE3YSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfZ2xzbGFuZ191dGlscy5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9nbHNsYW5nX3V0aWxzLm1tCitAQCAtMTMsNiArMTMsNyBAQAorICNpbmNsdWRlIDxzcGlydl9t
c2wuaHBwPgorIAorICNpbmNsdWRlICJjb21tb24vYXBwbGVfcGxhdGZvcm1fdXRpbHMuaCIKKysj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuaCIKKyAjaW5jbHVk
ZSAibGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmgiCisgI2luY2x1ZGUg
ImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKKyAKK0BAIC0yMiwxMiArMjMs
MTMgQEAKKyB7CisgbmFtZXNwYWNlCisgeworLQorIGNvbnN0ZXhwciB1aW50MzJfdCBrR2xzbGFu
Z1RleHR1cmVEZXNjU2V0ICAgICAgICAgICAgICA9IDA7CisgY29uc3RleHByIHVpbnQzMl90IGtH
bHNsYW5nRGVmYXVsdFVuaWZvcm1BbmRYZmJEZXNjU2V0ID0gMTsKKyBjb25zdGV4cHIgdWludDMy
X3Qga0dsc2xhbmdEcml2ZXJVbmlmb3Jtc0Rlc2NTZXQgICAgICAgPSAyOworIGNvbnN0ZXhwciB1
aW50MzJfdCBrR2xzbGFuZ1NoYWRlclJlc291cmNlRGVzY1NldCAgICAgICA9IDM7CisgCisrY29u
c3RleHByIGNoYXIga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9kZXNWYXJOYW1lW10gPSAiQU5HTEVT
aGFkb3dDb21wYXJlTW9kZXMiOworKworIC8vIE9yaWdpbmFsIG1hcHBpbmcgb2YgZnJvbnQgZW5k
IGZyb20gc2FtcGxlciBuYW1lIHRvIG11bHRpcGxlIHNhbXBsZXIgc2xvdHMgKGluIGZvcm0gb2YK
KyAvLyBzbG90OmNvdW50IHBhaXIpCisgdXNpbmcgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCA9
CitAQCAtNTYsOSArNTgsMTMgQEAgdm9pZCBSZXNldEdsc2xhbmdQcm9ncmFtSW50ZXJmYWNlSW5m
byhHbHNsYW5nUHJvZ3JhbUludGVyZmFjZUluZm8gKnByb2dyYW1JbnRlcmYKKyAgICAgc3RhdGlj
X2Fzc2VydChrRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggIT0gMCwgImtEcml2ZXJVbmlmb3Jt
c0JpbmRpbmdJbmRleCBtdXN0IG5vdCBiZSAwIik7CisgfQorIAorKworIEdsc2xhbmdTb3VyY2VP
cHRpb25zIENyZWF0ZVNvdXJjZU9wdGlvbnMoKQorIHsKKyAgICAgR2xzbGFuZ1NvdXJjZU9wdGlv
bnMgb3B0aW9uczsKKysgICAgb3B0aW9ucy5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2sgPSB0cnVl
OworKyAgICAvLyBXZSBjYW4gZWFybHkgb3V0IGluIHRoZSBNU0wgb25jZSB0cmFuc2Zvcm0gZmVl
ZGJhY2sgaXMgd3JpdHRlbgorKyAgICBvcHRpb25zLnRyYW5zZm9ybUZlZWRiYWNrRWFybHlSZXR1
cm4gPSB0cnVlOworICAgICByZXR1cm4gb3B0aW9uczsKKyB9CisgCitAQCAtNzksOCArODUsOCBA
QCBHbHNsYW5nU291cmNlT3B0aW9ucyBDcmVhdGVTb3VyY2VPcHRpb25zKCkKKyB2b2lkIEJpbmRC
dWZmZXJzKHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTCAqY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICBjb25zdCBzcGlydl9jcm9zczo6U21hbGxWZWN0b3I8c3BpcnZfY3Jvc3M6OlJlc291cmNl
PiAmcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5cGUgc2hhZGVyVHlw
ZSwKKy0gICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmlu
ZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorLSAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp1bm9yZGVyZWRfbWFwPHVpbnQzMl90LCB1aW50MzJfdD4gJnhmYk9yaWdpbmFsQmlu
ZGluZ3MsCisrICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDxzdGQ6OnN0cmlu
ZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorKyAgICAgICAgICAgICAgICAgY29u
c3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5kaW5n
cywKKyAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDMyX3QsIGtNYXhHTFVCT0JpbmRp
bmdzPiAqdWJvQmluZGluZ3NSZW1hcE91dCwKKyAgICAgICAgICAgICAgICAgIHN0ZDo6YXJyYXk8
dWludDMyX3QsIGtNYXhTaGFkZXJYRkJzPiAqeGZiQmluZGluZ1JlbWFwT3V0LAorICAgICAgICAg
ICAgICAgICAgYm9vbCAqdWJvQXJndW1lbnRCdWZmZXJVc2VkKQorQEAgLTI1MywzMCArMjU5LDUw
IEBAIHZvaWQgR2V0QXNzaWduZWRTYW1wbGVyQmluZGluZ3MoY29uc3Qgc3BpcnZfY3Jvc3M6OkNv
bXBpbGVyTVNMICZjb21waWxlck1zbCwKKyAgICAgfQorIH0KKyAKKy1zdGQ6OnN0cmluZyBQb3N0
UHJvY2Vzc1RyYW5zbGF0ZWRNc2woY29uc3Qgc3RkOjpzdHJpbmcgJnRyYW5zbGF0ZWRTb3VyY2Up
Cisrc3RkOjpzdHJpbmcgUG9zdFByb2Nlc3NUcmFuc2xhdGVkTXNsKGJvb2wgaGFzRGVwdGhTYW1w
bGVyLCBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNsYXRlZFNvdXJjZSkKKyB7CisrICAgIHN0ZDo6
c3RyaW5nIHNvdXJjZTsKKysgICAgaWYgKGhhc0RlcHRoU2FtcGxlcikKKysgICAgeworKyAgICAg
ICAgLy8gQWRkIEFOR0xFU2hhZG93Q29tcGFyZU1vZGVzIHZhcmlhYmxlIHRvIG1haW4oKSwgV2Ug
bmVlZCB0byBhZGQgaGVyZSBiZWNhdXNlIGl0IGlzIHRoZQorKyAgICAgICAgLy8gb25seSB3YXkg
d2l0aG91dCBtb2RpZnlpbmcgc3BpcnYtY3Jvc3MuCisrICAgICAgICBzdGQ6OnJlZ2V4IG1haW5E
ZWNsYXJlUmVnZXgoCisrICAgICAgICAgICAgUiIoKCh2ZXJ0ZXh8ZnJhZ21lbnR8a2VybmVsKVxz
K1tfYS16QS1aMC05PD5dK1xzK21haW5bXlwoXSpcKCkpIik7CisrICAgICAgICBzdGQ6OnN0cmlu
ZyBtYWluRGVjbGFyZVJlcGxhY2VTdHIgPSBzdGQ6OnN0cmluZygiJDFjb25zdGFudCB1bmlmb3Jt
PHVpbnQ+ICoiKSArCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrU2hhZG93U2FtcGxlckNvbXBhcmVNb2Rlc1Zhck5hbWUgKyAiW1tidWZmZXIoIiArCisrICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIoa1NoYWRvd1NhbXBs
ZXJDb21wYXJlTW9kZXNCaW5kaW5nSW5kZXgpICsgIildXSwgIjsKKysgICAgICAgIHNvdXJjZSA9
IHN0ZDo6cmVnZXhfcmVwbGFjZSh0cmFuc2xhdGVkU291cmNlLCBtYWluRGVjbGFyZVJlZ2V4LCBt
YWluRGVjbGFyZVJlcGxhY2VTdHIpOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAg
ICAgc291cmNlID0gdHJhbnNsYXRlZFNvdXJjZTsKKysgICAgfQorKworICAgICAvLyBBZGQgZnVu
Y3Rpb25fY29uc3RhbnQgYXR0cmlidXRlIHRvIGdsX1NhbXBsZU1hc2suCisgICAgIC8vIEV2ZW4g
dGhvdWdoIHRoaXMgdmFyeWluZyBpcyBvbmx5IHVzZWQgd2hlbiBBTkdMRUNvdmVyYWdlTWFza0Vu
YWJsZWQgaXMgdHJ1ZSwKKyAgICAgLy8gdGhlIHNwaXJ2LWNyb3NzIGRvZXNuJ3QgYXNzaWduIGZ1
bmN0aW9uX2NvbnN0YW50IGF0dHJpYnV0ZSB0byBpdC4gVGh1cyBpdCB3b24ndCBiZSBkZWFkLWNv
ZGUKKyAgICAgLy8gcmVtb3ZlZCB3aGVuIEFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZD1mYWxzZS4K
KyAgICAgc3RkOjpzdHJpbmcgc2FtcGxlTWFza1JlcGxhY2VTdHIgPSBzdGQ6OnN0cmluZygiW1tz
YW1wbGVfbWFzaywgZnVuY3Rpb25fY29uc3RhbnQoIikgKworLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNoOjptdGw6OmtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1l
ICsgIildXSI7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2g6OlRy
YW5zbGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpICsKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKV1dIjsKKyAKKyAgICAgLy8gVGhp
cyByZXBsYWNlcyAiZ2xfU2FtcGxlTWFzayBbW3NhbXBsZV9tYXNrXV0iCisgICAgIC8vICAgICAg
ICAgIHdpdGggImdsX1NhbXBsZU1hc2sgW1tzYW1wbGVfbWFzaywgZnVuY3Rpb25fY29uc3RhbnQo
QU5HTEVDb3ZlcmFnZU1hc2tFbmFibGVkKV1dIgorICAgICBzdGQ6OnJlZ2V4IHNhbXBsZU1hc2tE
ZWNsYXJlUmVnZXgoUiIoXFtccypcW1xzKnNhbXBsZV9tYXNrXHMqXF1ccypcXSkiKTsKKy0gICAg
cmV0dXJuIHN0ZDo6cmVnZXhfcmVwbGFjZSh0cmFuc2xhdGVkU291cmNlLCBzYW1wbGVNYXNrRGVj
bGFyZVJlZ2V4LCBzYW1wbGVNYXNrUmVwbGFjZVN0cik7CisrICAgIHJldHVybiBzdGQ6OnJlZ2V4
X3JlcGxhY2Uoc291cmNlLCBzYW1wbGVNYXNrRGVjbGFyZVJlZ2V4LCBzYW1wbGVNYXNrUmVwbGFj
ZVN0cik7CisgfQorIAorIC8vIEN1c3RvbWl6ZWQgc3BpcnYtY3Jvc3MgY29tcGlsZXIKKyBjbGFz
cyBTcGlydlRvTXNsQ29tcGlsZXIgOiBwdWJsaWMgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMCisg
eworICAgcHVibGljOgorLSAgICBTcGlydlRvTXNsQ29tcGlsZXIoc3RkOjp2ZWN0b3I8dWludDMy
X3Q+ICYmc3ByaXYpIDogc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMKHNwcml2KSB7fQorKyAgICBT
cGlydlRvTXNsQ29tcGlsZXIoQ29udGV4dCAqY29udGV4dCwgc3RkOjp2ZWN0b3I8dWludDMyX3Q+
ICYmc3ByaXYpCisrICAgICAgICA6IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTChzcHJpdiksIG1D
b250ZXh0KGNvbnRleHQpCisrICAgIHt9CisgCisgICAgIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFk
ZXJUeXBlIHNoYWRlclR5cGUsCistICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRl
cmVkX21hcDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorLSAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIHVpbnQz
Ml90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKKysgICAgICAgICAgICAgICAgICAgY29uc3QgYW5n
bGU6Okhhc2hNYXA8c3RkOjpzdHJpbmcsIHVpbnQzMl90PiAmdWJvT3JpZ2luYWxCaW5kaW5ncywK
KysgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQz
Ml90PiAmeGZiT3JpZ2luYWxCaW5kaW5ncywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgT3Jp
Z2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxTYW1wbGVyQmluZGluZ3MsCisgICAgICAg
ICAgICAgICAgICAgIFRyYW5zbGF0ZWRTaGFkZXJJbmZvICptc2xTaGFkZXJJbmZvT3V0KQorICAg
ICB7CitAQCAtMzI4LDggKzM1NCw3IEBAIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFkZXJUeXBlIHNo
YWRlclR5cGUsCisgICAgICAgICAgICAgLy8gRm9yY2UgZGlzY3JldGUgc2xvdCBiaW5kaW5ncyBm
b3IgdGV4dHVyZXMsIGRlZmF1bHQgdW5pZm9ybXMgJiBkcml2ZXIgdW5pZm9ybXMKKyAgICAgICAg
ICAgICAvLyBpbnN0ZWFkIG9mIHVzaW5nIGFyZ3VtZW50IGJ1ZmZlci4KKyAgICAgICAgICAgICBz
cGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xz
bGFuZ1RleHR1cmVEZXNjU2V0KTsKKy0gICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGlsZXJN
U0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldCgKKy0gICAgICAgICAgICAgICAga0dsc2xh
bmdEZWZhdWx0VW5pZm9ybUFuZFhmYkRlc2NTZXQpOworKyAgICAgICAgICAgIHNwaXJ2X2Nyb3Nz
OjpDb21waWxlck1TTDo6YWRkX2Rpc2NyZXRlX2Rlc2NyaXB0b3Jfc2V0KGtHbHNsYW5nRGVmYXVs
dFVuaWZvcm1BbmRYZmJEZXNjU2V0KTsKKyAgICAgICAgICAgICBzcGlydl9jcm9zczo6Q29tcGls
ZXJNU0w6OmFkZF9kaXNjcmV0ZV9kZXNjcmlwdG9yX3NldChrR2xzbGFuZ0RyaXZlclVuaWZvcm1z
RGVzY1NldCk7CisgICAgICAgICB9CisgICAgICAgICBlbHNlCitAQCAtMzQwLDIxICszNjUsNzMy
IEBAIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgCisgICAgICAg
ICBzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OnNldF9tc2xfb3B0aW9ucyhjb21wT3B0KTsKKyAK
KysgICAgICAgIGFkZEJ1aWx0SW5SZXNvdXJjZXMoKTsKKysgICAgICAgIGFuYWx5emVTaGFkZXJW
YXJpYWJsZXMoKTsKKysKKyAgICAgICAgIC8vIEFjdHVhbCBjb21waWxhdGlvbgorICAgICAgICAg
bXNsU2hhZGVySW5mb091dC0+bWV0YWxTaGFkZXJTb3VyY2UgPQorLSAgICAgICAgICAgIFBvc3RQ
cm9jZXNzVHJhbnNsYXRlZE1zbChzcGlydl9jcm9zczo6Q29tcGlsZXJNU0w6OmNvbXBpbGUoKSk7
CisrICAgICAgICAgICAgUG9zdFByb2Nlc3NUcmFuc2xhdGVkTXNsKG1IYXNEZXB0aFNhbXBsZXIs
IHNwaXJ2X2Nyb3NzOjpDb21waWxlck1TTDo6Y29tcGlsZSgpKTsKKyAKKyAgICAgICAgIC8vIFJl
dHJpZXZlIGF1dG9tYXRpYyB0ZXh0dXJlIHNsb3QgYXNzaWdubWVudHMKKyAgICAgICAgIEdldEFz
c2lnbmVkU2FtcGxlckJpbmRpbmdzKCp0aGlzLCBvcmlnaW5hbFNhbXBsZXJCaW5kaW5ncywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2xTaGFkZXJJbmZvT3V0LT5hY3R1
YWxTYW1wbGVyQmluZGluZ3MpOworICAgICB9CisrCisrICBwcml2YXRlOgorKyAgICAvLyBPdmVy
cmlkZSBDb21waWxlck1TTAorKyAgICB2b2lkIGVtaXRfaGVhZGVyKCkgb3ZlcnJpZGUKKysgICAg
eworKyAgICAgICAgc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjplbWl0X2hlYWRlcigpOworKyAg
ICAgICAgaWYgKCFtSGFzRGVwdGhTYW1wbGVyKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHJl
dHVybjsKKysgICAgICAgIH0KKysgICAgICAgIC8vIFdvcmsgYXJvdW5kIGNvZGUgZm9yIHRoZXNl
IGlzc3VlczoKKysgICAgICAgIC8vIC0gc3ByaXZfY3Jvc3MgYWx3YXlzIHRyYW5zbGF0ZXMgc2hh
ZG93IHRleHR1cmUncyBzYW1wbGluZyB0byBzYW1wbGVfY29tcGFyZSgpIGFuZCBkb2Vzbid0Cisr
ICAgICAgICAvLyB0YWtlIGludG8gYWNjb3VudCBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERT1HTF9O
T05FLgorKyAgICAgICAgLy8gLSBvbiBtYWNPUywgZXhwbGljaXQgbGV2ZWwgb2YgZGV0YWlsIHBh
cmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGluIHNhbXBsZV9jb21wYXJlKCkuCisrICAgICAgICAv
LyAtIG9uIGRldmljZXMgcHJpb3IgdG8gaU9TIEdQVSBmYW1pbHkgMywgY2hhbmdpbmcgc2FtcGxl
cidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlciBpcworKyAgICAgICAgLy8gbm90IHN1cHBv
cnRlZC4KKysgICAgICAgIGlmICghbUNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMo
KS5hbGxvd1J1bnRpbWVTYW1wbGVyQ29tcGFyZU1vZGUuZW5hYmxlZCkKKysgICAgICAgIHsKKysg
ICAgICAgICAgICBzdGF0ZW1lbnQoIiNkZWZpbmUgQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElN
RV9DT01QQVJFX01PREUiKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIHN0YXRlbWVudCgiZW51
bSBjbGFzcyBBTkdMRUNvbXBhcmVNb2RlIDogdWludCIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBOb25lID0gMCwiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgIExlc3MsIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBMZXNzRXF1YWwsIik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBHcmVhdGVyLCIpOworKyAgICAgICAgc3RhdGVtZW50
KCIgICAgR3JlYXRlckVxdWFsLCIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgTmV2ZXIsIik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBBbHdheXMsIik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICBFcXVhbCwiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIE5vdEVxdWFsLCIpOworKyAg
ICAgICAgc3RhdGVtZW50KCJ9OyIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAg
ICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJ
bnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFY29tcGFyZShUIGRlcHRo
LCBUIGRyZWYsIFVuaWZvcm1PclVJbnQgY29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1l
bnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgQU5HTEVDb21wYXJlTW9kZSBtb2RlID0g
c3RhdGljX2Nhc3Q8QU5HTEVDb21wYXJlTW9kZT4oY29tcGFyZU1vZGUpOyIpOworKyAgICAgICAg
c3RhdGVtZW50KCIgICBzd2l0Y2ggKG1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgIHsi
KTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNlIEFOR0xFQ29tcGFyZU1vZGU6Okxl
c3M6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiBkcmVmIDwgZGVw
dGg7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2Rl
OjpMZXNzRXF1YWw6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAgIHJldHVybiBk
cmVmIDw9IGRlcHRoOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNhc2UgQU5HTEVD
b21wYXJlTW9kZTo6R3JlYXRlcjoiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICAgICAg
cmV0dXJuIGRyZWYgPiBkZXB0aDsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICBjYXNl
IEFOR0xFQ29tcGFyZU1vZGU6OkdyZWF0ZXJFcXVhbDoiKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgICAgICAgICAgcmV0dXJuIGRyZWYgPj0gZGVwdGg7Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICAgICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpOZXZlcjoiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgICAgICAgICAgcmV0dXJuIDA7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAg
ICAgY2FzZSBBTkdMRUNvbXBhcmVNb2RlOjpBbHdheXM6Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICAgICAgICAgIHJldHVybiAxOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIGNh
c2UgQU5HTEVDb21wYXJlTW9kZTo6RXF1YWw6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAg
ICAgICAgIHJldHVybiBkcmVmID09IGRlcHRoOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAg
ICAgIGNhc2UgQU5HTEVDb21wYXJlTW9kZTo6Tm90RXF1YWw6Iik7CisrICAgICAgICBzdGF0ZW1l
bnQoIiAgICAgICAgICAgIHJldHVybiBkcmVmICE9IGRlcHRoOyIpOworKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgIGRlZmF1bHQ6Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICAgICAgICAg
IHJldHVybiAxOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICB9Iik7CisrICAgICAgICBzdGF0
ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAgICBzdGF0ZW1l
bnQoIi8vIFdyYXBwZXIgZnVuY3Rpb25zIGZvciBzaGFkb3cgdGV4dHVyZSBmdW5jdGlvbnMiKTsK
KysgICAgICAgIC8vIDJEIFBDRiBzYW1wbGluZworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOwor
KyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVQQ0YoZGVwdGgyZDxUPiB0
ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxvYXQgIgorKyAgICAgICAgICAgICAg
ICAgICJjb21wYXJlX3ZhbHVlLCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJ
bnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiI2lmIGRlZmluZWQoX19NRVRBTF9NQUNPU19fKSIpOworKyAgICAgICAg
c3RhdGVtZW50KCIgICAgZmxvYXQyIGRpbXMgPSBmbG9hdDIodGV4dHVyZS5nZXRfd2lkdGgoKSwg
dGV4dHVyZS5nZXRfaGVpZ2h0KCkpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQy
IGltZ0Nvb3JkID0gY29vcmQgKiBkaW1zOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxv
YXQyIHRleGVsU2l6ZSA9IDEuMCAvIGRpbXM7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBm
bG9hdDIgd2VpZ2h0ID0gZnJhY3QoaW1nQ29vcmQpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgdGwgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQsIG9wdGlv
bnMsIG9mZnNldCksICIKKysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgc2hhZG93
Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgdHIgPSBBTkdM
RWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIodGV4ZWxTaXplLngsIDAu
MCksICIKKysgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1
ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQg
YmwgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIoMC4wLCB0
ZXhlbFNpemUueSksICIKKysgICAgICAgICAgICAgICAgICAib3B0aW9ucywgb2Zmc2V0KSwgY29t
cGFyZV92YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgYnIgPSBBTkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyB0ZXhl
bFNpemUsIG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAib2Zmc2V0KSwgY29tcGFyZV92
YWx1ZSwgc2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxv
YXQgdG9wID0gbWl4KHRsLCB0ciwgd2VpZ2h0LngpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIg
ICAgZmxvYXQgYm90dG9tID0gbWl4KGJsLCBiciwgd2VpZ2h0LngpOyIpOworKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgcmV0dXJuIG1peCh0b3AsIGJvdHRvbSwgd2VpZ2h0LnkpOyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIjZWxzZSAgLy8gaWYgZGVmaW5lZChfX01FVEFMX01BQ09TX18pIik7Cisr
ICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxl
KHMsIGNvb3JkLCBvcHRpb25zLCBvZmZzZXQpLCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBh
cmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2Vu
ZGlmICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIC8vIEN1YmUgUENG
IHNhbXBsaW5nCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
ImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0aGN1YmU8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1
ZSwgT3B0IG9wdGlvbnMsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAg
ICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIC8vIE5PVEUoaHFs
ZSk6IHRvIGltcGxlbWVudCIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xF
Y29tcGFyZSh0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb3B0aW9ucyksIGNvbXBhcmVfdmFsdWUs
ICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAg
c3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgLy8g
MkQgYXJyYXkgUENGIHNhbXBsaW5nCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoCisrICAgICAgICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZVBDRihkZXB0
aDJkX2FycmF5PFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCB1aW50ICIKKysg
ICAgICAgICAgICAiYXJyYXksIGZsb2F0IGNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBpbnQy
IG9mZnNldCwgVW5pZm9ybU9yVUludCAiCisrICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2Rl
KSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNpZiBk
ZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0
MiBkaW1zID0gZmxvYXQyKHRleHR1cmUuZ2V0X3dpZHRoKCksIHRleHR1cmUuZ2V0X2hlaWdodCgp
KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiBpbWdDb29yZCA9IGNvb3JkICog
ZGltczsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0MiB0ZXhlbFNpemUgPSAxLjAg
LyBkaW1zOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQyIHdlaWdodCA9IGZyYWN0
KGltZ0Nvb3JkKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGZsb2F0IHRsID0gQU5HTEVj
b21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkLCBhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwg
IgorKyAgICAgICAgICAgICAgICAgICJjb21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7
Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBmbG9hdCB0ciA9IEFOR0xFY29tcGFyZSh0ZXh0
dXJlLnNhbXBsZShzLCBjb29yZCArIGZsb2F0Mih0ZXhlbFNpemUueCwgMC4wKSwgIgorKyAgICAg
ICAgICAgICAgICAgICJhcnJheSwgb3B0aW9ucywgb2Zmc2V0KSwgY29tcGFyZV92YWx1ZSwgc2hh
ZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZmxvYXQgYmwgPSBB
TkdMRWNvbXBhcmUodGV4dHVyZS5zYW1wbGUocywgY29vcmQgKyBmbG9hdDIoMC4wLCB0ZXhlbFNp
emUueSksICIKKysgICAgICAgICAgICAgICAgICAiYXJyYXksIG9wdGlvbnMsIG9mZnNldCksIGNv
bXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgIGZsb2F0IGJyID0gQU5HTEVjb21wYXJlKHRleHR1cmUuc2FtcGxlKHMsIGNvb3JkICsgdGV4
ZWxTaXplLCBhcnJheSwgIgorKyAgICAgICAgICAgICAgICAgICJvcHRpb25zLCBvZmZzZXQpLCBj
b21wYXJlX3ZhbHVlLCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICBmbG9hdCB0b3AgPSBtaXgodGwsIHRyLCB3ZWlnaHQueCk7Iik7CisrICAgICAgICBzdGF0
ZW1lbnQoIiAgICBmbG9hdCBib3R0b20gPSBtaXgoYmwsIGJyLCB3ZWlnaHQueCk7Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gbWl4KHRvcCwgYm90dG9tLCB3ZWlnaHQueSk7Iik7
CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1Nf
XykiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRWNvbXBhcmUodGV4dHVy
ZS5zYW1wbGUocywgY29vcmQsIGFycmF5LCBvcHRpb25zLCBvZmZzZXQpLCAiCisrICAgICAgICAg
ICAgICAgICAgImNvbXBhcmVfdmFsdWUsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiI2VuZGlmICAvLyBpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAg
ICAgIC8vIDJEIHRleHR1cmUncyBzYW1wbGVfY29tcGFyZSgpIHdyYXBwZXIKKysgICAgICAgIHN0
YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE9wdCwgdHlwZW5hbWUgVW5p
Zm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJl
Q29tcGFyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBmbG9h
dCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIE9wdCBvcHRpb25zLCBpbnQy
IG9mZnNldCwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0
YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KAorKyAgICAgICAgICAgICIjaWYgZGVm
aW5lZChfX01FVEFMX01BQ09TX18pIHx8IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVO
VElNRV9DT01QQVJFX01PREUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5H
TEV0ZXh0dXJlUENGKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCBv
ZmZzZXQsICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAg
ICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMs
IG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworKyAgICAgICAgc3Rh
dGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVt
ZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3Jt
T3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmVDb21w
YXJlKGRlcHRoMmQ8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIGZsb2F0ICIK
KysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIFVuaWZvcm1P
clVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysg
ICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvcHRpb25zLCAiCisrICAgICAgICAgICAgICAgICAg
ImludDIoMCksIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIp
OworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0
ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBz
YW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgZmxvYXQgIgorKyAgICAgICAgICAgICAgICAgICJjb21w
YXJlX3ZhbHVlLCBpbnQyIG9mZnNldCwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSki
KTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVm
aW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29v
cmQsIGNvbXBhcmVfdmFsdWUsIGxldmVsKDApLCBvZmZzZXQsICIKKysgICAgICAgICAgICAgICAg
ICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywg
Y29vcmQsIGNvbXBhcmVfdmFsdWUsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNl
bmRpZiIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIp
OworKworKyAgICAgICAgLy8gQ3ViZSB0ZXh0dXJlJ3Mgc2FtcGxlX2NvbXBhcmUoKSB3cmFwcGVy
CisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBPcHQs
IHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoCisrICAgICAg
ICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUs
IHNhbXBsZXIgcywgZmxvYXQzIGNvb3JkLCBmbG9hdCAiCisrICAgICAgICAgICAgImNvbXBhcmVf
dmFsdWUsIE9wdCBvcHRpb25zLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOwor
KyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoCisrICAgICAgICAg
ICAgIiNpZiBkZWZpbmVkKF9fTUVUQUxfTUFDT1NfXykgfHwgZGVmaW5lZChBTkdMRV9NVExfTk9f
U0FNUExFUl9SVU5USU1FX0NPTVBBUkVfTU9ERSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiBBTkdMRXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUs
IG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIjZWxzZSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0
dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUocywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlv
bnMpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIjZW5kaWYiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgi
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoCisrICAgICAgICAgICAgImlubGluZSBUIEFOR0xFdGV4dHVyZUNvbXBhcmUo
ZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQzIGNvb3JkLCBmbG9hdCAiCisr
ICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1v
ZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2lm
IGRlZmluZWQoQU5HTEVfTVRMX05PX1NBTVBMRVJfUlVOVElNRV9DT01QQVJFX01PREUpIik7Cisr
ICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJlUENGKHRleHR1cmUsIHMs
IGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBsZXZlbCgwKSwgIgorKyAgICAgICAgICAgICAgICAgICJz
aGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbHNlIik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29y
ZCwgY29tcGFyZV92YWx1ZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRpZiIpOworKyAg
ICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAg
ICAgLy8gMkQgYXJyYXkgdGV4dHVyZSdzIHNhbXBsZV9jb21wYXJlKCkgd3JhcHBlcgorKyAgICAg
ICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFt
ZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRl
eHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIg
Y29vcmQsICIKKysgICAgICAgICAgICAgICAgICAidWludCBhcnJheSwgZmxvYXQgY29tcGFyZV92
YWx1ZSwgT3B0IG9wdGlvbnMsIGludDIgb2Zmc2V0LCBVbmlmb3JtT3JVSW50ICIKKysgICAgICAg
ICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsi
KTsKKysgICAgICAgIHN0YXRlbWVudCgKKysgICAgICAgICAgICAiI2lmIGRlZmluZWQoX19NRVRB
TF9NQUNPU19fKSB8fCBkZWZpbmVkKEFOR0xFX01UTF9OT19TQU1QTEVSX1JVTlRJTUVfQ09NUEFS
RV9NT0RFKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZVBD
Rih0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXksIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKysg
ICAgICAgICAgICAgICAgICAib2Zmc2V0LCBzaGFkb3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiNlbHNlIik7CisrICAgICAgICBzdGF0ZW1lbnQoCisrICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzLCBjb29yZCwgYXJyYXksIGNvbXBh
cmVfdmFsdWUsIG9wdGlvbnMsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiNlbmRp
ZiIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOwor
KworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgT3B0
LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUg
VCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDIgY29vcmQsICIKKysgICAgICAgICAgICAgICAgICAidWludCBhcnJheSwgZmxvYXQg
Y29tcGFyZV92YWx1ZSwgT3B0IG9wdGlvbnMsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1v
ZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBhcnJheSwgY29t
cGFyZV92YWx1ZSwgIgorKyAgICAgICAgICAgICAgICAgICJvcHRpb25zLCBpbnQyKDApLCBzaGFk
b3dDb21wYXJlTW9kZSk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0
YXRlbWVudCgiIik7CisrCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUg
VCBBTkdMRXRleHR1cmVDb21wYXJlKGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBz
LCBmbG9hdDIgY29vcmQsICIKKysgICAgICAgICAgICAgICAgICAidWludCBhcnJheSwgZmxvYXQg
Y29tcGFyZV92YWx1ZSwgaW50MiBvZmZzZXQsIFVuaWZvcm1PclVJbnQgIgorKyAgICAgICAgICAg
ICAgICAgICJzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIjaWYgZGVmaW5lZChBTkdMRV9NVExfTk9fU0FNUExFUl9SVU5U
SU1FX0NPTVBBUkVfTU9ERSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdM
RXRleHR1cmVQQ0YodGV4dHVyZSwgcywgY29vcmQsIGFycmF5LCBjb21wYXJlX3ZhbHVlLCBsZXZl
bCgwKSwgIgorKyAgICAgICAgICAgICAgICAgICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsi
KTsKKysgICAgICAgIHN0YXRlbWVudCgiI2Vsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92
YWx1ZSwgb2Zmc2V0KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiI2VuZGlmIik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAgICAv
LyAyRCB0ZXh0dXJlJ3MgZ2VuZXJpYyBzYW1wbGluZyBmdW5jdGlvbgorKyAgICAgICAgc3RhdGVt
ZW50KCIvLyBXcmFwcGVyIGZ1bmN0aW9ucyBmb3Igc2hhZG93IHRleHR1cmUgZnVuY3Rpb25zIik7
CisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVbmlm
b3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUo
ZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgaW50MiBvZmZzZXQs
ICIKKysgICAgICAgICAgICAgICAgICAiZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUlu
dCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgaWYgKHNoYWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgeyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdM
RXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3JkLCBjb21wYXJlX3ZhbHVlLCBvZmZzZXQs
ICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAg
c3RhdGVtZW50KCIgICAgfSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworKyAg
ICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzLCBjb29yZCwgb2Zmc2V0KTsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgifSIpOworKyAgICAgICAgc3RhdGVt
ZW50KCIiKTsKKysKKysgICAgICAgIHN0YXRlbWVudCgidGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlubGluZSBUIEFO
R0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQyIGNvb3JkLCBm
bG9hdCAiCisrICAgICAgICAgICAgICAgICAgImNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQg
c2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAg
IHN0YXRlbWVudCgiICAgIHJldHVybiBBTkdMRXRleHR1cmUodGV4dHVyZSwgcywgY29vcmQsIGlu
dDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKysgICAgICAgICAgICAgICAgICAic2hhZG93Q29tcGFy
ZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAgc3RhdGVtZW50KCJp
bmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZDxUPiB0ZXh0dXJlLCBzYW1wbGVyIHMsIGZsb2F0
MiBjb29yZCwgT3B0IG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAgICAiaW50MiBvZmZzZXQs
IGZsb2F0IGNvbXBhcmVfdmFsdWUsIFVuaWZvcm1PclVJbnQgc2hhZG93Q29tcGFyZU1vZGUpIik7
CisrICAgICAgICBzdGF0ZW1lbnQoInsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGlmIChz
aGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKysgICAg
ICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gQU5HTEV0ZXh0dXJlQ29tcGFyZSh0ZXh0dXJl
LCBzLCBjb29yZCwgY29tcGFyZV92YWx1ZSwgb3B0aW9ucywgIgorKyAgICAgICAgICAgICAgICAg
ICJvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAg
IH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUocywgY29vcmQsIG9wdGlvbnMsIG9mZnNldCk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQo
IiAgICB9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgi
Iik7CisrCisrICAgICAgICBzdGF0ZW1lbnQoInRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBPcHQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAgICBzdGF0ZW1lbnQoImlu
bGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aDJkPFQ+IHRleHR1cmUsIHNhbXBsZXIgcywgZmxvYXQy
IGNvb3JkLCBPcHQgb3B0aW9ucywgIgorKyAgICAgICAgICAgICAgICAgICJmbG9hdCBjb21wYXJl
X3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3Rh
dGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICByZXR1cm4gQU5HTEV0ZXh0dXJl
KHRleHR1cmUsIHMsIGNvb3JkLCBvcHRpb25zLCBpbnQyKDApLCBjb21wYXJlX3ZhbHVlLCAiCisr
ICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgifSIpOworKyAgICAgICAgc3RhdGVtZW50KCIiKTsKKysKKysgICAgICAgIC8vIEN1YmUg
dGV4dHVyZSdzIGdlbmVyaWMgc2FtcGxpbmcgZnVuY3Rpb24KKysgICAgICAgIHN0YXRlbWVudCgi
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFVuaWZvcm1PclVJbnQ+Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoImlubGluZSBUIEFOR0xFdGV4dHVyZShkZXB0aGN1YmU8VD4gdGV4dHVyZSwg
c2FtcGxlciBzLCBmbG9hdDMgY29vcmQsIGZsb2F0ICIKKysgICAgICAgICAgICAgICAgICAiY29t
cGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAg
IHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNoYWRvd0NvbXBh
cmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAgICAgc3RhdGVt
ZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUsIHMsIGNvb3Jk
LCBjb21wYXJlX3ZhbHVlLCAiCisrICAgICAgICAgICAgICAgICAgInNoYWRvd0NvbXBhcmVNb2Rl
KTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgIGVsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRl
bWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUocywgY29vcmQpOyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgfSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAg
c3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGhjdWJlPFQ+IHRleHR1cmUsIHNh
bXBsZXIgcywgZmxvYXQyIGNvb3JkLCBPcHQgIgorKyAgICAgICAgICAgICAgICAgICJvcHRpb25z
LCBmbG9hdCBjb21wYXJlX3ZhbHVlLCBVbmlmb3JtT3JVSW50IHNoYWRvd0NvbXBhcmVNb2RlKSIp
OworKyAgICAgICAgc3RhdGVtZW50KCJ7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICBpZiAo
c2hhZG93Q29tcGFyZU1vZGUpIik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB7Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiAgICAgICAgcmV0dXJuIEFOR0xFdGV4dHVyZUNvbXBhcmUodGV4dHVy
ZSwgcywgY29vcmQsIGNvbXBhcmVfdmFsdWUsIG9wdGlvbnMsICIKKysgICAgICAgICAgICAgICAg
ICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgfSIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgZWxzZSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAg
eyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
LCBjb29yZCwgb3B0aW9ucyk7Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiAgICB9Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIn0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiIik7CisrCisrICAgICAg
ICAvLyAyRCBhcnJheSB0ZXh0dXJlJ3MgZ2VuZXJpYyBzYW1wbGluZyBmdW5jdGlvbgorKyAgICAg
ICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5pZm9ybU9yVUlu
dD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJlKGRlcHRoMmRf
YXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIHVpbnQgIgorKyAgICAg
ICAgICAgICAgICAgICJhcnJheSwgaW50MiBvZmZzZXQsICIKKysgICAgICAgICAgICAgICAgICAi
ZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsK
KysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNo
YWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgIgorKyAgICAgICAgICAgICAgICAgICJv
ZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIH0i
KTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAgICAgIHN0YXRlbWVudCgi
ICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUocywgY29vcmQsIGFycmF5LCBvZmZzZXQpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAg
fSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAgICBzdGF0ZW1lbnQoIiIpOwor
KworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVW5p
Zm9ybU9yVUludD4iKTsKKysgICAgICAgIHN0YXRlbWVudCgiaW5saW5lIFQgQU5HTEV0ZXh0dXJl
KGRlcHRoMmRfYXJyYXk8VD4gdGV4dHVyZSwgc2FtcGxlciBzLCBmbG9hdDIgY29vcmQsIHVpbnQg
IgorKyAgICAgICAgICAgICAgICAgICJhcnJheSwgZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9y
bU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOwor
KyAgICAgICAgc3RhdGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZSh0ZXh0dXJlLCBzLCBj
b29yZCwgYXJyYXksIGludDIoMCksIGNvbXBhcmVfdmFsdWUsICIKKysgICAgICAgICAgICAgICAg
ICAic2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAg
ICAgICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAg
ICAgc3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0
dXJlLCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisrICAgICAgICAgICAgICAgICAg
ImFycmF5LCBPcHQgb3B0aW9ucywgaW50MiBvZmZzZXQsICIKKysgICAgICAgICAgICAgICAgICAi
ZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFkb3dDb21wYXJlTW9kZSkiKTsK
KysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgaWYgKHNo
YWRvd0NvbXBhcmVNb2RlKSIpOworKyAgICAgICAgc3RhdGVtZW50KCIgICAgeyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgICAgIHJldHVybiBBTkdMRXRleHR1cmVDb21wYXJlKHRleHR1cmUs
IHMsIGNvb3JkLCBhcnJheSwgY29tcGFyZV92YWx1ZSwgIgorKyAgICAgICAgICAgICAgICAgICJv
cHRpb25zLCBvZmZzZXQsIHNoYWRvd0NvbXBhcmVNb2RlKTsiKTsKKysgICAgICAgIHN0YXRlbWVu
dCgiICAgIH0iKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgIGVsc2UiKTsKKysgICAgICAgIHN0
YXRlbWVudCgiICAgIHsiKTsKKysgICAgICAgIHN0YXRlbWVudCgiICAgICAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUocywgY29vcmQsIGFycmF5LCBvcHRpb25zLCBvZmZzZXQpOyIpOworKyAgICAg
ICAgc3RhdGVtZW50KCIgICAgfSIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiIpOworKworKyAgICAgICAgc3RhdGVtZW50KCJ0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgT3B0LCB0eXBlbmFtZSBVbmlmb3JtT3JVSW50PiIpOworKyAgICAgICAg
c3RhdGVtZW50KCJpbmxpbmUgVCBBTkdMRXRleHR1cmUoZGVwdGgyZF9hcnJheTxUPiB0ZXh0dXJl
LCBzYW1wbGVyIHMsIGZsb2F0MiBjb29yZCwgdWludCAiCisrICAgICAgICAgICAgICAgICAgImFy
cmF5LCBPcHQgb3B0aW9ucywgZmxvYXQgY29tcGFyZV92YWx1ZSwgVW5pZm9ybU9yVUludCBzaGFk
b3dDb21wYXJlTW9kZSkiKTsKKysgICAgICAgIHN0YXRlbWVudCgieyIpOworKyAgICAgICAgc3Rh
dGVtZW50KCIgICAgcmV0dXJuIEFOR0xFdGV4dHVyZSh0ZXh0dXJlLCBzLCBjb29yZCwgYXJyYXks
IG9wdGlvbnMsIGludDIoMCksICIKKysgICAgICAgICAgICAgICAgICAiY29tcGFyZV92YWx1ZSwg
c2hhZG93Q29tcGFyZU1vZGUpOyIpOworKyAgICAgICAgc3RhdGVtZW50KCJ9Iik7CisrICAgICAg
ICBzdGF0ZW1lbnQoIiIpOworKyAgICB9CisrCisrICAgIHN0ZDo6c3RyaW5nIHRvX2Z1bmN0aW9u
X25hbWUoc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQgaW1nLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZSAmaW1nVHlwZSwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzRmV0Y2gsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc0dhdGhlciwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGlzUHJvaiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc0FycmF5T2Zmc2V0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc09mZnNldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGhhc0dyYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNE
cmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaW5Mb2QpIG92ZXJyaWRl
CisrICAgIHsKKysgICAgICAgIGlmICghaGFzRHJlZikKKysgICAgICAgIHsKKysgICAgICAgICAg
ICByZXR1cm4gc3BpcnZfY3Jvc3M6OkNvbXBpbGVyTVNMOjp0b19mdW5jdGlvbl9uYW1lKGltZywg
aW1nVHlwZSwgaXNGZXRjaCwgaXNHYXRoZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Byb2osIGhhc0FycmF5T2Zmc2V0
cywgaGFzT2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGFzR3JhZCwgaGFzRHJlZiwgbG9kLCBtaW5Mb2QpOworKyAg
ICAgICAgfQorKworKyAgICAgICAgLy8gVXNlIGN1c3RvbSBBTkdMRXRleHR1cmUgZnVuY3Rpb24g
aW5zdGVhZCBvZiB1c2luZyBidWlsdC1pbiBzYW1wbGVfY29tcGFyZSgpCisrICAgICAgICByZXR1
cm4gIkFOR0xFdGV4dHVyZSI7CisrICAgIH0KKysKKysgICAgc3RkOjpzdHJpbmcgdG9fZnVuY3Rp
b25fYXJncyhzcGlydl9jcm9zczo6VmFyaWFibGVJRCBpbWcsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3BpcnZfY3Jvc3M6OlNQSVJUeXBlICZpbWdUeXBlLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNGZXRjaCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzR2F0aGVyLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaXNQcm9qLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGNvb3JkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IGNvb3JkQ29tcG9uZW50cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBkcmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGdyYWRYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IGdyYWRZLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGxvZCwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBjb2Zmc2V0LAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBiaWFzLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvbXAsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3Qgc2FtcGxlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IG1pbmxvZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sICpwRm9yd2FyZCkgb3ZlcnJpZGUKKysgICAgeworKyAgICAgICAgYm9vbCBmb3J3YXJk
OworKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnc1dpdGhvdXREcmVmID0gc3BpcnZfY3Jvc3M6OkNv
bXBpbGVyTVNMOjp0b19mdW5jdGlvbl9hcmdzKAorKyAgICAgICAgICAgIGltZywgaW1nVHlwZSwg
aXNGZXRjaCwgaXNHYXRoZXIsIGlzUHJvaiwgY29vcmQsIGNvb3JkQ29tcG9uZW50cywgMCwgZ3Jh
ZFgsIGdyYWRZLCBsb2QsCisrICAgICAgICAgICAgY29mZnNldCwgb2Zmc2V0LCBiaWFzLCBjb21w
LCBzYW1wbGUsIG1pbmxvZCwgJmZvcndhcmQpOworKworKyAgICAgICAgaWYgKCFkcmVmKQorKyAg
ICAgICAgeworKyAgICAgICAgICAgIGlmIChwRm9yd2FyZCkKKysgICAgICAgICAgICB7CisrICAg
ICAgICAgICAgICAgICpwRm9yd2FyZCA9IGZvcndhcmQ7CisrICAgICAgICAgICAgfQorKyAgICAg
ICAgICAgIHJldHVybiBhcmdzV2l0aG91dERyZWY7CisrICAgICAgICB9CisrICAgICAgICAvLyBD
b252ZXJ0IHRvIGFyZ3VtZW50cyB0byBBTkdMRXRleHR1cmUuCisrICAgICAgICBzdGQ6OnN0cmlu
ZyBhcmdzID0gdG9fZXhwcmVzc2lvbihpbWcpOworKyAgICAgICAgYXJncyArPSAiLCAiOworKyAg
ICAgICAgYXJncyArPSBhcmdzV2l0aG91dERyZWY7CisrICAgICAgICBhcmdzICs9ICIsICI7Cisr
CisrICAgICAgICBmb3J3YXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZm9yd2Fy
ZCAmJiBzaG91bGRfZm9yd2FyZChkcmVmKTsKKysgICAgICAgIGNvbnN0IHNwaXJ2X2Nyb3NzOjpT
UElSVHlwZSAmZHJlZlR5cGUgPSBleHByZXNzaW9uX3R5cGUoZHJlZik7CisrICAgICAgICBzdGQ6
OnN0cmluZyBkcmVmRXhwcjsKKysgICAgICAgIHVpbnQzMl90IGFsdENvb3JkQ29tcG9uZW50ID0g
MDsKKysgICAgICAgIHN3aXRjaCAoaW1nVHlwZS5pbWFnZS5kaW0pCisrICAgICAgICB7CisrICAg
ICAgICAgICAgY2FzZSBzcHY6OkRpbTJEOgorKyAgICAgICAgICAgICAgICBhbHRDb29yZENvbXBv
bmVudCA9IDI7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2Ugc3B2
OjpEaW0zRDoKKysgICAgICAgICAgICBjYXNlIHNwdjo6RGltQ3ViZToKKysgICAgICAgICAgICAg
ICAgYWx0Q29vcmRDb21wb25lbnQgPSAzOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAg
ICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworKyAgICAg
ICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChpc1Byb2opCisrICAg
ICAgICAgICAgZHJlZkV4cHIgPSBzcGlydl9jcm9zczo6am9pbih0b19lbmNsb3NlZF9leHByZXNz
aW9uKGRyZWYpLCAiIC8gIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvX2V4dHJhY3RfY29tcG9uZW50X2V4cHJlc3Npb24oY29vcmQsIGFsdENvb3JkQ29tcG9u
ZW50KSk7CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgZHJlZkV4cHIgPSB0b19leHByZXNz
aW9uKGRyZWYpOworKworKyAgICAgICAgaWYgKGRyZWZUeXBlLmJhc2V0eXBlID09IHNwaXJ2X2Ny
b3NzOjpTUElSVHlwZTo6SGFsZikKKysgICAgICAgICAgICBkcmVmRXhwciA9IGNvbnZlcnRfdG9f
ZjMyKGRyZWZFeHByLCAxKTsKKysKKysgICAgICAgIGFyZ3MgKz0gZHJlZkV4cHI7CisrICAgICAg
ICBhcmdzICs9ICIsICI7CisrICAgICAgICBhcmdzICs9IHRvU2hhZG93Q29tcGFyZU1vZGVFeHBy
ZXNzaW9uKGltZyk7CisrCisrICAgICAgICBpZiAocEZvcndhcmQpCisrICAgICAgICB7CisrICAg
ICAgICAgICAgKnBGb3J3YXJkID0gZm9yd2FyZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJl
dHVybiBhcmdzOworKyAgICB9CisrCisrICAgIC8vIE92ZXJyaWRlIGZ1bmN0aW9uIHByb3RvdHlw
ZSBlbWl0dGVyIHRvIGluc2VydCBzaGFkb3cgY29tcGFyZSBtb2RlIGZsYWcgdG8gY29tZQorKyAg
ICAvLyB0b2dldGhlciB3aXRoIHRoZSBzaGFkb3cgc2FtcGxlci4gTk9URShocWxlKTogVGhpcyBp
cyBqdXN0IDkwJSBjb3B5IG9mIHNwaXJ2X21zbCdzIGNvZGUuCisrICAgIC8vIFRoZSBiZXR0ZXIg
d2F5IGlzIG1vZGlmeWluZyBhbmQgY3JlYXRpbmcgYSBQUiBvbiBzcGlydi1jcm9zcyByZXBvIGRp
cmVjdGx5LiBCdXQgdGhpcyBzaG91bGQKKysgICAgLy8gYmUgYSB3b3JrIGFyb3VuZCBzb2x1dGlv
biBmb3Igbm93LgorKyAgICB2b2lkIGVtaXRfZnVuY3Rpb25fcHJvdG90eXBlKHNwaXJ2X2Nyb3Nz
OjpTUElSRnVuY3Rpb24gJmZ1bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3BpcnZfY3Jvc3M6OkJpdHNldCAmKSBvdmVycmlkZQorKyAgICB7CisrICAgICAgICAv
LyBUdXJuIG9mZiBjbGFuZy1mb3JtYXQgdG8gZWFzaWVyIGNvbXBhcmUgd2l0aCBvcmlnaW5hbCBj
b2RlCisrICAgICAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCisrICAgICAgICB1c2luZyBuYW1lc3Bh
Y2Ugc3BpcnZfY3Jvc3M7CisrICAgICAgICB1c2luZyBuYW1lc3BhY2Ugc3B2OworKyAgICAgICAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKysKKysgICAgICAgIGlmIChmdW5jLnNlbGYgIT0gaXIuZGVm
YXVsdF9lbnRyeV9wb2ludCkKKysgICAgICAgICAgICBhZGRfZnVuY3Rpb25fb3ZlcmxvYWQoZnVu
Yyk7CisrCisrICAgICAgICBsb2NhbF92YXJpYWJsZV9uYW1lcyA9IHJlc291cmNlX25hbWVzOwor
KyAgICAgICAgc3RyaW5nIGRlY2w7CisrCisrICAgICAgICBwcm9jZXNzaW5nX2VudHJ5X3BvaW50
ID0gZnVuYy5zZWxmID09IGlyLmRlZmF1bHRfZW50cnlfcG9pbnQ7CisrCisrICAgICAgICAvLyBN
ZXRhbCBoZWxwZXIgZnVuY3Rpb25zIG11c3QgYmUgc3RhdGljIGZvcmNlLWlubGluZSBvdGhlcndp
c2UgdGhleSB3aWxsIGNhdXNlIHByb2JsZW1zIHdoZW4gbGlua2VkIHRvZ2V0aGVyIGluIGEgc2lu
Z2xlIE1ldGFsbGliLgorKyAgICAgICAgaWYgKCFwcm9jZXNzaW5nX2VudHJ5X3BvaW50KQorKyAg
ICAgICAgICAgIHN0YXRlbWVudCgic3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNf
aW5saW5lKSkiKTsKKysKKysgICAgICAgIGF1dG8gJnR5cGUgPSBnZXQ8U1BJUlR5cGU+KGZ1bmMu
cmV0dXJuX3R5cGUpOworKworKyAgICAgICAgaWYgKCF0eXBlLmFycmF5LmVtcHR5KCkgJiYgbXNs
X29wdGlvbnMuZm9yY2VfbmF0aXZlX2FycmF5cykKKysgICAgICAgIHsKKysgICAgICAgICAgICAv
LyBXZSBjYW5ub3QgcmV0dXJuIG5hdGl2ZSBhcnJheXMgaW4gTVNMLCBzbyAicmV0dXJuIiB0aHJv
dWdoIGFuIG91dCB2YXJpYWJsZS4KKysgICAgICAgICAgICBkZWNsICs9ICJ2b2lkIjsKKysgICAg
ICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBkZWNsICs9IGZ1
bmNfdHlwZV9kZWNsKHR5cGUpOworKyAgICAgICAgfQorKworKyAgICAgICAgZGVjbCArPSAiICI7
CisrICAgICAgICBkZWNsICs9IHRvX25hbWUoZnVuYy5zZWxmKTsKKysgICAgICAgIGRlY2wgKz0g
IigiOworKworKyAgICAgICAgaWYgKCF0eXBlLmFycmF5LmVtcHR5KCkgJiYgbXNsX29wdGlvbnMu
Zm9yY2VfbmF0aXZlX2FycmF5cykKKysgICAgICAgIHsKKysgICAgICAgICAgICAvLyBGYWtlIGFy
cmF5cyByZXR1cm5zIGJ5IHdyaXRpbmcgdG8gYW4gb3V0IGFycmF5IGluc3RlYWQuCisrICAgICAg
ICAgICAgZGVjbCArPSAidGhyZWFkICI7CisrICAgICAgICAgICAgZGVjbCArPSB0eXBlX3RvX2ds
c2wodHlwZSk7CisrICAgICAgICAgICAgZGVjbCArPSAiICgmU1BJUlZfQ3Jvc3NfcmV0dXJuX3Zh
bHVlKSI7CisrICAgICAgICAgICAgZGVjbCArPSB0eXBlX3RvX2FycmF5X2dsc2wodHlwZSk7Cisr
ICAgICAgICAgICAgaWYgKCFmdW5jLmFyZ3VtZW50cy5lbXB0eSgpKQorKyAgICAgICAgICAgICAg
ICBkZWNsICs9ICIsICI7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAocHJvY2Vzc2luZ19l
bnRyeV9wb2ludCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBpZiAobXNsX29wdGlvbnMuYXJn
dW1lbnRfYnVmZmVycykKKysgICAgICAgICAgICAgICAgZGVjbCArPSBlbnRyeV9wb2ludF9hcmdz
X2FyZ3VtZW50X2J1ZmZlcighZnVuYy5hcmd1bWVudHMuZW1wdHkoKSk7CisrICAgICAgICAgICAg
ZWxzZQorKyAgICAgICAgICAgICAgICBkZWNsICs9IGVudHJ5X3BvaW50X2FyZ3NfY2xhc3NpYygh
ZnVuYy5hcmd1bWVudHMuZW1wdHkoKSk7CisrCisrICAgICAgICAgICAgLy8gSWYgZW50cnkgcG9p
bnQgZnVuY3Rpb24gaGFzIHZhcmlhYmxlcyB0aGF0IHJlcXVpcmUgZWFybHkgZGVjbGFyYXRpb24s
CisrICAgICAgICAgICAgLy8gZW5zdXJlIHRoZXkgZWFjaCBoYXZlIGFuIGVtcHR5IGluaXRpYWxp
emVyLCBjcmVhdGluZyBvbmUgaWYgbmVlZGVkLgorKyAgICAgICAgICAgIC8vIFRoaXMgaXMgZG9u
ZSBhdCB0aGlzIGxhdGUgc3RhZ2UgYmVjYXVzZSB0aGUgaW5pdGlhbGl6YXRpb24gZXhwcmVzc2lv
bgorKyAgICAgICAgICAgIC8vIGlzIGNsZWFyZWQgYWZ0ZXIgZWFjaCBjb21waWxhdGlvbiBwYXNz
LgorKyAgICAgICAgICAgIGZvciAoYXV0byB2YXJfaWQgOiB2YXJzX25lZWRpbmdfZWFybHlfZGVj
bGFyYXRpb24pCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBhdXRvICZlZF92YXIg
PSBnZXQ8U1BJUlZhcmlhYmxlPih2YXJfaWQpOworKyAgICAgICAgICAgICAgICBJRCAmaW5pdGlh
bGl6ZXIgPSBlZF92YXIuaW5pdGlhbGl6ZXI7CisrICAgICAgICAgICAgICAgIGlmICghaW5pdGlh
bGl6ZXIpCisrICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplciA9IGlyLmluY3JlYXNlX2Jv
dW5kX2J5KDEpOworKworKyAgICAgICAgICAgICAgICAvLyBEbyBub3Qgb3ZlcnJpZGUgcHJvcGVy
IGluaXRpYWxpemVycy4KKysgICAgICAgICAgICAgICAgaWYgKGlyLmlkc1tpbml0aWFsaXplcl0u
Z2V0X3R5cGUoKSA9PSBUeXBlTm9uZSB8fCBpci5pZHNbaW5pdGlhbGl6ZXJdLmdldF90eXBlKCkg
PT0gVHlwZUV4cHJlc3Npb24pCisrICAgICAgICAgICAgICAgICAgICBzZXQ8U1BJUkV4cHJlc3Np
b24+KGVkX3Zhci5pbml0aWFsaXplciwgInt9IiwgZWRfdmFyLmJhc2V0eXBlLCB0cnVlKTsKKysg
ICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICBmb3IgKGF1dG8gJmFyZyA6IGZ1
bmMuYXJndW1lbnRzKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHVpbnQzMl90IG5hbWVfaWQg
PSBhcmcuaWQ7CisrCisrICAgICAgICAgICAgYXV0byAqdmFyID0gbWF5YmVfZ2V0PFNQSVJWYXJp
YWJsZT4oYXJnLmlkKTsKKysgICAgICAgICAgICBpZiAodmFyKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBtb2RpZnkgdGhlIG5hbWUgb2YgdGhlIHZh
cmlhYmxlLCBtYWtlIHN1cmUgd2UgbW9kaWZ5IHRoZSBvcmlnaW5hbCB2YXJpYWJsZS4KKysgICAg
ICAgICAgICAgICAgLy8gT3VyIGFsaWFzIGlzIGp1c3QgYSBzaGFkb3cgdmFyaWFibGUuCisrICAg
ICAgICAgICAgICAgIGlmIChhcmcuYWxpYXNfZ2xvYmFsX3ZhcmlhYmxlICYmIHZhci0+YmFzZXZh
cmlhYmxlKQorKyAgICAgICAgICAgICAgICAgICAgbmFtZV9pZCA9IHZhci0+YmFzZXZhcmlhYmxl
OworKworKyAgICAgICAgICAgICAgICB2YXItPnBhcmFtZXRlciA9ICZhcmc7IC8vIEhvbGQgYSBw
b2ludGVyIHRvIHRoZSBwYXJhbWV0ZXIgc28gd2UgY2FuIGludmFsaWRhdGUgdGhlIHJlYWRvbmx5
IGZpZWxkIGlmIG5lZWRlZC4KKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgYWRkX2xv
Y2FsX3ZhcmlhYmxlX25hbWUobmFtZV9pZCk7CisrCisrICAgICAgICAgICAgZGVjbCArPSBhcmd1
bWVudF9kZWNsKGFyZyk7CisrCisrICAgICAgICAgICAgYm9vbCBpc19keW5hbWljX2ltZ19zYW1w
bGVyID0gaGFzX2V4dGVuZGVkX2RlY29yYXRpb24oYXJnLmlkLCBTUElSVkNyb3NzRGVjb3JhdGlv
bkR5bmFtaWNJbWFnZVNhbXBsZXIpOworKworKyAgICAgICAgICAgIGF1dG8gJmFyZ190eXBlID0g
Z2V0PFNQSVJUeXBlPihhcmcudHlwZSk7CisrICAgICAgICAgICAgaWYgKGFyZ190eXBlLmJhc2V0
eXBlID09IFNQSVJUeXBlOjpTYW1wbGVkSW1hZ2UgJiYgIWlzX2R5bmFtaWNfaW1nX3NhbXBsZXIp
CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBNYW51ZmFjdHVyZSBhdXRvbWF0
aWMgcGxhbmUgYXJncyBmb3IgbXVsdGlwbGFuYXIgdGV4dHVyZQorKyAgICAgICAgICAgICAgICB1
aW50MzJfdCBwbGFuZXMgPSAxOworKyAgICAgICAgICAgICAgICBpZiAoYXV0byAqY29uc3RleHBy
X3NhbXBsZXIgPSBmaW5kX2NvbnN0ZXhwcl9zYW1wbGVyKG5hbWVfaWQpKQorKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbnN0ZXhwcl9zYW1wbGVyLT55Y2Jjcl9jb252ZXJzaW9uX2VuYWJsZSkK
KysgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZXMgPSBjb25zdGV4cHJfc2FtcGxlci0+cGxh
bmVzOworKyAgICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgcGxhbmVzOyBp
KyspCisrICAgICAgICAgICAgICAgICAgICBkZWNsICs9IGpvaW4oIiwgIiwgYXJndW1lbnRfZGVj
bChhcmcpLCBwbGFuZV9uYW1lX3N1ZmZpeCwgaSk7CisrCisrICAgICAgICAgICAgICAgIC8vIE1h
bnVmYWN0dXJlIGF1dG9tYXRpYyBzYW1wbGVyIGFyZyBmb3IgU2FtcGxlZEltYWdlIHRleHR1cmUK
KysgICAgICAgICAgICAgICAgaWYgKGFyZ190eXBlLmltYWdlLmRpbSAhPSBEaW1CdWZmZXIpCisr
ICAgICAgICAgICAgICAgICAgICBkZWNsICs9IGpvaW4oIiwgdGhyZWFkIGNvbnN0ICIsIHNhbXBs
ZXJfdHlwZShhcmdfdHlwZSksICIgIiwgdG9fc2FtcGxlcl9leHByZXNzaW9uKGFyZy5pZCkpOwor
KyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvLyBNYW51ZmFjdHVyZSBhdXRvbWF0aWMg
c3dpenpsZSBhcmcuCisrICAgICAgICAgICAgaWYgKG1zbF9vcHRpb25zLnN3aXp6bGVfdGV4dHVy
ZV9zYW1wbGVzICYmIGhhc19zYW1wbGVkX2ltYWdlcyAmJiBpc19zYW1wbGVkX2ltYWdlX3R5cGUo
YXJnX3R5cGUpICYmCisrICAgICAgICAgICAgICAgICFpc19keW5hbWljX2ltZ19zYW1wbGVyKQor
KyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJn
X3R5cGUuYXJyYXkuZW1wdHkoKTsKKysgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIsIGNv
bnN0YW50IHVpbnQiLCBhcmdfaXNfYXJyYXkgPyAiKiAiIDogIiYgIiwgdG9fc3dpenpsZV9leHBy
ZXNzaW9uKGFyZy5pZCkpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBpZiAoYnVm
ZmVyc19yZXF1aXJpbmdfYXJyYXlfbGVuZ3RoLmNvdW50KG5hbWVfaWQpKQorKyAgICAgICAgICAg
IHsKKysgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJyYXku
ZW1wdHkoKTsKKysgICAgICAgICAgICAgICAgZGVjbCArPSBqb2luKCIsIGNvbnN0YW50IHVpbnQi
LCBhcmdfaXNfYXJyYXkgPyAiKiAiIDogIiYgIiwgdG9fYnVmZmVyX3NpemVfZXhwcmVzc2lvbihu
YW1lX2lkKSk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGlmIChpc19zYW1wbGVk
X2ltYWdlX3R5cGUoYXJnX3R5cGUpICYmIGFyZ190eXBlLmltYWdlLmRlcHRoKQorKyAgICAgICAg
ICAgIHsKKysgICAgICAgICAgICAgICAgYm9vbCBhcmdfaXNfYXJyYXkgPSAhYXJnX3R5cGUuYXJy
YXkuZW1wdHkoKTsKKysgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1v
ZGUgZmxhZyB0byB0aGUgYXJndW1lbnQgc2VxdWVuY2U6CisrICAgICAgICAgICAgICAgIGRlY2wg
Kz0gam9pbigiLCBjb25zdGFudCB1bmlmb3JtPHVpbnQ+IiwgYXJnX2lzX2FycmF5ID8gIiogIiA6
ICImICIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1NoYWRvd0NvbXBhcmVNb2Rl
RXhwcmVzc2lvbihhcmcuaWQpKTsKKysgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgaWYg
KCZhcmcgIT0gJmZ1bmMuYXJndW1lbnRzLmJhY2soKSkKKysgICAgICAgICAgICAgICAgZGVjbCAr
PSAiLCAiOworKyAgICAgICAgfQorKworKyAgICAgICAgZGVjbCArPSAiKSI7CisrICAgICAgICBz
dGF0ZW1lbnQoZGVjbCk7CisrCisrICAgICAgICAvLyBjbGFuZy1mb3JtYXQgb24KKysgICAgfQor
KworKyAgICAvLyBPdmVycmlkZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cyBwYXNzaW5nIGdlbmVy
YXRvciB0byBpbnNlcnQgc2hhZG93IGNvbXBhcmUgbW9kZSBmbGFnIHRvIGNvbWUKKysgICAgLy8g
dG9nZXRoZXIgd2l0aCB0aGUgc2hhZG93IHNhbXBsZXIKKysgICAgc3RkOjpzdHJpbmcgdG9fZnVu
Y19jYWxsX2FyZyhjb25zdCBzcGlydl9jcm9zczo6U1BJUkZ1bmN0aW9uOjpQYXJhbWV0ZXIgJmFy
ZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpZCkgb3ZlcnJp
ZGUKKysgICAgeworKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnX3N0ciA9IHNwaXJ2X2Nyb3NzOjpD
b21waWxlck1TTDo6dG9fZnVuY19jYWxsX2FyZyhhcmcsIGlkKTsKKysKKysgICAgICAgIGNvbnN0
IHNwaXJ2X2Nyb3NzOjpTUElSVHlwZSAmdHlwZSA9IGV4cHJlc3Npb25fdHlwZShpZCk7CisrCisr
ICAgICAgICBpZiAoaXNfc2FtcGxlZF9pbWFnZV90eXBlKHR5cGUpICYmIHR5cGUuaW1hZ2UuZGVw
dGgpCisrICAgICAgICB7CisrICAgICAgICAgICAgLy8gSW5zZXJ0IHNoYWRvdyBjb21wYXJlIG1v
ZGUgZmxhZyB0byB0aGUgYXJndW1lbnQgc2VxdWVuY2U6CisrICAgICAgICAgICAgLy8gTmVlZCB0
byBjaGVjayB0aGUgYmFzZSB2YXJpYWJsZSBpbiBjYXNlIHdlIG5lZWQgdG8gYXBwbHkgYSBxdWFs
aWZpZWQgYWxpYXMuCisrICAgICAgICAgICAgdWludDMyX3QgdmFyX2lkID0gMDsKKysgICAgICAg
ICAgICBhdXRvICp2YXIgICAgICAgPSBtYXliZV9nZXQ8c3BpcnZfY3Jvc3M6OlNQSVJWYXJpYWJs
ZT4oaWQpOworKyAgICAgICAgICAgIGlmICh2YXIpCisrICAgICAgICAgICAgICAgIHZhcl9pZCA9
IHZhci0+YmFzZXZhcmlhYmxlOworKworKyAgICAgICAgICAgIGFyZ19zdHIgKz0gIiwgIiArIHRv
U2hhZG93Q29tcGFyZU1vZGVFeHByZXNzaW9uKHZhcl9pZCA/IHZhcl9pZCA6IGlkKTsKKysgICAg
ICAgIH0KKysgICAgICAgIHJldHVybiBhcmdfc3RyOworKyAgICB9CisrCisrICAgIC8vIEFkZGl0
aW9uYWwgZnVuY3Rpb25zCisrICAgIHZvaWQgYWRkQnVpbHRJblJlc291cmNlcygpCisrICAgIHsK
KysgICAgICAgIHVpbnQzMl90IHZhcklkID0gYnVpbGRfY29uc3RhbnRfdWludF9hcnJheV9wb2lu
dGVyKCk7CisrICAgICAgICBzZXRfbmFtZSh2YXJJZCwga1NoYWRvd1NhbXBsZXJDb21wYXJlTW9k
ZXNWYXJOYW1lKTsKKysgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIG1hdGNoIGFueXRoaW5n
LgorKyAgICAgICAgc2V0X2RlY29yYXRpb24odmFySWQsIHNwdjo6RGVjb3JhdGlvbkRlc2NyaXB0
b3JTZXQsIGtTaGFkb3dTYW1wbGVyQ29tcGFyZU1vZGVzQmluZGluZ0luZGV4KTsKKysgICAgICAg
IHNldF9kZWNvcmF0aW9uKHZhcklkLCBzcHY6OkRlY29yYXRpb25CaW5kaW5nLCAwKTsKKysgICAg
ICAgIHNldF9leHRlbmRlZF9kZWNvcmF0aW9uKHZhcklkLCBzcGlydl9jcm9zczo6U1BJUlZDcm9z
c0RlY29yYXRpb25SZXNvdXJjZUluZGV4UHJpbWFyeSwgMCk7CisrICAgICAgICBtQU5HTEVTaGFk
b3dDb21wYXJlTW9kZXNWYXJJZCA9IHZhcklkOworKyAgICB9CisrCisrICAgIHZvaWQgYW5hbHl6
ZVNoYWRlclZhcmlhYmxlcygpCisrICAgIHsKKysgICAgICAgIGlyLmZvcl9lYWNoX3R5cGVkX2lk
PHNwaXJ2X2Nyb3NzOjpTUElSVmFyaWFibGU+KFt0aGlzXSh1aW50MzJfdCwKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGly
dl9jcm9zczo6U1BJUlZhcmlhYmxlICZ2YXIpIHsKKysgICAgICAgICAgICBjb25zdCBzcGlydl9j
cm9zczo6U1BJUlR5cGUgJnR5cGUgPSBnZXRfdmFyaWFibGVfZGF0YV90eXBlKHZhcik7CisrICAg
ICAgICAgICAgdWludDMyX3QgdmFySWQgICAgICAgICAgICAgICAgICAgID0gdmFyLnNlbGY7Cisr
CisrICAgICAgICAgICAgaWYgKHZhci5zdG9yYWdlID09IHNwdjo6U3RvcmFnZUNsYXNzVW5pZm9y
bUNvbnN0YW50ICYmICFpc19oaWRkZW5fdmFyaWFibGUodmFyKSkKKysgICAgICAgICAgICB7Cisr
ICAgICAgICAgICAgICAgIGlmIChpc19zYW1wbGVkX2ltYWdlX3R5cGUodHlwZSkgJiYgdHlwZS5p
bWFnZS5kZXB0aCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgbUhh
c0RlcHRoU2FtcGxlciA9IHRydWU7CisrCisrICAgICAgICAgICAgICAgICAgICBhdXRvICZlbnRy
eV9mdW5jID0gdGhpcy0+Z2V0PHNwaXJ2X2Nyb3NzOjpTUElSRnVuY3Rpb24+KGlyLmRlZmF1bHRf
ZW50cnlfcG9pbnQpOworKyAgICAgICAgICAgICAgICAgICAgZW50cnlfZnVuYy5maXh1cF9ob29r
c19pbi5wdXNoX2JhY2soW3RoaXMsICZ0eXBlLCAmdmFyLCB2YXJJZF0oKSB7CisrICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpc0FycmF5VHlwZSA9ICF0eXBlLmFycmF5LmVtcHR5KCk7Cisr
CisrICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50KCJjb25zdGFudCB1bmlmb3JtPHVp
bnQ+IiwgaXNBcnJheVR5cGUgPyAiKiAiIDogIiYgIiwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9TaGFkb3dDb21wYXJlTW9kZUV4cHJlc3Npb24odmFySWQpLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FycmF5VHlwZSA/ICIgPSAmIiA6ICIgPSAi
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19uYW1lKG1BTkdMRVNoYWRv
d0NvbXBhcmVNb2Rlc1ZhcklkKSwgIlsiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzcGlydl9jcm9zczo6Y29udmVydF90b19zdHJpbmcoCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXRfbWV0YWxfcmVzb3VyY2VfaW5kZXgodmFyLCBzcGlydl9j
cm9zczo6U1BJUlR5cGU6OkltYWdlKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJdOyIpOworKyAgICAgICAgICAgICAgICAgICAgfSk7CisrICAgICAgICAgICAgICAgIH0K
KysgICAgICAgICAgICB9CisrICAgICAgICB9KTsKKysgICAgfQorKworKyAgICBzdGQ6OnN0cmlu
ZyB0b1NoYWRvd0NvbXBhcmVNb2RlRXhwcmVzc2lvbih1aW50MzJfdCBpZCkKKysgICAgeworKyAg
ICAgICAgY29uc3RleHByIGNoYXIga0NvbXBhcmVNb2RlU3VmZml4W10gPSAiX0NvbXBNb2RlIjsK
KysgICAgICAgIGF1dG8gKmNvbWJpbmVkICAgICAgICAgICAgICAgICAgICAgID0gbWF5YmVfZ2V0
PHNwaXJ2X2Nyb3NzOjpTUElSQ29tYmluZWRJbWFnZVNhbXBsZXI+KGlkKTsKKysKKysgICAgICAg
IHN0ZDo6c3RyaW5nIGV4cHIgPSB0b19leHByZXNzaW9uKGNvbWJpbmVkID8gY29tYmluZWQtPmlt
YWdlIDogc3BpcnZfY3Jvc3M6OlZhcmlhYmxlSUQoaWQpKTsKKysgICAgICAgIGF1dG8gaW5kZXgg
ICAgICAgPSBleHByLmZpbmRfZmlyc3Rfb2YoJ1snKTsKKysKKysgICAgICAgIGlmIChpbmRleCA9
PSBzdGQ6OnN0cmluZzo6bnBvcykKKysgICAgICAgICAgICByZXR1cm4gZXhwciArIGtDb21wYXJl
TW9kZVN1ZmZpeDsKKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICBhdXRv
IGltYWdlRXhwciA9IGV4cHIuc3Vic3RyKDAsIGluZGV4KTsKKysgICAgICAgICAgICBhdXRvIGFy
cmF5RXhwciA9IGV4cHIuc3Vic3RyKGluZGV4KTsKKysgICAgICAgICAgICByZXR1cm4gaW1hZ2VF
eHByICsga0NvbXBhcmVNb2RlU3VmZml4ICsgYXJyYXlFeHByOworKyAgICAgICAgfQorKyAgICB9
CisrCisrICAgIENvbnRleHQgKm1Db250ZXh0OworKyAgICB1aW50MzJfdCBtQU5HTEVTaGFkb3dD
b21wYXJlTW9kZXNWYXJJZCA9IDA7CisrICAgIGJvb2wgbUhhc0RlcHRoU2FtcGxlciAgICAgICAg
ICAgICAgICAgID0gZmFsc2U7CisgfTsKKyAKKy1hbmdsZTo6UmVzdWx0IENvbnZlcnRTcGlydlRv
TXNsKAorLSAgICBDb250ZXh0ICpjb250ZXh0LAorK2FuZ2xlOjpSZXN1bHQgQ29udmVydFNwaXJ2
VG9Nc2woQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCistICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21h
cDxzdGQ6OnN0cmluZywgdWludDMyX3Q+ICZ1Ym9PcmlnaW5hbEJpbmRpbmdzLAorLSAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9tYXA8dWludDMyX3QsIHVpbnQzMl90PiAmeGZiT3JpZ2luYWxCaW5k
aW5ncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuZ2xlOjpIYXNo
TWFwPHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gJnVib09yaWdpbmFsQmluZGluZ3MsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmdsZTo6SGFzaE1hcDx1aW50MzJfdCwg
dWludDMyX3Q+ICZ4ZmJPcmlnaW5hbEJpbmRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgT3JpZ2luYWxTYW1wbGVyQmluZGluZ01hcCAmb3JpZ2luYWxTYW1wbGVy
QmluZGluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjx1
aW50MzJfdD4gKnNwcml2Q29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YW5zbGF0ZWRTaGFkZXJJbmZvICp0cmFuc2xhdGVkU2hhZGVySW5mb091dCkKK0BAIC0zNjQsNyAr
MTEwMCw3IEBAIHZvaWQgY29tcGlsZUV4KGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgICAg
ICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgICAgIH0KKyAKKy0gICAgU3Bp
cnZUb01zbENvbXBpbGVyIGNvbXBpbGVyTXNsKHN0ZDo6bW92ZSgqc3ByaXZDb2RlKSk7CisrICAg
IFNwaXJ2VG9Nc2xDb21waWxlciBjb21waWxlck1zbChjb250ZXh0LCBzdGQ6Om1vdmUoKnNwcml2
Q29kZSkpOworIAorICAgICAvLyBOT1RFKGhxbGUpOiBzcGlydi1jcm9zcyB1c2VzIGV4Y2VwdGlv
bnMgdG8gcmVwb3J0IGVycm9yLCB3aGF0IHNob3VsZCB3ZSBkbyBoZXJlCisgICAgIC8vIGluIGNh
c2Ugb2YgZXJyb3I/CitAQCAtNDMxLDEyICsxMTY3LDEzIEBAIHZvaWQgR2xzbGFuZ0dldFNoYWRl
clNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAgICAgICAg
ICAgb3B0aW9ucywgcHJvZ3JhbVN0YXRlLCAmeGZiT25seUludGVyZmFjZUluZm8sIHhmYk9ubHlT
aGFkZXJTb3VyY2VPdXQsCisgICAgICAgICAgICAgJnhmYk9ubHlWYXJpYWJsZU1hcHNbZ2w6OlNo
YWRlclR5cGU6OlZlcnRleF0pOworIAorLSAgICAgICAgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhv
cHRpb25zLCBwcm9ncmFtU3RhdGUuZ2V0RXhlY3V0YWJsZSgpLCBnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeGZiT25seUludGVyZmFjZUlu
Zm8sICZ4ZmJPbmx5VmFyaWFibGVNYXBzKTsKKysgICAgICAgIEdsc2xhbmdBc3NpZ25Mb2NhdGlv
bnMob3B0aW9ucywgcHJvZ3JhbVN0YXRlLmdldEV4ZWN1dGFibGUoKSwgZ2w6OlNoYWRlclR5cGU6
OlZlcnRleCwgJnhmYk9ubHlJbnRlcmZhY2VJbmZvLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmeGZiT25seVZhcmlhYmxlTWFwcyk7CisgICAgICAgICAqeGZiT25seVZTVmFyaWFi
bGVJbmZvTWFwT3V0ID0gc3RkOjptb3ZlKHhmYk9ubHlWYXJpYWJsZU1hcHNbZ2w6OlNoYWRlclR5
cGU6OlZlcnRleF0pOworICAgICB9CisgfQorIAorKworIGFuZ2xlOjpSZXN1bHQgR2xzbGFuZ0dl
dFNoYWRlclNwaXJ2Q29kZShFcnJvckhhbmRsZXIgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJCaXRTZXQgJmxpbmtlZFNo
YWRlclN0YWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OkNhcHMgJmdsQ2FwcywKK0BAIC00NzgsNyArMTIxNSw3IEBAIHZvaWQgR2xzbGFuZ0dl
dFNoYWRlclNvdXJjZShjb25zdCBnbDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVkU2hhZGVySW5mbyAqbXNsWGZiT25s
eVNoYWRlckluZm9PdXQgLyoqIG51bGxhYmxlICovKQorIHsKKyAgICAgLy8gUmV0cmlldmUgb3Jp
Z2luYWwgdW5pZm9ybSBidWZmZXIgYmluZGluZ3MgZ2VuZXJhdGVkIGJ5IGZyb250IGVuZC4gV2Ug
d2lsbCBuZWVkIHRvIGRvIGEgcmVtYXAuCistICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0
cmluZywgdWludDMyX3Q+IHVib09yaWdpbmFsQmluZGluZ3M7CisrICAgIGFuZ2xlOjpIYXNoTWFw
PHN0ZDo6c3RyaW5nLCB1aW50MzJfdD4gdWJvT3JpZ2luYWxCaW5kaW5nczsKKyAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmYmxvY2tzID0gcHJvZ3JhbVN0YXRlLmdl
dFVuaWZvcm1CbG9ja3MoKTsKKyAgICAgZm9yICh1aW50MzJfdCBidWZmZXJJZHggPSAwOyBidWZm
ZXJJZHggPCBibG9ja3Muc2l6ZSgpOyArK2J1ZmZlcklkeCkKKyAgICAgeworQEAgLTQ4OSw3ICsx
MjI2LDcgQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFtU3Rh
dGUgJnByb2dyYW1TdGF0ZSwKKyAgICAgICAgIH0KKyAgICAgfQorICAgICAvLyBSZXRyaWV2ZSBv
cmlnaW5hbCBYRkIgYnVmZmVycyBiaW5kaW5ncyBwcm9kdWNlZCBieSBmcm9udCBlbmQuCistICAg
IHN0ZDo6dW5vcmRlcmVkX21hcDx1aW50MzJfdCwgdWludDMyX3Q+IHhmYk9yaWdpbmFsQmluZGlu
Z3M7CisrICAgIGFuZ2xlOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MzJfdD4geGZiT3JpZ2luYWxC
aW5kaW5nczsKKyAgICAgZm9yICh1aW50MzJfdCBidWZmZXJJZHggPSAwOyBidWZmZXJJZHggPCBr
TWF4U2hhZGVyWEZCczsgKytidWZmZXJJZHgpCisgICAgIHsKKyAgICAgICAgIHN0ZDo6c3RyaW5n
IGJ1ZmZlck5hbWUgPSByeDo6R2V0WGZiQnVmZmVyTmFtZShidWZmZXJJZHgpOworQEAgLTUzMyw2
ICsxMjcwLDUgQEAgdm9pZCBHbHNsYW5nR2V0U2hhZGVyU291cmNlKGNvbnN0IGdsOjpQcm9ncmFt
U3RhdGUgJnByb2dyYW1TdGF0ZSwKKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRp
bnVlOworIH0KKy0KKyB9ICAvLyBuYW1lc3BhY2UgbXRsCisgfSAgLy8gbmFtZXNwYWNlIHJ4Citk
aWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5oIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVl
cnlfcG9vbC5oCitpbmRleCA4N2RjMjE3Li5mODU3MDM0IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5oCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgKK0BAIC0x
LDUgKzEsNSBAQAorIC8vCistLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysvLyBDb3B5cmlnaHQgKGMpIDIwMjAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisgLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAvLworZGlmZiAtLWdpdCBhL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfb2NjbHVzaW9uX3F1ZXJ5X3Bvb2wubW0gYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLm1tCitp
bmRleCAzNjhkYmY0Li43Y2M4OTkwIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbQorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9vY2NsdXNpb25fcXVlcnlfcG9vbC5tbQorQEAgLTEsNSArMSw1IEBA
CisgLy8KKy0vLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorKy8vIENvcHlyaWdodCAoYykgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCitAQCAtNTIsOCArNTIsNyBAQAorICAgICB7
CisgICAgICAgICAvLyBGaXJzdCBhbGxvY2F0aW9uCisgICAgICAgICBBTkdMRV9UUlkoQnVmZmVy
OjpNYWtlQnVmZmVyV2l0aFJlc09wdChjb250ZXh0TXRsLCBNVExSZXNvdXJjZVN0b3JhZ2VNb2Rl
UHJpdmF0ZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtPY2NsdXNpb25RdWVyeVJlc3VsdFNpemUsIG51bGxwdHIsCistICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOwor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrT2NjbHVzaW9uUXVlcnlSZXN1
bHRTaXplLCBudWxscHRyLCAmbVJlbmRlclBhc3NSZXN1bHRzUG9vbCkpOworICAgICAgICAgbVJl
bmRlclBhc3NSZXN1bHRzUG9vbC0+Z2V0KCkubGFiZWwgPSBAIk9jY2x1c2lvblF1ZXJ5UG9vbCI7
CisgICAgIH0KKyAgICAgZWxzZSBpZiAoY3VycmVudE9mZnNldCArIGtPY2NsdXNpb25RdWVyeVJl
c3VsdFNpemUgPiBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLT5zaXplKCkpCitAQCAtODgsNiArODcs
MTIgQEAKKyAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPT0gMCkKKyAgICAgeworICAgICAgICAgbVJl
c2V0Rmlyc3RRdWVyeSA9IGNsZWFyT2xkVmFsdWU7CisrICAgICAgICBpZiAoIWNsZWFyT2xkVmFs
dWUgJiYgIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd0J1ZmZl
clJlYWRXcml0ZS5lbmFibGVkKQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIElmIG9sZCB2
YWx1ZSBvZiBmaXJzdCBxdWVyeSBuZWVkcyB0byBiZSByZXRhaW5lZCBhbmQgZGV2aWNlIGRvZXNu
J3Qgc3VwcG9ydCBidWZmZXIKKysgICAgICAgICAgICAvLyByZWFkLXdyaXRlLCB3ZSBuZWVkIGFu
IGFkZGl0aW9uYWwgb2Zmc2V0IHRvIHN0b3JlIHRoZSBvbGQgdmFsdWUgb2YgdGhlIHF1ZXJ5Lgor
KyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KGNvbnRleHRNdGwsIHF1ZXJ5
LCBmYWxzZSk7CisrICAgICAgICB9CisgICAgIH0KKyAKKyAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1
bHQ6OkNvbnRpbnVlOworQEAgLTExMyw5ICsxMTgsMzMgQEAKKyAgICAgfQorIAorICAgICBSZW5k
ZXJVdGlscyAmdXRpbHMgICAgICAgICAgICAgID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpLT5n
ZXRVdGlscygpOworKyAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gbnVsbHB0
cjsKKysgICAgLy8gQ29tYmluZSB0aGUgdmFsdWVzIHN0b3JlZCBpbiB0aGUgb2Zmc2V0cyBhbGxv
Y2F0ZWQgZm9yIGZpcnN0IHF1ZXJ5CisrICAgIGlmIChtQWxsb2NhdGVkUXVlcmllc1swXSkKKysg
ICAgeworKyAgICAgICAgY29uc3QgQnVmZmVyUmVmICZkc3RCdWYgPSBtQWxsb2NhdGVkUXVlcmll
c1swXS0+Z2V0VmlzaWJpbGl0eVJlc3VsdEJ1ZmZlcigpOworKyAgICAgICAgY29uc3QgVmlzaWJp
bGl0eUJ1ZmZlck9mZnNldHNNdGwgJmFsbG9jYXRlZE9mZnNldHMgPQorKyAgICAgICAgICAgIG1B
bGxvY2F0ZWRRdWVyaWVzWzBdLT5nZXRBbGxvY2F0ZWRWaXNpYmlsaXR5T2Zmc2V0cygpOworKyAg
ICAgICAgaWYgKCFtUmVzZXRGaXJzdFF1ZXJ5ICYmCisrICAgICAgICAgICAgIWNvbnRleHRNdGwt
PmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd0J1ZmZlclJlYWRXcml0ZS5lbmFibGVk
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCByZWFkIGFuZCB3cml0
ZSB0byB0aGUgc2FtZSBidWZmZXIgaW4gc2hhZGVyLiBXZSBuZWVkIHRvIGNvcHkgdGhlIG9sZAor
KyAgICAgICAgICAgIC8vIHZhbHVlIG9mIGZpcnN0IHF1ZXJ5IHRvIGZpcnN0IG9mZnNldCBhbGxv
Y2F0ZWQgZm9yIGl0LgorKyAgICAgICAgICAgIGJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0
QmxpdENvbW1hbmRFbmNvZGVyKCk7CisrICAgICAgICAgICAgYmxpdEVuY29kZXItPmNvcHlCdWZm
ZXIoZHN0QnVmLCAwLCBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBhbGxvY2F0ZWRPZmZzZXRzLmZy
b250KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga09jY2x1c2lvblF1
ZXJ5UmVzdWx0U2l6ZSk7CisrICAgICAgICAgICAgdXRpbHMuY29tYmluZVZpc2liaWxpdHlSZXN1
bHQoY29udGV4dE10bCwgZmFsc2UsIGFsbG9jYXRlZE9mZnNldHMsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlclBhc3NSZXN1bHRzUG9vbCwgZHN0QnVm
KTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgICB1
dGlscy5jb21iaW5lVmlzaWJpbGl0eVJlc3VsdChjb250ZXh0TXRsLCAhbVJlc2V0Rmlyc3RRdWVy
eSwgYWxsb2NhdGVkT2Zmc2V0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLCBkc3RCdWYpOworKyAgICAgICAgfQorKyAg
ICB9CisgCisgICAgIC8vIENvbWJpbmUgdGhlIHZhbHVlcyBzdG9yZWQgaW4gdGhlIG9mZnNldHMg
YWxsb2NhdGVkIGZvciBlYWNoIG9mIHRoZSByZW1haW5pbmcgcXVlcmllcworLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1BbGxvY2F0ZWRRdWVyaWVzLnNpemUoKTsgKytpKQorKyAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8IG1BbGxvY2F0ZWRRdWVyaWVzLnNpemUoKTsgKytpKQorICAgICB7
CisgICAgICAgICBRdWVyeU10bCAqcXVlcnkgPSBtQWxsb2NhdGVkUXVlcmllc1tpXTsKKyAgICAg
ICAgIGlmICghcXVlcnkpCitAQCAtMTI2LDEyICsxNTUsMTIgQEAKKyAgICAgICAgIGNvbnN0IEJ1
ZmZlclJlZiAmZHN0QnVmID0gbUFsbG9jYXRlZFF1ZXJpZXNbaV0tPmdldFZpc2liaWxpdHlSZXN1
bHRCdWZmZXIoKTsKKyAgICAgICAgIGNvbnN0IFZpc2liaWxpdHlCdWZmZXJPZmZzZXRzTXRsICZh
bGxvY2F0ZWRPZmZzZXRzID0KKyAgICAgICAgICAgICBtQWxsb2NhdGVkUXVlcmllc1tpXS0+Z2V0
QWxsb2NhdGVkVmlzaWJpbGl0eU9mZnNldHMoKTsKKy0gICAgICAgIHV0aWxzLmNvbWJpbmVWaXNp
YmlsaXR5UmVzdWx0KGNvbnRleHRNdGwsIC8qKiBrZWVwT2xkVmFsdWUgKi8gaSA9PSAwICYmICFt
UmVzZXRGaXJzdFF1ZXJ5LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWxsb2NhdGVkT2Zmc2V0cywgbVJlbmRlclBhc3NSZXN1bHRzUG9vbCwgZHN0QnVmKTsKKysgICAg
ICAgIHV0aWxzLmNvbWJpbmVWaXNpYmlsaXR5UmVzdWx0KGNvbnRleHRNdGwsIGZhbHNlLCBhbGxv
Y2F0ZWRPZmZzZXRzLCBtUmVuZGVyUGFzc1Jlc3VsdHNQb29sLAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0QnVmKTsKKyAgICAgfQorIAorICAgICAvLyBSZXF1ZXN0
IHN5bmNocm9uaXphdGlvbiBhbmQgY2xlYW51cAorLSAgICBCbGl0Q29tbWFuZEVuY29kZXIgKmJs
aXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7CisrICAgIGJs
aXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRFbmNvZGVyKCk7CisgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbUFsbG9jYXRlZFF1ZXJpZXMuc2l6ZSgpOyArK2kpCisgICAg
IHsKKyAgICAgICAgIFF1ZXJ5TXRsICpxdWVyeSA9IG1BbGxvY2F0ZWRRdWVyaWVzW2ldOworZGlm
ZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLmgg
Yi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5oCitpbmRleCA2
Yjk2N2RlLi5kMGE0ODM3IDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9yZW5kZXJfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210
bF9yZW5kZXJfdXRpbHMuaAorQEAgLTYsNiArNiw4IEBACisgLy8gbXRsX3JlbmRlcl91dGlscy5o
OgorIC8vICAgIERlZmluZXMgdGhlIGNsYXNzIGludGVyZmFjZSBmb3IgUmVuZGVyVXRpbHMsIHdo
aWNoIGNvbnRhaW5zIG1hbnkgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHNoYWRlcnMKKyAvLyAgICBm
b3IgY29udmVydGluZywgYmxpdHRpbmcsIGNvcHlpbmcgYXMgd2VsbCBhcyBnZW5lcmF0aW5nIGRh
dGEsIGFuZCBtYW55IG1vcmUuCisrLy8gTk9URShocWxlKTogQ29uc2lkZXIgc3BsaXR0aW5nIHRo
aXMgY2xhc3MgaW50byBtdWx0aXBsZSBjbGFzc2VzIGVhY2ggZG9pbmcgZGlmZmVyZW50IHV0aWxp
dGllcy4KKysvLyBUaGlzIGNsYXNzIGhhcyBiZWNvbWUgdG9vIGJpZy4KKyAvLworIAorICNpZm5k
ZWYgTElCQU5HTEVfUkVOREVSRVJfTUVUQUxfTVRMX1JFTkRFUl9VVElMU19IXworQEAgLTg5LDYg
KzkxLDggQEAgc3RydWN0IENvbG9yQmxpdFBhcmFtcyA6IHB1YmxpYyBCbGl0UGFyYW1zCisgc3Ry
dWN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMgOiBwdWJsaWMgQmxpdFBhcmFtcworIHsKKyAgICAg
VGV4dHVyZVJlZiBzcmNTdGVuY2lsOworKyAgICB1aW50MzJfdCBzcmNTdGVuY2lsTGV2ZWwgPSAw
OworKyAgICB1aW50MzJfdCBzcmNTdGVuY2lsTGF5ZXIgPSAwOworIH07CisgCisgLy8gU3RlbmNp
bCBibGl0IHZpYSBhbiBpbnRlcm1lZGlhdGUgYnVmZmVyLiBOT1RFOiBzb3VyY2UgZGVwdGggdGV4
dHVyZSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KK0BAIC0zMDksMjEgKzMxMywxNyBAQCBjbGFzcyBJ
bmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICBwdWJsaWM6
CisgICAgIHZvaWQgb25EZXN0cm95KCk7CisgCistICAgIC8vIENvbnZlcnQgaW5kZXggYnVmZmVy
LgorICAgICBhbmdsZTo6UmVzdWx0IGNvbnZlcnRJbmRleEJ1ZmZlckdQVShDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbmRleENvbnZlcnNpb25QYXJhbXMgJnBhcmFtcyk7CistICAgIC8vIEdlbmVyYXRlIHRyaWFu
Z2xlIGZhbiBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5cygpLgorICAgICBhbmdsZTo6UmVz
dWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOworICAgICAvLyBHZW5l
cmF0ZSB0cmlhbmdsZSBmYW4gaW5kZXggYnVmZmVyIGZvciBnbERyYXdFbGVtZW50cygpLgorICAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1z
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmluZGlj
ZXNHZW5lcmF0ZWQpOworIAorLSAgICAvLyBHZW5lcmF0ZSBsaW5lIGxvb3AgaW5kZXggYnVmZmVy
IGZvciBnbERyYXdBcnJheXMoKS4KKyAgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29w
QnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpjb250ZXh0TXRsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRyaUZhbk9yTGluZUxv
b3BGcm9tQXJyYXlQYXJhbXMgJnBhcmFtcyk7CistICAgIC8vIEdlbmVyYXRlIGxpbmUgbG9vcCdz
IGxhc3Qgc2VnbWVudCBpbmRleCBidWZmZXIgZm9yIGdsRHJhd0FycmF5cygpLgorLSAgICAvLyBU
aGlzIGlzIHVzZWQgd2hlbiBwcmltaXRpdmUgcmVzdGFydCBpcyBub3QgZW5hYmxlZC4KKyAgICAg
YW5nbGU6OlJlc3VsdCBnZW5lcmF0ZUxpbmVMb29wTGFzdFNlZ21lbnQoQ29udGV4dE10bCAqY29u
dGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QgZmlyc3RWZXJ0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGxhc3RWZXJ0ZXgsCitAQCAtMzQwLDYgKzM0MCwxOCBAQCBj
bGFzcyBJbmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAg
IGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRzQXJy
YXkoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25Q
YXJhbXMgJnBhcmFtcyk7CisgCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0UG9pbnRzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2Vu
ZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmluZGljZXNHZW5lcmF0ZWQpOworKworKyAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRl
eHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKysKKysgICAgYW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVBy
aW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoQ29udGV4dE10bCAqY29udGV4dE10bCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5kaWNlc0dl
bmVyYXRlZCk7CisrCisgICBwcml2YXRlOgorICAgICAvLyBJbmRleCBnZW5lcmF0b3IgY29tcHV0
ZSBwaXBlbGluZXM6CisgICAgIC8vICAtIEZpcnN0IGRpbWVuc2lvbjogaW5kZXggdHlwZS4KK0BA
IC0zNDgsNyArMzYwLDYgQEAgY2xhc3MgSW5kZXhHZW5lcmF0b3JVdGlscyBmaW5hbCA6IGFuZ2xl
OjpOb25Db3B5YWJsZQorICAgICAgICAgc3RkOjphcnJheTxzdGQ6OmFycmF5PEF1dG9PYmpDUHRy
PGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4sIDI+LAorICAgICAgICAgICAgICAgICAgICBh
bmdsZTo6RW51bVNpemU8Z2w6OkRyYXdFbGVtZW50c1R5cGU+KCk+OworIAorLSAgICAvLyBHZXQg
Y29tcHV0ZSBwaXBlbGluZSB0byBjb252ZXJ0IGluZGV4IGJldHdlZW4gYnVmZmVycy4KKyAgICAg
QXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBnZXRJbmRleENvbnZlcnNp
b25QaXBlbGluZSgKKyAgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICBn
bDo6RHJhd0VsZW1lbnRzVHlwZSBzcmNUeXBlLAorQEAgLTM3NSw3ICszODYsOCBAQCBjbGFzcyBJ
bmRleEdlbmVyYXRvclV0aWxzIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICAv
LyBNdXN0IGJlIG11bHRpcGxlcyBvZiBrSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQKKyAgICAg
ICAgIHVpbnQzMl90IGRzdE9mZnNldCk7CisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVUcmlG
YW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShDb250ZXh0TXRsICpjb250ZXh0TXRsLAorLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMpOworKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5l
cmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqaW5kaWNlc0dlbmVyYXRlZCk7Cisg
CisgICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJhdGVMaW5lTG9vcEJ1ZmZlckZyb21FbGVtZW50c0Fy
cmF5R1BVKAorICAgICAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKK0BAIC0zOTMsNiArNDA1
LDExIEBAIGNsYXNzIEluZGV4R2VuZXJhdG9yVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKKyAgICAgICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICBjb25zdCBJbmRl
eEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcyk7CisgCisrICAgIGFuZ2xlOjpSZXN1bHQgZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bVZl
cnRpY2VzUGVyUHJpbWl0aXZlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRp
Y2VzR2VuZXJhdGVkKTsKKysKKyAgICAgSW5kZXhDb252ZXJzaW9uUGlwZWxpbmVBcnJheSBtSW5k
ZXhDb252ZXJzaW9uUGlwZWxpbmVDYWNoZXM7CisgCisgICAgIEluZGV4Q29udmVyc2lvblBpcGVs
aW5lQXJyYXkgbVRyaUZhbkZyb21FbGVtQXJyYXlHZW5lcmF0b3JQaXBlbGluZUNhY2hlczsKK0BA
IC00MjksNyArNDQ2LDcgQEAgY2xhc3MgTWlwbWFwVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29w
eWFibGUKKyAgIHB1YmxpYzoKKyAgICAgdm9pZCBvbkRlc3Ryb3koKTsKKyAKKy0gICAgLy8gQ29t
cHV0ZSBiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbi4gT25seSBwb3NzaWJsZSBmb3IgM0QgdGV4dHVy
ZSBmb3Igbm93LgorKyAgICAvLyBDb21wdXRlIGJhc2VkIG1pcG1hcCBnZW5lcmF0aW9uLgorICAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTWlwbWFwQ1MoQ29udGV4dE10bCAqY29udGV4dE10bCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJnNy
Y1RleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNSR0JN
aXBtYXAsCitAQCAtNDM3LDkgKzQ1NCwxNSBAQCBjbGFzcyBNaXBtYXBVdGlscyBmaW5hbCA6IGFu
Z2xlOjpOb25Db3B5YWJsZQorIAorICAgcHJpdmF0ZToKKyAgICAgdm9pZCBlbnN1cmUzRE1pcEdl
bmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCk7CisrICAg
IHZvaWQgZW5zdXJlMkRNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwg
KmNvbnRleHRNdGwpOworKyAgICB2b2lkIGVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0b3JQaXBlbGlu
ZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpOworKyAgICB2b2lkIGVuc3VyZUN1
YmVNaXBHZW5lcmF0b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwp
OworIAorICAgICAvLyBNaXBtYXBzIGdlbmVyYXRpbmcgY29tcHV0ZSBwaXBlbGluZToKKyAgICAg
QXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBtM0RNaXBHZW5lcmF0b3JQ
aXBlbGluZTsKKysgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+PiBt
MkRNaXBHZW5lcmF0b3JQaXBlbGluZTsKKysgICAgQXV0b09iakNQdHI8aWQ8TVRMQ29tcHV0ZVBp
cGVsaW5lU3RhdGU+PiBtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lOworKyAgICBBdXRvT2Jq
Q1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+IG1DdWJlTWlwR2VuZXJhdG9yUGlwZWxp
bmU7CisgfTsKKyAKKyAvLyBVdGlsIGNsYXNzIGZvciBoYW5kbGluZyBwaXhlbHMgY29weSBiZXR3
ZWVuIGJ1ZmZlcnMgYW5kIHRleHR1cmVzCitAQCAtNTQzLDYgKzU2NiwyMSBAQCBjbGFzcyBWZXJ0
ZXhGb3JtYXRDb252ZXJzaW9uVXRpbHMgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAg
UmVuZGVyUGlwZWxpbmVDYWNoZSBtQ29tcG9uZW50c0V4cGFuZFJlbmRlclBpcGVsaW5lQ2FjaGU7
CisgfTsKKyAKKysvLyBVdGlsIGNsYXNzIGZvciBoYW5kbGluZyB0cmFuc2Zvcm0gZmVlZGJhY2sK
KysgICAgY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2tVdGlscworK3sKKysgIHB1YmxpYzoKKysgICAg
dm9pZCBvbkRlc3Ryb3koKTsKKysgICAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVT
dGF0ZT4+IGdldFRyYW5zZm9ybUZlZWRiYWNrUmVuZGVyUGlwZWxpbmUoCisrICAgICAgICBDb250
ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVu
Y29kZXIsCisrICAgICAgICBtdGw6OlJlbmRlclBpcGVsaW5lRGVzYyAmcGlwZWxpbmVEZXNjKTsK
KysKKysgIHByaXZhdGU6CisrICAgIEF1dG9PYmpDUHRyPGlkPE1UTExpYnJhcnk+PiBjcmVhdGVN
c2xYZmJMaWJyYXJ5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFu
c2xhdGVkTXNsKTsKKyt9OworKworIC8vIFJlbmRlclV0aWxzOiBjb250YWluZXIgY2xhc3Mgb2Yg
dmFyaW91cyB1dGlsIGNsYXNzZXMgYWJvdmUKKyBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBD
b250ZXh0LCBhbmdsZTo6Tm9uQ29weWFibGUKKyB7CitAQCAtNTg3LDcgKzYyNSw4IEBAIGNsYXNz
IFJlbmRlclV0aWxzIDogcHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICBh
bmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUFycmF5cyhDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUcmlGYW5PckxpbmVMb29wRnJvbUFycmF5UGFyYW1zICZwYXJhbXMpOworICAg
ICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1z
KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmluZGlj
ZXNHZW5lcmF0ZWQpOworIAorICAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlTGluZUxvb3BCdWZm
ZXJGcm9tQXJyYXlzKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVHJpRmFuT3JMaW5lTG9vcEZy
b21BcnJheVBhcmFtcyAmcGFyYW1zKTsKK0BAIC02MzksNiArNjc4LDE5IEBAIGNsYXNzIFJlbmRl
clV0aWxzIDogcHVibGljIENvbnRleHQsIGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJDb21tYW5kRW5jb2Rl
ciAqcmVuZGVyRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmc3JjQW5nbGVGb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleEZv
cm1hdENvbnZlcnRQYXJhbXMgJnBhcmFtcyk7CisrICAgIGFuZ2xlOjpSZXN1bHQgY3JlYXRlVHJh
bnNmb3JtRmVlZGJhY2tQU08oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIg
KnJlbmRlckVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXRsOjpSZW5kZXJQaXBlbGluZURlc2MgJnBpcGVsaW5lRGVzYyk7CisrCisrICAgIGFu
Z2xlOjpSZXN1bHQgZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKENvbnRleHRN
dGwgKmNvbnRleHRNdGwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKmluZGljZXNHZW5lcmF0ZWQpOworKyAgICBhbmdsZTo6UmVzdWx0IGdlbmVyYXRlUHJpbWl0
aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhH
ZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRpY2VzR2VuZXJhdGVkKTsKKysgICAg
YW5nbGU6OlJlc3VsdCBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoQ29u
dGV4dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJh
bXMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCk7CisgCisgICBwcml2YXRlOgorICAgICAv
LyBvdmVycmlkZSBFcnJvckhhbmRsZXIKK0BAIC02NDYsNyArNjk4LDcgQEAgY2xhc3MgUmVuZGVy
VXRpbHMgOiBwdWJsaWMgQ29udGV4dCwgYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpmdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZSkg
b3ZlcnJpZGU7CistICAgIHZvaWQgaGFuZGxlRXJyb3IoTlNFcnJvciAqX051bGxhYmxlIGVycm9y
LAorKyAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAorICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmUpIG92
ZXJyaWRlOworQEAgLTY2Miw2ICs3MTQsNyBAQCBjbGFzcyBSZW5kZXJVdGlscyA6IHB1YmxpYyBD
b250ZXh0LCBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgTWlwbWFwVXRpbHMgbU1pcG1hcFV0aWxz
OworICAgICBzdGQ6OmFycmF5PENvcHlQaXhlbHNVdGlscywgYW5nbGU6OkVudW1TaXplPFBpeGVs
VHlwZT4oKT4gbUNvcHlQaXhlbHNVdGlsczsKKyAgICAgVmVydGV4Rm9ybWF0Q29udmVyc2lvblV0
aWxzIG1WZXJ0ZXhGb3JtYXRVdGlsczsKKysgICAgVHJhbnNmb3JtRmVlZGJhY2tVdGlscyBtVHJh
bnNmb3JtRmVlZGJhY2tVdGlsczsKKyB9OworIAorIH0gIC8vIG5hbWVzcGFjZSBtdGwKK2RpZmYg
LS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3JlbmRlcl91dGlscy5tbSBi
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVuZGVyX3V0aWxzLm1tCitpbmRleCBk
MjI0ODAxLi4zMmIzM2NhIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9yZW5kZXJfdXRpbHMubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9t
dGxfcmVuZGVyX3V0aWxzLm1tCitAQCAtMTUsNiArMTUsNyBAQAorICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvQ29udGV4dE10bC5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9EaXNwbGF5TXRsLmgiCisrI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1Byb2dy
YW1NdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvUXVlcnlNdGwuaCIK
KyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgorICNpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIKK0BAIC01NCwxMCArNTUs
MTIgQEAKKyAgICAgZmxvYXQgc3JjVGV4Q29vcmRzWzNdWzJdOworICAgICBpbnQgc3JjTGV2ZWwg
ICAgICAgICA9IDA7CisgICAgIGludCBzcmNMYXllciAgICAgICAgID0gMDsKKysgICAgaW50IHNy
Y0xldmVsMiAgICAgICAgPSAwOworKyAgICBpbnQgc3JjTGF5ZXIyICAgICAgICA9IDA7CisgICAg
IHVpbnQ4X3QgZHN0RmxpcFggICAgID0gMDsKKyAgICAgdWludDhfdCBkc3RGbGlwWSAgICAgPSAw
OworICAgICB1aW50OF90IGRzdEx1bWluYW5jZSA9IDA7ICAvLyBkZXN0IHRleHR1cmUgaXMgbHVt
aW5hY2UKKy0gICAgdWludDhfdCBwYWRkaW5nWzEzXTsKKysgICAgdWludDhfdCBwYWRkaW5nWzld
OworIH07CisgCisgc3RydWN0IEJsaXRTdGVuY2lsVG9CdWZmZXJQYXJhbXNVbmlmb3JtCitAQCAt
OTAsNyArOTMsNyBAQAorICAgICB1aW50OF90IHBhZGRpbmdbN107CisgfTsKKyAKKy0vLyBTZWUg
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsCisrLy8gU2Vl
IGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvbWlzYy5tZXRhbAorIHN0cnVjdCBDb21i
aW5lVmlzaWJpbGl0eVJlc3VsdFVuaWZvcm0KKyB7CisgICAgIHVpbnQzMl90IHN0YXJ0T2Zmc2V0
OworQEAgLTk5LDEyICsxMDIsMTEgQEAKKyB9OworIAorIC8vIFNlZSBsaWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAubWV0YWwKKy1zdHJ1Y3QgR2VuZXJhdGVNaXBtYXBV
bmlmb3JtCisrc3RydWN0IEdlbmVyYXRlM0RNaXBtYXBVbmlmb3JtCisgeworICAgICB1aW50MzJf
dCBzcmNMZXZlbDsKKyAgICAgdWludDMyX3QgbnVtTWlwbWFwc1RvR2VuZXJhdGU7CistICAgIHVp
bnQ4X3Qgc1JHQjsKKy0gICAgdWludDhfdCBwYWRkaW5nWzddOworKyAgICB1aW50MzJfdCBwYWRk
aW5nWzJdOworIH07CisgCisgLy8gU2VlIGxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMv
Y29weV9idWZmZXIubWV0YWwKK0BAIC0xNTYsMTkgKzE1OCwzNiBAQAorIC8vIGV4aXRpbmcgYmxv
Y2suCisgc3RydWN0IFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeQorIHsKKy0gICAgU2NvcGVk
RGlzYWJsZU9jY2x1c2lvblF1ZXJ5KENvbnRleHRNdGwgKmNvbnRleHRNdGwsIGFuZ2xlOjpSZXN1
bHQgKnJlc3VsdE91dCkKKy0gICAgICAgIDogbUNvbnRleHRNdGwoY29udGV4dE10bCksIG1SZXN1
bHRPdXQocmVzdWx0T3V0KQorKyAgICBTY29wZWREaXNhYmxlT2NjbHVzaW9uUXVlcnkoQ29udGV4
dE10bCAqY29udGV4dE10bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
ckNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYW5nbGU6OlJlc3VsdCAqcmVzdWx0T3V0KQorKyAgICAgICAgOiBtQ29udGV4dE10bChjb250
ZXh0TXRsKSwgbUVuY29kZXIoZW5jb2RlciksIG1SZXN1bHRPdXQocmVzdWx0T3V0KQorKyAgICB7
CisrI2lmbmRlZiBOREVCVUcKKysgICAgICAgIGlmIChjb250ZXh0TXRsLT5oYXNBY3RpdmVPY2Ns
dXNpb25RdWVyeSgpKQorICAgICAgICAgeworKyAgICAgICAgICAgIGVuY29kZXItPnB1c2hEZWJ1
Z0dyb3VwKEAiRGlzYWJsZWQgT2NjbHVzaW9uUXVlcnkiKTsKKysgICAgICAgIH0KKysjZW5kaWYK
KyAgICAgICAgIC8vIHRlbXBvcmFyaWx5IGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5CisgICAgICAg
ICBjb250ZXh0TXRsLT5kaXNhYmxlQWN0aXZlT2NjbHVzaW9uUXVlcnlJblJlbmRlclBhc3MoKTsK
KyAgICAgfQorICAgICB+U2NvcGVkRGlzYWJsZU9jY2x1c2lvblF1ZXJ5KCkKKyAgICAgeworICAg
ICAgICAgKm1SZXN1bHRPdXQgPSBtQ29udGV4dE10bC0+cmVzdGFydEFjdGl2ZU9jY2x1c2lvblF1
ZXJ5SW5SZW5kZXJQYXNzKCk7CisrI2lmbmRlZiBOREVCVUcKKysgICAgICAgIGlmIChtQ29udGV4
dE10bC0+aGFzQWN0aXZlT2NjbHVzaW9uUXVlcnkoKSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICBtRW5jb2Rlci0+cG9wRGVidWdHcm91cCgpOworKyAgICAgICAgfQorKyNlbHNlCisrICAgICAg
ICBBTkdMRV9VTlVTRURfVkFSSUFCTEUobUVuY29kZXIpOworKyNlbmRpZgorICAgICB9CisgCisg
ICBwcml2YXRlOgorICAgICBDb250ZXh0TXRsICptQ29udGV4dE10bDsKKysgICAgUmVuZGVyQ29t
bWFuZEVuY29kZXIgKm1FbmNvZGVyOworIAorICAgICBhbmdsZTo6UmVzdWx0ICptUmVzdWx0T3V0
OworIH07CitAQCAtMjE5LDY2ICsyMzgsNDMgQEAgdm9pZCBHZXRCbGl0VGV4Q29vcmRzKHVpbnQz
Ml90IHNyY1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcHJpbWl0aXZlUmVzdGFydEVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCdWZmZXJSZWYgJmRzdEJ1ZmZlciwKKy0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZzZXQp
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0
T2Zmc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90ICppbmRpY2VzR2VuZXJhdGVkKQorIHsKKyAgICAgQVNTRVJUKGNvdW50ID4gMik7CistCist
ICAgIHVpbnQzMl90IGdlbkluZGljZXNDb3VudDsKKy0gICAgQU5HTEVfVFJZKG10bDo6R2V0VHJp
YW5nbGVGYW5JbmRpY2VzQ291bnQoY29udGV4dE10bCwgY291bnQsICZnZW5JbmRpY2VzQ291bnQp
KTsKKy0KKyAgICAgY29uc3RleHByIFQga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8VD46Om1heCgpOworLSAgICBjb25zdCB1aW50MzJfdCBrRHN0UHJpbWl0
aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwor
LQorKyAgICBHTHNpemVpIGRzdFRyaWFuZ2xlICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICAg
dWludDMyX3QgKmRzdFB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QgKj4oZHN0QnVmZmVy
LT5tYXAoY29udGV4dE10bCkgKyBkc3RPZmZzZXQpOworLSAgICBUIHRyaUZpcnN0SWR4ICAgID0g
MDsgIC8vIFZlcnRleCBpbmRleCBvZiB0cmlhbmxnZSdzIDFzdCB2ZXJ0ZXgKKy0gICAgVCBzcmNQ
cmV2SWR4ICAgICA9IDA7ICAvLyBWZXJ0ZXggaW5kZXggb2YgdHJpYW5sZ2UncyAybmQgdmVydGV4
CisrICAgIFQgdHJpRmlyc3RJZHgsIHNyY1ByZXZJZHg7CisgICAgIG1lbWNweSgmdHJpRmlyc3RJ
ZHgsIGluZGljZXMsIHNpemVvZih0cmlGaXJzdElkeCkpOworKyAgICBtZW1jcHkoJnNyY1ByZXZJ
ZHgsIGluZGljZXMgKyAxLCBzaXplb2Yoc3JjUHJldklkeCkpOworIAorICAgICBpZiAocHJpbWl0
aXZlUmVzdGFydEVuYWJsZWQpCisgICAgIHsKKy0gICAgICAgIC8vIHRyaUZpcnN0SWR4TG9jOiBM
b2NhdGlvbiBvZiBjdXJyZW50IHRyaWFuZ2xlJ3MgZmlzdCB2ZXJ0ZXggaW4gc291cmNlIGJ1ZmZl
ci4KKyAgICAgICAgIEdMc2l6ZWkgdHJpRmlyc3RJZHhMb2MgPSAwOworICAgICAgICAgd2hpbGUg
KHRyaUZpcnN0SWR4ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisgICAgICAgICB7Cist
ICAgICAgICAgICAgbWVtY3B5KCZkc3RQdHJbdHJpRmlyc3RJZHhMb2MrK10sICZrRHN0UHJpbWl0
aXZlUmVzdGFydEluZGV4LAorLSAgICAgICAgICAgICAgICAgICBzaXplb2Yoa0RzdFByaW1pdGl2
ZVJlc3RhcnRJbmRleCkpOworKyAgICAgICAgICAgICsrdHJpRmlyc3RJZHhMb2M7CisgICAgICAg
ICAgICAgbWVtY3B5KCZ0cmlGaXJzdElkeCwgaW5kaWNlcyArIHRyaUZpcnN0SWR4TG9jLCBzaXpl
b2YodHJpRmlyc3RJZHgpKTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIGlmICh0cmlGaXJzdElk
eExvYyArIDIgPj0gY291bnQpCistICAgICAgICB7CistICAgICAgICAgICAgLy8gTm90IGVub3Vn
aCBpbmRpY2VzLgorLSAgICAgICAgICAgIGZvciAoR0xzaXplaSBpID0gdHJpRmlyc3RJZHhMb2M7
IGkgPCBjb3VudDsgKytpKQorLSAgICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICAgbWVtY3B5
KCZkc3RQdHJbaV0sICZrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4LCBzaXplb2Yoa0RzdFByaW1p
dGl2ZVJlc3RhcnRJbmRleCkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAg
IGVsc2UgaWYgKHRyaUZpcnN0SWR4TG9jICsgMSA8IGNvdW50KQorLSAgICAgICAgeworLSAgICAg
ICAgICAgIG1lbWNweSgmc3JjUHJldklkeCwgaW5kaWNlcyArIHRyaUZpcnN0SWR4TG9jICsgMSwg
c2l6ZW9mKHNyY1ByZXZJZHgpKTsKKy0gICAgICAgIH0KKy0KKyAgICAgICAgIGZvciAoR0xzaXpl
aSBpID0gdHJpRmlyc3RJZHhMb2MgKyAyOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgIHsKKyAg
ICAgICAgICAgICB1aW50MzJfdCB0cmlJbmRpY2VzWzNdOworLQorICAgICAgICAgICAgIFQgc3Jj
SWR4OworICAgICAgICAgICAgIG1lbWNweSgmc3JjSWR4LCBpbmRpY2VzICsgaSwgc2l6ZW9mKHNy
Y0lkeCkpOworKyAgICAgICAgICAgIGJvb2wgY29tcGxldGVUcmlhbmdsZSA9IHRydWU7CisgICAg
ICAgICAgICAgaWYgKHNyY1ByZXZJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCB8fCBz
cmNJZHggPT0ga1NyY1ByaW1pdGl2ZVJlc3RhcnRJbmRleCkKKyAgICAgICAgICAgICB7CistICAg
ICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUuCistICAgICAgICAgICAgICAgIHRy
aUluZGljZXNbMF0gID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsKKy0gICAgICAgICAgICAg
ICAgdHJpSW5kaWNlc1sxXSAgPSBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4OworLSAgICAgICAg
ICAgICAgICB0cmlJbmRpY2VzWzJdICA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7CisrICAg
ICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUuIE1vdmUgdG8gbmV4dCB0cmlhbmds
ZSBhbmQgc2V0IHRyaUZpcnN0SW5kZXgKKyAgICAgICAgICAgICAgICAgdHJpRmlyc3RJZHggICAg
ICA9IHNyY0lkeDsKKyAgICAgICAgICAgICAgICAgdHJpRmlyc3RJZHhMb2MgICA9IGk7CisrICAg
ICAgICAgICAgICAgIGNvbXBsZXRlVHJpYW5nbGUgPSBmYWxzZTsKKyAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgZWxzZSBpZiAoaSA8IHRyaUZpcnN0SWR4TG9jICsgMikKKyAgICAgICAgICAg
ICB7CistICAgICAgICAgICAgICAgIC8vIEluY29tcGxldGUgdHJpYW5nbGUKKy0gICAgICAgICAg
ICAgICAgdHJpSW5kaWNlc1swXSA9IGtEc3RQcmltaXRpdmVSZXN0YXJ0SW5kZXg7CistICAgICAg
ICAgICAgICAgIHRyaUluZGljZXNbMV0gPSBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4OworLSAg
ICAgICAgICAgICAgICB0cmlJbmRpY2VzWzJdID0ga0RzdFByaW1pdGl2ZVJlc3RhcnRJbmRleDsK
KysgICAgICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSB0cmlhbmdsZSwgbW92ZSB0byBuZXh0IHRy
aWFuZ2xlCisrICAgICAgICAgICAgICAgIGNvbXBsZXRlVHJpYW5nbGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgIHsKK0BAIC0yODYsMTUg
KzI4MiwxNiBAQCB2b2lkIEdldEJsaXRUZXhDb29yZHModWludDMyX3Qgc3JjV2lkdGgsCisgICAg
ICAgICAgICAgICAgIHRyaUluZGljZXNbMV0gPSBzcmNQcmV2SWR4OworICAgICAgICAgICAgICAg
ICB0cmlJbmRpY2VzWzJdID0gc3JjSWR4OworICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBp
ZiAoY29tcGxldGVUcmlhbmdsZSkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG1l
bWNweShkc3RQdHIgKyAzICogZHN0VHJpYW5nbGUsIHRyaUluZGljZXMsIHNpemVvZih0cmlJbmRp
Y2VzKSk7CisrICAgICAgICAgICAgICAgICsrZHN0VHJpYW5nbGU7CisrICAgICAgICAgICAgfQor
ICAgICAgICAgICAgIHNyY1ByZXZJZHggPSBzcmNJZHg7CistCistICAgICAgICAgICAgbWVtY3B5
KGRzdFB0ciArIDMgKiAoaSAtIDIpLCB0cmlJbmRpY2VzLCBzaXplb2YodHJpSW5kaWNlcykpOwor
ICAgICAgICAgfQorICAgICB9CisgICAgIGVsc2UKKyAgICAgeworLSAgICAgICAgbWVtY3B5KCZz
cmNQcmV2SWR4LCBpbmRpY2VzICsgMSwgc2l6ZW9mKHNyY1ByZXZJZHgpKTsKKy0KKyAgICAgICAg
IGZvciAoR0xzaXplaSBpID0gMjsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICB7CisgICAgICAg
ICAgICAgVCBzcmNJZHg7CitAQCAtMzA2LDE0ICszMDMsNjggQEAgdm9pZCBHZXRCbGl0VGV4Q29v
cmRzKHVpbnQzMl90IHNyY1dpZHRoLAorICAgICAgICAgICAgIHRyaUluZGljZXNbMl0gPSBzcmNJ
ZHg7CisgICAgICAgICAgICAgc3JjUHJldklkeCAgICA9IHNyY0lkeDsKKyAKKy0gICAgICAgICAg
ICBtZW1jcHkoZHN0UHRyICsgMyAqIChpIC0gMiksIHRyaUluZGljZXMsIHNpemVvZih0cmlJbmRp
Y2VzKSk7CisrICAgICAgICAgICAgbWVtY3B5KGRzdFB0ciArIDMgKiBkc3RUcmlhbmdsZSwgdHJp
SW5kaWNlcywgc2l6ZW9mKHRyaUluZGljZXMpKTsKKysgICAgICAgICAgICArK2RzdFRyaWFuZ2xl
OworICAgICAgICAgfQorICAgICB9CistICAgIGRzdEJ1ZmZlci0+dW5tYXBBbmRGbHVzaFN1YnNl
dChjb250ZXh0TXRsLCBkc3RPZmZzZXQsIGdlbkluZGljZXNDb3VudCAqIHNpemVvZih1aW50MzJf
dCkpOworKyAgICBpZiAoaW5kaWNlc0dlbmVyYXRlZCkKKysgICAgICAgICppbmRpY2VzR2VuZXJh
dGVkID0gZHN0VHJpYW5nbGUgKiAzOworKyAgICBkc3RCdWZmZXItPnVubWFwKGNvbnRleHRNdGwp
OworIAorICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorIAorK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorK2FuZ2xlOjpSZXN1bHQgR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZl
cihDb250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGNvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGluZGljZXNQZXJQcmltaXRpdmUsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQgKmluZGljZXMsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ1ZmZlclJlZiAmZHN0QnVmZmVyLAor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkc3RPZmZz
ZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaW5k
aWNlc0dlbmVyYXRlZCkKKyt7CisrICAgIGNvbnN0ZXhwciBUIGtTcmNQcmltaXRpdmVSZXN0YXJ0
SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsKKysgICAgdWludDMyX3QgKmRz
dFB0ciAgICAgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90ICo+KGRzdEJ1ZmZlci0+bWFwKGNv
bnRleHRNdGwpICsgZHN0T2Zmc2V0KTsKKysgICAgR0xzaXplaSByZWFkVmFsdWVMb2MgPSAwOwor
KyAgICBUIHJlYWRWYWx1ZSAgICAgICAgICA9IDA7CisrICAgIHVpbnQzMl90IGRzdElkeCAgICAg
ID0gMDsKKysgICAgbWVtY3B5KCZyZWFkVmFsdWUsIGluZGljZXMsIHNpemVvZihyZWFkVmFsdWUp
KTsKKysgICAgd2hpbGUgKHJlYWRWYWx1ZSA9PSBrU3JjUHJpbWl0aXZlUmVzdGFydEluZGV4KQor
KyAgICB7CisrCisrICAgICAgICArK3JlYWRWYWx1ZUxvYzsKKysgICAgICAgIG1lbWNweSgmcmVh
ZFZhbHVlLCBpbmRpY2VzICsgcmVhZFZhbHVlTG9jLCBzaXplb2YocmVhZFZhbHVlKSk7CisrICAg
IH0KKysgICAgd2hpbGUgKHJlYWRWYWx1ZUxvYyArIGluZGljZXNQZXJQcmltaXRpdmUgPD0gY291
bnQpCisrICAgIHsKKysKKysgICAgICAgIHVpbnQzMl90IHByaW1JbmRpY2llc1szXTsKKysgICAg
ICAgIGJvb2wgZm91bmRQcmltaXRpdmUgPSB0cnVlOworKyAgICAgICAgZm9yIChpbnQgayA9IDA7
IGsgPCBpbmRpY2VzUGVyUHJpbWl0aXZlOyArK2spCisrICAgICAgICB7CisrICAgICAgICAgICAg
bWVtY3B5KCZyZWFkVmFsdWUsIGluZGljZXMgKyByZWFkVmFsdWVMb2MsIHNpemVvZihyZWFkVmFs
dWUpKTsKKysgICAgICAgICAgICArK3JlYWRWYWx1ZUxvYzsKKysgICAgICAgICAgICBpZiAocmVh
ZFZhbHVlID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisrICAgICAgICAgICAgeworKyAg
ICAgICAgICAgICAgICBmb3VuZFByaW1pdGl2ZSA9IGZhbHNlOworKyAgICAgICAgICAgICAgICBi
cmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsK
KysgICAgICAgICAgICAgICAgcHJpbUluZGljaWVzW2tdID0gKHVpbnQzMl90KXJlYWRWYWx1ZTsK
KysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAoZm91bmRQcmltaXRpdmUp
CisrICAgICAgICB7CisrICAgICAgICAgICAgbWVtY3B5KCZkc3RQdHJbZHN0SWR4XSwgcHJpbUlu
ZGljaWVzLCAoaW5kaWNlc1BlclByaW1pdGl2ZSkgKiBzaXplb2YodWludDMyX3QpKTsKKysgICAg
ICAgICAgICBkc3RJZHggKz0gaW5kaWNlc1BlclByaW1pdGl2ZTsKKysgICAgICAgIH0KKysgICAg
fQorKyAgICBpZiAoaW5kaWNlc0dlbmVyYXRlZCkKKysgICAgICAgICppbmRpY2VzR2VuZXJhdGVk
ID0gZHN0SWR4OworKyAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrfQorKwor
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorIGFuZ2xlOjpSZXN1bHQgR2VuTGluZUxvb3BGcm9tQ2xp
ZW50RWxlbWVudHMoQ29udGV4dE10bCAqY29udGV4dE10bCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCitAQCAtMzI4LDE0ICszNzks
MTEgQEAgdm9pZCBHZXRCbGl0VGV4Q29vcmRzKHVpbnQzMl90IHNyY1dpZHRoLAorICAgICBjb25z
dCB1aW50MzJfdCBrRHN0UHJpbWl0aXZlUmVzdGFydEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpOworIAorICAgICB1aW50MzJfdCAqZHN0UHRyID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCAqPihkc3RCdWZmZXItPm1hcChjb250ZXh0TXRsKSArIGRzdE9mZnNl
dCk7CistICAgIC8vIGxpbmVMb29wRmlyc3RJZHg6IHZhbHVlIG9mIG9mIGN1cnJlbnQgbGluZSBs
b29wJ3MgZmlyc3QgdmVydGV4IGluZGV4LiBDYW4gY2hhbmdlIHdoZW4KKy0gICAgLy8gZW5jb3Vu
dGVyIGEgcHJpbWl0aXZlIHJlc3RhcnQgaW5kZXguCisgICAgIFQgbGluZUxvb3BGaXJzdElkeDsK
KyAgICAgbWVtY3B5KCZsaW5lTG9vcEZpcnN0SWR4LCBpbmRpY2VzLCBzaXplb2YobGluZUxvb3BG
aXJzdElkeCkpOworIAorICAgICBpZiAocHJpbWl0aXZlUmVzdGFydEVuYWJsZWQpCisgICAgIHsK
Ky0gICAgICAgIC8vIGxpbmVMb29wRmlyc3RJZHhMb2M6IGxvY2F0aW9uIG9mIGN1cnJlbnQgbGlu
ZSBsb29wJ3MgZmlyc3QgdmVydGV4IGluIHRoZSBzb3VyY2UgYnVmZmVyLgorICAgICAgICAgR0xz
aXplaSBsaW5lTG9vcEZpcnN0SWR4TG9jID0gMDsKKyAgICAgICAgIHdoaWxlIChsaW5lTG9vcEZp
cnN0SWR4ID09IGtTcmNQcmltaXRpdmVSZXN0YXJ0SW5kZXgpCisgICAgICAgICB7CitAQCAtMzQ0
LDE1ICszOTIsMTIgQEAgdm9pZCBHZXRCbGl0VGV4Q29vcmRzKHVpbnQzMl90IHNyY1dpZHRoLAor
ICAgICAgICAgICAgIG1lbWNweSgmbGluZUxvb3BGaXJzdElkeCwgaW5kaWNlcyArIGxpbmVMb29w
Rmlyc3RJZHhMb2MsIHNpemVvZihsaW5lTG9vcEZpcnN0SWR4KSk7CisgICAgICAgICB9CisgCist
ICAgICAgICAvLyBkc3RJZHggOiB2YWx1ZSBvZiBpbmRleCB0byBiZSB3cml0dGVuIHRvIGRlc3Qg
YnVmZmVyCisgICAgICAgICB1aW50MzJfdCBkc3RJZHggPSBsaW5lTG9vcEZpcnN0SWR4OworICAg
ICAgICAgbWVtY3B5KCZkc3RQdHJbbGluZUxvb3BGaXJzdElkeExvY10sICZkc3RJZHgsIHNpemVv
Zihkc3RJZHgpKTsKKy0gICAgICAgIC8vIGRzdFdyaXR0ZW46IG51bWJlciBvZiBpbmRpY2VzIHdy
aXR0ZW4gdG8gZGVzdCBidWZmZXIKKyAgICAgICAgIHVpbnQzMl90IGRzdFdyaXR0ZW4gPSBsaW5l
TG9vcEZpcnN0SWR4TG9jICsgMTsKKyAKKyAgICAgICAgIGZvciAoR0xzaXplaSBpID0gbGluZUxv
b3BGaXJzdElkeExvYyArIDE7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgeworLSAgICAgICAg
ICAgIC8vIHNyY0lkeCA6IHZhbHVlIG9mIGluZGV4IGZyb20gc291cmNlIGJ1ZmZlcgorICAgICAg
ICAgICAgIFQgc3JjSWR4OworICAgICAgICAgICAgIG1lbWNweSgmc3JjSWR4LCBpbmRpY2VzICsg
aSwgc2l6ZW9mKHNyY0lkeCkpOworICAgICAgICAgICAgIGlmIChzcmNJZHggPT0ga1NyY1ByaW1p
dGl2ZVJlc3RhcnRJbmRleCkKK0BAIC00MDAsNyArNDQ1LDcgQEAgdm9pZCBHZXRCbGl0VGV4Q29v
cmRzKHVpbnQzMl90IHNyY1dpZHRoLAorIAorICAgICAgICAgKmluZGljZXNHZW5lcmF0ZWQgPSBj
b3VudCArIDE7CisgICAgIH0KKy0gICAgZHN0QnVmZmVyLT51bm1hcEFuZEZsdXNoU3Vic2V0KGNv
bnRleHRNdGwsIGRzdE9mZnNldCwgKCppbmRpY2VzR2VuZXJhdGVkKSAqIHNpemVvZih1aW50MzJf
dCkpOworKyAgICBkc3RCdWZmZXItPnVubWFwKGNvbnRleHRNdGwpOworIAorICAgICByZXR1cm4g
YW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisgfQorQEAgLTQ3Miw3ICs1MTcsNyBAQCB2b2lkIEVu
c3VyZUNvbXB1dGVQaXBlbGluZUluaXRpYWxpemVkKERpc3BsYXlNdGwgKmRpc3BsYXksCisgICAg
IEFOR0xFX01UTF9PQkpDX1NDT1BFCisgICAgIHsKKyAgICAgICAgIGlkPE1UTERldmljZT4gbWV0
YWxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOworLSAgICAgICAgaWQ8TVRMTGli
cmFyeT4gc2hhZGVyTGliICA9IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CisrICAg
ICAgICBhdXRvIHNoYWRlckxpYiAgICAgICAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRl
cnNMaWIoKTsKKyAgICAgICAgIE5TRXJyb3IgKmVyciAgICAgICAgICAgICAgPSBuaWw7CisgICAg
ICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyICAgID0gW3NoYWRlckxpYiBuZXdGdW5jdGlvbldp
dGhOYW1lOmZ1bmN0aW9uTmFtZV07CisgCitAQCAtNTEyLDcgKzU1Nyw3IEBAIHZvaWQgRW5zdXJl
U3BlY2lhbGl6ZWRDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZCgKKyAgICAgQU5HTEVfTVRMX09C
SkNfU0NPUEUKKyAgICAgeworICAgICAgICAgaWQ8TVRMRGV2aWNlPiBtZXRhbERldmljZSA9IGRp
c3BsYXktPmdldE1ldGFsRGV2aWNlKCk7CistICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJM
aWIgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKKysgICAgICAgIGF1dG8gc2hh
ZGVyTGliICAgICAgICAgICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworICAg
ICAgICAgTlNFcnJvciAqZXJyICAgICAgICAgICAgICA9IG5pbDsKKyAKKyAgICAgICAgIGlkPE1U
TEZ1bmN0aW9uPiBzaGFkZXIgPSBbc2hhZGVyTGliIG5ld0Z1bmN0aW9uV2l0aE5hbWU6ZnVuY3Rp
b25OYW1lCitAQCAtNTM4LDYgKzU4Myw3IEBAIHZvaWQgRW5zdXJlU3BlY2lhbGl6ZWRDb21wdXRl
UGlwZWxpbmVJbml0aWFsaXplZCgKKyBBTkdMRV9JTkxJTkUKKyB2b2lkIEVuc3VyZVZlcnRleFNo
YWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoQ29udGV4dCAqY29udGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNTdHJpbmcg
KnZlcnRleEZ1bmN0aW9uTmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWQ8TVRMTGlicmFyeT4gc2hhZGVyTGliLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJQaXBlbGluZUNh
Y2hlICpwaXBlbGluZUNhY2hlT3V0KQorIHsKKyAgICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAmcGlw
ZWxpbmVDYWNoZSA9ICpwaXBlbGluZUNhY2hlT3V0OworQEAgLTU0OSw4ICs1OTUsNiBAQCB2b2lk
IEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoQ29udGV4dCAq
Y29udGV4dCwKKyAKKyAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKKyAgICAgeworLSAgICAgICAg
RGlzcGxheU10bCAqZGlzcGxheSAgICAgID0gY29udGV4dC0+Z2V0RGlzcGxheSgpOworLSAgICAg
ICAgaWQ8TVRMTGlicmFyeT4gc2hhZGVyTGliID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNM
aWIoKTsKKyAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIgPSBbc2hhZGVyTGliIG5ld0Z1
bmN0aW9uV2l0aE5hbWU6dmVydGV4RnVuY3Rpb25OYW1lXTsKKyAKKyAgICAgICAgIEFTU0VSVChb
c2hhZGVyIEFOR0xFX01UTF9BVVRPUkVMRUFTRV0pOworQEAgLTU3MCw3ICs2MTQsOSBAQCB2b2lk
IEVuc3VyZVNwZWNpYWxpemVkVmVydGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXpl
ZCgKKyAgICAgaWYgKCFmdW5jQ29uc3RhbnRzKQorICAgICB7CisgICAgICAgICAvLyBOb24gc3Bl
Y2lhbGl6ZWQgY29uc3RhbnRzIHByb3ZpZGVkLCB1c2UgZGVmYXVsdCBjcmVhdGlvbiBmdW5jdGlv
bi4KKy0gICAgICAgIEVuc3VyZVZlcnRleFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6
ZWQoY29udGV4dCwgdmVydGV4RnVuY3Rpb25OYW1lLAorKyAgICAgICAgRGlzcGxheU10bCAqZGlz
cGxheSA9IGNvbnRleHQtPmdldERpc3BsYXkoKTsKKysgICAgICAgIGF1dG8gc2hhZGVyTGliICAg
ICAgPSBkaXNwbGF5LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworKyAgICAgICAgRW5zdXJlVmVy
dGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChjb250ZXh0LCB2ZXJ0ZXhGdW5j
dGlvbk5hbWUsIHNoYWRlckxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVDYWNoZU91dCk7CisgICAgICAgICByZXR1cm47
CisgICAgIH0KK0BAIC01ODUsNyArNjMxLDcgQEAgdm9pZCBFbnN1cmVTcGVjaWFsaXplZFZlcnRl
eFNoYWRlck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoCisgICAgIEFOR0xFX01UTF9PQkpD
X1NDT1BFCisgICAgIHsKKyAgICAgICAgIERpc3BsYXlNdGwgKmRpc3BsYXkgPSBjb250ZXh0LT5n
ZXREaXNwbGF5KCk7CistICAgICAgICBpZDxNVExMaWJyYXJ5PiBzaGFkZXJMaWIgPSBkaXNwbGF5
LT5nZXREZWZhdWx0U2hhZGVyc0xpYigpOworKyAgICAgICAgYXV0byBzaGFkZXJMaWIgICAgICA9
IGRpc3BsYXktPmdldERlZmF1bHRTaGFkZXJzTGliKCk7CisgICAgICAgICBOU0Vycm9yICplcnIg
ICAgICAgID0gbmlsOworIAorICAgICAgICAgaWQ8TVRMRnVuY3Rpb24+IHNoYWRlciA9IFtzaGFk
ZXJMaWIgbmV3RnVuY3Rpb25XaXRoTmFtZTp2ZXJ0ZXhGdW5jdGlvbk5hbWUKK0BAIC02MTUsNiAr
NjYxLDIyIEBAIFJlbmRlclBpcGVsaW5lRGVzYyBHZXRDb21wdXRpbmdWZXJ0ZXhTaGFkZXJPbmx5
UmVuZGVyUGlwZWxpbmVEZXNjKFJlbmRlckNvbW1hbmRFCisgICAgIHJldHVybiBwaXBlbGluZURl
c2M7CisgfQorIAorKy8vIEdldCBwaXBlbGluZSBkZXNjcmlwdG9yIGZvciByZW5kZXIgcGlwZWxp
bmUgdGhhdCBjb250YWlucyB2ZXJ0ZXggc2hhZGVyIGFjdGluZyBhcyB0cmFuc2Zvcm0KKysvLyBm
ZWVkYmFjay4KKytBTkdMRV9JTkxJTkUKKytSZW5kZXJQaXBlbGluZURlc2MgR2V0VHJhbnNmb3Jt
RmVlZGJhY2tSZW5kZXJQaXBlbGluZURlc2MoUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29k
ZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCisreworKyAgICBS
ZW5kZXJQaXBlbGluZURlc2MgeGZiUGlwZWxpbmVEZXNjICAgPSBSZW5kZXJQaXBlbGluZURlc2Mo
cGlwZWxpbmVEZXNjKTsKKysgICAgY29uc3QgUmVuZGVyUGFzc0Rlc2MgJnJlbmRlclBhc3NEZXNj
ID0gY21kRW5jb2Rlci0+cmVuZGVyUGFzc0Rlc2MoKTsKKysKKysgICAgcmVuZGVyUGFzc0Rlc2Mu
cG9wdWxhdGVSZW5kZXJQaXBlbGluZU91dHB1dERlc2MoJnBpcGVsaW5lRGVzYy5vdXRwdXREZXNj
cmlwdG9yKTsKKysgICAgeGZiUGlwZWxpbmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlICAgPSBSZW5k
ZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkRpc2FibGVkOworKyAgICB4ZmJQaXBlbGluZURlc2Mu
aW5wdXRQcmltaXRpdmVUb3BvbG9neSA9IGtQcmltaXRpdmVUb3BvbG9neUNsYXNzUG9pbnQ7Cisr
CisrICAgIHJldHVybiB4ZmJQaXBlbGluZURlc2M7CisrfQorKworIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorIHZvaWQgQ2xlYXJSZW5kZXJQaXBlbGluZUNhY2hlQXJyYXkoVCAqcGlwZWxpbmVDYWNo
ZUFycmF5KQorIHsKK0BAIC03MTIsOSArNzc0LDE1IEBAIHZvaWQgU2V0dXBCbGl0V2l0aERyYXdV
bmlmb3JtRGF0YShSZW5kZXJDb21tYW5kRW5jb2RlciAqY21kRW5jb2RlciwKKyAgICAgdW5pZm9y
bVBhcmFtcy5zcmNMYXllciA9IHBhcmFtcy5zcmNMYXllcjsKKyAgICAgaWYgKGlzQ29sb3JCbGl0
KQorICAgICB7CistICAgICAgICBjb25zdCBDb2xvckJsaXRQYXJhbXMgKmNvbG9yUGFyYW1zID0g
c3RhdGljX2Nhc3Q8Y29uc3QgQ29sb3JCbGl0UGFyYW1zICo+KCZwYXJhbXMpOworKyAgICAgICAg
Y29uc3QgYXV0byBjb2xvclBhcmFtcyAgICAgPSBzdGF0aWNfY2FzdDxjb25zdCBDb2xvckJsaXRQ
YXJhbXMgKj4oJnBhcmFtcyk7CisgICAgICAgICB1bmlmb3JtUGFyYW1zLmRzdEx1bWluYW5jZSA9
IGNvbG9yUGFyYW1zLT5kc3RMdW1pbmFuY2UgPyAxIDogMDsKKyAgICAgfQorKyAgICBlbHNlCisr
ICAgIHsKKysgICAgICAgIGNvbnN0IGF1dG8gZHNQYXJhbXMgICAgID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRGVwdGhTdGVuY2lsQmxpdFBhcmFtcyAqPigmcGFyYW1zKTsKKysgICAgICAgIHVuaWZvcm1Q
YXJhbXMuc3JjTGV2ZWwyID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWxMZXZlbDsKKysgICAgICAgIHVu
aWZvcm1QYXJhbXMuc3JjTGF5ZXIyID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWxMYXllcjsKKysgICAg
fQorIAorICAgICAvLyBDb21wdXRlIHNvdXJjZSB0ZXhDb29yZHMKKyAgICAgdWludDMyX3Qgc3Jj
V2lkdGggPSAwLCBzcmNIZWlnaHQgPSAwOworQEAgLTcyNyw4ICs3OTUsOCBAQCB2b2lkIFNldHVw
QmxpdFdpdGhEcmF3VW5pZm9ybURhdGEoUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIs
CisgICAgIHsKKyAgICAgICAgIGNvbnN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMgKmRzUGFyYW1z
ID0KKyAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBEZXB0aFN0ZW5jaWxCbGl0UGFyYW1z
ICo+KCZwYXJhbXMpOworLSAgICAgICAgc3JjV2lkdGggID0gZHNQYXJhbXMtPnNyY1N0ZW5jaWwt
PndpZHRoKGRzUGFyYW1zLT5zcmNMZXZlbCk7CistICAgICAgICBzcmNIZWlnaHQgPSBkc1BhcmFt
cy0+c3JjU3RlbmNpbC0+aGVpZ2h0KGRzUGFyYW1zLT5zcmNMZXZlbCk7CisrICAgICAgICBzcmNX
aWR0aCAgPSBkc1BhcmFtcy0+c3JjU3RlbmNpbC0+d2lkdGgobXRsOjpNaXBtYXBOYXRpdmVMZXZl
bChkc1BhcmFtcy0+c3JjU3RlbmNpbExldmVsKSk7CisrICAgICAgICBzcmNIZWlnaHQgPSBkc1Bh
cmFtcy0+c3JjU3RlbmNpbC0+aGVpZ2h0KG10bDo6TWlwbWFwTmF0aXZlTGV2ZWwoZHNQYXJhbXMt
PnNyY1N0ZW5jaWxMZXZlbCkpOworICAgICB9CisgICAgIGVsc2UKKyAgICAgeworQEAgLTczOSw4
ICs4MDcsOCBAQCB2b2lkIFNldHVwQmxpdFdpdGhEcmF3VW5pZm9ybURhdGEoUmVuZGVyQ29tbWFu
ZEVuY29kZXIgKmNtZEVuY29kZXIsCisgICAgIEdldEJsaXRUZXhDb29yZHMoc3JjV2lkdGgsIHNy
Y0hlaWdodCwgcGFyYW1zLnNyY1JlY3QsIHBhcmFtcy5zcmNZRmxpcHBlZCwgcGFyYW1zLnVucGFj
a0ZsaXBYLAorICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bnBhY2tGbGlwWSwgJnUwLCAm
djAsICZ1MSwgJnYxKTsKKyAKKy0gICAgZmxvYXQgZHUgPSB1MSAtIHUwOworLSAgICBmbG9hdCBk
diA9IHYxIC0gdjA7CisrICAgIGF1dG8gZHUgPSB1MSAtIHUwOworKyAgICBhdXRvIGR2ID0gdjEg
LSB2MDsKKyAKKyAgICAgLy8gbG93ZXIgbGVmdAorICAgICB1bmlmb3JtUGFyYW1zLnNyY1RleENv
b3Jkc1swXVswXSA9IHUwOworQEAgLTg0NCwxOSArOTEyLDIxIEBAIEFOR0xFX0lOTElORSB2b2lk
IFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorIC8vIFN0
ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zIGltcGxlbWVudGF0aW9uCisgU3RlbmNpbEJsaXRWaWFC
dWZmZXJQYXJhbXM6OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zKCkge30KKyAKKy1TdGVuY2ls
QmxpdFZpYUJ1ZmZlclBhcmFtczo6U3RlbmNpbEJsaXRWaWFCdWZmZXJQYXJhbXMoY29uc3QgRGVw
dGhTdGVuY2lsQmxpdFBhcmFtcyAmc3JjSW4pCisrU3RlbmNpbEJsaXRWaWFCdWZmZXJQYXJhbXM6
OlN0ZW5jaWxCbGl0VmlhQnVmZmVyUGFyYW1zKGNvbnN0IERlcHRoU3RlbmNpbEJsaXRQYXJhbXMg
JnNyY1BhcmFtcykKKyB7CistICAgIGRzdFRleHR1cmVTaXplID0gc3JjSW4uZHN0VGV4dHVyZVNp
emU7CistICAgIGRzdFJlY3QgICAgICAgID0gc3JjSW4uZHN0UmVjdDsKKy0gICAgZHN0U2Npc3Nv
clJlY3QgPSBzcmNJbi5kc3RTY2lzc29yUmVjdDsKKy0gICAgZHN0RmxpcFkgICAgICAgPSBzcmNJ
bi5kc3RGbGlwWTsKKy0gICAgZHN0RmxpcFggICAgICAgPSBzcmNJbi5kc3RGbGlwWDsKKy0gICAg
c3JjUmVjdCAgICAgICAgPSBzcmNJbi5zcmNSZWN0OworLSAgICBzcmNZRmxpcHBlZCAgICA9IHNy
Y0luLnNyY1lGbGlwcGVkOworLSAgICB1bnBhY2tGbGlwWCAgICA9IHNyY0luLnVucGFja0ZsaXBY
OworLSAgICB1bnBhY2tGbGlwWSAgICA9IHNyY0luLnVucGFja0ZsaXBZOworKyAgICBkc3RUZXh0
dXJlU2l6ZSA9IHNyY1BhcmFtcy5kc3RUZXh0dXJlU2l6ZTsKKysgICAgZHN0UmVjdCAgICAgICAg
PSBzcmNQYXJhbXMuZHN0UmVjdDsKKysgICAgZHN0U2Npc3NvclJlY3QgPSBzcmNQYXJhbXMuZHN0
U2Npc3NvclJlY3Q7CisrICAgIGRzdEZsaXBZICAgICAgID0gc3JjUGFyYW1zLmRzdEZsaXBZOwor
KyAgICBkc3RGbGlwWCAgICAgICA9IHNyY1BhcmFtcy5kc3RGbGlwWDsKKysgICAgc3JjUmVjdCAg
ICAgICAgPSBzcmNQYXJhbXMuc3JjUmVjdDsKKysgICAgc3JjWUZsaXBwZWQgICAgPSBzcmNQYXJh
bXMuc3JjWUZsaXBwZWQ7CisrICAgIHVucGFja0ZsaXBYICAgID0gc3JjUGFyYW1zLnVucGFja0Zs
aXBYOworKyAgICB1bnBhY2tGbGlwWSAgICA9IHNyY1BhcmFtcy51bnBhY2tGbGlwWTsKKyAKKy0g
ICAgc3JjU3RlbmNpbCA9IHNyY0luLnNyY1N0ZW5jaWw7CisrICAgIHNyY1N0ZW5jaWwgICAgICA9
IHNyY1BhcmFtcy5zcmNTdGVuY2lsOworKyAgICBzcmNTdGVuY2lsTGV2ZWwgPSBzcmNQYXJhbXMu
c3JjU3RlbmNpbExldmVsOworKyAgICBzcmNTdGVuY2lsTGF5ZXIgPSBzcmNQYXJhbXMuc3JjU3Rl
bmNpbExheWVyOworIH0KKyAKKyAvLyBSZW5kZXJVdGlscyBpbXBsZW1lbnRhdGlvbgorQEAgLTkw
Myw2ICs5NzMsNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVD
b21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgfQorIH0KKyAKKysKKyAvLyBvdmVycmlkZSBF
cnJvckhhbmRsZXIKKyB2b2lkIFJlbmRlclV0aWxzOjpoYW5kbGVFcnJvcihHTGVudW0gZ2xFcnJv
ckNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwK
K0BAIC0xMDE2LDkgKzEwODcsMTAgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0
ZShDb21wdXRlQ29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisgfQorIGFuZ2xlOjpSZXN1bHQgUmVu
ZGVyVXRpbHM6OmdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXkoCisgICAgIENv
bnRleHRNdGwgKmNvbnRleHRNdGwsCistICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAm
cGFyYW1zKQorKyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAg
dWludDMyX3QgKmluZGljZXNHZW5lcmF0ZWQpCisgeworLSAgICByZXR1cm4gbUluZGV4VXRpbHMu
Z2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheShjb250ZXh0TXRsLCBwYXJhbXMp
OworKyAgICByZXR1cm4gbUluZGV4VXRpbHMuZ2VuZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVu
dHNBcnJheShjb250ZXh0TXRsLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworIH0KKyAKKyBh
bmdsZTo6UmVzdWx0IFJlbmRlclV0aWxzOjpnZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFycmF5
cygKK0BAIC0xMDUwLDYgKzExMjIsMjYgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVT
dGF0ZShDb21wdXRlQ29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisgeworICAgICByZXR1cm4gbUlu
ZGV4VXRpbHMuZ2VuZXJhdGVMaW5lTG9vcExhc3RTZWdtZW50RnJvbUVsZW1lbnRzQXJyYXkoY29u
dGV4dE10bCwgcGFyYW1zKTsKKyB9CisrYW5nbGU6OlJlc3VsdCBSZW5kZXJVdGlsczo6Z2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEluZGV4R2VuZXJhdGlvblBhcmFtcyAmcGFyYW1zLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKmluZGljZXNHZW5lcmF0ZWQpCisreworKyAgICByZXR1cm4gbUluZGV4VXRpbHMuZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKGNvbnRleHRNdGwsIHBhcmFtcywgaW5kaWNl
c0dlbmVyYXRlZCk7CisrfQorK2FuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6OmdlbmVyYXRlUHJp
bWl0aXZlUmVzdGFydExpbmVzQnVmZmVyKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICppbmRp
Y2VzR2VuZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIG1JbmRleFV0aWxzLmdlbmVyYXRlUHJpbWl0
aXZlUmVzdGFydExpbmVzQnVmZmVyKGNvbnRleHRNdGwsIHBhcmFtcywgaW5kaWNlc0dlbmVyYXRl
ZCk7CisrfQorK2FuZ2xlOjpSZXN1bHQgUmVuZGVyVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVz
dGFydFRyaWFuZ2xlc0J1ZmZlcigKKysgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAg
Y29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHNpemVfdCAqaW5kaWNl
c0dlbmVyYXRlZCkKKyt7CisrICAgIHJldHVybiBtSW5kZXhVdGlscy5nZW5lcmF0ZVByaW1pdGl2
ZVJlc3RhcnRUcmlhbmdsZXNCdWZmZXIoY29udGV4dE10bCwgcGFyYW1zLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGlj
ZXNHZW5lcmF0ZWQpOworK30KKyAKKyB2b2lkIFJlbmRlclV0aWxzOjpjb21iaW5lVmlzaWJpbGl0
eVJlc3VsdCgKKyAgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKK0BAIC0xMTIxLDYgKzEyMTMs
MjEgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVu
Y29kZXIgKmVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyk7CisgfQorIAorK2FuZ2xlOjpSZXN1bHQgUmVu
ZGVyVXRpbHM6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrUFNPKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlckNvbW1hbmRFbmNvZGVyICpyZW5kZXJFbmNvZGVyLAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10bDo6UmVuZGVyUGlw
ZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCisreworKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRs
ID0gbXRsOjpHZXRJbXBsKGNvbnRleHQpOworKyAgICAvLyBDcmVhdGUgYW5kIGNhY2hlIHRoZSBQ
U08KKysgICAgYXV0byBwc28gPSBtVHJhbnNmb3JtRmVlZGJhY2tVdGlscy5nZXRUcmFuc2Zvcm1G
ZWVkYmFja1JlbmRlclBpcGVsaW5lKGNvbnRleHRNdGwsIHJlbmRlckVuY29kZXIsCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwaXBlbGluZURlc2MpOworKyAgICBpZiAocHNvKQorKyAgICB7CisrICAgICAg
ICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CisrICAgIH0KKysgICAgcmV0dXJuIGFu
Z2xlOjpSZXN1bHQ6OlN0b3A7CisrfQorKworIC8vIENsZWFyVXRpbHMgaW1wbGVtZW50YXRpb24K
KyBDbGVhclV0aWxzOjpDbGVhclV0aWxzKGNvbnN0IHN0ZDo6c3RyaW5nICZmcmFnbWVudFNoYWRl
ck5hbWUpCisgICAgIDogbUZyYWdtZW50U2hhZGVyTmFtZShmcmFnbWVudFNoYWRlck5hbWUpCitA
QCAtMTI4NywxMSArMTM5NCwxMSBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRl
KENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgeworICAgICAgICAgb3ZlcnJp
ZGVkUGFyYW1zLmNsZWFyQ29sb3IucmVzZXQoKTsKKyAgICAgfQorLSAgICBpZiAoIXJlbmRlclBh
c3NEZXNjLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKQorKyAgICBpZiAoIXJlbmRlclBhc3NEZXNj
LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlKCkpCisgICAgIHsKKyAgICAgICAgIG92ZXJyaWRlZFBh
cmFtcy5jbGVhckRlcHRoLnJlc2V0KCk7CisgICAgIH0KKy0gICAgaWYgKCFyZW5kZXJQYXNzRGVz
Yy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlKQorKyAgICBpZiAoIXJlbmRlclBhc3NEZXNjLnN0
ZW5jaWxBdHRhY2htZW50LnRleHR1cmUoKSkKKyAgICAgeworICAgICAgICAgb3ZlcnJpZGVkUGFy
YW1zLmNsZWFyU3RlbmNpbC5yZXNldCgpOworICAgICB9CitAQCAtMTMwNyw3ICsxNDE0LDcgQEAg
QU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29kZXIg
KmVuY29kZXIsCisgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OworICAgICB7CisgICAgICAgICAv
LyBOZWVkIHRvIGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5LCBvdGhlcndpc2UgY2xlYXJpbmcgd2ls
bCBhZmZlY3QgdGhlIG9jY2x1c2lvbiBjb3VudGluZworLSAgICAgICAgU2NvcGVkRGlzYWJsZU9j
Y2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVzdWx0KTsK
KysgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9uUXVl
cnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CisgICAgICAgICAvLyBEcmF3IHRo
ZSBzY3JlZW4gYWxpZ25lZCB0cmlhbmdsZQorICAgICAgICAgY21kRW5jb2Rlci0+ZHJhdyhNVExQ
cmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOworICAgICB9CitAQCAtMTQ4MSw3ICsxNTg4LDcg
QEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29k
ZXIgKmVuY29kZXIsCisgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OworICAgICB7CisgICAgICAg
ICAvLyBOZWVkIHRvIGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5LCBvdGhlcndpc2UgYmxpdHRpbmcg
d2lsbCBhZmZlY3QgdGhlIG9jY2x1c2lvbiBjb3VudGluZworLSAgICAgICAgU2NvcGVkRGlzYWJs
ZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVzdWx0
KTsKKysgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVzaW9u
UXVlcnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CisgICAgICAgICAvLyBEcmF3
IHRoZSBzY3JlZW4gYWxpZ25lZCB0cmlhbmdsZQorICAgICAgICAgY21kRW5jb2Rlci0+ZHJhdyhN
VExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOworICAgICB9CitAQCAtMTcwMyw3ICsxODEw
LDcgQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVu
Y29kZXIgKmVuY29kZXIsCisgICAgIGFuZ2xlOjpSZXN1bHQgcmVzdWx0OworICAgICB7CisgICAg
ICAgICAvLyBOZWVkIHRvIGRpc2FibGUgb2NjbHVzaW9uIHF1ZXJ5LCBvdGhlcndpc2UgYmxpdHRp
bmcgd2lsbCBhZmZlY3QgdGhlIG9jY2x1c2lvbiBjb3VudGluZworLSAgICAgICAgU2NvcGVkRGlz
YWJsZU9jY2x1c2lvblF1ZXJ5IGRpc2FibGVPY2NsdXNpb25RdWVyeShjb250ZXh0TXRsLCAmcmVz
dWx0KTsKKysgICAgICAgIFNjb3BlZERpc2FibGVPY2NsdXNpb25RdWVyeSBkaXNhYmxlT2NjbHVz
aW9uUXVlcnkoY29udGV4dE10bCwgY21kRW5jb2RlciwgJnJlc3VsdCk7CisgICAgICAgICAvLyBE
cmF3IHRoZSBzY3JlZW4gYWxpZ25lZCB0cmlhbmdsZQorICAgICAgICAgY21kRW5jb2Rlci0+ZHJh
dyhNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIDAsIDMpOworICAgICB9CitAQCAtMjAwMiw3ICsy
MTA5LDggQEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFu
ZEVuY29kZXIgKmVuY29kZXIsCisgCisgYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxz
OjpnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5KAorICAgICBDb250ZXh0TXRs
ICpjb250ZXh0TXRsLAorLSAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcykK
KysgICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHVpbnQzMl90
ICppbmRpY2VzR2VuZXJhdGVkKQorIHsKKyAgICAgY29uc3QgZ2w6OlZlcnRleEFycmF5ICp2ZXJ0
ZXhBcnJheSA9IGNvbnRleHRNdGwtPmdldFN0YXRlKCkuZ2V0VmVydGV4QXJyYXkoKTsKKyAgICAg
Y29uc3QgZ2w6OkJ1ZmZlciAqZWxlbWVudEJ1ZmZlciAgICA9IHZlcnRleEFycmF5LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKTsKK0BAIC0yMDEzLDEzICsyMTIxLDE0IEBAIEFOR0xFX0lOTElORSB2
b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorICAg
ICAgICAgQU5HTEVfQ0hFQ0soY29udGV4dE10bCwgc3JjT2Zmc2V0IDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICJJbmRleCBvZmZz
ZXQgaXMgdG9vIGxhcmdlIiwgR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICBpZiAocGFyYW1z
LnByaW1pdGl2ZVJlc3RhcnRFbmFibGVkIHx8CistICAgICAgICAgICAgKCFjb250ZXh0TXRsLT5n
ZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuaGFzQ2hlYXBSZW5kZXJQYXNzLmVuYWJsZWQgJiYK
KysgICAgICAgICAgICAoIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5i
cmVha1JlbmRlclBhc3NJc0NoZWFwLmVuYWJsZWQgJiYKKyAgICAgICAgICAgICAgY29udGV4dE10
bC0+Z2V0UmVuZGVyQ29tbWFuZEVuY29kZXIoKSkpCisgICAgICAgICB7CisgICAgICAgICAgICAg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zIGNwdVBhdGhQYXJhbXMgPSBwYXJhbXM7CisgICAgICAgICAg
ICAgY3B1UGF0aFBhcmFtcy5pbmRpY2VzID0KKyAgICAgICAgICAgICAgICAgZWxlbWVudEJ1ZmZl
ck10bC0+Z2V0Q2xpZW50U2hhZG93Q29weURhdGEoY29udGV4dE10bCkgKyBzcmNPZmZzZXQ7Cist
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlD
UFUoY29udGV4dE10bCwgY3B1UGF0aFBhcmFtcyk7CisrICAgICAgICAgICAgcmV0dXJuIGdlbmVy
YXRlVHJpRmFuQnVmZmVyRnJvbUVsZW1lbnRzQXJyYXlDUFUoY29udGV4dE10bCwgY3B1UGF0aFBh
cmFtcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRpY2VzR2VuZXJhdGVkKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UK
KyAgICAgICAgIHsKK0BAIC0yMDMwLDcgKzIxMzksNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQ
aXBlbGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgfQorICAg
ICBlbHNlCisgICAgIHsKKy0gICAgICAgIHJldHVybiBnZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21F
bGVtZW50c0FycmF5Q1BVKGNvbnRleHRNdGwsIHBhcmFtcyk7CisrICAgICAgICByZXR1cm4gZ2Vu
ZXJhdGVUcmlGYW5CdWZmZXJGcm9tRWxlbWVudHNBcnJheUNQVShjb250ZXh0TXRsLCBwYXJhbXMs
IGluZGljZXNHZW5lcmF0ZWQpOworICAgICB9CisgfQorIAorQEAgLTIwNzQsMjIgKzIxODMsMjMg
QEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29k
ZXIgKmVuY29kZXIsCisgCisgYW5nbGU6OlJlc3VsdCBJbmRleEdlbmVyYXRvclV0aWxzOjpnZW5l
cmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0FycmF5Q1BVKAorICAgICBDb250ZXh0TXRsICpj
b250ZXh0TXRsLAorLSAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcykKKysg
ICAgY29uc3QgSW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHVpbnQzMl90ICpn
ZW5JbmRpY2VzKQorIHsKKyAgICAgc3dpdGNoIChwYXJhbXMuc3JjVHlwZSkKKyAgICAgeworICAg
ICAgICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRCeXRlOgorICAgICAgICAg
ICAgIHJldHVybiBHZW5UcmlGYW5Gcm9tQ2xpZW50RWxlbWVudHMoCisgICAgICAgICAgICAgICAg
IGNvbnRleHRNdGwsIHBhcmFtcy5pbmRleENvdW50LCBwYXJhbXMucHJpbWl0aXZlUmVzdGFydEVu
YWJsZWQsCistICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QgKj4ocGFy
YW1zLmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKKysgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMuaW5kaWNlcyks
IHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOworICAgICAg
ICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRTaG9ydDoKKyAgICAgICAgICAg
ICByZXR1cm4gR2VuVHJpRmFuRnJvbUNsaWVudEVsZW1lbnRzKAorICAgICAgICAgICAgICAgICBj
b250ZXh0TXRsLCBwYXJhbXMuaW5kZXhDb3VudCwgcGFyYW1zLnByaW1pdGl2ZVJlc3RhcnRFbmFi
bGVkLAorLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAqPihwYXJh
bXMuaW5kaWNlcyksIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQpOworKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAqPihwYXJhbXMuaW5kaWNlcyks
IHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGdlbkluZGljZXMpOworICAgICAg
ICAgY2FzZSBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6VW5zaWduZWRJbnQ6CisgICAgICAgICAgICAg
cmV0dXJuIEdlblRyaUZhbkZyb21DbGllbnRFbGVtZW50cygKKyAgICAgICAgICAgICAgICAgY29u
dGV4dE10bCwgcGFyYW1zLmluZGV4Q291bnQsIHBhcmFtcy5wcmltaXRpdmVSZXN0YXJ0RW5hYmxl
ZCwKKy0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4ocGFyYW1z
LmluZGljZXMpLCBwYXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0KTsKKysgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4ocGFyYW1zLmluZGljZXMpLCBw
YXJhbXMuZHN0QnVmZmVyLCBwYXJhbXMuZHN0T2Zmc2V0LCBnZW5JbmRpY2VzKTsKKyAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgfQorQEAgLTIzMDEs
NiArMjQxMSw1NiBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVD
b21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyAgICAgcmV0dXJuIGdlbmVyYXRlTGluZUxvb3BMYXN0
U2VnbWVudChjb250ZXh0TXRsLCBmaXJzdCwgbGFzdCwgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1z
LmRzdE9mZnNldCk7CisgfQorIAorK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6
Z2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0QnVmZmVyKAorKyAgICBDb250ZXh0TXRsICpjb250ZXh0
TXRsLAorKyAgICB1bnNpZ25lZCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwKKysgICAgY29uc3Qg
SW5kZXhHZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHNpemVfdCAqaW5kaWNlc0dlbmVy
YXRlZCkKKyt7CisrICAgIHN3aXRjaCAocGFyYW1zLnNyY1R5cGUpCisrICAgIHsKKysgICAgICAg
IGNhc2UgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OlVuc2lnbmVkQnl0ZToKKysgICAgICAgICAgICBy
ZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRsLCBwYXJhbXMuaW5kZXhD
b3VudCwgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCAqPihwYXJhbXMu
aW5kaWNlcyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCwgaW5kaWNlc0dlbmVyYXRlZCk7Cisr
ICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZFNob3J0OgorKyAgICAg
ICAgICAgIHJldHVybiBHZW5QcmltaXRpdmVSZXN0YXJ0QnVmZmVyKGNvbnRleHRNdGwsIHBhcmFt
cy5pbmRleENvdW50LCBudW1WZXJ0aWNlc1BlclByaW1pdGl2ZSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCB1aW50MTZfdCAq
PihwYXJhbXMuaW5kaWNlcyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmRzdEJ1ZmZlciwgcGFyYW1zLmRzdE9mZnNldCwgaW5kaWNlc0dlbmVy
YXRlZCk7CisrICAgICAgICBjYXNlIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpVbnNpZ25lZEludDoK
KysgICAgICAgICAgICByZXR1cm4gR2VuUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihjb250ZXh0TXRs
LCBwYXJhbXMuaW5kZXhDb3VudCwgbnVtVmVydGljZXNQZXJQcmltaXRpdmUsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDMyX3QgKj4ocGFyYW1zLmluZGljZXMpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5kc3RCdWZmZXIsIHBhcmFtcy5kc3RPZmZzZXQsIGluZGlj
ZXNHZW5lcmF0ZWQpOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworKyAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworKyAgICB9Cisr
fQorKworK2FuZ2xlOjpSZXN1bHQgSW5kZXhHZW5lcmF0b3JVdGlsczo6Z2VuZXJhdGVQcmltaXRp
dmVSZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAor
KyAgICBjb25zdCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAgc2l6ZV90ICpp
bmRpY2VzR2VuZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFy
dEJ1ZmZlcihjb250ZXh0TXRsLCAzLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworK30KKysK
KythbmdsZTo6UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVz
dGFydExpbmVzQnVmZmVyKAorKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICBjb25z
dCBJbmRleEdlbmVyYXRpb25QYXJhbXMgJnBhcmFtcywKKysgICAgc2l6ZV90ICppbmRpY2VzR2Vu
ZXJhdGVkKQorK3sKKysgICAgcmV0dXJuIGdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydEJ1ZmZlcihj
b250ZXh0TXRsLCAyLCBwYXJhbXMsIGluZGljZXNHZW5lcmF0ZWQpOworK30KKysKKythbmdsZTo6
UmVzdWx0IEluZGV4R2VuZXJhdG9yVXRpbHM6OmdlbmVyYXRlUHJpbWl0aXZlUmVzdGFydFBvaW50
c0J1ZmZlcigKKysgICAgQ29udGV4dE10bCAqY29udGV4dE10bCwKKysgICAgY29uc3QgSW5kZXhH
ZW5lcmF0aW9uUGFyYW1zICZwYXJhbXMsCisrICAgIHNpemVfdCAqaW5kaWNlc0dlbmVyYXRlZCkK
Kyt7CisrICAgIHJldHVybiBnZW5lcmF0ZVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIoY29udGV4dE10
bCwgMSwgcGFyYW1zLCBpbmRpY2VzR2VuZXJhdGVkKTsKKyt9CisrCisgLy8gVmlzaWJpbGl0eVJl
c3VsdFV0aWxzIGltcGxlbWVudGF0aW9uCisgdm9pZCBWaXNpYmlsaXR5UmVzdWx0VXRpbHM6Om9u
RGVzdHJveSgpCisgeworQEAgLTIzNzYsNiArMjUzNiw5IEBAIEFOR0xFX0lOTElORSB2b2lkIFNl
dFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorIHZvaWQgTWlw
bWFwVXRpbHM6Om9uRGVzdHJveSgpCisgeworICAgICBtM0RNaXBHZW5lcmF0b3JQaXBlbGluZSAg
ICAgID0gbmlsOworKyAgICBtMkRNaXBHZW5lcmF0b3JQaXBlbGluZSAgICAgID0gbmlsOworKyAg
ICBtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lID0gbmlsOworKyAgICBtQ3ViZU1pcEdlbmVy
YXRvclBpcGVsaW5lICAgID0gbmlsOworIH0KKyAKKyB2b2lkIE1pcG1hcFV0aWxzOjplbnN1cmUz
RE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkK
K0BAIC0yMzg0LDY2ICsyNTQ3LDc4IEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3Rh
dGUoQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICplbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbTNETWlwR2VuZXJhdG9yUGlwZWxpbmUpOworIH0KKyAKKyt2b2lk
IE1pcG1hcFV0aWxzOjplbnN1cmUyRE1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29u
dGV4dE10bCAqY29udGV4dE10bCkKKyt7CisrICAgIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRp
YWxpemVkKGNvbnRleHRNdGwtPmdldERpc3BsYXkoKSwgQCJnZW5lcmF0ZTJETWlwbWFwcyIsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtMkRNaXBHZW5lcmF0b3JQaXBl
bGluZSk7CisrfQorKworK3ZvaWQgTWlwbWFwVXRpbHM6OmVuc3VyZTJEQXJyYXlNaXBHZW5lcmF0
b3JQaXBlbGluZUluaXRpYWxpemVkKENvbnRleHRNdGwgKmNvbnRleHRNdGwpCisreworKyAgICBF
bnN1cmVDb21wdXRlUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsLT5nZXREaXNwbGF5KCks
IEAiZ2VuZXJhdGUyREFycmF5TWlwbWFwcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZtMkRBcnJheU1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyt9CisrCisrdm9pZCBN
aXBtYXBVdGlsczo6ZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVsaW5lSW5pdGlhbGl6ZWQoQ29u
dGV4dE10bCAqY29udGV4dE10bCkKKyt7CisrICAgIEVuc3VyZUNvbXB1dGVQaXBlbGluZUluaXRp
YWxpemVkKGNvbnRleHRNdGwtPmdldERpc3BsYXkoKSwgQCJnZW5lcmF0ZUN1YmVNaXBtYXBzIiwK
KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1DdWJlTWlwR2VuZXJhdG9y
UGlwZWxpbmUpOworK30KKysKKyBhbmdsZTo6UmVzdWx0IE1pcG1hcFV0aWxzOjpnZW5lcmF0ZU1p
cG1hcENTKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0dXJlUmVmICZzcmNUZXh0dXJlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzUkdCTWlwbWFwLAor
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlVGV4TGV2
ZWxBcnJheSAqbWlwbWFwT3V0cHV0Vmlld3MpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOYXRpdmVUZXhMZXZlbEFycmF5ICogbWlwbWFwT3V0cHV0Vmlld3Mp
CisgeworLSAgICAvLyBPbmx5IHN1cHBvcnQgM0QgdGV4dHVyZSBmb3Igbm93LgorLSAgICBBU1NF
UlQoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSA9PSBNVExUZXh0dXJlVHlwZTNEKTsKKysgICAg
Q29tcHV0ZUNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0Q29tcHV0
ZUNvbW1hbmRFbmNvZGVyKCk7CisrICAgIEFTU0VSVChjbWRFbmNvZGVyKTsKKyAKKyAgICAgTVRM
U2l6ZSB0aHJlYWRHcm91cFNpemU7CisgICAgIHVpbnQzMl90IHNsaWNlcyA9IDE7CistICAgIGlk
PE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPiBjb21wdXRlUGlwZWxpbmUgPSBuaWw7CistCisrICAg
IHN3aXRjaCAoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSkKKysgICAgeworKyAgICAgICAgY2Fz
ZSBNVExUZXh0dXJlVHlwZTJEOgorKyAgICAgICAgICAgIGVuc3VyZTJETWlwR2VuZXJhdG9yUGlw
ZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsKKysgICAgICAgICAgICBjbWRFbmNvZGVyLT5z
ZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShtMkRNaXBHZW5lcmF0b3JQaXBlbGluZSk7CisrICAgICAg
ICAgICAgdGhyZWFkR3JvdXBTaXplID0gTVRMU2l6ZU1ha2Uoa0dlbmVyYXRlTWlwVGhyZWFkR3Jv
dXBTaXplUGVyRGltLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwgMSk7CisrICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICBjYXNlIE1UTFRleHR1cmVUeXBlMkRBcnJheToKKysgICAgICAgICAgICBl
bnN1cmUyREFycmF5TWlwR2VuZXJhdG9yUGlwZWxpbmVJbml0aWFsaXplZChjb250ZXh0TXRsKTsK
KysgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRDb21wdXRlUGlwZWxpbmVTdGF0ZShtMkRBcnJh
eU1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKysgICAgICAgICAgICBzbGljZXMgICAgICAgICAgPSBz
cmNUZXh0dXJlLT5hcnJheUxlbmd0aCgpOworKyAgICAgICAgICAgIHRocmVhZEdyb3VwU2l6ZSA9
IE1UTFNpemVNYWtlKGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrR2VuZXJhdGVNaXBUaHJlYWRHcm91
cFNpemVQZXJEaW0sIDEpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSBNVExU
ZXh0dXJlVHlwZUN1YmU6CisrICAgICAgICAgICAgZW5zdXJlQ3ViZU1pcEdlbmVyYXRvclBpcGVs
aW5lSW5pdGlhbGl6ZWQoY29udGV4dE10bCk7CisrICAgICAgICAgICAgY21kRW5jb2Rlci0+c2V0
Q29tcHV0ZVBpcGVsaW5lU3RhdGUobUN1YmVNaXBHZW5lcmF0b3JQaXBlbGluZSk7CisrICAgICAg
ICAgICAgc2xpY2VzICAgICAgICAgID0gNjsKKysgICAgICAgICAgICB0aHJlYWRHcm91cFNpemUg
PSBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJlYWRHcm91cFNpemVQZXJEaW0sCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0dlbmVyYXRlTWlwVGhyZWFkR3Jv
dXBTaXplUGVyRGltLCAxKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgTVRM
VGV4dHVyZVR5cGUzRDoKKyAgICAgICAgICAgICBlbnN1cmUzRE1pcEdlbmVyYXRvclBpcGVsaW5l
SW5pdGlhbGl6ZWQoY29udGV4dE10bCk7CistICAgIGNvbXB1dGVQaXBlbGluZSA9IG0zRE1pcEdl
bmVyYXRvclBpcGVsaW5lOworKyAgICAgICAgICAgIGNtZEVuY29kZXItPnNldENvbXB1dGVQaXBl
bGluZVN0YXRlKG0zRE1pcEdlbmVyYXRvclBpcGVsaW5lKTsKKyAgICAgICAgICAgICB0aHJlYWRH
cm91cFNpemUgPQorICAgICAgICAgICAgICAgICBNVExTaXplTWFrZShrR2VuZXJhdGVNaXBUaHJl
YWRHcm91cFNpemVQZXJEaW0sIGtHZW5lcmF0ZU1pcFRocmVhZEdyb3VwU2l6ZVBlckRpbSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga0dlbmVyYXRlTWlwVGhyZWFkR3JvdXBTaXplUGVy
RGltKTsKKy0KKy0gICAgLy8gVGhlIGNvbXB1dGUgc2hhZGVyIHN1cHBvcnRzIHVwIHRvIDQgbWlw
bWFwcyBnZW5lcmF0ZWQgcGVyIHBhc3MuCistICAgIC8vIFNlZSBzaGFkZXJzL2dlbl9taXBtYXAu
bWV0YWwKKy0gICAgdWludDMyX3QgbWF4TWlwc1BlckJhdGNoID0gNDsKKy0KKy0gICAgaWYgKHRo
cmVhZEdyb3VwU2l6ZS53aWR0aCAqIHRocmVhZEdyb3VwU2l6ZS5oZWlnaHQgKiB0aHJlYWRHcm91
cFNpemUuZGVwdGggPgorLSAgICAgICAgICAgIGNvbXB1dGVQaXBlbGluZS5tYXhUb3RhbFRocmVh
ZHNQZXJUaHJlYWRncm91cCB8fAorLSAgICAgICAgQU5HTEVfVU5MSUtFTFkoCistICAgICAgICAg
ICAgIWNvbnRleHRNdGwtPmdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5hbGxvd0dlbk11bHRp
cGxlTWlwc1BlclBhc3MuZW5hYmxlZCkpCistICAgIHsKKy0gICAgICAgIC8vIE11bHRpcGxlIG1p
cG1hcHMgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGR1ZSB0byBoYXJkd2FyZSdzIHRocmVh
ZCBncm91cCBzaXplIGxpbWl0cy4KKy0gICAgICAgIC8vIEZhbGxiYWNrIHRvIGdlbmVyYXRlIG9u
ZSBtaXAgcGVyIHBhc3MgYW5kIHJlZHVjZSB0aHJlYWQgZ3JvdXAgc2l6ZS4KKy0gICAgICAgIGlm
IChBTkdMRV9VTkxJS0VMWSh0aHJlYWRHcm91cFNpemUud2lkdGggKiB0aHJlYWRHcm91cFNpemUu
aGVpZ2h0ID4KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlUGlwZWxpbmUubWF4
VG90YWxUaHJlYWRzUGVyVGhyZWFkZ3JvdXApKQorLSAgICAgICAgeworLSAgICAgICAgICAgIC8v
IEV2ZW4gd2l0aCByZWR1Y2VkIHRocmVhZCBncm91cCBzaXplLCB3ZSBjYW5ub3QgcHJvY2VlZC4K
Ky0gICAgICAgICAgICAvLyBIQUNLOiB1c2UgYmxpdCBjb21tYW5kIGVuY29kZXIgdG8gZ2VuZXJh
dGUgbWlwbWFwcyBpZiBpdCBpcyBub3QgcG9zc2libGUKKy0gICAgICAgICAgICAvLyB0byB1c2Ug
Y29tcHV0ZSBzaGFkZXIgZHVlIHRvIGhhcmR3YXJlIGxpbWl0cy4KKy0gICAgICAgICAgICBCbGl0
Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyID0gY29udGV4dE10bC0+Z2V0QmxpdENvbW1hbmRF
bmNvZGVyKCk7CistICAgICAgICAgICAgYmxpdEVuY29kZXItPmdlbmVyYXRlTWlwbWFwc0ZvclRl
eHR1cmUoc3JjVGV4dHVyZSk7CistICAgICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOworLSAgICAgICAgfQorLQorLSAgICAgICAgdGhyZWFkR3JvdXBTaXplLmRlcHRoID0g
MTsKKy0gICAgICAgIG1heE1pcHNQZXJCYXRjaCAgICAgICA9IDE7CisrICAgICAgICAgICAgYnJl
YWs7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
IH0KKyAKKy0gICAgQ29tcHV0ZUNvbW1hbmRFbmNvZGVyICpjbWRFbmNvZGVyID0gY29udGV4dE10
bC0+Z2V0Q29tcHV0ZUNvbW1hbmRFbmNvZGVyKCk7CistICAgIEFTU0VSVChjbWRFbmNvZGVyKTsK
Ky0gICAgY21kRW5jb2Rlci0+c2V0Q29tcHV0ZVBpcGVsaW5lU3RhdGUoY29tcHV0ZVBpcGVsaW5l
KTsKKy0KKy0gICAgR2VuZXJhdGVNaXBtYXBVbmlmb3JtIG9wdGlvbnM7CisrICAgIEdlbmVyYXRl
M0RNaXBtYXBVbmlmb3JtIG9wdGlvbnM7CisrICAgIHVpbnQzMl90IG1heE1pcHNQZXJCYXRjaCA9
IDQ7CisgCisgICAgIHVpbnQzMl90IHJlbWFpbk1pcHMgPSBzcmNUZXh0dXJlLT5taXBtYXBMZXZl
bHMoKSAtIDE7CistICAgIE1pcG1hcE5hdGl2ZUxldmVsIGJhdGNoU3JjTGV2ZWwgPSBrWmVyb05h
dGl2ZU1pcExldmVsOworLSAgICBvcHRpb25zLnNyY0xldmVsICAgICAgICAgICAgICAgID0gYmF0
Y2hTcmNMZXZlbC5nZXQoKTsKKy0gICAgb3B0aW9ucy5zUkdCICAgICAgICAgICAgICAgICAgICA9
IHNSR0JNaXBtYXA7CisrICAgIG9wdGlvbnMuc3JjTGV2ZWwgICAgPSAwOworIAorICAgICBjbWRF
bmNvZGVyLT5zZXRUZXh0dXJlKHNyY1RleHR1cmUsIDApOworICAgICBjbWRFbmNvZGVyLT5tYXJr
UmVzb3VyY2VCZWluZ1dyaXR0ZW5CeUdQVShzcmNUZXh0dXJlKTsKKyAgICAgd2hpbGUgKHJlbWFp
bk1pcHMpCisgICAgIHsKKy0gICAgICAgIGNvbnN0IFRleHR1cmVSZWYgJmZpcnN0TWlwVmlldyA9
IG1pcG1hcE91dHB1dFZpZXdzLT5hdChiYXRjaFNyY0xldmVsICsgMSk7CisrICAgICAgICBjb25z
dCBUZXh0dXJlUmVmICZmaXJzdE1pcFZpZXcgPSBtaXBtYXBPdXRwdXRWaWV3cy0+YXQobXRsOjpN
aXBtYXBOYXRpdmVMZXZlbChvcHRpb25zLnNyY0xldmVsICsgMSkpOworICAgICAgICAgZ2w6OkV4
dGVudHMgc2l6ZSAgICAgICAgICAgICAgID0gZmlyc3RNaXBWaWV3LT5zaXplQXQwKCk7CisgICAg
ICAgICBib29sIGlzUG93MiA9IGdsOjppc1BvdzIoc2l6ZS53aWR0aCkgJiYgZ2w6OmlzUG93Mihz
aXplLmhlaWdodCkgJiYgZ2w6OmlzUG93MihzaXplLmRlcHRoKTsKKyAKK0BAIC0yNDYxLDIwICsy
NjM2LDE4IEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1h
bmRFbmNvZGVyICplbmNvZGVyLAorIAorICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMTsgaSA8
PSBvcHRpb25zLm51bU1pcG1hcHNUb0dlbmVyYXRlOyArK2kpCisgICAgICAgICB7CistICAgICAg
ICAgICAgY21kRW5jb2Rlci0+c2V0VGV4dHVyZShtaXBtYXBPdXRwdXRWaWV3cy0+YXQoYmF0Y2hT
cmNMZXZlbCArIGkpLCBpKTsKKysgICAgICAgICAgICBjbWRFbmNvZGVyLT5zZXRUZXh0dXJlKG1p
cG1hcE91dHB1dFZpZXdzLT5hdChtdGw6Ok1pcG1hcE5hdGl2ZUxldmVsKG9wdGlvbnMuc3JjTGV2
ZWwgKyBpKSksIGkpOworICAgICAgICAgfQorIAorICAgICAgICAgdWludDMyX3QgdGhyZWFkc1Bl
clogPSBzdGQ6Om1heChzbGljZXMsIGZpcnN0TWlwVmlldy0+ZGVwdGhBdDAoKSk7CisgCistICAg
ICAgICBEaXNwYXRjaENvbXB1dGUoCistICAgICAgICAgICAgY29udGV4dE10bCwgY21kRW5jb2Rl
ciwKKysgICAgICAgIERpc3BhdGNoQ29tcHV0ZShjb250ZXh0TXRsLCBjbWRFbmNvZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qKiBhbGxvd05vblVuaWZvcm0gKi8gZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgTVRMU2l6ZU1ha2UoZmlyc3RNaXBWaWV3LT53aWR0aEF0MCgp
LCBmaXJzdE1pcFZpZXctPmhlaWdodEF0MCgpLCB0aHJlYWRzUGVyWiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyZWFkR3JvdXBTaXplKTsKKyAKKyAgICAgICAgIHJlbWFpbk1pcHMgLT0g
b3B0aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0ZTsKKy0gICAgICAgIGJhdGNoU3JjTGV2ZWwgICAg
PSBiYXRjaFNyY0xldmVsICsgb3B0aW9ucy5udW1NaXBtYXBzVG9HZW5lcmF0ZTsKKy0gICAgICAg
IG9wdGlvbnMuc3JjTGV2ZWwgPSBiYXRjaFNyY0xldmVsLmdldCgpOworKyAgICAgICAgb3B0aW9u
cy5zcmNMZXZlbCArPSBvcHRpb25zLm51bU1pcG1hcHNUb0dlbmVyYXRlOworICAgICB9CisgCisg
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK0BAIC0yNTA0LDggKzI2NzcsNyBA
QCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0YXRlKENvbXB1dGVDb21tYW5kRW5jb2Rl
ciAqZW5jb2RlciwKKyAgICAgaW50IHNoYWRlclRleHR1cmVUeXBlID0gR2V0U2hhZGVyVGV4dHVy
ZVR5cGUodGV4dHVyZSk7CisgICAgIGludCBpbmRleDIgPSBtdGxfc2hhZGVyOjprVGV4dHVyZVR5
cGVDb3VudCAqIChidWZmZXJXcml0ZSA/IDEgOiAwKSArIHNoYWRlclRleHR1cmVUeXBlOworIAor
LSAgICBBdXRvT2JqQ1B0cjxpZDxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4+ICZjYWNoZSA9Cist
ICAgICAgICBtUGl4ZWxzQ29weVBpcGVsaW5lQ2FjaGVzW2Zvcm1hdElEVmFsdWVdW2luZGV4Ml07
CisrICAgIGF1dG8gJmNhY2hlID0gbVBpeGVsc0NvcHlQaXBlbGluZUNhY2hlc1tmb3JtYXRJRFZh
bHVlXVtpbmRleDJdOworIAorICAgICBpZiAoIWNhY2hlKQorICAgICB7CitAQCAtMjc4Myw3ICsy
OTU1LDEwIEBAIEFOR0xFX0lOTElORSB2b2lkIFNldFBpcGVsaW5lU3RhdGUoQ29tcHV0ZUNvbW1h
bmRFbmNvZGVyICplbmNvZGVyLAorIFZlcnRleEZvcm1hdENvbnZlcnNpb25VdGlsczo6Z2V0Q29t
cG9uZW50c0V4cGFuZFJlbmRlclBpcGVsaW5lKENvbnRleHRNdGwgKmNvbnRleHRNdGwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIpCisgeworKyAgICBEaXNwbGF5TXRs
ICpkaXNwbGF5ID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpOworKyAgICBhdXRvIHNoYWRlckxp
YiAgICAgID0gZGlzcGxheS0+Z2V0RGVmYXVsdFNoYWRlcnNMaWIoKTsKKyAgICAgRW5zdXJlVmVy
dGV4U2hhZGVyT25seVBpcGVsaW5lQ2FjaGVJbml0aWFsaXplZChjb250ZXh0TXRsLCBAImV4cGFu
ZFZlcnRleEZvcm1hdENvbXBvbmVudHNWUyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyTGliLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtQ29tcG9uZW50c0V4cGFuZFJlbmRlclBp
cGVsaW5lQ2FjaGUpOworIAorICAgICBSZW5kZXJQaXBlbGluZURlc2MgcGlwZWxpbmVEZXNjID0g
R2V0Q29tcHV0aW5nVmVydGV4U2hhZGVyT25seVJlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVy
KTsKK0BAIC0yNzk3LDggKzI5NzIsNyBAQCBBTkdMRV9JTkxJTkUgdm9pZCBTZXRQaXBlbGluZVN0
YXRlKENvbXB1dGVDb21tYW5kRW5jb2RlciAqZW5jb2RlciwKKyB7CisgICAgIGludCBmb3JtYXRJ
RFZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihzcmNBbmdsZUZvcm1hdC5pZCk7CisgCistICAgIEF1
dG9PYmpDUHRyPGlkPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPj4gJmNhY2hlID0KKy0gICAgICAg
IG1Db252ZXJ0VG9GbG9hdENvbXBQaXBlbGluZUNhY2hlc1tmb3JtYXRJRFZhbHVlXTsKKysgICAg
YXV0byAmY2FjaGUgPSBtQ29udmVydFRvRmxvYXRDb21wUGlwZWxpbmVDYWNoZXNbZm9ybWF0SURW
YWx1ZV07CisgCisgICAgIGlmICghY2FjaGUpCisgICAgIHsKK0BAIC0yODQ5LDUgKzMwMjMsNTMg
QEAgQU5HTEVfSU5MSU5FIHZvaWQgU2V0UGlwZWxpbmVTdGF0ZShDb21wdXRlQ29tbWFuZEVuY29k
ZXIgKmVuY29kZXIsCisgICAgIHJldHVybiBjYWNoZS5nZXRSZW5kZXJQaXBlbGluZVN0YXRlKGNv
bnRleHRNdGwsIHBpcGVsaW5lRGVzYyk7CisgfQorIAorK0F1dG9PYmpDUHRyPGlkPE1UTExpYnJh
cnk+PiBUcmFuc2Zvcm1GZWVkYmFja1V0aWxzOjpjcmVhdGVNc2xYZmJMaWJyYXJ5KAorKyAgICBD
b250ZXh0TXRsICpjb250ZXh0TXRsLAorKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNsYXRl
ZE1zbCkKKyt7CisrICAgIEFOR0xFX01UTF9PQkpDX1NDT1BFCisrICAgIHsKKysgICAgICAgIERp
c3BsYXlNdGwgKmRpc3BsYXkgICAgID0gY29udGV4dE10bC0+Z2V0RGlzcGxheSgpOworKyAgICAg
ICAgaWQ8TVRMRGV2aWNlPiBtdGxEZXZpY2UgPSBkaXNwbGF5LT5nZXRNZXRhbERldmljZSgpOwor
KworKyAgICAgICAgLy8gQ29udmVydCB0byBhY3R1YWwgYmluYXJ5IHNoYWRlcgorKyAgICAgICAg
bXRsOjpBdXRvT2JqQ1B0cjxOU0Vycm9yICo+IGVyciA9IG5pbDsKKysgICAgICAgIG10bDo6QXV0
b09iakNQdHI8aWQ8TVRMTGlicmFyeT4+IG10bFNoYWRlckxpYiA9CisrICAgICAgICAgICAgbXRs
OjpDcmVhdGVTaGFkZXJMaWJyYXJ5KG10bERldmljZSwgdHJhbnNsYXRlZE1zbCwgJmVycik7Cisr
ICAgICAgICBpZiAoZXJyICYmICFtdGxTaGFkZXJMaWIpCisrICAgICAgICB7CisrICAgICAgICAg
ICAgTlNMb2coQCIlQCIsIGVyci5nZXQoKSk7CisrICAgICAgICAgICAgYXNzZXJ0KDApOworKyAg
ICAgICAgfQorKyAgICAgICAgcmV0dXJuIG10bFNoYWRlckxpYjsKKysgICAgfQorK30KKysKKytB
dXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0YXRlPj4gVHJhbnNmb3JtRmVlZGJhY2tV
dGlsczo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tSZW5kZXJQaXBlbGluZSgKKysgICAgQ29udGV4dE10
bCAqY29udGV4dE10bCwKKysgICAgUmVuZGVyQ29tbWFuZEVuY29kZXIgKmNtZEVuY29kZXIsCisr
ICAgIG10bDo6UmVuZGVyUGlwZWxpbmVEZXNjICZwaXBlbGluZURlc2MpCisreworKyAgICBjb25z
dCBQcm9ncmFtTXRsICpwcm9ncmFtTXRsID0gbXRsOjpHZXRJbXBsKGNvbnRleHRNdGwtPmdldFN0
YXRlKCkuZ2V0UHJvZ3JhbSgpKTsKKysgICAgUmVuZGVyUGlwZWxpbmVDYWNoZSAmY2FjaGUgICA9
ICpwcm9ncmFtTXRsLT5tTWV0YWxYZmJSZW5kZXJQaXBlbGluZUNhY2hlOworKworKyAgICBpZiAo
IWNhY2hlLmdldFZlcnRleFNoYWRlcigpKQorKyAgICB7CisrICAgICAgICAvLyBQaXBlbGluZSBj
YWNoZSBub3QgaW50aWFsaXplZCwgZG8gaXQgbm93OgorKyAgICAgICAgQU5HTEVfTVRMX09CSkNf
U0NPUEUKKysgICAgICAgIHsKKysgICAgICAgICAgICBhdXRvIHNoYWRlckxpYiA9IGNyZWF0ZU1z
bFhmYkxpYnJhcnkoY29udGV4dE10bCwgcHJvZ3JhbU10bC0+Z2V0WGZiTXNsU291cmNlKCkpOwor
KyAgICAgICAgICAgIC8vIE5vbiBzcGVjaWFsaXplZCBjb25zdGFudHMgcHJvdmlkZWQsIHVzZSBk
ZWZhdWx0IGNyZWF0aW9uIGZ1bmN0aW9uLgorKyAgICAgICAgICAgIEVuc3VyZVZlcnRleFNoYWRl
ck9ubHlQaXBlbGluZUNhY2hlSW5pdGlhbGl6ZWQoY29udGV4dE10bCwgU0hBREVSX0VOVFJZX05B
TUUsIHNoYWRlckxpYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZjYWNoZSk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAg
UmVuZGVyUGlwZWxpbmVEZXNjIHhmYlBpcGVsaW5lRGVzYyA9CisrICAgICAgICBHZXRUcmFuc2Zv
cm1GZWVkYmFja1JlbmRlclBpcGVsaW5lRGVzYyhjbWRFbmNvZGVyLCBwaXBlbGluZURlc2MpOwor
KworKyAgICByZXR1cm4gY2FjaGUuZ2V0UmVuZGVyUGlwZWxpbmVTdGF0ZShjb250ZXh0TXRsLCB4
ZmJQaXBlbGluZURlc2MpOworK30KKysKKyB9ICAvLyBuYW1lc3BhY2UgbXRsCisgfSAgLy8gbmFt
ZXNwYWNlIHJ4CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9y
ZXNvdXJjZXMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfcmVzb3VyY2VzLmgK
K2luZGV4IGYyMjA2NTAuLjJlMzMzNGQgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5oCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX3Jlc291cmNlcy5oCitAQCAtNjMsNyArNjMsNiBAQCBjbGFzcyBSZXNvdXJjZSA6IGFu
Z2xlOjpOb25Db3B5YWJsZQorICAgICBib29sIGlzQ1BVUmVhZE1lbU5lZWRTeW5jKCkgY29uc3Qg
eyByZXR1cm4gbVVzYWdlUmVmLT5jcHVSZWFkTWVtTmVlZFN5bmM7IH0KKyAgICAgdm9pZCByZXNl
dENQVVJlYWRNZW1OZWVkU3luYygpIHsgbVVzYWdlUmVmLT5jcHVSZWFkTWVtTmVlZFN5bmMgPSBm
YWxzZTsgfQorIAorLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWZ1bCBmb3IgQnVmZmVy
TXRsIHRvIGtub3cgd2hldGhlciBpdCBzaG91bGQgdXBkYXRlIHRoZSBzaGFkb3cgY29weQorICAg
ICBib29sIGlzQ1BVUmVhZE1lbURpcnR5KCkgY29uc3QgeyByZXR1cm4gbVVzYWdlUmVmLT5jcHVS
ZWFkTWVtRGlydHk7IH0KKyAgICAgdm9pZCByZXNldENQVVJlYWRNZW1EaXJ0eSgpIHsgbVVzYWdl
UmVmLT5jcHVSZWFkTWVtRGlydHkgPSBmYWxzZTsgfQorIAorQEAgLTgxLDcgKzgwLDcgQEAgY2xh
c3MgUmVzb3VyY2UgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgICAgIHVpbnQ2NF90IGNtZEJ1
ZmZlclF1ZXVlU2VyaWFsID0gMDsKKyAKKyAgICAgICAgIC8vIFRoaXMgZmxhZyBtZWFucyB0aGUg
cmVzb3VyY2Ugd2FzIGlzc3VlZCB0byBiZSBtb2RpZmllZCBieSBHUFUsIGlmIENQVSB3YW50cyB0
byByZWFkCistICAgICAgICAvLyBpdHMgY29udGVudCwgZXhwbGljaXQgc3luY2hyb25pemF0aW9u
IGNhbGwgbXVzdCBiZSBpbnZva2VkLgorKyAgICAgICAgLy8gaXRzIGNvbnRlbnQsIGV4cGxpY2l0
IHN5bmNob3JuaXphdGlvbiBjYWxsIG11c3QgYmUgaW52b2tlZC4KKyAgICAgICAgIGJvb2wgY3B1
UmVhZE1lbU5lZWRTeW5jID0gZmFsc2U7CisgCisgICAgICAgICAvLyBUaGlzIGZsYWcgaXMgdXNl
ZnVsIGZvciBCdWZmZXJNdGwgdG8ga25vdyB3aGV0aGVyIGl0IHNob3VsZCB1cGRhdGUgdGhlIHNo
YWRvdyBjb3B5CitAQCAtMTEwLDYgKzEwOSwxMyBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDogcHVi
bGljIFJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYWxsb3dGb3JtYXRWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisgCisrICAgIC8vIE9uIG1hY09TLCBtZW1vcnkgd2ls
bCBzdGlsbCBiZSBhbGxvY2F0ZWQgZm9yIHRoaXMgdGV4dHVyZS4KKysgICAgc3RhdGljIGFuZ2xl
OjpSZXN1bHQgTWFrZU1lbW9yeUxlc3MyRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9y
bWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHdpZHRoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisrCisgICAg
IHN0YXRpYyBhbmdsZTo6UmVzdWx0IE1ha2VDdWJlVGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0
ICZmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBzaXplLAorQEAgLTE0NywxMCArMTUzLDIxIEBAIGNsYXNzIFRleHR1cmUgZmluYWwgOiBw
dWJsaWMgUmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KTsKKyAKKysgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQg
TWFrZUlPU3VyZmFjZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3JtYXQsCisr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdp
ZHRoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElPU3VyZmFjZVJlZiByZWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IHBsYW5lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOworKworICAgICBzdGF0aWMg
VGV4dHVyZVJlZiBNYWtlRnJvbU1ldGFsKGlkPE1UTFRleHR1cmU+IG1ldGFsVGV4dHVyZSk7Cisg
CisgICAgIC8vIEFsbG93IENQVSB0byByZWFkICYgd3JpdGUgZGF0YSBkaXJlY3RseSB0byB0aGlz
IHRleHR1cmU/CisgICAgIGJvb2wgaXNDUFVBY2Nlc3NpYmxlKCkgY29uc3Q7CisrICAgIC8vIEFs
bG93IHNoYWRlcnMgdG8gcmVhZC9zYW1wbGUgdGhpcyB0ZXh0dXJlPworKyAgICAvLyBUZXh0dXJl
IGNyZWF0ZWQgd2l0aCByZW5kZXJUYXJnZXRPbmx5IGZsYWcgd29uJ3QgYmUgcmVhZGFibGUKKysg
ICAgYm9vbCBpc1NoYWRlclJlYWRhYmxlKCkgY29uc3Q7CisgCisgICAgIGJvb2wgc3VwcG9ydEZv
cm1hdFZpZXcoKSBjb25zdDsKKyAKK0BAIC0yMTgsMTYgKzIzNSwyOSBAQCBjbGFzcyBUZXh0dXJl
IGZpbmFsIDogcHVibGljIFJlc291cmNlLAorICAgICBNVExDb2xvcldyaXRlTWFzayBnZXRDb2xv
cldyaXRhYmxlTWFzaygpIGNvbnN0IHsgcmV0dXJuICptQ29sb3JXcml0YWJsZU1hc2s7IH0KKyAg
ICAgdm9pZCBzZXRDb2xvcldyaXRhYmxlTWFzayhNVExDb2xvcldyaXRlTWFzayBtYXNrKSB7ICpt
Q29sb3JXcml0YWJsZU1hc2sgPSBtYXNrOyB9CisgCistICAgIC8vIEdldCBsaW5lYXIgY29sb3Ig
c3BhY2Ugdmlldy4gT25seSB1c2FibGUgZm9yIHNSR0IgdGV4dHVyZXMuCistICAgIFRleHR1cmVS
ZWYgZ2V0TGluZWFyQ29sb3JWaWV3KCk7CisrICAgIC8vIEdldCByZWFkaW5nIGNvcHkuIFVzZWQg
Zm9yIHJlYWRpbmcgbm9uLXJlYWRhYmxlIHRleHR1cmUgb3IgcmVhZGluZyBzdGVuY2lsIHZhbHVl
IGZyb20KKysgICAgLy8gcGFja2VkIGRlcHRoICYgc3RlbmNpbCB0ZXh0dXJlLgorKyAgICAvLyBO
T1RFOiB0aGlzIG9ubHkgY29waWVzIDEgZGVwdGggc2xpY2Ugb2YgdGhlIDNEIHRleHR1cmUuCisr
ICAgIC8vIFRoZSB0ZXhlbHMgd2lsbCBiZSBjb3BpZWQgdG8gcmVnaW9uKDAsIDAsIDAsIGFyZWFU
b0NvcHkuc2l6ZSkgb2YgdGhlIHJldHVybmVkIHRleHR1cmUuCisrICAgIC8vIFRoZSByZXR1cm5l
ZCBwb2ludGVyIHdpbGwgYmUgcmV0YWluZWQgYnkgdGhlIG9yaWdpbmFsIHRleHR1cmUgb2JqZWN0
LgorKyAgICAvLyBDYWxsaW5nIGdldFJlYWRhYmxlQ29weSgpIHdpbGwgb3ZlcndyaXRlIHByZXZp
b3VzbHkgcmV0dXJuZWQgdGV4dHVyZS4KKysgICAgVGV4dHVyZVJlZiBnZXRSZWFkYWJsZUNvcHko
Q29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRs
OjpCbGl0Q29tbWFuZEVuY29kZXIgKmVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVpbnQzMl90IGxldmVsVG9Db3B5LAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50MzJfdCBzbGljZVRvQ29weSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTVRMUmVnaW9uICZhcmVhVG9Db3B5KTsKKysKKysgICAgdm9p
ZCByZWxlYXNlUmVhZGFibGVDb3B5KCk7CisgCisgICAgIC8vIEdldCBzdGVuY2lsIHZpZXcKKyAg
ICAgVGV4dHVyZVJlZiBnZXRTdGVuY2lsVmlldygpOworKyAgICAvL0dldCBsaW5lYXIgY29sb3IK
KysgICAgVGV4dHVyZVJlZiBnZXRMaW5lYXJDb2xvclZpZXcoKTsKKyAKKyAgICAgLy8gQ2hhbmdl
IHRoZSB3cmFwcGVkIG1ldGFsIG9iamVjdC4gU3BlY2lhbCBjYXNlIGZvciBzd2FwY2hhaW4gaW1h
Z2UKKyAgICAgdm9pZCBzZXQoaWQ8TVRMVGV4dHVyZT4gbWV0YWxUZXh0dXJlKTsKKyAKKy0gICAg
Ly8gc3luYyBjb250ZW50IGJldHdlZW4gQ1BVIGFuZCBHUFUKKysgICAgLy8gRXhwbGljaXRseSBz
eW5jIGNvbnRlbnQgYmV0d2VlbiBDUFUgYW5kIEdQVQorICAgICB2b2lkIHN5bmNDb250ZW50KENv
bnRleHRNdGwgKmNvbnRleHQsIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICplbmNvZGVyKTsKKyAK
KyAgIHByaXZhdGU6CitAQCAtMjQxLDEyICsyNzEsNDEgQEAgY2xhc3MgVGV4dHVyZSBmaW5hbCA6
IHB1YmxpYyBSZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd0Zvcm1hdFZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisgCisrICAgIHN0YXRpYyBhbmdsZTo6UmVzdWx0IE1h
a2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbWlwcywKKysgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93Rm9ybWF0VmlldywKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZW1vcnlMZXNzLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpOwor
KworKyAgICBzdGF0aWMgYW5nbGU6OlJlc3VsdCBNYWtlVGV4dHVyZShDb250ZXh0TXRsICpjb250
ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQg
Jm10bEZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMVGV4
dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElPU3VyZmFjZVJlZiBzdXJmYWNlUmVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHJlbmRlclRhcmdldE9ubHksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCk7CisrCisgICAgIFRleHR1cmUoaWQ8
TVRMVGV4dHVyZT4gbWV0YWxUZXh0dXJlKTsKKyAgICAgVGV4dHVyZShDb250ZXh0TXRsICpjb250
ZXh0LAorICAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAorICAgICAgICAg
ICAgIHVpbnQzMl90IG1pcHMsCisgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAor
ICAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3KTsKKysgICAgVGV4dHVyZShDb250ZXh0
TXRsICpjb250ZXh0LAorKyAgICAgICAgICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjLAor
KyAgICAgICAgICAgIHVpbnQzMl90IG1pcHMsCisrICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJn
ZXRPbmx5LAorKyAgICAgICAgICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorKyAgICAgICAgICAg
IGJvb2wgbWVtb3J5TGVzcyk7CisrCisrICAgIFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwK
KysgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKysgICAgICAgICAgICBJ
T1N1cmZhY2VSZWYgaW9zdXJmYWNlLAorKyAgICAgICAgICAgIE5TVUludGVnZXIgcGxhbmUsCisr
ICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5KTsKKyAKKyAgICAgLy8gQ3JlYXRlIGEg
dGV4dHVyZSB2aWV3CisgICAgIFRleHR1cmUoVGV4dHVyZSAqb3JpZ2luYWwsIE1UTFBpeGVsRm9y
bWF0IGZvcm1hdCk7CitAQCAtMjY0LDkgKzMyMywxNCBAQCBjbGFzcyBUZXh0dXJlIGZpbmFsIDog
cHVibGljIFJlc291cmNlLAorICAgICBUZXh0dXJlUmVmIG1MaW5lYXJDb2xvclZpZXc7CisgCisg
ICAgIFRleHR1cmVSZWYgbVN0ZW5jaWxWaWV3OworKyAgICAvL1JlYWRhYmxlIGNvcHkgb2YgdGV4
dHVyZQorKyAgICBUZXh0dXJlUmVmIG1SZWFkQ29weTsKKysKKyB9OworIAorLWNsYXNzIEJ1ZmZl
ciBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZSwgcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQnVm
ZmVyPj4KKytjbGFzcyBCdWZmZXIgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2UsCisrICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFdyYXBwZWRPYmplY3Q8aWQ8TVRMQnVmZmVyPj4sCisrICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIHN0ZDo6ZW5hYmxlX3NoYXJlZF9mcm9tX3RoaXM8QnVmZmVy
PgorIHsKKyAgIHB1YmxpYzoKKyAgICAgc3RhdGljIGFuZ2xlOjpSZXN1bHQgTWFrZUJ1ZmZlcihD
b250ZXh0TXRsICpjb250ZXh0LAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfcmVzb3VyY2VzLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9y
ZXNvdXJjZXMubW0KK2luZGV4IDliZWU0NzUuLmQwNDc1YWUgMTAwNjQ0CistLS0gYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291cmNlcy5tbQorKysrIGIvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9yZXNvdXJjZXMubW0KK0BAIC0zNCwyMCArMzQsMjIgQEAgaW5s
aW5lIE5TVUludGVnZXIgR2V0TWlwU2l6ZShOU1VJbnRlZ2VyIGJhc2VTaXplLCBjb25zdCBNaXBt
YXBOYXRpdmVMZXZlbCBsZXZlbCkKKyAvLyBBc3luY2hyb25vdXNseSBzeW5jaHJvbml6ZSB0aGUg
Y29udGVudCBvZiBhIHJlc291cmNlIGJldHdlZW4gR1BVIG1lbW9yeSBhbmQgaXRzIENQVSBjYWNo
ZS4KKyAvLyBOT1RFOiBUaGlzIG9wZXJhdGlvbiBkb2Vzbid0IGZpbmlzaCBpbW1lZGlhdGVseSB1
cG9uIGZ1bmN0aW9uJ3MgcmV0dXJuLgorIHRlbXBsYXRlIDxjbGFzcyBUPgorLXZvaWQgSW52b2tl
Q1BVTWVtU3luYyhDb250ZXh0TXRsICpjb250ZXh0LCBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAq
YmxpdEVuY29kZXIsIFQgKnJlc291cmNlKQorK3ZvaWQgU3luY0NvbnRlbnQoQ29udGV4dE10bCAq
Y29udGV4dCwKKysgICAgICAgICAgICAgICAgIG10bDo6QmxpdENvbW1hbmRFbmNvZGVyICpibGl0
RW5jb2RlciwKKysgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2hhcmVkX3B0cjxUPiAmcmVz
b3VyY2UpCisgeworICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVAor
ICAgICBpZiAoYmxpdEVuY29kZXIpCisgICAgIHsKKyAgICAgICAgIGJsaXRFbmNvZGVyLT5zeW5j
aHJvbml6ZVJlc291cmNlKHJlc291cmNlKTsKKysKKyAgICAgICAgIHJlc291cmNlLT5yZXNldENQ
VVJlYWRNZW1OZWVkU3luYygpOworICAgICB9CisgI2VuZGlmCisgfQorLS8vIEVuc3VyZSB0aGF0
IGEgcmVzb3VyY2UncyBDUFUgY2FjaGUgd2lsbCBiZSBzeW5jaHJvbml6ZWQgYWZ0ZXIgR1BVIGZp
bmlzaGVzIGl0cyBtb2RpZmljYXRpb25zIG9uCistLy8gdGhlIHJlc291cmNlLgorKworIHRlbXBs
YXRlIDxjbGFzcyBUPgorLXZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwg
KmNvbnRleHQsIFQgKnJlc291cmNlKQorK3ZvaWQgRW5zdXJlQ29udGVudFN5bmNlZChDb250ZXh0
TXRsICpjb250ZXh0LCBjb25zdCBzdGQ6OnNoYXJlZF9wdHI8VD4gJnJlc291cmNlKQorIHsKKyAj
aWYgVEFSR0VUX09TX09TWCB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKKyAgICAgLy8gTWFrZSBz
dXJlIEdQVSAmIENQVSBjb250ZW50cyBhcmUgc3luY2hyb25pemVkLgorQEAgLTU2LDcgKzU4LDcg
QEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAqY29udGV4dCwgVCAq
cmVzb3VyY2UpCisgICAgIGlmIChyZXNvdXJjZS0+Z2V0KCkuc3RvcmFnZU1vZGUgPT0gTVRMU3Rv
cmFnZU1vZGVNYW5hZ2VkICYmIHJlc291cmNlLT5pc0NQVVJlYWRNZW1OZWVkU3luYygpKQorICAg
ICB7CisgICAgICAgICBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIgPSBjb250
ZXh0LT5nZXRCbGl0Q29tbWFuZEVuY29kZXIoKTsKKy0gICAgICAgIEludm9rZUNQVU1lbVN5bmMo
Y29udGV4dCwgYmxpdEVuY29kZXIsIHJlc291cmNlKTsKKysgICAgICAgIFN5bmNDb250ZW50KGNv
bnRleHQsIGJsaXRFbmNvZGVyLCByZXNvdXJjZSk7CisgICAgIH0KKyAjZW5kaWYKKyB9CitAQCAt
MTIyLDYgKzEyNCwyNCBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRs
ICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUK
KyB9CisgCisrLyoqIHN0YXRpYyAqLworK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6TWFrZU1lbW9y
eUxlc3MyRFRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmZm9ybWF0LAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgd2lkdGgs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUZXh0dXJlUmVmICpyZWZPdXQpCisreworKyAgICBBTkdMRV9NVExfT0JKQ19TQ09QRQorKyAg
ICB7CisrICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYyA9CisrICAgICAgICAgICAg
W01UTFRleHR1cmVEZXNjcmlwdG9yIHRleHR1cmUyRERlc2NyaXB0b3JXaXRoUGl4ZWxGb3JtYXQ6
Zm9ybWF0Lm1ldGFsRm9ybWF0CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6d2lkdGgKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDpoZWln
aHQKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1pcG1hcHBlZDpOT107CisrCisrICAgICAgICByZXR1cm4gTWFrZVRleHR1cmUoY29u
dGV4dCwgZm9ybWF0LCBkZXNjLCAxLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgcmVmT3V0KTsKKysgICAg
fSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKKyt9CisgLyoqIHN0YXRpYyAqLworIGFuZ2xlOjpS
ZXN1bHQgVGV4dHVyZTo6TWFrZUN1YmVUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybWF0ICZmb3JtYXQs
CitAQCAtMjIzLDYgKzI0MywyMyBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250
ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgICAgIHJldHVybiBNYWtlVGV4dHVy
ZShjb250ZXh0LCBmb3JtYXQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9ubHksIGFsbG93Rm9y
bWF0VmlldywgcmVmT3V0KTsKKyAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKKyB9Cisr
YW5nbGU6OlJlc3VsdCBUZXh0dXJlOjpNYWtlSU9TdXJmYWNlVGV4dHVyZShDb250ZXh0TXRsICpj
b250ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRm9ybWF0ICZmb3JtYXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCB3aWR0aCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElPU3VyZmFjZVJlZiByZWYsCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwbGFuZSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVSZWYgKnJlZk91dCkKKyt7Cisr
ICAgIE1UTFRleHR1cmVEZXNjcmlwdG9yICpkZXNjID0gW1tNVExUZXh0dXJlRGVzY3JpcHRvciBu
ZXddIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CisrICAgIGRlc2MudGV4dHVyZVR5cGUgICAgICAg
ICAgID0gTVRMVGV4dHVyZVR5cGUyRDsKKysgICAgZGVzYy5waXhlbEZvcm1hdCAgICAgICAgICAg
PSBmb3JtYXQubWV0YWxGb3JtYXQ7CisrICAgIGRlc2Mud2lkdGggICAgICAgICAgICAgICAgID0g
d2lkdGg7CisrICAgIGRlc2MuaGVpZ2h0ICAgICAgICAgICAgICAgID0gaGVpZ2h0OworKyAgICBk
ZXNjLm1pcG1hcExldmVsQ291bnQgICAgICA9IDE7CisrICAgIGRlc2Muc2FtcGxlQ291bnQgICAg
ICAgICAgID0gMTsKKysgICAgcmV0dXJuIE1ha2VUZXh0dXJlKGNvbnRleHQsIGZvcm1hdCwgZGVz
YywgcmVmLCBwbGFuZSwgTk8sIHJlZk91dCk7CisrfQorIAorIC8qKiBzdGF0aWMgKi8KKyBhbmds
ZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRleHQsCitAQCAt
MjMzLDcgKzI3MCw0MiBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRs
ICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYWxsb3dGb3JtYXRWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KQorIHsKKy0gICAgcmVmT3V0LT5yZXNldChuZXcgVGV4
dHVyZShjb250ZXh0LCBkZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZp
ZXcpKTsKKysgICAgcmV0dXJuIE1ha2VUZXh0dXJlKGNvbnRleHQsIG10bEZvcm1hdCwgZGVzYywg
bWlwcywgcmVuZGVyVGFyZ2V0T25seSwgYWxsb3dGb3JtYXRWaWV3LCBmYWxzZSwKKysgICAgICAg
ICAgICAgICAgICAgICAgIHJlZk91dCk7CisrfQorKworK2FuZ2xlOjpSZXN1bHQgVGV4dHVyZTo6
TWFrZVRleHR1cmUoQ29udGV4dE10bCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZvcm1hdCAmbXRsRm9ybWF0LAorKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBtaXBzLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1lbW9yeUxlc3MsCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlUmVmICpyZWZPdXQpCisreworKyAgICByZWZP
dXQtPnJlc2V0KG5ldyBUZXh0dXJlKGNvbnRleHQsIGRlc2MsIG1pcHMsIHJlbmRlclRhcmdldE9u
bHksIGFsbG93Rm9ybWF0VmlldywgbWVtb3J5TGVzcykpOworKworKyAgICBpZiAoIXJlZk91dCB8
fCAhcmVmT3V0LT5nZXQoKSkKKysgICAgeworKyAgICAgICAgQU5HTEVfTVRMX0NIRUNLKGNvbnRl
eHQsIGZhbHNlLCBHTF9PVVRfT0ZfTUVNT1JZKTsKKysgICAgfQorKyAgICBpZiAoIW10bEZvcm1h
dC5oYXNEZXB0aEFuZFN0ZW5jaWxCaXRzKCkpCisrICAgIHsKKysgICAgICAgIHJlZk91dC0+Z2V0
KCktPnNldENvbG9yV3JpdGFibGVNYXNrKEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2sobXRsRm9y
bWF0KSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwor
K30KKysKKythbmdsZTo6UmVzdWx0IFRleHR1cmU6Ok1ha2VUZXh0dXJlKENvbnRleHRNdGwgKmNv
bnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXQg
Jm10bEZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTFRleHR1
cmVEZXNjcmlwdG9yICpkZXNjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SU9TdXJmYWNlUmVmIHN1cmZhY2VSZWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOU1VJbnRlZ2VyIHNsaWNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVGV4dHVyZVJlZiAqcmVmT3V0KQorK3sKKysgICAgcmVmT3V0LT5yZXNldChuZXcgVGV4
dHVyZShjb250ZXh0LCBkZXNjLCBzdXJmYWNlUmVmLCBzbGljZSwgcmVuZGVyVGFyZ2V0T25seSkp
OworIAorICAgICBpZiAoISgqcmVmT3V0KSB8fCAhKCpyZWZPdXQpLT5nZXQoKSkKKyAgICAgewor
QEAgLTI2NCw2ICszMzYsMTUgQEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4
dE10bCAqY29udGV4dCwgVCAqcmVzb3VyY2UpCisgICAgICAgICAgICAgICAgICB1aW50MzJfdCBt
aXBzLAorICAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorICAgICAgICAg
ICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcpCisrICAgIDogVGV4dHVyZShjb250ZXh0LCBk
ZXNjLCBtaXBzLCByZW5kZXJUYXJnZXRPbmx5LCBhbGxvd0Zvcm1hdFZpZXcsIGZhbHNlKQorK3t9
CisrCisrVGV4dHVyZTo6VGV4dHVyZShDb250ZXh0TXRsICpjb250ZXh0LAorKyAgICAgICAgICAg
ICAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKmRlc2MsCisrICAgICAgICAgICAgICAgICB1aW50
MzJfdCBtaXBzLAorKyAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5LAorKyAg
ICAgICAgICAgICAgICAgYm9vbCBhbGxvd0Zvcm1hdFZpZXcsCisrICAgICAgICAgICAgICAgICBi
b29sIG1lbW9yeUxlc3MpCisgICAgIDogbUNvbG9yV3JpdGFibGVNYXNrKHN0ZDo6bWFrZV9zaGFy
ZWQ8TVRMQ29sb3JXcml0ZU1hc2s+KE1UTENvbG9yV3JpdGVNYXNrQWxsKSkKKyB7CisgICAgIEFO
R0xFX01UTF9PQkpDX1NDT1BFCitAQCAtMjgzLDcgKzM2NCwxNSBAQCB2b2lkIEVuc3VyZUNQVU1l
bVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgICAg
ICAgICBkZXNjLnVzYWdlIHw9IE1UTFRleHR1cmVVc2FnZVJlbmRlclRhcmdldDsKKyAgICAgICAg
IH0KKyAKKy0gICAgICAgIGlmIChjb250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4
ZWxGb3JtYXQpLmRlcHRoUmVuZGVyYWJsZSB8fAorKyAgICAgICAgaWYgKG1lbW9yeUxlc3MpCisr
ICAgICAgICB7CisrI2lmIChUQVJHRVRfT1NfSU9TIHx8IFRBUkdFVF9PU19UVikgJiYgIVRBUkdF
VF9PU19NQUNDQVRBTFlTVAorKyAgICAgICAgICAgIGRlc2MucmVzb3VyY2VPcHRpb25zID0gTVRM
UmVzb3VyY2VTdG9yYWdlTW9kZU1lbW9yeWxlc3M7CisrI2Vsc2UKKysgICAgICAgICAgICBkZXNj
LnJlc291cmNlT3B0aW9ucyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVQcml2YXRlOworKyNlbmRp
ZgorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAoY29udGV4dC0+Z2V0TmF0aXZlRm9ybWF0
Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5kZXB0aFJlbmRlcmFibGUgfHwKKyAgICAgICAgICAgICAg
ICAgIGRlc2MudGV4dHVyZVR5cGUgPT0gTVRMVGV4dHVyZVR5cGUyRE11bHRpc2FtcGxlKQorICAg
ICAgICAgeworICAgICAgICAgICAgIC8vIE1ldGFsIGRvZXNuJ3Qgc3VwcG9ydCBob3N0IGFjY2Vz
cyB0byBkZXB0aCBzdGVuY2lsIHRleHR1cmUncyBkYXRhCitAQCAtMzEwLDYgKzM5OSw0NiBAQCB2
b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNv
dXJjZSkKKyAgICAgfQorIH0KKyAKKytUZXh0dXJlOjpUZXh0dXJlKENvbnRleHRNdGwgKmNvbnRl
eHQsCisrICAgICAgICAgICAgICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqZGVzYywKKysgICAg
ICAgICAgICAgICAgIElPU3VyZmFjZVJlZiBpb3N1cmZhY2UsCisrICAgICAgICAgICAgICAgICBO
U1VJbnRlZ2VyIHBsYW5lLAorKyAgICAgICAgICAgICAgICAgYm9vbCByZW5kZXJUYXJnZXRPbmx5
KQorKyAgICA6IG1Db2xvcldyaXRhYmxlTWFzayhzdGQ6Om1ha2Vfc2hhcmVkPE1UTENvbG9yV3Jp
dGVNYXNrPihNVExDb2xvcldyaXRlTWFza0FsbCkpCisreworKyAgICBBTkdMRV9NVExfT0JKQ19T
Q09QRQorKyAgICB7CisrICAgICAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gY29udGV4
dC0+Z2V0TWV0YWxEZXZpY2UoKTsKKysKKysgICAgICAgIC8vIEV2ZXJ5IHRleHR1cmUgd2lsbCBz
dXBwb3J0IGJlaW5nIHJlbmRlcmVkIGZvciBub3cKKysgICAgICAgIGRlc2MudXNhZ2UgPSBNVExU
ZXh0dXJlVXNhZ2VQaXhlbEZvcm1hdFZpZXc7CisrCisrICAgICAgICBpZiAoY29udGV4dC0+Z2V0
TmF0aXZlRm9ybWF0Q2FwcyhkZXNjLnBpeGVsRm9ybWF0KS5pc1JlbmRlcmFibGUoKSkKKysgICAg
ICAgIHsKKysgICAgICAgICAgICBkZXNjLnVzYWdlIHw9IE1UTFRleHR1cmVVc2FnZVJlbmRlclRh
cmdldDsKKysgICAgICAgIH0KKysKKysjaWYgKFRBUkdFVF9PU19JT1MgfHwgVEFSR0VUX09TX1RW
KSAmJiAhVEFSR0VUX09TX01BQ0NBVEFMWVNUCisrICAgICAgICBkZXNjLnJlc291cmNlT3B0aW9u
cyA9IE1UTFJlc291cmNlU3RvcmFnZU1vZGVTaGFyZWQ7CisrI2Vsc2UKKysgICAgICAgIGRlc2Mu
cmVzb3VyY2VPcHRpb25zID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9kZU1hbmFnZWQ7CisrI2VuZGlm
CisrCisrICAgICAgICBpZiAoIXJlbmRlclRhcmdldE9ubHkpCisrICAgICAgICB7CisrICAgICAg
ICAgICAgZGVzYy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VTaGFkZXJSZWFk
OworKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXROYXRpdmVGb3JtYXRDYXBzKGRlc2MucGl4
ZWxGb3JtYXQpLndyaXRhYmxlKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZGVz
Yy51c2FnZSA9IGRlc2MudXNhZ2UgfCBNVExUZXh0dXJlVXNhZ2VTaGFkZXJXcml0ZTsKKysgICAg
ICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZDxNVExUZXh0dXJlPiBpb3N1cmZUZXh0
dXJlID0gW21ldGFsRGV2aWNlIG5ld1RleHR1cmVXaXRoRGVzY3JpcHRvcjpkZXNjCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlvc3VyZmFjZTppb3N1cmZhY2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lOnBsYW5lXTsKKysg
ICAgICAgIHNldChbaW9zdXJmVGV4dHVyZSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdKTsKKysgICAg
fQorK30KKysKKyBUZXh0dXJlOjpUZXh0dXJlKFRleHR1cmUgKm9yaWdpbmFsLCBNVExQaXhlbEZv
cm1hdCBmb3JtYXQpCisgICAgIDogUmVzb3VyY2Uob3JpZ2luYWwpLAorICAgICAgIG1Db2xvcldy
aXRhYmxlTWFzayhvcmlnaW5hbC0+bUNvbG9yV3JpdGFibGVNYXNrKSAgLy8gU2hhcmUgY29sb3Ig
d3JpdGUgbWFzayBwcm9wZXJ0eQorQEAgLTM0MSw3ICs0NzAsNyBAQCB2b2lkIEVuc3VyZUNQVU1l
bVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgOiBS
ZXNvdXJjZShvcmlnaW5hbCksCisgICAgICAgbUNvbG9yV3JpdGFibGVNYXNrKG9yaWdpbmFsLT5t
Q29sb3JXcml0YWJsZU1hc2spICAvLyBTaGFyZSBjb2xvciB3cml0ZSBtYXNrIHByb3BlcnR5Cisg
eworLSNpZiBBTkdMRV9NVExfU1dJWlpMRV9BVkFJTEFCTEUKKysjaWYgZGVmaW5lZChfX0lQSE9O
RV8xM18wKSB8fCBkZWZpbmVkKF9fTUFDXzEwXzE1KQorICAgICBBTkdMRV9NVExfT0JKQ19TQ09Q
RQorICAgICB7CisgICAgICAgICBhdXRvIHZpZXcgPSBbb3JpZ2luYWwtPmdldCgpCitAQCAtMzYw
LDEyICs0ODksMTIgQEAgdm9pZCBFbnN1cmVDUFVNZW1XaWxsQmVTeW5jZWQoQ29udGV4dE10bCAq
Y29udGV4dCwgVCAqcmVzb3VyY2UpCisgCisgdm9pZCBUZXh0dXJlOjpzeW5jQ29udGVudChDb250
ZXh0TXRsICpjb250ZXh0LCBtdGw6OkJsaXRDb21tYW5kRW5jb2RlciAqYmxpdEVuY29kZXIpCisg
eworLSAgICBJbnZva2VDUFVNZW1TeW5jKGNvbnRleHQsIGJsaXRFbmNvZGVyLCB0aGlzKTsKKysg
ICAgU3luY0NvbnRlbnQoY29udGV4dCwgYmxpdEVuY29kZXIsIHNoYXJlZF9mcm9tX3RoaXMoKSk7
CisgfQorIAorIHZvaWQgVGV4dHVyZTo6c3luY0NvbnRlbnRJZk5lZWRlZChDb250ZXh0TXRsICpj
b250ZXh0KQorIHsKKy0gICAgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKGNvbnRleHQsIHRoaXMp
OworKyAgICBFbnN1cmVDb250ZW50U3luY2VkKGNvbnRleHQsIHNoYXJlZF9mcm9tX3RoaXMoKSk7
CisgfQorIAorIGJvb2wgVGV4dHVyZTo6aXNDUFVBY2Nlc3NpYmxlKCkgY29uc3QKK0BAIC0zNzks
NiArNTA4LDExIEBAIHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2VkKENvbnRleHRNdGwgKmNv
bnRleHQsIFQgKnJlc291cmNlKQorICAgICByZXR1cm4gZ2V0KCkuc3RvcmFnZU1vZGUgPT0gTVRM
U3RvcmFnZU1vZGVTaGFyZWQ7CisgfQorIAorK2Jvb2wgVGV4dHVyZTo6aXNTaGFkZXJSZWFkYWJs
ZSgpIGNvbnN0CisreworKyAgICByZXR1cm4gZ2V0KCkudXNhZ2UgJiBNVExUZXh0dXJlVXNhZ2VT
aGFkZXJSZWFkOworK30KKysKKyBib29sIFRleHR1cmU6OnN1cHBvcnRGb3JtYXRWaWV3KCkgY29u
c3QKKyB7CisgICAgIHJldHVybiBnZXQoKS51c2FnZSAmIE1UTFRleHR1cmVVc2FnZVBpeGVsRm9y
bWF0VmlldzsKK0BAIC01MTQsMTIgKzY0OCwxNCBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5
bmNlZChDb250ZXh0TXRsICpjb250ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgQVNTRVJUKHN1cHBv
cnRGb3JtYXRWaWV3KCkpOworICAgICByZXR1cm4gVGV4dHVyZVJlZihuZXcgVGV4dHVyZSh0aGlz
LCBmb3JtYXQpKTsKKyB9CisrCisgVGV4dHVyZVJlZiBUZXh0dXJlOjpjcmVhdGVWaWV3V2l0aENv
bXBhdGlibGVGb3JtYXQoTVRMUGl4ZWxGb3JtYXQgZm9ybWF0KQorIHsKKy0gICAgLy8gTm8gbmVl
ZCBmb3IgQVNTRVJUKHN1cHBvcnRGb3JtYXRWaWV3KCkpOworICAgICByZXR1cm4gVGV4dHVyZVJl
ZihuZXcgVGV4dHVyZSh0aGlzLCBmb3JtYXQpKTsKKyB9CisgCisrCisrCisgVGV4dHVyZVJlZiBU
ZXh0dXJlOjpjcmVhdGVTd2l6emxlVmlldyhjb25zdCBUZXh0dXJlU3dpenpsZUNoYW5uZWxzICZz
d2l6emxlKQorIHsKKyAjaWYgQU5HTEVfTVRMX1NXSVpaTEVfQVZBSUxBQkxFCitAQCAtNjUyLDYg
Kzc4OCw0OCBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpjb250
ZXh0LCBUICpyZXNvdXJjZSkKKyAgICAgcmV0dXJuIG1MaW5lYXJDb2xvclZpZXc7CisgfQorIAor
K1RleHR1cmVSZWYgVGV4dHVyZTo6Z2V0UmVhZGFibGVDb3B5KENvbnRleHRNdGwgKmNvbnRleHQs
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRsOjpCbGl0Q29tbWFuZEVu
Y29kZXIgKmVuY29kZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdWludDMyX3QgbGV2ZWxUb0NvcHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdWludDMyX3Qgc2xpY2VUb0NvcHksCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTVRMUmVnaW9uICZhcmVhVG9Db3B5KQorK3sKKysgICAgZ2w6
OkV4dGVudHMgZmlyc3RMZXZlbFNpemUgPSBzaXplKGtaZXJvTmF0aXZlTWlwTGV2ZWwpOworKyAg
ICBpZiAoIW1SZWFkQ29weSB8fCBtUmVhZENvcHktPmdldCgpLndpZHRoIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihmaXJzdExldmVsU2l6ZS53aWR0aCkgfHwKKysgICAgICAgIG1SZWFkQ29weS0+Z2V0
KCkuaGVpZ2h0IDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihmaXJzdExldmVsU2l6ZS5oZWlnaHQpKQor
KyAgICB7CisrICAgICAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRoYXQgYmlnIGVub3VnaCB0byBz
dG9yZSB0aGUgZmlyc3QgbGV2ZWwgZGF0YSBhbmQgYW55IHNtYWxsZXIgbGV2ZWwKKysgICAgICAg
IEFOR0xFX01UTF9PQkpDX1NDT1BFCisrICAgICAgICB7CisrICAgICAgICAgICAgYXV0byBkZXNj
ICAgICAgICAgICAgPSBbW01UTFRleHR1cmVEZXNjcmlwdG9yIG5ld10gQU5HTEVfTVRMX0FVVE9S
RUxFQVNFXTsKKysgICAgICAgICAgICBkZXNjLnRleHR1cmVUeXBlICAgICA9IGdldCgpLnRleHR1
cmVUeXBlOworKyAgICAgICAgICAgIGRlc2MucGl4ZWxGb3JtYXQgICAgID0gZ2V0KCkucGl4ZWxG
b3JtYXQ7CisrICAgICAgICAgICAgZGVzYy53aWR0aCAgICAgICAgICAgPSBmaXJzdExldmVsU2l6
ZS53aWR0aDsKKysgICAgICAgICAgICBkZXNjLmhlaWdodCAgICAgICAgICA9IGZpcnN0TGV2ZWxT
aXplLmhlaWdodDsKKysgICAgICAgICAgICBkZXNjLmRlcHRoICAgICAgICAgICA9IDE7CisrICAg
ICAgICAgICAgZGVzYy5hcnJheUxlbmd0aCAgICAgPSAxOworKyAgICAgICAgICAgIGRlc2MucmVz
b3VyY2VPcHRpb25zID0gTVRMUmVzb3VyY2VTdG9yYWdlTW9kZVByaXZhdGU7CisrICAgICAgICAg
ICAgZGVzYy5zYW1wbGVDb3VudCAgICAgPSBnZXQoKS5zYW1wbGVDb3VudDsKKysgICAgICAgICAg
ICBkZXNjLnVzYWdlICAgICAgICAgICA9IE1UTFRleHR1cmVVc2FnZVNoYWRlclJlYWQgfCBNVExU
ZXh0dXJlVXNhZ2VQaXhlbEZvcm1hdFZpZXc7CisrCisrICAgICAgICAgICAgaWQ8TVRMVGV4dHVy
ZT4gbXRsVGV4dHVyZSA9IFtjb250ZXh0LT5nZXRNZXRhbERldmljZSgpIG5ld1RleHR1cmVXaXRo
RGVzY3JpcHRvcjpkZXNjXTsKKysgICAgICAgICAgICBtUmVhZENvcHkucmVzZXQobmV3IFRleHR1
cmUobXRsVGV4dHVyZSkpOworKyAgICAgICAgfSAgLy8gQU5HTEVfTVRMX09CSkNfU0NPUEUKKysg
ICAgfQorKworKyAgICBBU1NFUlQoZW5jb2Rlcik7CisrCisrICAgIGVuY29kZXItPmNvcHlUZXh0
dXJlKHNoYXJlZF9mcm9tX3RoaXMoKSwgc2xpY2VUb0NvcHksIGxldmVsVG9Db3B5LCBtUmVhZENv
cHksIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDEpOworKworKyAgICByZXR1
cm4gbVJlYWRDb3B5OworK30KKysKKyt2b2lkIFRleHR1cmU6OnJlbGVhc2VSZWFkYWJsZUNvcHko
KQorK3sKKysgICAgbVJlYWRDb3B5ID0gbnVsbHB0cjsKKyt9CisrCisgVGV4dHVyZVJlZiBUZXh0
dXJlOjpnZXRTdGVuY2lsVmlldygpCisgeworICAgICBpZiAobVN0ZW5jaWxWaWV3KQorQEAgLTc5
OSw3ICs5NzcsNyBAQCB2b2lkIEVuc3VyZUNQVU1lbVdpbGxCZVN5bmNlZChDb250ZXh0TXRsICpj
b250ZXh0LCBUICpyZXNvdXJjZSkKKyAKKyB2b2lkIEJ1ZmZlcjo6c3luY0NvbnRlbnQoQ29udGV4
dE10bCAqY29udGV4dCwgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgKmJsaXRFbmNvZGVyKQorIHsK
Ky0gICAgSW52b2tlQ1BVTWVtU3luYyhjb250ZXh0LCBibGl0RW5jb2RlciwgdGhpcyk7CisrICAg
IFN5bmNDb250ZW50KGNvbnRleHQsIGJsaXRFbmNvZGVyLCBzaGFyZWRfZnJvbV90aGlzKCkpOwor
IH0KKyAKKyBjb25zdCB1aW50OF90ICpCdWZmZXI6Om1hcFJlYWRPbmx5KENvbnRleHRNdGwgKmNv
bnRleHQpCitAQCAtODIwLDcgKzk5OCw3IEBAIHZvaWQgRW5zdXJlQ1BVTWVtV2lsbEJlU3luY2Vk
KENvbnRleHRNdGwgKmNvbnRleHQsIFQgKnJlc291cmNlKQorICAgICB7CisgICAgICAgICBDb21t
YW5kUXVldWUgJmNtZFF1ZXVlID0gY29udGV4dC0+Y21kUXVldWUoKTsKKyAKKy0gICAgICAgIEVu
c3VyZUNQVU1lbVdpbGxCZVN5bmNlZChjb250ZXh0LCB0aGlzKTsKKysgICAgICAgIEVuc3VyZUNv
bnRlbnRTeW5jZWQoY29udGV4dCwgc2hhcmVkX2Zyb21fdGhpcygpKTsKKyAKKyAgICAgICAgIGlm
ICh0aGlzLT5pc0JlaW5nVXNlZEJ5R1BVKGNvbnRleHQpKQorICAgICAgICAgeworZGlmZiAtLWdp
dCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaCBiL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUuaAoraW5kZXggNzY4YzM2OS4u
ZTZiZjcxZCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3Rh
dGVfY2FjaGUuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9zdGF0ZV9j
YWNoZS5oCitAQCAtMjIsNiArMjIsMTEgQEAKKyAKKyBzdGF0aWMgaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBNVExDbGVhckNvbG9yICZsaHMsIGNvbnN0IE1UTENsZWFyQ29sb3IgJnJocyk7
CisgCisrbmFtZXNwYWNlIGFuZ2xlCisreworK3N0cnVjdCBGZWF0dXJlc010bDsKKyt9CisrCisg
bmFtZXNwYWNlIHJ4CisgeworIGNsYXNzIENvbnRleHRNdGw7CitAQCAtMjIzLDcgKzIyOCw4IEBA
IHN0cnVjdCBSZW5kZXJQaXBlbGluZU91dHB1dERlc2MKKyB9OworIAorIC8vIFNvbWUgU0RLIGxl
dmVscyBkb24ndCBkZWNsYXJlIE1UTFByaW1pdGl2ZVRvcG9sb2d5Q2xhc3MuIE5lZWRzIHRvIGRv
IGNvbXBpbGUgdGltZSBjaGVjayBoZXJlOgorLSNpZiAhKFRBUkdFVF9PU19PU1ggfHwgVEFSR0VU
X09TX01BQ0NBVEFMWVNUKSAmJiBBTkdMRV9JT1NfREVQTE9ZX1RBUkdFVCA8IF9fSVBIT05FXzEy
XzAKKysjaWYgIShUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUNDQVRBTFlTVCkgJiYgXAor
KyAgICAoIWRlZmluZWQoX19JUEhPTkVfMTJfMCkgfHwgQU5HTEVfSU9TX0RFUExPWV9UQVJHRVQg
PCBfX0lQSE9ORV8xMl8wKQorICMgICAgZGVmaW5lIEFOR0xFX01UTF9QUklNSVRJVkVfVE9QT0xP
R1lfQ0xBU1NfQVZBSUxBQkxFIDAKKyB1c2luZyBQcmltaXRpdmVUb3BvbG9neUNsYXNzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gdWludDMyX3Q7CisgY29uc3RleHByIFBy
aW1pdGl2ZVRvcG9sb2d5Q2xhc3Mga1ByaW1pdGl2ZVRvcG9sb2d5Q2xhc3NUcmlhbmdsZSA9IDA7
CitAQCAtMjY3LDkgKzI3Myw3IEBAIHN0cnVjdCBhbGlnbmFzKDQpIFJlbmRlclBpcGVsaW5lRGVz
YworICAgICBSZW5kZXJQaXBlbGluZURlc2MgJm9wZXJhdG9yPShjb25zdCBSZW5kZXJQaXBlbGlu
ZURlc2MgJnNyYyk7CisgCisgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJQaXBlbGlu
ZURlc2MgJnJocykgY29uc3Q7CistCisgICAgIHNpemVfdCBoYXNoKCkgY29uc3Q7CistCisgICAg
IGJvb2wgcmFzdGVyaXphdGlvbkVuYWJsZWQoKSBjb25zdDsKKyAKKyAgICAgVmVydGV4RGVzYyB2
ZXJ0ZXhEZXNjcmlwdG9yOworQEAgLTI4OCw2ICsyOTIsMjcgQEAgc3RydWN0IGFsaWduYXMoNCkg
UmVuZGVyUGlwZWxpbmVEZXNjCisgICAgIGJvb2wgZW11bGF0ZUNvdmVyYWdlTWFzayA6IDE7Cisg
fTsKKyAKKytzdHJ1Y3QgUmVuZGVyUGFzc0F0dGFjaG1lbnRUZXh0dXJlVGFyZ2V0RGVzYworK3sK
KysgICAgVGV4dHVyZVJlZiBnZXRUZXh0dXJlUmVmKCkgY29uc3QgeyByZXR1cm4gdGV4dHVyZS5s
b2NrKCk7IH0KKysgICAgVGV4dHVyZVJlZiBnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpIGNvbnN0
IHsgcmV0dXJuIGltcGxpY2l0TVNUZXh0dXJlLmxvY2soKTsgfQorKyAgICBib29sIGhhc0ltcGxp
Y2l0TVNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gIWltcGxpY2l0TVNUZXh0dXJlLmV4cGlyZWQo
KTsgfQorKyAgICB1aW50MzJfdCBnZXRSZW5kZXJTYW1wbGVzKCkgY29uc3QKKysgICAgeworKyAg
ICAgICAgVGV4dHVyZVJlZiB0ZXggICA9IGdldFRleHR1cmVSZWYoKTsKKysgICAgICAgIFRleHR1
cmVSZWYgbXNUZXggPSBnZXRJbXBsaWNpdE1TVGV4dHVyZVJlZigpOworKyAgICAgICAgcmV0dXJu
IG1zVGV4ID8gbXNUZXgtPnNhbXBsZXMoKSA6ICh0ZXggPyB0ZXgtPnNhbXBsZXMoKSA6IDEpOwor
KyAgICB9CisrCisrICAgIFRleHR1cmVXZWFrUmVmIHRleHR1cmU7CisrICAgIC8vIEltcGxpY2l0
IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIGludG8gYW5kIGRpc2Nh
cmRlZCBhdCB0aGUgZW5kIG9mCisrICAgIC8vIGEgcmVuZGVyIHBhc3MuIEl0cyByZXN1bHQgd2ls
bCBiZSByZXNvbHZlZCBpbnRvIG5vcm1hbCB0ZXh0dXJlIGFib3ZlLgorKyAgICBUZXh0dXJlV2Vh
a1JlZiBpbXBsaWNpdE1TVGV4dHVyZTsKKysgICAgTWlwbWFwTmF0aXZlTGV2ZWwgbGV2ZWwgPSBr
WmVyb05hdGl2ZU1pcExldmVsOworKyAgICB1aW50MzJfdCBzbGljZU9yRGVwdGggICA9IDA7Cisr
ICAgIGJvb2wgYmxlbmRhYmxlICAgICAgICAgID0gdHJ1ZTsKKyt9OworKworIHN0cnVjdCBSZW5k
ZXJQYXNzQXR0YWNobWVudERlc2MKKyB7CisgICAgIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYygp
OworQEAgLTI5NywxOCArMzIyLDM0IEBAIHN0cnVjdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MK
KyAgICAgYm9vbCBlcXVhbElnbm9yZUxvYWRTdG9yZU9wdGlvbnMoY29uc3QgUmVuZGVyUGFzc0F0
dGFjaG1lbnREZXNjICZvdGhlcikgY29uc3Q7CisgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBS
ZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKSBjb25zdDsKKyAKKy0gICAgQU5HTEVfSU5M
SU5FIGJvb2wgaGFzSW1wbGljaXRNU1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBpbXBsaWNpdE1T
VGV4dHVyZS5nZXQoKTsgfQorLQorLSAgICBUZXh0dXJlUmVmIHRleHR1cmU7CistICAgIC8vIElt
cGxpY2l0IG11bHRpc2FtcGxlIHRleHR1cmUgdGhhdCB3aWxsIGJlIHJlbmRlcmVkIGludG8gYW5k
IGRpc2NhcmRlZCBhdCB0aGUgZW5kIG9mCistICAgIC8vIGEgcmVuZGVyIHBhc3MuIEl0cyByZXN1
bHQgd2lsbCBiZSByZXNvbHZlZCBpbnRvIG5vcm1hbCB0ZXh0dXJlIGFib3ZlLgorLSAgICBUZXh0
dXJlUmVmIGltcGxpY2l0TVNUZXh0dXJlOworLSAgICBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbDsK
Ky0gICAgdWludDMyX3Qgc2xpY2VPckRlcHRoOworLQorLSAgICAvLyBUaGlzIGF0dGFjaG1lbnQg
aXMgYmxlbmRhYmxlIG9yIG5vdC4KKy0gICAgYm9vbCBibGVuZGFibGU7CisrICAgIEFOR0xFX0lO
TElORSBUZXh0dXJlUmVmIHRleHR1cmUoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4g
cmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5nZXRUZXh0dXJlUmVmKCkgOiBudWxscHRyOwor
KyAgICB9CisrICAgIEFOR0xFX0lOTElORSBUZXh0dXJlUmVmIGltcGxpY2l0TVNUZXh0dXJlKCkg
Y29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRhcmdl
dC0+Z2V0SW1wbGljaXRNU1RleHR1cmVSZWYoKSA6IG51bGxwdHI7CisrICAgIH0KKysgICAgQU5H
TEVfSU5MSU5FIGJvb2wgaGFzSW1wbGljaXRNU1RleHR1cmUoKSBjb25zdAorKyAgICB7CisrICAg
ICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8gcmVuZGVyVGFyZ2V0LT5oYXNJbXBsaWNpdE1TVGV4
dHVyZSgpIDogZmFsc2U7CisrICAgIH0KKysgICAgQU5HTEVfSU5MSU5FIHVpbnQzMl90IHJlbmRl
clNhbXBsZXMoKSBjb25zdAorKyAgICB7CisrICAgICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID8g
cmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkgOiAxOworKyAgICB9CisrICAgIEFOR0xF
X0lOTElORSBNaXBtYXBOYXRpdmVMZXZlbCBsZXZlbCgpIGNvbnN0CisrICAgIHsKKysgICAgICAg
IHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmxldmVsIDoga1plcm9OYXRpdmVN
aXBMZXZlbDsKKysgICAgfQorKyAgICBBTkdMRV9JTkxJTkUgdWludDMyX3Qgc2xpY2VPckRlcHRo
KCkgY29uc3QKKysgICAgeworKyAgICAgICAgcmV0dXJuIHJlbmRlclRhcmdldCA/IHJlbmRlclRh
cmdldC0+c2xpY2VPckRlcHRoIDogMDsKKysgICAgfQorKyAgICBBTkdMRV9JTkxJTkUgYm9vbCBi
bGVuZGFibGUoKSBjb25zdCB7IHJldHVybiByZW5kZXJUYXJnZXQgPyByZW5kZXJUYXJnZXQtPmJs
ZW5kYWJsZSA6IGZhbHNlOyB9CisgCisrICAgIC8vIFRoaXMgaXMgc2hhcmVkIHBvaW50ZXIgdG8g
YXZvaWQgY3Jhc2hpbmcgd2hlbiB0ZXh0dXJlIGRlbGV0ZWQgYWZ0ZXIgYm91bmQgdG8gYSBmcmFt
ZSBidWZmZXIuCisrICAgIHN0ZDo6c2hhcmVkX3B0cjxSZW5kZXJQYXNzQXR0YWNobWVudFRleHR1
cmVUYXJnZXREZXNjPiByZW5kZXJUYXJnZXQ7CisgICAgIE1UTExvYWRBY3Rpb24gbG9hZEFjdGlv
bjsKKyAgICAgTVRMU3RvcmVBY3Rpb24gc3RvcmVBY3Rpb247CisgICAgIE1UTFN0b3JlQWN0aW9u
T3B0aW9ucyBzdG9yZUFjdGlvbk9wdGlvbnM7CitAQCAtMzU0LDYgKzM5NSwxMSBAQCBzdHJ1Y3Qg
UmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyA6IHB1YmxpYyBSZW5kZXJQYXNzQXR0YWNo
bWVudERlc2MKKyAgICAgdWludDMyX3QgY2xlYXJTdGVuY2lsID0gMDsKKyB9OworIAorKy8vCisr
Ly8gVGhpcyBpcyBDKysgZXF1aXZhbGVudCBvZiBPYmplY3RpdmUtQyBNVExSZW5kZXJQYXNzRGVz
Y3JpcHRvci4KKysvLyBXZSBjb3VsZCB1c2UgTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgZGlyZWN0
bHksIGhvd2V2ZXIsIHVzaW5nIEMrKyBzdHJ1Y3QgaGFzIGJlbmVmaXRzIG9mIGZhc3QKKysvLyBj
b3B5LCBzdGFjayBhbGxvY2F0aW9uLCBpbmxpbmVkIGNvbXBhcmluZyBmdW5jdGlvbiwgZXRjLgor
Ky8vCisgc3RydWN0IFJlbmRlclBhc3NEZXNjCisgeworICAgICBSZW5kZXJQYXNzQ29sb3JBdHRh
Y2htZW50RGVzYyBjb2xvckF0dGFjaG1lbnRzW2tNYXhSZW5kZXJUYXJnZXRzXTsKK0BAIC00MTcs
NyArNDYzLDYgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0
b3J5CisgeworICAgcHVibGljOgorICAgICB2aXJ0dWFsIH5SZW5kZXJQaXBlbGluZUNhY2hlU3Bl
Y2lhbGl6ZVNoYWRlckZhY3RvcnkoKSA9IGRlZmF1bHQ7CistCisgICAgIC8vIEdldCBzcGVjaWFs
aXplZCBzaGFkZXIgZm9yIHRoZSByZW5kZXIgcGlwZWxpbmUgY2FjaGUuCisgICAgIHZpcnR1YWwg
YW5nbGU6OlJlc3VsdCBnZXRTcGVjaWFsaXplZFNoYWRlcihDb250ZXh0ICpjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlNoYWRlclR5
cGUgc2hhZGVyVHlwZSwKK0BAIC00MjksNyArNDc0LDcgQEAgY2xhc3MgUmVuZGVyUGlwZWxpbmVD
YWNoZVNwZWNpYWxpemVTaGFkZXJGYWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBSZW5kZXJQaXBlbGluZURlc2MgJnJlbmRlclBpcGVsaW5lRGVzYykg
PSAwOworIH07CisgCistLy8gUmVuZGVyIHBpcGVsaW5lIHN0YXRlIGNhY2hlIHBlciBzaGFkZXIg
cHJvZ3JhbS4KKysvLyByZW5kZXIgcGlwZWxpbmUgc3RhdGUgY2FjaGUgcGVyIHNoYWRlciBwcm9n
cmFtCisgY2xhc3MgUmVuZGVyUGlwZWxpbmVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJs
ZQorIHsKKyAgIHB1YmxpYzoKK0BAIC00NTksNiArNTA0LDcgQEAgY2xhc3MgUmVuZGVyUGlwZWxp
bmVDYWNoZSBmaW5hbCA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgICBBdXRvT2JqQ1B0cjxpZDxN
VExGdW5jdGlvbj4+IG1WZXJ0ZXhTaGFkZXI7CisgICAgIC8vIE5vbi1zcGVjaWFsaXplZCBmcmFn
bWVudCBzaGFkZXIKKyAgICAgQXV0b09iakNQdHI8aWQ8TVRMRnVuY3Rpb24+PiBtRnJhZ21lbnRT
aGFkZXI7CisrICAgIC8vIE9uIHNoYWRlciB3aXRoIGVtdWxhdGVkIHJhc3Rlcml6YXRpb24gZGlz
Y2FyZCwgb25lIHdpdGhvdXQKKyAKKyAgIHByaXZhdGU6CisgICAgIHZvaWQgY2xlYXJQaXBlbGlu
ZVN0YXRlcygpOworQEAgLTQ3NywxNCArNTIzLDEzIEBAIGNsYXNzIFJlbmRlclBpcGVsaW5lQ2Fj
aGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKKyAgICAgLy8gT25lIHRhYmxlIHdpdGggZGVm
YXVsdCBhdHRyaWIgYW5kIG9uZSB0YWJsZSB3aXRob3V0LgorICAgICBzdGQ6OnVub3JkZXJlZF9t
YXA8UmVuZGVyUGlwZWxpbmVEZXNjLCBBdXRvT2JqQ1B0cjxpZDxNVExSZW5kZXJQaXBlbGluZVN0
YXRlPj4+CisgICAgICAgICBtUmVuZGVyUGlwZWxpbmVTdGF0ZXNbMl07CistCisgICAgIFJlbmRl
clBpcGVsaW5lQ2FjaGVTcGVjaWFsaXplU2hhZGVyRmFjdG9yeSAqbVNwZWNpYWxpemVkU2hhZGVy
RmFjdG9yeTsKKyB9OworIAorIGNsYXNzIFN0YXRlQ2FjaGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29w
eWFibGUKKyB7CisgICBwdWJsaWM6CistICAgIFN0YXRlQ2FjaGUoKTsKKysgICAgU3RhdGVDYWNo
ZShjb25zdCBhbmdsZTo6RmVhdHVyZXNNdGwgJmZlYXR1cmVzKTsKKyAgICAgflN0YXRlQ2FjaGUo
KTsKKyAKKyAgICAgLy8gTnVsbCBkZXB0aCBzdGVuY2lsIHN0YXRlIGhhcyBkZXB0aC9zdGVjaWwg
cmVhZCAmIHdyaXRlIGRpc2FibGVkLgorQEAgLTUwMiw2ICs1NDcsOCBAQCBjbGFzcyBTdGF0ZUNh
Y2hlIGZpbmFsIDogYW5nbGU6Ok5vbkNvcHlhYmxlCisgICAgIHZvaWQgY2xlYXIoKTsKKyAKKyAg
IHByaXZhdGU6CisrICAgIGNvbnN0IGFuZ2xlOjpGZWF0dXJlc010bCAmbUZlYXR1cmVzOworKwor
ICAgICBBdXRvT2JqQ1B0cjxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+IG1OdWxsRGVwdGhTdGVu
Y2lsU3RhdGUgPSBuaWw7CisgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxEZXB0aFN0ZW5jaWxEZXNj
LCBBdXRvT2JqQ1B0cjxpZDxNVExEZXB0aFN0ZW5jaWxTdGF0ZT4+PiBtRGVwdGhTdGVuY2lsU3Rh
dGVzOworICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8U2FtcGxlckRlc2MsIEF1dG9PYmpDUHRyPGlk
PE1UTFNhbXBsZXJTdGF0ZT4+PiBtU2FtcGxlclN0YXRlczsKK2RpZmYgLS1naXQgYS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3N0YXRlX2NhY2hlLm1tIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9zdGF0ZV9jYWNoZS5tbQoraW5kZXggMWNmMjM3YS4uNDVjNzE5ZCAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUu
bW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfc3RhdGVfY2FjaGUubW0K
K0BAIC0xNyw2ICsxNyw3IEBACisgI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Nv
bnRleHRNdGwuaCIKKyAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX3Jlc291
cmNlcy5oIgorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaCIK
KysjaW5jbHVkZSAicGxhdGZvcm0vRmVhdHVyZXNNdGwuaCIKKyAKKyAjZGVmaW5lIEFOR0xFX09C
SkNfQ1BfUFJPUEVSVFkoRFNULCBTUkMsIFBST1BFUlRZKSBcCisgICAgIChEU1QpLlBST1BFUlRZ
ID0gc3RhdGljX2Nhc3Q8X190eXBlb2ZfXygoRFNUKS5QUk9QRVJUWSk+KFRvT2JqQygoU1JDKS5Q
Uk9QRVJUWSkpCitAQCAtMTgyLDEwICsxODMsMTAgQEAgaW5saW5lIFQgVG9PYmpDKGNvbnN0IFQg
cCkKKyAgICAgcmV0dXJuIHRleHR1cmVSZWYgPyB0ZXh0dXJlUmVmLT5nZXQoKSA6IG5pbDsKKyB9
CisgCistdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGNvbnN0IFJlbmRl
clBhc3NBdHRhY2htZW50RGVzYyAmc3JjLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBNVExSZW5kZXJQYXNzQXR0YWNobWVudERlc2NyaXB0b3IgKmRzdCkKKyt2b2lk
IEJhc2VSZW5kZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMoTVRMUmVuZGVyUGFzc0F0dGFjaG1l
bnREZXNjcmlwdG9yICpkc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmc3JjKQorIHsKKy0gICAgY29uc3Qg
VGV4dHVyZVJlZiAmaW1wbGljaXRNc1RleHR1cmUgPSBzcmMuaW1wbGljaXRNU1RleHR1cmU7Cisr
ICAgIGF1dG8gaW1wbGljaXRNc1RleHR1cmUgPSBzcmMuaW1wbGljaXRNU1RleHR1cmUoKTsKKyAK
KyAgICAgaWYgKGltcGxpY2l0TXNUZXh0dXJlKQorICAgICB7CitAQCAtMTkzLDMxICsxOTQsMzEg
QEAgdm9pZCBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGNvbnN0IFJlbmRlclBh
c3NBdHRhY2htZW50RGVzYyAmc3JjLAorICAgICAgICAgZHN0LmxldmVsICAgICAgICAgID0gMDsK
KyAgICAgICAgIGRzdC5zbGljZSAgICAgICAgICA9IDA7CisgICAgICAgICBkc3QuZGVwdGhQbGFu
ZSAgICAgPSAwOworLSAgICAgICAgZHN0LnJlc29sdmVUZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0
dXJlKTsKKy0gICAgICAgIGRzdC5yZXNvbHZlTGV2ZWwgICA9IHNyYy5sZXZlbC5nZXQoKTsKKysg
ICAgICAgIGRzdC5yZXNvbHZlVGV4dHVyZSA9IFRvT2JqQyhzcmMudGV4dHVyZSgpKTsKKysgICAg
ICAgIGRzdC5yZXNvbHZlTGV2ZWwgICA9IHNyYy5sZXZlbCgpLmdldCgpOworICAgICAgICAgaWYg
KGRzdC5yZXNvbHZlVGV4dHVyZS50ZXh0dXJlVHlwZSA9PSBNVExUZXh0dXJlVHlwZTNEKQorICAg
ICAgICAgeworLSAgICAgICAgICAgIGRzdC5yZXNvbHZlRGVwdGhQbGFuZSA9IHNyYy5zbGljZU9y
RGVwdGg7CisrICAgICAgICAgICAgZHN0LnJlc29sdmVEZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JE
ZXB0aCgpOworICAgICAgICAgICAgIGRzdC5yZXNvbHZlU2xpY2UgICAgICA9IDA7CisgICAgICAg
ICB9CisgICAgICAgICBlbHNlCisgICAgICAgICB7CistICAgICAgICAgICAgZHN0LnJlc29sdmVT
bGljZSAgICAgID0gc3JjLnNsaWNlT3JEZXB0aDsKKysgICAgICAgICAgICBkc3QucmVzb2x2ZVNs
aWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRoKCk7CisgICAgICAgICAgICAgZHN0LnJlc29sdmVE
ZXB0aFBsYW5lID0gMDsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICBlbHNlCisgICAgIHsKKy0g
ICAgICAgIGRzdC50ZXh0dXJlID0gVG9PYmpDKHNyYy50ZXh0dXJlKTsKKy0gICAgICAgIGRzdC5s
ZXZlbCAgID0gc3JjLmxldmVsLmdldCgpOworKyAgICAgICAgZHN0LnRleHR1cmUgPSBUb09iakMo
c3JjLnRleHR1cmUoKSk7CisrICAgICAgICBkc3QubGV2ZWwgICA9IHNyYy5sZXZlbCgpLmdldCgp
OworICAgICAgICAgaWYgKGRzdC50ZXh0dXJlLnRleHR1cmVUeXBlID09IE1UTFRleHR1cmVUeXBl
M0QpCisgICAgICAgICB7CistICAgICAgICAgICAgZHN0LmRlcHRoUGxhbmUgPSBzcmMuc2xpY2VP
ckRlcHRoOworKyAgICAgICAgICAgIGRzdC5kZXB0aFBsYW5lID0gc3JjLnNsaWNlT3JEZXB0aCgp
OworICAgICAgICAgICAgIGRzdC5zbGljZSAgICAgID0gMDsKKyAgICAgICAgIH0KKyAgICAgICAg
IGVsc2UKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBkc3Quc2xpY2UgICAgICA9IHNyYy5zbGlj
ZU9yRGVwdGg7CisrICAgICAgICAgICAgZHN0LnNsaWNlICAgICAgPSBzcmMuc2xpY2VPckRlcHRo
KCk7CisgICAgICAgICAgICAgZHN0LmRlcHRoUGxhbmUgPSAwOworICAgICAgICAgfQorICAgICAg
ICAgZHN0LnJlc29sdmVUZXh0dXJlICAgID0gbmlsOworQEAgLTIzMSwyNiArMjMyLDI2IEBAIHZv
aWQgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhjb25zdCBSZW5kZXJQYXNzQXR0
YWNobWVudERlc2MgJnNyYywKKyAgICAgQU5HTEVfT0JKQ19DUF9QUk9QRVJUWShkc3QsIHNyYywg
c3RvcmVBY3Rpb25PcHRpb25zKTsKKyB9CisgCistdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFz
c0NvbG9yQXR0YWNobWVudERlc2MgJmRlc2MsCistICAgICAgICAgICAgTVRMUmVuZGVyUGFzc0Nv
bG9yQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjKQorK3ZvaWQgVG9PYmpDKE1UTFJlbmRl
clBhc3NDb2xvckF0dGFjaG1lbnREZXNjcmlwdG9yICpvYmpDRGVzYywKKysgICAgICAgICAgICBj
b25zdCBSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50RGVzYyAmZGVzYykKKyB7CistICAgIEJhc2VS
ZW5kZXJQYXNzQXR0YWNobWVudERlc2NUb09iakMoZGVzYywgb2JqQ0Rlc2MpOworKyAgICBCYXNl
UmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKG9iakNEZXNjLCBkZXNjKTsKKyAKKyAgICAg
QU5HTEVfT0JKQ19DUF9QUk9QRVJUWShvYmpDRGVzYywgZGVzYywgY2xlYXJDb2xvcik7CisgfQor
IAorLXZvaWQgVG9PYmpDKGNvbnN0IFJlbmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNjICZkZXNj
LAorLSAgICAgICAgICAgIE1UTFJlbmRlclBhc3NEZXB0aEF0dGFjaG1lbnREZXNjcmlwdG9yICpv
YmpDRGVzYykKKyt2b2lkIFRvT2JqQyhNVExSZW5kZXJQYXNzRGVwdGhBdHRhY2htZW50RGVzY3Jp
cHRvciAqb2JqQ0Rlc2MsCisrICAgICAgICAgICAgY29uc3QgUmVuZGVyUGFzc0RlcHRoQXR0YWNo
bWVudERlc2MgJmRlc2MpCisgeworLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9P
YmpDKGRlc2MsIG9iakNEZXNjKTsKKysgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1Rv
T2JqQyhvYmpDRGVzYywgZGVzYyk7CisgCisgICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkob2Jq
Q0Rlc2MsIGRlc2MsIGNsZWFyRGVwdGgpOworIH0KKyAKKy12b2lkIFRvT2JqQyhjb25zdCBSZW5k
ZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorLSAgICAgICAgICAgIE1UTFJlbmRl
clBhc3NTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjKQorK3ZvaWQgVG9PYmpD
KE1UTFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2NyaXB0b3IgKm9iakNEZXNjLAorKyAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MpCisg
eworLSAgICBCYXNlUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjVG9PYmpDKGRlc2MsIG9iakNEZXNj
KTsKKysgICAgQmFzZVJlbmRlclBhc3NBdHRhY2htZW50RGVzY1RvT2JqQyhvYmpDRGVzYywgZGVz
Yyk7CisgCisgICAgIEFOR0xFX09CSkNfQ1BfUFJPUEVSVFkob2JqQ0Rlc2MsIGRlc2MsIGNsZWFy
U3RlbmNpbCk7CisgfQorQEAgLTY5NiwxMSArNjk3LDcgQEAgdm9pZCBUb09iakMoY29uc3QgUmVu
ZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyAKKyB2b2lkIFJlbmRlclBhc3NB
dHRhY2htZW50RGVzYzo6cmVzZXQoKQorIHsKKy0gICAgdGV4dHVyZS5yZXNldCgpOworLSAgICBp
bXBsaWNpdE1TVGV4dHVyZS5yZXNldCgpOworLSAgICBsZXZlbCAgICAgICAgICAgICAgPSBtdGw6
OmtaZXJvTmF0aXZlTWlwTGV2ZWw7CistICAgIHNsaWNlT3JEZXB0aCAgICAgICA9IDA7CistICAg
IGJsZW5kYWJsZSAgICAgICAgICA9IGZhbHNlOworKyAgICByZW5kZXJUYXJnZXQgICAgICAgPSBu
dWxscHRyOworICAgICBsb2FkQWN0aW9uICAgICAgICAgPSBNVExMb2FkQWN0aW9uTG9hZDsKKyAg
ICAgc3RvcmVBY3Rpb24gICAgICAgID0gTVRMU3RvcmVBY3Rpb25TdG9yZTsKKyAgICAgc3RvcmVB
Y3Rpb25PcHRpb25zID0gTVRMU3RvcmVBY3Rpb25PcHRpb25Ob25lOworQEAgLTcwOSw4ICs3MDYs
OSBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZk
ZXNjLAorIGJvb2wgUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjOjplcXVhbElnbm9yZUxvYWRTdG9y
ZU9wdGlvbnMoCisgICAgIGNvbnN0IFJlbmRlclBhc3NBdHRhY2htZW50RGVzYyAmb3RoZXIpIGNv
bnN0CisgeworLSAgICByZXR1cm4gdGV4dHVyZSA9PSBvdGhlci50ZXh0dXJlICYmIGltcGxpY2l0
TVNUZXh0dXJlID09IG90aGVyLmltcGxpY2l0TVNUZXh0dXJlICYmCistICAgICAgICAgICBsZXZl
bCA9PSBvdGhlci5sZXZlbCAmJiBzbGljZU9yRGVwdGggPT0gb3RoZXIuc2xpY2VPckRlcHRoOwor
KyAgICByZXR1cm4gcmVuZGVyVGFyZ2V0ID09IG90aGVyLnJlbmRlclRhcmdldCB8fAorKyAgICAg
ICAgICAgKHRleHR1cmUoKSA9PSBvdGhlci50ZXh0dXJlKCkgJiYgbGV2ZWwoKSA9PSBvdGhlci5s
ZXZlbCgpICYmCisrICAgICAgICAgICAgc2xpY2VPckRlcHRoKCkgPT0gb3RoZXIuc2xpY2VPckRl
cHRoKCkpOworIH0KKyAKKyBib29sIFJlbmRlclBhc3NBdHRhY2htZW50RGVzYzo6b3BlcmF0b3I9
PShjb25zdCBSZW5kZXJQYXNzQXR0YWNobWVudERlc2MgJm90aGVyKSBjb25zdAorQEAgLTcyMyw2
ICs3MjEsMzAgQEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50
RGVzYyAmZGVzYywKKyAgICAgcmV0dXJuIGxvYWRBY3Rpb24gPT0gb3RoZXIubG9hZEFjdGlvbiAm
JiBzdG9yZUFjdGlvbiA9PSBvdGhlci5zdG9yZUFjdGlvbiAmJgorICAgICAgICAgICAgc3RvcmVB
Y3Rpb25PcHRpb25zID09IG90aGVyLnN0b3JlQWN0aW9uT3B0aW9uczsKKyB9CisrLy8gQ29udmVy
dCB0byBNZXRhbCBvYmplY3QKKyt2b2lkIFJlbmRlclBhc3NEZXNjOjpjb252ZXJ0VG9NZXRhbERl
c2MoTVRMUmVuZGVyUGFzc0Rlc2NyaXB0b3IgKm9iakNEZXNjKSBjb25zdAorK3sKKysgICAgQU5H
TEVfTVRMX09CSkNfU0NPUEUKKysgICAgeworKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bUNvbG9yQXR0YWNobWVudHM7ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBU
b09iakMob2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50c1tpXSwgY29sb3JBdHRhY2htZW50c1tpXSk7
CisrICAgICAgICB9CisrICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBudW1Db2xvckF0dGFjaG1l
bnRzOyBpIDwga01heFJlbmRlclRhcmdldHM7ICsraSkKKysgICAgICAgIHsKKysgICAgICAgICAg
ICAvLyBJbmFjdGl2ZSByZW5kZXIgdGFyZ2V0CisrICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JB
dHRhY2htZW50c1tpXS50ZXh0dXJlICAgICA9IG5pbDsKKysgICAgICAgICAgICBvYmpDRGVzYy5j
b2xvckF0dGFjaG1lbnRzW2ldLmxldmVsICAgICAgID0gMDsKKysgICAgICAgICAgICBvYmpDRGVz
Yy5jb2xvckF0dGFjaG1lbnRzW2ldLnNsaWNlICAgICAgID0gMDsKKysgICAgICAgICAgICBvYmpD
RGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmRlcHRoUGxhbmUgID0gMDsKKysgICAgICAgICAgICBv
YmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLmxvYWRBY3Rpb24gID0gTVRMTG9hZEFjdGlvbkRv
bnRDYXJlOworKyAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0uc3RvcmVB
Y3Rpb24gPSBNVExTdG9yZUFjdGlvbkRvbnRDYXJlOworKyAgICAgICAgfQorKworKyAgICAgICAg
VG9PYmpDKG9iakNEZXNjLmRlcHRoQXR0YWNobWVudCwgZGVwdGhBdHRhY2htZW50KTsKKysgICAg
ICAgIFRvT2JqQyhvYmpDRGVzYy5zdGVuY2lsQXR0YWNobWVudCwgc3RlbmNpbEF0dGFjaG1lbnQp
OworKyAgICB9CisrfQorIAorIHZvaWQgUmVuZGVyUGFzc0Rlc2M6OnBvcHVsYXRlUmVuZGVyUGlw
ZWxpbmVPdXRwdXREZXNjKFJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyAqb3V0RGVzYykgY29uc3QK
KyB7CitAQCAtNzQyLDE5ICs3NjQsMTkgQEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0
ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyB2b2lkIFJlbmRlclBhc3NEZXNjOjpwb3B1bGF0
ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhjb25zdCBCbGVuZERlc2MgJmJsZW5kU3RhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyUGlwZWxpbmVPdXRwdXREZXNjICpvdXREZXNjKSBjb25zdAorIHsKKy0gICAgUmVuZGVyUGlw
ZWxpbmVPdXRwdXREZXNjICZvdXRwdXREZXNjcmlwdG9yID0gKm91dERlc2M7CisrICAgIGF1dG8g
Jm91dHB1dERlc2NyaXB0b3IgICAgICAgICAgICAgICA9ICpvdXREZXNjOworICAgICBvdXRwdXRE
ZXNjcmlwdG9yLm51bUNvbG9yQXR0YWNobWVudHMgPSB0aGlzLT5udW1Db2xvckF0dGFjaG1lbnRz
OworICAgICBvdXRwdXREZXNjcmlwdG9yLnNhbXBsZUNvdW50ICAgICAgICAgPSB0aGlzLT5zYW1w
bGVDb3VudDsKKyAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHRoaXMtPm51bUNvbG9yQXR0
YWNobWVudHM7ICsraSkKKyAgICAgeworICAgICAgICAgYXV0byAmcmVuZGVyUGFzc0NvbG9yQXR0
YWNobWVudCA9IHRoaXMtPmNvbG9yQXR0YWNobWVudHNbaV07CistICAgICAgICBhdXRvIHRleHR1
cmUgICAgICAgICAgICAgICAgICAgID0gcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudC50ZXh0dXJl
OworKyAgICAgICAgYXV0byB0ZXh0dXJlICAgICAgICAgICAgICAgICAgICA9IHJlbmRlclBhc3ND
b2xvckF0dGFjaG1lbnQudGV4dHVyZSgpOworIAorICAgICAgICAgaWYgKHRleHR1cmUpCisgICAg
ICAgICB7CisgICAgICAgICAgICAgLy8gQ29weSBwYXJhbWV0ZXJzIGZyb20gYmxlbmQgc3RhdGUK
KyAgICAgICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0udXBkYXRl
KGJsZW5kU3RhdGUpOworLSAgICAgICAgICAgIGlmICghcmVuZGVyUGFzc0NvbG9yQXR0YWNobWVu
dC5ibGVuZGFibGUpCisrICAgICAgICAgICAgaWYgKCFyZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50
LmJsZW5kYWJsZSgpKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgLy8gRGlzYWJs
ZSBibGVuZGluZyBpZiB0aGUgYXR0YWNobWVudCdzIHJlbmRlciB0YXJnZXQgZG9lc24ndCBzdXBw
b3J0IGJsZW5kaW5nLgorICAgICAgICAgICAgICAgICBvdXRwdXREZXNjcmlwdG9yLmNvbG9yQXR0
YWNobWVudHNbaV0uYmxlbmRpbmdFbmFibGVkID0gZmFsc2U7CitAQCAtNzgxLDExICs4MDMsMTEg
QEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVz
YywKKyAgICAgICAgIG91dHB1dERlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXS5yZXNldCgp
OworICAgICB9CisgCistICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2ht
ZW50LnRleHR1cmU7CisrICAgIGF1dG8gZGVwdGhUZXh0dXJlID0gdGhpcy0+ZGVwdGhBdHRhY2ht
ZW50LnRleHR1cmUoKTsKKyAgICAgb3V0cHV0RGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhl
bEZvcm1hdCA9CisgICAgICAgICBkZXB0aFRleHR1cmUgPyBkZXB0aFRleHR1cmUtPnBpeGVsRm9y
bWF0KCkgOiBNVExQaXhlbEZvcm1hdEludmFsaWQ7CisgCistICAgIGF1dG8gc3RlbmNpbFRleHR1
cmUgPSB0aGlzLT5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlOworKyAgICBhdXRvIHN0ZW5jaWxU
ZXh0dXJlID0gdGhpcy0+c3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZSgpOworICAgICBvdXRwdXRE
ZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50UGl4ZWxGb3JtYXQgPQorICAgICAgICAgc3RlbmNp
bFRleHR1cmUgPyBzdGVuY2lsVGV4dHVyZS0+cGl4ZWxGb3JtYXQoKSA6IE1UTFBpeGVsRm9ybWF0
SW52YWxpZDsKKyB9CitAQCAtODMxLDQyICs4NTMsMjEgQEAgdm9pZCBUb09iakMoY29uc3QgUmVu
ZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVzYywKKyAgICAgcmV0dXJuIGRlcHRoQXR0
YWNobWVudCA9PSBvdGhlci5kZXB0aEF0dGFjaG1lbnQgJiYgc3RlbmNpbEF0dGFjaG1lbnQgPT0g
b3RoZXIuc3RlbmNpbEF0dGFjaG1lbnQ7CisgfQorIAorLS8vIENvbnZlcnQgdG8gTWV0YWwgb2Jq
ZWN0Cistdm9pZCBSZW5kZXJQYXNzRGVzYzo6Y29udmVydFRvTWV0YWxEZXNjKE1UTFJlbmRlclBh
c3NEZXNjcmlwdG9yICpvYmpDRGVzYykgY29uc3QKKy17CistICAgIEFOR0xFX01UTF9PQkpDX1ND
T1BFCistICAgIHsKKy0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1Db2xvckF0
dGFjaG1lbnRzOyArK2kpCistICAgICAgICB7CistICAgICAgICAgICAgVG9PYmpDKGNvbG9yQXR0
YWNobWVudHNbaV0sIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0pOworLSAgICAgICAgfQor
LSAgICAgICAgZm9yICh1aW50MzJfdCBpID0gbnVtQ29sb3JBdHRhY2htZW50czsgaSA8IGtNYXhS
ZW5kZXJUYXJnZXRzOyArK2kpCistICAgICAgICB7CistICAgICAgICAgICAgLy8gSW5hY3RpdmUg
cmVuZGVyIHRhcmdldAorLSAgICAgICAgICAgIG9iakNEZXNjLmNvbG9yQXR0YWNobWVudHNbaV0u
dGV4dHVyZSAgICAgPSBuaWw7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2htZW50
c1tpXS5sZXZlbCAgICAgICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRhY2ht
ZW50c1tpXS5zbGljZSAgICAgICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JBdHRh
Y2htZW50c1tpXS5kZXB0aFBsYW5lICA9IDA7CistICAgICAgICAgICAgb2JqQ0Rlc2MuY29sb3JB
dHRhY2htZW50c1tpXS5sb2FkQWN0aW9uICA9IE1UTExvYWRBY3Rpb25Eb250Q2FyZTsKKy0gICAg
ICAgICAgICBvYmpDRGVzYy5jb2xvckF0dGFjaG1lbnRzW2ldLnN0b3JlQWN0aW9uID0gTVRMU3Rv
cmVBY3Rpb25Eb250Q2FyZTsKKy0gICAgICAgIH0KKy0KKy0gICAgICAgIFRvT2JqQyhkZXB0aEF0
dGFjaG1lbnQsIG9iakNEZXNjLmRlcHRoQXR0YWNobWVudCk7CistICAgICAgICBUb09iakMoc3Rl
bmNpbEF0dGFjaG1lbnQsIG9iakNEZXNjLnN0ZW5jaWxBdHRhY2htZW50KTsKKy0gICAgfQorLX0K
Ky0KKyAvLyBSZW5kZXJQaXBlbGluZUNhY2hlIGltcGxlbWVudGF0aW9uCistUmVuZGVyUGlwZWxp
bmVDYWNoZTo6UmVuZGVyUGlwZWxpbmVDYWNoZSgpIDogUmVuZGVyUGlwZWxpbmVDYWNoZShudWxs
cHRyKSB7fQorK1JlbmRlclBpcGVsaW5lQ2FjaGU6OlJlbmRlclBpcGVsaW5lQ2FjaGUoKSA6IFJl
bmRlclBpcGVsaW5lQ2FjaGUobnVsbHB0cikgeworK30KKyAKKyBSZW5kZXJQaXBlbGluZUNhY2hl
OjpSZW5kZXJQaXBlbGluZUNhY2hlKAorICAgICBSZW5kZXJQaXBlbGluZUNhY2hlU3BlY2lhbGl6
ZVNoYWRlckZhY3RvcnkgKnNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeSkKKyAgICAgOiBtU3BlY2lh
bGl6ZWRTaGFkZXJGYWN0b3J5KHNwZWNpYWxpemVkU2hhZGVyRmFjdG9yeSkKKy17fQorK3sKKysK
Kyt9CisgCisgUmVuZGVyUGlwZWxpbmVDYWNoZTo6flJlbmRlclBpcGVsaW5lQ2FjaGUoKSB7fQor
IAorLXZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0VmVydGV4U2hhZGVyKENvbnRleHQgKmNv
bnRleHQsIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIpCisrdm9pZCBSZW5kZXJQaXBlbGluZUNhY2hl
OjpzZXRWZXJ0ZXhTaGFkZXIoQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExGdW5jdGlvbj4gc2hhZGVyKQorIHsKKyAgICAg
bVZlcnRleFNoYWRlci5yZXRhaW5Bc3NpZ24oc2hhZGVyKTsKKyAKK0BAIC04NzksNyArODgwLDgg
QEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVz
YywKKyAgICAgcmVjcmVhdGVQaXBlbGluZVN0YXRlcyhjb250ZXh0KTsKKyB9CisgCistdm9pZCBS
ZW5kZXJQaXBlbGluZUNhY2hlOjpzZXRGcmFnbWVudFNoYWRlcihDb250ZXh0ICpjb250ZXh0LCBp
ZDxNVExGdW5jdGlvbj4gc2hhZGVyKQorK3ZvaWQgUmVuZGVyUGlwZWxpbmVDYWNoZTo6c2V0RnJh
Z21lbnRTaGFkZXIoQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlkPE1UTEZ1bmN0aW9uPiBzaGFkZXIpCisgeworICAgICBtRnJh
Z21lbnRTaGFkZXIucmV0YWluQXNzaWduKHNoYWRlcik7CisgCitAQCAtOTI5LDEwICs5MzEsNiBA
QCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNj
LAorIHsKKyAgICAgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+IG5ld1N0
YXRlID0KKyAgICAgICAgIGNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoY29udGV4dCwgZGVzYywg
aW5zZXJ0RGVmYXVsdEF0dHJpYkxheW91dCk7CistICAgIGlmICghbmV3U3RhdGUpCistICAgIHsK
Ky0gICAgICAgIHJldHVybiBuaWw7CistICAgIH0KKyAKKyAgICAgaW50IHRhYmxlSWR4ID0gaW5z
ZXJ0RGVmYXVsdEF0dHJpYkxheW91dCA/IDEgOiAwOworICAgICBhdXRvIHJlICAgICAgPSBtUmVu
ZGVyUGlwZWxpbmVTdGF0ZXNbdGFibGVJZHhdLmluc2VydChzdGQ6Om1ha2VfcGFpcihkZXNjLCBu
ZXdTdGF0ZSkpOworQEAgLTk0NCw2ICs5NDIsNyBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQ
YXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorICAgICByZXR1cm4gcmUuZmlyc3QtPnNl
Y29uZDsKKyB9CisgCisrCisgQXV0b09iakNQdHI8aWQ8TVRMUmVuZGVyUGlwZWxpbmVTdGF0ZT4+
IFJlbmRlclBpcGVsaW5lQ2FjaGU6OmNyZWF0ZVJlbmRlclBpcGVsaW5lU3RhdGUoCisgICAgIENv
bnRleHQgKmNvbnRleHQsCisgICAgIGNvbnN0IFJlbmRlclBpcGVsaW5lRGVzYyAmb3JpZ2luYWxE
ZXNjLAorQEAgLTk1OSw3ICs5NTgsNiBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3Rl
bmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorICAgICAgICAgICAgIGRlc2MuZW11bGF0ZUNvdmVy
YWdlTWFzayAgICA9IGZhbHNlOworICAgICAgICAgICAgIGRlc2MuYWxwaGFUb0NvdmVyYWdlRW5h
YmxlZCA9IGZhbHNlOworICAgICAgICAgfQorLQorICAgICAgICAgLy8gQ2hvb3NlIHNoYWRlciB2
YXJpYW50CisgICAgICAgICBpZDxNVExGdW5jdGlvbj4gdmVydFNoYWRlciA9IG5pbDsKKyAgICAg
ICAgIGlkPE1UTEZ1bmN0aW9uPiBmcmFnU2hhZGVyID0gbmlsOworQEAgLTEwMDQsNyArMTAwMiwy
NSBAQCB2b2lkIFRvT2JqQyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZk
ZXNjLAorIAorICAgICAgICAgLy8gQ29udmVydCB0byBPYmplY3RpdmUtQyBkZXNjOgorICAgICAg
ICAgQXV0b09iakNPYmo8TVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yPiBvYmpDRGVzYyA9IFRv
T2JqQyh2ZXJ0U2hhZGVyLCBmcmFnU2hhZGVyLCBkZXNjKTsKKy0KKysgICAgICAgIC8vIFZhbGlk
YXRlIFJlbmRlciBQaXBlbGluZSBTdGF0ZToKKysgICAgICAgIGlmIChEZXZpY2VIYXNNYXhpbXVt
UmVuZGVyVGFyZ2V0U2l6ZShtZXRhbERldmljZSkpCisrICAgICAgICB7CisrICAgICAgICAgICAg
TlNVSW50ZWdlciBtYXhTaXplID0gR2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0
ZXMobWV0YWxEZXZpY2UpOworKyAgICAgICAgICAgIE5TVUludGVnZXIgcmVuZGVyVGFyZ2V0U2l6
ZSA9CisrICAgICAgICAgICAgICAgIENvbXB1dGVUb3RhbFNpemVVc2VkRm9yTVRMUmVuZGVyUGlw
ZWxpbmVEZXNjcmlwdG9yKG9iakNEZXNjLCBjb250ZXh0LCBtZXRhbERldmljZSk7CisrICAgICAg
ICAgICAgaWYgKHJlbmRlclRhcmdldFNpemUgPiBtYXhTaXplKQorKyAgICAgICAgICAgIHsKKysg
ICAgICAgICAgICAgICAgTlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKysgICAgICAgICAgICAgICAg
ICAgIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiVGhpcyBzZXQgb2YgcmVuZGVyIHRhcmdl
dHMgcmVxdWlyZXMgJWx1IGJ5dGVzIG9mICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEAicGl4ZWwgc3RvcmFnZS4gVGhpcyBkZXZpY2Ugc3VwcG9ydHMg
JWx1IGJ5dGVzLiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZW5kZXJUYXJnZXRTaXplLCBtYXhTaXplXTsKKysgICAgICAgICAgICAgICAgTlNFcnJv
ciAqZXJyID0gW05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiTVRMVmFsaWRhdGlvbkVycm9yIgor
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6
LTEKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJ
bmZvOkB7TlNMb2NhbGl6ZWREZXNjcmlwdGlvbktleSA6IGVycm9yU3RyaW5nfV07CisrICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmhhbmRsZUVycm9yKGVyciwgX19GSUxFX18sIEFOR0xFX0ZVTkNU
SU9OLCBfX0xJTkVfXyk7CisrICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CisrICAgICAgICAg
ICAgfQorKyAgICAgICAgfQorICAgICAgICAgLy8gU3BlY2lhbCBhdHRyaWJ1dGUgc2xvdCBmb3Ig
ZGVmYXVsdCBhdHRyaWJ1dGUKKyAgICAgICAgIGlmIChpbnNlcnREZWZhdWx0QXR0cmliTGF5b3V0
KQorICAgICAgICAgeworQEAgLTEwMzIsNiArMTA0OCw3IEBAIHZvaWQgVG9PYmpDKGNvbnN0IFJl
bmRlclBhc3NTdGVuY2lsQXR0YWNobWVudERlc2MgJmRlc2MsCisgICAgIH0KKyB9CisgCisrCisg
dm9pZCBSZW5kZXJQaXBlbGluZUNhY2hlOjpyZWNyZWF0ZVBpcGVsaW5lU3RhdGVzKENvbnRleHQg
KmNvbnRleHQpCisgeworICAgICBmb3IgKGludCBoYXNEZWZhdWx0QXR0cmliID0gMDsgaGFzRGVm
YXVsdEF0dHJpYiA8PSAxOyArK2hhc0RlZmF1bHRBdHRyaWIpCitAQCAtMTA2Miw3ICsxMDc5LDcg
QEAgdm9pZCBUb09iakMoY29uc3QgUmVuZGVyUGFzc1N0ZW5jaWxBdHRhY2htZW50RGVzYyAmZGVz
YywKKyB9CisgCisgLy8gU3RhdGVDYWNoZSBpbXBsZW1lbnRhdGlvbgorLVN0YXRlQ2FjaGU6OlN0
YXRlQ2FjaGUoKSB7fQorK1N0YXRlQ2FjaGU6OlN0YXRlQ2FjaGUoY29uc3QgYW5nbGU6OkZlYXR1
cmVzTXRsICZmZWF0dXJlcykgOiBtRmVhdHVyZXMoZmVhdHVyZXMpIHt9CisgCisgU3RhdGVDYWNo
ZTo6flN0YXRlQ2FjaGUoKSB7fQorIAorQEAgLTExMTMsNiArMTEzMCwxMSBAQCB2b2lkIFRvT2Jq
Qyhjb25zdCBSZW5kZXJQYXNzU3RlbmNpbEF0dGFjaG1lbnREZXNjICZkZXNjLAorICAgICAgICAg
aWYgKGl0ZSA9PSBtU2FtcGxlclN0YXRlcy5lbmQoKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAg
ICBBdXRvT2JqQ09iajxNVExTYW1wbGVyRGVzY3JpcHRvcj4gb2JqQ0Rlc2MgPSBUb09iakMoZGVz
Yyk7CisrICAgICAgICAgICAgaWYgKCFtRmVhdHVyZXMuYWxsb3dSdW50aW1lU2FtcGxlckNvbXBh
cmVNb2RlLmVuYWJsZWQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvLyBSdW50
aW1lIHNhbXBsZXIgY29tcGFyZSBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQsIGZhbGxiYWNrIHRvIG5l
dmVyLgorKyAgICAgICAgICAgICAgICBvYmpDRGVzYy5nZXQoKS5jb21wYXJlRnVuY3Rpb24gPSBN
VExDb21wYXJlRnVuY3Rpb25OZXZlcjsKKysgICAgICAgICAgICB9CisgICAgICAgICAgICAgQXV0
b09iakNQdHI8aWQ8TVRMU2FtcGxlclN0YXRlPj4gbmV3U3RhdGUgPQorICAgICAgICAgICAgICAg
ICBbW21ldGFsRGV2aWNlIG5ld1NhbXBsZXJTdGF0ZVdpdGhEZXNjcmlwdG9yOm9iakNEZXNjXSBB
TkdMRV9NVExfQVVUT1JFTEVBU0VdOworIAorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9tdGxfdXRpbHMuaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxf
dXRpbHMuaAoraW5kZXggYTg0YWM3My4uODA1NzI5ZSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMuaAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL210bF91dGlscy5oCitAQCAtMTM1LDE1ICsxMzUsMzAgQEAgTVRMVGV4dHVyZVN3aXp6
bGUgR2V0VGV4dHVyZVN3aXp6bGUoR0xlbnVtIHN3aXp6bGUpOworIAorIC8vIEdldCBjb2xvciB3
cml0ZSBtYXNrIGZvciBhIHNwZWNpZmllZCBmb3JtYXQuIFNvbWUgZm9ybWF0cyBzdWNoIGFzIFJH
QjU2NSBkb2Vzbid0IGhhdmUgYWxwaGEKKyAvLyBjaGFubmVsIGJ1dCBpcyBlbXVsYXRlZCBieSBh
IFJHQkE4IGZvcm1hdCwgd2UgbmVlZCB0byBkaXNhYmxlIGFscGhhIHdyaXRlIGZvciB0aGlzIGZv
cm1hdC4KKy0vLyAtIGlzRm9ybWF0RW11bGF0ZWQ6IGlmIHRoZSBmb3JtYXQgaXMgZW11bGF0ZWQs
IHRoaXMgcG9pbnRlciB3aWxsIHN0b3JlIGEgdHJ1ZSB2YWx1ZS4KKy1NVExDb2xvcldyaXRlTWFz
ayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQs
IGJvb2wgKmlzRm9ybWF0RW11bGF0ZWQpOworKy8vIC0gZW11bGF0ZWRDaGFubmVsc091dDogaWYg
dGhlIGZvcm1hdCBpcyBlbXVsYXRlZCwgdGhpcyBwb2ludGVyIHdpbGwgc3RvcmUgYSB0cnVlIHZh
bHVlLgorK01UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3Qg
bXRsOjpGb3JtYXQgJm10bEZvcm1hdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgKmVtdWxhdGVkQ2hhbm5lbHNPdXQpOworIE1UTENvbG9yV3JpdGVN
YXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1h
dCk7CisgYm9vbCBJc0Zvcm1hdEVtdWxhdGVkKGNvbnN0IG10bDo6Rm9ybWF0ICZtdGxGb3JtYXQp
OwogIAotIFNPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKE9wZW5HTEVTKQorK05TVUludGVnZXIg
R2V0TWF4UmVuZGVyVGFyZ2V0U2l6ZUZvckRldmljZUluQnl0ZXMoaWQ8TVRMRGV2aWNlPiBkZXZp
Y2UpOworK05TVUludGVnZXIgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGlk
PE1UTERldmljZT4gZGV2aWNlKTsKKytib29sIERldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRT
aXplKGlkPE1UTERldmljZT4gZGV2aWNlKTsKKysKKyAvLyBVc2VmdWwgdG8gc2V0IGNsZWFyIGNv
bG9yIGZvciB0ZXh0dXJlIG9yaWdpbmFsbHkgaGF2aW5nIG5vIGFscGhhIGluIEdMLCBidXQgYmFj
a2VuZCdzIGZvcm1hdAorIC8vIGhhcyBhbHBoYSBjaGFubmVsLgorIE1UTENsZWFyQ29sb3IgRW11
bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJDb2xvciBjb2xvciwgTVRMQ29sb3JXcml0ZU1h
c2sgY29sb3JNYXNrKTsKICAKLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
ZWFnbC9GdW5jdGlvbnNFQUdMLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRnVu
Y3Rpb25zRUFHTC5tbQotaW5kZXggNzc3OTc5Mi4uMDc2ZDA3MiAxMDA2NDQKLS0tLSBhL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KLSsrKyBiL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9lYWdsL0Z1bmN0aW9uc0VBR0wubW0KLUBAIC0xNCw3ICsxNCw3IEBA
Ci0gIyAgICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgotICMgICAgaW1wb3J0IDxP
cGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisrCisrTlNVSW50ZWdlciBDb21wdXRlVG90YWxTaXpl
VXNlZEZvck1UTFJlbmRlclBhc3NEZXNjcmlwdG9yKGNvbnN0IE1UTFJlbmRlclBhc3NEZXNjcmlw
dG9yICpkZXNjcmlwdG9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDxNVExEZXZp
Y2U+IGRldmljZSk7CisrCisrTlNVSW50ZWdlciBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJl
bmRlclBpcGVsaW5lRGVzY3JpcHRvcigKKysgICAgY29uc3QgTVRMUmVuZGVyUGlwZWxpbmVEZXNj
cmlwdG9yICpkZXNjcmlwdG9yLAorKyAgICBjb25zdCBDb250ZXh0ICpjb250ZXh0LAorKyAgICBp
ZDxNVExEZXZpY2U+IGRldmljZSk7CisrCisgZ2w6OkJveCBNVExSZWdpb25Ub0dMQm94KGNvbnN0
IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKTsKICAKLS0jICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRl
cmVyL2dsL2FwcGxlL1NvZnRMaW5raW5nLmgiCi0rIyAgICBpbmNsdWRlICJjb21tb24vYXBwbGUv
U29mdExpbmtpbmcuaCIKKyBNaXBtYXBOYXRpdmVMZXZlbCBHZXROYXRpdmVNaXBMZXZlbChHTHVp
bnQgbGV2ZWwsIEdMdWludCBiYXNlKTsKK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvbXRsX3V0aWxzLm1tIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF91
dGlscy5tbQoraW5kZXggMDc2ZTYwOS4uMDA5YWY1YSAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfdXRpbHMubW0KKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9tdGxfdXRpbHMubW0KK0BAIC0xMCw5ICsxMCwxMSBAQAogIAotIFNPRlRfTElOS19G
UkFNRVdPUktfU09VUkNFKE9wZW5HTEVTKQorICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfdXRpbHMuaCIKICAKLWRpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
Z2wvZWFnbC9JT1N1cmZhY2VTdXJmYWNlRUFHTC5tbSBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9lYWdsL0lPU3VyZmFjZVN1cmZhY2VFQUdMLm1tCi1pbmRleCBmMTZjM2U3Li40NWU2ZDBmIDEw
MDY0NAotLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvSU9TdXJmYWNlU3VyZmFj
ZUVBR0wubW0KLSsrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0lPU3VyZmFjZVN1
cmZhY2VFQUdMLm1tCi1AQCAtMjA2LDcgKzIwNiw5IEBAIGVnbDo6RXJyb3IgSU9TdXJmYWNlU3Vy
ZmFjZUVBR0w6OmJpbmRUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKLSAgICAg
ICAgIC8vIFRPRE8oa2JyKTogcG9zc2libHkgbW9yZSBzdGF0ZSB0byBiZSBzZXQgaGVyZSwgaW5j
bHVkaW5nIHNldHRpbmcgYW55Ci0gICAgICAgICAvLyBwaXhlbCB1bnBhY2sgYnVmZmVyIHRvIDAg
d2hlbiB1c2luZyBFUyAzLjAgY29udGV4dHMuCi0gICAgICAgICBnbDo6UGl4ZWxVbnBhY2tTdGF0
ZSBkZWZhdWx0VW5wYWNrU3RhdGU7Ci0tICAgICAgICBzdGF0ZU1hbmFnZXItPnNldFBpeGVsVW5w
YWNrU3RhdGUoZGVmYXVsdFVucGFja1N0YXRlKTsKLSsgICAgICAgIGlmIChJc0Vycm9yKHN0YXRl
TWFuYWdlci0+c2V0UGl4ZWxVbnBhY2tTdGF0ZShjb250ZXh0LCBkZWZhdWx0VW5wYWNrU3RhdGUp
KSkgewotKyAgICAgICAgICAgIHJldHVybiBlZ2w6OkVnbEJhZFN0YXRlKCkgPDwgIkZhaWxlZCB0
byBzZXQgcGl4ZWwgdW5wYWNrIHN0YXRlLiI7Ci0rICAgICAgICB9Ci0gICAgICAgICB0ZXh0dXJl
RGF0YSA9IElPU3VyZmFjZUdldEJhc2VBZGRyZXNzKG1JT1N1cmZhY2UpOwotICAgICB9Ci0gCi1A
QCAtMjM4LDcgKzI0MCw5IEBAIGVnbDo6RXJyb3IgSU9TdXJmYWNlU3VyZmFjZUVBR0w6OnJlbGVh
c2VUZXhJbWFnZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgRUdMCi0gICAgICAgICBnbDo6
UGl4ZWxQYWNrU3RhdGUgc3RhdGU7Ci0gICAgICAgICBzdGF0ZS5yb3dMZW5ndGggPSBtUm93U3Ry
aWRlSW5QaXhlbHM7Ci0gICAgICAgICBzdGF0ZS5hbGlnbm1lbnQgPSAxOwotLSAgICAgICAgc3Rh
dGVNYW5hZ2VyLT5zZXRQaXhlbFBhY2tTdGF0ZShzdGF0ZSk7Ci0rICAgICAgICBpZiAoSXNFcnJv
cihzdGF0ZU1hbmFnZXItPnNldFBpeGVsUGFja1N0YXRlKGNvbnRleHQsIHN0YXRlKSkpIHsKLSsg
ICAgICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRTdGF0ZSgpIDw8ICJGYWlsZWQgdG8gc2V0IHBp
eGVsIHVucGFjayBzdGF0ZS4iOwotKyAgICAgICAgfQotICAgICAgICAgLy8gVE9ETyhrYnIpOiBw
b3NzaWJseSBtb3JlIHN0YXRlIHRvIGJlIHNldCBoZXJlLCBpbmNsdWRpbmcgc2V0dGluZyBhbnkK
LSAgICAgICAgIC8vIHBpeGVsIHBhY2sgYnVmZmVyIHRvIDAgd2hlbiB1c2luZyBFUyAzLjAgY29u
dGV4dHMuCi0gICAgICAgICBjb25zdCBhdXRvICZmb3JtYXQgPSBrSU9TdXJmYWNlRm9ybWF0c1tt
Rm9ybWF0SW5kZXhdOwotZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5k
ZXJlcmdsX3V0aWxzLmNwcCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0
aWxzLmNwcAotaW5kZXggOTk3NzJjNC4uMTFmNDdlNiAxMDA2NDQKLS0tLSBhL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxzLmNwcAotKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCi1AQCAtMTM1OCw3ICsxMzU4LDcgQEAgdm9p
ZCBHZW5lcmF0ZUNhcHMoY29uc3QgRnVuY3Rpb25zR0wgKmZ1bmN0aW9ucywKKysjaW5jbHVkZSA8
QXZhaWxhYmlsaXR5Lmg+CisgI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgogIAotICNp
ZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ0NBVEFMWVNUKQotICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotLSAgICBpZiAoYW5n
bGU6OkdldFN5c3RlbUluZm8oJmluZm8pICYmICFpbmZvLmlzaU9TQXBwT25NYWMpCi0rICAgIGlm
IChhbmdsZTo6R2V0U3lzdGVtSW5mbygmaW5mbykgJiYgIWluZm8ubmVlZHNFQUdMT25NYWMpCisg
I2luY2x1ZGUgImNvbW1vbi9NZW1vcnlCdWZmZXIuaCIKKysjaW5jbHVkZSAiY29tbW9uL3N5c3Rl
bV91dGlscy5oIgorICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaCIKKyAjaW5j
bHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oIgorICNpbmNsdWRlICJs
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgiCitAQCAtMjQsNiArMjYsOCBAQAor
IG5hbWVzcGFjZSBtdGwKKyB7CisgCisrY29uc3RleHByIGNoYXIga0FOR0xFUHJpbnRNU0xFbnZb
XSA9ICJBTkdMRV9NRVRBTF9QUklOVF9NU0xfRU5BQkxFIjsKKysKKyBuYW1lc3BhY2UKKyB7Cisg
CitAQCAtMTAzLDI0ICsxMDcsNDMgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdl
TmF0aXZlSW5kZXggJmluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbWFnZU5hdGl2ZUluZGV4ICZpbmRleCkKKyB7CisgICAgIEFTU0VSVCh0ZXh0
dXJlICYmIHRleHR1cmUtPnZhbGlkKCkpOworLSAgICAvLyBPbmx5IG9uZSBzbGljZSBjYW4gYmUg
aW5pdGlhbGl6ZWQgYXQgYSB0aW1lLgorLSAgICBBU1NFUlQoIWluZGV4LmlzTGF5ZXJlZCgpIHx8
IGluZGV4LmdldFR5cGUoKSA9PSBnbDo6VGV4dHVyZVR5cGU6Ol8zRCk7CisgICAgIENvbnRleHRN
dGwgKmNvbnRleHRNdGwgPSBtdGw6OkdldEltcGwoY29udGV4dCk7CisgCisrICAgIGNvbnN0IGFu
Z2xlOjpGb3JtYXQgJmFjdHVhbEFuZ2xlRm9ybWF0ICAgICAgICAgICA9IHRleHR1cmVPYmpGb3Jt
YXQuYWN0dWFsQW5nbGVGb3JtYXQoKTsKKyAgICAgY29uc3QgZ2w6OkludGVybmFsRm9ybWF0ICZp
bnRlbmRlZEludGVybmFsRm9ybWF0ID0gdGV4dHVyZU9iakZvcm1hdC5pbnRlbmRlZEludGVybmFs
Rm9ybWF0KCk7CisgCisgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIG1hbnkgcGxh
Y2VzIHRvIGluaXRpYWxpemUgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0dXJlLgorLSAgICAvLyBTbyBp
dCdzIGJldHRlciB3ZSBkbyB0aGUgaW5pdGlhbCBjaGVjayBoZXJlIGluc3RlYWQgb2YgbGV0IHRo
ZSBjYWxsZXJzIGRvIGl0IHRoZW1zZWx2ZXM6CistICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC52
YWxpZCgpIHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuY29tcHJlc3NlZCkKKysgICAgLy8gU28g
aXQncyBiZXR0ZXIgd2UgZG8gdGhlIHNhbml0eSBjaGVjayBoZXJlIGluc3RlYWQgb2YgbGV0IHRo
ZSBjYWxsZXJzIGRvIGl0IHRoZW1zZWx2ZXM6CisrICAgIGlmICghdGV4dHVyZU9iakZvcm1hdC52
YWxpZCgpIHx8IGFjdHVhbEFuZ2xlRm9ybWF0LmlzQmxvY2sgfHwgYWN0dWFsQW5nbGVGb3JtYXQu
ZGVwdGhCaXRzID4gMCB8fAorKyAgICAgICAgYWN0dWFsQW5nbGVGb3JtYXQuc3RlbmNpbEJpdHMg
PiAwKQogICAgICB7Ci0gICAgICAgICBWZW5kb3JJRCB2ZW5kb3IgPSBHZXRWZW5kb3JJRChmdW5j
dGlvbnMpOwotICAgICAgICAgaWYgKChJc0FNRCh2ZW5kb3IpIHx8IElzSW50ZWwodmVuZG9yKSkg
JiYgKm1heFN1cHBvcnRlZEVTVmVyc2lvbiA+PSBnbDo6VmVyc2lvbigzLCAwKSkKKysgICAgICAg
IC8vIElmIGRzdCBmb3JtYXQgaXMgY29tcHJlc3NlZCwgaWdub3JlLgorICAgICAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOworICAgICB9CisgCisgICAgIGdsOjpFeHRlbnRzIHNp
emUgPSB0ZXh0dXJlLT5zaXplKGluZGV4KTsKKyAKKy0gICAgLy8gSW50aWlhbGl6ZSB0aGUgY29u
dGVudCB0byBibGFjaworLSAgICBHTGludCBsYXllciwgc3RhcnREZXB0aDsKKy0gICAgR2V0U2xp
Y2VBbmREZXB0aChpbmRleCwgJmxheWVyLCAmc3RhcnREZXB0aCk7CisrICAgIC8vIEludGlhbGl6
ZSB0aGUgY29udGVudCB0byBibGFjaworKyAgICBHTGludCBsYXllciAgICAgID0gMDsKKysgICAg
R0xpbnQgc3RhcnREZXB0aCA9IDA7CisrICAgIGlmIChpbmRleC5oYXNMYXllcigpKQorKyAgICB7
CisrICAgICAgICBzd2l0Y2ggKGluZGV4LmdldFR5cGUoKSkKKysgICAgICAgIHsKKysgICAgICAg
ICAgICBjYXNlIGdsOjpUZXh0dXJlVHlwZTo6Q3ViZU1hcDoKKysgICAgICAgICAgICAgICAgbGF5
ZXIgPSBpbmRleC5jdWJlTWFwRmFjZUluZGV4KCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOwor
KyAgICAgICAgICAgIGNhc2UgZ2w6OlRleHR1cmVUeXBlOjpfMkRBcnJheToKKysgICAgICAgICAg
ICAgICAgbGF5ZXIgPSBpbmRleC5nZXRMYXllckluZGV4KCk7CisrICAgICAgICAgICAgICAgIGJy
ZWFrOworKyAgICAgICAgICAgIGNhc2UgZ2w6OlRleHR1cmVUeXBlOjpfM0Q6CisrICAgICAgICAg
ICAgICAgIHN0YXJ0RGVwdGggPSBpbmRleC5nZXRMYXllckluZGV4KCk7CisrICAgICAgICAgICAg
ICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICB9Cisg
CisgICAgIGlmICh0ZXh0dXJlLT5pc0NQVUFjY2Vzc2libGUoKSAmJiBpbmRleC5nZXRUeXBlKCkg
IT0gZ2w6OlRleHR1cmVUeXBlOjpfMkRNdWx0aXNhbXBsZSAmJgorICAgICAgICAgaW5kZXguZ2V0
VHlwZSgpICE9IGdsOjpUZXh0dXJlVHlwZTo6XzJETXVsdGlzYW1wbGVBcnJheSkKK0BAIC0xMzYs
NiArMTU5LDEzIEBAIEdMaW50IEdldFNsaWNlT3JEZXB0aChjb25zdCBJbWFnZU5hdGl2ZUluZGV4
ICZpbmRleCkKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UKKyAgICAgICAgIHsKKysgICAgICAg
ICAgICBpZiAoIXRleHR1cmVPYmpGb3JtYXQudmFsaWQoKSB8fCBpbnRlbmRlZEludGVybmFsRm9y
bWF0LmNvbXByZXNzZWQgfHwKKysgICAgICAgICAgICAgICAgaW50ZW5kZWRJbnRlcm5hbEZvcm1h
dC5kZXB0aEJpdHMgPiAwIHx8IGludGVuZGVkSW50ZXJuYWxGb3JtYXQuc3RlbmNpbEJpdHMgPiAw
KQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLy8gSWYgc291cmNlIGZvcm1hdCBp
cyBjb21wcmVzc2VkLCBpZ25vcmUuCisrICAgICAgICAgICAgICAgIHJldHVybiBhbmdsZTo6UmVz
dWx0OjpDb250aW51ZTsKKysgICAgICAgICAgICB9CisrCisgICAgICAgICAgICAgY29uc3QgYW5n
bGU6OkZvcm1hdCAmc3JjRm9ybWF0ID0gYW5nbGU6OkZvcm1hdDo6R2V0KAorICAgICAgICAgICAg
ICAgICBpbnRlbmRlZEludGVybmFsRm9ybWF0LmFscGhhQml0cyA+IDAgPyBhbmdsZTo6Rm9ybWF0
SUQ6OlI4RzhCOEE4X1VOT1JNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IGFuZ2xlOjpGb3JtYXRJRDo6UjhHOEI4X1VOT1JNKTsKK0BAIC0x
NjUsNyArMTk1LDcgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdlTmF0aXZlSW5k
ZXggJmluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZl
cnNpb25Sb3cuZGF0YSgpLCBkc3RSb3dQaXRjaCk7CisgICAgICAgICAgICAgfQorICAgICAgICAg
fQorLSAgICB9CisrICAgIH0gIC8vIGlmICh0ZXh0dXJlLT5pc0NQVUFjY2Vzc2libGUoKSkKKyAg
ICAgZWxzZQorICAgICB7CisgICAgICAgICBBTkdMRV9UUlkoSW5pdGlhbGl6ZVRleHR1cmVDb250
ZW50c0dQVShjb250ZXh0LCB0ZXh0dXJlLCB0ZXh0dXJlT2JqRm9ybWF0LCBpbmRleCwKK0BAIC0y
MTAsNyArMjQwLDcgQEAgR0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdlTmF0aXZlSW5k
ZXggJmluZGV4KQorICAgICBSZW5kZXJUYXJnZXRNdGwgdGVtcFJ0dDsKKyAgICAgdGVtcFJ0dC5z
ZXQodGV4dHVyZSwgaW5kZXguZ2V0TmF0aXZlTGV2ZWwoKSwgc2xpY2VPckRlcHRoLCB0ZXh0dXJl
T2JqRm9ybWF0KTsKKyAKKy0gICAgaW50IGNsZWFyQWxwaGEgPSAwOworKyAgICBmbG9hdCBjbGVh
ckFscGhhID0gMDsKKyAgICAgaWYgKCF0ZXh0dXJlT2JqRm9ybWF0LmludGVuZGVkQW5nbGVGb3Jt
YXQoKS5hbHBoYUJpdHMpCisgICAgIHsKKyAgICAgICAgIC8vIGlmIGludGVuZGVkIGZvcm1hdCBk
b2Vzbid0IGhhdmUgYWxwaGEsIHNldCBpdCB0byAxLjAuCitAQCAtMjQwLDExICsyNzAsMTEgQEAg
R0xpbnQgR2V0U2xpY2VPckRlcHRoKGNvbnN0IEltYWdlTmF0aXZlSW5kZXggJmluZGV4KQorICAg
ICAgICAgQ2xlYXJDb2xvclZhbHVlIGNsZWFyQ29sb3I7CisgICAgICAgICBpZiAoYW5nbGVGb3Jt
YXQuaXNTaW50KCkpCisgICAgICAgICB7CistICAgICAgICAgICAgY2xlYXJDb2xvci5zZXRBc0lu
dCgwLCAwLCAwLCBjbGVhckFscGhhKTsKKysgICAgICAgICAgICBjbGVhckNvbG9yLnNldEFzSW50
KDAsIDAsIDAsIChpbnQpY2xlYXJBbHBoYSk7CisgICAgICAgICB9CisgICAgICAgICBlbHNlIGlm
IChhbmdsZUZvcm1hdC5pc1VpbnQoKSkKKyAgICAgICAgIHsKKy0gICAgICAgICAgICBjbGVhckNv
bG9yLnNldEFzVUludCgwLCAwLCAwLCBjbGVhckFscGhhKTsKKysgICAgICAgICAgICBjbGVhckNv
bG9yLnNldEFzVUludCgwLCAwLCAwLCAoaW50KWNsZWFyQWxwaGEpOworICAgICAgICAgfQorICAg
ICAgICAgZWxzZQorICAgICAgICAgeworQEAgLTI4MywxNyArMzEzLDE3IEBAIEdMaW50IEdldFNs
aWNlT3JEZXB0aChjb25zdCBJbWFnZU5hdGl2ZUluZGV4ICZpbmRleCkKKyAgICAgcnBEZXNjLnNh
bXBsZUNvdW50ID0gdGV4dHVyZS0+c2FtcGxlcygpOworICAgICBpZiAoYW5nbGVGb3JtYXQuZGVw
dGhCaXRzKQorICAgICB7CistICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LnRleHR1cmUg
ICAgICA9IHRleHR1cmU7CistICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LmxldmVsICAg
ICAgICA9IGxldmVsOworLSAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC5zbGljZU9yRGVw
dGggPSBsYXllcjsKKysgICAgICAgIHJwRGVzYy5kZXB0aEF0dGFjaG1lbnQucmVuZGVyVGFyZ2V0
LT50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOworKyAgICAgICAgcnBEZXNjLmRlcHRoQXR0YWNobWVu
dC5yZW5kZXJUYXJnZXQtPmxldmVsICAgICAgICA9IGxldmVsOworKyAgICAgICAgcnBEZXNjLmRl
cHRoQXR0YWNobWVudC5yZW5kZXJUYXJnZXQtPnNsaWNlT3JEZXB0aCA9IGxheWVyOworICAgICAg
ICAgcnBEZXNjLmRlcHRoQXR0YWNobWVudC5sb2FkQWN0aW9uICAgPSBNVExMb2FkQWN0aW9uQ2xl
YXI7CisgICAgICAgICBycERlc2MuZGVwdGhBdHRhY2htZW50LmNsZWFyRGVwdGggICA9IDEuMDsK
KyAgICAgfQorICAgICBpZiAoYW5nbGVGb3JtYXQuc3RlbmNpbEJpdHMpCisgICAgIHsKKy0gICAg
ICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlICAgICAgPSB0ZXh0dXJlOworLSAg
ICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LmxldmVsICAgICAgICA9IGxldmVsOworLSAg
ICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnNsaWNlT3JEZXB0aCA9IGxheWVyOworKyAg
ICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2htZW50LnJlbmRlclRhcmdldC0+dGV4dHVyZSAgICAg
ID0gdGV4dHVyZTsKKysgICAgICAgIHJwRGVzYy5zdGVuY2lsQXR0YWNobWVudC5yZW5kZXJUYXJn
ZXQtPmxldmVsICAgICAgICA9IGxldmVsOworKyAgICAgICAgcnBEZXNjLnN0ZW5jaWxBdHRhY2ht
ZW50LnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0gbGF5ZXI7CisgICAgICAgICBycERlc2Mu
c3RlbmNpbEF0dGFjaG1lbnQubG9hZEFjdGlvbiAgID0gTVRMTG9hZEFjdGlvbkNsZWFyOworICAg
ICB9CisgCitAQCAtNDU2LDYgKzQ4NiwzMCBAQCB1aW50MzJfdCBHZXREZXZpY2VWZW5kb3JJZChp
ZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlKQorICAgICByZXR1cm4gQ3JlYXRlU2hhZGVyTGlicmFy
eShtZXRhbERldmljZSwgc291cmNlLmNfc3RyKCksIHNvdXJjZS5zaXplKCksIGVycm9yKTsKKyB9
CisgCisrI2lmIDAKKytzdGF0aWMgTVRMTGFuZ3VhZ2VWZXJzaW9uIEdldEhpZ2hlc3RTdXBwb3J0
ZWRNU0xWZXJzaW9uKCkKKyt7CisrICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9k
b2N1bWVudGF0aW9uL21ldGFsL210bGxhbmd1YWdldmVyc2lvbj9sYW5ndWFnZT1vYmpjCisrICAg
IGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKDExLjAsIDE0LjAsIDE0LjApKQorKyAgICAg
ICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMzsKKysgICAgaWYgKEFOR0xFX0FQUExFX0FW
QUlMQUJMRV9YQ0koMTAuMTUsIDEzLjAsIDEzLjApKQorKyAgICAgICAgcmV0dXJuIE1UTExhbmd1
YWdlVmVyc2lvbjJfMjsKKysgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTUs
IDEzLjAsIDEyLjApKQorKyAgICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMTsKKysg
ICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAuMTMsIDEzLjAsIDExLjApKQorKyAg
ICAgICAgcmV0dXJuIE1UTExhbmd1YWdlVmVyc2lvbjJfMDsKKysgICAgaWYgKEFOR0xFX0FQUExF
X0FWQUlMQUJMRV9YQ0koMTAuMTIsIDEzLjAsIDEwLjApKQorKyAgICAgICAgcmV0dXJuIE1UTExh
bmd1YWdlVmVyc2lvbjFfMjsKKysgICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0koMTAu
MTEsIDEzLjAsIDkuMCkpCisrICAgICAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8xOwor
KyMgICAgaWYgVEFSR0VUX09TX0lPUworKyAgICBpZiAoQU5HTEVfQVBQTEVfQVZBSUxBQkxFX0ko
OS4wKSkKKysgICAgICAgIHJldHVybiBNVExMYW5ndWFnZVZlcnNpb24xXzA7CisrIyAgICBlbmRp
ZgorKyAgICByZXR1cm4gTVRMTGFuZ3VhZ2VWZXJzaW9uMV8xOworK30KKysjZW5kaWYKKysKKyBB
dXRvT2JqQ1B0cjxpZDxNVExMaWJyYXJ5Pj4gQ3JlYXRlU2hhZGVyTGlicmFyeShpZDxNVExEZXZp
Y2U+IG1ldGFsRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc291cmNlTGVuLAorQEAgLTQ2OSw4ICs1MjMs
MjUgQEAgdWludDMyX3QgR2V0RGV2aWNlVmVuZG9ySWQoaWQ8TVRMRGV2aWNlPiBtZXRhbERldmlj
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVXaGVuRG9uZTpOT107CisgICAgICAgICBhdXRv
IG9wdGlvbnMgICAgID0gW1tbTVRMQ29tcGlsZU9wdGlvbnMgYWxsb2NdIGluaXRdIEFOR0xFX01U
TF9BVVRPUkVMRUFTRV07CisrICAgICAgICAvLyBNYXJrIGFsbCBwb3NpdGlvbnMgaW4gVlMgd2l0
aCBhdHRyaWJ1dGUgaW52YXJpYW50IGFzIG5vbi1vcHRpbWl6YWJsZQorKyNpZiAoZGVmaW5lZChf
X01BQ18xMV8wKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gX19NQUNfMTFf
MCkgfHwgICAgICAgIFwKKysgICAgKGRlZmluZWQoX19JUEhPTkVfMTRfMCkgJiYgX19JUEhPTkVf
T1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSBfX0lQSE9ORV8xNF8wKSB8fCBcCisrICAgIChkZWZp
bmVkKF9fVFZPU18xNF8wKSAmJiBfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gX19UVk9T
XzE0XzApCisrICAgICAgICBvcHRpb25zLnByZXNlcnZlSW52YXJpYW5jZSA9IHRydWU7CisrI2Vs
c2UKKysgICAgICAgIC8vIE5vIHByZXNlcnZlSW52YXJpYW5jZSBhdmFpbGFibGUgY29tcGlsaW5n
IGZyb20gc291cmNlLCBzbyBqdXN0IGRpc2FibGUgZmFzdG1hdGguCisrICAgICAgICBvcHRpb25z
LmZhc3RNYXRoRW5hYmxlZCA9IGZhbHNlOworKyNlbmRpZgorKyAgICAgICAgLy8gVE9ETyhqY3Vu
bmluZ2hhbSk6IHdvcmthcm91bmQgZm9yIGludGVsIGRyaXZlciBub3QgcHJlc2VydmluZyBpbnZh
cmlhbmNlIG9uIGFsbCBzaGFkZXJzCisrICAgICAgICBpZiAoW21ldGFsRGV2aWNlLm5hbWUgcmFu
Z2VPZlN0cmluZzpAIkludGVsIl0ubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKKysgICAgICAgIHsK
KysgICAgICAgICAgICBvcHRpb25zLmZhc3RNYXRoRW5hYmxlZCA9IGZhbHNlOworKyAgICAgICAg
fQorICAgICAgICAgYXV0byBsaWJyYXJ5ID0gW21ldGFsRGV2aWNlIG5ld0xpYnJhcnlXaXRoU291
cmNlOm5zU291cmNlIG9wdGlvbnM6b3B0aW9ucyBlcnJvcjombnNFcnJvcl07CistCisrICAgICAg
ICBpZiAoYW5nbGU6OkdldEVudmlyb25tZW50VmFyKGtBTkdMRVByaW50TVNMRW52KVswXSA9PSAn
MScpCisrICAgICAgICB7CisrICAgICAgICAgICAgTlNMb2coQCIlQFxuIiwgbnNTb3VyY2UpOwor
KyAgICAgICAgfQorICAgICAgICAgW25zU291cmNlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07Cisg
CisgICAgICAgICAqZXJyb3JPdXQgPSBzdGQ6Om1vdmUobnNFcnJvcik7CitAQCAtNzcyLDE1ICs4
NDMsMTUgQEAgTVRMVGV4dHVyZVN3aXp6bGUgR2V0VGV4dHVyZVN3aXp6bGUoR0xlbnVtIHN3aXp6
bGUpCisgfQorICNlbmRpZgorIAorLU1UTENvbG9yV3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JX
cml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10bEZvcm1hdCwgYm9vbCAqaXNFbXVsYXRlZE91
dCkKKytNVExDb2xvcldyaXRlTWFzayBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKGNvbnN0IG10
bDo6Rm9ybWF0ICZtdGxGb3JtYXQsIGJvb2wgKmVtdWxhdGVkQ2hhbm5lbHNPdXQpCisgeworICAg
ICBjb25zdCBhbmdsZTo6Rm9ybWF0ICZpbnRlbmRlZEZvcm1hdCA9IG10bEZvcm1hdC5pbnRlbmRl
ZEFuZ2xlRm9ybWF0KCk7CisgICAgIGNvbnN0IGFuZ2xlOjpGb3JtYXQgJmFjdHVhbEZvcm1hdCAg
ID0gbXRsRm9ybWF0LmFjdHVhbEFuZ2xlRm9ybWF0KCk7CistICAgIGJvb2wgaXNGb3JtYXRFbXVs
YXRlZCAgICAgICAgICAgICAgID0gZmFsc2U7CisrICAgIGJvb2wgZW11bGF0ZWRDaGFubmVscyAg
ICAgICAgICAgICAgID0gZmFsc2U7CisgICAgIE1UTENvbG9yV3JpdGVNYXNrIGNvbG9yV3JpdGFi
bGVNYXNrID0gTVRMQ29sb3JXcml0ZU1hc2tBbGw7CisgICAgIGlmIChpbnRlbmRlZEZvcm1hdC5h
bHBoYUJpdHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQuYWxwaGFCaXRzKQorICAgICB7CistICAgICAg
ICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKysgICAgICAgIGVtdWxhdGVkQ2hhbm5lbHMgPSB0
cnVlOworICAgICAgICAgLy8gRGlzYWJsZSBhbHBoYSB3cml0ZSB0byB0aGlzIHRleHR1cmUKKyAg
ICAgICAgIGNvbG9yV3JpdGFibGVNYXNrID0gY29sb3JXcml0YWJsZU1hc2sgJiAofk1UTENvbG9y
V3JpdGVNYXNrQWxwaGEpOworICAgICB9CitAQCAtNzg4LDQxICs4NTksNDEgQEAgTVRMQ29sb3JX
cml0ZU1hc2sgR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhjb25zdCBtdGw6OkZvcm1hdCAmbXRs
Rm9ybWF0LCBib29sICoKKyAgICAgeworICAgICAgICAgaWYgKGludGVuZGVkRm9ybWF0LnJlZEJp
dHMgPT0gMCAmJiBhY3R1YWxGb3JtYXQucmVkQml0cykKKyAgICAgICAgIHsKKy0gICAgICAgICAg
ICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKysgICAgICAgICAgICBlbXVsYXRlZENoYW5uZWxz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAvLyBEaXNhYmxlIHJlZCB3cml0ZSB0byB0aGlzIHRleHR1
cmUKKyAgICAgICAgICAgICBjb2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYg
KH5NVExDb2xvcldyaXRlTWFza1JlZCk7CisgICAgICAgICB9CisgICAgICAgICBpZiAoaW50ZW5k
ZWRGb3JtYXQuZ3JlZW5CaXRzID09IDAgJiYgYWN0dWFsRm9ybWF0LmdyZWVuQml0cykKKyAgICAg
ICAgIHsKKy0gICAgICAgICAgICBpc0Zvcm1hdEVtdWxhdGVkID0gdHJ1ZTsKKysgICAgICAgICAg
ICBlbXVsYXRlZENoYW5uZWxzID0gdHJ1ZTsKKyAgICAgICAgICAgICAvLyBEaXNhYmxlIGdyZWVu
IHdyaXRlIHRvIHRoaXMgdGV4dHVyZQorICAgICAgICAgICAgIGNvbG9yV3JpdGFibGVNYXNrID0g
Y29sb3JXcml0YWJsZU1hc2sgJiAofk1UTENvbG9yV3JpdGVNYXNrR3JlZW4pOworICAgICAgICAg
fQorICAgICAgICAgaWYgKGludGVuZGVkRm9ybWF0LmJsdWVCaXRzID09IDAgJiYgYWN0dWFsRm9y
bWF0LmJsdWVCaXRzKQorICAgICAgICAgeworLSAgICAgICAgICAgIGlzRm9ybWF0RW11bGF0ZWQg
PSB0cnVlOworKyAgICAgICAgICAgIGVtdWxhdGVkQ2hhbm5lbHMgPSB0cnVlOworICAgICAgICAg
ICAgIC8vIERpc2FibGUgYmx1ZSB3cml0ZSB0byB0aGlzIHRleHR1cmUKKyAgICAgICAgICAgICBj
b2xvcldyaXRhYmxlTWFzayA9IGNvbG9yV3JpdGFibGVNYXNrICYgKH5NVExDb2xvcldyaXRlTWFz
a0JsdWUpOworICAgICAgICAgfQorICAgICB9CisgCistICAgICppc0VtdWxhdGVkT3V0ID0gaXNG
b3JtYXRFbXVsYXRlZDsKKysgICAgKmVtdWxhdGVkQ2hhbm5lbHNPdXQgPSBlbXVsYXRlZENoYW5u
ZWxzOworIAorICAgICByZXR1cm4gY29sb3JXcml0YWJsZU1hc2s7CisgfQorIAorIE1UTENvbG9y
V3JpdGVNYXNrIEdldEVtdWxhdGVkQ29sb3JXcml0ZU1hc2soY29uc3QgbXRsOjpGb3JtYXQgJm10
bEZvcm1hdCkKKyB7CistICAgIC8vIElnbm9yZSBpc0Zvcm1hdEVtdWxhdGVkIGJvb2xlYW4gdmFs
dWUKKy0gICAgYm9vbCBpc0Zvcm1hdEVtdWxhdGVkOworLSAgICByZXR1cm4gR2V0RW11bGF0ZWRD
b2xvcldyaXRlTWFzayhtdGxGb3JtYXQsICZpc0Zvcm1hdEVtdWxhdGVkKTsKKysgICAgLy8gSWdu
b3JlIGVtdWxhdGVkQ2hhbm5lbHMgYm9vbGVhbiB2YWx1ZQorKyAgICBib29sIGVtdWxhdGVkQ2hh
bm5lbHM7CisrICAgIHJldHVybiBHZXRFbXVsYXRlZENvbG9yV3JpdGVNYXNrKG10bEZvcm1hdCwg
JmVtdWxhdGVkQ2hhbm5lbHMpOworIH0KKyAKKyBib29sIElzRm9ybWF0RW11bGF0ZWQoY29uc3Qg
bXRsOjpGb3JtYXQgJm10bEZvcm1hdCkKKyB7CistICAgIGJvb2wgaXNGb3JtYXRFbXVsYXRlZDsK
Ky0gICAgKHZvaWQpR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxGb3JtYXQsICZpc0Zvcm1h
dEVtdWxhdGVkKTsKKy0gICAgcmV0dXJuIGlzRm9ybWF0RW11bGF0ZWQ7CisrICAgIGJvb2wgZW11
bGF0ZWRDaGFubmVsczsKKysgICAgKHZvaWQpR2V0RW11bGF0ZWRDb2xvcldyaXRlTWFzayhtdGxG
b3JtYXQsICZlbXVsYXRlZENoYW5uZWxzKTsKKysgICAgcmV0dXJuIGVtdWxhdGVkQ2hhbm5lbHM7
CisgfQorIAorIE1UTENsZWFyQ29sb3IgRW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJD
b2xvciBjb2xvciwgTVRMQ29sb3JXcml0ZU1hc2sgY29sb3JNYXNrKQorQEAgLTgzNyw2ICs5MDgs
MTUxIEBAIE1UTENsZWFyQ29sb3IgRW11bGF0ZWRBbHBoYUNsZWFyQ29sb3IoTVRMQ2xlYXJDb2xv
ciBjb2xvciwgTVRMQ29sb3JXcml0ZU1hc2sgY29sCisgICAgIHJldHVybiByZTsKKyB9CisgCisr
TlNVSW50ZWdlciBHZXRNYXhSZW5kZXJUYXJnZXRTaXplRm9yRGV2aWNlSW5CeXRlcyhpZDxNVExE
ZXZpY2U+IGRldmljZSkKKyt7CisrICAgIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQ
VUZhbWlseUFwcGxlNF0pCisrICAgIHsKKysgICAgICAgIHJldHVybiA2NDsKKysgICAgfQorKyAg
ICBlbHNlIGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlMl0pCisr
ICAgIHsKKysgICAgICAgIHJldHVybiAzMjsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysg
ICAgICAgIHJldHVybiAxNjsKKysgICAgfQorK30KKysKKytOU1VJbnRlZ2VyIEdldE1heE51bWJl
ck9mUmVuZGVyVGFyZ2V0c0ZvckRldmljZShpZDxNVExEZXZpY2U+IGRldmljZSkKKyt7CisrICAg
IGlmIChbZGV2aWNlIHN1cHBvcnRzRmFtaWx5Ok1UTEdQVUZhbWlseUFwcGxlMl0gfHwgW2Rldmlj
ZSBzdXBwb3J0c0ZhbWlseTpNVExHUFVGYW1pbHlNYWMxXSkKKysgICAgeworKyAgICAgICAgcmV0
dXJuIDg7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgICByZXR1cm4gNDsKKysg
ICAgfQorK30KKysKKytib29sIERldmljZUhhc01heGltdW1SZW5kZXJUYXJnZXRTaXplKGlkPE1U
TERldmljZT4gZGV2aWNlKQorK3sKKysgICAgcmV0dXJuIFtkZXZpY2Ugc3VwcG9ydHNGYW1pbHk6
TVRMR1BVRmFtaWx5QXBwbGUxXTsKKyt9CisrCisrc3RhdGljIE5TVUludGVnZXIgZ2V0TmV4dExv
Y2F0aW9uRm9yRm9ybWF0KGNvbnN0IEZvcm1hdENhcHMgJmNhcHMsCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNNU0FBLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU1VJbnRlZ2VyIGN1cnJlbnRSZW5kZXJUYXJn
ZXRTaXplKQorK3sKKysgICAgYXNzZXJ0KCFjYXBzLmNvbXByZXNzZWQpOworKyAgICB1aW50OF90
IGFsaWdubWVudCAgICAgICAgID0gY2Fwcy5hbGlnbm1lbnQ7CisrICAgIE5TVUludGVnZXIgcGl4
ZWxCeXRlcyAgICAgPSBjYXBzLnBpeGVsQnl0ZXM7CisrICAgIE5TVUludGVnZXIgcGl4ZWxCeXRl
c01TQUEgPSBjYXBzLnBpeGVsQnl0ZXNNU0FBOworKyAgICBwaXhlbEJ5dGVzICAgICAgICAgICAg
ICAgID0gaXNNU0FBID8gcGl4ZWxCeXRlc01TQUEgOiBwaXhlbEJ5dGVzOworKworKyAgICBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSA9IChjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSArIChhbGlnbm1l
bnQgLSAxKSkgJiB+KGFsaWdubWVudCAtIDEpOworKyAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6
ZSArPSBwaXhlbEJ5dGVzOworKyAgICByZXR1cm4gY3VycmVudFJlbmRlclRhcmdldFNpemU7Cisr
fQorKworK05TVUludGVnZXIgQ29tcHV0ZVRvdGFsU2l6ZVVzZWRGb3JNVExSZW5kZXJQYXNzRGVz
Y3JpcHRvcihjb25zdCBNVExSZW5kZXJQYXNzRGVzY3JpcHRvciAqZGVzY3JpcHRvciwKKysgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWQ8TVRMRGV2aWNlPiBkZXZpY2UpCisreworKyAgICBO
U1VJbnRlZ2VyIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0gMDsKKysKKysgICAgZm9yIChOU1VJ
bnRlZ2VyIGkgPSAwOyBpIDwgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGRl
dmljZSk7IGkrKykKKysgICAgeworKyAgICAgICAgTVRMUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQg
PSBkZXNjcmlwdG9yLmNvbG9yQXR0YWNobWVudHNbaV0udGV4dHVyZS5waXhlbEZvcm1hdDsKKysg
ICAgICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgICAgID0gZGVzY3JpcHRvci5jb2xvckF0dGFj
aG1lbnRzW2ldLnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworKyAgICAgICAgaWYgKHBpeGVsRm9y
bWF0ICE9IE1UTFBpeGVsRm9ybWF0SW52YWxpZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBj
b25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlzcGxheSgpLT5nZXROYXRpdmVG
b3JtYXRDYXBzKHBpeGVsRm9ybWF0KTsKKysgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0
U2l6ZSA9CisrICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBp
c01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAgIH0KKysgICAgfQorKyAg
ICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZvcm1hdCA9PQor
KyAgICAgICAgZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0
KQorKyAgICB7CisrICAgICAgICBib29sIGlzTXNhYSA9IGRlc2NyaXB0b3IuZGVwdGhBdHRhY2ht
ZW50LnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZGVw
dGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlk
KQorKyAgICAgICAgeworKyAgICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMgJmNhcHMgPSBjb250
ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMoCisrICAgICAgICAgICAgICAg
IGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQpOworKyAgICAg
ICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKysgICAgICAgICAgICAgICAgZ2V0TmV4
dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUp
OworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgaWYgKGRl
c2NyaXB0b3IuZGVwdGhBdHRhY2htZW50LnRleHR1cmUucGl4ZWxGb3JtYXQgIT0gTVRMUGl4ZWxG
b3JtYXRJbnZhbGlkKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGJvb2wgaXNNc2FhICAgICAg
ICAgICAgPSBkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnNhbXBsZUNvdW50ID4g
MTsKKysgICAgICAgICAgICBjb25zdCBGb3JtYXRDYXBzICZjYXBzID0gY29udGV4dC0+Z2V0RGlz
cGxheSgpLT5nZXROYXRpdmVGb3JtYXRDYXBzKAorKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9y
LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlLnBpeGVsRm9ybWF0KTsKKysgICAgICAgICAgICBjdXJy
ZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisrICAgICAgICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZv
ckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAg
IH0KKysgICAgICAgIGlmIChkZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50LnRleHR1cmUucGl4
ZWxGb3JtYXQgIT0gTVRMUGl4ZWxGb3JtYXRJbnZhbGlkKQorKyAgICAgICAgeworKyAgICAgICAg
ICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgPSBkZXNjcmlwdG9yLnN0ZW5jaWxBdHRhY2htZW50
LnRleHR1cmUuc2FtcGxlQ291bnQgPiAxOworKyAgICAgICAgICAgIGNvbnN0IEZvcm1hdENhcHMg
JmNhcHMgPSBjb250ZXh0LT5nZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMoCisrICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc3RlbmNpbEF0dGFjaG1lbnQudGV4dHVyZS5waXhlbEZv
cm1hdCk7CisrICAgICAgICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorKyAgICAgICAg
ICAgICAgICBnZXROZXh0TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZSk7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIGN1cnJlbnRS
ZW5kZXJUYXJnZXRTaXplOworK30KKytOU1VJbnRlZ2VyIENvbXB1dGVUb3RhbFNpemVVc2VkRm9y
TVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKAorKyAgICBjb25zdCBNVExSZW5kZXJQaXBlbGlu
ZURlc2NyaXB0b3IgKmRlc2NyaXB0b3IsCisrICAgIGNvbnN0IENvbnRleHQgKmNvbnRleHQsCisr
ICAgIGlkPE1UTERldmljZT4gZGV2aWNlKQorK3sKKysgICAgTlNVSW50ZWdlciBjdXJyZW50UmVu
ZGVyVGFyZ2V0U2l6ZSA9IDA7CisrICAgIGJvb2wgaXNNc2FhICAgICAgICAgICAgICAgICAgICAg
ICAgPSBkZXNjcmlwdG9yLnNhbXBsZUNvdW50ID4gMTsKKysgICAgZm9yIChOU1VJbnRlZ2VyIGkg
PSAwOyBpIDwgR2V0TWF4TnVtYmVyT2ZSZW5kZXJUYXJnZXRzRm9yRGV2aWNlKGRldmljZSk7IGkr
KykKKysgICAgeworKyAgICAgICAgTVRMUmVuZGVyUGlwZWxpbmVDb2xvckF0dGFjaG1lbnREZXNj
cmlwdG9yICpjb2xvciA9IGRlc2NyaXB0b3IuY29sb3JBdHRhY2htZW50c1tpXTsKKysgICAgICAg
IGlmIChjb2xvci5waXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAg
ICB7CisrICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9IGNvbnRleHQtPmdldERp
c3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2Fwcyhjb2xvci5waXhlbEZvcm1hdCk7CisrICAgICAg
ICAgICAgY3VycmVudFJlbmRlclRhcmdldFNpemUgPQorKyAgICAgICAgICAgICAgICBnZXROZXh0
TG9jYXRpb25Gb3JGb3JtYXQoY2FwcywgaXNNc2FhLCBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSk7
CisrICAgICAgICB9CisrICAgIH0KKysgICAgaWYgKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50
UGl4ZWxGb3JtYXQgPT0gZGVzY3JpcHRvci5zdGVuY2lsQXR0YWNobWVudFBpeGVsRm9ybWF0KQor
KyAgICB7CisrICAgICAgICBpZiAoZGVzY3JpcHRvci5kZXB0aEF0dGFjaG1lbnRQaXhlbEZvcm1h
dCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgY29u
c3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisrICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldERpc3Bs
YXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudFBpeGVs
Rm9ybWF0KTsKKysgICAgICAgICAgICBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZSA9CisrICAgICAg
ICAgICAgICAgIGdldE5leHRMb2NhdGlvbkZvckZvcm1hdChjYXBzLCBpc01zYWEsIGN1cnJlbnRS
ZW5kZXJUYXJnZXRTaXplKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBlbHNlCisrICAgIHsK
KysgICAgICAgIGlmIChkZXNjcmlwdG9yLmRlcHRoQXR0YWNobWVudFBpeGVsRm9ybWF0ICE9IE1U
TFBpeGVsRm9ybWF0SW52YWxpZCkKKysgICAgICAgIHsKKysgICAgICAgICAgICBjb25zdCBGb3Jt
YXRDYXBzICZjYXBzID0KKysgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RGlzcGxheSgpLT5n
ZXROYXRpdmVGb3JtYXRDYXBzKGRlc2NyaXB0b3IuZGVwdGhBdHRhY2htZW50UGl4ZWxGb3JtYXQp
OworKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJUYXJnZXRTaXplID0KKysgICAgICAgICAgICAg
ICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNhcHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRh
cmdldFNpemUpOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc3RlbmNpbEF0
dGFjaG1lbnRQaXhlbEZvcm1hdCAhPSBNVExQaXhlbEZvcm1hdEludmFsaWQpCisrICAgICAgICB7
CisrICAgICAgICAgICAgY29uc3QgRm9ybWF0Q2FwcyAmY2FwcyA9CisrICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldERpc3BsYXkoKS0+Z2V0TmF0aXZlRm9ybWF0Q2FwcyhkZXNjcmlwdG9yLnN0
ZW5jaWxBdHRhY2htZW50UGl4ZWxGb3JtYXQpOworKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJU
YXJnZXRTaXplID0KKysgICAgICAgICAgICAgICAgZ2V0TmV4dExvY2F0aW9uRm9yRm9ybWF0KGNh
cHMsIGlzTXNhYSwgY3VycmVudFJlbmRlclRhcmdldFNpemUpOworKyAgICAgICAgfQorKyAgICB9
CisrICAgIHJldHVybiBjdXJyZW50UmVuZGVyVGFyZ2V0U2l6ZTsKKyt9CisrCisgZ2w6OkJveCBN
VExSZWdpb25Ub0dMQm94KGNvbnN0IE1UTFJlZ2lvbiAmbXRsUmVnaW9uKQorIHsKKyAgICAgcmV0
dXJuIGdsOjpCb3goc3RhdGljX2Nhc3Q8aW50PihtdGxSZWdpb24ub3JpZ2luLngpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG10bFJlZ2lvbi5vcmlnaW4ueSksCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvYmxpdC5tZXRhbCBiL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9tZXRhbC9zaGFkZXJzL2JsaXQubWV0YWwKK2luZGV4IDQyNzJjNGYuLjJhOWJiNWQgMTAwNjQ0
CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0Lm1ldGFsCisr
KysgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9ibGl0Lm1ldGFsCitAQCAt
MzM0LDcgKzMzNCw3IEBAIGtlcm5lbCB2b2lkIGJsaXRTdGVuY2lsVG9CdWZmZXJDUyh1c2hvcnQy
IGdJbmRpY2VzIFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKyB9CisgCisgLy8gRnJhZ21l
bnQncyBzdGVuY2lsIG91dHB1dCBpcyBvbmx5IGF2YWlsYWJsZSBzaW5jZSBNZXRhbCAyLjEKKy1A
QCNpZiBfX01FVEFMX1ZFUlNJT05fXyA+PSAyMTAKKysjaWYgX19NRVRBTF9WRVJTSU9OX18gPj0g
MjEwCisgCisgc3RydWN0IEZyYWdtZW50U3RlbmNpbE91dAorIHsKK0BAIC0zOTcsNCArMzk3LDQg
QEAgZnJhZ21lbnQgRnJhZ21lbnREZXB0aFN0ZW5jaWxPdXQgYmxpdERlcHRoU3RlbmNpbEZTKAor
ICAgICAgICAgICAgICAgICAgICAgICBzcmNTdGVuY2lsVGV4dHVyZUN1YmUsIGlucHV0LnRleENv
b3Jkcywgb3B0aW9ucy5zcmNMZXZlbCwgb3B0aW9ucy5zcmNMYXllcik7CisgICAgIHJldHVybiBy
ZTsKKyB9CistQEAjZW5kaWYgIC8vIF9fTUVUQUxfVkVSU0lPTl9fID49IDIxMAorKyNlbmRpZiAg
Ly8gX19NRVRBTF9WRVJTSU9OX18gPj0gMjEwCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL3NoYWRlcnMvY29tbW9uLmggYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvc2hhZGVycy9jb21tb24uaAoraW5kZXggNjhjNzc0NS4uZTY2NzNiNSAxMDA2NDQKKy0tLSBh
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2NvbW1vbi5oCisrKysgYi9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb21tb24uaAorQEAgLTEwLDggKzEwLDgg
QEAKKyAKKyAvLyBjbGFuZy1mb3JtYXQgb2ZmCisgI2lmbmRlZiBTS0lQX1NURF9IRUFERVJTCist
QEAjICAgIGluY2x1ZGUgPHNpbWQvc2ltZC5oPgorLUBAIyAgICBpbmNsdWRlIDxtZXRhbF9zdGRs
aWI+CisrIyAgICBpbmNsdWRlIDxzaW1kL3NpbWQuaD4KKysjICAgIGluY2x1ZGUgPG1ldGFsX3N0
ZGxpYj4KKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSAiY29uc3RhbnRzLmgiCitkaWZmIC0tZ2l0IGEv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvY29weV9idWZmZXIubWV0YWwgYi9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbAoraW5k
ZXggZGY3YzRjOS4uMWI0MDhkOCAxMDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9zaGFkZXJzL2NvcHlfYnVmZmVyLm1ldGFsCisrKysgYi9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvc2hhZGVycy9jb3B5X2J1ZmZlci5tZXRhbAorQEAgLTQsMjIgKzQsMjIgQEAKKyAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIC8vCisgLy8gY29weV9idWZmZXIubWV0YWw6
IGltcGxlbWVudHMgY29tcHV0ZSBzaGFkZXIgdGhhdCBjb3B5IGZvcm1hdHRlZCBkYXRhIGZyb20g
YnVmZmVyIHRvIHRleHR1cmUsCistLy8gYW5kIGZyb20gdGV4dHVyZSB0byBidWZmZXIuCisrLy8g
ZnJvbSB0ZXh0dXJlIHRvIGJ1ZmZlciBhbmQgZnJvbSBidWZmZXIgdG8gYnVmZmVyLgorIC8vIE5P
VEUoaHFsZSk6IFRoaXMgZmlsZSBpcyBhIGJpdCBoYXJkIHRvIHJlYWQgYnV0IHRoZXJlIGFyZSBh
IGxvdCBvZiByZXBlYXRlZCB3b3JrcywgYW5kIGl0IHdvdWxkCisgLy8gYmUgYSBwYWluIHRvIGlt
cGxlbWVudCB3aXRob3V0IHRoZSB1c2Ugb2YgbWFjcm9zLgorIC8vCisgCistQEAjaW5jbHVkZSA8
bWV0YWxfcGFjaz4KKysjaW5jbHVkZSA8bWV0YWxfcGFjaz4KKyAKKyAjaW5jbHVkZSAiY29tbW9u
LmgiCisgI2luY2x1ZGUgImZvcm1hdF9hdXRvZ2VuLmgiCisgCisgdXNpbmcgbmFtZXNwYWNlIHJ4
OjptdGxfc2hhZGVyOworIAorLWNvbnN0YW50IGludCBrQ29weUZvcm1hdFR5cGUgW1tmdW5jdGlv
bl9jb25zdGFudCgxMCldXTsKKytjb25zdGFudCBpbnQga0NvcHlGb3JtYXRUeXBlIFtbZnVuY3Rp
b25fY29uc3RhbnQoMSldXTsKKyAKKyAvKiAtLS0tLS0tLSBjb3B5IHBpeGVsIGRhdGEgYmV0d2Vl
biBidWZmZXIgYW5kIHRleHR1cmUgLS0tLS0tLS0tKi8KKy1jb25zdGFudCBpbnQga0NvcHlUZXh0
dXJlVHlwZSBbW2Z1bmN0aW9uX2NvbnN0YW50KDIwKV1dOworK2NvbnN0YW50IGludCBrQ29weVRl
eHR1cmVUeXBlIFtbZnVuY3Rpb25fY29uc3RhbnQoMildXTsKKyBjb25zdGFudCBib29sIGtDb3B5
VGV4dHVyZVR5cGUyRCAgICAgID0ga0NvcHlUZXh0dXJlVHlwZSA9PSBrVGV4dHVyZVR5cGUyRDsK
KyBjb25zdGFudCBib29sIGtDb3B5VGV4dHVyZVR5cGUyREFycmF5ID0ga0NvcHlUZXh0dXJlVHlw
ZSA9PSBrVGV4dHVyZVR5cGUyREFycmF5OworIGNvbnN0YW50IGJvb2wga0NvcHlUZXh0dXJlVHlw
ZTJETVMgICAgPSBrQ29weVRleHR1cmVUeXBlID09IGtUZXh0dXJlVHlwZTJETXVsdGlzYW1wbGU7
CitkaWZmIC0tZ2l0IGEvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMvZm9ybWF0
X2F1dG9nZW4uaCBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2Zvcm1hdF9h
dXRvZ2VuLmgKK2luZGV4IGExN2VhZDMuLmI5OTFlNDggMTAwNjQ0CistLS0gYS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9mb3JtYXRfYXV0b2dlbi5oCisrKysgYi9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9mb3JtYXRfYXV0b2dlbi5oCitAQCAtMjQ1LDUg
KzI0NSw1IEBAIGVudW0KKyAKKyB9CisgCistfSAgLy8gbmFtZXNwYWNlIG10bF9zaGFkZXIKKy19
ICAvLyBuYW1lc3BhY2UgcngKKyt9CisrfQorZGlmZiAtLWdpdCBhL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9pbmRpY2VzLm1ldGFsIGIvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL3NoYWRlcnMvZ2VuX2luZGljZXMubWV0YWwKK2luZGV4IDJkODM1M2IuLmVlZDYx
ZWEgMTAwNjQ0CistLS0gYS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5f
aW5kaWNlcy5tZXRhbAorKysrIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL3NoYWRlcnMv
Z2VuX2luZGljZXMubWV0YWwKK0BAIC01NiwxMCArNTYsMTAgQEAgaW5saW5lIHVpbnQgZ2V0SW5k
ZXhVbmFsaWduZWRVMzIoY29uc3RhbnQgdWNoYXIgKmlucHV0LCB1aW50IG9mZnNldCwgdWludCBp
ZHgpCisgICAgIHJldHVybiBpbnB1dDAgfCAoaW5wdXQxIDw8IDgpIHwgKGlucHV0MiA8PCAxNikg
fCAoaW5wdXQzIDw8IDI0KTsKKyB9CisgCista2VybmVsIHZvaWQgY29udmVydEluZGV4VThUb1Ux
Nih1aW50IGlkeFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKy0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBhcmFtcyAmb3B0aW9uc1tb
YnVmZmVyKDApXV0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1
Y2hhciAqaW5wdXRbW2J1ZmZlcigxKV1dLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGV2aWNlIHVzaG9ydCAqb3V0cHV0W1tidWZmZXIoMildXSkKKytrZXJuZWwgdm9pZCBjb252
ZXJ0SW5kZXhVOFRvVTE2KHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKysg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IEluZGV4Q29udmVyc2lvblBh
cmFtcyAmb3B0aW9ucyBbW2J1ZmZlcigwKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0IFtbYnVmZmVyKDEpXV0sCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdXNob3J0ICpvdXRwdXQgW1tidWZmZXIoMildXSkK
KyB7CisgICAgIEFOR0xFX0lEWF9DT05WRVJTSU9OX0dVQVJEKGlkeCwgb3B0aW9ucyk7CisgCitA
QCAtNzUsMTIgKzc1LDEzIEBAIGtlcm5lbCB2b2lkIGNvbnZlcnRJbmRleFU4VG9VMTYodWludCBp
ZHhbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0sCisgICAgIH0KKyB9CisgCista2VybmVsIHZv
aWQgY29udmVydEluZGV4VTE2KAorLSAgICB1aW50IGlkeFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dy
aWRdXSwKKy0gICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zW1tidWZm
ZXIoMCldXSwKKy0gICAgY29uc3RhbnQgdWNoYXIgKmlucHV0W1sgYnVmZmVyKDEpLCBmdW5jdGlv
bl9jb25zdGFudChrU291cmNlQnVmZmVyVW5hbGlnbmVkKSBdXSwKKy0gICAgY29uc3RhbnQgdXNo
b3J0ICppbnB1dEFsaWduZWRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VC
dWZmZXJBbGlnbmVkKSBdXSwKKy0gICAgZGV2aWNlIHVzaG9ydCAqb3V0cHV0W1tidWZmZXIoMild
XSkKKytrZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMTYodWludCBpZHggW1t0aHJlYWRfcG9zaXRp
b25faW5fZ3JpZF1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCBJbmRl
eENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RhbnQgdWNoYXIgKmlucHV0CisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrU291cmNlQnVmZmVyVW5h
bGlnbmVkKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1c2hvcnQg
KmlucHV0QWxpZ25lZAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwg
ZnVuY3Rpb25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlckFsaWduZWQpXV0sCisrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRldmljZSB1c2hvcnQgKm91dHB1dCBbW2J1ZmZlcigyKV1dKQorIHsK
KyAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQoaWR4LCBvcHRpb25zKTsKKyAKK0BAIC05
NiwxMiArOTcsMTMgQEAga2VybmVsIHZvaWQgY29udmVydEluZGV4VTE2KAorICAgICBvdXRwdXRb
aWR4XSA9IHZhbHVlOworIH0KKyAKKy1rZXJuZWwgdm9pZCBjb252ZXJ0SW5kZXhVMzIoCistICAg
IHVpbnQgaWR4W1t0aHJlYWRfcG9zaXRpb25faW5fZ3JpZF1dLAorLSAgICBjb25zdGFudCBJbmRl
eENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnNbW2J1ZmZlcigwKV1dLAorLSAgICBjb25zdGFudCB1
Y2hhciAqaW5wdXRbWyBidWZmZXIoMSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJV
bmFsaWduZWQpIF1dLAorLSAgICBjb25zdGFudCB1aW50ICppbnB1dEFsaWduZWRbWyBidWZmZXIo
MSksIGZ1bmN0aW9uX2NvbnN0YW50KGtTb3VyY2VCdWZmZXJBbGlnbmVkKSBdXSwKKy0gICAgZGV2
aWNlIHVpbnQgKm91dHB1dFtbYnVmZmVyKDIpXV0pCisra2VybmVsIHZvaWQgY29udmVydEluZGV4
VTMyKHVpbnQgaWR4IFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RhbnQgSW5kZXhDb252ZXJzaW9uUGFyYW1zICZvcHRpb25zIFtb
YnVmZmVyKDApXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFy
ICppbnB1dAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwgZnVuY3Rp
b25fY29uc3RhbnQoa1NvdXJjZUJ1ZmZlclVuYWxpZ25lZCldXSwKKysgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RhbnQgdWludCAqaW5wdXRBbGlnbmVkCisrICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtbYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrU291cmNlQnVmZmVy
QWxpZ25lZCldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIHVpbnQgKm91
dHB1dCBbW2J1ZmZlcigyKV1dKQorIHsKKyAgICAgQU5HTEVfSURYX0NPTlZFUlNJT05fR1VBUkQo
aWR4LCBvcHRpb25zKTsKKyAKK0BAIC0xNDAsOSArMTQyLDkgQEAga2VybmVsIHZvaWQgZ2VuVHJp
RmFuSW5kaWNlc0Zyb21BcnJheSh1aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlkXV0s
CisgCisgaW5saW5lIHVpbnQgZ2V0SW5kZXhVMzIodWludCBvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludCBpZHgsCistICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQg
dWNoYXIgKmlucHV0VThbW2Z1bmN0aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVOCldXSwK
Ky0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1c2hvcnQgKmlucHV0VTE2W1tmdW5j
dGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KV1dLAorLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMyW1tmdW5jdGlvbl9jb25zdGFudChrVXNlU291
cmNlQnVmZmVyVTMyKV1dKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFy
ICppbnB1dFU4IFtbZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4KV1dLAorKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVzaG9ydCAqaW5wdXRVMTYgW1tmdW5jdGlv
bl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTE2KV1dLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMyIFtbZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJj
ZUJ1ZmZlclUzMildXSkKKyB7CisgICAgIGlmIChrVXNlU291cmNlQnVmZmVyVTgpCisgICAgIHsK
K0BAIC0xNzAsMTMgKzE3MiwxNSBAQCBpbmxpbmUgdWludCBnZXRJbmRleFUzMih1aW50IG9mZnNl
dCwKKyAvLyBOT1RFKGhxbGUpOiB0cmlhbmdsZSBmYW4gaW5kaWNlcyBnZW5lcmF0aW9uIGRvZXNu
J3Qgc3VwcG9ydCBwcmltaXRpdmUgcmVzdGFydC4KKyAvLyBHZW5lcmF0ZSB0cmlhbmdsZSBmYW4g
aW5kaWNlcyBmcm9tIGFuIGluZGljZXMgYnVmZmVyLiBpbmRleENvdW50IG9wdGlvbnMgaW5kaWNh
dGVzIG51bWJlcgorIC8vIG9mIGluZGljZXMgc3RhcnRpbmcgZnJvbSB0aGUgM3JkLgorLWtlcm5l
bCB2b2lkIGdlblRyaUZhbkluZGljZXNGcm9tRWxlbWVudHMoCistICAgIHVpbnQgaWR4W1t0aHJl
YWRfcG9zaXRpb25faW5fZ3JpZF1dLAorLSAgICBjb25zdGFudCBJbmRleENvbnZlcnNpb25QYXJh
bXMgJm9wdGlvbnNbW2J1ZmZlcigwKV1dLAorLSAgICBjb25zdGFudCB1Y2hhciAqaW5wdXRVOFtb
IGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4KSBdXSwKKy0g
ICAgY29uc3RhbnQgdXNob3J0ICppbnB1dFUxNltbIGJ1ZmZlcigxKSwgZnVuY3Rpb25fY29uc3Rh
bnQoa1VzZVNvdXJjZUJ1ZmZlclUxNikgXV0sCistICAgIGNvbnN0YW50IHVpbnQgKmlucHV0VTMy
W1sgYnVmZmVyKDEpLCBmdW5jdGlvbl9jb25zdGFudChrVXNlU291cmNlQnVmZmVyVTMyKSBdXSwK
Ky0gICAgZGV2aWNlIHVpbnQgKm91dHB1dFtbYnVmZmVyKDIpXV0pCisra2VybmVsIHZvaWQgZ2Vu
VHJpRmFuSW5kaWNlc0Zyb21FbGVtZW50cyh1aW50IGlkeCBbW3RocmVhZF9wb3NpdGlvbl9pbl9n
cmlkXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFu
dCBJbmRleENvbnZlcnNpb25QYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSwKKysgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IHVjaGFyICppbnB1dFU4
CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW2J1ZmZlcigxKSwg
ZnVuY3Rpb25fY29uc3RhbnQoa1VzZVNvdXJjZUJ1ZmZlclU4KV1dLAorKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQgdXNob3J0ICppbnB1dFUxNgorKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0
aW9uX2NvbnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMTYpXV0sCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCB1aW50ICppbnB1dFUzMgorKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1tidWZmZXIoMSksIGZ1bmN0aW9uX2Nv
bnN0YW50KGtVc2VTb3VyY2VCdWZmZXJVMzIpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXZpY2UgdWludCAqb3V0cHV0IFtbYnVmZmVyKDIpXV0pCisgewor
ICAgICBBTkdMRV9JRFhfQ09OVkVSU0lPTl9HVUFSRChpZHgsIG9wdGlvbnMpOworIAorZGlmZiAt
LWdpdCBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL2dlbl9taXBtYXAubWV0
YWwgYi9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvc2hhZGVycy9nZW5fbWlwbWFwLm1ldGFs
CitpbmRleCBiM2EzNjc1Li5mMjMzOGIyIDEwMDY0NAorLS0tIGEvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbAorKysrIGIvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL3NoYWRlcnMvZ2VuX21pcG1hcC5tZXRhbAorQEAgLTIzLDggKzIzLDYgQEAg
dXNpbmcgbmFtZXNwYWNlIHJ4OjptdGxfc2hhZGVyOworIAorICNkZWZpbmUgVEVYRUxfTE9BRChp
bmRleCkgZmxvYXQ0KHNSW2luZGV4XSwgc0dbaW5kZXhdLCBzQltpbmRleF0sIHNBW2luZGV4XSkK
KyAKKy0jZGVmaW5lIFRPX0xJTkVBUih0ZXhlbCkgKG9wdGlvbnMuc1JHQiA/IHNSR0J0b0xpbmVh
cih0ZXhlbCkgOiB0ZXhlbCkKKy0KKyAjZGVmaW5lIE9VVF9PRl9CT1VORF9DSEVDSyhlZGdlVmFs
dWUsIHRhcmdldFZhbHVlLCBjb25kaXRpb24pIFwKKyAgICAgKGNvbmRpdGlvbikgPyAoZWRnZVZh
bHVlKSA6ICh0YXJnZXRWYWx1ZSkKKyAKK0BAIC0zMiw3ICszMCw2IEBAIHN0cnVjdCBHZW5NaXBQ
YXJhbXMKKyB7CisgICAgIHVpbnQgc3JjTGV2ZWw7CisgICAgIHVpbnQgbnVtTWlwTGV2ZWxzVG9H
ZW47CistICAgIGJvb2wgc1JHQjsKKyB9OworIAorIC8vIE5PVEUoaHFsZSk6IEZvciBudW1NaXBM
ZXZlbHNUb0dlbiA+IDEsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgdGV4dHVyZSBpcyBwb3dl
ciBvZiB0d28uIElmIGl0CitAQCAtODMsMTAgKzgwLDYgQEAga2VybmVsIHZvaWQgZ2VuZXJhdGUz
RE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwKKyAg
ICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCisgCisgICAgIC8vIFdyaXRlIHRv
IHNoYXJlZCBtZW1vcnkKKy0gICAgaWYgKG9wdGlvbnMuc1JHQikKKy0gICAgeworLSAgICAgICAg
dGV4ZWwxID0gbGluZWFyVG9TUkdCKHRleGVsMSk7CistICAgIH0KKyAgICAgVEVYRUxfU1RPUkUo
bEluZGV4LCB0ZXhlbDEpOworIAorICAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6
bWVtX3RocmVhZGdyb3VwKTsKK0BAIC0xMTksNyArMTEyLDcgQEAga2VybmVsIHZvaWQgZ2VuZXJh
dGUzRE1pcG1hcHModWludCBsSW5kZXggW1t0aHJlYWRfaW5kZXhfaW5fdGhyZWFkZ3JvdXBdXSwK
KyAKKyAgICAgICAgIHRleGVsMSA9ICh0ZXhlbDEgKyB0ZXhlbDIgKyB0ZXhlbDMgKyB0ZXhlbDQg
KyB0ZXhlbDUgKyB0ZXhlbDYgKyB0ZXhlbDcgKyB0ZXhlbDgpIC8gOC4wOworIAorLSAgICAgICAg
ZHN0TWlwMi53cml0ZShUT19MSU5FQVIodGV4ZWwxKSwgZ0luZGljZXMgPj4gMSk7CisrICAgICAg
ICBkc3RNaXAyLndyaXRlKHRleGVsMSwgZ0luZGljZXMgPj4gMSk7CisgCisgICAgICAgICAvLyBX
cml0ZSB0byBzaGFyZWQgbWVtb3J5CisgICAgICAgICBURVhFTF9TVE9SRShsSW5kZXgsIHRleGVs
MSk7CitAQCAtMTY1LDcgKzE1OCw3IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVp
bnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisgCisgICAgICAgICB0
ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsgdGV4
ZWw2ICsgdGV4ZWw3ICsgdGV4ZWw4KSAvIDguMDsKKyAKKy0gICAgICAgIGRzdE1pcDMud3JpdGUo
VE9fTElORUFSKHRleGVsMSksIGdJbmRpY2VzID4+IDIpOworKyAgICAgICAgZHN0TWlwMy53cml0
ZSh0ZXhlbDEsIGdJbmRpY2VzID4+IDIpOworIAorICAgICAgICAgLy8gV3JpdGUgdG8gc2hhcmVk
IG1lbW9yeQorICAgICAgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworQEAgLTIxMSw2
ICsyMDQsMzQ4IEBAIGtlcm5lbCB2b2lkIGdlbmVyYXRlM0RNaXBtYXBzKHVpbnQgbEluZGV4IFtb
dGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisgCisgICAgICAgICB0ZXhlbDEgPSAodGV4
ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0ICsgdGV4ZWw1ICsgdGV4ZWw2ICsgdGV4ZWw3
ICsgdGV4ZWw4KSAvIDguMDsKKyAKKy0gICAgICAgIGRzdE1pcDQud3JpdGUoVE9fTElORUFSKHRl
eGVsMSksIGdJbmRpY2VzID4+IDMpOworKyAgICAgICAgZHN0TWlwNC53cml0ZSh0ZXhlbDEsIGdJ
bmRpY2VzID4+IDMpOworKyAgICB9CisrfQorKworK2tlcm5lbCB2b2lkIGdlbmVyYXRlMkRNaXBt
YXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3RocmVhZGdyb3VwXV0sCisrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNob3J0MiBnSW5kaWNlcyBbW3RocmVhZF9wb3NpdGlv
bl9pbl9ncmlkXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTJkPGZs
b2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUyZDxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMSBbW3RleHR1cmUo
MSldXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQ8ZmxvYXQsIGFj
Y2Vzczo6d3JpdGU+IGRzdE1pcDIgW1t0ZXh0dXJlKDIpXV0sCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4
dHVyZSgzKV1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZDxmbG9h
dCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwNCBbW3RleHR1cmUoNCldXSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIo
MCldXSkKKyt7CisrICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAx
OworKyAgICB1c2hvcnQyIG1pcFNpemUgPQorKyAgICAgICAgdXNob3J0MihzcmNUZXh0dXJlLmdl
dF93aWR0aChmaXJzdE1pcExldmVsKSwgc3JjVGV4dHVyZS5nZXRfaGVpZ2h0KGZpcnN0TWlwTGV2
ZWwpKTsKKysgICAgYm9vbCB2YWxpZFRocmVhZCA9IGdJbmRpY2VzLnggPCBtaXBTaXplLnggJiYg
Z0luZGljZXMueSA8IG1pcFNpemUueTsKKysKKysgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVy
ZVNhbXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0
ZXI6OmxpbmVhcik7CisrCisrICAgIC8vIE5PVEUoaHFsZSk6IFVzZSBzaW1kX2dyb3VwIGZ1bmN0
aW9uIHdoZW5ldmVyIGF2YWlsYWJsZS4gVGhhdCBjb3VsZCBhdm9pZCBiYXJyaWVyIHVzZS4KKysK
KysgICAgLy8gVXNlIHN0cnVjdCBvZiBhcnJheSBzdHlsZSB0byBhdm9pZCBiYW5rIGNvbmZsaWN0
LgorKyAgICB0aHJlYWRncm91cCBmbG9hdCBzUltrVGhyZWFkR3JvdXBYWV07CisrICAgIHRocmVh
ZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZXTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQg
c0Jba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJlYWRncm91cCBmbG9hdCBzQVtrVGhyZWFkR3Jv
dXBYWV07CisrCisrICAgIC8vIC0tLS0tIEZpcnN0IG1pcCBsZXZlbCAtLS0tLS0tCisrICAgIGZs
b2F0NCB0ZXhlbDE7CisrICAgIGlmICh2YWxpZFRocmVhZCkKKysgICAgeworKyAgICAgICAgZmxv
YXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMpICsgZmxvYXQyKDAuNSwgMC41KSkgLyBm
bG9hdDIobWlwU2l6ZSk7CisrICAgICAgICB0ZXhlbDEgICAgICAgICAgID0gc3JjVGV4dHVyZS5z
YW1wbGUodGV4dHVyZVNhbXBsZXIsIHRleENvb3JkcywgbGV2ZWwob3B0aW9ucy5zcmNMZXZlbCkp
OworKworKyAgICAgICAgLy8gV3JpdGUgdG8gdGV4dHVyZQorKyAgICAgICAgZHN0TWlwMS53cml0
ZSh0ZXhlbDEsIGdJbmRpY2VzKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAg
IC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFsbCBzdWJzZXF1ZW50IGNoZWNrcworKyAgICAgICAg
bEluZGV4ID0gMHhmZmZmZmZmZjsKKysgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBM
ZXZlbHNUb0dlbiA9PSAxKQorKyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysg
ICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCisrCisrICAgIC8vIFdyaXRlIHRv
IHNoYXJlZCBtZW1vcnkKKysgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworKworKyAg
ICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKysKKysg
ICAgLy8gSW5kZXggbXVzdCBiZSBldmVuCisrICAgIGlmICgobEluZGV4ICYgMHgwOSkgPT0gMCkg
IC8vIChsSW5kZXggJiBiMDAxMDAxKSA9PSAwCisrICAgIHsKKysgICAgICAgIGJvb2wyIGF0RWRn
ZSA9IGdJbmRpY2VzID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisrCisrICAgICAgICAvLyAo
eCsxLCB5KQorKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhlbDIgd2ls
bCBlcXVhbCB0byB0ZXhlbDE6CisrICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09GX0JPVU5E
X0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAxKSwgYXRFZGdlLngpOworKyAgICAg
ICAgLy8gKHgsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDMgPSBPVVRfT0ZfQk9VTkRfQ0hF
Q0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIGtUaHJlYWRHcm91cFgpLCBhdEVkZ2UueSk7
CisrICAgICAgICAvLyAoeCsxLCB5KzEpCisrICAgICAgICBmbG9hdDQgdGV4ZWw0ID0gT1VUX09G
X0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAoa1RocmVhZEdyb3VwWCAr
IDEpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdl
LnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsg
dGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDIud3JpdGUodGV4ZWwx
LCBnSW5kaWNlcyA+PiAxKTsKKysKKysgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkK
KysgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsKKysgICAgfQorKworKyAgICBp
ZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAyKQorKyAgICB7CisrICAgICAgICByZXR1
cm47CisrICAgIH0KKysKKysgICAgLy8gLS0tLSAzcmQgbWlwIGxldmVsIC0tLS0tLS0tCisrICAg
IHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworKworKyAg
ICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDQKKysgICAgaWYgKChsSW5kZXggJiAweDFi
KSA9PSAwKSAgLy8gKGxJbmRleCAmIGIwMTEwMTEpID09IDAKKysgICAgeworKyAgICAgICAgbWlw
U2l6ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0MigxKSk7CisrICAgICAgICBib29s
MiBhdEVkZ2UgPSAoZ0luZGljZXMgPj4gMSkgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKysK
KysgICAgICAgIC8vICh4KzEsIHkpCisrICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlz
IDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKysgICAgICAgIGZsb2F0NCB0ZXhlbDIg
PSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDIpLCBhdEVk
Z2UueCk7CisrICAgICAgICAvLyAoeCwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9Cisr
ICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXgg
KyAyICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKysgICAgICAgIC8vICh4KzEsIHkrMSkK
KysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhF
TF9MT0FEKGxJbmRleCArICgyICoga1RocmVhZEdyb3VwWCArIDIpKSwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisrCisr
ICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQu
MDsKKysKKysgICAgICAgIGRzdE1pcDMud3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAyKTsKKysK
KysgICAgICAgIC8vIFdyaXRlIHRvIHNoYXJlZCBtZW1vcnkKKysgICAgICAgIFRFWEVMX1NUT1JF
KGxJbmRleCwgdGV4ZWwxKTsKKysgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZl
bHNUb0dlbiA9PSAzKQorKyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAg
Ly8gLS0tLSA0dGggbWlwIGxldmVsIC0tLS0tLS0tCisrICAgIHRocmVhZGdyb3VwX2JhcnJpZXIo
bWVtX2ZsYWdzOjptZW1fdGhyZWFkZ3JvdXApOworKworKyAgICAvLyBJbmRleCBtdXN0IGJlIG11
bHRpcGxlIG9mIDgKKysgICAgaWYgKChsSW5kZXggJiAweDNmKSA9PSAwKSAgLy8gKGxJbmRleCAm
IGIxMTExMTEpID09IDAKKysgICAgeworKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNp
emUgPj4gMSwgdXNob3J0MigxKSk7CisrICAgICAgICBib29sMiBhdEVkZ2UgPSAoZ0luZGljZXMg
Pj4gMikgPT0gKG1pcFNpemUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAgIC8vICh4KzEsIHkp
CisrICAgICAgICAvLyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFs
IHRvIHRleGVsMToKKysgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0so
dGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIDQpLCBhdEVkZ2UueCk7CisrICAgICAgICAvLyAo
eCwgeSsxKQorKyAgICAgICAgZmxvYXQ0IHRleGVsMyA9CisrICAgICAgICAgICAgT1VUX09GX0JP
VU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyA0ICoga1RocmVhZEdyb3VwWCks
IGF0RWRnZS55KTsKKysgICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhl
bDQgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICg0ICog
a1RocmVhZEdyb3VwWCArIDQpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXRFZGdlLnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4
ZWwxICsgdGV4ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1p
cDQud3JpdGUodGV4ZWwxLCBnSW5kaWNlcyA+PiAzKTsKKysgICAgfQorK30KKysKKyt0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGV4dHVyZVR5cGVSLCB0eXBlbmFtZSBUZXh0dXJlVHlwZVc+Cisrc3RhdGlj
IF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSB2b2lkIGdlbmVyYXRlQ3ViZU9yMkRBcnJh
eTJuZEFuZE1vcmVNaXBtYXBzKAorKyAgICB1aW50IGxJbmRleCwKKysgICAgdXNob3J0MyBnSW5k
aWNlcywKKysgICAgVGV4dHVyZVR5cGVSIHNyY1RleHR1cmUsCisrICAgIFRleHR1cmVUeXBlVyBk
c3RNaXAyLAorKyAgICBUZXh0dXJlVHlwZVcgZHN0TWlwMywKKysgICAgVGV4dHVyZVR5cGVXIGRz
dE1pcDQsCisrICAgIHVzaG9ydDIgbWlwMVNpemUsCisrICAgIGZsb2F0NCBtaXAxVGV4ZWwsCisr
ICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzUiwKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQgKnNHLAor
KyAgICB0aHJlYWRncm91cCBmbG9hdCAqc0IsCisrICAgIHRocmVhZGdyb3VwIGZsb2F0ICpzQSwK
KysgICAgY29uc3RhbnQgR2VuTWlwUGFyYW1zICZvcHRpb25zKQorK3sKKysgICAgdXNob3J0MiBt
aXBTaXplID0gbWlwMVNpemU7CisrICAgIGZsb2F0NCB0ZXhlbDEgICA9IG1pcDFUZXhlbDsKKysK
KysgICAgLy8gLS0tLSBTZWNvbmQgbWlwIGxldmVsIC0tLS0tLS0tCisrCisrICAgIC8vIFdyaXRl
IHRvIHNoYXJlZCBtZW1vcnkKKysgICAgVEVYRUxfU1RPUkUobEluZGV4LCB0ZXhlbDEpOworKwor
KyAgICB0aHJlYWRncm91cF9iYXJyaWVyKG1lbV9mbGFnczo6bWVtX3RocmVhZGdyb3VwKTsKKysK
KysgICAgLy8gSW5kZXggbXVzdCBiZSBldmVuCisrICAgIGlmICgobEluZGV4ICYgMHgwOSkgPT0g
MCkgIC8vIChsSW5kZXggJiBiMDAxMDAxKSA9PSAwCisrICAgIHsKKysgICAgICAgIGJvb2wyIGF0
RWRnZSA9IGdJbmRpY2VzLnh5ID09IChtaXBTaXplIC0gdXNob3J0MigxKSk7CisrCisrICAgICAg
ICAvLyAoeCsxLCB5KQorKyAgICAgICAgLy8gSWYgdGhlIHdpZHRoIG9mIG1pcCBpcyAxLCB0ZXhl
bDIgd2lsbCBlcXVhbCB0byB0ZXhlbDE6CisrICAgICAgICBmbG9hdDQgdGV4ZWwyID0gT1VUX09G
X0JPVU5EX0NIRUNLKHRleGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAxKSwgYXRFZGdlLngpOwor
KyAgICAgICAgLy8gKHgsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDMgPSBPVVRfT0ZfQk9V
TkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9MT0FEKGxJbmRleCArIGtUaHJlYWRHcm91cFgpLCBhdEVk
Z2UueSk7CisrICAgICAgICAvLyAoeCsxLCB5KzEpCisrICAgICAgICBmbG9hdDQgdGV4ZWw0ID0g
T1VUX09GX0JPVU5EX0NIRUNLKHRleGVsMiwgVEVYRUxfTE9BRChsSW5kZXggKyAoa1RocmVhZEdy
b3VwWCArIDEpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXRFZGdlLnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4
ZWwyICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDIud3JpdGUo
dGV4ZWwxLCBnSW5kaWNlcy54eSA+PiAxLCBnSW5kaWNlcy56KTsKKysKKysgICAgICAgIC8vIFdy
aXRlIHRvIHNoYXJlZCBtZW1vcnkKKysgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwx
KTsKKysgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAyKQor
KyAgICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgLy8gLS0tLSAzcmQgbWlw
IGxldmVsIC0tLS0tLS0tCisrICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1f
dGhyZWFkZ3JvdXApOworKworKyAgICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDQKKysg
ICAgaWYgKChsSW5kZXggJiAweDFiKSA9PSAwKSAgLy8gKGxJbmRleCAmIGIwMTEwMTEpID09IDAK
KysgICAgeworKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0
MigxKSk7CisrICAgICAgICBib29sMiBhdEVkZ2UgPSAoZ0luZGljZXMueHkgPj4gMSkgPT0gKG1p
cFNpemUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAgIC8vICh4KzEsIHkpCisrICAgICAgICAv
LyBJZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToK
KysgICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhF
TF9MT0FEKGxJbmRleCArIDIpLCBhdEVkZ2UueCk7CisrICAgICAgICAvLyAoeCwgeSsxKQorKyAg
ICAgICAgZmxvYXQ0IHRleGVsMyA9CisrICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRl
eGVsMSwgVEVYRUxfTE9BRChsSW5kZXggKyAyICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsK
KysgICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBPVVRfT0Zf
Qk9VTkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICgyICoga1RocmVhZEdyb3Vw
WCArIDIpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRF
ZGdlLnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwy
ICsgdGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDMud3JpdGUodGV4
ZWwxLCBnSW5kaWNlcy54eSA+PiAyLCBnSW5kaWNlcy56KTsKKysKKysgICAgICAgIC8vIFdyaXRl
IHRvIHNoYXJlZCBtZW1vcnkKKysgICAgICAgIFRFWEVMX1NUT1JFKGxJbmRleCwgdGV4ZWwxKTsK
KyAgICAgfQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAzKQorKyAg
ICB7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgLy8gLS0tLSA0dGggbWlwIGxl
dmVsIC0tLS0tLS0tCisrICAgIHRocmVhZGdyb3VwX2JhcnJpZXIobWVtX2ZsYWdzOjptZW1fdGhy
ZWFkZ3JvdXApOworKworKyAgICAvLyBJbmRleCBtdXN0IGJlIG11bHRpcGxlIG9mIDgKKysgICAg
aWYgKChsSW5kZXggJiAweDNmKSA9PSAwKSAgLy8gKGxJbmRleCAmIGIxMTExMTEpID09IDAKKysg
ICAgeworKyAgICAgICAgbWlwU2l6ZSAgICAgID0gbWF4KG1pcFNpemUgPj4gMSwgdXNob3J0Migx
KSk7CisrICAgICAgICBib29sMiBhdEVkZ2UgPSAoZ0luZGljZXMueHkgPj4gMikgPT0gKG1pcFNp
emUgLSB1c2hvcnQyKDEpKTsKKysKKysgICAgICAgIC8vICh4KzEsIHkpCisrICAgICAgICAvLyBJ
ZiB0aGUgd2lkdGggb2YgbWlwIGlzIDEsIHRleGVsMiB3aWxsIGVxdWFsIHRvIHRleGVsMToKKysg
ICAgICAgIGZsb2F0NCB0ZXhlbDIgPSBPVVRfT0ZfQk9VTkRfQ0hFQ0sodGV4ZWwxLCBURVhFTF9M
T0FEKGxJbmRleCArIDQpLCBhdEVkZ2UueCk7CisrICAgICAgICAvLyAoeCwgeSsxKQorKyAgICAg
ICAgZmxvYXQ0IHRleGVsMyA9CisrICAgICAgICAgICAgT1VUX09GX0JPVU5EX0NIRUNLKHRleGVs
MSwgVEVYRUxfTE9BRChsSW5kZXggKyA0ICoga1RocmVhZEdyb3VwWCksIGF0RWRnZS55KTsKKysg
ICAgICAgIC8vICh4KzEsIHkrMSkKKysgICAgICAgIGZsb2F0NCB0ZXhlbDQgPSBPVVRfT0ZfQk9V
TkRfQ0hFQ0sodGV4ZWwyLCBURVhFTF9MT0FEKGxJbmRleCArICg0ICoga1RocmVhZEdyb3VwWCAr
IDQpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRFZGdl
LnggfCBhdEVkZ2UueSk7CisrCisrICAgICAgICB0ZXhlbDEgPSAodGV4ZWwxICsgdGV4ZWwyICsg
dGV4ZWwzICsgdGV4ZWw0KSAvIDQuMDsKKysKKysgICAgICAgIGRzdE1pcDQud3JpdGUodGV4ZWwx
LCBnSW5kaWNlcy54eSA+PiAzLCBnSW5kaWNlcy56KTsKKysgICAgfQorK30KKysKKytrZXJuZWwg
dm9pZCBnZW5lcmF0ZUN1YmVNaXBtYXBzKHVpbnQgbEluZGV4IFtbdGhyZWFkX2luZGV4X2luX3Ro
cmVhZGdyb3VwXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQzIGdJ
bmRpY2VzIFtbdGhyZWFkX3Bvc2l0aW9uX2luX2dyaWRdXSwKKysgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVjdWJlPGZsb2F0PiBzcmNUZXh0dXJlIFtbdGV4dHVyZSgwKV1d
LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFj
Y2Vzczo6d3JpdGU+IGRzdE1pcDEgW1t0ZXh0dXJlKDEpXV0sCisrICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlY3ViZTxmbG9hdCwgYWNjZXNzOjp3cml0ZT4gZHN0TWlwMiBb
W3RleHR1cmUoMildXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVj
dWJlPGZsb2F0LCBhY2Nlc3M6OndyaXRlPiBkc3RNaXAzIFtbdGV4dHVyZSgzKV1dLAorKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZWN1YmU8ZmxvYXQsIGFjY2Vzczo6d3Jp
dGU+IGRzdE1pcDQgW1t0ZXh0dXJlKDQpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSkKKyt7Cisr
ICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAxOworKyAgICB1c2hv
cnQyIG1pcDFTaXplID0KKysgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lkdGgoZmly
c3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7CisrICAg
IGJvb2wgdmFsaWRUaHJlYWQgPSBnSW5kaWNlcy54IDwgbWlwMVNpemUueCAmJiBnSW5kaWNlcy55
IDwgbWlwMVNpemUueTsKKysKKysgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNhbXBsZXIo
bWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6OmxpbmVh
cik7CisrCisrICAgIC8vIC0tLS0tIEZpcnN0IG1pcCBsZXZlbCAtLS0tLS0tCisrICAgIGZsb2F0
NCBtaXAxVGV4ZWw7CisrICAgIGlmICh2YWxpZFRocmVhZCkKKysgICAgeworKyAgICAgICAgZmxv
YXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwgMC41KSkg
LyBmbG9hdDIobWlwMVNpemUpOworKyAgICAgICAgbWlwMVRleGVsID0gc3JjVGV4dHVyZS5zYW1w
bGUodGV4dHVyZVNhbXBsZXIsIGN1YmVUZXhjb29yZHModGV4Q29vcmRzLCBpbnQoZ0luZGljZXMu
eikpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwob3B0aW9u
cy5zcmNMZXZlbCkpOworKworKyAgICAgICAgLy8gV3JpdGUgdG8gdGV4dHVyZQorKyAgICAgICAg
ZHN0TWlwMS53cml0ZShtaXAxVGV4ZWwsIGdJbmRpY2VzLnh5LCBnSW5kaWNlcy56KTsKKysgICAg
fQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIC8vIFRoaXMgd2lsbCBpbnZhbGlkYXRlIGFs
bCBzdWJzZXF1ZW50IGNoZWNrcworKyAgICAgICAgbEluZGV4ID0gMHhmZmZmZmZmZjsKKysgICAg
fQorKworKyAgICBpZiAob3B0aW9ucy5udW1NaXBMZXZlbHNUb0dlbiA9PSAxKQorKyAgICB7Cisr
ICAgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgLy8gVXNlIHN0cnVjdCBvZiBhcnJheSBz
dHlsZSB0byBhdm9pZCBiYW5rIGNvbmZsaWN0LgorKyAgICB0aHJlYWRncm91cCBmbG9hdCBzUltr
VGhyZWFkR3JvdXBYWV07CisrICAgIHRocmVhZGdyb3VwIGZsb2F0IHNHW2tUaHJlYWRHcm91cFhZ
XTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQgc0Jba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJl
YWRncm91cCBmbG9hdCBzQVtrVGhyZWFkR3JvdXBYWV07CisrCisrICAgIGdlbmVyYXRlQ3ViZU9y
MkRBcnJheTJuZEFuZE1vcmVNaXBtYXBzKGxJbmRleCwgZ0luZGljZXMsIHNyY1RleHR1cmUsIGRz
dE1pcDIsIGRzdE1pcDMsIGRzdE1pcDQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1pcDFTaXplLCBtaXAxVGV4ZWwsIHNSLCBzRywgc0IsIHNBLCBvcHRpb25z
KTsKKyt9CisrCisra2VybmVsIHZvaWQgZ2VuZXJhdGUyREFycmF5TWlwbWFwcyh1aW50IGxJbmRl
eCBbW3RocmVhZF9pbmRleF9pbl90aHJlYWRncm91cF1dLAorKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNob3J0MyBnSW5kaWNlcyBbW3RocmVhZF9wb3NpdGlvbl9pbl9ncmlk
XV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8
ZmxvYXQ+IHNyY1RleHR1cmUgW1t0ZXh0dXJlKDApXV0sCisrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1p
cDEgW1t0ZXh0dXJlKDEpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDIgW1t0ZXh0dXJlKDIp
XV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8
ZmxvYXQsIGFjY2Vzczo6d3JpdGU+IGRzdE1pcDMgW1t0ZXh0dXJlKDMpXV0sCisrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRfYXJyYXk8ZmxvYXQsIGFjY2Vzczo6
d3JpdGU+IGRzdE1pcDQgW1t0ZXh0dXJlKDQpXV0sCisrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudCBHZW5NaXBQYXJhbXMgJm9wdGlvbnMgW1tidWZmZXIoMCldXSkK
Kyt7CisrICAgIHVpbnQgZmlyc3RNaXBMZXZlbCA9IG9wdGlvbnMuc3JjTGV2ZWwgKyAxOworKyAg
ICB1c2hvcnQyIG1pcDFTaXplID0KKysgICAgICAgIHVzaG9ydDIoc3JjVGV4dHVyZS5nZXRfd2lk
dGgoZmlyc3RNaXBMZXZlbCksIHNyY1RleHR1cmUuZ2V0X2hlaWdodChmaXJzdE1pcExldmVsKSk7
CisrICAgIGJvb2wgdmFsaWRUaHJlYWQgPSBnSW5kaWNlcy54IDwgbWlwMVNpemUueCAmJiBnSW5k
aWNlcy55IDwgbWlwMVNpemUueTsKKysKKysgICAgY29uc3RleHByIHNhbXBsZXIgdGV4dHVyZVNh
bXBsZXIobWFnX2ZpbHRlcjo6bGluZWFyLCBtaW5fZmlsdGVyOjpsaW5lYXIsIG1pcF9maWx0ZXI6
OmxpbmVhcik7CisrCisrICAgIC8vIC0tLS0tIEZpcnN0IG1pcCBsZXZlbCAtLS0tLS0tCisrICAg
IGZsb2F0NCBtaXAxVGV4ZWw7CisrICAgIGlmICh2YWxpZFRocmVhZCkKKysgICAgeworKyAgICAg
ICAgZmxvYXQyIHRleENvb3JkcyA9IChmbG9hdDIoZ0luZGljZXMueHkpICsgZmxvYXQyKDAuNSwg
MC41KSkgLyBmbG9hdDIobWlwMVNpemUpOworKyAgICAgICAgbWlwMVRleGVsID0KKysgICAgICAg
ICAgICBzcmNUZXh0dXJlLnNhbXBsZSh0ZXh0dXJlU2FtcGxlciwgdGV4Q29vcmRzLCBnSW5kaWNl
cy56LCBsZXZlbChvcHRpb25zLnNyY0xldmVsKSk7CisrCisrICAgICAgICAvLyBXcml0ZSB0byB0
ZXh0dXJlCisrICAgICAgICBkc3RNaXAxLndyaXRlKG1pcDFUZXhlbCwgZ0luZGljZXMueHksIGdJ
bmRpY2VzLnopOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgICAgLy8gVGhpcyB3
aWxsIGludmFsaWRhdGUgYWxsIHN1YnNlcXVlbnQgY2hlY2tzCisrICAgICAgICBsSW5kZXggPSAw
eGZmZmZmZmZmOworKyAgICB9CisrCisrICAgIGlmIChvcHRpb25zLm51bU1pcExldmVsc1RvR2Vu
ID09IDEpCisrICAgIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICAvLyBVc2Ug
c3RydWN0IG9mIGFycmF5IHN0eWxlIHRvIGF2b2lkIGJhbmsgY29uZmxpY3QuCisrICAgIHRocmVh
ZGdyb3VwIGZsb2F0IHNSW2tUaHJlYWRHcm91cFhZXTsKKysgICAgdGhyZWFkZ3JvdXAgZmxvYXQg
c0dba1RocmVhZEdyb3VwWFldOworKyAgICB0aHJlYWRncm91cCBmbG9hdCBzQltrVGhyZWFkR3Jv
dXBYWV07CisrICAgIHRocmVhZGdyb3VwIGZsb2F0IHNBW2tUaHJlYWRHcm91cFhZXTsKKysKKysg
ICAgZ2VuZXJhdGVDdWJlT3IyREFycmF5Mm5kQW5kTW9yZU1pcG1hcHMobEluZGV4LCBnSW5kaWNl
cywgc3JjVGV4dHVyZSwgZHN0TWlwMiwgZHN0TWlwMywgZHN0TWlwNCwKKysgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlwMVNpemUsIG1pcDFUZXhlbCwgc1IsIHNH
LCBzQiwgc0EsIG9wdGlvbnMpOworIH0KK2RpZmYgLS1naXQgYS9zcmMvbGliQU5HTEUvcmVuZGVy
ZXIvbWV0YWwvc2hhZGVycy92aXNpYmlsaXR5Lm1ldGFsIGIvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL3NoYWRlcnMvdmlzaWJpbGl0eS5tZXRhbAoraW5kZXggOTA1YzE5Ni4uYWQ1ODYwZiAx
MDA2NDQKKy0tLSBhL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL3Zpc2liaWxp
dHkubWV0YWwKKysrKyBiL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9zaGFkZXJzL3Zpc2li
aWxpdHkubWV0YWwKK0BAIC02LDcgKzYsNyBAQAorIAorICNpbmNsdWRlICJjb21tb24uaCIKKyAK
Ky1jb25zdGFudCBib29sIGtDb21iaW5lV2l0aEV4aXN0aW5nUmVzdWx0IFtbZnVuY3Rpb25fY29u
c3RhbnQoMTAwMCldXTsKKytjb25zdGFudCBib29sIGtDb21iaW5lV2l0aEV4aXN0aW5nUmVzdWx0
IFtbZnVuY3Rpb25fY29uc3RhbnQoMSldXTsKKyAKKyAvLyBDb21iaW5lIHRoZSB2aXNpYmlsaXR5
IHJlc3VsdCBvZiBjdXJyZW50IHJlbmRlciBwYXNzIHdpdGggcHJldmlvdXMgdmFsdWUgZnJvbSBw
cmV2aW91cyByZW5kZXIKKyAvLyBwYXNzCitkaWZmIC0tZ2l0IGEvc3JjL2xpYkdMRVN2Mi9lbnRy
eV9wb2ludHNfZWdsLmNwcCBiL3NyYy9saWJHTEVTdjIvZW50cnlfcG9pbnRzX2VnbC5jcHAKK2lu
ZGV4IDc1NWJkNjEuLjdkNWFjNTggMTAwNjQ0CistLS0gYS9zcmMvbGliR0xFU3YyL2VudHJ5X3Bv
aW50c19lZ2wuY3BwCisrKysgYi9zcmMvbGliR0xFU3YyL2VudHJ5X3BvaW50c19lZ2wuY3BwCitA
QCAtNDI4LDggKzQyOCw2IEBAIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgRUdMX0Rlc3Ryb3lDb250
ZXh0KEVHTERpc3BsYXkgZHB5LCBFR0xDb250ZXh0IGN0eCkKKyAKKyAgICAgaWYgKGNvbnRleHRX
YXNDdXJyZW50KQorICAgICB7CistICAgICAgICBBTkdMRV9FR0xfVFJZX1JFVFVSTih0aHJlYWQs
IGRpc3BsYXktPm1ha2VDdXJyZW50KGNvbnRleHQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIp
LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVnbERlc3Ryb3lDb250ZXh0IiwgR2V0
Q29udGV4dElmVmFsaWQoZGlzcGxheSwgY29udGV4dCksIEVHTF9GQUxTRSk7CisgICAgICAgICBT
ZXRDb250ZXh0Q3VycmVudCh0aHJlYWQsIG51bGxwdHIpOworICAgICB9CisgCitAQCAtNDY2LDgg
KzQ2NCw4IEBAIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgRUdMX01ha2VDdXJyZW50KEVHTERpc3Bs
YXkgZHB5LAorICAgICAvLyBPbmx5IGNhbGwgbWFrZUN1cnJlbnQgaWYgdGhlIGNvbnRleHQgb3Ig
c3VyZmFjZXMgaGF2ZSBjaGFuZ2VkLgorICAgICBpZiAocHJldmlvdXNEcmF3ICE9IGRyYXdTdXJm
YWNlIHx8IHByZXZpb3VzUmVhZCAhPSByZWFkU3VyZmFjZSB8fCBwcmV2aW91c0NvbnRleHQgIT0g
Y29udGV4dCkKKyAgICAgeworLSAgICAgICAgQU5HTEVfRUdMX1RSWV9SRVRVUk4oCistICAgICAg
ICAgICAgdGhyZWFkLCBkaXNwbGF5LT5tYWtlQ3VycmVudChwcmV2aW91c0NvbnRleHQsIGRyYXdT
dXJmYWNlLCByZWFkU3VyZmFjZSwgY29udGV4dCksCisrICAgICAgICBBTkdMRV9FR0xfVFJZX1JF
VFVSTih0aHJlYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5LT5tYWtl
Q3VycmVudCh0aHJlYWQsIGRyYXdTdXJmYWNlLCByZWFkU3VyZmFjZSwgY29udGV4dCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZWdsTWFrZUN1cnJlbnQiLCBHZXRDb250ZXh0SWZW
YWxpZChkaXNwbGF5LCBjb250ZXh0KSwgRUdMX0ZBTFNFKTsKKyAKKyAgICAgICAgIFNldENvbnRl
eHRDdXJyZW50KHRocmVhZCwgY29udGV4dCk7CitAQCAtODE4LDggKzgxNiw4IEBAIEVHTEJvb2xl
YW4gRUdMQVBJRU5UUlkgRUdMX1JlbGVhc2VUaHJlYWQodm9pZCkKKyAgICAgICAgIGlmIChwcmV2
aW91c0RyYXcgIT0gRUdMX05PX1NVUkZBQ0UgfHwgcHJldmlvdXNSZWFkICE9IEVHTF9OT19TVVJG
QUNFIHx8CisgICAgICAgICAgICAgcHJldmlvdXNDb250ZXh0ICE9IEVHTF9OT19DT05URVhUKQor
ICAgICAgICAgeworLSAgICAgICAgICAgIEFOR0xFX0VHTF9UUllfUkVUVVJOKAorLSAgICAgICAg
ICAgICAgICB0aHJlYWQsIHByZXZpb3VzRGlzcGxheS0+bWFrZUN1cnJlbnQocHJldmlvdXNDb250
ZXh0LCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKSwKKysgICAgICAgICAgICBBTkdMRV9FR0xf
VFJZX1JFVFVSTih0aHJlYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl
dmlvdXNEaXNwbGF5LT5tYWtlQ3VycmVudCh0aHJlYWQsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlZ2xSZWxlYXNlVGhyZWFk
IiwgbnVsbHB0ciwgRUdMX0ZBTFNFKTsKKyAgICAgICAgIH0KKyAgICAgICAgIEFOR0xFX0VHTF9U
UllfUkVUVVJOKHRocmVhZCwgcHJldmlvdXNEaXNwbGF5LT5yZWxlYXNlVGhyZWFkKCksICJlZ2xS
ZWxlYXNlVGhyZWFkIiwKK2RpZmYgLS1naXQgYS9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBf
ZWdsX3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9l
Z2xfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBz
cmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZWdsX3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorcmVu
YW1lIHRvIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9lZ2xfVGVzdEV4cGVjdGF0aW9ucwor
ZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMl90ZXN0X2V4cGVj
dGF0aW9ucy50eHQgYi9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczJfVGVzdEV4cGVj
dGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMvZGVx
cF9zdXBwb3J0L2RlcXBfZ2xlczJfdGVzdF9leHBlY3RhdGlvbnMudHh0CityZW5hbWUgdG8gc3Jj
L3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMyX1Rlc3RFeHBlY3RhdGlvbnMKK2RpZmYgLS1n
aXQgYS9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczMxX3Rlc3RfZXhwZWN0YXRpb25z
LnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfVGVzdEV4cGVjdGF0aW9u
cworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMvZGVxcF9zdXBw
b3J0L2RlcXBfZ2xlczMxX3Rlc3RfZXhwZWN0YXRpb25zLnR4dAorcmVuYW1lIHRvIHNyYy90ZXN0
cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfVGVzdEV4cGVjdGF0aW9ucworZGlmZiAtLWdpdCBh
L3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfcm90YXRlX3Rlc3RfZXhwZWN0YXRp
b25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzMzFfcm90YXRlX1Rlc3RF
eHBlY3RhdGlvbnMKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gc3JjL3Rlc3Rz
L2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzMV9yb3RhdGVfdGVzdF9leHBlY3RhdGlvbnMudHh0City
ZW5hbWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzMV9yb3RhdGVfVGVzdEV4
cGVjdGF0aW9ucworZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVz
M190ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xl
czNfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBz
cmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczNfdGVzdF9leHBlY3RhdGlvbnMudHh0City
ZW5hbWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2dsZXMzX1Rlc3RFeHBlY3RhdGlv
bnMKK2RpZmYgLS1naXQgYS9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczNfcm90YXRl
X3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL3NyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVz
M19yb3RhdGVfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUg
ZnJvbSBzcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfZ2xlczNfcm90YXRlX3Rlc3RfZXhwZWN0
YXRpb25zLnR4dAorcmVuYW1lIHRvIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9nbGVzM19y
b3RhdGVfVGVzdEV4cGVjdGF0aW9ucworZGlmZiAtLWdpdCBhL3NyYy90ZXN0cy9kZXFwX3N1cHBv
cnQvZGVxcF9raHJfZ2xlczJfdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvc3JjL3Rlc3RzL2RlcXBf
c3VwcG9ydC9kZXFwX2tocl9nbGVzMl9UZXN0RXhwZWN0YXRpb25zCitzaW1pbGFyaXR5IGluZGV4
IDEwMCUKK3JlbmFtZSBmcm9tIHNyYy90ZXN0cy9kZXFwX3N1cHBvcnQvZGVxcF9raHJfZ2xlczJf
dGVzdF9leHBlY3RhdGlvbnMudHh0CityZW5hbWUgdG8gc3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9k
ZXFwX2tocl9nbGVzMl9UZXN0RXhwZWN0YXRpb25zCitkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RzL2Rl
cXBfc3VwcG9ydC9kZXFwX2tocl9nbGVzMzFfdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvc3JjL3Rl
c3RzL2RlcXBfc3VwcG9ydC9kZXFwX2tocl9nbGVzMzFfVGVzdEV4cGVjdGF0aW9ucworc2ltaWxh
cml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBzcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBf
a2hyX2dsZXMzMV90ZXN0X2V4cGVjdGF0aW9ucy50eHQKK3JlbmFtZSB0byBzcmMvdGVzdHMvZGVx
cF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzMV9UZXN0RXhwZWN0YXRpb25zCitkaWZmIC0tZ2l0IGEv
c3JjL3Rlc3RzL2RlcXBfc3VwcG9ydC9kZXFwX2tocl9nbGVzM190ZXN0X2V4cGVjdGF0aW9ucy50
eHQgYi9zcmMvdGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzX1Rlc3RFeHBlY3RhdGlv
bnMKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gc3JjL3Rlc3RzL2RlcXBfc3Vw
cG9ydC9kZXFwX2tocl9nbGVzM190ZXN0X2V4cGVjdGF0aW9ucy50eHQKK3JlbmFtZSB0byBzcmMv
dGVzdHMvZGVxcF9zdXBwb3J0L2RlcXBfa2hyX2dsZXMzX1Rlc3RFeHBlY3RhdGlvbnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5n
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5o
CmluZGV4IGUxMGQxMTJjODU1ZTAzZjY1Y2IyNDNmZjE2YzNkOWIyZWMwOWY2ODEuLjZmNmE3MmI5
YWI2ZGQ3MjI4N2Q4MmQ2Y2ZiMjA4MTEyMjdmNmE3NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaApAQCAtNzMsNiArNzMs
OSBAQCBlbnVtIFNoU2hhZGVyT3V0cHV0CiAgICAgLy8gT3V0cHV0IHNwZWNpYWxpemVkIEdMU0wg
dG8gYmUgZmVkIHRvIGdsc2xhbmcgZm9yIFZ1bGthbiBTUElSIHRvIGJlIGNyb3NzIGNvbXBpbGVk
IHRvIE1ldGFsCiAgICAgLy8gbGF0ZXIuCiAgICAgU0hfR0xTTF9NRVRBTF9PVVRQVVQgPSAweDhC
NEMsCisKKyAgICAvLyBPdXRwdXQgZm9yIE1TTAorICAgIFNIX01TTF9NRVRBTF9PVVRQVVQgPSAw
eDhCNEQsCiB9OwogCiAvLyBDb21waWxlIG9wdGlvbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL3BsYXRmb3JtL0ZlYXR1cmVzTXRsLmgKaW5kZXggZmU1ZThh
YmRmMDYwNDFkNmMxM2I4MDNmYmJmYTM4OGQyOGNjZjVhMy4uOWEwYmVlMDM3YTg5ZjMxYzhkODU3
MWE1YzAxMzJjZjdmMDlmYjFhOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
aW5jbHVkZS9wbGF0Zm9ybS9GZWF0dXJlc010bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2luY2x1ZGUvcGxhdGZvcm0vRmVhdHVyZXNNdGwuaApAQCAtMjcsNyArMjcsNyBAQCBzdHJ1
Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJlU2V0QmFzZQogICAgICAgICAiVGhlIHJlbmRlcmVyIHN1
cHBvcnRzIGRlcHRoIHRleHR1cmUncyBmaWx0ZXJpbmcgb3RoZXIgdGhhbiBuZWFyZXN0IiwgJm1l
bWJlcnN9OwogCiAgICAgLy8gU3VwcG9ydCBleHBsaWNpdCBtZW1vcnkgYmFycmllcgotICAgIEZl
YXR1cmUgaGFzRXhwbGljaXRNZW1CYXJyaWVyID0geyJoYXNfZXhwbGljaXRfbWVtX2JhcnJpZXJf
bXRsIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgIEZlYXR1cmUgaGFzRXhw
bGljaXRNZW1CYXJyaWVyID0geyJoYXNfZXhwbGljaXRfbWVtX2JhcnJpZXIiLCBGZWF0dXJlQ2F0
ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBleHBsaWNpdCBtZW1vcnkgYmFycmllciIsICZtZW1i
ZXJzfTsKIAogICAgIC8vIFNvbWUgcmVuZGVyZXIgY2FuIGJyZWFrIHJlbmRlciBwYXNzIGNoZWFw
bHksIGkuZS4gZGVza3RvcCBjbGFzcyBHUFVzLgpAQCAtNDAsNyArNDAsNyBAQCBzdHJ1Y3QgRmVh
dHVyZXNNdGwgOiBGZWF0dXJlU2V0QmFzZQogICAgICAgICAiVGhlIHJlbmRlcmVyIHN1cHBvcnRz
IG5vbiB1bmlmb3JtIGNvbXB1dGUgc2hhZGVyIGRpc3BhdGNoJ3MgZ3JvdXAgc2l6ZSIsICZtZW1i
ZXJzfTsKIAogICAgIC8vIGZyYWdtZW50IHN0ZW5jaWwgb3V0cHV0IHN1cHBvcnQKLSAgICBGZWF0
dXJlIGhhc1N0ZW5jaWxPdXRwdXQgPSB7Imhhc19zaGFkZXJfc3RlbmNpbF9vdXRwdXQiLCBGZWF0
dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgRmVhdHVyZSBoYXNTdGVuY2lsT3V0cHV0
ID0geyJoYXNfc3RlbmNpbF9vdXRwdXQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMg
c3RlbmNpbCBvdXRwdXQgZnJvbSBmcmFnbWVudCBzaGFkZXIiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmbWVtYmVyc307CiAKQEAgLTU5LDYgKzU5LDEwIEBAIHN0cnVjdCBGZWF0
dXJlc010bCA6IEZlYXR1cmVTZXRCYXNlCiAgICAgRmVhdHVyZSBoYXNFdmVudHMgPSB7Imhhc19t
dGxfZXZlbnRzIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgTVRMKFNoYXJlZClFdmVudCIsICZt
ZW1iZXJzfTsKIAorICAgIEZlYXR1cmUgYWxsb3dJbmxpbmVDb25zdFZlcnRleERhdGEgPSB7Cisg
ICAgICAgICJhbGxvd19pbmxpbmVfY29uc3RfdmVydGV4X2RhdGEiLCBGZWF0dXJlQ2F0ZWdvcnk6
Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgdXNpbmcgaW5s
aW5lIGNvbnN0YW50IGRhdGEgZm9yIHNtYWxsIGNsaWVudCB2ZXJ0ZXggZGF0YSIsICZtZW1iZXJz
fTsKKwogICAgIC8vIE9uIG1hY29zLCBzZXBhcmF0ZSBkZXB0aCAmIHN0ZW5jaWwgYnVmZmVycyBh
cmUgbm90IHN1cHByb3RlZC4gSG93ZXZlciwgb24gaU9TIGRldmljZXMsCiAgICAgLy8gdGhleSBh
cmUgc3VwcHJvdGVkOgogICAgIEZlYXR1cmUgYWxsb3dTZXBhcmF0ZWREZXB0aFN0ZW5jaWxCdWZm
ZXJzID0gewpAQCAtNjcsNiArNzEsMjEgQEAgc3RydWN0IEZlYXR1cmVzTXRsIDogRmVhdHVyZVNl
dEJhc2UKICAgICAgICAgIndoZXJlYXMgb3RoZXJzIHN1Y2ggYXMgbWFjT1MgZG9uJ3QiLAogICAg
ICAgICAmbWVtYmVyc307CiAKKyAgICBGZWF0dXJlIGFsbG93UnVudGltZVNhbXBsZXJDb21wYXJl
TW9kZSA9IHsKKyAgICAgICAgImFsbG93X3J1bnRpbWVfc2FtcGxlcl9jb21wYXJlX21vZGUiLCBG
ZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICJUaGUgcmVuZGVyZXIgc3Vw
cG9ydHMgY2hhbmdpbmcgc2FtcGxlcidzIGNvbXBhcmUgbW9kZSBvdXRzaWRlIHNoYWRlcnMiLCAm
bWVtYmVyc307CisKKyAgICBGZWF0dXJlIGFsbG93U2FtcGxlckNvbXBhcmVHcmFkaWVudCA9IHsK
KyAgICAgICAgImFsbG93X3NhbXBsZXJfY29tcGFyZV9ncmFkaWVudCIsIEZlYXR1cmVDYXRlZ29y
eTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBzYW1wbGVf
Y29tcGFyZSB3aXRoIGdyYWRpZW50cyIsICZtZW1iZXJzfTsKKworICAgIEZlYXR1cmUgYWxsb3dT
YW1wbGVyQ29tcGFyZUxvZCA9IHsiYWxsb3dfc2FtcGxlcl9jb21wYXJlX2xvZCIsIEZlYXR1cmVD
YXRlZ29yeTo6TWV0YWxGZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBzYW1wbGVfY29tcGFyZSB3aXRoIGxvZCIsICZt
ZW1iZXJzfTsKKworICAgIEZlYXR1cmUgYWxsb3dCdWZmZXJSZWFkV3JpdGUgPSB7ImFsbG93X2J1
ZmZlcl9yZWFkX3dyaXRlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSByZW5kZXJlciBzdXBwb3J0cyBidWZm
ZXIgcmVhZCAmIHdyaXRlIGluIHRoZSBzYW1lIHNoYWRlciIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmbWVtYmVyc307CisKICAgICBGZWF0dXJlIGFsbG93TXVsdGlzYW1w
bGVTdG9yZUFuZFJlc29sdmUgPSB7CiAgICAgICAgICJhbGxvd19tc2FhX3N0b3JlX2FuZF9yZXNv
bHZlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAogICAgICAgICAiVGhlIHJlbmRl
cmVyIHN1cHBvcnRzIE1TQUEgc3RvcmUgYW5kIHJlc29sdmUgaW4gdGhlIHNhbWUgcGFzcyIsICZt
ZW1iZXJzfTsKQEAgLTc1LDE0ICs5NCwyNyBAQCBzdHJ1Y3QgRmVhdHVyZXNNdGwgOiBGZWF0dXJl
U2V0QmFzZQogICAgICAgICAiZ2VuX211bHRpcGxlX21pcHNfcGVyX3Bhc3MiLCBGZWF0dXJlQ2F0
ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCiAgICAgICAgICJUaGUgcmVuZGVyZXIgc3VwcG9ydHMgZ2Vu
ZXJhdGluZyBtdWx0aXBsZSBtaXBtYXBzIHBlciBwYXNzIiwgJm1lbWJlcnN9OwogCisgICAgRmVh
dHVyZSBmb3JjZUQyNFM4QXNVbnN1cHBvcnRlZCA9IHsiZm9yY2VfZDI0czhfYXNfdW5zdXBwb3J0
ZWQiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiRm9yY2UgRGVwdGgyNFN0ZW5jaWw4IGZvcm1hdCBhcyB1bnN1
cHBvcnRlZC4iLCAmbWVtYmVyc307CisKKyAgICBGZWF0dXJlIGJyZWFrUmVuZGVyUGFzc0lzQ2hl
YXAgPSB7ImJyZWFrX3JlbmRlcl9wYXNzX2lzX2NoZWFwIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRh
bEZlYXR1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnJlYWtp
bmcgcmVuZGVyIHBhc3MgaXMgYSBjaGVhcCBvcGVyYXRpb24iLCAmbWVtYmVyc307CisKICAgICBG
ZWF0dXJlIGZvcmNlQnVmZmVyR1BVU3RvcmFnZSA9IHsKLSAgICAgICAgImZvcmNlX2J1ZmZlcl9n
cHVfc3RvcmFnZV9tdGwiLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1ldGFsRmVhdHVyZXMsCi0gICAgICAg
ICJPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBib3RoIGJ1ZmZlcidzIG1lbW9yeSBhbGxvY2F0aW9u
IG9uIEdQVSBhbmQgc2hhcmVkIG1lbW9yeSAoc3VjaCBhcyAiCi0gICAgICAgICJtYWNPUyksIGZv
cmNlIHVzaW5nIEdQVSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYnVmZmVycy4iLAorICAgICAgICAi
Zm9yY2VfYnVmZmVyX2dwdV9zdG9yYWdlIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVz
LAorICAgICAgICAiT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgYm90aCBidWZmZXInIG1lbW9yeSBh
bGxvY2F0aW9uIG9uIEdQVSBhbmQgc2hhcmVkIG1lbW9yeSAoc3VjaCBhcyAiCisgICAgICAgICJt
YWNPUyksIGZvcmNlIHVzaW5nIEdQVSBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYnVmZmVycyBldmVy
eXRpbWUgb3Igbm90LiIsCiAgICAgICAgICZtZW1iZXJzfTsKIAotICAgIEZlYXR1cmUgZm9yY2VE
MjRTOEFzVW5zdXBwb3J0ZWQgPSB7ImZvcmNlX2QyNHM4X2FzX3Vuc3VwcG9ydGVkIiwgRmVhdHVy
ZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkZvcmNlIERlcHRoMjRTdGVuY2lsOCBmb3JtYXQgYXMgdW5zdXBwb3J0ZWQuIiwg
Jm1lbWJlcnN9OworICAgIEZlYXR1cmUgZm9yY2VOb25DU0Jhc2VNaXBtYXBHZW5lcmF0aW9uID0g
eworICAgICAgICAiZm9yY2Vfbm9uX2NzX21pcG1hcF9nZW4iLCBGZWF0dXJlQ2F0ZWdvcnk6Ok1l
dGFsRmVhdHVyZXMsCisgICAgICAgICJUdXJuIHRoaXMgZmVhdHVyZSBvbiB0byBkaXNhbGxvdyBD
b21wdXRlIFNoYWRlciBiYXNlZCBtaXBtYXAgZ2VuZXJhdGlvbi4gQ29tcHV0ZSBTaGFkZXIgIgor
ICAgICAgICAiYmFzZWQgbWlwbWFwIGdlbmVyYXRpb24gbWlnaHQgY2F1c2UgR1BVIGhhbmcgb24g
c29tZSBvbGRlciBpT1MgZGV2aWNlcy4iLAorICAgICAgICAmbWVtYmVyc307CisKKyAgICBGZWF0
dXJlIGVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjayA9IHsKKyAgICAgICAgImVtdWxhdGVfdHJhbnNm
b3JtX2ZlZWRiYWNrIiwgRmVhdHVyZUNhdGVnb3J5OjpNZXRhbEZlYXR1cmVzLAorICAgICAgICAi
VHVybiB0aGlzIG9uIHRvIGFsbG93IHRyYW5zZm9ybSBmZWVkYmFjayBpbiBNZXRhbCB1c2luZyBh
IDItcGFzcyBWUyBmb3IgR0xFUzMuIiwgJm1lbWJlcnN9OwogfTsKIAogfSAgLy8gbmFtZXNwYWNl
IGFuZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bv
b2xBbGxvYy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xBbGxv
Yy5jcHAKaW5kZXggMjdkZDkzMDVhOGI2MzRlMzM5OTM3ODMwNzkzNWY4YTJiOWQ3NjJiZi4uM2Jk
Y2MzMDBhMWQ2ZTY3NzVjMWQyOGMyMTg3Mjk3MGZhZWY2OTU0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29sQWxsb2MuY3BwCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmNwcApAQCAtMzM1LDcgKzMzNSw3
IEBAIHZvaWQgUG9vbEFsbG9jYXRvcjo6dW5sb2NrKCkKIHZvaWQgQWxsb2NhdGlvbjo6Y2hlY2tB
bGxvY0xpc3QoKSBjb25zdAogewogICAgIGZvciAoY29uc3QgQWxsb2NhdGlvbiAqYWxsb2MgPSB0
aGlzOyBhbGxvYyAhPSAwOyBhbGxvYyA9IGFsbG9jLT5tUHJldkFsbG9jKQotICAgICAgICBhbGxv
Yy0+Y2hlY2soKTsKKyAgICAgICAgYWxsb2MtPmNoZWNrQWxsb2MoKTsKIH0KIAogfSAgLy8gbmFt
ZXNwYWNlIGFuZ2xlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL1Bvb2xBbGxvYy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9Qb29s
QWxsb2MuaAppbmRleCA2OTI5OTJjNDM0M2Q4Y2EwMjNiYjBlNzQzZTViNDg5ZjYzYmMxYzc4Li5j
ZDI2NmEwM2JjNTYyMWI4NzIyOWM1YWU3ZDdkYTBiNjI5ZjliNjY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Bvb2xBbGxvYy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUG9vbEFsbG9jLmgKQEAgLTY1LDcgKzY1LDcgQEAg
Y2xhc3MgQWxsb2NhdGlvbgogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBjaGVjaygpIGNvbnN0
CisgICAgdm9pZCBjaGVja0FsbG9jKCkgY29uc3QKICAgICB7CiAgICAgICAgIGNoZWNrR3VhcmRC
bG9jayhwcmVHdWFyZCgpLCBrR3VhcmRCbG9ja0JlZ2luVmFsLCAiYmVmb3JlIik7CiAgICAgICAg
IGNoZWNrR3VhcmRCbG9jayhwb3N0R3VhcmQoKSwga0d1YXJkQmxvY2tFbmRWYWwsICJhZnRlciIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hcHBsZV9w
bGF0Zm9ybV91dGlscy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hcHBs
ZV9wbGF0Zm9ybV91dGlscy5oCmluZGV4IDU1ZWJiN2E4YWU1NzliMmNmYThkM2M1Y2YxYmU3OThk
ZTViODIwMmUuLjgzYWI1MzI2YzU1MGRmZDZkZGRhM2JkMmI4OTRhNTNlNmJjMzMyZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYXBwbGVfcGxhdGZvcm1f
dXRpbHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FwcGxlX3Bs
YXRmb3JtX3V0aWxzLmgKQEAgLTE1LDI0ICsxNSwzMiBAQAogCiAvLyBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1Qgb25seSBhdmFpbGFibGUgaW4gTWFjU0RLIDEwLjE1CiAKKyNpZiBUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QKIC8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQ0k6IGNoZWNrIGlmIGVpdGhlciBv
ZiB0aGUgMyBwbGF0Zm9ybXMgKE9TWC9DYXRhbHlzdC9pT1MpIG1pbiB2ZXJpb25zIGlzCiAvLyBh
dmFpbGFibGU6Ci0jaWYgVEFSR0VUX09TX01BQ0NBVEFMWVNUCiAjICAgIGRlZmluZSBBTkdMRV9B
UFBMRV9BVkFJTEFCTEVfWENJKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIsIGlPU1ZlcikgXAogICAg
ICAgICBAYXZhaWxhYmxlKG1hY09TIG1hY1ZlciwgbWFjQ2F0YWx5c3QgbWFjQ2F0YWx5c3RWZXIs
IGlPUyBpT1NWZXIsICopCiAvLyBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEM6IGNoZWNrIGlmIGVp
dGhlciBvZiB0aGUgMiBwbGF0Zm9ybXMgKE9TWC9DYXRhbHlzdCkgbWluIHZlcmlvbnMgaXMKIC8v
IGF2YWlsYWJsZToKICMgICAgZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQyhtYWNWZXIs
IG1hY0NhdGFseXN0VmVyKSBcCiAgICAgICAgIEBhdmFpbGFibGUobWFjT1MgbWFjVmVyLCBtYWND
YXRhbHlzdCBtYWNDYXRhbHlzdFZlciwgKikKKy8vIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9DSTog
Y2hlY2sgaWYgZWl0aGVyIG9mIHRoZSAyIHBsYXRmb3JtcyAoQ2F0YWx5c3QvaU9TKSBtaW4gdmVy
aW9ucyBpcworLy8gYXZhaWxhYmxlOgorIyAgICBkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxF
X0NJKG1hY0NhdGFseXN0VmVyLCBpT1NWZXIpIFwKKyAgICAgICAgQGF2YWlsYWJsZShtYWNDYXRh
bHlzdCBtYWNDYXRhbHlzdFZlciwgaU9TIGlPU1ZlciwgKikKICNlbHNlCiAjICAgIGRlZmluZSBB
TkdMRV9BUFBMRV9BVkFJTEFCTEVfWENJKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIsIGlPU1Zlcikg
XAogICAgICAgICBBTkdMRV9BUFBMRV9BVkFJTEFCTEVfWEkobWFjVmVyLCBpT1NWZXIpCi0vLyBB
TkdMRV9BUFBMRV9BVkFJTEFCTEVfWEM6IGNoZWNrIGlmIGVpdGhlciBvZiB0aGUgMiBwbGF0Zm9y
bXMgKE9TWC9DYXRhbHlzdCkgbWluIHZlcmlvbnMgaXMKLS8vIGF2YWlsYWJsZToKKwogIyAgICBk
ZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hDKG1hY1ZlciwgbWFjQ2F0YWx5c3RWZXIpIEBh
dmFpbGFibGUobWFjT1MgbWFjVmVyLCAqKQorIyAgICBkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxB
QkxFX0NJKG1hY0NhdGFseXN0VmVyLCBpT1NWZXIpIEBhdmFpbGFibGUoaU9TIGlPU1ZlciwgdHZP
UyBpT1NWZXIsICopCiAjZW5kaWYKIAogLy8gQU5HTEVfQVBQTEVfQVZBSUxBQkxFX1hJOiBjaGVj
ayBpZiBlaXRoZXIgb2YgdGhlIDIgcGxhdGZvcm1zIChPU1gvaU9TKSBtaW4gdmVyaW9ucyBpcyBh
dmFpbGFibGU6Ci0jZGVmaW5lIEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YSShtYWNWZXIsIGlPU1Zl
cikgQGF2YWlsYWJsZShtYWNPUyBtYWNWZXIsIGlPUyBpT1NWZXIsICopCisjZGVmaW5lIEFOR0xF
X0FQUExFX0FWQUlMQUJMRV9YSShtYWNWZXIsIGlPU1ZlcikgXAorICAgIEBhdmFpbGFibGUobWFj
T1MgbWFjVmVyLCBpT1MgaU9TVmVyLCB0dk9TIGlPU1ZlciwgKikKKworLy8gQU5HTEVfQVBQTEVf
QVZBSUxBQkxFX0k6IGNoZWNrIGlmIGEgcGFydGljdWxhciBpT1MgdmVyc2lvbiBpcyBhdmFpbGFi
bGUKKyNkZWZpbmUgQU5HTEVfQVBQTEVfQVZBSUxBQkxFX0koaU9TVmVyKSBAYXZhaWxhYmxlKGlP
UyBpT1NWZXIsIHR2T1MgaU9TVmVyLCAqKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vZGVidWcuaAppbmRleCBlMDAzN2E0ZTJjYjg2Yjg1NzMzN2I3NWFmM2Vk
ZjdlN2U0NzNlNjMyLi4yODE3MGE1ZDc3ZTY2NjViOTZlYjgzZmY2ZGJjYzJiYmUzNGIwN2M4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCkBAIC0zMTMsMTAg
KzMxMywxNiBAQCBzdGQ6Om9zdHJlYW0gJkZtdEhleChzdGQ6Om9zdHJlYW0gJm9zLCBUIHZhbHVl
KQogCiAvLyBBIG1hY3JvIGFzc2VydGluZyBhIGNvbmRpdGlvbiBhbmQgb3V0cHV0dGluZyBmYWls
dXJlcyB0byB0aGUgZGVidWcgbG9nCiAjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfQVNTRVJUUykK
LSMgICAgZGVmaW5lIEFTU0VSVChleHByZXNzaW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChleHByZXNz
aW9uID8gc3RhdGljX2Nhc3Q8dm9pZD4oMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICA6IChGQVRBTCgpIDw8
ICJcdCEgQXNzZXJ0IGZhaWxlZCBpbiAiIDw8IF9fRlVOQ1RJT05fXyA8PCAiICgiIDw8IF9fRklM
RV9fIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiOiIgPDwgX19MSU5FX18g
PDwgIik6ICIgPDwgI2V4cHJlc3Npb24pKQorIyAgICBkZWZpbmUgQVNTRVJUKGV4cHJlc3Npb24p
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgaWYgKCEoZXhwcmVzc2lvbikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICBfX2J1aWx0aW5fZGVidWd0cmFwKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpbnQgeCA9
IDA7IC8qIFRoaXMgZm9yY2VzIHNhbmUgYnJlYWtwb2ludCBsb2NhdGlvbiBhdCBjYWxsIHNpdGUu
ICovIFwKKyAgICAgICAgICAgICh2b2lkKXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlIChmYWxzZSkK
ICNlbHNlCiAjICAgIGRlZmluZSBBU1NFUlQoY29uZGl0aW9uKSBBTkdMRV9FQVRfU1RSRUFNX1BB
UkFNRVRFUlMgPDwgIShjb25kaXRpb24pCiAjZW5kaWYgIC8vIGRlZmluZWQoQU5HTEVfRU5BQkxF
X0FTU0VSVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L3BsYXRmb3JtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3BsYXRmb3Jt
LmgKaW5kZXggNjI2ZGI0MWQ5MmMxNjFlMzJmMWJjZmVhYjc1OTZmNGVmMzBjZGFiMC4uNDFmM2Nm
NGZmNzgzOWZkNjhmMzQ5MjZjMzU5MzIxYTY3YTk5MWQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9wbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vcGxhdGZvcm0uaApAQCAtMTMyLDExICsxMzIsMTYgQEAKICMg
ICAgaWYgZGVmaW5lZChfX2FybTY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCiAjICAgICAg
ICBkZWZpbmUgQU5HTEVfQ1BVX0FSTTY0IDEKICMgICAgZW5kaWYKLS8vIEVBR0wgc2hvdWxkIGJl
IGVuYWJsZWQgb24gaU9TLCBidXQgbm90IE1hYyBDYXRhbHlzdCB1bmxlc3MgaXQgaXMgcnVubmlu
ZyBvbiBBcHBsZSBTaWxpY29uLgorIyAgICAvLyBFQUdMIHNob3VsZCBiZSBlbmFibGVkIG9uIGlP
UywgYnV0IG5vdCBNYWMgQ2F0YWx5c3QgdW5sZXNzIGl0IGlzIHJ1bm5pbmcgb24gQXBwbGUgU2ls
aWNvbi4KICMgICAgaWYgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8IFwKICAgICAgICAgKGRlZmluZWQoQU5HTEVf
UExBVEZPUk1fTUFDQ0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKICMgICAg
ICAgIGRlZmluZSBBTkdMRV9FTkFCTEVfRUFHTAogIyAgICBlbmRpZgorIyAgICAvLyBJZGVudGlm
eSBNZXRhbCBBUEkgPj0gd2hhdCBzaGlwcGVkIG9uIG1hY09TIENhdGFsaW5hLgorIyAgICBpZiAo
ZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9B
TExPV0VEID49IDEwMTUwMCkgfHwgXAorICAgICAgICAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9J
T1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTMwMDAwKQorIyAgICAg
ICAgZGVmaW5lIEFOR0xFX1dJVEhfTU9ERVJOX01FVEFMX0FQSSAxCisjICAgIGVuZGlmCiAjZW5k
aWYKIAogLy8gRGVmaW5lIEFOR0xFX1dJVEhfQVNBTiBtYWNyby4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbSBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc3lzdGVtX3V0aWxzX2lvcy5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMzZiZWE0MjUxM2MyZGQyODVjZDg4MmFkYjhjMGViNjE0NDI0M2VmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zeXN0ZW1fdXRpbHNf
aW9zLm1tCkBAIC0wLDAgKzEsNTMgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAxNSBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHN5c3RlbV91dGlsc19pb3Mu
bW06IEltcGxlbWVudGF0aW9uIG9mIGlPUy1zcGVjaWZpYyBmdW5jdGlvbnMgZm9yIE9TWAorCisj
aW5jbHVkZSAic3lzdGVtX3V0aWxzLmgiCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1
ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyNpbmNsdWRlIDxtYWNoLW8vZHlsZC5o
PgorI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+Cisj
aW5jbHVkZSA8YXJyYXk+CisjaW5jbHVkZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDx2ZWN0b3I+CisK
KyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1lc3BhY2UgYW5nbGUKK3sK
K3N0ZDo6c3RyaW5nIEdldEV4ZWN1dGFibGVQYXRoKCkKK3sKKworICAgIE5TU3RyaW5nICpleGVj
dXRhYmxlU3RyaW5nID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBleGVjdXRhYmxlUGF0aF07Cisg
ICAgc3RkOjpzdHJpbmcgcmVzdWx0KFtleGVjdXRhYmxlU3RyaW5nIFVURjhTdHJpbmddKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnN0cmluZyBHZXRFeGVjdXRhYmxlRGlyZWN0b3J5
KCkKK3sKKyAgICBzdGQ6OnN0cmluZyBleGVjdXRhYmxlUGF0aCA9IEdldEV4ZWN1dGFibGVQYXRo
KCk7CisgICAgc2l6ZV90IGxhc3RQYXRoU2VwTG9jICAgICAgPSBleGVjdXRhYmxlUGF0aC5maW5k
X2xhc3Rfb2YoIi8iKTsKKyAgICByZXR1cm4gKGxhc3RQYXRoU2VwTG9jICE9IHN0ZDo6c3RyaW5n
OjpucG9zKSA/IGV4ZWN1dGFibGVQYXRoLnN1YnN0cigwLCBsYXN0UGF0aFNlcExvYykgOiAiIjsK
K30KKworY29uc3QgY2hhciAqR2V0U2hhcmVkTGlicmFyeUV4dGVuc2lvbigpCit7CisgICAgcmV0
dXJuICJkeWxpYiI7Cit9CisKK2RvdWJsZSBHZXRDdXJyZW50VGltZSgpCit7CisgICAgbWFjaF90
aW1lYmFzZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUluZm87CisgICAgbWFjaF90aW1lYmFzZV9pbmZv
KCZ0aW1lYmFzZUluZm8pOworCisgICAgZG91YmxlIHNlY29uZENvZWZmID0gdGltZWJhc2VJbmZv
Lm51bWVyICogMWUtOSAvIHRpbWViYXNlSW5mby5kZW5vbTsKKyAgICByZXR1cm4gc2Vjb25kQ29l
ZmYgKiBtYWNoX2Fic29sdXRlX3RpbWUoKTsKK30KK30gIC8vIG5hbWVzcGFjZSBhbmdsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCmluZGV4
IDYzYjNhNTljZGY5MWI5MGEwZDA4MjNlN2RjMmRhZTI3YjY4ODRjYjMuLmQwOWUyNzAwODI5ODk3
ZmZkYjI0YWQ1Y2E1YjhiOWQzODU5ZTVlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAKQEAgLTYsMTEgKzYsNiBAQAogCiAvLyB1dGls
aXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5l
cy4KIAotLy8gT2xkZXIgY2xhbmcgdmVyc2lvbnMgaGF2ZSBhIGZhbHNlIHBvc2l0aXZlIG9uIHRo
aXMgd2FybmluZyBoZXJlLgotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XZ2xvYmFsLWNvbnN0cnVjdG9ycyIKLSNlbmRpZgotCiAjaW5j
bHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdMRVMzL2dsMy5oIgogI2luY2x1
ZGUgImNvbW1vbi9tYXRodXRpbC5oIgpAQCAtNDc2LDYgKzQ3MSw1MCBAQCBpbnQgVmFyaWFibGVD
b2x1bW5Db3VudChHTGVudW0gdHlwZSkKIAogICAgIHJldHVybiAwOwogfQorLyoqCitEZXRlcm1p
bmUgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGUgc2xvdHMgdXNlZCBieSBhIHZhcmlhYmxlIHR5cGUK
KyovCitpbnQgVmFyaWFibGVBdHRyaWJ1dGVDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIEdMX05PTkU6CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAg
IGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICAg
IGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6Cisg
ICAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Cisg
ICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZF
QzM6CisgICAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UX1ZFQzQ6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQyeDQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzOgorICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzeDQ6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQ0OgorICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQ0eDM6CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CiAKIGJvb2wg
SXNTYW1wbGVyVHlwZShHTGVudW0gdHlwZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL3V0aWxpdGllcy5oCmluZGV4IDBjN2Q4MTFhNDZlZGU4YzY2NzA1NzBkMzJj
MjczNDZiY2IxMThjMWEuLmJhNjkzYTI3YWExM2U1YTJmYzM2NDZmMzU0YTkyNTNlMjk0YjYzOTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVz
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaApA
QCAtMzcsNiArMzcsNyBAQCBzaXplX3QgVmFyaWFibGVJbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUp
Owogc2l6ZV90IFZhcmlhYmxlRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKIGludCBWYXJpYWJs
ZVJvd0NvdW50KEdMZW51bSB0eXBlKTsKIGludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0
eXBlKTsKK2ludCBWYXJpYWJsZUF0dHJpYnV0ZUNvdW50KEdMZW51bSB0eXBlKTsKIGJvb2wgSXNT
YW1wbGVyVHlwZShHTGVudW0gdHlwZSk7CiBib29sIElzU2FtcGxlckN1YmVUeXBlKEdMZW51bSB0
eXBlKTsKIGJvb2wgSXNJbWFnZVR5cGUoR0xlbnVtIHR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cAppbmRleCBhNDQ0NDk5NjVjMDVhZWQ5YzI1NDJhNDA4MWNiMDU3MWYwYWJmNTBhLi5jYWM5ZjQ5
OTRiNzE5ZjgyMWY5MDA1ZDdmZTFkOTYyODAyYzZlZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cApAQCAtMjEsOCArMjEsMTEgQEAKICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX1ZVTEtBTgogCiAj
aWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCi0jICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsLmgiCisjICAgIGluY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCiAjZW5kaWYgIC8vIEFOR0xFX0VOQUJMRV9NRVRBTAor
I2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTF9TUElSVgorIyAgICBpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5oIgorI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVU
QUxfU1BJUlYKIAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgogCkBAIC02
NCwxMSArNjcsMTcgQEAgVENvbXBpbGVyICpDb25zdHJ1Y3RDb21waWxlcihzaDo6R0xlbnVtIHR5
cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dAogICAgIH0KICNlbmRpZiAgLy8g
QU5HTEVfRU5BQkxFX1ZVTEtBTgogCi0jaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisjaWZkZWYg
QU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWCiAgICAgaWYgKElzT3V0cHV0TWV0YWwob3V0cHV0KSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvck1ldGFsKHR5cGUsIHNwZWMpOwog
ICAgIH0KKyNlbmRpZgorI2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTAorICAgIGlmIChJc091dHB1
dE1ldGFsRGlyZWN0KG91dHB1dCkpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0
b3JNZXRhbERpcmVjdCh0eXBlLCBzcGVjLCBvdXRwdXQpOworICAgIH0KICNlbmRpZiAgLy8gQU5H
TEVfRU5BQkxFX01FVEFMCiAKICAgICAvLyBVbnN1cHBvcnRlZCBjb21waWxlciBvciB1bmtub3du
IGZvcm1hdC4gUmV0dXJuIG51bGxwdHIgcGVyIHRoZSBzaDo6Q29uc3RydWN0Q29tcGlsZXIgQVBJ
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvQ29tbW9uLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21tb24uaAppbmRleCA4MzVjOTBhMzU3MmMxMzU4MmFmNTI0YWY5NjlkYWFlMTBj
OWUxODBmLi4xYzA5Y2RhYTgyMTJjM2UxNzc4MDM5MDhmNDdmYTQwMmZjNjkzNzAwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21t
b24uaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Db21tb24uaApAQCAtMzEsNiArMzEsOCBAQCBzdHJ1Y3QgVFNvdXJjZUxvYwogICAgIGludCBs
YXN0X2xpbmU7CiB9OwogCitjb25zdGV4cHIgVFNvdXJjZUxvYyBrTm9Tb3VyY2VMb2N7LTEsIC0x
LCAtMSwgLTF9OworCiAvLwogLy8gUHV0IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUgaW4gYmFz
ZSBjbGFzc2VzIHRvIG1ha2UgdGhlbSB1c2UgdGhpcyBzY2hlbWUuCiAvLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIu
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29t
cGlsZXIuY3BwCmluZGV4IDM0ZDhlMTIxYjZiN2M0YTlmMDEwNGJiYzdkZGVlNDgwNmU0NGYyODIu
LjkzMTZlMmU1MWE3ZTY3MjA4MmQ1MDMxMDgzMjhmMGM1MWJmNGE2MjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNw
cAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5jcHAKQEAgLTcyMiw5ICs3MjIsOSBAQCBib29sIFRDb21waWxlcjo6Y2hlY2tBbmRT
aW1wbGlmeUFTVChUSW50ZXJtQmxvY2sgKnJvb3QsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
bnQgc2ltcGxpZnlTY2FsYXJpemVkID0gKGNvbXBpbGVPcHRpb25zICYgU0hfU0NBTEFSSVpFX1ZF
Q19BTkRfTUFUX0NPTlNUUlVDVE9SX0FSR1MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA/IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6a1NjYWxhcml6ZWRWZWNPck1hdENvbnN0
cnVjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgICAgdW5zaWdu
ZWQgaW50IHNpbXBsaWZ5U2NhbGFyaXplZCA9IChjb21waWxlT3B0aW9ucyAmIFNIX1NDQUxBUkla
RV9WRUNfQU5EX01BVF9DT05TVFJVQ1RPUl9BUkdTKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPyBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6OmtTY2FsYXJpemVk
VmVjT3JNYXRDb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAwOwogCiAgICAgLy8gU3BsaXQgbXVsdGkgZGVjbGFyYXRpb25zIGFuZCByZW1vdmUg
Y2FsbHMgdG8gYXJyYXkgbGVuZ3RoKCkuCiAgICAgLy8gTm90ZSB0aGF0IFNpbXBsaWZ5TG9vcENv
bmRpdGlvbnMgbmVlZHMgdG8gYmUgcnVuIGJlZm9yZSBhbnkgb3RoZXIgQVNUIHRyYW5zZm9ybWF0
aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmgKaW5kZXggZDBiMjRiYWEzZTc3NjU5MzdhMjQxN2NkMzlk
ZGFlNTIwODk4NjlkMC4uMDQzZGRkNWFkY2NlODFkMDM5NTBjNGI0MzFmYzA2NjA1OTZhMTY5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Db21waWxlci5oCkBAIC0zNSw2ICszNSw5IEBAIGNsYXNzIFRQYXJzZUNvbnRl
eHQ7CiAjaWZkZWYgQU5HTEVfRU5BQkxFX0hMU0wKIGNsYXNzIFRyYW5zbGF0b3JITFNMOwogI2Vu
ZGlmICAvLyBBTkdMRV9FTkFCTEVfSExTTAorI2lmZGVmIEFOR0xFX0VOQUJMRV9NRVRBTAorY2xh
c3MgVHJhbnNsYXRvck1ldGFsRGlyZWN0OworI2VuZGlmICAvLyBBTkdMRV9FTkFCTEVfTUVUQUwK
IAogLy8KIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc2hhZGVyIHR5cGUgaXMg
R0xTTC4KQEAgLTYzLDYgKzY2LDkgQEAgY2xhc3MgVFNoSGFuZGxlQmFzZQogI2lmZGVmIEFOR0xF
X0VOQUJMRV9ITFNMCiAgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0QXNUcmFuc2xhdG9y
SExTTCgpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAgLy8gQU5HTEVfRU5BQkxFX0hMU0wKKyNpZmRl
ZiBBTkdMRV9FTkFCTEVfTUVUQUwKKyAgICB2aXJ0dWFsIFRyYW5zbGF0b3JNZXRhbERpcmVjdCAq
Z2V0QXNUcmFuc2xhdG9yTWV0YWxEaXJlY3QoKSB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYg
IC8vIEFOR0xFX0VOQUJMRV9NRVRBTAogCiAgIHByb3RlY3RlZDoKICAgICAvLyBNZW1vcnkgYWxs
b2NhdG9yLiBBbGxvY2F0ZXMgYW5kIHRyYWNrcyBtZW1vcnkgcmVxdWlyZWQgYnkgdGhlIGNvbXBp
bGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAppbmRleCAwMzM1MTcxNTAxZjY2
YTdjZWEwNmE3NWY3MWRkZjJhMDUxNDdiMjQ2Li4xMDRhZmZiYWViNzNlMTZhODhkNjBkZGQyMjQx
NDM4YzczMTM5YjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmNwcApAQCAtNjcs
MTEgKzY3LDE1IEBAIGJvb2wgSXNWYWxpZFNoaWZ0T2Zmc2V0KGNvbnN0IFRDb25zdGFudFVuaW9u
ICZyaHMpCiAKIH0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotVENvbnN0YW50VW5pb246OlRD
b25zdGFudFVuaW9uKCkKLXsKLSAgICBpQ29uc3QgPSAwOwotICAgIHR5cGUgICA9IEVidFZvaWQ7
Ci19CitUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oKSA6IGlDb25zdCgwKSwgdHlwZShF
YnRWb2lkKSB7fQorCitUQ29uc3RhbnRVbmlvbjo6VENvbnN0YW50VW5pb24oaW50IGkpIDogaUNv
bnN0KGkpLCB0eXBlKEVidEludCkge30KKworVENvbnN0YW50VW5pb246OlRDb25zdGFudFVuaW9u
KHVuc2lnbmVkIGludCB1KSA6IHVDb25zdCh1KSwgdHlwZShFYnRVSW50KSB7fQorCitUQ29uc3Rh
bnRVbmlvbjo6VENvbnN0YW50VW5pb24oZmxvYXQgZikgOiBmQ29uc3QoZiksIHR5cGUoRWJ0Rmxv
YXQpIHt9CisKK1RDb25zdGFudFVuaW9uOjpUQ29uc3RhbnRVbmlvbihib29sIGIpIDogYkNvbnN0
KGIpLCB0eXBlKEVidEJvb2wpIHt9CiAKIGludCBUQ29uc3RhbnRVbmlvbjo6Z2V0SUNvbnN0KCkg
Y29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAppbmRleCBhNjIzZDY1ZmIxZDU0
NTdhMjlkNzgyZTNkMTNiMDgxODQ4YjJiMGFkLi5kZjUzODU3ZGQzYmY0YjQ4ZmJhYjY1ZWI0ZmVi
MWUwNDU4NjEzNzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCkBAIC0yMCw2ICsy
MCwxMCBAQCBjbGFzcyBUQ29uc3RhbnRVbmlvbgogICBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FU
T1JfTkVXX0RFTEVURQogICAgIFRDb25zdGFudFVuaW9uKCk7CisgICAgVENvbnN0YW50VW5pb24o
aW50IGkpOworICAgIFRDb25zdGFudFVuaW9uKHVuc2lnbmVkIGludCB1KTsKKyAgICBUQ29uc3Rh
bnRVbmlvbihmbG9hdCBmKTsKKyAgICBUQ29uc3RhbnRVbmlvbihib29sIGIpOwogCiAgICAgYm9v
bCBjYXN0KFRCYXNpY1R5cGUgbmV3VHlwZSwgY29uc3QgVENvbnN0YW50VW5pb24gJmNvbnN0YW50
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW50ZXJtTm9kZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcAppbmRleCBiYmRmODY2M2IwNzAxMGVlNjA0
MWVlMDkzODljOTkxYzZmMTU0MDQ1Li41MTM2ZDIwNjhmNzU0MTdkYTFhMTlmYzNjMTk2MGE1Mjcz
OGE3YzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmNwcApAQCAtNDEsNyArNDEsNyBAQCBU
UHJlY2lzaW9uIEdldEhpZ2hlclByZWNpc2lvbihUUHJlY2lzaW9uIGxlZnQsIFRQcmVjaXNpb24g
cmlnaHQpCiBUQ29uc3RhbnRVbmlvbiAqVmVjdG9yaXplKGNvbnN0IFRDb25zdGFudFVuaW9uICZj
b25zdGFudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb24g
PSBuZXcgVENvbnN0YW50VW5pb25bc2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAg
ICAgICAgIGNvbnN0VW5pb25baV0gPSBjb25zdGFudDsKIAogICAgIHJldHVybiBjb25zdFVuaW9u
OwpAQCAtNDE1LDYgKzQxNSwxNCBAQCBUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9jayhjb25zdCBU
SW50ZXJtQmxvY2sgJm5vZGUpCiAgICAgfQogfQogCitUSW50ZXJtQmxvY2s6OlRJbnRlcm1CbG9j
ayhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VEludGVybU5vZGUgKj4gc3RtdHMpCit7CisgICAgZm9y
IChUSW50ZXJtTm9kZSAqc3RtdCA6IHN0bXRzKQorICAgIHsKKyAgICAgICAgYXBwZW5kU3RhdGVt
ZW50KHN0bXQpOworICAgIH0KK30KKwogc2l6ZV90IFRJbnRlcm1CbG9jazo6Z2V0Q2hpbGRDb3Vu
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TdGF0ZW1lbnRzLnNpemUoKTsKQEAgLTQ0Niw2ICs0
NTQsMzcgQEAgYm9vbCBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGU6OnJlcGxhY2VDaGlsZE5vZGUo
VEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K1RJbnRlcm1EZWNsYXJhdGlvbjo6VEludGVybURlY2xhcmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAq
dmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHByKQoreworICAgIGlmIChpbml0RXhwcikKKyAgICB7
CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3IoCisgICAgICAgICAgICBuZXcgVEludGVybUJpbmFy
eShUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUsIG5ldyBUSW50ZXJtU3ltYm9sKHZhciksIGluaXRF
eHByKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3Io
bmV3IFRJbnRlcm1TeW1ib2wodmFyKSk7CisgICAgfQorfQorCitUSW50ZXJtRGVjbGFyYXRpb246
OlRJbnRlcm1EZWNsYXJhdGlvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Y29uc3QgVFZhcmlhYmxl
ICo+IGRlY2xhcmF0b3JzKQorICAgIDogVEludGVybURlY2xhcmF0aW9uKCkKK3sKKyAgICBmb3Ig
KGF1dG8gKmQgOiBkZWNsYXJhdG9ycykKKyAgICB7CisgICAgICAgIGFwcGVuZERlY2xhcmF0b3Io
bmV3IFRJbnRlcm1TeW1ib2woZCkpOworICAgIH0KK30KKworVEludGVybURlY2xhcmF0aW9uOjpU
SW50ZXJtRGVjbGFyYXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PFRJbnRlcm1UeXBlZCAqPiBk
ZWNsYXJhdG9ycykKKyAgICA6IFRJbnRlcm1EZWNsYXJhdGlvbigpCit7CisgICAgZm9yIChhdXRv
ICpkIDogZGVjbGFyYXRvcnMpCisgICAgeworICAgICAgICBhcHBlbmREZWNsYXJhdG9yKGQpOwor
ICAgIH0KK30KKwogc2l6ZV90IFRJbnRlcm1EZWNsYXJhdGlvbjo6Z2V0Q2hpbGRDb3VudCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1EZWNsYXJhdG9ycy5zaXplKCk7CkBAIC00NjMsOSArNTAyLDEw
IEBAIGJvb2wgVEludGVybURlY2xhcmF0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2Rl
ICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlCiAKIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6
OnJlcGxhY2VDaGlsZE5vZGVJbnRlcm5hbChUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1O
b2RlICpyZXBsYWNlbWVudCkKIHsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgZ2V0U2Vx
dWVuY2UoKS0+c2l6ZSgpOyArK2lpKQorICAgIGF1dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOwor
ICAgIGZvciAoYXV0byAqJm5vZGUgOiBzZXEpCiAgICAgewotICAgICAgICBSRVBMQUNFX0lGX0lT
KCgqZ2V0U2VxdWVuY2UoKSlbaWldLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJlcGxhY2VtZW50
KTsKKyAgICAgICAgUkVQTEFDRV9JRl9JUyhub2RlLCBUSW50ZXJtTm9kZSwgb3JpZ2luYWwsIHJl
cGxhY2VtZW50KTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDczLDEyICs1MTMs
MTMgQEAgYm9vbCBUSW50ZXJtQWdncmVnYXRlQmFzZTo6cmVwbGFjZUNoaWxkTm9kZUludGVybmFs
KFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGUKIGJvb2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6
OnJlcGxhY2VDaGlsZE5vZGVXaXRoTXVsdGlwbGUoVEludGVybU5vZGUgKm9yaWdpbmFsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtU2VxdWVuY2UgJnJlcGxhY2VtZW50cykKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBn
ZXRTZXF1ZW5jZSgpLT5iZWdpbigpOyBpdCA8IGdldFNlcXVlbmNlKCktPmVuZCgpOyArK2l0KQor
ICAgIGF1dG8gJnNlcSA9ICpnZXRTZXF1ZW5jZSgpOworICAgIGZvciAoYXV0byBpdCA9IHNlcS5i
ZWdpbigpOyBpdCA8IHNlcS5lbmQoKTsgKytpdCkKICAgICB7CiAgICAgICAgIGlmICgqaXQgPT0g
b3JpZ2luYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGl0ID0gZ2V0U2VxdWVuY2UoKS0+ZXJh
c2UoaXQpOwotICAgICAgICAgICAgZ2V0U2VxdWVuY2UoKS0+aW5zZXJ0KGl0LCByZXBsYWNlbWVu
dHMuYmVnaW4oKSwgcmVwbGFjZW1lbnRzLmVuZCgpKTsKKyAgICAgICAgICAgIGl0ID0gc2VxLmVy
YXNlKGl0KTsKKyAgICAgICAgICAgIHNlcS5pbnNlcnQoaXQsIHJlcGxhY2VtZW50cy5iZWdpbigp
LCByZXBsYWNlbWVudHMuZW5kKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9CkBAIC00ODgsMTIgKzUyOSwxMyBAQCBib29sIFRJbnRlcm1BZ2dyZWdhdGVCYXNl
OjpyZXBsYWNlQ2hpbGROb2RlV2l0aE11bHRpcGxlKFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwKIGJv
b2wgVEludGVybUFnZ3JlZ2F0ZUJhc2U6Omluc2VydENoaWxkTm9kZXMoVEludGVybVNlcXVlbmNl
OjpzaXplX3R5cGUgcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmaW5zZXJ0aW9ucykKIHsKLSAgICBpZiAo
cG9zaXRpb24gPiBnZXRTZXF1ZW5jZSgpLT5zaXplKCkpCisgICAgYXV0byAmc2VxID0gKmdldFNl
cXVlbmNlKCk7CisgICAgaWYgKHBvc2l0aW9uID4gc2VxLnNpemUoKSkKICAgICB7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgYXV0byBpdCA9IGdldFNlcXVlbmNlKCktPmJlZ2lu
KCkgKyBwb3NpdGlvbjsKLSAgICBnZXRTZXF1ZW5jZSgpLT5pbnNlcnQoaXQsIGluc2VydGlvbnMu
YmVnaW4oKSwgaW5zZXJ0aW9ucy5lbmQoKSk7CisgICAgYXV0byBpdCA9IHNlcS5iZWdpbigpICsg
cG9zaXRpb247CisgICAgc2VxLmluc2VydChpdCwgaW5zZXJ0aW9ucy5iZWdpbigpLCBpbnNlcnRp
b25zLmVuZCgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTA0MCw4ICsxMDgyLDggQEAg
VEludGVybUFnZ3JlZ2F0ZTo6VEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRl
ICZub2RlKQogCiBUSW50ZXJtQWdncmVnYXRlICpUSW50ZXJtQWdncmVnYXRlOjpzaGFsbG93Q29w
eSgpIGNvbnN0CiB7Ci0gICAgVEludGVybVNlcXVlbmNlICpjb3B5U2VxID0gbmV3IFRJbnRlcm1T
ZXF1ZW5jZSgpOwotICAgIGNvcHlTZXEtPmluc2VydChjb3B5U2VxLT5iZWdpbigpLCBnZXRTZXF1
ZW5jZSgpLT5iZWdpbigpLCBnZXRTZXF1ZW5jZSgpLT5lbmQoKSk7CisgICAgYXV0byAmc2VxICAg
ICAgICAgICAgICAgICAgPSAqZ2V0U2VxdWVuY2UoKTsKKyAgICBUSW50ZXJtU2VxdWVuY2UgKmNv
cHlTZXEgICA9IG5ldyBUSW50ZXJtU2VxdWVuY2Uoc2VxLmJlZ2luKCksIHNlcS5lbmQoKSk7CiAg
ICAgVEludGVybUFnZ3JlZ2F0ZSAqY29weU5vZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZShtRnVu
Y3Rpb24sIG1UeXBlLCBtT3AsIGNvcHlTZXEpOwogICAgIGNvcHlOb2RlLT5zZXRMaW5lKG1MaW5l
KTsKICAgICByZXR1cm4gY29weU5vZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1Ob2RlLmgKaW5kZXggMzY0
Mzg0N2Y2OGFhZWE2NTBiZGViZjI2ZjNkZDdkMjg3MmI0MDFhMC4uM2I2Zjg3MmMyM2ZmNjVkNmEy
NGFhZWVhMzQyNmVlZmU1Y2UxYThkNyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybU5vZGUuaApAQCAtNjc0
LDYgKzY3NCw3IEBAIGNsYXNzIFRJbnRlcm1CbG9jayA6IHB1YmxpYyBUSW50ZXJtTm9kZSwgcHVi
bGljIFRJbnRlcm1BZ2dyZWdhdGVCYXNlCiB7CiAgIHB1YmxpYzoKICAgICBUSW50ZXJtQmxvY2so
KSA6IFRJbnRlcm1Ob2RlKCkge30KKyAgICBUSW50ZXJtQmxvY2soc3RkOjppbml0aWFsaXplcl9s
aXN0PFRJbnRlcm1Ob2RlICo+IHN0bXRzKTsKICAgICB+VEludGVybUJsb2NrKCkgb3ZlcnJpZGUg
e30KIAogICAgIFRJbnRlcm1CbG9jayAqZ2V0QXNCbG9jaygpIG92ZXJyaWRlIHsgcmV0dXJuIHRo
aXM7IH0KQEAgLTc3Niw2ICs3NzcsOSBAQCBjbGFzcyBUSW50ZXJtRGVjbGFyYXRpb24gOiBwdWJs
aWMgVEludGVybU5vZGUsIHB1YmxpYyBUSW50ZXJtQWdncmVnYXRlQmFzZQogewogICBwdWJsaWM6
CiAgICAgVEludGVybURlY2xhcmF0aW9uKCkgOiBUSW50ZXJtTm9kZSgpIHt9CisgICAgVEludGVy
bURlY2xhcmF0aW9uKGNvbnN0IFRWYXJpYWJsZSAqdmFyLCBUSW50ZXJtVHlwZWQgKmluaXRFeHBy
KTsKKyAgICBUSW50ZXJtRGVjbGFyYXRpb24oc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IFRW
YXJpYWJsZSAqPiBkZWNsYXJhdG9ycyk7CisgICAgVEludGVybURlY2xhcmF0aW9uKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxUSW50ZXJtVHlwZWQgKj4gZGVjbGFyYXRvcnMpOwogICAgIH5USW50ZXJt
RGVjbGFyYXRpb24oKSBvdmVycmlkZSB7fQogCiAgICAgVEludGVybURlY2xhcmF0aW9uICpnZXRB
c0RlY2xhcmF0aW9uTm9kZSgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2wuY3BwCmluZGV4IGQwMzg5YWY0M2Y1ZjFhMTRmMjRjZTVmM2FmOWRhOTZmYjhiN2I4YWMuLmZl
MmUxOWI5MTQwNzM4MmNhNmE2ODA4YmMzZjZmZWI5OTVmZWU1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbC5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
LmNwcApAQCAtMTk2LDcgKzE5Niw4IEBAIHZvaWQgVEZ1bmN0aW9uOjpzaGFyZVBhcmFtZXRlcnMo
Y29uc3QgVEZ1bmN0aW9uICZwYXJhbWV0ZXJzU291cmNlKQogCiBJbW11dGFibGVTdHJpbmcgVEZ1
bmN0aW9uOjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKIHsKLSAgICBzdGQ6OnN0cmluZyBuZXdO
YW1lKG5hbWUoKS5kYXRhKCksIG5hbWUoKS5sZW5ndGgoKSk7CisgICAgSW1tdXRhYmxlU3RyaW5n
IG5hbWUgPSB0aGlzLT5uYW1lKCk7CisgICAgc3RkOjpzdHJpbmcgbmV3TmFtZShuYW1lLmRhdGEo
KSwgbmFtZS5sZW5ndGgoKSk7CiAgICAgbmV3TmFtZSArPSBrRnVuY3Rpb25NYW5nbGVkTmFtZVNl
cGFyYXRvcjsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwdTsgaSA8IG1QYXJhbUNvdW50OyArK2kp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2wuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1N5bWJvbC5oCmluZGV4IGI5Y2Y5MDg5NGU2ZThlM2FiMmM2MjZiMzU5NDE2YzM2YTk2
ZmM0MmYuLjBhYmIxZDQxMTAxMzMyOThkZWEyYmJkM2IyMGUwMDE0MmZlZTg1MjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbC5oCkBAIC0yMjIsNyArMjIyLDcgQEAgY2xhc3MgVEZ1bmN0aW9uIDogcHVibGljIFRT
eW1ib2wKICAgICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gbU9wOyB9
CiAKICAgICB2b2lkIHNldERlZmluZWQoKSB7IGRlZmluZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBp
c0RlZmluZWQoKSB7IHJldHVybiBkZWZpbmVkOyB9CisgICAgYm9vbCBpc0RlZmluZWQoKSBjb25z
dCB7IHJldHVybiBkZWZpbmVkOyB9CiAgICAgdm9pZCBzZXRIYXNQcm90b3R5cGVEZWNsYXJhdGlv
bigpIHsgbUhhc1Byb3RvdHlwZURlY2xhcmF0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgaGFzUHJv
dG90eXBlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBtSGFzUHJvdG90eXBlRGVjbGFyYXRp
b247IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvU3ltYm9sVGFibGVfRVNTTF9hdXRvZ2VuLmNwcCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlX0VTU0xfYXV0b2dl
bi5jcHAKaW5kZXggN2U4NDU4ZWM5OTlhMTAyZmJiZTdhYWE4NzEyYzNhMTA2M2FlYmQxYy4uZTlk
MWI3MzJlNDU5ZGEzYjE4YjM4MzM1NzY0NDljNDk4MTZmNWVjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGVfRVNT
TF9hdXRvZ2VuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZV9FU1NMX2F1dG9nZW4uY3BwCkBAIC0zNTY4LDcgKzM1Njgs
NyBAQCBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMTBGMTBGMTBGWzNdID0geyZCdWlsdElu
VmFyaWFibGU6OmtwdDEwRiwgJkJ1aWx0SW5WYQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEZ9OwogY29uc3RleHByIGNv
bnN0IFRWYXJpYWJsZSAqcDIwQjAwQjAwQlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIs
ICZCdWlsdEluVmFyaWFibGU6OmtwdDAwQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBCfTsKLWNvbnN0ZXhwciBjb25z
dCBUVmFyaWFibGUgKnAyMEIwMERbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBCLCAm
QnVpbHRJblZhcmlhYmxlOjprcHQwMER9OworY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDIw
QjAwRFsyXSAgICAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWlsdEluVmFyaWFi
bGU6OmtwdDAwRH07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMjBCMDBIWzJdICAgID0g
eyZCdWlsdEluVmFyaWFibGU6OmtwdDIwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBIfTsKIGNv
bnN0ZXhwciBjb25zdCBUVmFyaWFibGUgKnAyMEIxMEJbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJs
ZTo6a3B0MjBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEJ9OwogY29uc3RleHByIGNvbnN0IFRW
YXJpYWJsZSAqcDIwQjIwQjAwQlszXSA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQyMEIsICZCdWls
dEluVmFyaWFibGU6OmtwdDIwQiwKQEAgLTM2MDksNyArMzYwOSw3IEBAIGNvbnN0ZXhwciBjb25z
dCBUVmFyaWFibGUgKnAyMEYyMEYyMEZbM10gPSB7JkJ1aWx0SW5WYXJpYWJsZTo6a3B0MjBGLCAm
QnVpbHRJblZhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZC
dWlsdEluVmFyaWFibGU6OmtwdDIwRn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBC
MDBCMDBCWzNdID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6
a3B0MDBCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQnVp
bHRJblZhcmlhYmxlOjprcHQwMEJ9OwotY29uc3RleHByIGNvbnN0IFRWYXJpYWJsZSAqcDMwQjAw
RFsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIsICZCdWlsdEluVmFyaWFibGU6Omtw
dDAwRH07Citjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMDBEWzJdICAgICAgID0geyZC
dWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MDBEfTsKIGNvbnN0
ZXhwciBjb25zdCBUVmFyaWFibGUgKnAzMEIxMEJbMl0gICAgPSB7JkJ1aWx0SW5WYXJpYWJsZTo6
a3B0MzBCLCAmQnVpbHRJblZhcmlhYmxlOjprcHQxMEJ9OwogY29uc3RleHByIGNvbnN0IFRWYXJp
YWJsZSAqcDMwQjIwQlsyXSAgICA9IHsmQnVpbHRJblZhcmlhYmxlOjprcHQzMEIsICZCdWlsdElu
VmFyaWFibGU6OmtwdDIwQn07CiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlICpwMzBCMzBCMDBC
WzNdID0geyZCdWlsdEluVmFyaWFibGU6OmtwdDMwQiwgJkJ1aWx0SW5WYXJpYWJsZTo6a3B0MzBC
LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbC5jcHAKaW5kZXggYTFmY2Y4YzlmMTU1
ZTFjZGRjNzg5NmQ4Yjk0MTczNmEzOTZhODRlNi4uZWE1NjZiMTUzNmIwY2YyNTVhYTE5MjJlNTE4
YTk2M2UwZWIyNmMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWwuY3BwCkBA
IC00MSw4ICs0MSwxNCBAQCBjb25zdCBjaGFyIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25z
dE5hbWVbXSA9ICJBTkdMRVJhc3Rlcml6ZXJEaXNhYmxlZCI7CiBuYW1lc3BhY2UKIHsKIAorY29u
c3RleHByIEltbXV0YWJsZVN0cmluZyBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFibGVkQ29uc3RO
YW1lID0KKyAgICBJbW11dGFibGVTdHJpbmcoIkFOR0xFUmFzdGVyaXphdGlvbkRpc2FibGVkIik7
Citjb25zdGV4cHIgSW1tdXRhYmxlU3RyaW5nIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1l
ID0KKyAgICBJbW11dGFibGVTdHJpbmcoIkFOR0xFQ292ZXJhZ2VNYXNrRW5hYmxlZCIpOwogY29u
c3RleHByIEltbXV0YWJsZVN0cmluZyBrQ292ZXJhZ2VNYXNrRmllbGQgICAgICAgPSBJbW11dGFi
bGVTdHJpbmcoImNvdmVyYWdlTWFzayIpOworY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrRW11
SW5zdGFuY2VJREZpZWxkICAgICAgPSBJbW11dGFibGVTdHJpbmcoImVtdWxhdGVkSW5zdGFuY2VJ
RCIpOwogY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBrU2FtcGxlTWFza1dyaXRlRnVuY05hbWUg
PSBJbW11dGFibGVTdHJpbmcoIkFOR0xFV3JpdGVTYW1wbGVNYXNrIik7Citjb25zdGV4cHIgSW1t
dXRhYmxlU3RyaW5nIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lICA9IEltbXV0YWJsZVN0cmluZygi
QU5HTEVEaXNjYXJkV3JhcHBlciIpOwogCiBUSW50ZXJtQmluYXJ5ICpDcmVhdGVEcml2ZXJVbmlm
b3JtUmVmKGNvbnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5pZm9ybXMsIGNvbnN0IGNoYXIgKmZpZWxk
TmFtZSkKIHsKQEAgLTg2LDYgKzkyLDIxIEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBBcHBlbmRW
ZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxlciAqY29tCiAgICAg
cmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoY29tcGlsZXIsIHJvb3QsIGFzc2lnbm1lbnQsIHN5
bWJvbFRhYmxlKTsKIH0KIAorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtdWxhdGVJbnN0YW5jZUlE
KFRDb21waWxlciAqY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICpkcml2ZXJVbmlmb3JtcykKK3sK
KyAgICAvLyBlbXVJbnN0YW5jZUlECisgICAgVEludGVybUJpbmFyeSAqZW11SW5zdGFuY2VJRCA9
CisgICAgICAgIENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtFbXVJbnN0
YW5jZUlERmllbGQuZGF0YSgpKTsKKworICAgIC8vIENyZWF0ZSBhIHN5bWJvbCByZWZlcmVuY2Ug
dG8gImdsX0luc3RhbmNlSW5kZXgiCisgICAgY29uc3QgVFZhcmlhYmxlICppbnN0YW5jZUlEID0g
QnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUluZGV4KCk7CisKKyAgICByZXR1cm4gUmVwbGFj
ZVZhcmlhYmxlV2l0aFR5cGVkKGNvbXBpbGVyLCByb290LCBpbnN0YW5jZUlELCBlbXVJbnN0YW5j
ZUlEKTsKK30KKwogLy8gSW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRzLgogQU5HTEVf
Tk9fRElTQ0FSRCBib29sIEluaXRpYWxpemVVbnVzZWRPdXRwdXRzKFRJbnRlcm1CbG9jayAqcm9v
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9s
VGFibGUgKnN5bWJvbFRhYmxlLApAQCAtMTIzLDYgKzE0NCwxOCBAQCBBTkdMRV9OT19ESVNDQVJE
IGJvb2wgSW5pdGlhbGl6ZVVudXNlZE91dHB1dHMoVEludGVybUJsb2NrICpyb290LAogCiB9ICAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKKy8qKiBzdGF0aWMgKi8KK2NvbnN0IGNoYXIgKlRyYW5z
bGF0b3JNZXRhbDo6R2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgpCit7CisgICAgcmV0
dXJuIGtDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lLmRhdGEoKTsKK30KKworLyoqIHN0YXRp
YyAqLworY29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFsOjpHZXRSYXN0ZXJpemF0aW9uRGlzY2Fy
ZEVuYWJsZWRDb25zdE5hbWUoKQoreworICAgIHJldHVybiBrUmFzdGVyaXphdGlvbkRpc2NhcmRF
bmFibGVkQ29uc3ROYW1lLmRhdGEoKTsKK30KKwogVHJhbnNsYXRvck1ldGFsOjpUcmFuc2xhdG9y
TWV0YWwoc2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykgOiBUcmFuc2xhdG9yVnVs
a2FuKHR5cGUsIHNwZWMpCiB7fQogCkBAIC0xNTMsMjAgKzE4Niw1OCBAQCBib29sIFRyYW5zbGF0
b3JNZXRhbDo6dHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICB7CiAgICAgICAgIGF1
dG8gbmVnRmxpcFkgPSBnZXREcml2ZXJVbmlmb3JtTmVnRmxpcFlSZWYoZHJpdmVyVW5pZm9ybXMp
OwogCisgICAgICAgIGlmIChtRW11bGF0ZWRJbnN0YW5jZUlEKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBFbXVsYXRlIGdsX0luc3RhbmNlSUQKKyAgICAgICAgICAgIGlmICghRW11bGF0ZUlu
c3RhbmNlSUQodGhpcywgcm9vdCwgJmdldFN5bWJvbFRhYmxlKCksIGRyaXZlclVuaWZvcm1zKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKwogICAgICAgICAvLyBBcHBlbmQgZ2xfUG9zaXRpb24ueSBjb3JyZWN0
aW9uIHRvIG1haW4KICAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3Jy
ZWN0aW9uVG9NYWluKHRoaXMsIHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBuZWdGbGlwWSkpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IC8vIEluc2VydCByYXN0ZXJpemVyIGRpc2NhcmQgbG9naWMKLSAgICAgICAgaWYgKCFpbnNlcnRS
YXN0ZXJpemVyRGlzY2FyZExvZ2ljKHJvb3QpKQorICAgICAgICAvLyBJbnNlcnQgcmFzdGVyaXph
dGlvbiBkaXNjYXJkIGxvZ2ljCisgICAgICAgIGlmICghaW5zZXJ0UmFzdGVyaXphdGlvbkRpc2Nh
cmRMb2dpYyhyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gSW5pdGlhbGl6ZSB1bnVzZWQgdmFyeWluZyBvdXRwdXRz
IHRvIGF2b2lkIHNwaXJ2LWNyb3NzIGRlYWQtY29kZSByZW1vdmluZyB0aGVtIGluIGxhdGVyCisg
ICAgLy8gc3RhZ2UuIE9ubHkgZG8gdGhpcyBpZiBTSF9JTklUX09VVFBVVF9WQVJJQUJMRVMgaXMg
bm90IHNwZWNpZmllZC4KKyAgICBpZiAoKGdldFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hB
REVSIHx8IGdldFNoYWRlclR5cGUoKSA9PSBHTF9HRU9NRVRSWV9TSEFERVJfRVhUKSAmJgorICAg
ICAgICAhKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9PVVRQVVRfVkFSSUFCTEVTKSkKKyAgICB7
CisgICAgICAgIEluaXRWYXJpYWJsZUxpc3QgbGlzdDsKKyAgICAgICAgZm9yIChjb25zdCBzaDo6
U2hhZGVyVmFyaWFibGUgJnZhciA6IG1PdXRwdXRWYXJ5aW5ncykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKCF2YXIuYWN0aXZlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxp
c3QucHVzaF9iYWNrKHZhcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIUluaXRpYWxpemVVbnVzZWRPdXRwdXRzKHJvb3QsICZnZXRTeW1ib2xUYWJsZSgpLCBsaXN0
KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAg
fQogICAgIGVsc2UgaWYgKGdldFNoYWRlclR5cGUoKSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCiAg
ICAgeworICAgICAgICAvLyBGb3Igbm9uIHZvaWQgTVNMIGZyYWdtZW50IGZ1bmN0aW9ucyByZXBs
YWNlIGRpc2NhcmQKKyAgICAgICAgLy8gd2l0aCBBTkdMRURpc2NhcmRXcmFwcGVyKCkKKyAgICAg
ICAgaWYgKG1PdXRwdXRWYXJpYWJsZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFyZXBsYWNlQWxsTWFpbkRpc2NhcmRVc2VzKHJvb3QpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgICAgICBpZiAoIWluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMocm9vdCwgZHJpdmVyVW5p
Zm9ybXMpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzUsNiAr
MzA2LDEzIEBAIHZvaWQgVHJhbnNsYXRvck1ldGFsOjpjcmVhdGVBZGRpdGlvbmFsR3JhcGhpY3NE
cml2ZXJVbmlmb3JtRmllbGRzKHN0ZDo6dmVjdG9yPFRGCiAgICAgVEZpZWxkICpjb3ZlcmFnZU1h
c2tGaWVsZCA9CiAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKEVidFVJbnQpLCBrQ292ZXJh
Z2VNYXNrRmllbGQsIFRTb3VyY2VMb2MoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CiAg
ICAgZmllbGRzT3V0LT5wdXNoX2JhY2soY292ZXJhZ2VNYXNrRmllbGQpOworCisgICAgaWYgKG1F
bXVsYXRlZEluc3RhbmNlSUQpCisgICAgeworICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURG
aWVsZCA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU291cmNl
TG9jKCksIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworICAgICAgICBmaWVsZHNPdXQtPnB1
c2hfYmFjayhlbXVJbnN0YW5jZUlERmllbGQpOworICAgIH0KIH0KIAogLy8gQWRkIHNhbXBsZV9t
YXNrIHdyaXRpbmcgdG8gbWFpbiwgZ3VhcmRlZCBieSB0aGUgc3BlY2lhbGl6YXRpb24gY29uc3Rh
bnQKQEAgLTI5MywyNCArMzcxLDI0IEBAIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9y
TWV0YWw6Omluc2VydFNhbXBsZU1hc2tXcml0aW5nTG9naWMoVEludGVybUJsb2NrCiAgICAgcmV0
dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgcm9vdCwgaWZDYWxsLCBzeW1ib2xUYWJsZSk7
CiB9CiAKLUFOR0xFX05PX0RJU0NBUkQgYm9vbCBUcmFuc2xhdG9yTWV0YWw6Omluc2VydFJhc3Rl
cml6ZXJEaXNjYXJkTG9naWMoVEludGVybUJsb2NrICpyb290KQorQU5HTEVfTk9fRElTQ0FSRCBi
b29sIFRyYW5zbGF0b3JNZXRhbDo6aW5zZXJ0UmFzdGVyaXphdGlvbkRpc2NhcmRMb2dpYyhUSW50
ZXJtQmxvY2sgKnJvb3QpCiB7CiAgICAgVEluZm9TaW5rQmFzZSAmc2luayAgICAgICA9IGdldElu
Zm9TaW5rKCkub2JqOwogICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUgPSAmZ2V0U3ltYm9s
VGFibGUoKTsKIAogICAgIC8vIEluc2VydCByYXN0ZXJpemF0aW9uRGlzYWJsZWQgc3BlY2lhbGl6
YXRpb24gY29uc3RhbnQuCi0gICAgc2luayA8PCAibGF5b3V0IChjb25zdGFudF9pZD0wKSBjb25z
dCBib29sICIgPDwgbXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1lOworICAg
IHNpbmsgPDwgImxheW91dCAoY29uc3RhbnRfaWQ9MCkgY29uc3QgYm9vbCAiIDw8IGtSYXN0ZXJp
emF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWU7CiAgICAgc2luayA8PCAiID0gZmFsc2U7XG4i
OwogCi0gICAgLy8gQ3JlYXRlIGtSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUgdmFy
aWFibGUgcmVmZXJlbmNlLgorICAgIC8vIENyZWF0ZSBrUmFzdGVyaXphdGlvbkRpc2NhcmRFbmFi
bGVkQ29uc3ROYW1lIGFuZCBrUmFzdGVyaXphdGlvbkRpc2NhcmRGdW5jTmFtZSB2YXJpYWJsZQor
ICAgIC8vIHJlZmVyZW5jZXMuCiAgICAgVFR5cGUgKmJvb2xUeXBlID0gbmV3IFRUeXBlKEVidEJv
b2wpOwogICAgIGJvb2xUeXBlLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwotICAgIFRWYXJpYWJs
ZSAqZGlzY2FyZEVuYWJsZWRWYXIgPQotICAgICAgICBuZXcgVFZhcmlhYmxlKHN5bWJvbFRhYmxl
LCBJbW11dGFibGVTdHJpbmcobXRsOjprUmFzdGVyaXplckRpc2NhcmRFbmFibGVkQ29uc3ROYW1l
KSwKLSAgICAgICAgICAgICAgICAgICAgICBib29sVHlwZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbCk7CisgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9IG5ldyBUVmFyaWFibGUo
c3ltYm9sVGFibGUsIGtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbFR5cGUsIFN5
bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOwogCiAgICAgLy8gSW5zZXJ0IHRoaXMgY29kZSB0byB0
aGUgZW5kIG9mIG1haW4oKQotICAgIC8vIGlmIChBTkdMRVJhc3Rlcml6ZXJEaXNhYmxlZCkKKyAg
ICAvLyBpZiAoQU5HTEVSYXN0ZXJpemF0aW9uRGlzYWJsZWQpCiAgICAgLy8gewogICAgIC8vICAg
ICAgZ2xfUG9zaXRpb24gPSB2ZWM0KC0zLjAsIC0zLjAsIC0zLjAsIDEuMCk7CiAgICAgLy8gfQpA
QCAtMzQxLDQgKzQxOSw3OSBAQCBBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFs
OjppbnNlcnRSYXN0ZXJpemVyRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jawogICAgIHJldHVybiBS
dW5BdFRoZUVuZE9mU2hhZGVyKHRoaXMsIHJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFibGUpOwogfQog
CisvLyBJZiB0aGUgTVNMIGZyYWdtZW50IHNoYWRlciBpcyBub24tdm9pZCwgd2UgbmVlZCB0byBl
bnN1cmUKKy8vIHRoYXQgdGhlcmUgaXMgYSByZXR1cm4gYXQgdGhlIGVuZC4gVGhlIE1TTCBjb21w
aWxlcgorLy8gd2lsbCBlcnJvciBvdXQgaWYgdGhlcmUncyBubyByZXR1cm4gYXQgdGhlIGVuZCwg
ZXZlbiBpZiBhbGwKKy8vIHBhdGhzIGxlYWQgdG8gZGlzY2FyZF9mcmFnbWVudCgpLiBTbyB3cmFw
IGRpc2NhcmQgaW4gYSB3cmFwcGVyIGZ1bmN0aW9uLgorLy8gRml4ZXMgZEVRUC1HTEVTMy5mdW5j
dGlvbmFsLnNoYWRlcnMuZGlzY2FyZC5iYXNpY19hbHdheXMKK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBUcmFuc2xhdG9yTWV0YWw6OnJlcGxhY2VBbGxNYWluRGlzY2FyZFVzZXMoVEludGVybUJsb2Nr
ICpyb290KQoreworICAgIC8vIGJlZm9yZQorICAgIC8vIHZvaWQgbWFpbiAodm9pZCkKKyAgICAv
LyB7CisgICAgLy8gICAgIG9fY29sb3IgPSB2X2NvbG9yOworICAgIC8vICAgICBkaXNjYXJkOwor
ICAgIC8vIH0KKworICAgIC8vIGFmdGVyCisgICAgLy8gdm9pZCBBTkdMRURpc2NhcmRXcmFwcGVy
KCkKKyAgICAvLyB7CisgICAgLy8gICAgZGlzY2FyZDsKKyAgICAvLyB9CisgICAgLy8gdm9pZCBt
YWluICh2b2lkKQorICAgIC8vIHsKKyAgICAvLyAgICAgb19jb2xvciA9IHZfY29sb3I7CisgICAg
Ly8gICAgIEFOR0xFRGlzY2FyZFdyYXBwZXIoKTsKKyAgICAvLyB9CisKKyAgICBUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICptYWluICAgPSBGaW5kTWFpbihyb290KTsKKyAgICBUSW50ZXJtQmxv
Y2sgKm1haW5Cb2R5ICAgICAgICAgICAgPSBtYWluLT5nZXRCb2R5KCk7CisgICAgVEludGVybVNl
cXVlbmNlICpmdW5jdGlvblNlcXVlbmNlID0gbWFpbkJvZHktPmdldFNlcXVlbmNlKCk7CisgICAg
VEludGVybUFnZ3JlZ2F0ZSAqZGlzY2FyZEZ1bmMgICAgID0gbnVsbHB0cjsKKyAgICAvLyBJdGVy
YXRlIG92ZXIgYWxsIGJyYW5jaGVzIGluIG1haW4gZnVuY3Rpb24sIGFuZCByZXBsYWNlIGFsbCB1
c2VzCisgICAgLy8gb2YgZGlzY2FyZCB3aXRoIEFOR0xFRGlzY2FyZFdyYXBwZXIoKS4KKyAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZnVuY3Rpb25TZXF1ZW5jZS0+c2l6ZSgpOyAr
K2luZGV4KQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUgKmZ1bmN0aW9uTm9kZSA9ICgqZnVu
Y3Rpb25TZXF1ZW5jZSlbaW5kZXhdOworICAgICAgICBUSW50ZXJtQnJhbmNoICpicmFuY2hOb2Rl
ID0gZnVuY3Rpb25Ob2RlLT5nZXRBc0JyYW5jaE5vZGUoKTsKKyAgICAgICAgaWYgKGJyYW5jaE5v
ZGUgIT0gbnVsbHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJyYW5jaE5vZGUtPmdl
dEZsb3dPcCgpID09IEVPcEtpbGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KGRpc2NhcmRGdW5jID09IG51bGxwdHIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBkaXNjYXJkRnVuYyA9IGNyZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhyb290KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYm9vbCByZXBsYWNlZCA9IG1haW5Cb2R5
LT5yZXBsYWNlQ2hpbGROb2RlKGJyYW5jaE5vZGUsIGRpc2NhcmRGdW5jKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXJlcGxhY2VkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVBU1Qocm9vdCk7Cit9CisKKy8vIENyZWF0
ZSBkaXNjYXJkX3dyYXBwZXIgZnVuY3Rpb24gdG8gZW5zdXJlIHRoYXQgU1BJUlYtQ3Jvc3Mgd2ls
bCBhbHdheXMgaGF2ZSBhIHJldHVybiBhdCB0aGUgZW5kCisvLyBvZiBmcmFnbWVudCBzaGFkZXJz
CitBTkdMRV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKlRyYW5zbGF0b3JNZXRhbDo6Y3Jl
YXRlRGlzY2FyZFdyYXBwZXJGdW5jKFRJbnRlcm1CbG9jayAqcm9vdCkKK3sKKyAgICBUSW5mb1Np
bmtCYXNlICZzaW5rICAgICAgID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgVFN5bWJvbFRhYmxl
ICpzeW1ib2xUYWJsZSA9ICZnZXRTeW1ib2xUYWJsZSgpOworCisgICAgc2luayA8PCAidm9pZCAi
IDw8IGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lIDw8ICIoKVxuIjsKKyAgICBzaW5rIDw8ICJ7XG4i
OworICAgIHNpbmsgPDwgIiAgIGRpc2NhcmQ7XG4iOworICAgIHNpbmsgPDwgIn1cbiI7CisKKyAg
ICBURnVuY3Rpb24gKmRpc2NhcmRXcmFwcGVyRnVuYyA9CisgICAgICAgIG5ldyBURnVuY3Rpb24o
c3ltYm9sVGFibGUsIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lLCBTeW1ib2xUeXBlOjpBbmdsZUlu
dGVybmFsLAorICAgICAgICAgICAgICAgICAgICAgIFN0YXRpY1R5cGU6OkdldEJhc2ljPEVidFZv
aWQ+KCksIHRydWUpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAqY2FsbERpc2NhcmRXcmFwcGVy
RnVuYyA9CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgqZGlz
Y2FyZFdyYXBwZXJGdW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpOworICAgIHJldHVybiBjYWxs
RGlzY2FyZFdyYXBwZXJGdW5jOworfQorCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsLmgKaW5kZXggMGY0ZjFjY2UyOWEzNTU3YWVkMDE4OGM4ZjYxNzg3
NjRlYjAwMmI0ZC4uYmNjMzE4NzFhNzFkMTQ4YzU2NWQ4Mjc2NTcxYTEzNjMwYTM4NGMyNiAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsLmgKQEAgLTI1LDYgKzI1LDExIEBAIGNsYXNz
IFRyYW5zbGF0b3JNZXRhbCA6IHB1YmxpYyBUcmFuc2xhdG9yVnVsa2FuCiAgIHB1YmxpYzoKICAg
ICBUcmFuc2xhdG9yTWV0YWwoc2g6OkdMZW51bSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CiAK
KyAgICBzdGF0aWMgY29uc3QgY2hhciAqR2V0Q292ZXJhZ2VNYXNrRW5hYmxlZENvbnN0TmFtZSgp
OworICAgIHN0YXRpYyBjb25zdCBjaGFyICpHZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRD
b25zdE5hbWUoKTsKKworICAgIHZvaWQgZW5hYmxlRW11bGF0ZWRJbnN0YW5jZUlEKGJvb2wgZSkg
eyBtRW11bGF0ZWRJbnN0YW5jZUlEID0gZTsgfQorCiAgIHByb3RlY3RlZDoKICAgICBBTkdMRV9O
T19ESVNDQVJEIGJvb2wgdHJhbnNsYXRlKFRJbnRlcm1CbG9jayAqcm9vdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMs
CkBAIC0zNyw3ICs0MiwxMyBAQCBjbGFzcyBUcmFuc2xhdG9yTWV0YWwgOiBwdWJsaWMgVHJhbnNs
YXRvclZ1bGthbgogCiAgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGluc2VydFNhbXBsZU1hc2tX
cml0aW5nTG9naWMoVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZHJpdmVyVW5p
Zm9ybXMpOwotICAgIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBpbnNlcnRSYXN0ZXJpemVyRGlzY2Fy
ZExvZ2ljKFRJbnRlcm1CbG9jayAqcm9vdCk7CisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIGlu
c2VydFJhc3Rlcml6YXRpb25EaXNjYXJkTG9naWMoVEludGVybUJsb2NrICpyb290KTsKKworICAg
IEFOR0xFX05PX0RJU0NBUkQgYm9vbCByZXBsYWNlQWxsTWFpbkRpc2NhcmRVc2VzKFRJbnRlcm1C
bG9jayAqcm9vdCk7CisKKyAgICBBTkdMRV9OT19ESVNDQVJEIFRJbnRlcm1BZ2dyZWdhdGUgKmNy
ZWF0ZURpc2NhcmRXcmFwcGVyRnVuYyhUSW50ZXJtQmxvY2sgKnJvb3QpOworCisgICAgYm9vbCBt
RW11bGF0ZWRJbnN0YW5jZUlEID0gZmFsc2U7CiB9OwogCiB9ICAvLyBuYW1lc3BhY2Ugc2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRlMTAyMjgyZWUzYWFhZGY2ZjBiNDI1NmY2N2Y1Mzk4YmFlMGU1MTkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QuY3BwCkBAIC0wLDAgKzEsMTQzOSBAQAorLy8KKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgiCisKKyNp
bmNsdWRlICJhbmdsZV9nbC5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0J1aWx0aW5zV29ya2Fyb3VuZEdMU0wuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0ltbXV0YWJsZVN0cmluZ0J1aWxkZXIuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL091dHB1dFZ1bGthbkdMU0wuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1N0YXRpY1R5cGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9Db25zdGFudE5hbWVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSG9pc3RDb25zdGFudHMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNl
QmxvY2tzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVQaXBlbGluZXMuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRy
ZXNzYWJsZVJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBv
dW5kU3RydWN0RGVjbGFyYXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvV3JhcE1haW4uaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9Jbml0aWFsaXplVmFyaWFibGVz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9OYW1lRW1iZWRkZWRV
bmlmb3JtU3RydWN0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMv
UmVtb3ZlQXRvbWljQ291bnRlckJ1aWx0aW5zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX29wcy9SZW1vdmVJbmFjdGl2ZUludGVyZmFjZVZhcmlhYmxlcy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmV3cml0ZUF0b21pY0NvdW50ZXJzLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZXdyaXRlQ3ViZU1hcFNh
bXBsZXJzQXMyREFycmF5LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29w
cy9SZXdyaXRlRGZkeS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMv
UmV3cml0ZVN0cnVjdFNhbXBsZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90
cmVlX3V0aWwvQnVpbHRJbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ZpbmRGdW5jdGlvbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0ZpbmRNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwv
RmluZFN5bWJvbE5vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1Ob2RlX3V0aWwuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
dXRpbC9SZXBsYWNlQ2xpcERpc3RhbmNlVmFyaWFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL3RyZWVfdXRpbC9SZXBsYWNlVmFyaWFibGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9SdW5BdFRoZUVuZE9mU2hhZGVyLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgiCisKK25hbWVzcGFjZSBzaAoreworCituYW1lc3Bh
Y2UKK3sKKworY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0ZpZWxkKCJjb3ZlcmFnZU1hc2si
LCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Citjb25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJ
REZpZWxkKCJlbXVsYXRlZEluc3RhbmNlSUQiLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Cisj
aWYgMAorY29uc3RleHByIE5hbWUga1NhbXBsZU1hc2tXcml0ZUZ1bmNOYW1lKCJXcml0ZVNhbXBs
ZU1hc2siKTsKK2NvbnN0ZXhwciBOYW1lIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lKCJEaXNjYXJk
V3JhcHBlciIpOworI2VuZGlmCitjb25zdGV4cHIgTmFtZSBrRW11bGF0ZWREZXB0aFJhbmdlUGFy
YW1zKCJEZXB0aFJhbmdlUGFyYW1zIik7Citjb25zdGV4cHIgTmFtZSBrVW5pZm9ybXNCbG9ja05h
bWUoIkFuZ2xlVW5pZm9ybXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtVbmlmb3Jtc1Zhck5hbWUoImFu
Z2xlVW5pZm9ybXMiKTsKK2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZs
aXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworY29uc3RleHByIE5h
bWUga0ZsaXBwZWRGcmFnQ29vcmROYW1lKCJmbGlwcGVkRnJhZ0Nvb3JkIiwgU3ltYm9sVHlwZTo6
VXNlckRlZmluZWQpOworCitjb25zdGV4cHIgY29uc3QgY2hhciBrVmlld3BvcnRbXSAgICAgICAg
ICAgICA9ICJ2aWV3cG9ydCI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrSGFsZlJlbmRlckFyZWFb
XSAgICAgICA9ICJoYWxmUmVuZGVyQXJlYSI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrRmxpcFhZ
W10gICAgICAgICAgICAgICA9ICJmbGlwWFkiOworY29uc3RleHByIGNvbnN0IGNoYXIga05lZ0Zs
aXBYWVtdICAgICAgICAgICAgPSAibmVnRmxpcFhZIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtD
bGlwRGlzdGFuY2VzRW5hYmxlZFtdID0gImNsaXBEaXN0YW5jZXNFbmFibGVkIjsKK2NvbnN0ZXhw
ciBjb25zdCBjaGFyIGtYZmJBY3RpdmVVbnBhdXNlZFtdICAgID0gInhmYkFjdGl2ZVVucGF1c2Vk
IjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtYZmJWZXJ0aWNlc1BlckRyYXdbXSAgID0gInhmYlZl
cnRpY2VzUGVyRHJhdyI7Citjb25zdGV4cHIgY29uc3QgY2hhciBrWGZiQnVmZmVyT2Zmc2V0c1td
ICAgICA9ICJ4ZmJCdWZmZXJPZmZzZXRzIjsKK2NvbnN0ZXhwciBjb25zdCBjaGFyIGtBY2JCdWZm
ZXJPZmZzZXRzW10gICAgID0gImFjYkJ1ZmZlck9mZnNldHMiOworY29uc3RleHByIGNvbnN0IGNo
YXIga0RlcHRoUmFuZ2VbXSAgICAgICAgICAgPSAiZGVwdGhSYW5nZSI7Citjb25zdGV4cHIgY29u
c3QgY2hhciBrUHJlUm90YXRpb25bXSAgICAgICAgICA9ICJwcmVSb3RhdGlvbiI7Citjb25zdGV4
cHIgY29uc3QgY2hhciBrRnJhZ1JvdGF0aW9uW10gICAgICAgICA9ICJmcmFnUm90YXRpb24iOwor
Citjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlIGtnbF9WZXJ0ZXhJbmRleE1ldGFsKAorICAgIEJ1
aWx0SW5JZDo6Z2xfVmVydGV4SW5kZXgsCisgICAgSW1tdXRhYmxlU3RyaW5nKCJnbF9WZXJ0ZXhJ
bmRleCIpLAorICAgIFN5bWJvbFR5cGU6OkJ1aWx0SW4sCisgICAgVEV4dGVuc2lvbjo6VU5ERUZJ
TkVELAorICAgIFN0YXRpY1R5cGU6OkdldDxFYnRVSW50LCBFYnBIaWdoLCBFdnFWZXJ0ZXhJRCwg
MSwgMT4oKSk7CisKK2NvbnN0ZXhwciBzaXplX3Qga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEyOworY29u
c3RleHByIHN0ZDo6YXJyYXk8Y29uc3QgY2hhciAqLCBrTnVtR3JhcGhpY3NEcml2ZXJVbmlmb3Jt
cz4ga0dyYXBoaWNzRHJpdmVyVW5pZm9ybU5hbWVzID0geworICAgIHtrVmlld3BvcnQsIGtIYWxm
UmVuZGVyQXJlYSwga0ZsaXBYWSwga05lZ0ZsaXBYWSwga0NsaXBEaXN0YW5jZXNFbmFibGVkLCBr
WGZiQWN0aXZlVW5wYXVzZWQsCisgICAgIGtYZmJWZXJ0aWNlc1BlckRyYXcsIGtYZmJCdWZmZXJP
ZmZzZXRzLCBrQWNiQnVmZmVyT2Zmc2V0cywga0RlcHRoUmFuZ2UsIGtQcmVSb3RhdGlvbiwKKyAg
ICAga0ZyYWdSb3RhdGlvbn19OworCitjb25zdGV4cHIgc2l6ZV90IGtOdW1Db21wdXRlRHJpdmVy
VW5pZm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MTsKK2NvbnN0ZXhwciBzdGQ6OmFycmF5PGNvbnN0IGNoYXIgKiwga051bUNvbXB1dGVEcml2ZXJV
bmlmb3Jtcz4ga0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFtZXMgPSB7CisgICAge2tBY2JCdWZmZXJP
ZmZzZXRzfX07CisKK2NsYXNzIERlY2xhcmVTdHJ1Y3RUeXBlc1RyYXZlcnNlciA6IHB1YmxpYyBU
SW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBEZWNsYXJlU3RydWN0
VHlwZXNUcmF2ZXJzZXIoVE91dHB1dE1TTCAqb3V0cHV0TVNMKQorICAgICAgICA6IFRJbnRlcm1U
cmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwgbU91dHB1dE1TTChvdXRwdXRNU0wpCisgICAg
e30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCB2aXNpdCwgVEludGVybURlY2xh
cmF0aW9uICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZpc2l0ID09IFBy
ZVZpc2l0KTsKKyAgICAgICAgaWYgKCFtSW5HbG9iYWxTY29wZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVEludGVybVNl
cXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIFRJbnRl
cm1UeXBlZCAqZGVjbGFyYXRvciAgICAgICAgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVk
KCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICAgPSBkZWNsYXJhdG9y
LT5nZXRUeXBlKCk7CisKKyAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5n
ZXRTdHJ1Y3QoKTsKKworICAgICAgICAgICAgLy8gRW1iZWRkZWQgc3RydWN0cyBzaG91bGQgYmUg
cGFyc2VkIGF3YXkgYnkgbm93LgorICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+c3ltYm9s
VHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICAgICAgICAgIC8vIG91dHB1dE1TTC0+
d3JpdGVTdHJ1Y3RUeXBlKHN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbE5vZGUgPSBkZWNsYXJhdG9yLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAg
IGlmIChzeW1ib2xOb2RlICYmIHN5bWJvbE5vZGUtPnZhcmlhYmxlKCkuc3ltYm9sVHlwZSgpID09
IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFJl
bW92ZSB0aGUgc3RydWN0IHNwZWNpZmllciBkZWNsYXJhdGlvbiBmcm9tIHRoZSB0cmVlIHNvIGl0
IGlzbid0IHBhcnNlZCBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgZW1w
dHlSZXBsYWNlbWVudDsKKyAgICAgICAgICAgICAgICBtTXVsdGlSZXBsYWNlbWVudHMuZW1wbGFj
ZV9iYWNrKGdldFBhcmVudE5vZGUoKS0+Z2V0QXNCbG9jaygpLCBub2RlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlSZXBsYWNlbWVudCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gVE9ETzogUkVNT1ZFLCB1c2VkIHRv
IHJlbW92ZSAndW5zdWVkJyB3YXJuaW5nCisgICAgICAgIG1PdXRwdXRNU0wgPSBudWxscHRyOwor
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBUT3V0cHV0
TVNMICptT3V0cHV0TVNMOworfTsKKworY2xhc3MgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZl
cnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBEZWNsYXJl
RGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyKFRJbmZvU2lua0Jhc2UgKnNpbmssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAgKm5hbWVNYXApCisg
ICAgICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKKyAgICAgICAgICBt
U2luayhzaW5rKSwKKyAgICAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCisgICAg
ICAgICAgbU5hbWVNYXAobmFtZU1hcCksCisgICAgICAgICAgbUluRGVmYXVsdFVuaWZvcm0oZmFs
c2UpCisgICAge30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlvbihWaXNpdCB2aXNpdCwgVElu
dGVybURlY2xhcmF0aW9uICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVElu
dGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9ICoobm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisKKyAgICAg
ICAgLy8gVE9ETyhqbWFkaWxsKTogQ29tcG91bmQgZGVjbGFyYXRpb25zLgorICAgICAgICBBU1NF
UlQoc2VxdWVuY2Uuc2l6ZSgpID09IDEpOworCisgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFyaWFi
bGUgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCk7CisgICAgICAgIGNvbnN0IFRUeXBl
ICZ0eXBlICAgICAgPSB2YXJpYWJsZS0+Z2V0VHlwZSgpOworICAgICAgICBib29sIGlzVW5pZm9y
bSAgICAgICAgID0gdHlwZS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtICYmICF0eXBlLmlz
SW50ZXJmYWNlQmxvY2soKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICFJc09wYXF1ZVR5
cGUodHlwZS5nZXRCYXNpY1R5cGUoKSk7CisKKyAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNVbmlmb3JtKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICgqbVNpbmspIDw8ICIgICAgIiA8PCBHZXRUeXBlTmFtZSh0eXBlLCBt
SGFzaEZ1bmN0aW9uLCBtTmFtZU1hcCkgPDwgIiAiOworICAgICAgICAgICAgICAgIG1JbkRlZmF1
bHRVbmlmb3JtID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBtSW5EZWZhdWx0
VW5pZm9ybSA9IGlzVW5pZm9ybTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9
PSBQb3N0VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc1VuaWZvcm0pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgKCptU2luaykgPDwgIjtcbiI7CisKKyAgICAgICAg
ICAgICAgICAvLyBSZW1vdmUgdGhlIHVuaWZvcm0gZGVjbGFyYXRpb24gZnJvbSB0aGUgdHJlZSBz
byBpdCBpc24ndCBwYXJzZWQgYWdhaW4uCisgICAgICAgICAgICAgICAgVEludGVybVNlcXVlbmNl
IGVtcHR5UmVwbGFjZW1lbnQ7CisgICAgICAgICAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLmVt
cGxhY2VfYmFjayhnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKSwgbm9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5UmVwbGFjZW1lbnQp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtSW5EZWZhdWx0VW5pZm9ybSA9IGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKG1JbkRlZmF1bHRVbmlmb3JtKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBJbW11
dGFibGVTdHJpbmcgJm5hbWUgPSBzeW1ib2wtPnZhcmlhYmxlKCkubmFtZSgpOworICAgICAgICAg
ICAgQVNTRVJUKCFuYW1lLmJlZ2luc1dpdGgoImdsXyIpKTsKKyAgICAgICAgICAgICgqbVNpbmsp
IDw8IEhhc2hOYW1lKCZzeW1ib2wtPnZhcmlhYmxlKCksIG1IYXNoRnVuY3Rpb24sIG1OYW1lTWFw
KQorICAgICAgICAgICAgICAgICAgICAgPDwgQXJyYXlTdHJpbmcoc3ltYm9sLT5nZXRUeXBlKCkp
OworICAgICAgICB9CisgICAgfQorCisgIHByaXZhdGU6CisgICAgVEluZm9TaW5rQmFzZSAqbVNp
bms7CisgICAgU2hIYXNoRnVuY3Rpb242NCBtSGFzaEZ1bmN0aW9uOworICAgIE5hbWVNYXAgKm1O
YW1lTWFwOworICAgIGJvb2wgbUluRGVmYXVsdFVuaWZvcm07Cit9OworCitUSW50ZXJtQmluYXJ5
ICpDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMs
IGNvbnN0IGNoYXIgKmZpZWxkTmFtZSkKK3sKKyAgICBzaXplX3QgZmllbGRJbmRleCA9IEZpbmRG
aWVsZEluZGV4KGRyaXZlclVuaWZvcm1zLmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCks
IGZpZWxkTmFtZSk7CisKKyAgICBUSW50ZXJtU3ltYm9sICphbmdsZVVuaWZvcm1zUmVmID0gbmV3
IFRJbnRlcm1TeW1ib2woJmRyaXZlclVuaWZvcm1zKTsKKyAgICBUQ29uc3RhbnRVbmlvbiAqdW5p
Zm9ybUluZGV4ICAgID0gbmV3IFRDb25zdGFudFVuaW9uOworICAgIHVuaWZvcm1JbmRleC0+c2V0
SUNvbnN0KHN0YXRpY19jYXN0PGludD4oZmllbGRJbmRleCkpOworICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uICppbmRleFJlZiA9CisgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih1bmlm
b3JtSW5kZXgsICpTdGF0aWNUeXBlOjpHZXRCYXNpYzxFYnRJbnQ+KCkpOworICAgIHJldHVybiBu
ZXcgVEludGVybUJpbmFyeShFT3BJbmRleERpcmVjdFN0cnVjdCwgYW5nbGVVbmlmb3Jtc1JlZiwg
aW5kZXhSZWYpOworfQorCisjaWYgMAorLy8gVW5saWtlIFZ1bGthbiBoYXZpbmcgYXV0byB2aWV3
cG9ydCBmbGlwcGluZyBleHRlbnNpb24sIGluIE1ldGFsIHdlIGhhdmUgdG8gZmxpcCBnbF9Qb3Np
dGlvbi55CisvLyBtYW51YWxseS4KKy8vIFRoaXMgb3BlcmF0aW9uIHBlcmZvcm1zIGZsaXBwaW5n
IHRoZSBnbF9Qb3NpdGlvbi55IHVzaW5nIHRoaXMgZXhwcmVzc2lvbjoKKy8vIGdsX1Bvc2l0aW9u
LnkgPSBnbF9Qb3NpdGlvbi55ICogbmVnVmlld3BvcnRTY2FsZVkKK0FOR0xFX05PX0RJU0NBUkQg
Ym9vbCBBcHBlbmRWZXJ0ZXhTaGFkZXJQb3NpdGlvbllDb3JyZWN0aW9uVG9NYWluKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtU3dpenpsZSAmbmVnRmxpcFkpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9
IGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICAvLyBDcmVhdGUgYSBzeW1ib2wgcmVm
ZXJlbmNlIHRvICJnbF9Qb3NpdGlvbiIKKyAgICBjb25zdCBUVmFyaWFibGUgKnBvc2l0aW9uICA9
IEJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKTsKKyAgICBUSW50ZXJtU3ltYm9sICpwb3Np
dGlvblJlZiA9IG5ldyBUSW50ZXJtU3ltYm9sKHBvc2l0aW9uKTsKKworICAgIC8vIENyZWF0ZSBh
IHN3aXp6bGUgdG8gImdsX1Bvc2l0aW9uLnkiCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZz
ZXRZOworICAgIHN3aXp6bGVPZmZzZXRZLnB1c2hfYmFjaygxKTsKKyAgICBUSW50ZXJtU3dpenps
ZSAqcG9zaXRpb25ZID0gbmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zm
c2V0WSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0aW9uLnkgKiBu
ZWdGbGlwWSIKKyAgICBUSW50ZXJtQmluYXJ5ICppbnZlcnNlWSA9IG5ldyBUSW50ZXJtQmluYXJ5
KEVPcE11bCwgcG9zaXRpb25ZLT5kZWVwQ29weSgpLCAmbmVnRmxpcFkpOworCisgICAgLy8gQ3Jl
YXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi55ID0gZ2xfUG9zaXRpb24ueSAqIG5lZ1Zp
ZXdwb3J0U2NhbGVZCisgICAgVEludGVybVR5cGVkICpwb3NpdGlvbllMSFMgPSBwb3NpdGlvblkt
PmRlZXBDb3B5KCk7CisgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVy
bUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgcG9zaXRpb25ZTEhTLCBpbnZlcnNlWSk7CisK
KyAgICAvLyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBv
ZiB0aGUgc2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwg
JnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisjZW5kaWYKKworI2lmIDAKKy8v
IEluaXRpYWxpemUgdW51c2VkIHZhcnlpbmcgb3V0cHV0cy4KK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBJbml0aWFsaXplVW51c2VkT3V0cHV0cyhUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xU
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbml0VmFyaWFibGVMaXN0ICZ1bnVzZWRWYXJzKQoreworICAgIGlmICh1bnVzZWRWYXJzLmVt
cHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBUSW50ZXJt
U2VxdWVuY2UgKmluc2VydFNlcXVlbmNlID0gbmV3IFRJbnRlcm1TZXF1ZW5jZTsKKworICAgIGZv
ciAoY29uc3Qgc2g6OlNoYWRlclZhcmlhYmxlICZ2YXIgOiB1bnVzZWRWYXJzKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCF2YXIuYWN0aXZlKTsKKyAgICAgICAgY29uc3QgVEludGVybVN5bWJvbCAq
c3ltYm9sID0gRmluZFN5bWJvbE5vZGUoJnJvb3QsIHZhci5uYW1lKTsKKyAgICAgICAgQVNTRVJU
KHN5bWJvbCk7CisKKyAgICAgICAgVEludGVybVNlcXVlbmNlICppbml0Q29kZSA9IENyZWF0ZUlu
aXRDb2RlKHN5bWJvbCwgZmFsc2UsIGZhbHNlLCAmc3ltYm9sVGFibGUpOworCisgICAgICAgIGlu
c2VydFNlcXVlbmNlLT5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UtPmVuZCgpLCBpbml0Q29kZS0+YmVn
aW4oKSwgaW5pdENvZGUtPmVuZCgpKTsKKyAgICB9CisKKyAgICBpZiAoaW5zZXJ0U2VxdWVuY2Up
CisgICAgeworICAgICAgICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICptYWluID0gRmluZE1h
aW4oJnJvb3QpOworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgKm1haW5TZXF1ZW5jZSAgID0gbWFp
bi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgpOworCisgICAgICAgIC8vIEluc2VydCBpbml0IGNv
ZGUgYXQgdGhlIHN0YXJ0IG9mIG1haW4oKQorICAgICAgICBtYWluU2VxdWVuY2UtPmluc2VydCht
YWluU2VxdWVuY2UtPmJlZ2luKCksIGluc2VydFNlcXVlbmNlLT5iZWdpbigpLCBpbnNlcnRTZXF1
ZW5jZS0+ZW5kKCkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2Nv
bnN0IFRWYXJpYWJsZSAqQWRkQ29tcHV0ZURyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJs
b2NrICZyb290LCBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIC8vIFRoaXMgZmll
bGQgbGlzdCBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgQ29tcHV0ZURyaXZlclVuaWZvcm1zIGlu
IENvbnRleHRWay5jcHAuCisgICAgVEZpZWxkTGlzdCAqZHJpdmVyRmllbGRMaXN0ID0gbmV3IFRG
aWVsZExpc3Q7CisKKyAgICBjb25zdCBzdGQ6OmFycmF5PFRUeXBlICosIGtOdW1Db21wdXRlRHJp
dmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlwZXMgPSB7eworICAgICAgICBuZXcgVFR5cGUo
RWJ0VUludCwgNCksCisgICAgfX07CisKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAw
OyB1bmlmb3JtSW5kZXggPCBrTnVtQ29tcHV0ZURyaXZlclVuaWZvcm1zOyArK3VuaWZvcm1JbmRl
eCkKKyAgICB7CisgICAgICAgIFRGaWVsZCAqZHJpdmVyVW5pZm9ybUZpZWxkID0KKyAgICAgICAg
ICAgIG5ldyBURmllbGQoa0RyaXZlclVuaWZvcm1UeXBlc1t1bmlmb3JtSW5kZXhdLAorICAgICAg
ICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoa0NvbXB1dGVEcml2ZXJVbmlmb3JtTmFt
ZXNbdW5pZm9ybUluZGV4XSksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIGRyaXZlckZpZWxkTGlzdC0+cHVz
aF9iYWNrKGRyaXZlclVuaWZvcm1GaWVsZCk7CisgICAgfQorCisgICAgcmV0dXJuIERlY2xhcmVT
dHJ1Y3R1cmUoJnJvb3QsICZzeW1ib2xUYWJsZSwgZHJpdmVyRmllbGRMaXN0LCBFdnFVbmlmb3Jt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgp
LCAwLCBrVW5pZm9ybXNCbG9ja05hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZrVW5pZm9ybXNWYXJOYW1lLnJhd05hbWUoKSkKKyAgICAgICAgLnNlY29uZDsKK30K
KworLy8gVGhlIEFkZCpEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyIG9wZXJhdGlvbiBhZGRzIGFuIGlu
dGVybmFsIHVuaWZvcm0gYmxvY2sgdG8gYSBzaGFkZXIuIFRoZSBkcml2ZXIKKy8vIGJsb2NrIGlz
IHVzZWQgdG8gaW1wbGVtZW50IFZ1bGthbi1zcGVjaWZpYyBmZWF0dXJlcyBhbmQgd29ya2Fyb3Vu
ZHMuIFJldHVybnMgdGhlIGRyaXZlciB1bmlmb3JtcworLy8gdmFyaWFibGUuCisvLworLy8gVGhl
cmUgYXJlIEdyYXBoaWNzIGFuZCBDb21wdXRlIHZhcmlhdGlvbnMgYXMgdGhleSByZXF1aXJlIGRp
ZmZlcmVudCB1bmlmb3Jtcy4KK2NvbnN0IFRWYXJpYWJsZSAqQWRkR3JhcGhpY3NEcml2ZXJVbmlm
b3Jtc1RvU2hhZGVyKFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnZlY3RvcjxURmllbGQgKj4gJmFkZGl0aW9uYWxGaWVsZHMpCit7CisgICAgLy8gSW5pdCB0
aGUgZGVwdGggcmFuZ2UgdHlwZS4KKyAgICBURmllbGRMaXN0ICpkZXB0aFJhbmdlUGFyYW1zRmll
bGRzID0gbmV3IFRGaWVsZExpc3QoKTsKKyAgICBkZXB0aFJhbmdlUGFyYW1zRmllbGRzLT5wdXNo
X2JhY2sobmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwg
MSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW1tdXRhYmxlU3RyaW5nKCJuZWFyIiksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFs
KSk7CisgICAgZGVwdGhSYW5nZVBhcmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3
IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygiZmFy
IiksIGtOb1NvdXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisgICAgZGVwdGhSYW5nZVBh
cmFtc0ZpZWxkcy0+cHVzaF9iYWNrKG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBI
aWdoLCBFdnFHbG9iYWwsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygiZGlmZiIpLCBrTm9Tb3VyY2VMb2MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlw
ZTo6QW5nbGVJbnRlcm5hbCkpOworICAgIC8vIFRoaXMgYWRkaXRpb25hbCBmaWVsZCBtaWdodCBi
ZSB1c2VkIGJ5IHN1YmNsYXNzIHN1Y2ggYXMgVHJhbnNsYXRvck1ldGFsLgorICAgIGRlcHRoUmFu
Z2VQYXJhbXNGaWVsZHMtPnB1c2hfYmFjayhuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9hdCwg
RWJwSGlnaCwgRXZxR2xvYmFsLCAxLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmcoInJlc2VydmVkIiksIGtOb1NvdXJj
ZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xUeXBlOjpBbmdsZUludGVybmFsKSk7CisKKyAgICBjb25zdCBUU3RydWN0dXJlICplbXVs
YXRlZERlcHRoUmFuZ2VQYXJhbXMgPQorICAgICAgICBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAm
c3ltYm9sVGFibGUsIGRlcHRoUmFuZ2VQYXJhbXNGaWVsZHMsIEV2cUdsb2JhbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBUTWVtb3J5UXVhbGlmaWVyOjpDcmVhdGUoKSwgMCwga0VtdWxhdGVk
RGVwdGhSYW5nZVBhcmFtcy5yYXdOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbnVs
bHB0cikKKyAgICAgICAgICAgIC5maXJzdC0+Z2V0VHlwZSgpCisgICAgICAgICAgICAuZ2V0U3Ry
dWN0KCk7CisKKyAgICAvLyBUaGlzIGZpZWxkIGxpc3QgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9m
IEdyYXBoaWNzRHJpdmVyVW5pZm9ybXMgaW4gQ29udGV4dFZrLmNwcC4KKyAgICBURmllbGRMaXN0
ICpkcml2ZXJGaWVsZExpc3QgPSBuZXcgVEZpZWxkTGlzdDsKKworICAgIGNvbnN0IHN0ZDo6YXJy
YXk8VFR5cGUgKiwga051bUdyYXBoaWNzRHJpdmVyVW5pZm9ybXM+IGtEcml2ZXJVbmlmb3JtVHlw
ZXMgPSB7eworICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpLAorICAgICAgICBuZXcgVFR5
cGUoRWJ0RmxvYXQsIDIpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorICAgICAg
ICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0VUludCksICAv
LyB1aW50IGNsaXBEaXN0YW5jZXNFbmFibGVkOyAgLy8gMzIgYml0cyBmb3IgMzIgY2xpcCBkaXN0
YW5jZXMgbWF4CisgICAgICAgIG5ldyBUVHlwZShFYnRVSW50KSwKKyAgICAgICAgbmV3IFRUeXBl
KEVidFVJbnQpLAorICAgICAgICAvLyBOT1RFOiBUaGVyZSdzIGEgdmVjMyBnYXAgaGVyZSB0aGF0
IGNhbiBiZSB1c2VkIGluIHRoZSBmdXR1cmUKKyAgICAgICAgbmV3IFRUeXBlKEVidEludCwgNCks
CisgICAgICAgIG5ldyBUVHlwZShFYnRVSW50LCA0KSwKKyAgICAgICAgbmV3IFRUeXBlKGVtdWxh
dGVkRGVwdGhSYW5nZVBhcmFtcywgZmFsc2UpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQs
IDIsIDQpLAorICAgICAgICBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDQpLAorICAgIH19OworCisg
ICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwga051bUdyYXBo
aWNzRHJpdmVyVW5pZm9ybXM7ICsrdW5pZm9ybUluZGV4KQorICAgIHsKKyAgICAgICAgVEZpZWxk
ICpkcml2ZXJVbmlmb3JtRmllbGQgPQorICAgICAgICAgICAgbmV3IFRGaWVsZChrRHJpdmVyVW5p
Zm9ybVR5cGVzW3VuaWZvcm1JbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJs
ZVN0cmluZyhrR3JhcGhpY3NEcml2ZXJVbmlmb3JtTmFtZXNbdW5pZm9ybUluZGV4XSksIGtOb1Nv
dXJjZUxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5h
bCk7CisgICAgICAgIGRyaXZlckZpZWxkTGlzdC0+cHVzaF9iYWNrKGRyaXZlclVuaWZvcm1GaWVs
ZCk7CisgICAgfQorCisgICAgLy8gQmFjay1lbmQgc3BlY2lmaWMgZmllbGRzCisgICAgZHJpdmVy
RmllbGRMaXN0LT5pbnNlcnQoZHJpdmVyRmllbGRMaXN0LT5lbmQoKSwgYWRkaXRpb25hbEZpZWxk
cy5iZWdpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMu
ZW5kKCkpOworCisgICAgLy8gRGVmaW5lIGEgZHJpdmVyIHVuaWZvcm0gYmxvY2sgIkFOR0xFVW5p
Zm9ybUJsb2NrIiB3aXRoIGluc3RhbmNlIG5hbWUgIkFOR0xFVW5pZm9ybXMiLgorICAgIHJldHVy
biBEZWNsYXJlU3RydWN0dXJlKCZyb290LCAmc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwg
RXZxVW5pZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTWVtb3J5UXVhbGlmaWVy
OjpDcmVhdGUoKSwgMCwga1VuaWZvcm1zQmxvY2tOYW1lLnJhd05hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAma1VuaWZvcm1zVmFyTmFtZS5yYXdOYW1lKCkpCisgICAgICAgIC5z
ZWNvbmQ7Cit9CisKKy8vIERlY2xhcmVzIGEgbmV3IHZhcmlhYmxlIHRvIHJlcGxhY2UgZ2xfRGVw
dGhSYW5nZSwgaXRzIHZhbHVlcyBhcmUgZmVkIGZyb20gYSBkcml2ZXIgdW5pZm9ybS4KK0FOR0xF
X05PX0RJU0NBUkQgYm9vbCBSZXBsYWNlR0xEZXB0aFJhbmdlV2l0aERyaXZlclVuaWZvcm0oVENv
bXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFi
bGUgJmRyaXZlclVuaWZvcm1zKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBj
b21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworCisgICAgLy8gQ3JlYXRlIGEgc3ltYm9sIHJlZmVy
ZW5jZSB0byAiZ2xfRGVwdGhSYW5nZSIKKyAgICBjb25zdCBUVmFyaWFibGUgKmRlcHRoUmFuZ2VW
YXIgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUgKj4oCisgICAgICAgIHN5bWJvbFRhYmxl
LmZpbmRCdWlsdEluKEltbXV0YWJsZVN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCAwKSk7CisKKyAg
ICAvLyBBTkdMRVVuaWZvcm1zLmRlcHRoUmFuZ2UKKyAgICBUSW50ZXJtQmluYXJ5ICphbmdsZUVt
dWxhdGVkRGVwdGhSYW5nZVJlZiA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9y
bXMsIGtEZXB0aFJhbmdlKTsKKworICAgIC8vIFVzZSB0aGlzIHZhcmlhYmxlIGluc3RlYWQgb2Yg
Z2xfRGVwdGhSYW5nZSBldmVyeXdoZXJlLgorICAgIHJldHVybiBSZXBsYWNlVmFyaWFibGVXaXRo
VHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgZGVwdGhSYW5nZVZhciwgYW5nbGVFbXVsYXRlZERlcHRo
UmFuZ2VSZWYpOworfQorCitUSW50ZXJtU2VxdWVuY2UgKkdldE1haW5TZXF1ZW5jZShUSW50ZXJt
QmxvY2sgJnJvb3QpCit7CisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqbWFpbiA9IEZp
bmRNYWluKCZyb290KTsKKyAgICByZXR1cm4gbWFpbi0+Z2V0Qm9keSgpLT5nZXRTZXF1ZW5jZSgp
OworfQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyVHJhbnNmb3Jt
RmVlZGJhY2tPdXRwdXRUb01haW4oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtQmxvY2sgJnJvb3QpCit7CisgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSA9IGNv
bXBpbGVyLmdldFN5bWJvbFRhYmxlKCk7CisgICAgVFZhcmlhYmxlICp4ZmJQbGFjZWhvbGRlciA9
IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoIkBAIFhGQi1PVVQg
QEAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcg
VFR5cGUoKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisKKyAgICAvLyBBcHBlbmQgdGhl
IGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhZGVyLgorICAg
IHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZjb21waWxlciwgJnJvb3QsIG5ldyBUSW50ZXJt
U3ltYm9sKHhmYlBsYWNlaG9sZGVyKSwgJnN5bWJvbFRhYmxlKTsKK30KKworLy8gVGhpcyBvcGVy
YXRpb24gcGVyZm9ybXMgdGhlIHZpZXdwb3J0IGRlcHRoIHRyYW5zbGF0aW9uIG5lZWRlZCBieSBW
dWxrYW4uIEluIEdMIHRoZSB2aWV3cG9ydAorLy8gdHJhbnNmb3JtYXRpb24gaXMgc2xpZ2h0bHkg
ZGlmZmVyZW50IC0gc2VlIHRoZSBHTCAyLjAgc3BlYyBzZWN0aW9uICIyLjEyLjEgQ29udHJvbGxp
bmcgdGhlCisvLyBWaWV3cG9ydCIuIEluIFZ1bGthbiB0aGUgY29ycmVzcG9uZGluZyBzcGVjIHNl
Y3Rpb24gaXMgY3VycmVudGx5ICIyMy40LiBDb29yZGluYXRlCisvLyBUcmFuc2Zvcm1hdGlvbnMi
LgorLy8gVGhlIGVxdWF0aW9ucyByZWR1Y2UgdG8gYW4gZXhwcmVzc2lvbjoKKy8vCisvLyAgICAg
el92ayA9IDAuNSAqICh3X2dsICsgel9nbCkKKy8vCisvLyB3aGVyZSB6X3ZrIGlzIHRoZSBkZXB0
aCBvdXRwdXQgb2YgYSBWdWxrYW4gdmVydGV4IHNoYWRlciBhbmQgel9nbCBpcyB0aGUgc2FtZSBm
b3IgR0wuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBwZW5kVmVydGV4U2hhZGVyRGVwdGhDb3Jy
ZWN0aW9uVG9NYWluKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9v
dCkKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0gY29tcGlsZXIuZ2V0U3ltYm9s
VGFibGUoKTsKKworICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJblZhcmlh
YmxlOjpnbF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0gbmV3
IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworCisgICAgVFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZz
ZXRaID0gezJ9OworICAgIFRJbnRlcm1Td2l6emxlICpwb3NpdGlvblogICA9IG5ldyBUSW50ZXJt
U3dpenpsZShwb3NpdGlvblJlZiwgc3dpenpsZU9mZnNldFopOworCisgICAgVEludGVybUNvbnN0
YW50VW5pb24gKm9uZUhhbGYgPSBDcmVhdGVGbG9hdE5vZGUoMC41Zik7CisKKyAgICBUVmVjdG9y
PGludD4gc3dpenpsZU9mZnNldFcgPSB7M307CisgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9u
VyAgID0gbmV3IFRJbnRlcm1Td2l6emxlKHBvc2l0aW9uUmVmLT5kZWVwQ29weSgpLCBzd2l6emxl
T2Zmc2V0Vyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi56
ICsgZ2xfUG9zaXRpb24udykgKiAwLjUiLgorICAgIFRJbnRlcm1CaW5hcnkgKnpQbHVzVyA9IG5l
dyBUSW50ZXJtQmluYXJ5KEVPcEFkZCwgcG9zaXRpb25aLT5kZWVwQ29weSgpLCBwb3NpdGlvblct
PmRlZXBDb3B5KCkpOworICAgIFRJbnRlcm1CaW5hcnkgKmhhbGZaUGx1c1cgPSBuZXcgVEludGVy
bUJpbmFyeShFT3BNdWwsIHpQbHVzVywgb25lSGFsZi0+ZGVlcENvcHkoKSk7CisKKyAgICAvLyBD
cmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGds
X1Bvc2l0aW9uLncpICogMC41IgorICAgIFRJbnRlcm1UeXBlZCAqcG9zaXRpb25aTEhTID0gcG9z
aXRpb25aLT5kZWVwQ29weSgpOworICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgID0gbmV3
IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIHBvc2l0aW9uWkxIUywgaGFsZlpQ
bHVzVyk7CisKKyAgICAvLyBBcHBlbmQgdGhlIGFzc2lnbm1lbnQgYXMgYSBzdGF0ZW1lbnQgYXQg
dGhlIGVuZCBvZiB0aGUgc2hhZGVyLgorICAgIHJldHVybiBSdW5BdFRoZUVuZE9mU2hhZGVyKCZj
b21waWxlciwgJnJvb3QsIGFzc2lnbm1lbnQsICZzeW1ib2xUYWJsZSk7Cit9CisKKy8vIFRoaXMg
b3BlcmF0aW9uIHBlcmZvcm1zIEFuZHJvaWQgcHJlLXJvdGF0aW9uIGFuZCB5LWZsaXAuICBGb3Ig
QW5kcm9pZCAoYW5kIHBvdGVudGlhbGx5IG90aGVyCisvLyBwbGF0Zm9ybXMpLCB0aGUgZGV2aWNl
IG1heSByb3RhdGUsIHN1Y2ggdGhhdCB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGFwcGxpY2F0aW9u
IGlzIHJvdGF0ZWQKKy8vIHJlbGF0aXZlIHRvIHRoZSBuYXRpdmUgb3JpZW50YXRpb24gb2YgdGhl
IGRldmljZS4gIFRoaXMgaXMgY29ycmVjdGVkIGluIHBhcnQgYnkgbXVsdGlwbHlpbmcKKy8vIGds
X1Bvc2l0aW9uIGJ5IGEgbWF0Mi4KKy8vIFRoZSBlcXVhdGlvbnMgcmVkdWNlIHRvIGFuIGV4cHJl
c3Npb246CisvLworLy8gICAgIGdsX1Bvc2l0aW9uLnh5ID0gZ2xfUG9zaXRpb24ueHkgKiBwcmVS
b3RhdGlvbgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEFwcGVuZFByZVJvdGF0aW9uKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpCit7CisgICAgVFN5bWJvbFRhYmxlICZz
eW1ib2xUYWJsZSAgICAgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworICAgIFRJbnRlcm1C
aW5hcnkgKnByZVJvdGF0aW9uUmVmID0gQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlm
b3Jtcywga1ByZVJvdGF0aW9uKTsKKyAgICBUSW50ZXJtU3ltYm9sICpnbFBvcyAgICAgICAgICA9
IG5ldyBUSW50ZXJtU3ltYm9sKEJ1aWx0SW5WYXJpYWJsZTo6Z2xfUG9zaXRpb24oKSk7CisgICAg
VFZlY3RvcjxpbnQ+IHN3aXp6bGVPZmZzZXRYWSAgPSB7MCwgMX07CisgICAgVEludGVybVN3aXp6
bGUgKmdsUG9zWFkgICAgICAgPSBuZXcgVEludGVybVN3aXp6bGUoZ2xQb3MsIHN3aXp6bGVPZmZz
ZXRYWSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihnbF9Qb3NpdGlvbi54eSAq
IHByZVJvdGF0aW9uKSIKKyAgICBUSW50ZXJtQmluYXJ5ICp6Um90YXRlZCA9CisgICAgICAgIG5l
dyBUSW50ZXJtQmluYXJ5KEVPcE1hdHJpeFRpbWVzVmVjdG9yLCBwcmVSb3RhdGlvblJlZi0+ZGVl
cENvcHkoKSwgZ2xQb3NYWS0+ZGVlcENvcHkoKSk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGFzc2ln
bm1lbnQgImdsX1Bvc2l0aW9uLnh5ID0gKGdsX1Bvc2l0aW9uLnh5ICogcHJlUm90YXRpb24pIgor
ICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgPQorICAgICAgICBuZXcgVEludGVybUJpbmFy
eShUT3BlcmF0b3I6OkVPcEFzc2lnbiwgZ2xQb3NYWS0+ZGVlcENvcHkoKSwgelJvdGF0ZWQpOwor
CisgICAgLy8gQXBwZW5kIHRoZSBhc3NpZ25tZW50IGFzIGEgc3RhdGVtZW50IGF0IHRoZSBlbmQg
b2YgdGhlIHNoYWRlci4KKyAgICByZXR1cm4gUnVuQXRUaGVFbmRPZlNoYWRlcigmY29tcGlsZXIs
ICZyb290LCBhc3NpZ25tZW50LCAmc3ltYm9sVGFibGUpOworfQorCitBTkdMRV9OT19ESVNDQVJE
IGJvb2wgUm90YXRlQW5kRmxpcEJ1aWx0aW5WYXJpYWJsZShUQ29tcGlsZXIgJmNvbXBpbGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybVNlcXVlbmNlICZpbnNlcnRTZXF1ZW5jZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZmxpcFhZ
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFZhcmlhYmxlICZidWlsdGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSAmZmxpcHBlZFZhcmlhYmxlTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBl
ZCAmcGl2b3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQgKmZyYWdSb3RhdGlvbikKK3sKKyAgICBUU3ltYm9sVGFibGUgJnN5
bWJvbFRhYmxlID0gY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIC8vIENyZWF0ZSBh
IHN5bWJvbCByZWZlcmVuY2UgdG8gJ2J1aWx0aW4nLgorICAgIFRJbnRlcm1TeW1ib2wgKmJ1aWx0
aW5SZWYgPSBuZXcgVEludGVybVN5bWJvbCgmYnVpbHRpbik7CisKKyAgICAvLyBDcmVhdGUgYSBz
d2l6emxlIHRvICJidWlsdGluLnh5IgorICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WFkg
PSB7MCwgMX07CisgICAgVEludGVybVN3aXp6bGUgKmJ1aWx0aW5YWSAgICA9IG5ldyBUSW50ZXJt
U3dpenpsZShidWlsdGluUmVmLCBzd2l6emxlT2Zmc2V0WFkpOworCisgICAgLy8gQ3JlYXRlIGEg
c3ltYm9sIHJlZmVyZW5jZSB0byBvdXIgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBob2xkIHRoZSBt
b2RpZmllZCBidWlsdGluLgorICAgIGNvbnN0IFRUeXBlICp0eXBlID0gU3RhdGljVHlwZTo6R2V0
Rm9yVmVjPEVidEZsb2F0PigKKyAgICAgICAgRXZxR2xvYmFsLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihidWlsdGluLmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgVFZhcmlh
YmxlICpyZXBsYWNlbWVudFZhciA9IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBmbGlwcGVk
VmFyaWFibGVOYW1lLnJhd05hbWUoKSwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbGlwcGVkVmFyaWFibGVOYW1lLnN5bWJvbFR5cGUoKSk7Cisg
ICAgRGVjbGFyZUdsb2JhbFZhcmlhYmxlKCZyb290LCByZXBsYWNlbWVudFZhcik7CisgICAgVElu
dGVybVN5bWJvbCAqZmxpcHBlZEJ1aWx0aW5SZWYgPSBuZXcgVEludGVybVN5bWJvbChyZXBsYWNl
bWVudFZhcik7CisKKyAgICAvLyBVc2UgdGhpcyBuZXcgdmFyaWFibGUgaW5zdGVhZCBvZiAnYnVp
bHRpbicgZXZlcnl3aGVyZS4KKyAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmY29tcGlsZXIsICZy
b290LCAmYnVpbHRpbiwgcmVwbGFjZW1lbnRWYXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiKGJ1aWx0aW4ueHkg
KiBmcmFnUm90YXRpb24pIgorICAgIFRJbnRlcm1UeXBlZCAqcm90YXRlZFhZOworICAgIGlmIChm
cmFnUm90YXRpb24pCisgICAgeworICAgICAgICByb3RhdGVkWFkgPSBuZXcgVEludGVybUJpbmFy
eShFT3BNYXRyaXhUaW1lc1ZlY3RvciwgZnJhZ1JvdGF0aW9uLT5kZWVwQ29weSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGluWFktPmRlZXBDb3B5KCkpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBObyByb3RhdGlvbiBhcHBsaWVkLCB1
c2Ugb3JpZ2luYWwgdmFyaWFibGUuCisgICAgICAgIHJvdGF0ZWRYWSA9IGJ1aWx0aW5YWS0+ZGVl
cENvcHkoKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gIihidWlsdGlu
Lnh5IC0gcGl2b3QpICogZmxpcFhZICsgcGl2b3QKKyAgICBUSW50ZXJtQmluYXJ5ICpyZW1vdmVQ
aXZvdCA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcFN1Yiwgcm90YXRlZFhZLCAmcGl2b3QpOworICAg
IFRJbnRlcm1CaW5hcnkgKmludmVyc2VYWSAgID0gbmV3IFRJbnRlcm1CaW5hcnkoRU9wTXVsLCBy
ZW1vdmVQaXZvdCwgJmZsaXBYWSk7CisgICAgVEludGVybUJpbmFyeSAqcGx1c1Bpdm90ICAgPSBu
ZXcgVEludGVybUJpbmFyeShFT3BBZGQsIGludmVyc2VYWSwgcGl2b3QuZGVlcENvcHkoKSk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIGNvcnJlY3RlZCB2YXJpYWJsZSBhbmQgY29weSB0aGUgdmFsdWUg
b2YgdGhlIG9yaWdpbmFsIGJ1aWx0aW4uCisgICAgVEludGVybVNlcXVlbmNlICpzZXF1ZW5jZSA9
IG5ldyBUSW50ZXJtU2VxdWVuY2UoKTsKKyAgICBzZXF1ZW5jZS0+cHVzaF9iYWNrKGJ1aWx0aW5S
ZWYtPmRlZXBDb3B5KCkpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IFRJbnRl
cm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKGJ1aWx0aW4uZ2V0VHlwZSgpLCBzZXF1ZW5j
ZSk7CisgICAgVEludGVybUJpbmFyeSAqYXNzaWdubWVudCAgID0gbmV3IFRJbnRlcm1CaW5hcnko
RU9wSW5pdGlhbGl6ZSwgZmxpcHBlZEJ1aWx0aW5SZWYsIGFnZ3JlZ2F0ZSk7CisKKyAgICAvLyBD
cmVhdGUgYW4gYXNzaWdubWVudCB0byB0aGUgcmVwbGFjZWQgdmFyaWFibGUncyAueHkuCisgICAg
VEludGVybVN3aXp6bGUgKmNvcnJlY3RlZFhZID0KKyAgICAgICAgbmV3IFRJbnRlcm1Td2l6emxl
KGZsaXBwZWRCdWlsdGluUmVmLT5kZWVwQ29weSgpLCBzd2l6emxlT2Zmc2V0WFkpOworICAgIFRJ
bnRlcm1CaW5hcnkgKmFzc2lnblRvWSA9IG5ldyBUSW50ZXJtQmluYXJ5KEVPcEFzc2lnbiwgY29y
cmVjdGVkWFksIHBsdXNQaXZvdCk7CisKKyAgICAvLyBBZGQgdGhpcyBhc3NpZ21lbnQgYXQgdGhl
IGJlZ2lubmluZyBvZiB0aGUgbWFpbiBmdW5jdGlvbgorICAgIHsKKyAgICAgICAgVEludGVybUJp
bmFyeSAqbm9kZXNbXSA9IHthc3NpZ25tZW50LCBhc3NpZ25Ub1l9OworICAgICAgICBpbnNlcnRT
ZXF1ZW5jZS5pbnNlcnQoaW5zZXJ0U2VxdWVuY2UuYmVnaW4oKSwgc3RkOjpiZWdpbihub2Rlcyks
IHN0ZDo6ZW5kKG5vZGVzKSk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbXBpbGVyLnZhbGlkYXRl
QVNUKCZyb290KTsKK30KKworQU5HTEVfTk9fRElTQ0FSRCBib29sIEluc2VydEZyYWdDb29yZENv
cnJlY3Rpb24oVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxv
Y2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtU2VxdWVuY2UgJmluc2VydFNlcXVlbmNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlmb3Jt
cykKK3sKKyAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAgPSAqQ3JlYXRlRHJpdmVyVW5p
Zm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0ZsaXBYWSk7CisgICAgVEludGVybUJpbmFyeSAmcGl2
b3QgICAgICAgID0gKkNyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMsIGtIYWxm
UmVuZGVyQXJlYSk7CisgICAgVEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0gKGNvbXBpbGVP
cHRpb25zICYgU0hfQUREX1BSRV9ST1RBVElPTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRnJh
Z1JvdGF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGxw
dHI7CisgICAgcmV0dXJuIFJvdGF0ZUFuZEZsaXBCdWlsdGluVmFyaWFibGUoY29tcGlsZXIsIHJv
b3QsIGluc2VydFNlcXVlbmNlLCBmbGlwWFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKkJ1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0Nvb3JkKCksIGtGbGlwcGVkRnJh
Z0Nvb3JkTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXZv
dCwgZnJhZ1JvdGF0aW9uKTsKK30KKworVEludGVybUJpbmFyeSAqR2V0RHJpdmVyVW5pZm9ybURl
cHRoUmFuZ2VSZXNlcnZlZEZpZWxkUmVmKGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMp
Cit7CisgICAgVEludGVybUJpbmFyeSAqZGVwdGhSYW5nZSA9IENyZWF0ZURyaXZlclVuaWZvcm1S
ZWYoZHJpdmVyVW5pZm9ybXMsIGtEZXB0aFJhbmdlKTsKKworICAgIHJldHVybiBuZXcgVEludGVy
bUJpbmFyeShFT3BJbmRleERpcmVjdFN0cnVjdCwgZGVwdGhSYW5nZSwgQ3JlYXRlSW5kZXhOb2Rl
KDMpKTsKK30KKwordm9pZCBEZWNsYXJlUmlnaHRCZWZvcmVNYWluKFRJbnRlcm1CbG9jayAmcm9v
dCwgY29uc3QgVFZhcmlhYmxlICZ2YXIpCit7CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZp
bmRNYWluSW5kZXgoJnJvb3QpLCB7bmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmdmFyfX0pOworfQor
Cit2b2lkIEFkZEZyYWdDb2xvckRlY2xhcmF0aW9uKFRJbnRlcm1CbG9jayAmcm9vdCwgVFN5bWJv
bFRhYmxlICZzeW1ib2xUYWJsZSkKK3sKKyAgICByb290Lmluc2VydENoaWxkTm9kZXMoRmluZE1h
aW5JbmRleCgmcm9vdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZXtuZXcgVEludGVybURlY2xhcmF0aW9ue0J1aWx0SW5WYXJpYWJsZTo6Z2xfRnJhZ0NvbG9yKCl9
fSk7Cit9CisKK3ZvaWQgQWRkRnJhZ0RlcHRoRGVjbGFyYXRpb24oVEludGVybUJsb2NrICZyb290
LCBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKQoreworICAgIHJvb3QuaW5zZXJ0Q2hpbGROb2Rl
cyhGaW5kTWFpbkluZGV4KCZyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVy
bVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxlOjpnbF9GcmFn
RGVwdGgoKX19KTsKK30KKworQU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEZyYWdEYXRhRGVjbGFy
YXRpb24oVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFRT
eW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpOworICAg
IGNvbnN0IGludCBtYXhEcmF3QnVmZmVycyAgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5NYXhE
cmF3QnVmZmVyczsKKyAgICBUVHlwZSAqZ2xfRnJhZ0RhdGFUeXBlICAgID0gbmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCAxKTsKKyAgICBzdGQ6OnZlY3Rvcjxj
b25zdCBUVmFyaWFibGUgKj4gZ2xGcmFnRGF0YVNsb3RzOworICAgIFRJbnRlcm1TZXF1ZW5jZSBk
ZWNsYXJlR0xGcmFnZGF0YVNlcXVlbmNlOworCisgICAgLy8gQ3JlYXRlIGdsX0ZyYWdEYXRhXzAs
MSwyLDMKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heERyYXdCdWZmZXJzOyBpKyspCisgICAg
eworICAgICAgICBJbW11dGFibGVTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoc3RybGVuKCJnbF9GcmFn
RGF0YV8iKSArIDIpOworICAgICAgICBidWlsZGVyIDw8ICJnbF9GcmFnRGF0YV8iOworICAgICAg
ICBidWlsZGVyLmFwcGVuZERlY2ltYWwoaSk7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xG
cmFnRGF0YSA9CisgICAgICAgICAgICBuZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgYnVpbGRl
ciwgZ2xfRnJhZ0RhdGFUeXBlLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBURXh0ZW5zaW9uOjpVTkRFRklORUQpOworICAgICAgICBnbEZyYWdE
YXRhU2xvdHMucHVzaF9iYWNrKGdsRnJhZ0RhdGEpOworICAgICAgICBkZWNsYXJlR0xGcmFnZGF0
YVNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ue2dsRnJhZ0RhdGF9KTsK
KyAgICB9CisgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgoJnJvb3QpLCBk
ZWNsYXJlR0xGcmFnZGF0YVNlcXVlbmNlKTsKKworICAgIC8vIENyZWF0ZSBhbiBpbnRlcm5hbCBn
bF9GcmFnRGF0YSBhcnJheSB0eXBlLCBjb21wYXRpYmxlIHdpdGggaW5kZXhpbmcgc3ludGF4Lgor
ICAgIFRUeXBlICpnbF9GcmFnRGF0YVR5cGVBcnJheSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFHbG9iYWwsIDQsIDEpOworICAgIGdsX0ZyYWdEYXRhVHlwZUFycmF5LT5tYWtl
QXJyYXkobWF4RHJhd0J1ZmZlcnMpOworICAgIGNvbnN0IFRWYXJpYWJsZSAqZ2xGcmFnRGF0YUds
b2JhbCA9IG5ldyBUVmFyaWFibGUoJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImdsX0Zy
YWdEYXRhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbF9GcmFnRGF0YVR5cGVBcnJheSwgU3ltYm9sVHlwZTo6QnVpbHRJbik7CisKKyAg
ICBEZWNsYXJlR2xvYmFsVmFyaWFibGUoJnJvb3QsIGdsRnJhZ0RhdGFHbG9iYWwpOworICAgIGNv
bnN0IFRJbnRlcm1TeW1ib2wgKm9yaWdpbmFsR0xGcmFnRGF0YSA9IEZpbmRTeW1ib2xOb2RlKCZy
b290LCBJbW11dGFibGVTdHJpbmcoImdsX0ZyYWdEYXRhIikpOworICAgIEFTU0VSVChvcmlnaW5h
bEdMRnJhZ0RhdGEpOworCisgICAgLy8gUmVwbGFjZSBnbF9GcmFnRGF0YSgpIHdpdGggb3VyIGds
b2JhbGx5IGRlZmluZWQgZnJhZ2RhdGEKKyAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgmY29tcGls
ZXIsICZyb290LCAmKG9yaWdpbmFsR0xGcmFnRGF0YS0+dmFyaWFibGUoKSksIGdsRnJhZ0RhdGFH
bG9iYWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIEFz
c2lnbiBlYWNoIGFycmF5IGF0dHJpYnV0ZSB0byBhbiBvdXRwdXQKKyAgICBUSW50ZXJtQmxvY2sg
Kmluc2VydFNlcXVlbmNlID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbWF4RHJhd0J1ZmZlcnM7IGkrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
Z2xGcmFnRGF0YVNsb3QgICAgICAgICA9IG5ldyBUSW50ZXJtU3ltYm9sKGdsRnJhZ0RhdGFTbG90
c1tpXSk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZ2xGcmFnRGF0YUdsb2JhbFN5bWJvbCA9IG5l
dyBUSW50ZXJtU3ltYm9sKGdsRnJhZ0RhdGFHbG9iYWwpOworICAgICAgICBhdXRvICZhY2Nlc3Mg
ICAgICAgICAgICAgICAgICAgICAgICAgPSBBY2Nlc3NJbmRleCgqZ2xGcmFnRGF0YUdsb2JhbFN5
bWJvbCwgaSk7CisgICAgICAgIFRJbnRlcm1CaW5hcnkgKmFzc2lnbm1lbnQgPQorICAgICAgICAg
ICAgbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sIGdsRnJhZ0RhdGFTbG90
LCAmYWNjZXNzKTsKKyAgICAgICAgaW5zZXJ0U2VxdWVuY2UtPmFwcGVuZFN0YXRlbWVudChhc3Np
Z25tZW50KTsKKyAgICB9CisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIoJmNvbXBpbGVy
LCAmcm9vdCwgaW5zZXJ0U2VxdWVuY2UsICZzeW1ib2xUYWJsZSk7Cit9CisKK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBFbXVsYXRlSW5zdGFuY2VJRChUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJmRy
aXZlclVuaWZvcm1zKQoreworICAgIFRJbnRlcm1CaW5hcnkgKmVtdUluc3RhbmNlSUQgPQorICAg
ICAgICBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRW11SW5zdGFuY2VJ
REZpZWxkLnJhd05hbWUoKS5kYXRhKCkpOworICAgIGNvbnN0IFRWYXJpYWJsZSAqaW5zdGFuY2VJ
RCA9IEJ1aWx0SW5WYXJpYWJsZTo6Z2xfSW5zdGFuY2VJbmRleCgpOworICAgIHJldHVybiBSZXBs
YWNlVmFyaWFibGVXaXRoVHlwZWQoJmNvbXBpbGVyLCAmcm9vdCwgaW5zdGFuY2VJRCwgZW11SW5z
dGFuY2VJRCk7Cit9CisKKy8vIFVubGlrZSBWdWxrYW4gaGF2aW5nIGF1dG8gdmlld3BvcnQgZmxp
cHBpbmcgZXh0ZW5zaW9uLCBpbiBNZXRhbCB3ZSBoYXZlIHRvIGZsaXAgZ2xfUG9zaXRpb24ueQor
Ly8gbWFudWFsbHkuCisvLyBUaGlzIG9wZXJhdGlvbiBwZXJmb3JtcyBmbGlwcGluZyB0aGUgZ2xf
UG9zaXRpb24ueSB1c2luZyB0aGlzIGV4cHJlc3Npb246CisvLyBnbF9Qb3NpdGlvbi55ID0gZ2xf
UG9zaXRpb24ueSAqIG5lZ1ZpZXdwb3J0U2NhbGVZCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgQXBw
ZW5kVmVydGV4U2hhZGVyUG9zaXRpb25ZQ29ycmVjdGlvblRvTWFpbihUQ29tcGlsZXIgJmNvbXBp
bGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVN3aXp6
bGUgJm5lZ0ZsaXBZKQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxl
ci5nZXRTeW1ib2xUYWJsZSgpOworCisgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBC
dWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRp
b25SZWYgPSBuZXcgVEludGVybVN5bWJvbChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4g
c3dpenpsZU9mZnNldFk7CisgICAgc3dpenpsZU9mZnNldFkucHVzaF9iYWNrKDEpOworICAgIFRJ
bnRlcm1Td2l6emxlICpwb3NpdGlvblkgPSBuZXcgVEludGVybVN3aXp6bGUocG9zaXRpb25SZWYs
IHN3aXp6bGVPZmZzZXRZKTsKKworICAgIC8vIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiAiZ2xfUG9z
aXRpb24ueSAqIG5lZ0ZsaXBZIgorICAgIFRJbnRlcm1CaW5hcnkgKmludmVyc2VZID0gbmV3IFRJ
bnRlcm1CaW5hcnkoRU9wTXVsLCBwb3NpdGlvblktPmRlZXBDb3B5KCksICZuZWdGbGlwWSk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIGFzc2lnbm1lbnQgImdsX1Bvc2l0aW9uLnkgPSBnbF9Qb3NpdGlv
bi55ICogbmVnVmlld3BvcnRTY2FsZVkKKyAgICBUSW50ZXJtVHlwZWQgKnBvc2l0aW9uWUxIUyA9
IHBvc2l0aW9uWS0+ZGVlcENvcHkoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICphc3NpZ25tZW50ICA9
IG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBwb3NpdGlvbllMSFMsIGlu
dmVyc2VZKTsKKworICAgIC8vIEFwcGVuZCB0aGUgYXNzaWdubWVudCBhcyBhIHN0YXRlbWVudCBh
dCB0aGUgZW5kIG9mIHRoZSBzaGFkZXIuCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIo
JmNvbXBpbGVyLCAmcm9vdCwgYXNzaWdubWVudCwgJnN5bWJvbFRhYmxlKTsKK30KKworfSAgLy8g
bmFtZXNwYWNlCisKK1RyYW5zbGF0b3JNZXRhbERpcmVjdDo6VHJhbnNsYXRvck1ldGFsRGlyZWN0
KHNoOjpHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNoU2hhZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQorICAgIDogVENvbXBpbGVyKHR5
cGUsIHNwZWMsIG91dHB1dCkKK3t9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciAqVHJhbnNsYXRv
ck1ldGFsRGlyZWN0OjpHZXRDb3ZlcmFnZU1hc2tFbmFibGVkQ29uc3ROYW1lKCkKK3sKKyAgICBy
ZXR1cm4gY29uc3RhbnRfbmFtZXM6OmtDb3ZlcmFnZU1hc2tFbmFibGVkLnJhd05hbWUoKS5kYXRh
KCk7Cit9CisKKy8vIHN0YXRpYworY29uc3QgY2hhciAqVHJhbnNsYXRvck1ldGFsRGlyZWN0OjpH
ZXRSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWRDb25zdE5hbWUoKQoreworICAgIHJldHVybiBj
b25zdGFudF9uYW1lczo6a1Jhc3Rlcml6YXRpb25EaXNjYXJkRW5hYmxlZC5yYXdOYW1lKCkuZGF0
YSgpOworfQorCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgVHJhbnNsYXRvck1ldGFsRGlyZWN0Ojpp
bnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAg
ICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlID0gJmdldFN5bWJvbFRhYmxlKCk7CisKKyAgICBU
VHlwZSAqYm9vbFR5cGUgPSBuZXcgVFR5cGUoRWJ0Qm9vbCk7CisgICAgYm9vbFR5cGUtPnNldFF1
YWxpZmllcihFdnFDb25zdCk7CisgICAgVFZhcmlhYmxlICpkaXNjYXJkRW5hYmxlZFZhciA9Cisg
ICAgICAgIG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGNvbnN0YW50X25hbWVzOjprUmFzdGVy
aXphdGlvbkRpc2NhcmRFbmFibGVkLnJhd05hbWUoKSwgYm9vbFR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJpemF0aW9uRGlzY2FyZEVuYWJsZWQuc3lt
Ym9sVHlwZSgpKTsKKworICAgIGNvbnN0IFRWYXJpYWJsZSAqcG9zaXRpb24gID0gQnVpbHRJblZh
cmlhYmxlOjpnbF9Qb3NpdGlvbigpOworICAgIFRJbnRlcm1TeW1ib2wgKnBvc2l0aW9uUmVmID0g
bmV3IFRJbnRlcm1TeW1ib2wocG9zaXRpb24pOworCisgICAgLy8gQ3JlYXRlIHZlYzQoLTMsIC0z
LCAtMywgMSk6CisgICAgYXV0byB2ZWM0VHlwZSAgICAgICAgICAgICA9IG5ldyBUVHlwZShFYnRG
bG9hdCwgNCk7CisgICAgVEludGVybVNlcXVlbmNlICp2ZWM0QXJncyA9IG5ldyBUSW50ZXJtU2Vx
dWVuY2UoKTsKKyAgICB2ZWM0QXJncy0+cHVzaF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgtMy4wZikp
OworICAgIHZlYzRBcmdzLT5wdXNoX2JhY2soQ3JlYXRlRmxvYXROb2RlKC0zLjBmKSk7CisgICAg
dmVjNEFyZ3MtPnB1c2hfYmFjayhDcmVhdGVGbG9hdE5vZGUoLTMuMGYpKTsKKyAgICB2ZWM0QXJn
cy0+cHVzaF9iYWNrKENyZWF0ZUZsb2F0Tm9kZSgxLjBmKSk7CisgICAgVEludGVybUFnZ3JlZ2F0
ZSAqY29uc3RWYXJDb25zdHJ1Y3RvciA9CisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0
ZUNvbnN0cnVjdG9yKCp2ZWM0VHlwZSwgdmVjNEFyZ3MpOworCisgICAgLy8gQ3JlYXRlIHRoZSBh
c3NpZ25tZW50ICJnbF9Qb3NpdGlvbiA9IHZlYzQoLTMsIC0zLCAtMywgMSkiCisgICAgVEludGVy
bUJpbmFyeSAqYXNzaWdubWVudCA9CisgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRv
cjo6RU9wQXNzaWduLCBwb3NpdGlvblJlZi0+ZGVlcENvcHkoKSwgY29uc3RWYXJDb25zdHJ1Y3Rv
cik7CisKKyAgICBUSW50ZXJtQmxvY2sgKmRpc2NhcmRCbG9jayA9IG5ldyBUSW50ZXJtQmxvY2s7
CisgICAgZGlzY2FyZEJsb2NrLT5hcHBlbmRTdGF0ZW1lbnQoYXNzaWdubWVudCk7CisKKyAgICBU
SW50ZXJtU3ltYm9sICpkaXNjYXJkRW5hYmxlZCA9IG5ldyBUSW50ZXJtU3ltYm9sKGRpc2NhcmRF
bmFibGVkVmFyKTsKKyAgICBUSW50ZXJtSWZFbHNlICppZkNhbGwgICAgICAgICA9IG5ldyBUSW50
ZXJtSWZFbHNlKGRpc2NhcmRFbmFibGVkLCBkaXNjYXJkQmxvY2ssIG51bGxwdHIpOworCisgICAg
cmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIodGhpcywgJnJvb3QsIGlmQ2FsbCwgc3ltYm9sVGFi
bGUpOworfQorCisvLyBNZXRhbCBuZWVkcyB0byBpbnZlcnNlIHRoZSBkZXB0aCBpZiBkZXB0aFJh
bmdlIGlzIGlzIHJldmVyc2Ugb3JkZXIsIGkuZS4gZGVwdGggbmVhciA+IGRlcHRoIGZhcgorLy8g
VGhpcyBpcyBhY2hpZXZlZCBieSBtdWx0aXBseSB0aGUgZGVwdGggdmFsdWUgd2l0aCBzY2FsZSB2
YWx1ZSBzdG9yZWQgaW4KKy8vIGRyaXZlciB1bmlmb3JtJ3MgZGVwdGhSYW5nZS5yZXNlcnZlZAor
Ym9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zZm9ybURlcHRoQmVmb3JlQ29ycmVjdGlv
bihUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMp
Cit7CisgICAgY29uc3QgVFZhcmlhYmxlICpwb3NpdGlvbiAgPSBCdWlsdEluVmFyaWFibGU6Omds
X1Bvc2l0aW9uKCk7CisgICAgVEludGVybVN5bWJvbCAqcG9zaXRpb25SZWYgPSBuZXcgVEludGVy
bVN5bWJvbChwb3NpdGlvbik7CisKKyAgICBUVmVjdG9yPGludD4gc3dpenpsZU9mZnNldFogPSB7
Mn07CisgICAgVEludGVybVN3aXp6bGUgKnBvc2l0aW9uWiAgID0gbmV3IFRJbnRlcm1Td2l6emxl
KHBvc2l0aW9uUmVmLCBzd2l6emxlT2Zmc2V0Wik7CisKKyAgICBUSW50ZXJtQmluYXJ5ICp2aWV3
cG9ydFpTY2FsZSA9IEdldERyaXZlclVuaWZvcm1EZXB0aFJhbmdlUmVzZXJ2ZWRGaWVsZFJlZihk
cml2ZXJVbmlmb3Jtcyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIGV4cHJlc3Npb24gImdsX1Bvc2l0
aW9uLnogKiBkZXB0aFJhbmdlLnJlc2VydmVkIi4KKyAgICBUSW50ZXJtQmluYXJ5ICp6U2NhbGUg
PSBuZXcgVEludGVybUJpbmFyeShFT3BNdWwsIHBvc2l0aW9uWi0+ZGVlcENvcHkoKSwgdmlld3Bv
cnRaU2NhbGUpOworCisgICAgLy8gQ3JlYXRlIHRoZSBhc3NpZ25tZW50ICJnbF9Qb3NpdGlvbi56
ID0gZ2xfUG9zaXRpb24ueiAqIGRlcHRoUmFuZ2UucmVzZXJ2ZWQiCisgICAgVEludGVybVR5cGVk
ICpwb3NpdGlvblpMSFMgPSBwb3NpdGlvblotPmRlZXBDb3B5KCk7CisgICAgVEludGVybUJpbmFy
eSAqYXNzaWdubWVudCAgPSBuZXcgVEludGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcEFzc2lnbiwg
cG9zaXRpb25aTEhTLCB6U2NhbGUpOworCisgICAgcmV0dXJuIFJ1bkF0VGhlRW5kT2ZTaGFkZXIo
dGhpcywgJnJvb3QsIGFzc2lnbm1lbnQsICZnZXRTeW1ib2xUYWJsZSgpKTsKK30KKwordm9pZCBU
cmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZv
cm1GaWVsZHMoCisgICAgc3RkOjp2ZWN0b3I8VEZpZWxkICo+ICZmaWVsZHNPdXQpCit7CisgICAg
Ly8gQWRkIGNvdmVyYWdlIG1hc2sgdG8gZHJpdmVyIHVuaWZvcm0uIE1ldGFsIGRvZXNuJ3QgaGF2
ZSBidWlsdC1pbiBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUKKyAgICAvLyBlcXVpdmFsZW50IGZ1
bmN0aW9uYWxpdHksIG5lZWRzIHRvIGVtdWxhdGUgaXQgdXNpbmcgZnJhZ21lbnQgc2hhZGVyJ3Mg
W1tzYW1wbGVfbWFza11dIG91dHB1dAorICAgIC8vIHZhbHVlLgorICAgIFRGaWVsZCAqY292ZXJh
Z2VNYXNrRmllbGQgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRVSW50KSwga0NvdmVyYWdlTWFz
a0ZpZWxkLnJhd05hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrTm9Tb3VyY2VMb2MsIGtDb3ZlcmFnZU1hc2tGaWVsZC5zeW1ib2xUeXBlKCkpOworICAg
IGZpZWxkc091dC5wdXNoX2JhY2soY292ZXJhZ2VNYXNrRmllbGQpOworCisgICAgaWYgKG1FbXVs
YXRlZEluc3RhbmNlSUQpCisgICAgeworICAgICAgICBURmllbGQgKmVtdUluc3RhbmNlSURGaWVs
ZCA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEludCksIGtFbXVJbnN0YW5jZUlERmllbGQucmF3
TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a05vU291cmNlTG9jLCBrRW11SW5zdGFuY2VJREZpZWxkLnN5bWJvbFR5cGUoKSk7CisgICAgICAg
IGZpZWxkc091dC5wdXNoX2JhY2soZW11SW5zdGFuY2VJREZpZWxkKTsKKyAgICB9Cit9CisKK1RJ
bnRlcm1Td2l6emxlICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmdldERyaXZlclVuaWZvcm1OZWdG
bGlwWVJlZigKKyAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKSBjb25zdAorewor
ICAgIC8vIENyZWF0ZSBhIHN3aXp6bGUgdG8gIm5lZ0ZsaXBYWS55IgorICAgIFRJbnRlcm1CaW5h
cnkgKm5lZ0ZsaXBYWSAgICA9IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVyVW5pZm9ybXMs
IGtOZWdGbGlwWFkpOworICAgIFRWZWN0b3I8aW50PiBzd2l6emxlT2Zmc2V0WSA9IHsxfTsKKyAg
ICBUSW50ZXJtU3dpenpsZSAqbmVnRmxpcFkgICAgPSBuZXcgVEludGVybVN3aXp6bGUobmVnRmxp
cFhZLCBzd2l6emxlT2Zmc2V0WSk7CisgICAgcmV0dXJuIG5lZ0ZsaXBZOworfQorCitzdGF0aWMg
c3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5nPiBHZXRNc2xLZXl3b3JkcygpCit7CisgICAgc3RkOjpz
ZXQ8SW1tdXRhYmxlU3RyaW5nPiBrZXl3b3JkczsKKworICAgIGtleXdvcmRzLmVtcGxhY2UoImFs
aWduYXMiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJhbGlnbm9mIik7CisgICAga2V5d29yZHMu
ZW1wbGFjZSgiYXNfdHlwZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImF1dG8iKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJjYXRjaCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNoYXIiKTsK
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjbGFzcyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImNv
bnN0X2Nhc3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjb25zdGFudCIpOworICAgIGtleXdv
cmRzLmVtcGxhY2UoImNvbnN0ZXhwciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImRlY2x0eXBl
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZGVsZXRlIik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgiZGV2aWNlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZHluYW1pY19jYXN0Iik7CisgICAg
a2V5d29yZHMuZW1wbGFjZSgiZW51bSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImV4cGxpY2l0
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZXhwb3J0Iik7CisgICAga2V5d29yZHMuZW1wbGFj
ZSgiZXh0ZXJuIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiZnJhZ21lbnQiKTsKKyAgICBrZXl3
b3Jkcy5lbXBsYWNlKCJmcmllbmQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJnb3RvIik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgiaGFsZiIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImlubGlu
ZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImludDE2X3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJpbnQzMl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgiaW50NjRfdCIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoImludDhfdCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoImtlcm5lbCIp
OworICAgIGtleXdvcmRzLmVtcGxhY2UoImxvbmciKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJt
YWluMCIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm1ldGFsIik7CisgICAga2V5d29yZHMuZW1w
bGFjZSgibXV0YWJsZSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm5hbWVzcGFjZSIpOworICAg
IGtleXdvcmRzLmVtcGxhY2UoIm5ldyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm5vZXhjZXB0
Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgibnVsbHB0cl90Iik7CisgICAga2V5d29yZHMuZW1w
bGFjZSgibnVsbHB0ciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoIm9wZXJhdG9yIik7CisgICAg
a2V5d29yZHMuZW1wbGFjZSgib3ZlcnJpZGUiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJwcml2
YXRlIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgicHJvdGVjdGVkIik7CisgICAga2V5d29yZHMu
ZW1wbGFjZSgicHRyZGlmZl90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgicHVibGljIik7Cisg
ICAga2V5d29yZHMuZW1wbGFjZSgicmF5X2RhdGEiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJy
ZWdpc3RlciIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInNob3J0Iik7CisgICAga2V5d29yZHMu
ZW1wbGFjZSgic2lnbmVkIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic2l6ZV90Iik7CisgICAg
a2V5d29yZHMuZW1wbGFjZSgic2l6ZW9mIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgic3RhZ2Vf
aW4iKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWNfYXNzZXJ0Iik7CisgICAga2V5d29y
ZHMuZW1wbGFjZSgic3RhdGljX2Nhc3QiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0aWMi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0ZW1wbGF0ZSIpOworICAgIGtleXdvcmRzLmVtcGxh
Y2UoInRoaXMiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRfbG9jYWwiKTsKKyAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRn
cm91cF9pbWFnZWJsb2NrIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkZ3JvdXAiKTsK
KyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJvdyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInRy
eSIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInR5cGVkZWYiKTsKKyAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJ0eXBlaWQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0eXBlbmFtZSIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoInVjaGFyIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidWludDE2X3Qi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1aW50MzJfdCIpOworICAgIGtleXdvcmRzLmVtcGxh
Y2UoInVpbnQ2NF90Iik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidWludDhfdCIpOworICAgIGtl
eXdvcmRzLmVtcGxhY2UoInVuaW9uIik7CisgICAga2V5d29yZHMuZW1wbGFjZSgidW5zaWduZWQi
KTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1c2hvcnQiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJ1c2luZyIpOworICAgIGtleXdvcmRzLmVtcGxhY2UoInZlcnRleCIpOworICAgIGtleXdvcmRz
LmVtcGxhY2UoInZpcnR1YWwiKTsKKyAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2b2xhdGlsZSIpOwor
ICAgIGtleXdvcmRzLmVtcGxhY2UoIndjaGFyX3QiKTsKKworICAgIHJldHVybiBrZXl3b3JkczsK
K30KKworYm9vbCBUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OnRyYW5zbGF0ZUltcGwoVEludGVybUJs
b2NrICZyb290LCBTaENvbXBpbGVPcHRpb25zIGNvbXBpbGVPcHRpb25zKQoreworICAgIFRTeW1i
b2xUYWJsZSAmc3ltYm9sVGFibGUgPSBnZXRTeW1ib2xUYWJsZSgpOworICAgIElkR2VuIGlkR2Vu
OworICAgIFByb2dyYW1QcmVsdWRlQ29uZmlnIHBwYzsKKworICAgIGlmICghV3JhcE1haW4oKnRo
aXMsIGlkR2VuLCByb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBUSW5mb1NpbmtCYXNlICZzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisjaWYgMAorICAg
IGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICB7CisgICAgICAg
IGlmICghU2hhZGVyQnVpbHRpbnNXb3JrYXJvdW5kKHRoaXMsICZyb290LCAmc3ltYm9sVGFibGUs
IGNvbXBpbGVPcHRpb25zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBTdHJpcCBhbnkgaW5hY3RpdmUgdmFy
aWFibGVzIGZyb20gdGhlIHByb2dyYW0uCisgICAgaWYgKCFSZW1vdmVJbmFjdGl2ZUludGVyZmFj
ZVZhcmlhYmxlcyh0aGlzLCAmcm9vdCwgZ2V0QXR0cmlidXRlcygpLCBnZXRJbnB1dFZhcnlpbmdz
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXRwdXRW
YXJpYWJsZXMoKSwgZ2V0VW5pZm9ybXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldEludGVyZmFjZUJsb2NrcygpKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXcml0ZSBvdXQgZGVmYXVsdCB1bmlmb3JtcyBpbnRv
IGEgdW5pZm9ybSBibG9jayBhc3NpZ25lZCB0byBhIHNwZWNpZmljIHNldC9iaW5kaW5nLgorICAg
IGludCBkZWZhdWx0VW5pZm9ybUNvdW50ICAgICAgICAgICA9IDA7CisgICAgaW50IGFnZ3JlZ2F0
ZVR5cGVzVXNlZEZvclVuaWZvcm1zID0gMDsKKyAgICBpbnQgYXRvbWljQ291bnRlckNvdW50ICAg
ICAgICAgICAgPSAwOworICAgIGZvciAoY29uc3QgYXV0byAmdW5pZm9ybSA6IGdldFVuaWZvcm1z
KCkpCisgICAgeworICAgICAgICBpZiAoIXVuaWZvcm0uaXNCdWlsdEluKCkgJiYgdW5pZm9ybS5h
Y3RpdmUgJiYgIWdsOjpJc09wYXF1ZVR5cGUodW5pZm9ybS50eXBlKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgKytkZWZhdWx0VW5pZm9ybUNvdW50OworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHVuaWZvcm0uaXNTdHJ1Y3QoKSB8fCB1bmlmb3JtLmlzQXJyYXlPZkFycmF5cygpKQorICAgICAg
ICB7CisgICAgICAgICAgICArK2FnZ3JlZ2F0ZVR5cGVzVXNlZEZvclVuaWZvcm1zOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHVuaWZvcm0uYWN0aXZlICYmIGdsOjpJc0F0b21pY0NvdW50ZXJU
eXBlKHVuaWZvcm0udHlwZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrYXRvbWljQ291bnRl
ckNvdW50OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFnZ3JlZ2F0ZVR5cGVzVXNlZEZv
clVuaWZvcm1zID4gMCkKKyAgICB7CisgICAgICAgIGlmICghTmFtZUVtYmVkZGVkU3RydWN0VW5p
Zm9ybXModGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmV3cml0ZVN0cnVjdFNh
bXBsZXJzUmVzdWx0OworICAgICAgICBpbnQgcmVtb3ZlZFVuaWZvcm1zQ291bnQ7CisKKyAgICAg
ICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfVVNFX09MRF9SRVdSSVRFX1NUUlVDVF9TQU1QTEVS
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV3cml0ZVN0cnVjdFNhbXBsZXJzUmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBSZXdyaXRlU3RydWN0U2FtcGxlcnNPbGQodGhpcywgJnJvb3QsICZz
eW1ib2xUYWJsZSwgJnJlbW92ZWRVbmlmb3Jtc0NvdW50KTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCA9
CisgICAgICAgICAgICAgICAgUmV3cml0ZVN0cnVjdFNhbXBsZXJzKHRoaXMsICZyb290LCAmc3lt
Ym9sVGFibGUsICZyZW1vdmVkVW5pZm9ybXNDb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIXJld3JpdGVTdHJ1Y3RTYW1wbGVyc1Jlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHRVbmlmb3JtQ291bnQgLT0g
cmVtb3ZlZFVuaWZvcm1zQ291bnQ7CisKKyNpZiAwCisgICAgICAgIC8vIFdlIG11c3QgZGVjbGFy
ZSB0aGUgc3RydWN0IHR5cGVzIGJlZm9yZSB1c2luZyB0aGVtLgorICAgICAgICBEZWNsYXJlU3Ry
dWN0VHlwZXNUcmF2ZXJzZXIgc3RydWN0VHlwZXNUcmF2ZXJzZXIob3V0cHV0TVNMKTsKKyAgICAg
ICAgcm9vdC0+dHJhdmVyc2UoJnN0cnVjdFR5cGVzVHJhdmVyc2VyKTsKKyAgICAgICAgaWYgKCFz
dHJ1Y3RUeXBlc1RyYXZlcnNlci51cGRhdGVUcmVlKHRoaXMsIHJvb3QpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAg
IGlmIChjb21waWxlT3B0aW9ucyAmIFNIX0VNVUxBVEVfU0VBTUZVTF9DVUJFX01BUF9TQU1QTElO
RykKKyAgICB7CisgICAgICAgIGlmICghUmV3cml0ZUN1YmVNYXBTYW1wbGVyc0FzMkRBcnJheSh0
aGlzLCAmcm9vdCwgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
I2lmIDAKKyAgICAvLyBXcml0ZSBkZWZhdWx0IHVuaWZvcm0gYmxvY2sKKyAgICBpZiAoZGVmYXVs
dFVuaWZvcm1Db3VudCA+IDApCisgICAgeworICAgICAgICBnbDo6U2hhZGVyVHlwZSBzaGFkZXJU
eXBlID0gZ2w6OkZyb21HTGVudW08Z2w6OlNoYWRlclR5cGU+KGdldFNoYWRlclR5cGUoKSk7Cisg
ICAgICAgIHNpbmsgPDwgIlxuc3RydWN0ICIgPDwga0RlZmF1bHRVbmlmb3JtTmFtZXNbc2hhZGVy
VHlwZV0gPDwgIlxue1xuIjsKKyAgICAgICAgRGVjbGFyZURlZmF1bHRVbmlmb3Jtc1RyYXZlcnNl
ciBkZWZhdWx0VHJhdmVyc2VyKCZzaW5rLCBnZXRIYXNoRnVuY3Rpb24oKSwgJmdldE5hbWVNYXAo
KSk7CisgICAgICAgIHJvb3QtPnRyYXZlcnNlKCZkZWZhdWx0VHJhdmVyc2VyKTsKKyAgICAgICAg
aWYgKCFkZWZhdWx0VHJhdmVyc2VyLnVwZGF0ZVRyZWUodGhpcywgcm9vdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHNpbmsgPDwg
In07XG4iOworICAgIH0KKyNlbmRpZgorCisgICAgY29uc3QgVFZhcmlhYmxlICZkcml2ZXJVbmlm
b3JtcyA9ICpbJl0oKSB7CisgICAgICAgIGlmIChnZXRTaGFkZXJUeXBlKCkgPT0gR0xfQ09NUFVU
RV9TSEFERVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBBZGRDb21wdXRlRHJpdmVy
VW5pZm9ybXNUb1NoYWRlcihyb290LCBzeW1ib2xUYWJsZSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxURmllbGQgKj4gYWRkaXRp
b25hbEZpZWxkczsKKyAgICAgICAgICAgIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVu
aWZvcm1GaWVsZHMoYWRkaXRpb25hbEZpZWxkcyk7CisgICAgICAgICAgICByZXR1cm4gQWRkR3Jh
cGhpY3NEcml2ZXJVbmlmb3Jtc1RvU2hhZGVyKHJvb3QsIHN5bWJvbFRhYmxlLCBhZGRpdGlvbmFs
RmllbGRzKTsKKyAgICAgICAgfQorICAgIH0oKTsKKworICAgIGlmIChhdG9taWNDb3VudGVyQ291
bnQgPiAwKQorICAgIHsKKyAgICAgICAgLy8gQU5HTEVVbmlmb3Jtcy5hY2JCdWZmZXJPZmZzZXRz
CisgICAgICAgIGNvbnN0IFRJbnRlcm1CaW5hcnkgKmFjYkJ1ZmZlck9mZnNldHMgPQorICAgICAg
ICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0FjYkJ1ZmZlck9m
ZnNldHMpOworCisgICAgICAgIGlmICghUmV3cml0ZUF0b21pY0NvdW50ZXJzKHRoaXMsICZyb290
LCAmc3ltYm9sVGFibGUsIGFjYkJ1ZmZlck9mZnNldHMpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZ2V0U2hhZGVy
VmVyc2lvbigpID49IDMxMCkKKyAgICB7CisgICAgICAgIC8vIFZ1bGthbiBkb2Vzbid0IHN1cHBv
cnQgQXRvbWljIFN0b3JhZ2UgYXMgYSBTdG9yYWdlIENsYXNzLCBidXQgd2UndmUgc2VlbgorICAg
ICAgICAvLyBjYXNlcyB3aGVyZSBidWlsdGlucyBhcmUgdXNpbmcgaXQgZXZlbiB3aXRoIG5vIGFj
dGl2ZSBhdG9taWMgY291bnRlcnMuCisgICAgICAgIC8vIFRoaXMgcGFzcyBzaW1wbHkgcmVtb3Zl
cyB0aG9zZSBidWlsdGlucyBpbiB0aGF0IHNjZW5hcmlvLgorICAgICAgICBpZiAoIVJlbW92ZUF0
b21pY0NvdW50ZXJCdWlsdGlucyh0aGlzLCAmcm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChnZXRTaGFkZXJUeXBl
KCkgIT0gR0xfQ09NUFVURV9TSEFERVIpCisgICAgeworICAgICAgICBpZiAoIVJlcGxhY2VHTERl
cHRoUmFuZ2VXaXRoRHJpdmVyVW5pZm9ybSgqdGhpcywgcm9vdCwgZHJpdmVyVW5pZm9ybXMpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworI2lmIDAK
KyAgICAgICAgLy8gQWRkIHNwZWNpYWxpemF0aW9uIGNvbnN0YW50IGRlY2xhcmF0aW9ucy4gIFRo
ZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBzcGVjaWFsaXphdGlvbgorICAgICAgICAvLyBjb25zdGFu
dCBpcyBpcnJlbGV2YW50LCBhcyBpdCB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIHRoZSBwaXBl
bGluZS4KKyAgICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5F
X1JBU1RFUl9FTVVMQVRJT04pCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpbmsgPDwgImxheW91
dChjb25zdGFudF9pZD0iCisgICAgICAgICAgICAgICAgIDw8IHN0YXRpY19jYXN0PHVpbnQzMl90
Pih2azo6U3BlY2lhbGl6YXRpb25Db25zdGFudElkOjpMaW5lUmFzdGVyRW11bGF0aW9uKQorICAg
ICAgICAgICAgICAgICA8PCAiKSBjb25zdCBib29sICIgPDwga0xpbmVSYXN0ZXJFbXVsYXRpb25T
cGVjQ29uc3RWYXJOYW1lIDw8ICIgPSBmYWxzZTtcblxuIjsKKyAgICAgICAgfQorI2VuZGlmCisg
ICAgfQorCisgICAgeworICAgICAgICBib29sIHVzZXNJbnN0YW5jZUlkID0gZmFsc2U7CisgICAg
ICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJnZhciA6IG1BdHRyaWJ1dGVzKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodmFyLmlzQnVpbHRJbigpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICh2YXIubmFtZSA9PSAiZ2xfSW5zdGFuY2VJRCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB1c2VzSW5zdGFuY2VJZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVz
ZXNJbnN0YW5jZUlkKQorICAgICAgICB7CisgICAgICAgICAgICByb290Lmluc2VydENoaWxkTm9k
ZXMoCisgICAgICAgICAgICAgICAgRmluZE1haW5JbmRleCgmcm9vdCksCisgICAgICAgICAgICAg
ICAgVEludGVybVNlcXVlbmNle25ldyBUSW50ZXJtRGVjbGFyYXRpb257QnVpbHRJblZhcmlhYmxl
OjpnbF9JbnN0YW5jZUlEKCl9fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZWNsYXJl
IGdsX0ZyYWdDb2xvciBhbmQgZ2xGcmFnRGF0YSBhcyB3ZWJnbF9GcmFnQ29sb3IgYW5kIHdlYmds
X0ZyYWdEYXRhCisgICAgLy8gaWYgaXQncyBjb3JlIHByb2ZpbGUgc2hhZGVycyBhbmQgdGhleSBh
cmUgdXNlZC4KKyAgICBpZiAoZ2V0U2hhZGVyVHlwZSgpID09IEdMX0ZSQUdNRU5UX1NIQURFUikK
KyAgICB7CisgICAgICAgIGJvb2wgdXNlc1BvaW50Q29vcmQgID0gZmFsc2U7CisgICAgICAgIGJv
b2wgdXNlc0ZyYWdDb29yZCAgID0gZmFsc2U7CisgICAgICAgIGJvb2wgdXNlc0Zyb250RmFjaW5n
ID0gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJmlucHV0VmFyeWlu
ZyA6IG1JbnB1dFZhcnlpbmdzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5wdXRWYXJ5
aW5nLmlzQnVpbHRJbigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbnB1
dFZhcnlpbmcubmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB1c2VzUG9pbnRDb29yZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFn
Q29vcmQiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdD
b29yZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGlucHV0VmFyeWluZy5uYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB1c2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdXNlc0Zy
YWdDb2xvciA9IGZhbHNlOworICAgICAgICBib29sIHVzZXNGcmFnRGF0YSAgPSBmYWxzZTsKKyAg
ICAgICAgYm9vbCB1c2VzRnJhZ0RlcHRoID0gZmFsc2U7CisgICAgICAgIGZvciAoY29uc3QgU2hh
ZGVyVmFyaWFibGUgJm91dHB1dFZhcnlpbmcgOiBtT3V0cHV0VmFyaWFibGVzKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5pc0J1aWx0SW4oKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFnQ29s
b3IiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdDb2xv
ciA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91
dHB1dFZhcnlpbmcubmFtZSA9PSAiZ2xfRnJhZ0RhdGEiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0cHV0VmFyeWluZy5uYW1lID09ICJnbF9GcmFn
RGVwdGgiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlc0ZyYWdE
ZXB0aCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNl
c0ZyYWdDb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgQWRkRnJhZ0NvbG9yRGVjbGFyYXRp
b24ocm9vdCwgc3ltYm9sVGFibGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNGcmFn
RGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFBZGRGcmFnRGF0YURlY2xhcmF0aW9u
KCp0aGlzLCByb290KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlc0ZyYWdEZXB0
aCkKKyAgICAgICAgeworICAgICAgICAgICAgQWRkRnJhZ0RlcHRoRGVjbGFyYXRpb24ocm9vdCwg
c3ltYm9sVGFibGUpOworICAgICAgICB9CisKKyNpZiAwCisgICAgICAgIGlmIChjb21waWxlT3B0
aW9ucyAmIFNIX0FERF9CUkVTRU5IQU1fTElORV9SQVNURVJfRU1VTEFUSU9OKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIUFkZEJyZXNlbmhhbUVtdWxhdGlvbkZTKHRoaXMsIGNvbXBpbGVP
cHRpb25zLCBzaW5rLCByb290LCAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRyaXZlclVuaWZvcm1zLCB1c2VzRnJhZ0Nvb3JkKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGJvb2wgdXNlUHJlUm90YXRpb24gPSBjb21waWxl
T3B0aW9ucyAmIFNIX0FERF9QUkVfUk9UQVRJT047CisKKyAgICAgICAgaWYgKHVzZXNQb2ludENv
b3JkKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICZmbGlwWFkgICAgICAg
PSAqQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga05lZ0ZsaXBYWSk7Cisg
ICAgICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAmcGl2b3QgPSAqQ3JlYXRlRmxvYXROb2Rl
KDAuNWYpOworICAgICAgICAgICAgVEludGVybUJpbmFyeSAqZnJhZ1JvdGF0aW9uID0KKyAgICAg
ICAgICAgICAgICB1c2VQcmVSb3RhdGlvbiA/IENyZWF0ZURyaXZlclVuaWZvcm1SZWYoZHJpdmVy
VW5pZm9ybXMsIGtGcmFnUm90YXRpb24pIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGlmICghUm90
YXRlQW5kRmxpcEJ1aWx0aW5WYXJpYWJsZSgqdGhpcywgcm9vdCwgKkdldE1haW5TZXF1ZW5jZShy
b290KSwgZmxpcFhZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50Q29vcmQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrRmxpcHBlZFBvaW50Q29vcmROYW1lLCBwaXZv
dCwgZnJhZ1JvdGF0aW9uKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEZWNsYXJlUmlnaHRCZWZvcmVNYWlu
KHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX1BvaW50Q29vcmQoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodXNlc0ZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFJ
bnNlcnRGcmFnQ29vcmRDb3JyZWN0aW9uKCp0aGlzLCBjb21waWxlT3B0aW9ucywgcm9vdCwgKkdl
dE1haW5TZXF1ZW5jZShyb290KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVm
b3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9GcmFnQ29vcmQoKSk7CisgICAgICAg
IH0KKworICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpmbGlwWFkgPSBDcmVh
dGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRmxpcFhZKTsKKyAgICAgICAgICAg
IFRJbnRlcm1CaW5hcnkgKmZyYWdSb3RhdGlvbiA9CisgICAgICAgICAgICAgICAgdXNlUHJlUm90
YXRpb24gPyBDcmVhdGVEcml2ZXJVbmlmb3JtUmVmKGRyaXZlclVuaWZvcm1zLCBrRnJhZ1JvdGF0
aW9uKSA6IG51bGxwdHI7CisgICAgICAgICAgICBpZiAoIVJld3JpdGVEZmR5KHRoaXMsICZyb290
LCBzeW1ib2xUYWJsZSwgZ2V0U2hhZGVyVmVyc2lvbigpLCBmbGlwWFksIGZyYWdSb3RhdGlvbikp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzZXNGcm9udEZhY2luZykKKyAgICAgICAg
eworICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlh
YmxlOjpnbF9Gcm9udEZhY2luZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIEVtaXRFYXJseUZy
YWdtZW50VGVzdHNHTFNMKCp0aGlzLCBzaW5rKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZ2V0U2hh
ZGVyVHlwZSgpID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgeworICAgICAgICBEZWNsYXJlUmln
aHRCZWZvcmVNYWluKHJvb3QsICpCdWlsdEluVmFyaWFibGU6OmdsX1Bvc2l0aW9uKCkpOworCisg
ICAgICAgIGlmIChGaW5kU3ltYm9sTm9kZSgmcm9vdCwgQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2lu
dFNpemUoKS0+bmFtZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVm
b3JlTWFpbihyb290LCAqQnVpbHRJblZhcmlhYmxlOjpnbF9Qb2ludFNpemUoKSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoRmluZFN5bWJvbE5vZGUoJnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6
Z2xfVmVydGV4SW5kZXgoKS0+bmFtZSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFS
ZXBsYWNlVmFyaWFibGUodGhpcywgJnJvb3QsIEJ1aWx0SW5WYXJpYWJsZTo6Z2xfVmVydGV4SW5k
ZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZ2xfVmVydGV4SW5kZXhN
ZXRhbCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgRGVjbGFyZVJpZ2h0QmVmb3JlTWFpbihyb290LCBrZ2xf
VmVydGV4SW5kZXhNZXRhbCk7CisgICAgICAgIH0KKworI2lmIDAKKyAgICAgICAgaWYgKGNvbXBp
bGVPcHRpb25zICYgU0hfQUREX0JSRVNFTkhBTV9MSU5FX1JBU1RFUl9FTVVMQVRJT04pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghQWRkQnJlc2VuaGFtRW11bGF0aW9uVlModGhpcywgcm9v
dCwgJnN5bWJvbFRhYmxlLCBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gQWRkIGEgbWFjcm8gdG8gZGVjbGFyZSB0cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVycy4K
KyAgICAgICAgc2luayA8PCAiQEAgWEZCLURFQ0wgQEBcblxuIjsKKyNlbmRpZgorCisgICAgICAg
IC8vIEFwcGVuZCBhIG1hY3JvIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgc3Vic3RpdHV0aW9uIHBy
aW9yIHRvIG1vZGlmeWluZyBkZXB0aC4KKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJU
cmFuc2Zvcm1GZWVkYmFja091dHB1dFRvTWFpbigqdGhpcywgcm9vdCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNlYXJjaCBm
b3IgdGhlIGdsX0NsaXBEaXN0YW5jZSB1c2FnZSwgaWYgaXRzIHVzZWQsIHdlIG5lZWQgdG8gZG8g
c29tZSByZXBsYWNlbWVudHMuCisgICAgICAgIGJvb2wgdXNlQ2xpcERpc3RhbmNlID0gZmFsc2U7
CisgICAgICAgIGZvciAoY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcnlpbmcgOiBtT3V0
cHV0VmFyeWluZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvdXRwdXRWYXJ5aW5nLm5h
bWUgPT0gImdsX0NsaXBEaXN0YW5jZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dXNlQ2xpcERpc3RhbmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh1c2VDbGlwRGlzdGFuY2UgJiYgIVJlcGxh
Y2VDbGlwRGlzdGFuY2VBc3NpZ25tZW50cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcywgJnJvb3QsICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ3JlYXRlRHJpdmVyVW5pZm9ybVJlZihkcml2ZXJVbmlmb3Jtcywga0NsaXBE
aXN0YW5jZXNFbmFibGVkKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9u
KHJvb3QsIGRyaXZlclVuaWZvcm1zKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFBcHBlbmRWZXJ0ZXhTaGFkZXJEZXB0aENv
cnJlY3Rpb25Ub01haW4oKnRoaXMsIHJvb3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGNvbXBpbGVPcHRpb25zICYgU0hf
QUREX1BSRV9ST1RBVElPTikgIT0gMCAmJgorICAgICAgICAgICAgIUFwcGVuZFByZVJvdGF0aW9u
KCp0aGlzLCByb290LCBkcml2ZXJVbmlmb3JtcykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChnZXRTaGFkZXJUeXBl
KCkgPT0gR0xfR0VPTUVUUllfU0hBREVSKQorICAgIHsKKyAgICAgICAgV3JpdGVHZW9tZXRyeVNo
YWRlckxheW91dFF1YWxpZmllcnMoCisgICAgICAgICAgICBzaW5rLCBnZXRHZW9tZXRyeVNoYWRl
cklucHV0UHJpbWl0aXZlVHlwZSgpLCBnZXRHZW9tZXRyeVNoYWRlckludm9jYXRpb25zKCksCisg
ICAgICAgICAgICBnZXRHZW9tZXRyeVNoYWRlck91dHB1dFByaW1pdGl2ZVR5cGUoKSwgZ2V0R2Vv
bWV0cnlTaGFkZXJNYXhWZXJ0aWNlcygpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGdldFNoYWRlclR5cGUoKSA9PSBHTF9DT01QVVRFX1NIQURFUik7CisgICAgICAg
IEVtaXRXb3JrR3JvdXBTaXplR0xTTCgqdGhpcywgc2luayk7CisgICAgfQorCisgICAgaWYgKGdl
dFNoYWRlclR5cGUoKSA9PSBHTF9WRVJURVhfU0hBREVSKQorICAgIHsKKyAgICAgICAgYXV0byAm
bmVnRmxpcFkgPSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKGRyaXZlclVuaWZvcm1zKTsK
KworICAgICAgICBpZiAobUVtdWxhdGVkSW5zdGFuY2VJRCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFFbXVsYXRlSW5zdGFuY2VJRCgqdGhpcywgcm9vdCwgZHJpdmVyVW5pZm9ybXMpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghQXBwZW5kVmVydGV4U2hhZGVyUG9zaXRpb25Z
Q29ycmVjdGlvblRvTWFpbigqdGhpcywgcm9vdCwgbmVnRmxpcFkpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWluc2VydFJh
c3Rlcml6YXRpb25EaXNjYXJkTG9naWMocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghdmFsaWRhdGVBU1QoJnJv
b3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghUmV3
cml0ZUtleXdvcmRzKCp0aGlzLCByb290LCBpZEdlbiwgR2V0TXNsS2V5d29yZHMoKSkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZWR1Y2VJbnRlcmZh
Y2VCbG9ja3MoKnRoaXMsIHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGlmICghU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucygqdGhpcywg
cm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhp
cyBpcyB0aGUgbGFyZ2VzdCBzaXplIHJlcXVpcmVkIHRvIHBhc3MgYWxsIHRoZSB0ZXN0cyBpbgor
ICAgIC8vIChkRVFQLUdMRVMzLmZ1bmN0aW9uYWwuc2hhZGVycy5sYXJnZV9jb25zdGFudF9hcnJh
eXMpCisgICAgLy8gVGhpcyB2YWx1ZSBjb3VsZCBpbiBwcmluY2lwbGUgYmUgc21hbGxlci4KKyAg
ICBjb25zdCBzaXplX3QgaG9pc3RUaHJlc2hvbGRTaXplID0gMjU2OworICAgIGlmICghSG9pc3RD
b25zdGFudHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBob2lzdFRocmVzaG9sZFNpemUpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEludmFyaWFudHMgaW52YXJpYW50
czsKKyAgICBpZiAoIVJld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscygqdGhpcywgcm9vdCwgaW52
YXJpYW50cykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3lt
Ym9sRW52IHN5bWJvbEVudigqdGhpcywgcm9vdCk7CisKKyAgICBpZiAoIUFkZEV4cGxpY2l0VHlw
ZUNhc3RzKCp0aGlzLCByb290LCBzeW1ib2xFbnYpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFBpcGVsaW5lU3RydWN0cyBwaXBlbGluZVN0cnVjdHM7CisgICAg
aWYgKCFSZXdyaXRlUGlwZWxpbmVzKCp0aGlzLCByb290LCBpZEdlbiwgZHJpdmVyVW5pZm9ybXMs
IHN5bWJvbEVudiwgaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxp
bmVTdHJ1Y3RzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoIVNlcGFyYXRlQ29tcG91bmRFeHByZXNzaW9ucygqdGhpcywgc3ltYm9sRW52LCBpZEdlbiwg
cm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFS
ZXdyaXRlQ2FzZURlY2xhcmF0aW9ucygqdGhpcywgcm9vdCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFSZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5j
ZXMoKnRoaXMsIHJvb3QsIHN5bWJvbEVudikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKCFSZXdyaXRlT3V0QXJncygqdGhpcywgcm9vdCwgc3ltYm9sRW52
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVRvcG9z
b3J0U3RydWN0cygqdGhpcywgc3ltYm9sRW52LCByb290LCBwcGMpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghRW1pdE1ldGFsKCp0aGlzLCByb290LCBp
ZEdlbiwgcGlwZWxpbmVTdHJ1Y3RzLCBpbnZhcmlhbnRzLCBzeW1ib2xFbnYsIHBwYykpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKHZhbGlkYXRlQVNU
KCZyb290KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUcmFuc2xhdG9yTWV0YWxE
aXJlY3Q6OnRyYW5zbGF0ZShUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9wdGlvbnMgY29tcGlsZU9wdGlvbnMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlRGlhZ25vc3RpY3Mg
KnBlcmZEaWFnbm9zdGljcykKK3sKKyAgICBpZiAoIXJvb3QpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgVEluZm9TaW5rQmFzZSAmc2luayA9IGdldEluZm9TaW5r
KCkub2JqOworCisgICAgYm9vbCBwcmVjaXNpb25FbXVsYXRpb24gPSBmYWxzZTsKKyAgICBpZiAo
IWVtdWxhdGVQcmVjaXNpb25JZk5lZWRlZChyb290LCBzaW5rLCAmcHJlY2lzaW9uRW11bGF0aW9u
LCBTSF9HTFNMX1ZVTEtBTl9PVVRQVVQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworI2lmIDAKKyAgICBib29sIGVuYWJsZVByZWNpc2lvbiA9ICgoY29tcGlsZU9wdGlv
bnMgJiBTSF9JR05PUkVfUFJFQ0lTSU9OX1FVQUxJRklFUlMpID09IDApOworCisgICAgVE91dHB1
dE1TTCBvdXRwdXRNU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0
SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAm
Z2V0U3ltYm9sVGFibGUoKSwgZ2V0U2hhZGVyVHlwZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCksIGdl
dE91dHB1dFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb25FbXVsYXRp
b24sIGVuYWJsZVByZWNpc2lvbiwgY29tcGlsZU9wdGlvbnMpOworI2VuZGlmCisKKyAgICBpZiAo
IXRyYW5zbGF0ZUltcGwoKnJvb3QsIGNvbXBpbGVPcHRpb25zKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyNpZiAwCisgICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFk
ZXIuCisgICAgcm9vdC0+dHJhdmVyc2Uob3V0cHV0TVNMKTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IHRydWU7Cit9Citib29sIFRyYW5zbGF0b3JNZXRhbERpcmVjdDo6c2hvdWxkRmxhdHRlblByYWdt
YVN0ZGdsSW52YXJpYW50QWxsKCkKK3sKKyAgICAvLyBOb3QgbmVjY2VzYXJ5IGZvciBNU0wgdHJh
bnNmb3JtYXRpb24uCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWZjYjMwNjcxOTc3YmY1ODFiNmFjMjU3MzIxYzdkMTZmNjZmYzU2ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC5oCkBAIC0wLDAgKzEsMTMyIEBACisvLworLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0hfCisKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworY2xhc3Mg
VE91dHB1dE1TTDsKKwordHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8c2l6ZV90LCBzdGQ6OnN0
cmluZz4gb3JpZ2luYWxOYW1lc01hcDsKK3R5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6
c3RyaW5nLCBzaXplX3Q+IHNhbXBsZXJCaW5kaW5nTWFwOwordHlwZWRlZiBzdGQ6OnVub3JkZXJl
ZF9tYXA8c3RkOjpzdHJpbmcsIHNpemVfdD4gdGV4dHVyZUJpbmRpbmdNYXA7Cit0eXBlZGVmIHN0
ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc2l6ZV90PiB1bmlmb3JtQnVmZmVyQmluZGlu
Z01hcDsKKworY2xhc3MgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbgoreworICBwdWJsaWM6Cisg
ICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpIHt9CisgICAgflRyYW5zbGF0b3JNZXRhbFJl
ZmxlY3Rpb24oKSB7fQorCisgICAgdm9pZCBhZGRPcmlnaW5hbE5hbWUoY29uc3Qgc2l6ZV90IGlk
LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKKyAgICB7CisgICAgICAgIG9yaWdpbmFsTmFtZXMu
aW5zZXJ0KHtpZCwgbmFtZX0pOworICAgIH0KKyAgICB2b2lkIGFkZFNhbXBsZXJCaW5kaW5nKGNv
bnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3Qgc2FtcGxlckJpbmRpbmcpCisgICAgeworICAg
ICAgICBzYW1wbGVyQmluZGluZ3MuaW5zZXJ0KHtuYW1lLCBzYW1wbGVyQmluZGluZ30pOworICAg
IH0KKyAgICB2b2lkIGFkZFRleHR1cmVCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBz
aXplX3QgdGV4dHVyZUJpbmRpbmcpCisgICAgeworICAgICAgICB0ZXh0dXJlQmluZGluZ3MuaW5z
ZXJ0KHtuYW1lLCB0ZXh0dXJlQmluZGluZ30pOworICAgIH0KKyAgICB2b2lkIGFkZFVuaWZvcm1C
dWZmZXJCaW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBzaXplX3QgdW5pZm9ybUJ1ZmZl
ckJpbmRpbmcpCisgICAgeworICAgICAgICB1bmlmb3JtQnVmZmVyQmluZGluZ3MuaW5zZXJ0KHtu
YW1lLCB1bmlmb3JtQnVmZmVyQmluZGluZ30pOworICAgIH0KKyAgICBzdGQ6OnN0cmluZyBnZXRP
cmlnaW5hbE5hbWUoY29uc3Qgc2l6ZV90IGlkKSB7IHJldHVybiBvcmlnaW5hbE5hbWVzLmF0KGlk
KTsgfQorICAgIHNhbXBsZXJCaW5kaW5nTWFwIGdldFNhbXBsZXJCaW5kaW5ncygpIGNvbnN0IHsg
cmV0dXJuIHNhbXBsZXJCaW5kaW5nczsgfQorICAgIHRleHR1cmVCaW5kaW5nTWFwIGdldFRleHR1
cmVCaW5kaW5ncygpIGNvbnN0IHsgcmV0dXJuIHRleHR1cmVCaW5kaW5nczsgfQorICAgIHVuaWZv
cm1CdWZmZXJCaW5kaW5nTWFwIGdldFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpIGNvbnN0IHsgcmV0
dXJuIHVuaWZvcm1CdWZmZXJCaW5kaW5nczsgfQorICAgIHNpemVfdCBnZXRTYW1wbGVyQmluZGlu
Zyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gaXQg
PSBzYW1wbGVyQmluZGluZ3MuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ICE9IHNhbXBsZXJC
aW5kaW5ncy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKDApOworICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKTsKKyAgICB9CisgICAgc2l6ZV90IGdldFRleHR1cmVC
aW5kaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0
byBpdCA9IHRleHR1cmVCaW5kaW5ncy5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXQgIT0gdGV4
dHVyZUJpbmRpbmdzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXQtPnNl
Y29uZDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworICAgIH0KKyAgICBzaXplX3QgZ2V0VW5p
Zm9ybUJ1ZmZlckJpbmRpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIGNvbnN0CisgICAgewor
ICAgICAgICBhdXRvIGl0ID0gdW5pZm9ybUJ1ZmZlckJpbmRpbmdzLmZpbmQobmFtZSk7CisgICAg
ICAgIGlmIChpdCAhPSB1bmlmb3JtQnVmZmVyQmluZGluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCgw
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCk7Cisg
ICAgfQorICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgb3JpZ2luYWxOYW1lcy5jbGVh
cigpOworICAgICAgICBzYW1wbGVyQmluZGluZ3MuY2xlYXIoKTsKKyAgICAgICAgdGV4dHVyZUJp
bmRpbmdzLmNsZWFyKCk7CisgICAgICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5ncy5jbGVhcigpOwor
ICAgIH0KKworICBwcml2YXRlOgorICAgIG9yaWdpbmFsTmFtZXNNYXAgb3JpZ2luYWxOYW1lczsK
KyAgICBzYW1wbGVyQmluZGluZ01hcCBzYW1wbGVyQmluZGluZ3M7CisgICAgdGV4dHVyZUJpbmRp
bmdNYXAgdGV4dHVyZUJpbmRpbmdzOworICAgIHVuaWZvcm1CdWZmZXJCaW5kaW5nTWFwIHVuaWZv
cm1CdWZmZXJCaW5kaW5nczsKK307CisKK2NsYXNzIFRyYW5zbGF0b3JNZXRhbERpcmVjdCA6IHB1
YmxpYyBUQ29tcGlsZXIKK3sKKyAgcHVibGljOgorICAgIFRyYW5zbGF0b3JNZXRhbERpcmVjdChz
aDo6R0xlbnVtIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQp
OworCisjaWZkZWYgQU5HTEVfRU5BQkxFX01FVEFMCisgICAgVHJhbnNsYXRvck1ldGFsRGlyZWN0
ICpnZXRBc1RyYW5zbGF0b3JNZXRhbERpcmVjdCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0K
KyNlbmRpZgorCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKkdldENvdmVyYWdlTWFza0VuYWJsZWRD
b25zdE5hbWUoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqR2V0UmFzdGVyaXphdGlvbkRpc2Nh
cmRFbmFibGVkQ29uc3ROYW1lKCk7CisKKyAgICB2b2lkIGVuYWJsZUVtdWxhdGVkSW5zdGFuY2VJ
RChib29sIGUpIHsgbUVtdWxhdGVkSW5zdGFuY2VJRCA9IGU7IH0KKyAgICBUcmFuc2xhdG9yTWV0
YWxSZWZsZWN0aW9uICpnZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCkgeyByZXR1cm4gJnRy
YW5zbGF0b3JNZXRhbFJlZmxlY3Rpb247IH0KKworICBwcm90ZWN0ZWQ6CisgICAgYm9vbCB0cmFu
c2xhdGUoVEludGVybUJsb2NrICpyb290LAorICAgICAgICAgICAgICAgICAgIFNoQ29tcGlsZU9w
dGlvbnMgY29tcGlsZU9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VEaWFn
bm9zdGljcyAqcGVyZkRpYWdub3N0aWNzKSBvdmVycmlkZTsKKworICAgIEFOR0xFX05PX0RJU0NB
UkQgYm9vbCB0cmFuc2xhdGVJbXBsKFRJbnRlcm1CbG9jayAmcm9vdCwgU2hDb21waWxlT3B0aW9u
cyBjb21waWxlT3B0aW9ucyk7CisKKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgc2hvdWxkRmxh
dHRlblByYWdtYVN0ZGdsSW52YXJpYW50QWxsKCkgb3ZlcnJpZGU7CisKKyAgICBBTkdMRV9OT19E
SVNDQVJEIGJvb2wgdHJhbnNmb3JtRGVwdGhCZWZvcmVDb3JyZWN0aW9uKFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmZHJpdmVyVW5pZm9ybXMpOworICAgIEFOR0xFX05PX0RJ
U0NBUkQgYm9vbCBpbnNlcnRSYXN0ZXJpemF0aW9uRGlzY2FyZExvZ2ljKFRJbnRlcm1CbG9jayAm
cm9vdCk7CisKKyAgICB2b2lkIGNyZWF0ZUFkZGl0aW9uYWxHcmFwaGljc0RyaXZlclVuaWZvcm1G
aWVsZHMoc3RkOjp2ZWN0b3I8VEZpZWxkICo+ICZmaWVsZHNPdXQpOworCisgICAgQU5HTEVfTk9f
RElTQ0FSRCBUSW50ZXJtU3dpenpsZSAqZ2V0RHJpdmVyVW5pZm9ybU5lZ0ZsaXBZUmVmKAorICAg
ICAgICBjb25zdCBUVmFyaWFibGUgJmRyaXZlclVuaWZvcm1zKSBjb25zdDsKKworICAgIGJvb2wg
bUVtdWxhdGVkSW5zdGFuY2VJRCA9IGZhbHNlOworCisgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVj
dGlvbiB0cmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uID0ge307Cit9OworCit9ICAvLyBuYW1lc3Bh
Y2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJ
UkVDVF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM0
MTE4MGE5MDA0NDIxZWJiNTMyZmYxOGMzMzRkODZhNmU2Y2RjNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9BZGRFeHBsaWNpdFR5cGVDYXN0cy5jcHAKQEAgLTAsMCArMSw5NSBAQAor
Ly8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKwordXNpbmcgbmFtZXNw
YWNlIHNoOworCituYW1lc3BhY2UKK3sKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVy
bVJlYnVpbGQKK3sKKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisKKyAgcHVibGljOgorICAg
IFJld3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIsIFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAg
ICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1ZSksIG1TeW1ib2xFbnYo
c3ltYm9sRW52KQorICAgIHt9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdncmVnYXRlUG9zdChU
SW50ZXJtQWdncmVnYXRlICZjYWxsTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0
IHNpemVfdCBhcmdDb3VudCA9IGNhbGxOb2RlLmdldENoaWxkQ291bnQoKTsKKyAgICAgICAgY29u
c3QgVFR5cGUgJnJldFR5cGUgID0gY2FsbE5vZGUuZ2V0VHlwZSgpOworCisgICAgICAgIGlmIChj
YWxsTm9kZS5pc0NvbnN0cnVjdG9yKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc1Nj
YWxhckJhc2ljVHlwZShyZXRUeXBlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJnQ291bnQgPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCAmYXJnICAgPSBHZXRBcmcoY2FsbE5vZGUsIDApOworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSBhcmdUeXBlID0gYXJnLmdldFR5cGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ1R5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZXJjZVNpbXBsZShyZXRUeXBlLCBTdWJW
ZWN0b3IoYXJnLCAwLCAxKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXRUeXBlLmlzVmVjdG9y
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID09IDEpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmFyZyAg
ID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
YXJnVHlwZSA9IGFyZy5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmdUeXBl
LmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBDb2VyY2VTaW1wbGUocmV0VHlwZSwgU3ViVmVjdG9yKGFyZywgMCwgcmV0VHlw
ZS5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdDb3VudDsg
KytpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVk
ICZhcmcgPSBHZXRBcmcoY2FsbE5vZGUsIGkpOworICAgICAgICAgICAgICAgICAgICBTZXRBcmco
Y2FsbE5vZGUsIGksIENvZXJjZVNpbXBsZShyZXRUeXBlLmdldEJhc2ljVHlwZSgpLCBhcmcpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChy
ZXRUeXBlLmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFy
Z0NvdW50ID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtVHlwZWQgJmFyZyAgID0gR2V0QXJnKGNhbGxOb2RlLCAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFR5cGUgYXJnVHlwZSA9IGFyZy5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChhcmdUeXBlLmlzTWF0cml4KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXRUeXBlLmdldENvbHMoKSAhPSBhcmdUeXBlLmdldENv
bHMoKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFR5cGUuZ2V0Um93cygpICE9
IGFyZ1R5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlQXJnIHRlbXBsYXRlQXJnc1tdID0ge3JldFR5cGUu
Z2V0Q29scygpLCByZXRUeXBlLmdldFJvd3MoKX07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5hbWUoImNhc3QiKSwgcmV0VHlwZSwgKm5ldyBUSW50ZXJtU2Vx
dWVuY2V7JmFyZ30sIDIsIHRlbXBsYXRlQXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2FsbE5vZGU7CisgICAgfQorfTsKKworfSAg
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHNoOjpBZGRFeHBsaWNpdFR5cGVDYXN0cyhU
Q29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QsIFN5bWJvbEVudiAmc3ltYm9s
RW52KQoreworICAgIFJld3JpdGVyIHJld3JpdGVyKGNvbXBpbGVyLCBzeW1ib2xFbnYpOworICAg
IGlmICghcmV3cml0ZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQWRkRXhwbGljaXRUeXBl
Q2FzdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MDM0Mjg4OWE2ZjJlNmVjYzcxNWE1Mjc1NzM4MTJjMjFlYzky
ZTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FkZEV4cGxpY2l0VHlwZUNhc3Rz
LmgKQEAgLTAsMCArMSwyNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBMSUNJVFRZUEVDQVNUU19IXworI2RlZmlu
ZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BRERFWFBMSUNJVFRZ
UEVDQVNUU19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dy
YW1QcmVsdWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBBZGRzIGV4cGxp
Y2l0IHR5cGUgY2FzdHMgaW50byB0aGUgQVNUIHdoZXJlIGNhc3RpbmcgaXMgZG9uZSBpbXBsaWNp
dGx5LgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEFkZEV4cGxpY2l0VHlwZUNhc3RzKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfQURERVhQ
TElDSVRUWVBFQ0FTVFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmE0ZWM3N2RlYmRj
ZmI3MWY1MDUzMTYzZDZhZGJiMWRhOGE0YjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0FzdEhlbHBlcnMuY3BwCkBAIC0wLDAgKzEsNDc0IEBACisvLworLy8gQ29weXJpZ2h0IDIw
MjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxudW1lcmljPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+
CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKwordXNpbmcgbmFtZXNwYWNl
IHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitEZWNsYXJhdGlvbiBzaDo6Vmlld0Rl
Y2xhcmF0aW9uKFRJbnRlcm1EZWNsYXJhdGlvbiAmZGVjbE5vZGUpCit7CisgICAgQVNTRVJUKGRl
Y2xOb2RlLmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICBUSW50ZXJtTm9kZSAqY2hpbGROb2Rl
ID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2RlKDApOworICAgIEFTU0VSVChjaGlsZE5vZGUpOworICAg
IFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGU7CisgICAgaWYgKChzeW1ib2xOb2RlID0gY2hpbGRO
b2RlLT5nZXRBc1N5bWJvbE5vZGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4geypzeW1ib2xO
b2RlLCBudWxscHRyfTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVEludGVybUJp
bmFyeSAqaW5pdE5vZGUgPSBjaGlsZE5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICBB
U1NFUlQoaW5pdE5vZGUpOworICAgICAgICBBU1NFUlQoaW5pdE5vZGUtPmdldE9wKCkgPT0gVE9w
ZXJhdG9yOjpFT3BJbml0aWFsaXplKTsKKyAgICAgICAgc3ltYm9sTm9kZSA9IGluaXROb2RlLT5n
ZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSk7
CisgICAgICAgIHJldHVybiB7KnN5bWJvbE5vZGUsIGluaXROb2RlLT5nZXRSaWdodCgpfTsKKyAg
ICB9Cit9CisKK2NvbnN0IFRWYXJpYWJsZSAmc2g6OkNyZWF0ZVN0cnVjdFR5cGVWYXJpYWJsZShU
U3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSkKK3sKKyAgICBhdXRv
ICp0eXBlID0gbmV3IFRUeXBlKCZzdHJ1Y3R1cmUsIHRydWUpOworICAgIGF1dG8gKnZhciAgPSBu
ZXcgVFZhcmlhYmxlKCZzeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCIiKSwgdHlwZSwgU3lt
Ym9sVHlwZTo6RW1wdHkpOworICAgIHJldHVybiAqdmFyOworfQorCitjb25zdCBUVmFyaWFibGUg
JnNoOjpDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgJnN0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5
U2l6ZXMpCit7CisgICAgYXV0byAqdHlwZSA9IG5ldyBUVHlwZSgmc3RydWN0dXJlLCBmYWxzZSk7
CisgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisgICAgaWYgKGFycmF5U2l6ZXMp
CisgICAgeworICAgICAgICB0eXBlLT5tYWtlQXJyYXlzKCphcnJheVNpemVzKTsKKyAgICB9Cisg
ICAgYXV0byAqdmFyID0gbmV3IFRWYXJpYWJsZSgmc3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgp
LCB0eXBlLCBuYW1lLnN5bWJvbFR5cGUoKSk7CisgICAgcmV0dXJuICp2YXI7Cit9CisKK3N0YXRp
YyB2b2lkIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhURnVuY3Rpb24gJmRlc3QsIGNvbnN0IFRGdW5j
dGlvbiAmc3JjKQoreworICAgIGlmIChzcmMuaXNEZWZpbmVkKCkpCisgICAgeworICAgICAgICBk
ZXN0LnNldERlZmluZWQoKTsKKyAgICB9CisKKyAgICBpZiAoc3JjLmhhc1Byb3RvdHlwZURlY2xh
cmF0aW9uKCkpCisgICAgeworICAgICAgICBkZXN0LnNldEhhc1Byb3RvdHlwZURlY2xhcmF0aW9u
KCk7CisgICAgfQorfQorCitUSW50ZXJtU2VxdWVuY2UgJnNoOjpDbG9uZVNlcXVlbmNlQW5kUHJl
cGVuZChjb25zdCBUSW50ZXJtU2VxdWVuY2UgJnNlcSwgVEludGVybU5vZGUgJm5vZGUpCit7Cisg
ICAgYXV0byAqbmV3U2VxID0gbmV3IFRJbnRlcm1TZXF1ZW5jZSgpOworICAgIG5ld1NlcS0+cHVz
aF9iYWNrKCZub2RlKTsKKworICAgIGZvciAoVEludGVybU5vZGUgKm9sZE5vZGUgOiBzZXEpCisg
ICAgeworICAgICAgICBuZXdTZXEtPnB1c2hfYmFjayhvbGROb2RlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gKm5ld1NlcTsKK30KKwordm9pZCBzaDo6QWRkUGFyYW1ldGVyc0Zyb20oVEZ1bmN0aW9u
ICZkZXN0LCBjb25zdCBURnVuY3Rpb24gJnNyYykKK3sKKyAgICBjb25zdCBzaXplX3QgcGFyYW1D
b3VudCA9IHNyYy5nZXRQYXJhbUNvdW50KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
YXJhbUNvdW50OyArK2kpCisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhciA9IHNy
Yy5nZXRQYXJhbShpKTsKKyAgICAgICAgZGVzdC5hZGRQYXJhbWV0ZXIodmFyKTsKKyAgICB9Cit9
CisKK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb24oVFN5bWJvbFRhYmxlICZzeW1i
b2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2Vu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9s
ZEZ1bmMpCit7CisgICAgQVNTRVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6
OlVzZXJEZWZpbmVkKTsKKworICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUo
TmFtZShvbGRGdW5jKSk7CisKKyAgICBhdXRvICZuZXdGdW5jID0gKm5ldyBURnVuY3Rpb24oJnN5
bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xUeXBlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvbGRGdW5jLmdldFJldHVyblR5cGUoKSwg
b2xkRnVuYy5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7CisKKyAgICBBY3F1aXJlRnVu
Y3Rpb25FeHRyYXMobmV3RnVuYywgb2xkRnVuYyk7CisgICAgQWRkUGFyYW1ldGVyc0Zyb20obmV3
RnVuYywgb2xkRnVuYyk7CisKKyAgICByZXR1cm4gbmV3RnVuYzsKK30KKworY29uc3QgVEZ1bmN0
aW9uICZzaDo6Q2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShUU3ltYm9sVGFibGUgJnN5bWJv
bFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZuZXdQYXJhbSkK
K3sKKyAgICBBU1NFUlQob2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQgfHwKKyAgICAgICAgICAgb2xkRnVuYy5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCk7CisKKyAgICBOYW1lIG5ld05hbWUgPSBpZEdlbiA/IGlkR2VuLT5jcmVh
dGVOZXdOYW1lKE5hbWUob2xkRnVuYykpIDogTmFtZShvbGRGdW5jKTsKKworICAgIGF1dG8gJm5l
d0Z1bmMgPSAqbmV3IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIG5ld05hbWUucmF3TmFtZSgpLCBu
ZXdOYW1lLnN5bWJvbFR5cGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Jm9sZEZ1bmMuZ2V0UmV0dXJuVHlwZSgpLCBvbGRGdW5jLmlzS25vd25Ub05vdEhhdmVTaWRlRWZm
ZWN0cygpKTsKKworICAgIEFjcXVpcmVGdW5jdGlvbkV4dHJhcyhuZXdGdW5jLCBvbGRGdW5jKTsK
KyAgICBuZXdGdW5jLmFkZFBhcmFtZXRlcigmbmV3UGFyYW0pOworICAgIEFkZFBhcmFtZXRlcnNG
cm9tKG5ld0Z1bmMsIG9sZEZ1bmMpOworCisgICAgcmV0dXJuIG5ld0Z1bmM7Cit9CisKK2NvbnN0
IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMoVFN5bWJvbFRhYmxl
ICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSWRHZW4gKmlkR2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNv
bnN0IFRWYXJpYWJsZSAqPiAmbmV3UGFyYW1zKQoreworICAgIEFTU0VSVChvbGRGdW5jLnN5bWJv
bFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCB8fAorICAgICAgICAgICBvbGRGdW5j
LnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworICAgIE5hbWUg
bmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRGdW5jKSkgOiBO
YW1lKG9sZEZ1bmMpOworCisgICAgYXV0byAmbmV3RnVuYyA9ICpuZXcgVEZ1bmN0aW9uKCZzeW1i
b2xUYWJsZSwgbmV3TmFtZS5yYXdOYW1lKCksIG5ld05hbWUuc3ltYm9sVHlwZSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkRnVuYy5nZXRSZXR1cm5UeXBlKCksIG9s
ZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworCisgICAgQWNxdWlyZUZ1bmN0
aW9uRXh0cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5ld0Z1
bmMsIG9sZEZ1bmMpOworICAgIGZvciAoYXV0byAqcGFyYW0gOiBuZXdQYXJhbXMpCisgICAgewor
ICAgICAgICBuZXdGdW5jLmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgfQorCisgICAgcmV0dXJu
IG5ld0Z1bmM7Cit9CisKK2NvbnN0IFRGdW5jdGlvbiAmc2g6OkNsb25lRnVuY3Rpb25BbmRDaGFu
Z2VSZXR1cm5UeXBlKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
RnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZuZXdSZXR1cm4pCit7CisgICAgQVNT
RVJUKG9sZEZ1bmMuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKwor
ICAgIE5hbWUgbmV3TmFtZSA9IGlkR2VuID8gaWRHZW4tPmNyZWF0ZU5ld05hbWUoTmFtZShvbGRG
dW5jKSkgOiBOYW1lKG9sZEZ1bmMpOworCisgICAgYXV0byAqbmV3UmV0dXJuVHlwZSA9IG5ldyBU
VHlwZSgmbmV3UmV0dXJuLCB0cnVlKTsKKyAgICBhdXRvICZuZXdGdW5jICAgICAgID0gKm5ldyBU
RnVuY3Rpb24oJnN5bWJvbFRhYmxlLCBuZXdOYW1lLnJhd05hbWUoKSwgbmV3TmFtZS5zeW1ib2xU
eXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JldHVyblR5cGUs
IG9sZEZ1bmMuaXNLbm93blRvTm90SGF2ZVNpZGVFZmZlY3RzKCkpOworCisgICAgQWNxdWlyZUZ1
bmN0aW9uRXh0cmFzKG5ld0Z1bmMsIG9sZEZ1bmMpOworICAgIEFkZFBhcmFtZXRlcnNGcm9tKG5l
d0Z1bmMsIG9sZEZ1bmMpOworCisgICAgcmV0dXJuIG5ld0Z1bmM7Cit9CisKK1RJbnRlcm1UeXBl
ZCAmc2g6OkdldEFyZyhjb25zdCBUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgp
Cit7CisgICAgQVNTRVJUKGluZGV4IDwgY2FsbC5nZXRDaGlsZENvdW50KCkpOworICAgIGF1dG8g
KmFyZyA9IGNhbGwuZ2V0Q2hpbGROb2RlKGluZGV4KTsKKyAgICBBU1NFUlQoYXJnKTsKKyAgICBh
dXRvICp0YXJnID0gYXJnLT5nZXRBc1R5cGVkKCk7CisgICAgQVNTRVJUKHRhcmcpOworICAgIHJl
dHVybiAqdGFyZzsKK30KKwordm9pZCBzaDo6U2V0QXJnKFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGws
IHNpemVfdCBpbmRleCwgVEludGVybVR5cGVkICZhcmcpCit7CisgICAgQVNTRVJUKGluZGV4IDwg
Y2FsbC5nZXRDaGlsZENvdW50KCkpOworICAgICgqY2FsbC5nZXRTZXF1ZW5jZSgpKVtpbmRleF0g
PSAmYXJnOworfQorCitpbnQgc2g6OkdldEZpZWxkSW5kZXgoY29uc3QgVFN0cnVjdHVyZSAmc3Ry
dWN0dXJlLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSkKK3sKKyAgICBjb25zdCBU
RmllbGRMaXN0ICZmaWVsZExpc3QgPSBzdHJ1Y3R1cmUuZmllbGRzKCk7CisKKyAgICBpbnQgaSA9
IDA7CisgICAgZm9yIChURmllbGQgKmZpZWxkIDogZmllbGRMaXN0KQorICAgIHsKKyAgICAgICAg
aWYgKGZpZWxkLT5uYW1lKCkgPT0gZmllbGROYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICArK2k7CisgICAgfQorCisgICAgcmV0dXJuIC0x
OworfQorCitUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoY29uc3QgVFZhcmlhYmxlICZz
dHJ1Y3RJbnN0YW5jZVZhciwgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZmaWVsZE5hbWUpCit7Cisg
ICAgcmV0dXJuIEFjY2Vzc0ZpZWxkKCpuZXcgVEludGVybVN5bWJvbCgmc3RydWN0SW5zdGFuY2VW
YXIpLCBmaWVsZE5hbWUpOworfQorCitUSW50ZXJtQmluYXJ5ICZzaDo6QWNjZXNzRmllbGQoVElu
dGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJsZVN0cmluZyAmZmllbGROYW1lKQorewor
ICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IG9iamVjdC5nZXRUeXBlKCkuZ2V0U3Ry
dWN0KCk7CisgICAgQVNTRVJUKHN0cnVjdHVyZSk7CisKKyAgICBjb25zdCBpbnQgaW5kZXggPSBH
ZXRGaWVsZEluZGV4KCpzdHJ1Y3R1cmUsIGZpZWxkTmFtZSk7CisgICAgQVNTRVJUKGluZGV4ID49
IDApOworICAgIHJldHVybiBBY2Nlc3NGaWVsZEJ5SW5kZXgob2JqZWN0LCBpbmRleCk7Cit9CisK
K1RJbnRlcm1CaW5hcnkgJnNoOjpBY2Nlc3NGaWVsZEJ5SW5kZXgoVEludGVybVR5cGVkICZvYmpl
Y3QsIGludCBpbmRleCkKK3sKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9BU1NFUlRTKQorICAg
IGNvbnN0IFRUeXBlICZ0eXBlID0gb2JqZWN0LmdldFR5cGUoKTsKKyAgICBBU1NFUlQoIXR5cGUu
aXNBcnJheSgpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUpOworICAgIEFTU0VSVCgwIDw9IGluZGV4KTsK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBzdHJ1Y3R1cmUtPmZpZWxk
cygpLnNpemUoKSk7CisjZW5kaWYKKworICAgIHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoCisg
ICAgICAgIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICZvYmplY3QsCisgICAgICAg
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbihuZXcgVENvbnN0YW50VW5pb24oaW5kZXgpLCAqbmV3
IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkpKTsKK30KKworVEludGVybUJpbmFyeSAmc2g6OkFj
Y2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmaW5kZXhhYmxlTm9kZSwgaW50IGluZGV4KQoreworI2lm
IGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBp
bmRleGFibGVOb2RlLmdldFR5cGUoKTsKKyAgICBBU1NFUlQodHlwZS5pc0FycmF5KCkgfHwgdHlw
ZS5pc1ZlY3RvcigpIHx8IHR5cGUuaXNNYXRyaXgoKSk7CisjZW5kaWYKKworICAgIGF1dG8gKmFj
Y2Vzc05vZGUgPSBuZXcgVEludGVybUJpbmFyeSgKKyAgICAgICAgVE9wZXJhdG9yOjpFT3BJbmRl
eERpcmVjdCwgJmluZGV4YWJsZU5vZGUsCisgICAgICAgIG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlv
bihuZXcgVENvbnN0YW50VW5pb24oaW5kZXgpLCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidElu
dCkpKTsKKyAgICByZXR1cm4gKmFjY2Vzc05vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OkFj
Y2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3QgaW50ICppbmRleCkKK3sKKyAgICBp
ZiAoaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gQWNjZXNzSW5kZXgobm9kZSwgKmluZGV4
KTsKKyAgICB9CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OlN1YlZl
Y3RvcihUSW50ZXJtVHlwZWQgJnZlY3Rvck5vZGUsIGludCBiZWdpbiwgaW50IGVuZCkKK3sKKyAg
ICBBU1NFUlQodmVjdG9yTm9kZS5nZXRUeXBlKCkuaXNWZWN0b3IoKSk7CisgICAgQVNTRVJUKDAg
PD0gYmVnaW4pOworICAgIEFTU0VSVChlbmQgPD0gNCk7CisgICAgQVNTRVJUKGJlZ2luIDw9IGVu
ZCk7CisgICAgaWYgKGJlZ2luID09IDAgJiYgZW5kID09IHZlY3Rvck5vZGUuZ2V0VHlwZSgpLmdl
dE5vbWluYWxTaXplKCkpCisgICAgeworICAgICAgICByZXR1cm4gdmVjdG9yTm9kZTsKKyAgICB9
CisgICAgVFZlY3RvcjxpbnQ+IG9mZnNldHMoc3RhdGljX2Nhc3Q8c2l6ZV90PihlbmQgLSBiZWdp
bikpOworICAgIHN0ZDo6aW90YShvZmZzZXRzLmJlZ2luKCksIG9mZnNldHMuZW5kKCksIGJlZ2lu
KTsKKyAgICBhdXRvICpzd2l6emxlID0gbmV3IFRJbnRlcm1Td2l6emxlKCZ2ZWN0b3JOb2RlLCBv
ZmZzZXRzKTsKKyAgICByZXR1cm4gKnN3aXp6bGU7Cit9CisKK2Jvb2wgc2g6OklzU2NhbGFyQmFz
aWNUeXBlKGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmICghdHlwZS5pc1NjYWxhcigpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gSGFzU2NhbGFy
QmFzaWNUeXBlKHR5cGUpOworfQorCitib29sIHNoOjpJc1ZlY3RvckJhc2ljVHlwZShjb25zdCBU
VHlwZSAmdHlwZSkKK3sKKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBl
KTsKK30KKworYm9vbCBzaDo6SGFzU2NhbGFyQmFzaWNUeXBlKFRCYXNpY1R5cGUgdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZs
b2F0OgorICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidERvdWJsZToKKyAgICAgICAgY2FzZSBU
QmFzaWNUeXBlOjpFYnRJbnQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDoKKyAg
ICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRCb29sOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgc2g6Okhhc1NjYWxhckJhc2ljVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKK3sKKyAg
ICByZXR1cm4gSGFzU2NhbGFyQmFzaWNUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCkpOworfQorCitz
dGF0aWMgdm9pZCBJbml0VHlwZShUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAodHlwZS5pc0FycmF5
KCkpCisgICAgeworICAgICAgICBhdXRvIHNpemVzID0gdHlwZS5nZXRBcnJheVNpemVzKCk7Cisg
ICAgICAgIHR5cGUudG9BcnJheUJhc2VUeXBlKCk7CisgICAgICAgIHR5cGUubWFrZUFycmF5cyhz
aXplcyk7CisgICAgfQorfQorCitUVHlwZSAmc2g6OkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlw
ZSkKK3sKKyAgICBhdXRvICZjbG9uZSA9ICpuZXcgVFR5cGUodHlwZSk7CisgICAgSW5pdFR5cGUo
Y2xvbmUpOworICAgIHJldHVybiBjbG9uZTsKK30KKworVFR5cGUgJnNoOjpJbm5lcm1vc3RUeXBl
KGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGF1dG8gJmlubmVyID0gKm5ldyBUVHlwZSh0eXBl
KTsKKyAgICBpbm5lci50b0FycmF5QmFzZVR5cGUoKTsKKyAgICBJbml0VHlwZShpbm5lcik7Cisg
ICAgcmV0dXJuIGlubmVyOworfQorCitUVHlwZSAmc2g6OkRyb3BDb2x1bW5zKGNvbnN0IFRUeXBl
ICZtYXRyaXhUeXBlKQoreworICAgIEFTU0VSVChtYXRyaXhUeXBlLmlzTWF0cml4KCkpOworICAg
IEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUobWF0cml4VHlwZSkpOworICAgIGNvbnN0IGNoYXIg
Km1hbmdsZWROYW1lID0gbnVsbHB0cjsKKworICAgIGF1dG8gJnZlY3RvclR5cGUgPQorICAgICAg
ICAqbmV3IFRUeXBlKG1hdHJpeFR5cGUuZ2V0QmFzaWNUeXBlKCksIG1hdHJpeFR5cGUuZ2V0UHJl
Y2lzaW9uKCksIG1hdHJpeFR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAg
bWF0cml4VHlwZS5nZXRSb3dzKCksIDEsIG1hdHJpeFR5cGUuZ2V0QXJyYXlTaXplcygpLCBtYW5n
bGVkTmFtZSk7CisgICAgSW5pdFR5cGUodmVjdG9yVHlwZSk7CisgICAgcmV0dXJuIHZlY3RvclR5
cGU7Cit9CisKK1RUeXBlICZzaDo6RHJvcE91dGVyRGltZW5zaW9uKGNvbnN0IFRUeXBlICZhcnJh
eVR5cGUpCit7CisgICAgQVNTRVJUKGFycmF5VHlwZS5pc0FycmF5KCkpOworICAgIGNvbnN0IGNo
YXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKyAgICBjb25zdCBhdXRvICZhcnJheVNpemVzICA9
IGFycmF5VHlwZS5nZXRBcnJheVNpemVzKCk7CisKKyAgICBhdXRvICZpbm5lclR5cGUgPQorICAg
ICAgICAqbmV3IFRUeXBlKGFycmF5VHlwZS5nZXRCYXNpY1R5cGUoKSwgYXJyYXlUeXBlLmdldFBy
ZWNpc2lvbigpLCBhcnJheVR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAg
YXJyYXlUeXBlLmdldE5vbWluYWxTaXplKCksIGFycmF5VHlwZS5nZXRTZWNvbmRhcnlTaXplKCks
CisgICAgICAgICAgICAgICAgICAgYXJyYXlTaXplcy5zdWJzcGFuKDAsIGFycmF5U2l6ZXMuc2l6
ZSgpIC0gMSksIG1hbmdsZWROYW1lKTsKKyAgICBJbml0VHlwZShpbm5lclR5cGUpOworICAgIHJl
dHVybiBpbm5lclR5cGU7Cit9CisKK3N0YXRpYyBUVHlwZSAmU2V0VHlwZURpbXNJbXBsKGNvbnN0
IFRUeXBlICZ0eXBlLCBpbnQgcHJpbWFyeSwgaW50IHNlY29uZGFyeSkKK3sKKyAgICBBU1NFUlQo
MSA8IHByaW1hcnkgJiYgcHJpbWFyeSA8PSA0KTsKKyAgICBBU1NFUlQoMSA8PSBzZWNvbmRhcnkg
JiYgc2Vjb25kYXJ5IDw9IDQpOworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodHlwZSkp
OworICAgIGNvbnN0IGNoYXIgKm1hbmdsZWROYW1lID0gbnVsbHB0cjsKKworICAgIGF1dG8gJm5l
d1R5cGUgPSAqbmV3IFRUeXBlKHR5cGUuZ2V0QmFzaWNUeXBlKCksIHR5cGUuZ2V0UHJlY2lzaW9u
KCksIHR5cGUuZ2V0UXVhbGlmaWVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpbWFyeSwgc2Vjb25kYXJ5LCB0eXBlLmdldEFycmF5U2l6ZXMoKSwgbWFuZ2xlZE5hbWUpOwor
ICAgIEluaXRUeXBlKG5ld1R5cGUpOworICAgIHJldHVybiBuZXdUeXBlOworfQorCitUVHlwZSAm
c2g6OlNldFZlY3RvckRpbShjb25zdCBUVHlwZSAmdHlwZSwgaW50IG5ld0RpbSkKK3sKKyAgICBB
U1NFUlQodHlwZS5pc1JhbmswKCkgfHwgdHlwZS5pc1ZlY3RvcigpKTsKKyAgICByZXR1cm4gU2V0
VHlwZURpbXNJbXBsKHR5cGUsIG5ld0RpbSwgMSk7Cit9CisKK1RUeXBlICZzaDo6U2V0TWF0cml4
Um93RGltKGNvbnN0IFRUeXBlICZtYXRyaXhUeXBlLCBpbnQgbmV3RGltKQoreworICAgIEFTU0VS
VChtYXRyaXhUeXBlLmlzTWF0cml4KCkpOworICAgIEFTU0VSVCgxIDwgbmV3RGltICYmIG5ld0Rp
bSA8PSA0KTsKKyAgICByZXR1cm4gU2V0VHlwZURpbXNJbXBsKG1hdHJpeFR5cGUsIG1hdHJpeFR5
cGUuZ2V0Q29scygpLCBuZXdEaW0pOworfQorCitib29sIHNoOjpIYXNNYXRyaXhGaWVsZChjb25z
dCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCit7CisgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxk
IDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUg
PSAqZmllbGQtPnR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIHNoOjpIYXNBcnJheUZpZWxkKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0
cnVjdHVyZSkKK3sKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBzdHJ1Y3R1cmUuZmll
bGRzKCkpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC0+dHlwZSgp
OworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworVElu
dGVybVR5cGVkICZzaDo6Q29lcmNlU2ltcGxlKFRCYXNpY1R5cGUgdG9UeXBlLCBUSW50ZXJtVHlw
ZWQgJmZyb21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlwZSA9IGZyb21Ob2RlLmdl
dFR5cGUoKTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9UeXBlKSk7CisgICAg
QVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAgIEFTU0VSVCghZnJvbVR5
cGUuaXNBcnJheSgpKTsKKworICAgIGlmICh0b1R5cGUgIT0gZnJvbVR5cGUuZ2V0QmFzaWNUeXBl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0
cnVjdG9yKAorICAgICAgICAgICAgKm5ldyBUVHlwZSh0b1R5cGUsIGZyb21UeXBlLmdldE5vbWlu
YWxTaXplKCksIGZyb21UeXBlLmdldFNlY29uZGFyeVNpemUoKSksCisgICAgICAgICAgICBuZXcg
VEludGVybVNlcXVlbmNleyZmcm9tTm9kZX0pOworICAgIH0KKyAgICByZXR1cm4gZnJvbU5vZGU7
Cit9CisKK1RJbnRlcm1UeXBlZCAmc2g6OkNvZXJjZVNpbXBsZShjb25zdCBUVHlwZSAmdG9UeXBl
LCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKQoreworICAgIGNvbnN0IFRUeXBlICZmcm9tVHlwZSA9
IGZyb21Ob2RlLmdldFR5cGUoKTsKKworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUodG9U
eXBlKSk7CisgICAgQVNTRVJUKEhhc1NjYWxhckJhc2ljVHlwZShmcm9tVHlwZSkpOworICAgIEFT
U0VSVCh0b1R5cGUuZ2V0Tm9taW5hbFNpemUoKSA9PSBmcm9tVHlwZS5nZXROb21pbmFsU2l6ZSgp
KTsKKyAgICBBU1NFUlQodG9UeXBlLmdldFNlY29uZGFyeVNpemUoKSA9PSBmcm9tVHlwZS5nZXRT
ZWNvbmRhcnlTaXplKCkpOworICAgIEFTU0VSVCghdG9UeXBlLmlzQXJyYXkoKSk7CisgICAgQVNT
RVJUKCFmcm9tVHlwZS5pc0FycmF5KCkpOworCisgICAgaWYgKHRvVHlwZS5nZXRCYXNpY1R5cGUo
KSAhPSBmcm9tVHlwZS5nZXRCYXNpY1R5cGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAqVElu
dGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlQ29uc3RydWN0b3IodG9UeXBlLCBuZXcgVEludGVybVNlcXVl
bmNleyZmcm9tTm9kZX0pOworICAgIH0KKyAgICByZXR1cm4gZnJvbU5vZGU7Cit9CisKK1RJbnRl
cm1UeXBlZCAmc2g6OkFzVHlwZShTeW1ib2xFbnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRv
VHlwZSwgVEludGVybVR5cGVkICZmcm9tTm9kZSkKK3sKKyAgICBjb25zdCBUVHlwZSAmZnJvbVR5
cGUgPSBmcm9tTm9kZS5nZXRUeXBlKCk7CisKKyAgICBBU1NFUlQoSGFzU2NhbGFyQmFzaWNUeXBl
KHRvVHlwZSkpOworICAgIEFTU0VSVChIYXNTY2FsYXJCYXNpY1R5cGUoZnJvbVR5cGUpKTsKKyAg
ICBBU1NFUlQoIXRvVHlwZS5pc0FycmF5KCkpOworICAgIEFTU0VSVCghZnJvbVR5cGUuaXNBcnJh
eSgpKTsKKworICAgIGlmICh0b1R5cGUgPT0gZnJvbVR5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gZnJvbU5vZGU7CisgICAgfQorICAgIFRlbXBsYXRlQXJnIHRhcmcodG9UeXBlKTsKKyAgICBy
ZXR1cm4gc3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUoImFzX3R5cGUiLCBTeW1i
b2xUeXBlOjpCdWlsdEluKSwgdG9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2VxdWVuY2V7JmZyb21Ob2RlfSwgMSwgJnRhcmcpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9B
c3RIZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDllODlmZWIwNzMyOTBhZTYxYTE2ZmUwNTIwNjQwNmMw
NzUxOGM1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgKQEAg
LTAsMCArMSwxNTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfQVNUSEVMUEVSU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9BU1RIRUxQRVJTX0hfCisKKyNpbmNsdWRlIDxj
c3RyaW5nPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3Nl
dD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvTmFtZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBjb252ZW5p
ZW5jZSB2aWV3IG9mIGEgVEludGVybURlY2xhcmF0aW9uIG5vZGUncyBjaGlsZHJlbi4KK3N0cnVj
dCBEZWNsYXJhdGlvbgoreworICAgIFRJbnRlcm1TeW1ib2wgJnN5bWJvbDsKKyAgICBUSW50ZXJt
VHlwZWQgKmluaXRFeHByOyAgLy8gTm9uLW51bGwgaWZmIGRlY2xhcmF0aW9uIGlzIGluaXRpYWxp
emVkLgorfTsKKworLy8gUmV0dXJucyBhIGBEZWNsYXJhdGlvbmAgdmlldyBvZiB0aGUgZ2l2ZW4g
bm9kZS4KK0RlY2xhcmF0aW9uIFZpZXdEZWNsYXJhdGlvbihUSW50ZXJtRGVjbGFyYXRpb24gJmRl
Y2xOb2RlKTsKKworLy8gQ3JlYXRlcyBhIHZhcmlhYmxlIGZvciBhIHN0cnVjdCB0eXBlLgorY29u
c3QgVFZhcmlhYmxlICZDcmVhdGVTdHJ1Y3RUeXBlVmFyaWFibGUoVFN5bWJvbFRhYmxlICZzeW1i
b2xUYWJsZSwgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKworLy8gQ3JlYXRlcyBhIHZh
cmlhYmxlIGZvciBhIHN0cnVjdCBpbnN0YW5jZS4KK2NvbnN0IFRWYXJpYWJsZSAmQ3JlYXRlSW5z
dGFuY2VWYXJpYWJsZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOYW1lICZuYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlm
aWVyID0gVFF1YWxpZmllcjo6RXZxVGVtcG9yYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTcGFuPGNvbnN0IHVuc2lnbmVkIGludD4gKmFycmF5U2l6
ZXMgPSBudWxscHRyKTsKKworLy8gVGhlIGlucHV0IHNlcXVlbmNlIHNob3VsZCBiZSBkaXNjYXJk
ZWQgZnJvbSBBU1QgYWZ0ZXIgdGhpcyBpcyBjYWxsZWQuCitUSW50ZXJtU2VxdWVuY2UgJkNsb25l
U2VxdWVuY2VBbmRQcmVwZW5kKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmc2VxLCBUSW50ZXJtTm9k
ZSAmbm9kZSk7CisKKy8vIEFwcGVuZHMgcGFyYW1ldGVycyBmcm9tIGBzcmNgIGZ1bmN0aW9uIHRv
IGBkZXN0YCBmdW5jdGlvbi4KK3ZvaWQgQWRkUGFyYW1ldGVyc0Zyb20oVEZ1bmN0aW9uICZkZXN0
LCBjb25zdCBURnVuY3Rpb24gJnNyYyk7CisKKy8vIENsb25lcyBhIGZ1bmN0aW9uLgorY29uc3Qg
VEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsIElkR2Vu
ICZpZEdlbiwgY29uc3QgVEZ1bmN0aW9uICZvbGRGdW5jKTsKKworLy8gQ2xvbmVzIGEgZnVuY3Rp
b24gYW5kIHByZXBlbmRzIHRoZSBwcm92aWRlZCBleHRyIHBhcmFtZXRlci4KKy8vIElmIGBpZEdl
bmAgaXMgbnVsbCwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG11c3QgYmUgZGlzY2FyZGVkIGZyb20g
dGhlIEFTVC4KK2NvbnN0IFRGdW5jdGlvbiAmQ2xvbmVGdW5jdGlvbkFuZFByZXBlbmRQYXJhbShU
U3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIElkR2VuICppZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gJm9sZEZ1bmMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZuZXdQ
YXJhbSk7CisKKy8vIENsb25lcyBhIGZ1bmN0aW9uIGFuZCBhcHBlbmRzIHRoZSBwcm92aWRlZCBl
eHRyYSBwYXJhbWV0ZXJzLgorLy8gSWYgYGlkR2VuYCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVu
Y3Rpb24gbXVzdCBiZSBkaXNjYXJkZWQgZnJvbSB0aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZD
bG9uZUZ1bmN0aW9uQW5kQXBwZW5kUGFyYW1zKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRHZW4gKmlkR2Vu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRG
dW5jdGlvbiAmb2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjb25zdCBUVmFyaWFibGUgKj4gJm5ld1BhcmFtKTsK
KworLy8gQ2xvbmVzIGEgZnVuY3Rpb24gYW5kIGNoYW5nZXMgaXRzIHJldHVybiB0eXBlLgorLy8g
SWYgYGlkR2VuYCBpcyBudWxsLCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gbXVzdCBiZSBkaXNjYXJk
ZWQgZnJvbSB0aGUgQVNULgorY29uc3QgVEZ1bmN0aW9uICZDbG9uZUZ1bmN0aW9uQW5kQ2hhbmdl
UmV0dXJuVHlwZShUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAqaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAm
b2xkRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVFN0cnVjdHVyZSAmbmV3UmV0dXJuKTsKKworLy8gR2V0cyB0aGUgYXJndW1lbnQg
b2YgYSBmdW5jdGlvbiBjYWxsIGF0IHRoZSBnaXZlbiBpbmRleC4KK1RJbnRlcm1UeXBlZCAmR2V0
QXJnKGNvbnN0IFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGwsIHNpemVfdCBpbmRleCk7CisKKy8vIFNl
dHMgdGhlIGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24gY2FsbCBhdCB0aGUgZ2l2ZW4gaW5kZXguCit2
b2lkIFNldEFyZyhUSW50ZXJtQWdncmVnYXRlICZjYWxsLCBzaXplX3QgaW5kZXgsIFRJbnRlcm1U
eXBlZCAmYXJnKTsKKworLy8gUmV0dXJucyB0aGUgZmllbGQgaW5kZXggd2l0aGluIHRoZSBnaXZl
biBzdHJ1Y3QgZm9yIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorLy8gUmV0dXJucyAtMSBpZiB0aGUg
c3RydWN0IGhhcyBubyBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgoraW50IEdldEZpZWxkSW5k
ZXgoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZp
ZWxkTmFtZSk7CisKKy8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiB2YXJpYWJsZSB3
aXRoIHRoZSBnaXZlbiBmaWVsZCBuYW1lLgorLy8gVGhlIHZhcmlhYmxlIG11c3QgYmUgYSBzdHJ1
Y3QgaW5zdGFuY2UuCitUSW50ZXJtQmluYXJ5ICZBY2Nlc3NGaWVsZChjb25zdCBUVmFyaWFibGUg
JnN0cnVjdEluc3RhbmNlVmFyLCBjb25zdCBJbW11dGFibGVTdHJpbmcgJmZpZWxkTmFtZSk7CisK
Ky8vIEFjY2Vzc2VzIGEgZmllbGQgZm9yIHRoZSBnaXZlbiBub2RlIHdpdGggdGhlIGdpdmVuIGZp
ZWxkIG5hbWUuCisvLyBUaGUgbm9kZSBtdXN0IGJlIGEgc3RydWN0IGluc3RhbmNlLgorVEludGVy
bUJpbmFyeSAmQWNjZXNzRmllbGQoVEludGVybVR5cGVkICZvYmplY3QsIGNvbnN0IEltbXV0YWJs
ZVN0cmluZyAmZmllbGROYW1lKTsKKworLy8gQWNjZXNzZXMgYSBmaWVsZCBmb3IgdGhlIGdpdmVu
IG5vZGUgYnkgaXRzIGZpZWxkIGluZGV4LgorLy8gVGhlIG5vZGUgbXVzdCBiZSBhIHN0cnVjdCBp
bnN0YW5jZS4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0ZpZWxkQnlJbmRleChUSW50ZXJtVHlwZWQg
Jm9iamVjdCwgaW50IGluZGV4KTsKKworLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRleCBm
b3IgdGhlIGdpdmVuIG5vZGUuCisvLyBUaGUgbm9kZSBtdXN0IGJlIGFuIGFycmF5LCB2ZWN0b3Is
IG9yIG1hdHJpeC4KK1RJbnRlcm1CaW5hcnkgJkFjY2Vzc0luZGV4KFRJbnRlcm1UeXBlZCAmaW5k
ZXhhYmxlTm9kZSwgaW50IGluZGV4KTsKKworLy8gQWNjZXNzZXMgYW4gZWxlbWVudCBieSBpbmRl
eCBmb3IgdGhlIGdpdmVuIG5vZGUgaWYgYGluZGV4YCBpcyBub24tbnVsbC4KKy8vIFJldHVybnMg
dGhlIG9yaWdpbmFsIG5vZGUgaWYgYGluZGV4YCBpcyBudWxsLgorLy8gVGhlIG5vZGUgbXVzdCBi
ZSBhbiBhcnJheSwgdmVjdG9yLCBvciBtYXRyaXggaWYgYGluZGV4YCBpcyBub24tbnVsbC4KK1RJ
bnRlcm1UeXBlZCAmQWNjZXNzSW5kZXgoVEludGVybVR5cGVkICZub2RlLCBjb25zdCBpbnQgKmlu
ZGV4KTsKKworLy8gUmV0dXJucyBhIHN1YnZlY3RvciBiYXNlZCBvbiB0aGUgaW5wdXQgc2xpY2Ug
cmFuZ2UuCisvLyBUaGlzIHJldHVybnMgdGhlIG9yaWdpbmFsIG5vZGUgaWYgdGhlIHNsaWNlIGlz
IGFuIGlkZW50aXR5IGZvciB0aGUgbm9kZS4KK1RJbnRlcm1UeXBlZCAmU3ViVmVjdG9yKFRJbnRl
cm1UeXBlZCAmdmVjdG9yTm9kZSwgaW50IGJlZ2luLCBpbnQgZW5kKTsKKworLy8gTWF0Y2hlcyBz
Y2FsYXIgYm9vbCwgaW50LCB1aW50LCBmbG9hdCwgZG91YmxlLgorYm9vbCBJc1NjYWxhckJhc2lj
VHlwZShjb25zdCBUVHlwZSAmdHlwZSk7CisKKy8vIE1hdGNoZXMgdmVjdG9yIGJvb2wsIGludCwg
dWludCwgZmxvYXQsIGRvdWJsZS4KK2Jvb2wgSXNWZWN0b3JCYXNpY1R5cGUoY29uc3QgVFR5cGUg
JnR5cGUpOworCisvLyBNYXRjaGVzIGJvb2wsIGludCwgdWludCwgZmxvYXQsIGRvdWJsZS4KKy8v
IFR5cGUgZG9lcyBub3QgbmVlZCB0byBiZSBhIHNjYWxhci4KK2Jvb2wgSGFzU2NhbGFyQmFzaWNU
eXBlKGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gTWF0Y2hlcyBib29sLCBpbnQsIHVpbnQsIGZs
b2F0LCBkb3VibGUuCitib29sIEhhc1NjYWxhckJhc2ljVHlwZShUQmFzaWNUeXBlIHR5cGUpOwor
CisvLyBDbG9uZXMgYSB0eXBlLgorVFR5cGUgJkNsb25lVHlwZShjb25zdCBUVHlwZSAmdHlwZSk7
CisKKy8vIENsb25lcyBhIHR5cGUgYW5kIGRyb3BzIGFsbCBhcnJheSBkaW1lbnNpb25zLgorVFR5
cGUgJklubmVybW9zdFR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBDcmVhdGVzIGEgdmVj
dG9yIHR5cGUgYnkgZHJvcHBpbmcgdGhlIGNvbHVtbnMgb2ZmIG9mIGEgbWF0cml4IHR5cGUuCitU
VHlwZSAmRHJvcENvbHVtbnMoY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUpOworCisvLyBDcmVhdGVz
IGEgdHlwZSBieSBkcm9wcGluZyB0aGUgb3V0ZXIgZGltZW5zaW9uIG9mZiBvZiBhbiBhcnJheSB0
eXBlLgorVFR5cGUgJkRyb3BPdXRlckRpbWVuc2lvbihjb25zdCBUVHlwZSAmYXJyYXlUeXBlKTsK
KworLy8gQ3JlYXRlcyBhIHNjYWxhciBvciB2ZWN0b3IgdHlwZSBieSBjaGFuZ2luZyB0aGUgZGlt
ZW5zaW9ucyBvZiBhIHZlY3RvciB0eXBlLgorVFR5cGUgJlNldFZlY3RvckRpbShjb25zdCBUVHlw
ZSAmdHlwZSwgaW50IG5ld0RpbSk7CisKKy8vIENyZWF0ZXMgYSBtYXRyaXggdHlwZSBieSBjaGFu
Z2luZyB0aGUgcm93IGRpbWVuc2lvbnMgb2YgYSBtYXRyaXggdHlwZS4KK1RUeXBlICZTZXRNYXRy
aXhSb3dEaW0oY29uc3QgVFR5cGUgJm1hdHJpeFR5cGUsIGludCBuZXdEaW0pOworCisvLyBSZXR1
cm5zIHRydWUgaWZmIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgY29udGFpbnMgYSBmaWVsZCB3aXRo
IG1hdHJpeCB0eXBlLgorYm9vbCBIYXNNYXRyaXhGaWVsZChjb25zdCBUU3RydWN0dXJlICZzdHJ1
Y3R1cmUpOworCisvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkgY29u
dGFpbnMgYSBmaWVsZCB3aXRoIGFycmF5IHR5cGUuCitib29sIEhhc0FycmF5RmllbGQoY29uc3Qg
VFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKKworLy8gQ29lcmNlcyBgZnJvbU5vZGVgIHRvIGB0b1R5
cGVgIGJ5IGEgY29uc3RydWN0b3IgY2FsbCBvZiBgdG9UeXBlYCBpZiB0aGVpciB0eXBlcyBkaWZm
ZXIuCisvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIGFyZSByZXRhaW5lZC4KKy8vIEFy
cmF5IHR5cGVzIGFyZSBub3QgYWxsb3dlZC4KK1RJbnRlcm1UeXBlZCAmQ29lcmNlU2ltcGxlKFRC
YXNpY1R5cGUgdG9UeXBlLCBUSW50ZXJtVHlwZWQgJmZyb21Ob2RlKTsKKworLy8gQ29lcmNlcyBg
ZnJvbU5vZGVgIHRvIGB0b1R5cGVgIGJ5IGEgY29uc3RydWN0b3IgY2FsbCBvZiBgdG9UeXBlYCBp
ZiB0aGVpciB0eXBlcyBkaWZmZXIuCisvLyBWZWN0b3IgYW5kIG1hdHJpeCBkaW1lbnNpb25zIG11
c3QgY29pbmNpZGUgYmV0d2VlbiB0byBhbmQgZnJvbS4KKy8vIEFycmF5IHR5cGVzIGFyZSBub3Qg
YWxsb3dlZC4KK1RJbnRlcm1UeXBlZCAmQ29lcmNlU2ltcGxlKGNvbnN0IFRUeXBlICZ0b1R5cGUs
IFRJbnRlcm1UeXBlZCAmZnJvbU5vZGUpOworCitUSW50ZXJtVHlwZWQgJkFzVHlwZShTeW1ib2xF
bnYgJnN5bWJvbEVudiwgY29uc3QgVFR5cGUgJnRvVHlwZSwgVEludGVybVR5cGVkICZmcm9tTm9k
ZSk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0FTVEhFTFBFUlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Db25zdGFudE5hbWVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZkZGQ4NjVjN2NjNmQ1OWQ2ZmViNjU1MDQxYzdiNDkzZWVhN2Q3MmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQ29uc3RhbnROYW1lcy5oCkBAIC0wLDAgKzEsMjYg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfQ09OU1RBTlRfTkFNRVNfSF8KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKworbmFtZXNwYWNl
IHNoCit7CisKK25hbWVzcGFjZSBjb25zdGFudF9uYW1lcworeworCitjb25zdGV4cHIgTmFtZSBr
Q292ZXJhZ2VNYXNrRW5hYmxlZCgiQU5HTEVfQ292ZXJhZ2VNYXNrRW5hYmxlZCIsIFN5bWJvbFR5
cGU6OkFuZ2xlSW50ZXJuYWwpOworY29uc3RleHByIE5hbWUga1Jhc3Rlcml6YXRpb25EaXNjYXJk
RW5hYmxlZCgiQU5HTEVfUmFzdGVyaXphdGlvbkRpc2NhcmQiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKwor
fSAgLy8gbmFtZXNwYWNlIGNvbnN0YW50X25hbWVzCisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisj
ZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0NPTlNU
QU5UX05BTUVTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9EZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4NWU5YTY2ZDU4YjkxODc2M2Y2NWMwZTQ0NjhiYzIy
YTYwZGU2MzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaApAQCAtMCww
ICsxLDE2IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX0RFQlVHX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJB
TlNMQVRPUk1FVEFMRElSRUNUX0RFQlVHX0hfCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
KworI2RlZmluZSBUT0RPKCkgQVNTRVJUKGZhbHNlKQorCisjZGVmaW5lIExPR0lDX0VSUk9SKCkg
QVNTRVJUKGZhbHNlKQorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRP
Uk1FVEFMRElSRUNUX0RFQlVHX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5r
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGVidWdTaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcyYWRkNzcxNDIyMGI0
MTk4YTU3MzYzMzE1OWVjNTY4N2UwMzJiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9EZWJ1Z1NpbmsuaApAQCAtMCwwICsxLDE1OSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGlv
c3RyZWFtPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorCitu
YW1lc3BhY2Ugc2gKK3sKKworY2xhc3MgU3RyaW5nT2JzZXJ2ZXIKK3sKKyAgcHVibGljOgorICAg
IFN0cmluZ09ic2VydmVyKGNvbnN0IHN0ZDo6c3RyaW5nICZuZWVkbGUpIDogbmVlZGxlKG5lZWRs
ZSkgeyBBU1NFUlQoIW5lZWRsZS5lbXB0eSgpKTsgfQorCisgICAgYm9vbCBvYnNlcnZlKGNoYXIg
YykKKyAgICB7CisgICAgICAgIGlmIChuZWVkbGVbY3VyclBvc10gPT0gYykKKyAgICAgICAgewor
ICAgICAgICAgICAgKytjdXJyUG9zOworICAgICAgICAgICAgaWYgKGN1cnJQb3MgPT0gbmVlZGxl
LnNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXNldCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldE5lZWRs
ZSgpIGNvbnN0IHsgcmV0dXJuIG5lZWRsZTsgfQorCisgICAgdm9pZCByZXNldCgpIHsgY3VyclBv
cyA9IDA7IH0KKworICBwcml2YXRlOgorICAgIHN0ZDo6c3RyaW5nIG5lZWRsZTsKKyAgICBzaXpl
X3QgY3VyclBvcyA9IDA7Cit9OworCitjbGFzcyBEZWJ1Z1NpbmsgOiBhbmdsZTo6Tm9uQ29weWFi
bGUKK3sKKyAgcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBFc2NhcGVkU2luazsKKyAgICBjbGFz
cyBFc2NhcGVkU2luayA6IGFuZ2xlOjpOb25Db3B5YWJsZQorICAgIHsKKyAgICAgICAgZnJpZW5k
IGNsYXNzIERlYnVnU2luazsKKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRXNjYXBlZFNpbmso
RGVidWdTaW5rICZvd25lcikgOiBtT3duZXIob3duZXIpLCBtQmVnaW4ob3duZXIuc2l6ZSgpKSB7
fQorCisgICAgICBwdWJsaWM6CisgICAgICAgIEVzY2FwZWRTaW5rKEVzY2FwZWRTaW5rICYmb3Ro
ZXIpIDogbU93bmVyKG90aGVyLm1Pd25lciksIG1CZWdpbihvdGhlci5tQmVnaW4pIHt9CisKKyAg
ICAgICAgfkVzY2FwZWRTaW5rKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAq
cCA9IG1Pd25lci5jX3N0cigpOworICAgICAgICAgICAgY29uc3QgaW50IGVuZCA9IG1Pd25lci5z
aXplKCk7CisgICAgICAgICAgICBtT3duZXIub25Xcml0ZShwICsgbUJlZ2luLCBwICsgZW5kKTsK
KyAgICAgICAgfQorCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJmdldCgpIHsgcmV0dXJuIG1Pd25l
ci5tUGFyZW50OyB9CisKKyAgICAgICAgb3BlcmF0b3IgVEluZm9TaW5rQmFzZSAmKCkgeyByZXR1
cm4gZ2V0KCk7IH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgRGVidWdTaW5rICZtT3duZXI7
CisgICAgICAgIGNvbnN0IGludCBtQmVnaW47CisgICAgfTsKKworICBwdWJsaWM6CisgICAgRGVi
dWdTaW5rKFRJbmZvU2lua0Jhc2UgJnBhcmVudCwgYm9vbCBhbHNvTG9nVG9TdGRvdXQpCisgICAg
ICAgIDogbVBhcmVudChwYXJlbnQpLCBtQWxzb0xvZ1RvU3Rkb3V0KGFsc29Mb2dUb1N0ZG91dCkK
KyAgICB7fQorCisgICAgdm9pZCB3YXRjaChzdGQ6OnN0cmluZyBjb25zdCAmbmVlZGxlKQorICAg
IHsKKyAgICAgICAgaWYgKCFuZWVkbGUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bU9ic2VydmVycy5lbXBsYWNlX2JhY2sobmVlZGxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgZXJhc2UoKQorICAgIHsKKyAgICAgICAgbVBhcmVudC5lcmFzZSgpOworICAgICAgICBm
b3IgKFN0cmluZ09ic2VydmVyICZvYnNlcnZlciA6IG1PYnNlcnZlcnMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG9ic2VydmVyLnJlc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQg
c2l6ZSgpIHsgcmV0dXJuIG1QYXJlbnQuc2l6ZSgpOyB9CisKKyAgICBjb25zdCBUUGVyc2lzdFN0
cmluZyAmc3RyKCkgY29uc3QgeyByZXR1cm4gbVBhcmVudC5zdHIoKTsgfQorCisgICAgY29uc3Qg
Y2hhciAqY19zdHIoKSBjb25zdCB7IHJldHVybiBtUGFyZW50LmNfc3RyKCk7IH0KKworICAgIEVz
Y2FwZWRTaW5rIGVzY2FwZSgpIHsgcmV0dXJuIEVzY2FwZWRTaW5rKCp0aGlzKTsgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgRGVidWdTaW5rICZvcGVyYXRvcjw8KGNvbnN0IFQg
JnZhbHVlKQorICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJlZ2luID0gbVBhcmVudC5zaXpl
KCk7CisgICAgICAgIG1QYXJlbnQgPDwgdmFsdWU7CisgICAgICAgIGNvbnN0IHNpemVfdCBlbmQg
PSBtUGFyZW50LnNpemUoKTsKKworICAgICAgICBjb25zdCBjaGFyICpwID0gbVBhcmVudC5jX3N0
cigpOworICAgICAgICBvbldyaXRlKHAgKyBiZWdpbiwgcCArIGVuZCk7CisKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICBwcml2YXRlOgorICAgIHZvaWQgb25Xcml0ZShjb25zdCBj
aGFyICpiZWdpbiwgY2hhciBjb25zdCAqZW5kKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAq
cCA9IGJlZ2luOworICAgICAgICB3aGlsZSAocCAhPSBlbmQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHN0ZDo6Y291dCA8PCAqcDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChTdHJp
bmdPYnNlcnZlciAmb2JzZXJ2ZXIgOiBtT2JzZXJ2ZXJzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChvYnNlcnZlci5vYnNlcnZlKCpwKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0KQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAm
bmVlZGxlID0gb2JzZXJ2ZXIuZ2V0TmVlZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICh2b2lk
KW5lZWRsZTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRydWUpOyAgLy8gcGxhY2UgeW91
ciBicmVha3BvaW50IGhlcmUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICsrcDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtQWxzb0xvZ1RvU3Rkb3V0
KQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OmNvdXQuZmx1c2goKTsKKyAgICAgICAgfQor
ICAgIH0KKworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UgJm1QYXJlbnQ7CisgICAgc3Rk
Ojp2ZWN0b3I8U3RyaW5nT2JzZXJ2ZXI+IG1PYnNlcnZlcnM7CisgICAgYm9vbCBtQWxzb0xvZ1Rv
U3Rkb3V0OworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2NvdmVy
RGVwZW5kZW50RnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmRmNDMwZTFhYjQxZTFiMTdlMjRk
N2Q2MjFiZjU1YzEyZWI5ZDFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Rpc2Nv
dmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDEzMSBAQAorLy8KKy8vIENvcHly
aWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1
bm9yZGVyZWRfc2V0PgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1
bmN0aW9uVHJhdmVyc2VyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucy5oIgorCit1c2luZyBuYW1l
c3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitj
bGFzcyBEaXNjb3ZlcmVyIDogcHVibGljIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJz
ZXIKK3sKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZh
cmlhYmxlICYpPiAmbVZhcnM7CisgICAgY29uc3QgRnVuY3Rpb25Ub0RlZmluaXRpb24gJm1GdW5j
VG9EZWY7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IFRGdW5jdGlvbiAqPiBtTm9uRGVw
RnVuY3Rpb25zOworCisgIHB1YmxpYzoKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1
bmN0aW9uICo+IG1EZXBGdW5jdGlvbnM7CisKKyAgcHVibGljOgorICAgIERpc2NvdmVyZXIoY29u
c3Qgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMsCisgICAgICAg
ICAgICAgICBjb25zdCBGdW5jdGlvblRvRGVmaW5pdGlvbiAmZnVuY1RvRGVmKQorICAgICAgICA6
IERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIodHJ1ZSwgZmFsc2UsIHRydWUpLCBt
VmFycyh2YXJzKSwgbUZ1bmNUb0RlZihmdW5jVG9EZWYpCisgICAge30KKworICAgIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAg
ICAgaWYgKCFtVmFycyh2YXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpvd25lciA9IGRpc2NvdmVyRW5jbG9zaW5n
RnVuY3Rpb24oc3ltYm9sTm9kZSk7CisgICAgICAgIEFTU0VSVChvd25lcik7CisgICAgICAgIG1E
ZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QWdncmVn
YXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKHZpc2l0ICE9IFZpc2l0OjpQcmVWaXNpdCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFn
Z3JlZ2F0ZU5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3QgVEZ1bmN0aW9uICpmdW5jID0gYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKworICAg
ICAgICAgICAgaWYgKG1Ob25EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVwRnVuY3Rp
b25zLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobURlcEZ1bmN0aW9ucy5maW5kKGZ1bmMp
ID09IG1EZXBGdW5jdGlvbnMuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YXV0byBpdCA9IG1GdW5jVG9EZWYuZmluZChmdW5jKTsKKyAgICAgICAgICAgICAgICBpZiAoaXQg
PT0gbUZ1bmNUb0RlZi5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IFJlY3Vyc2lvbiBpcyBiYW5uZWQgaW4gR0xTTCwgc28gSSBiZWxpZXZlIEFuZ2xlSVIgaGFzIHRo
aXMgcHJvcGVydHkgdG9vLgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50YXRpb24g
YXNzdW1lcyAoZGlyZWN0IGFuZCBtdXR1YWwpIHJlY3Vyc2lvbiBpcyBwcm9oaWJpdGVkLgorICAg
ICAgICAgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlID0gKml0
LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgZnVuY0RlZk5vZGUudHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1Ob25EZXBGdW5jdGlvbnMuZmluZChmdW5jKSAhPSBtTm9uRGVw
RnVuY3Rpb25zLmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVCht
RGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbURlcEZ1bmN0aW9ucy5lbmQoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqb3duZXIgPSBkaXNjb3ZlckVu
Y2xvc2luZ0Z1bmN0aW9uKGFnZ3JlZ2F0ZU5vZGUpOworICAgICAgICAgICAgQVNTRVJUKG93bmVy
KTsKKyAgICAgICAgICAgIG1EZXBGdW5jdGlvbnMuaW5zZXJ0KG93bmVyKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gZnVu
Y0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisKKyAgICAgICAgaWYgKHZpc2l0ICE9IFZpc2l0OjpQ
b3N0VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtRGVwRnVuY3Rpb25zLmZpbmQo
ZnVuYykgIT0gbURlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtTm9u
RGVwRnVuY3Rpb25zLmZpbmQoZnVuYykgIT0gbU5vbkRlcEZ1bmN0aW9ucy5lbmQoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1EZXBG
dW5jdGlvbnMuZmluZChmdW5jKSA9PSBtRGVwRnVuY3Rpb25zLmVuZCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtTm9uRGVwRnVuY3Rpb25zLmluc2VydChmdW5jKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitzdGQ6
OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IHNoOjpEaXNjb3ZlckRlcGVuZGVudEZ1
bmN0aW9ucygKKyAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgY29uc3Qgc3RkOjpmdW5jdGlv
bjxib29sKGNvbnN0IFRWYXJpYWJsZSAmKT4gJnZhcnMpCit7CisgICAgY29uc3QgRnVuY3Rpb25U
b0RlZmluaXRpb24gZnVuY1RvRGVmID0gTWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhyb290KTsK
KyAgICBEaXNjb3ZlcmVyIGRpc2NvdmVyZXIodmFycywgZnVuY1RvRGVmKTsKKyAgICByb290LnRy
YXZlcnNlKCZkaXNjb3ZlcmVyKTsKKyAgICByZXR1cm4gc3RkOjptb3ZlKGRpc2NvdmVyZXIubURl
cEZ1bmN0aW9ucyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRl
bnRGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVkMWJmMjdjOTBjYWIwNmMzYzE4YWUxNDBhZGM4Mzc1ZTJkZGMxNWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMu
aApAQCAtMCwwICsxLDI1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFU
T1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVSREVQRU5ERU5URlVOQ1RJT05TX0hfCisj
ZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0RJU0NPVkVS
REVQRU5ERU5URlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBGaW5kcyBhbmQgcmV0dXJucyBh
bGwgZnVuY3Rpb25zIHRoYXQgY29udGFpbiB0aGUgcHJvdmlkZWQgdmFyaWFibGVzLgorQU5HTEVf
Tk9fRElTQ0FSRCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+IERpc2NvdmVy
RGVwZW5kZW50RnVuY3Rpb25zKAorICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICBjb25zdCBz
dGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgVFZhcmlhYmxlICYpPiAmdmFycyk7CisKK30gIC8vIG5h
bWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0RJU0NPVkVSREVQRU5ERU5URlVOQ1RJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjJkMzkwZTc5NWRiMWI3ZjMzY2JkODQ1YWY3NjEyNTdlN2UwZTBmMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2luZ0Z1bmN0aW9uVHJhdmVyc2VyLmNwcApA
QCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZlcnNl
ci5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK0Rpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXI6OkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIoYm9vbCBwcmVWaXNp
dF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaW5WaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcG9z
dFZpc2l0XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSkKKyAgICA6
IFRJbnRlcm1UcmF2ZXJzZXIocHJlVmlzaXRfLCBpblZpc2l0XywgcG9zdFZpc2l0Xywgc3ltYm9s
VGFibGUpCit7fQorCitjb25zdCBURnVuY3Rpb24gKkRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25U
cmF2ZXJzZXI6OmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpCit7
CisgICAgQVNTRVJUKCFub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKworICAgIHVu
c2lnbmVkIGhlaWdodCA9IDA7CisgICAgd2hpbGUgKFRJbnRlcm1Ob2RlICphbmNlc3RvciA9IGdl
dEFuY2VzdG9yTm9kZShoZWlnaHQpKQorICAgIHsKKyAgICAgICAgaWYgKFRJbnRlcm1GdW5jdGlv
bkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlID0gYW5jZXN0b3ItPmdldEFzRnVuY3Rpb25EZWZpbml0
aW9uKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jRGVmTm9kZS0+Z2V0RnVu
Y3Rpb24oKTsKKyAgICAgICAgfQorICAgICAgICArK2hlaWdodDsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EaXNjb3ZlckVuY2xvc2lu
Z0Z1bmN0aW9uVHJhdmVyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNsb3NpbmdGdW5j
dGlvblRyYXZlcnNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5Y2IyYWEwMDE0YTAwNDkzODZlMmE3ZjZkNzkz
MmQ5YjI3M2M0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGlzY292ZXJFbmNs
b3NpbmdGdW5jdGlvblRyYXZlcnNlci5oCkBAIC0wLDAgKzEsMzEgQEAKKy8vCisvLyBDb3B5cmln
aHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJF
TkNMT1NJTkdGVU5DVElPTlRSQVZFUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9ESVNDT1ZFUkVOQ0xPU0lOR0ZVTkNUSU9OVFJBVkVSU0VS
X0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2
ZXJzZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gQSBUSW50ZXJtVHJhdmVyc2VyIHRoYXQg
c3VwcG9ydHMgZGlzY292ZXJ5IG9mIHRoZSBmdW5jdGlvbiBhIG5vZGUgYmVsb25ncyB0by4KK2Ns
YXNzIERpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb25UcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgoreworICBwdWJsaWM6CisgICAgRGlzY292ZXJFbmNsb3NpbmdGdW5jdGlvblRyYXZl
cnNlcihib29sIHByZVZpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBpblZpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBwb3N0VmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
U3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlID0gbnVsbHB0cik7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSBmdW5jdGlvbiBhIG5vZGUgYmVsb25ncyBpbnNpZGUuCisgICAgLy8gUmV0dXJucyBudWxsIGlm
IHRoZSBub2RlIGRvZXMgbm90IGJlbG9uZyBpbnNpZGUgYSBmdW5jdGlvbi4KKyAgICBjb25zdCBU
RnVuY3Rpb24gKmRpc2NvdmVyRW5jbG9zaW5nRnVuY3Rpb24oVEludGVybU5vZGUgKm5vZGUpOwor
fTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRElTQ09WRVJFTkNMT1NJTkdGVU5DVElPTlRSQVZFUlNF
Ul9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvRW1pdE1ldGFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmJkZDNmY2QzN2E3YWMzZDBlNjEzNjAwYjVl
OWNhODA4ZTMwNTI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5j
cHAKQEAgLTAsMCArMSwyNDU1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorI2lu
Y2x1ZGUgPG1hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3Ry
aW5nQnVpbGRlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Fz
dEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0RlYnVnU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0VtaXRNZXRhbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9O
YW1lLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKyNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfY29uc3RhbnRzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FT
U0VSVFMpCit1c2luZyBTaW5rID0gRGVidWdTaW5rOworI2Vsc2UKK3VzaW5nIFNpbmsgPSBUSW5m
b1NpbmtCYXNlOworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFj
ZQoreworCitzdHJ1Y3QgVmFyRGVjbAoreworICAgIGV4cGxpY2l0IFZhckRlY2woY29uc3QgVFZh
cmlhYmxlICZ2YXIpIDogbVZhcmlhYmxlKCZ2YXIpLCBtSXNGaWVsZChmYWxzZSkge30KKyAgICBl
eHBsaWNpdCBWYXJEZWNsKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCksIG1J
c0ZpZWxkKHRydWUpIHt9CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVFZhcmlhYmxlICZ2YXJp
YWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNWYXJpYWJsZSgpKTsKKyAgICAg
ICAgcmV0dXJuICptVmFyaWFibGU7CisgICAgfQorCisgICAgQU5HTEVfSU5MSU5FIGNvbnN0IFRG
aWVsZCAmZmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRmllbGQoKSk7Cisg
ICAgICAgIHJldHVybiAqbUZpZWxkOworICAgIH0KKworICAgIEFOR0xFX0lOTElORSBib29sIGlz
VmFyaWFibGUoKSBjb25zdCB7IHJldHVybiAhbUlzRmllbGQ7IH0KKworICAgIEFOR0xFX0lOTElO
RSBib29sIGlzRmllbGQoKSBjb25zdCB7IHJldHVybiBtSXNGaWVsZDsgfQorCisgICAgY29uc3Qg
VFR5cGUgJnR5cGUoKSBjb25zdCB7IHJldHVybiBpc0ZpZWxkKCkgPyAqZmllbGQoKS50eXBlKCkg
OiB2YXJpYWJsZSgpLmdldFR5cGUoKTsgfQorCisgICAgU3ltYm9sVHlwZSBzeW1ib2xUeXBlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ZpZWxkKCkgPyBmaWVsZCgpLnN5bWJvbFR5
cGUoKSA6IHZhcmlhYmxlKCkuc3ltYm9sVHlwZSgpOworICAgIH0KKworICBwcml2YXRlOgorICAg
IHVuaW9uCisgICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgKm1WYXJpYWJsZTsKKyAgICAg
ICAgY29uc3QgVEZpZWxkICptRmllbGQ7CisgICAgfTsKKyAgICBib29sIG1Jc0ZpZWxkOworfTsK
KworY2xhc3MgR2VuTWV0YWxUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgorewor
ICBwdWJsaWM6CisgICAgfkdlbk1ldGFsVHJhdmVyc2VyKCkgb3ZlcnJpZGU7CisKKyAgICBHZW5N
ZXRhbFRyYXZlcnNlcihjb25zdCBUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAg
ICAgICAgIFNpbmsgJm91dCwKKyAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVj
dHMsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywK
KyAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudik7CisKKyAgICB2b2lk
IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2
aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICopIG92ZXJyaWRlOworICAgIGJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2
aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNp
dFRlcm5hcnkoVmlzaXQsIFRJbnRlcm1UZXJuYXJ5ICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlz
aXRJZkVsc2UoVmlzaXQsIFRJbnRlcm1JZkVsc2UgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNp
dFN3aXRjaChWaXNpdCwgVEludGVybVN3aXRjaCAqKSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0
Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdEZ1bmN0
aW9uUHJvdG90eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZTsKKyAgICBi
b29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICopIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJt
QmxvY2sgKikgb3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikgb3ZlcnJpZGU7
CisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikg
b3ZlcnJpZGU7CisgICAgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopIG92ZXJy
aWRlOworICAgIGJvb2wgdmlzaXRGb3JMb29wKFRJbnRlcm1Mb29wICopOworICAgIGJvb2wgdmlz
aXRXaGlsZUxvb3AoVEludGVybUxvb3AgKik7CisgICAgYm9vbCB2aXNpdERvV2hpbGVMb29wKFRJ
bnRlcm1Mb29wICopOworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2gg
Kikgb3ZlcnJpZGU7CisKKyAgcHJpdmF0ZToKKyAgICB1c2luZyBGdW5jVG9OYW1lID0gc3RkOjpt
YXA8SW1tdXRhYmxlU3RyaW5nLCBOYW1lPjsKKyAgICBzdGF0aWMgRnVuY1RvTmFtZSBCdWlsZEZ1
bmNUb05hbWUoKTsKKworICAgIHN0cnVjdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZwor
ICAgIHsKKyAgICAgICAgYm9vbCBpc1BhcmFtZXRlciAgICAgICAgICAgICAgICA9IGZhbHNlOwor
ICAgICAgICBib29sIGlzTWFpblBhcmFtZXRlciAgICAgICAgICAgID0gZmFsc2U7CisgICAgICAg
IGJvb2wgZW1pdFBvc3RRdWFsaWZpZXIgICAgICAgICAgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBp
c1BhY2tlZCAgICAgICAgICAgICAgICAgICA9IGZhbHNlOworICAgICAgICBib29sIGRpc2FibGVT
dHJ1Y3RTcGVjaWZpZXIgICAgID0gZmFsc2U7CisgICAgICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAq
aXNQb2ludGVyICAgPSBudWxscHRyOworICAgICAgICBjb25zdCBBZGRyZXNzU3BhY2UgKmlzUmVm
ZXJlbmNlID0gbnVsbHB0cjsKKyAgICB9OworCisgICAgc3RydWN0IEVtaXRUeXBlQ29uZmlnCisg
ICAgeworICAgICAgICBjb25zdCBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyAqZXZkQ29u
ZmlnID0gbnVsbHB0cjsKKyAgICB9OworCisgICAgdm9pZCBlbWl0SW5kZW50YXRpb24oKTsKKyAg
ICB2b2lkIGVtaXRGdW5jdGlvblNpZ25hdHVyZShjb25zdCBURnVuY3Rpb24gJmZ1bmMpOworICAg
IHZvaWQgZW1pdEZ1bmN0aW9uUmV0dXJuKGNvbnN0IFRGdW5jdGlvbiAmZnVuYyk7CisgICAgdm9p
ZCBlbWl0RnVuY3Rpb25QYXJhbWV0ZXIoY29uc3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFy
aWFibGUgJnBhcmFtKTsKKworICAgIHZvaWQgZW1pdE5hbWVPZihjb25zdCBURmllbGQgJm9iamVj
dCk7CisgICAgdm9pZCBlbWl0TmFtZU9mKGNvbnN0IFRTeW1ib2wgJm9iamVjdCk7CisgICAgdm9p
ZCBlbWl0TmFtZU9mKGNvbnN0IFZhckRlY2wgJm9iamVjdCk7CisKKyAgICB2b2lkIGVtaXRCYXJl
VHlwZU5hbWUoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IEVtaXRUeXBlQ29uZmlnICZldENvbmZp
Zyk7CisgICAgdm9pZCBlbWl0VHlwZShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVD
b25maWcgJmV0Q29uZmlnKTsKKyAgICB2b2lkIGVtaXRQb3N0UXVhbGlmaWVyKGNvbnN0IEVtaXRW
YXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWYXJEZWNsICZkZWNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFF1YWxpZmllciBxdWFsaWZpZXIpOworCisgICAgc3RydWN0IEZpZWxkQW5ub3RhdGlv
bkluZGljZXMKKyAgICB7CisgICAgICAgIHNpemVfdCBhdHRyaWJ1dGUgPSAwOworICAgICAgICBz
aXplX3QgY29sb3IgICAgID0gMDsKKyAgICB9OworCisgICAgdm9pZCBlbWl0RmllbGREZWNsYXJh
dGlvbihjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFN0cnVjdHVyZSAmcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RmllbGRBbm5vdGF0aW9uSW5kaWNlcyAmYW5ub3RhdGlvbkluZGljZXMpOworICAgIHZvaWQgZW1p
dEF0dHJpYnV0ZURlY2xhcmF0aW9uKGNvbnN0IFRGaWVsZCAmZmllbGQsIEZpZWxkQW5ub3RhdGlv
bkluZGljZXMgJmFubm90YXRpb25JbmRpY2VzKTsKKyAgICB2b2lkIGVtaXRTdHJ1Y3REZWNsYXJh
dGlvbihjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgdm9pZCBlbWl0T3JkaW5hcnlWYXJpYWJsZURl
Y2xhcmF0aW9uKGNvbnN0IFZhckRlY2wgJmRlY2wsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRD
b25maWcpOworICAgIHZvaWQgZW1pdFZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3QgVmFyRGVjbCAm
ZGVjbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVtaXRWYXJpYWJs
ZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcpOworCisgICAgdm9pZCBlbWl0T3BlbkJyYWNl
KCk7CisgICAgdm9pZCBlbWl0Q2xvc2VCcmFjZSgpOworCisgICAgdm9pZCBncm91cGVkVHJhdmVy
c2UoVEludGVybU5vZGUgJm5vZGUpOworCisgICAgY29uc3QgVEZpZWxkICZnZXREaXJlY3RGaWVs
ZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRzTm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICZpbmRleCk7CisgICAgY29u
c3QgVEZpZWxkICZnZXREaXJlY3RGaWVsZChjb25zdCBUSW50ZXJtVHlwZWQgJmZpZWxkc05vZGUs
IFRJbnRlcm1UeXBlZCAmaW5kZXhOb2RlKTsKKworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpl
bWl0Q29uc3RhbnRVbmlvbkFycmF5KGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVu
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHNpemVfdCBzaXplKTsKKworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICplbWl0Q29uc3Rh
bnRVbmlvbihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0VW5p
b24pOworCisgICAgdm9pZCBlbWl0U2luZ2xlQ29uc3RhbnQoY29uc3QgVENvbnN0YW50VW5pb24g
KmNvbnN0IGNvbnN0VW5pb24pOworCisgIHByaXZhdGU6CisgICAgU2luayAmbU91dDsKKyAgICBj
b25zdCBUQ29tcGlsZXIgJm1Db21waWxlcjsKKyAgICBjb25zdCBQaXBlbGluZVN0cnVjdHMgJm1Q
aXBlbGluZVN0cnVjdHM7CisgICAgY29uc3QgSW52YXJpYW50cyAmbUludmFyaWFudHM7CisgICAg
U3ltYm9sRW52ICZtU3ltYm9sRW52OworICAgIElkR2VuICZtSWRHZW47CisgICAgaW50IG1JbmRl
bnRMZXZlbCAgICAgICAgPSAtMTsKKyAgICBpbnQgbUxhc3RJbmRlbnRhdGlvblBvcyA9IC0xOwor
ICAgIGJvb2wgbVBhcmVudElzU3dpdGNoICAgID0gZmFsc2U7CisgICAgc3RkOjp1bm9yZGVyZWRf
bWFwPGNvbnN0IFRTeW1ib2wgKiwgTmFtZT4gbVJlbmFtZWRTeW1ib2xzOworICAgIGNvbnN0IEZ1
bmNUb05hbWUgbUZ1bmNUb05hbWUgICA9IEJ1aWxkRnVuY1RvTmFtZSgpOworICAgIHNpemVfdCBt
TWFpblRleHR1cmVJbmRleCAgICAgICA9IDA7CisgICAgc2l6ZV90IG1NYWluU2FtcGxlckluZGV4
ICAgICAgID0gMDsKKyAgICBzaXplX3QgbU1haW5Vbmlmb3JtQnVmZmVySW5kZXggPSByeDo6bXRs
OjprRGVmYXVsdFVuaWZvcm1zQmluZGluZ0luZGV4OworfTsKKworfSAgLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCitHZW5NZXRhbFRyYXZlcnNlcjo6fkdlbk1ldGFsVHJhdmVyc2VyKCkKK3sKKyAg
ICBBU1NFUlQobUluZGVudExldmVsID09IC0xKTsKKyAgICBBU1NFUlQoIW1QYXJlbnRJc1N3aXRj
aCk7Cit9CisKK0dlbk1ldGFsVHJhdmVyc2VyOjpHZW5NZXRhbFRyYXZlcnNlcihjb25zdCBUQ29t
cGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNp
bmsgJm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRH
ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmVT
dHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgSW52YXJpYW50cyAmaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudikKKyAgICA6IFRJbnRlcm1UcmF2
ZXJzZXIodHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKyAgICAgIG1PdXQob3V0KSwKKyAgICAgIG1Db21w
aWxlcihjb21waWxlciksCisgICAgICBtUGlwZWxpbmVTdHJ1Y3RzKHBpcGVsaW5lU3RydWN0cyks
CisgICAgICBtSW52YXJpYW50cyhpbnZhcmlhbnRzKSwKKyAgICAgIG1TeW1ib2xFbnYoc3ltYm9s
RW52KSwKKyAgICAgIG1JZEdlbihpZEdlbikKK3t9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6
OmVtaXRJbmRlbnRhdGlvbigpCit7CisgICAgQVNTRVJUKG1JbmRlbnRMZXZlbCA+PSAwKTsKKwor
ICAgIGlmIChtTGFzdEluZGVudGF0aW9uUG9zID09IG1PdXQuc2l6ZSgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuOyAgLy8gTGluZSBpcyBhbHJlYWR5IGluZGVudGVkLgorICAgIH0KKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbUluZGVudExldmVsOyArK2kpCisgICAgeworICAgICAgICBtT3V0
IDw8ICIgICI7CisgICAgfQorCisgICAgbUxhc3RJbmRlbnRhdGlvblBvcyA9IG1PdXQuc2l6ZSgp
OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqR2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIG9w
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1
bHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICphcmdUeXBlMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
VHlwZSAqYXJnVHlwZTEgPSBudWxscHRyKQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6CisgICAgICAgICAgICByZXR1cm4gIiwiOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICI9
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemU6CisgICAgICAgICAgICBy
ZXR1cm4gIj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAg
ICAgICAgcmV0dXJuICIrPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246
CisgICAgICAgICAgICByZXR1cm4gIi09IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11
bEFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiKj0iOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRGl2QXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIvPSI7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICIlPSI7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgICAgICBy
ZXR1cm4gIjw8PSI7ICAvLyBUT0RPOiBDaGVjayBsb2dpY2FsIHZzIGFyaXRobWV0aWMgc2hpZnRp
bmcuCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAg
ICAgICAgICAgcmV0dXJuICI+Pj0iOyAgLy8gVE9ETzogQ2hlY2sgbG9naWNhbCB2cyBhcml0aG1l
dGljIHNoaWZ0aW5nLgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2ln
bjoKKyAgICAgICAgICAgIHJldHVybiAiJj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiXj0iOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuICJ8PSI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgICAgICByZXR1cm4gIisi
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViOgorICAgICAgICAgICAgcmV0dXJuICIt
IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bDoKKyAgICAgICAgICAgIHJldHVybiAi
KiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgICAgICByZXR1cm4g
Ii8iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZDoKKyAgICAgICAgICAgIHJldHVy
biAiJSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAg
ICAgICByZXR1cm4gIjw8IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRpYyBz
aGlmdGluZy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ6CisgICAg
ICAgICAgICByZXR1cm4gIj4+IjsgIC8vIFRPRE86IENoZWNrIGxvZ2ljYWwgdnMgYXJpdGhtZXRp
YyBzaGlmdGluZy4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmQ6CisgICAg
ICAgICAgICByZXR1cm4gIiYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhv
cjoKKyAgICAgICAgICAgIHJldHVybiAiXiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BC
aXR3aXNlT3I6CisgICAgICAgICAgICByZXR1cm4gInwiOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTGVzc1RoYW46CisgICAgICAgICAgICByZXR1cm4gIjwiOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICByZXR1cm4gIj4iOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgIHJldHVybiAi
PD0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAg
ICAgICAgIHJldHVybiAiPj0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGVzc1RoYW5D
b21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI8IjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcExlc3NUaGFuRXF1YWxDb21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJu
ICI8PSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BHcmVhdGVyVGhhbkVxdWFsQ29tcG9u
ZW50V2lzZToKKyAgICAgICAgICAgIHJldHVybiAiPj0iOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wR3JlYXRlclRoYW5Db21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICI+IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcjoKKyAgICAgICAgICAgIHJldHVy
biAifHwiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKyAgICAgICAg
ICAgIHJldHVybiAiIT0vKnhvciovIjsgIC8vIFhYWDogVGhpcyBtaWdodCBuZWVkIHRvIGJlIGhh
bmRsZWQgZGlmZmVyZW50bHkgZm9yIHNvbWUgb2J0dXNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB1c2UgY2FzZS4KKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExvZ2lj
YWxBbmQ6CisgICAgICAgICAgICByZXR1cm4gIiYmIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE5lZ2F0aXZlOgorICAgICAgICAgICAgcmV0dXJuICItIjsKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFBvc2l0aXZlOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiAiKyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BM
b2dpY2FsTm90OgorICAgICAgICAgICAgcmV0dXJuICIhIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcExvZ2ljYWxOb3RDb21wb25lbnRXaXNlOgorICAgICAgICAgICAgcmV0dXJuICIhIjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VOb3Q6CisgICAgICAgICAgICByZXR1
cm4gIn4iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdEluY3JlbWVudDoKKyAgICAg
ICAgICAgIHJldHVybiAiKysiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3Jl
bWVudDoKKyAgICAgICAgICAgIHJldHVybiAiLS0iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wUHJlSW5jcmVtZW50OgorICAgICAgICAgICAgcmV0dXJuICIrKyI7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gIi0tIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAg
ICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1l
c01hdHJpeEFzc2lnbjoKKyAgICAgICAgICAgIHJldHVybiAiKj0iOworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgICAgICByZXR1cm4g
Iio9IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICAgICAgcmV0dXJuICIqPSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BW
ZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAg
ICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc1Nj
YWxhcjoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BFcXVhbENvbXBvbmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4g
Ij09IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToK
KyAgICAgICAgICAgIHJldHVybiAiIT0iOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BF
cXVhbDoKKyAgICAgICAgICAgIGlmICgoYXJnVHlwZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEt
PmlzVmVjdG9yKCkpIHx8CisgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5nZXRTdHJ1Y3QoKSAm
JiBhcmdUeXBlMS0+Z2V0U3RydWN0KCkpIHx8CisgICAgICAgICAgICAgICAgKGFyZ1R5cGUwLT5p
c0FycmF5KCkgJiYgYXJnVHlwZTEtPmlzQXJyYXkoKSkpCisKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIkFOR0xFX2VxdWFsIjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuICI9PSI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFs
OgorICAgICAgICAgICAgaWYgKChhcmdUeXBlMC0+aXNWZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNW
ZWN0b3IoKSkgfHwKKyAgICAgICAgICAgICAgICAoYXJnVHlwZTAtPmlzQXJyYXkoKSAmJiBhcmdU
eXBlMS0+aXNBcnJheSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
IkFOR0xFX25vdEVxdWFsIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGFy
Z1R5cGUwLT5nZXRTdHJ1Y3QoKSAmJiBhcmdUeXBlMS0+Z2V0U3RydWN0KCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9ub3RFcXVhbFN0cnVjdCI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gIiE9IjsKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wS2lsbDoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiAi
a2lsbCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZXR1cm46CisgICAgICAgICAgICBy
ZXR1cm4gInJldHVybiI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCcmVhazoKKyAgICAg
ICAgICAgIHJldHVybiAiYnJlYWsiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29udGlu
dWU6CisgICAgICAgICAgICByZXR1cm4gImNvbnRpbnVlIjsKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wUmFkaWFuczoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfcmFkaWFucyI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZWdyZWVzOgorICAgICAgICAgICAgcmV0dXJuICJB
TkdMRV9kZWdyZWVzIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW46CisgICAgICAg
ICAgICByZXR1cm4gIkFOR0xFX2F0YW4iOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9k
OgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9tb2QiOyAgLy8gZGlmZmVycyBmcm9tIG1ldGFs
Ojptb2QKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZnJhY3Q6CisgICAgICAgICAgICBy
ZXR1cm4gIkFOR0xFX3JlZnJhY3QiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGlzdGFu
Y2U6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2Rpc3RhbmNlIjsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcExlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfbGVuZ3RoIjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcERvdDoKKyAgICAgICAgICAgIHJldHVybiAiQU5H
TEVfZG90IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vcm1hbGl6ZToKKyAgICAgICAg
ICAgIHJldHVybiAiQU5HTEVfbm9ybWFsaXplIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEZhY2Vmb3J3YXJkOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9mYWNlZm9yd2FyZCI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSZWZsZWN0OgorICAgICAgICAgICAgcmV0dXJuICJB
TkdMRV9yZWZsZWN0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bE1hdHJpeENvbXBv
bmVudFdpc2U6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX2NvbXBvbmVudFdpc2VNdWx0aXBs
eSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BPdXRlclByb2R1Y3Q6CisgICAgICAgICAg
ICByZXR1cm4gIkFOR0xFX291dGVyUHJvZHVjdCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BTaWduOgorICAgICAgICAgICAgcmV0dXJuICJBTkdMRV9zaWduIjsKKworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQWJzOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YWJzIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFsbDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OmFsbCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBbnk6CisgICAgICAgICAgICByZXR1
cm4gIm1ldGFsOjphbnkiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luOgorICAgICAg
ICAgICAgcmV0dXJuICJtZXRhbDo6c2luIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENv
czoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvcyI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BUYW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjp0YW4iOworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQXNpbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmFzaW4i
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWNvczoKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OmFjb3MiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU2luaDoKKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OnNpbmgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29z
aDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmNvc2giOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wVGFuaDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnRhbmgiOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbmg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjph
c2luaCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBY29zaDoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmFjb3NoIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0YW5oOgor
ICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6YXRhbmgiOworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRm1hOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Zm1hIjsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFBvdzoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnBvdyI7Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHA6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFs
OjpleHAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXhwMjoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OmV4cDIiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9nOgorICAg
ICAgICAgICAgcmV0dXJuICJtZXRhbDo6bG9nIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZzI6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpsb2cyIjsKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcFNxcnQ6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpzcXJ0IjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb29yOgorICAgICAgICAgICAgcmV0dXJuICJtZXRh
bDo6Zmxvb3IiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVHJ1bmM6CisgICAgICAgICAg
ICByZXR1cm4gIm1ldGFsOjp0cnVuYyI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDZWls
OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y2VpbCI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BGcmFjdDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmZyYWN0IjsKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1pbjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6Om1p
biI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXg6CisgICAgICAgICAgICByZXR1cm4g
Im1ldGFsOjptYXgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmQ6CisgICAgICAg
ICAgICByZXR1cm4gIm1ldGFsOjpyb3VuZCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BS
b3VuZEV2ZW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpyaW50IjsKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcENsYW1wOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6Y2xhbXAi
OyAgLy8gVE9ETyBmYXN0IHZzIHByZWNpc2UgbmFtZXNwYWNlCisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BNaXg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjptaXgiOworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3RlcDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnN0ZXAi
OworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU21vb3Roc3RlcDoKKyAgICAgICAgICAgIHJl
dHVybiAibWV0YWw6OnNtb290aHN0ZXAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTW9k
ZjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6Om1vZGYiOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSXNuYW46CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjppc25hbiI7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJc2luZjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6
OmlzaW5mIjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExkZXhwOgorICAgICAgICAgICAg
cmV0dXJuICJtZXRhbDo6bGRleHAiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRnJleHA6
CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpmcmV4cCI7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbnZlcnNlc3FydDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnJzcXJ0IjsK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorICAgICAgICAgICAgcmV0dXJuICJt
ZXRhbDo6Y3Jvc3MiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeDoKKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OmRmZHgiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZk
eToKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmRmZHkiOworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wRndpZHRoOgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6ZndpZHRoIjsKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRyYW5zcG9zZToKKyAgICAgICAgICAgIHJldHVybiAi
bWV0YWw6OnRyYW5zcG9zZSI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFu
dDoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OmRldGVybWluYW50IjsKKworICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wSW52ZXJzZToKKyAgICAgICAgICAgIHJldHVybiAiQU5HTEVfaW52
ZXJzZSI7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmxvYXRCaXRzVG9VaW50OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BV
aW50Qml0c1RvRmxvYXQ6CisgICAgICAgIHsKKyNkZWZpbmUgUkVUVVJOX0FTX1RZUEUocG9zdCkg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBzd2l0Y2ggKHJlc3VsdFR5cGUuZ2V0QmFzaWNUeXBl
KCkpICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludDogICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgIHJldHVybiAiYXNfdHlwZTxpbnQiIHBvc3QgIj4iOyAgIFwKKyAg
ICAgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0VUludDogICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgcmV0dXJuICJhc190eXBlPHVpbnQiIHBvc3QgIj4iOyAgXAorICAgICAgICAgICAg
Y2FzZSBUQmFzaWNUeXBlOjpFYnRGbG9hdDogICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gImFzX3R5cGU8ZmxvYXQiIHBvc3QgIj4iOyBcCisgICAgICAgICAgICBkZWZhdWx0OiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFRPRE8oKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRPcGVyYXRv
cl9UT0RPIjsgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIHdoaWxlIChmYWxzZSkKKworICAgICAgICAgICAgaWYgKHJlc3Vs
dFR5cGUuaXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
QVNfVFlQRSgiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRU
eXBlLmlzVmVjdG9yKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChy
ZXN1bHRUeXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQ
RSgiMiIpOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fQVNfVFlQRSgiMyIpOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fQVNfVFlQRSgiNCIpOworICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICJUT3BlcmF0b3JfVE9E
TyI7CisgICAgICAgICAgICB9CisKKyN1bmRlZiBSRVRVUk5fQVNfVFlQRQorICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tVbm9ybTJ4MTY6CisgICAgICAgICAgICBy
ZXR1cm4gIm1ldGFsOjpwYWNrX2Zsb2F0X3RvX3Vub3JtMngxNiI7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BQYWNrU25vcm0yeDE2OgorICAgICAgICAgICAgcmV0dXJuICJtZXRhbDo6cGFj
a19mbG9hdF90b19zbm9ybTJ4MTYiOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQYWNr
VW5vcm00eDg6CisgICAgICAgICAgICByZXR1cm4gIm1ldGFsOjpwYWNrX2Zsb2F0X3RvX3Vub3Jt
NHg4IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tTbm9ybTR4ODoKKyAgICAgICAg
ICAgIHJldHVybiAibWV0YWw6OnBhY2tfZmxvYXRfdG9fc25vcm00eDgiOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisgICAgICAgICAgICByZXR1cm4gIm1l
dGFsOjp1bnBhY2tfdW5vcm0yeDE2X3RvX2Zsb2F0IjsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFVucGFja1Nub3JtMngxNjoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja19z
bm9ybTJ4MTZfdG9fZmxvYXQiOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tV
bm9ybTR4ODoKKyAgICAgICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja191bm9ybTR4OF90b19m
bG9hdCI7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTR4ODoKKyAgICAg
ICAgICAgIHJldHVybiAibWV0YWw6OnVucGFja19zbm9ybTR4OF90b19mbG9hdCI7CisKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tIYWxmMngxNjoKKyAgICAgICAgICAgIHJldHVybiAi
QU5HTEVfcGFja19oYWxmXzJ4MTYiOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNr
SGFsZjJ4MTY6CisgICAgICAgICAgICByZXR1cm4gIkFOR0xFX3VucGFja19oYWxmXzJ4MTYiOwor
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZEV4dHJhY3Q6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZEluc2VydDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEJpdGZpZWxkUmV2ZXJzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdENvdW50
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRmluZExTQjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEZpbmRNU0I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVYWRkQ2Fycnk6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVc3ViQm9ycm93OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wVW11bEV4dGVuZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW11
bEV4dGVuZGVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQmFycmllcjoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE1lbW9yeUJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BNZW1vcnlCYXJyaWVyQXRvbWljQ291bnRlcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcE1lbW9yeUJhcnJpZXJCdWZmZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1v
cnlCYXJyaWVySW1hZ2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVy
U2hhcmVkOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JvdXBNZW1vcnlCYXJyaWVyOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQWRkOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQXRvbWljTWluOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljTWF4
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljQW5kOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQXRvbWljT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNY
b3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdG9taWNFeGNoYW5nZToKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY0NvbXBTd2FwOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRW1pdFZlcnRleDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVuZFByaW1pdGl2
ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZUcmFuc2Zvcm06CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BQYWNrRG91YmxlMngzMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cFVucGFja0RvdWJsZTJ4MzI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBcnJheUxlbmd0
aDoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiAiVE9wZXJhdG9yX1RP
RE8iOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ29uc3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1
bmN0aW9uSW5BU1Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsSW50ZXJuYWxSYXdG
dW5jdGlvbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxCdWlsdEluRnVuY3Rpb246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJ
bmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCisjaWYgMAorc3RhdGljIGludCBHZXRPcGVyYXRv
clByZWNlZGVuY2UoVE9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6IHsKKyAgICAgICAgICAgIHJldHVybiAxNzsK
KyAgICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEFkZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YkFzc2ln
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bEFzc2lnbjoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcERpdkFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2RB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VYb3JBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3
aXNlT3JBc3NpZ246IHsKKyAgICAgICAgICAgIHJldHVybiAxNjsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOiB7CisgICAgICAgICAgICBy
ZXR1cm4gMTU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cExvZ2ljYWxBbmQ6IHsKKyAgICAgICAgICAgIHJldHVybiAxNDsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOiB7CisgICAgICAgICAgICBy
ZXR1cm4gMTM7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEJpdHdpc2VYb3I6IHsKKyAgICAgICAgICAgIHJldHVybiAxMjsKKyAgICAgICAgfSBicmVhazsK
KworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDogeworICAgICAgICAgICAg
cmV0dXJuIDExOworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMb2dpY2FsWG9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWw6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDogeworICAgICAgICAgICAgcmV0dXJuIDEwOwor
ICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdy
ZWF0ZXJUaGFuRXF1YWw6IHsKKyAgICAgICAgICAgIHJldHVybiA5OworICAgICAgICB9IGJyZWFr
OworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0OiB7CisgICAgICAgICAgICByZXR1cm4gNzsK
KyAgICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViOiB7CisgICAgICAgICAgICByZXR1cm4gNjsKKyAg
ICAgICAgfSBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1v
ZDogeworICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE5lZ2F0aXZlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UG9zaXRpdmU6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsTm90OgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVu
dDogeworICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BQb3N0RGVjcmVtZW50OiB7CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfSBi
cmVhazsKKworICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICBUT0RPKCk7CisgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK25hbWVzcGFjZQoreworCitl
bnVtIGNsYXNzIEFzc29jaWF0aXZpdHkKK3sKKyAgICBOb25lLAorICAgIExlZnQsCisgICAgUmln
aHQsCit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworc3RhdGljIEFzc29jaWF0aXZp
dHkgR2V0QXNzb2NpYXRpdml0eShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAg
ICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBZGQ6CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BTdWI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWw6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJTW9kOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dHdpc2VBbmQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wRXF1YWw6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcExlc3NUaGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
R3JlYXRlclRoYW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxPcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExv
Z2ljYWxYb3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29tbWE6IHsKKyAgICAgICAgICAgIHJldHVybiBBc3NvY2lh
dGl2aXR5OjpMZWZ0OworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0
TGVmdEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRBc3Np
Z246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0
aXZpdHk6OlJpZ2h0OworICAgICAgICB9IGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BOZWdhdGl2ZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc2l0aXZlOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE5vdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEJpdHdpc2VOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0SW5jcmVt
ZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFByZURlY3JlbWVudDogeworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6Ok5v
bmU7CisgICAgICAgIH0gYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAg
VE9ETygpOworICAgICAgICAgICAgcmV0dXJuIEFzc29jaWF0aXZpdHk6Ok5vbmU7CisgICAgICAg
IH0KKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIGJvb2wgSXNTeW1ib2xpY09wZXJhdG9yKFRP
cGVyYXRvciBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAm
cmVzdWx0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAq
YXJnVHlwZTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgKmFy
Z1R5cGUxID0gbnVsbHB0cikKK3sKKyAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BDYWxsQnVp
bHRJbkZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gIXN0ZDo6aXNhbG51bShHZXRPcGVyYXRvclN0cmluZyhvcCwgcmVzdWx0VHlwZSwgYXJn
VHlwZTAsIGFyZ1R5cGUxKVswXSk7Cit9CisKK3N0YXRpYyBUSW50ZXJtQmluYXJ5ICpBc1NwZWNp
ZmljQmluYXJ5Tm9kZShUSW50ZXJtTm9kZSAmbm9kZSwgVE9wZXJhdG9yIG9wKQoreworICAgIFRJ
bnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLmdldEFzQmluYXJ5Tm9kZSgpOworICAgIGlm
IChiaW5hcnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpbmFyeU5vZGUtPmdldE9wKCkg
PT0gb3AgPyBiaW5hcnlOb2RlIDogbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3N0YXRpYyBib29sIFBhcmVudGhlc2l6ZShUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAg
ICBpZiAobm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzQWdncmVnYXRlKCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFz
U3dpenpsZU5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoVEludGVybVVuYXJ5ICp1bmFyeU5vZGUgPSBub2RlLmdldEFzVW5hcnlOb2RlKCkpCisg
ICAgeworICAgICAgICAvLyBUT0RPOiBVc2UgYSBwcmVjZWRlbmNlIGFuZCBhc3NvY2lhdGl2aXR5
IHJ1bGVzIGluc3RlYWQgb2YgdGhpcyBhZC1ob2MgaW1wbC4KKyAgICAgICAgY29uc3QgVFR5cGUg
JnJlc3VsdFR5cGUgPSB1bmFyeU5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUg
JmFyZ1R5cGUgICAgPSB1bmFyeU5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpOworICAgICAg
ICByZXR1cm4gSXNTeW1ib2xpY09wZXJhdG9yKHVuYXJ5Tm9kZS0+Z2V0T3AoKSwgcmVzdWx0VHlw
ZSwgJmFyZ1R5cGUpOworICAgIH0KKworICAgIGlmIChUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2Rl
ID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7CisgICAgICAgIC8vIFRPRE86IFVzZSBh
IHByZWNlZGVuY2UgYW5kIGFzc29jaWF0aXZpdHkgcnVsZXMgaW5zdGVhZCBvZiB0aGlzIGFkLWhv
YyBpbXBsLgorICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBiaW5hcnlOb2RlLT5nZXRPcCgp
OworICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleElu
ZGlyZWN0OgorICAgICAgICAgICAgICAgIHJldHVybiBQYXJlbnRoZXNpemUoKmJpbmFyeU5vZGUt
PmdldExlZnQoKSk7CisKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246Cisg
ICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5pdGlhbGl6ZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gQXNTcGVjaWZpY0JpbmFyeU5vZGUoKmJpbmFyeU5vZGUtPmdldFJpZ2h0KCksIFRP
cGVyYXRvcjo6RU9wQ29tbWEpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXN1bHRUeXBlID0gYmluYXJ5Tm9kZS0+
Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlwZSAgID0gYmlu
YXJ5Tm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5
cGUgJnJpZ2h0VHlwZSAgPSBiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRUeXBlKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIElzU3ltYm9saWNPcGVyYXRvcihiaW5hcnlOb2RlLT5nZXRPcCgp
LCByZXN1bHRUeXBlLCAmbGVmdFR5cGUsICZyaWdodFR5cGUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2
ZXJzZXI6Omdyb3VwZWRUcmF2ZXJzZShUSW50ZXJtTm9kZSAmbm9kZSkKK3sKKyAgICBjb25zdCBi
b29sIGVtaXRQYXJlbnMgPSBQYXJlbnRoZXNpemUobm9kZSk7CisKKyAgICBpZiAoZW1pdFBhcmVu
cykKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIigiOworICAgIH0KKworICAgIG5vZGUudHJhdmVy
c2UodGhpcyk7CisKKyAgICBpZiAoZW1pdFBhcmVucykKKyAgICB7CisgICAgICAgIG1PdXQgPDwg
IikiOworICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdFBvc3RRdWFsaWZp
ZXIoY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25maWcgJmV2ZENvbmZpZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZhckRlY2wgJmRlY2ws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUUXVhbGlm
aWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICB7CisgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxUG9zaXRpb246CisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6
RXZxRnJhZ0Nvb3JkOgorICAgICAgICAgICAgbU91dCA8PCAiIFtbcG9zaXRpb25dXSI7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVBvaW50U2l6ZToK
KyAgICAgICAgICAgIG1PdXQgPDwgIiBbW3BvaW50X3NpemVdXSI7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZlcnRleElEOgorICAgICAgICAgICAg
aWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbU91dCA8PCAiIFtbdmVydGV4X2lkXV0iOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFQb2ludENvb3JkOgorICAg
ICAgICAgICAgaWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbcG9pbnRfY29vcmRdXSI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyb250
RmFjaW5nOgorICAgICAgICAgICAgaWYgKGV2ZENvbmZpZy5pc01haW5QYXJhbWV0ZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZnJvbnRfZmFjaW5nXV0iOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNvbnN0IGJvb2wgaXNJbnZhcmlhbnQgPQor
ICAgICAgICBkZWNsLmlzRmllbGQoKSA/IG1JbnZhcmlhbnRzLmNvbnRhaW5zKGRlY2wuZmllbGQo
KSkgOiBtSW52YXJpYW50cy5jb250YWlucyhkZWNsLnZhcmlhYmxlKCkpOworCisgICAgaWYgKGlz
SW52YXJpYW50KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiIFtbaW52YXJpYW50XV0iOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgRW1pdE5hbWUoU2luayAmb3V0LCBjb25zdCBOYW1lICZuYW1l
KQoreworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgRGVidWdTaW5rOjpF
c2NhcGVkU2luayBlc2NhcGVkT3V0KG91dC5lc2NhcGUoKSk7CisjZWxzZQorICAgIFRJbmZvU2lu
a0Jhc2UgJmVzY2FwZWRPdXQgPSBvdXQ7CisjZW5kaWYKKyAgICBuYW1lLmVtaXQoZXNjYXBlZE91
dCk7Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXROYW1lT2YoY29uc3QgVEZpZWxk
ICZvYmplY3QpCit7CisgICAgRW1pdE5hbWUobU91dCwgTmFtZShvYmplY3QpKTsKK30KKwordm9p
ZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdE5hbWVPZihjb25zdCBUU3ltYm9sICZvYmplY3QpCit7
CisgICAgYXV0byBpdCA9IG1SZW5hbWVkU3ltYm9scy5maW5kKCZvYmplY3QpOworICAgIGlmIChp
dCA9PSBtUmVuYW1lZFN5bWJvbHMuZW5kKCkpCisgICAgeworICAgICAgICBFbWl0TmFtZShtT3V0
LCBOYW1lKG9iamVjdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBFbWl0TmFt
ZShtT3V0LCBpdC0+c2Vjb25kKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6
OmVtaXROYW1lT2YoY29uc3QgVmFyRGVjbCAmb2JqZWN0KQoreworICAgIGlmIChvYmplY3QuaXNG
aWVsZCgpKQorICAgIHsKKyAgICAgICAgZW1pdE5hbWVPZihvYmplY3QuZmllbGQoKSk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVtaXROYW1lT2Yob2JqZWN0LnZhcmlhYmxlKCkp
OworICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1pdEJhcmVUeXBlTmFtZShj
b25zdCBUVHlwZSAmdHlwZSwgY29uc3QgRW1pdFR5cGVDb25maWcgJmV0Q29uZmlnKQoreworICAg
IGNvbnN0IFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKworICAg
IHN3aXRjaCAoYmFzaWNUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUQmFzaWNUeXBlOjpFYnRW
b2lkOgorICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEJvb2w6CisgICAgICAgIGNhc2UgVEJh
c2ljVHlwZTo6RWJ0RmxvYXQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorICAg
ICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidFVJbnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1P
dXQgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0U3RydWN0OgorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUgPSAqdHlwZS5nZXRTdHJ1Y3QoKTsKKyAg
ICAgICAgICAgIGVtaXROYW1lT2Yoc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEludGVyZmFjZUJsb2NrOgorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrID0g
KnR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICAgICAgICAgIGVtaXROYW1lT2YoaW50ZXJm
YWNlQmxvY2spOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIoYmFzaWNUeXBlKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZXRDb25maWcuZXZkQ29uZmlnICYmIGV0Q29u
ZmlnLmV2ZENvbmZpZy0+aXNNYWluUGFyYW1ldGVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgRW1pdE5hbWUobU91dCwgR2V0VGV4dHVyZVR5cGVOYW1lKGJhc2ljVHlw
ZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZlbnYgPSBtU3lt
Ym9sRW52LmdldFRleHR1cmVFbnYoYmFzaWNUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dE5hbWVPZihlbnYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUT0RPKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVt
aXRUeXBlKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBFbWl0VHlwZUNvbmZpZyAmZXRDb25maWcp
Cit7CisgICAgaWYgKGV0Q29uZmlnLmV2ZENvbmZpZykKKyAgICB7CisgICAgICAgIGNvbnN0IGF1
dG8gJmV2ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25maWc7CisgICAgICAgIGlmIChldmRDb25m
aWcuaXNQb2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8IHRvU3RyaW5nKCpl
dmRDb25maWcuaXNQb2ludGVyKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGV2ZENvbmZpZy5pc1JlZmVyZW5jZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbU91dCA8PCB0b1N0cmluZygqZXZkQ29uZmlnLmlzUmVmZXJlbmNlKTsKKyAgICAg
ICAgICAgIG1PdXQgPDwgIiAiOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNB
cnJheSgpKQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiQU5HTEVfdGVuc29yPCI7CisgICAgfQor
CisgICAgaWYgKHR5cGUuaXNWZWN0b3IoKSB8fCB0eXBlLmlzTWF0cml4KCkpCisgICAgeworICAg
ICAgICBtT3V0IDw8ICJtZXRhbDo6IjsKKyAgICB9CisKKyAgICBpZiAoZXRDb25maWcuZXZkQ29u
ZmlnICYmIGV0Q29uZmlnLmV2ZENvbmZpZy0+aXNQYWNrZWQpCisgICAgeworICAgICAgICBtT3V0
IDw8ICJwYWNrZWRfIjsKKyAgICB9CisKKyAgICBlbWl0QmFyZVR5cGVOYW1lKHR5cGUsIGV0Q29u
ZmlnKTsKKworICAgIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgeworICAgICAgICBtT3V0IDw8
IHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZS5pc01hdHJp
eCgpKQorICAgIHsKKyAgICAgICAgbU91dCA8PCB0eXBlLmdldENvbHMoKSA8PCAieCIgPDwgdHlw
ZS5nZXRSb3dzKCk7CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAg
ICAgICAgZm9yIChhdXRvIHNpemUgOiB0eXBlLmdldEFycmF5U2l6ZXMoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbU91dCA8PCAiLCAiIDw8IHNpemU7CisgICAgICAgIH0KKyAgICAgICAgbU91
dCA8PCAiPiI7CisgICAgfQorCisgICAgaWYgKGV0Q29uZmlnLmV2ZENvbmZpZykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGF1dG8gJmV2ZENvbmZpZyA9ICpldENvbmZpZy5ldmRDb25maWc7CisgICAg
ICAgIGlmIChldmRDb25maWcuaXNQb2ludGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0
IDw8ICIgKiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZkQ29uZmlnLmlzUmVmZXJl
bmNlKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIgJiI7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRGaWVsZERlY2xhcmF0aW9uKGNv
bnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUU3RydWN0dXJlICZwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGaWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9u
SW5kaWNlcykKK3sKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgID0gKmZpZWxkLnR5cGUoKTsK
KyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2ljID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKworICAg
IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnIGV2ZENvbmZpZzsKKyAgICBldmRDb25maWcu
ZW1pdFBvc3RRdWFsaWZpZXIgICAgICA9IHRydWU7CisgICAgZXZkQ29uZmlnLmRpc2FibGVTdHJ1
Y3RTcGVjaWZpZXIgPSB0cnVlOworICAgIGV2ZENvbmZpZy5pc1BhY2tlZCAgICAgICAgICAgICAg
ID0gbVN5bWJvbEVudi5pc1BhY2tlZChmaWVsZCk7CisgICAgZXZkQ29uZmlnLmlzUG9pbnRlciAg
ICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUG9pbnRlcihmaWVsZCk7CisgICAgZXZkQ29uZmln
LmlzUmVmZXJlbmNlICAgICAgICAgICAgPSBtU3ltYm9sRW52LmlzUmVmZXJlbmNlKGZpZWxkKTsK
KyAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKGZpZWxkKSwgZXZkQ29uZmlnKTsK
KworICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbCA9IHR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAg
c3dpdGNoIChxdWFsKQorICAgIHsKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0SW46
CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudEluLmV4dGVybmFsID09
ICZwYXJlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91dCA8PCAiIFtbZmxh
dF1dIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxRnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZx
RnJhZ0RhdGE6CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5l
eHRlcm5hbCA9PSAmcGFyZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgo
dHlwZS5pc1ZlY3RvcigpICYmCisgICAgICAgICAgICAgICAgICAgICAoYmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0SW50IHx8IGJhc2ljID09IFRCYXNpY1R5cGU6OkVidFVJbnQgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICBiYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgIHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ0RhdGEpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOgorICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGlzIG5vdCBjb3JyZWN0IGluIGdlbmVyYWwgYW5kIG5lZWRzIGEgcmVpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gSW4gR0xTTCAzLjAsIFdlIGNhbid0
IGFsd2F5cyBhc3N1bWUgdGhpcyBpcyBnb2luZyB0byBiZSBhIHNhZmUgaW5kZXguCisgICAgICAg
ICAgICAgICAgICAgIC8vIFNlZSA0LjMuOC4yCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5HTC9zcGVjcy9lcy8zLjAvR0xTTF9FU19T
cGVjaWZpY2F0aW9uXzMuMDAucGRmCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleCA9
IGFubm90YXRpb25JbmRpY2VzLmNvbG9yKys7CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwg
IiBbW2NvbG9yKCIgPDwgaW5kZXggPDwgIildXSI7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpF
dnFGcmFnRGVwdGg6CisgICAgICAgICAgICBtT3V0IDw8ICIgW1tkZXB0aChhbnkpXV0iOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIHN0ZDo6bWFwPE5hbWUsIHNpemVfdD4gQnVpbGRFeHRlcm5hbEF0
dHJpYnV0ZUluZGV4TWFwKAorICAgIGNvbnN0IFRDb21waWxlciAmY29tcGlsZXIsCisgICAgY29u
c3QgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gJnN0cnVjdHVyZSkKK3sKKyAgICBBU1NFUlQo
c3RydWN0dXJlLmlzVG90YWxseUZ1bGwoKSk7CisKKyAgICBjb25zdCBhdXRvICZzaGFkZXJWYXJz
ICAgICA9IGNvbXBpbGVyLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBjb25zdCBzaXplX3Qgc2hhZGVy
VmFyU2l6ZSA9IHNoYWRlclZhcnMuc2l6ZSgpOworICAgIHNpemVfdCBzaGFkZXJWYXJJbmRleCAg
ICAgID0gMDsKKworICAgIGNvbnN0IGF1dG8gJmV4dGVybmFsRmllbGRzID0gc3RydWN0dXJlLmV4
dGVybmFsLT5maWVsZHMoKTsKKyAgICBjb25zdCBzaXplX3QgZXh0ZXJuYWxTaXplICA9IGV4dGVy
bmFsRmllbGRzLnNpemUoKTsKKyAgICBzaXplX3QgZXh0ZXJuYWxJbmRleCAgICAgICA9IDA7CisK
KyAgICBjb25zdCBhdXRvICZpbnRlcm5hbEZpZWxkcyA9IHN0cnVjdHVyZS5pbnRlcm5hbC0+Zmll
bGRzKCk7CisgICAgY29uc3Qgc2l6ZV90IGludGVybmFsU2l6ZSAgPSBpbnRlcm5hbEZpZWxkcy5z
aXplKCk7CisgICAgc2l6ZV90IGludGVybmFsSW5kZXggICAgICAgPSAwOworCisgICAgLy8gSW50
ZXJuYWwgZmllbGRzIGFyZSBuZXZlciBzcGxpdC4gRXh0ZXJuYWwgZmllbGRzIGFyZSBzb21ldGlt
ZXMgc3BsaXQuCisgICAgQVNTRVJUKGV4dGVybmFsU2l6ZSA+PSBpbnRlcm5hbFNpemUpOworCisg
ICAgLy8gU3RydWN0dXJlcyBkbyBub3QgY29udGFpbiBhbnkgaW5hY3RpdmUgZmllbGRzLgorICAg
IEFTU0VSVChzaGFkZXJWYXJTaXplID49IGludGVybmFsU2l6ZSk7CisKKyAgICBzdGQ6Om1hcDxO
YW1lLCBzaXplX3Q+IGV4dGVybmFsTmFtZVRvQXR0cmlidXRlSW5kZXg7CisgICAgc2l6ZV90IGF0
dHJpYnV0ZUluZGV4ID0gMDsKKworICAgIHdoaWxlIChpbnRlcm5hbEluZGV4IDwgaW50ZXJuYWxT
aXplKQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZpbnRlcm5hbEZpZWxkID0gKmludGVy
bmFsRmllbGRzW2ludGVybmFsSW5kZXhdOworICAgICAgICBjb25zdCBOYW1lIGludGVybmFsTmFt
ZSAgICAgPSBOYW1lKGludGVybmFsRmllbGQpOworICAgICAgICBjb25zdCBUVHlwZSAmaW50ZXJu
YWxUeXBlICAgPSAqaW50ZXJuYWxGaWVsZC50eXBlKCk7CisgICAgICAgIHdoaWxlIChpbnRlcm5h
bE5hbWUucmF3TmFtZSgpICE9IHNoYWRlclZhcnNbc2hhZGVyVmFySW5kZXhdLm5hbWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FzZSByZXByZXNlbnRzIGFuIGluYWN0aXZlIGZp
ZWxkLgorCisgICAgICAgICAgICArK3NoYWRlclZhckluZGV4OworICAgICAgICAgICAgQVNTRVJU
KHNoYWRlclZhckluZGV4IDwgc2hhZGVyVmFyU2l6ZSk7CisKKyAgICAgICAgICAgICsrYXR0cmli
dXRlSW5kZXg7ICAvLyBUT0RPOiBNaWdodCBuZWVkIHRvIGluY3JlbWVudCBtb3JlIGlmIHNoYWRl
ciB2YXIgdHlwZSBpcyBhIG1hdHJpeC4KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHNpemVf
dCBjb2xzID0gaW50ZXJuYWxUeXBlLmlzTWF0cml4KCkgPyBpbnRlcm5hbFR5cGUuZ2V0Q29scygp
IDogMTsKKworICAgICAgICBmb3IgKHNpemVfdCBjID0gMDsgYyA8IGNvbHM7ICsrYykKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkICZleHRlcm5hbEZpZWxkID0gKmV4dGVybmFs
RmllbGRzW2V4dGVybmFsSW5kZXhdOworICAgICAgICAgICAgY29uc3QgTmFtZSBleHRlcm5hbE5h
bWUgICAgID0gTmFtZShleHRlcm5hbEZpZWxkKTsKKyAgICAgICAgICAgIEFTU0VSVCghZXh0ZXJu
YWxGaWVsZC50eXBlKCktPmlzTWF0cml4KCkpOworCisgICAgICAgICAgICBleHRlcm5hbE5hbWVU
b0F0dHJpYnV0ZUluZGV4W2V4dGVybmFsTmFtZV0gPSBhdHRyaWJ1dGVJbmRleDsKKworICAgICAg
ICAgICAgKytleHRlcm5hbEluZGV4OworICAgICAgICAgICAgKythdHRyaWJ1dGVJbmRleDsKKyAg
ICAgICAgfQorCisgICAgICAgICsrc2hhZGVyVmFySW5kZXg7CisgICAgICAgICsraW50ZXJuYWxJ
bmRleDsKKyAgICB9CisKKyAgICBBU1NFUlQoc2hhZGVyVmFySW5kZXggPD0gc2hhZGVyVmFyU2l6
ZSk7CisgICAgQVNTRVJUKGV4dGVybmFsSW5kZXggPD0gZXh0ZXJuYWxTaXplKTsgIC8vIGxlc3Mg
dGhhbiBpZiBwYWRkaW5nIHdhcyBpbnRyb2R1Y2VkCisgICAgQVNTRVJUKGludGVybmFsSW5kZXgg
PT0gaW50ZXJuYWxTaXplKTsKKworICAgIHJldHVybiBleHRlcm5hbE5hbWVUb0F0dHJpYnV0ZUlu
ZGV4OworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0QXR0cmlidXRlRGVjbGFyYXRp
b24oY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGaWVsZEFubm90YXRpb25JbmRpY2VzICZhbm5vdGF0aW9uSW5kaWNl
cykKK3sKKyAgICBFbWl0VmFyaWFibGVEZWNsYXJhdGlvbkNvbmZpZyBldmRDb25maWc7CisgICAg
ZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZpZXIgPSB0cnVlOworICAgIGVtaXRWYXJpYWJs
ZURlY2xhcmF0aW9uKFZhckRlY2woZmllbGQpLCBldmRDb25maWcpOworICAgIG1PdXQgPDwgIiBb
W2F0dHJpYnV0ZSgiIDw8IGFubm90YXRpb25JbmRpY2VzLmF0dHJpYnV0ZSsrIDw8ICIpXV0iOwor
fQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0U3RydWN0RGVjbGFyYXRpb24oY29uc3Qg
VFR5cGUgJnR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2lj
VHlwZTo6RWJ0U3RydWN0KTsKKyAgICBBU1NFUlQodHlwZS5pc1N0cnVjdFNwZWNpZmllcigpKTsK
KworICAgIG1PdXQgPDwgInN0cnVjdCAiOworICAgIGVtaXRCYXJlVHlwZU5hbWUodHlwZSwge30p
OworCisgICAgbU91dCA8PCAiXG4iOworICAgIGVtaXRPcGVuQnJhY2UoKTsKKworICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICp0eXBlLmdldFN0cnVjdCgpOworICAgIHN0ZDo6bWFw
PE5hbWUsIHNpemVfdD4gZmllbGRUb0F0dHJpYnV0ZUluZGV4OworICAgIGNvbnN0IGJvb2wgaGFz
QXR0cmlidXRlSW5kaWNlcyAgICAgICAgICAgPSBtUGlwZWxpbmVTdHJ1Y3RzLnZlcnRleEluLmV4
dGVybmFsID09ICZzdHJ1Y3R1cmU7CisgICAgY29uc3QgYm9vbCByZWNsYWltVW51c2VkQXR0cmli
dXRlSW5kaWNlcyA9IG1Db21waWxlci5nZXRTaGFkZXJWZXJzaW9uKCkgPCAzMDA7CisKKyAgICBp
ZiAoaGFzQXR0cmlidXRlSW5kaWNlcykKKyAgICB7CisgICAgICAgIGZpZWxkVG9BdHRyaWJ1dGVJ
bmRleCA9CisgICAgICAgICAgICBCdWlsZEV4dGVybmFsQXR0cmlidXRlSW5kZXhNYXAobUNvbXBp
bGVyLCBtUGlwZWxpbmVTdHJ1Y3RzLnZlcnRleEluKTsKKyAgICB9CisKKyAgICBGaWVsZEFubm90
YXRpb25JbmRpY2VzIGFubm90YXRpb25JbmRpY2VzOworCisgICAgZm9yIChjb25zdCBURmllbGQg
KmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgIHsKKyAgICAgICAgZW1pdEluZGVudGF0
aW9uKCk7CisgICAgICAgIGlmIChoYXNBdHRyaWJ1dGVJbmRpY2VzKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBhdXRvIGl0ID0gZmllbGRUb0F0dHJpYnV0ZUluZGV4LmZpbmQoTmFtZSgq
ZmllbGQpKTsKKyAgICAgICAgICAgIGlmIChpdCA9PSBmaWVsZFRvQXR0cmlidXRlSW5kZXguZW5k
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZpZWxkLT5zeW1ib2xU
eXBlKCkgPT0gU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGZpZWxkLT5uYW1lKCkuYmVnaW5zV2l0aCgiXyIpKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoYW5nbGU6OkVuZHNXaXRoKGZpZWxkLT5uYW1lKCkuZGF0YSgpLCAiX3BhZCIpKTsKKyAgICAg
ICAgICAgICAgICBlbWl0RmllbGREZWNsYXJhdGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3Rh
dGlvbkluZGljZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChmaWVsZC0+c3ltYm9sVHlwZSgpICE9IFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWwgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIWZpZWxkLT5u
YW1lKCkuYmVnaW5zV2l0aCgiXyIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICFhbmdsZTo6
RW5kc1dpdGgoZmllbGQtPm5hbWUoKS5kYXRhKCksICJfcGFkIikpOworICAgICAgICAgICAgICAg
IGlmICghcmVjbGFpbVVudXNlZEF0dHJpYnV0ZUluZGljZXMpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uSW5kaWNlcy5hdHRyaWJ1dGUgPSBpdC0+c2Vj
b25kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbWl0QXR0cmlidXRlRGVj
bGFyYXRpb24oKmZpZWxkLCBhbm5vdGF0aW9uSW5kaWNlcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0RmllbGREZWNs
YXJhdGlvbigqZmllbGQsIHN0cnVjdHVyZSwgYW5ub3RhdGlvbkluZGljZXMpOworICAgICAgICB9
CisgICAgICAgIG1PdXQgPDwgIjtcbiI7CisgICAgfQorCisgICAgaWYgKCFtUGlwZWxpbmVTdHJ1
Y3RzLm1hdGNoZXMoc3RydWN0dXJlLCB0cnVlLCB0cnVlKSkKKyAgICB7CisgICAgICAgIE1ldGFs
TGF5b3V0T2ZDb25maWcgbGF5b3V0Q29uZmlnOworICAgICAgICBsYXlvdXRDb25maWcudHJlYXRT
YW1wbGVyc0FzVGV4dHVyZUVudiA9IHRydWU7CisgICAgICAgIExheW91dCBsYXlvdXQgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gTWV0YWxMYXlvdXRPZih0eXBlLCBsYXlvdXRDb25maWcpOwor
ICAgICAgICBzaXplX3QgcGFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGxheW91dC5z
aXplT2YgJSAxNjsKKyAgICAgICAgaWYgKHBhZCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICAgICAgICAgIG1PdXQgPDwgImNoYXIgIjsKKyAgICAg
ICAgICAgIEVtaXROYW1lKG1PdXQsIG1JZEdlbi5jcmVhdGVOZXdOYW1lKCJwYWQiKSk7CisgICAg
ICAgICAgICBtT3V0IDw8ICJbIiA8PCBwYWQgPDwgIl07XG4iOworICAgICAgICB9CisgICAgfQor
CisgICAgZW1pdENsb3NlQnJhY2UoKTsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6ZW1p
dE9yZGluYXJ5VmFyaWFibGVEZWNsYXJhdGlvbigKKyAgICBjb25zdCBWYXJEZWNsICZkZWNsLAor
ICAgIGNvbnN0IEVtaXRWYXJpYWJsZURlY2xhcmF0aW9uQ29uZmlnICZldmRDb25maWcpCit7Cisg
ICAgRW1pdFR5cGVDb25maWcgZXRDb25maWc7CisgICAgZXRDb25maWcuZXZkQ29uZmlnID0gJmV2
ZENvbmZpZzsKKworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVjbC50eXBlKCk7CisgICAgZW1p
dFR5cGUodHlwZSwgZXRDb25maWcpOworCisgICAgaWYgKGRlY2wuc3ltYm9sVHlwZSgpICE9IFN5
bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgIGVt
aXROYW1lT2YoZGVjbCk7CisgICAgfQorfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0
VmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBWYXJEZWNsICZkZWNsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRW1pdFZhcmlhYmxlRGVjbGFy
YXRpb25Db25maWcgJmV2ZENvbmZpZykKK3sKKyAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5
cGUgPSBkZWNsLnN5bWJvbFR5cGUoKTsKKyAgICBjb25zdCBUVHlwZSAmdHlwZSAgICAgICAgICAg
PSBkZWNsLnR5cGUoKTsKKyAgICBjb25zdCBUQmFzaWNUeXBlIGJhc2ljVHlwZSAgPSB0eXBlLmdl
dEJhc2ljVHlwZSgpOworCisgICAgc3dpdGNoIChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBj
YXNlIFRCYXNpY1R5cGU6OkVidFN0cnVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5
cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSAmJiAhZXZkQ29uZmlnLmRpc2FibGVTdHJ1Y3RTcGVjaWZp
ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFldmRDb25maWcuaXNQ
YXJhbWV0ZXIpOworICAgICAgICAgICAgICAgIGVtaXRTdHJ1Y3REZWNsYXJhdGlvbih0eXBlKTsK
KyAgICAgICAgICAgICAgICBpZiAoc3ltYm9sVHlwZSAhPSBTeW1ib2xUeXBlOjpFbXB0eSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1PdXQgPDwgIiAiOworICAgICAg
ICAgICAgICAgICAgICBlbWl0TmFtZU9mKGRlY2wpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBlbWl0T3JkaW5hcnlWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2wsIGV2ZENvbmZpZyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN5bWJvbFR5cGUgIT0gU3ltYm9sVHlwZTo6
RW1wdHkgfHwgZXZkQ29uZmlnLmlzUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGVtaXRPcmRpbmFy
eVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbCwgZXZkQ29uZmlnKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChldmRDb25maWcuZW1pdFBvc3RRdWFsaWZpZXIpCisgICAgeworICAgICAgICBl
bWl0UG9zdFF1YWxpZmllcihldmRDb25maWcsIGRlY2wsIHR5cGUuZ2V0UXVhbGlmaWVyKCkpOwor
ICAgIH0KK30KKwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCAqc3ltYm9sTm9kZSkKK3sKKyAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5v
ZGUtPnZhcmlhYmxlKCk7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgICAgPSB2YXIuZ2V0VHlwZSgp
OworCisgICAgQVNTRVJUKHZhci5zeW1ib2xUeXBlKCkgIT0gU3ltYm9sVHlwZTo6RW1wdHkpOwor
CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gVEJhc2ljVHlwZTo6RWJ0Vm9pZCkKKyAg
ICB7CisgICAgICAgIG1PdXQgPDwgIi8qIjsKKyAgICAgICAgZW1pdE5hbWVPZih2YXIpOworICAg
ICAgICBtT3V0IDw8ICIqLyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVtaXRO
YW1lT2YodmFyKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuTWV0YWxUcmF2ZXJzZXI6OmVtaXRTaW5n
bGVDb25zdGFudChjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3QgY29uc3RVbmlvbikKK3sKKyAg
ICBzd2l0Y2ggKGNvbnN0VW5pb24tPmdldFR5cGUoKSkKKyAgICB7CisgICAgICAgIGNhc2UgVEJh
c2ljVHlwZTo6RWJ0Qm9vbDoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAoY29uc3RV
bmlvbi0+Z2V0QkNvbnN0KCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidEZsb2F0OgorICAgICAgICB7
CisgICAgICAgICAgICBtT3V0IDw8IGNvbnN0VW5pb24tPmdldEZDb25zdCgpIDw8ICJmIjsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6OkVidElu
dDoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCBjb25zdFVuaW9uLT5nZXRJQ29uc3Qo
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRCYXNpY1R5cGU6
OkVidFVJbnQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgY29uc3RVbmlvbi0+Z2V0
VUNvbnN0KCkgPDwgInUiOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworY29uc3QgVENvbnN0YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3Rh
bnRVbmlvbkFycmF5KAorICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpjb25zdCBjb25zdFVuaW9u
LAorICAgIGNvbnN0IHNpemVfdCBzaXplKQoreworICAgIGNvbnN0IFRDb25zdGFudFVuaW9uICpj
b25zdFVuaW9uSXRlcmF0ZWQgPSBjb25zdFVuaW9uOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrLCBjb25zdFVuaW9uSXRlcmF0ZWQrKykKKyAgICB7CisgICAgICAgIGVtaXRT
aW5nbGVDb25zdGFudChjb25zdFVuaW9uSXRlcmF0ZWQpOworCisgICAgICAgIGlmIChpICE9IHNp
emUgLSAxKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGNvbnN0VW5pb25JdGVyYXRlZDsKK30KKworY29uc3QgVENvbnN0
YW50VW5pb24gKkdlbk1ldGFsVHJhdmVyc2VyOjplbWl0Q29uc3RhbnRVbmlvbihjb25zdCBUVHlw
ZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVENvbnN0YW50VW5pb24gKmNvbnN0VW5pb25CZWdpbikKK3sKKyAg
ICBjb25zdCBUQ29uc3RhbnRVbmlvbiAqY29uc3RVbmlvbkN1cnIgPSBjb25zdFVuaW9uQmVnaW47
CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlICAgICAgICAgID0gdHlwZS5nZXRTdHJ1
Y3QoKTsKKyAgICBpZiAoc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRW1pdFR5cGVDb25maWcg
Y29uZmlnID0gRW1pdFR5cGVDb25maWd7bnVsbHB0cn07CisgICAgICAgIGVtaXRUeXBlKHR5cGUs
IGNvbmZpZyk7CisgICAgICAgIG1PdXQgPDwgInsiOworICAgICAgICBjb25zdCBURmllbGRMaXN0
ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkc1tpXS0+dHlwZSgpOworICAgICAgICAgICAgY29uc3RV
bmlvbkN1cnIgICAgICAgICA9IGVtaXRDb25zdGFudFVuaW9uKCpmaWVsZFR5cGUsIGNvbnN0VW5p
b25DdXJyKTsKKyAgICAgICAgICAgIGlmIChpICE9IGZpZWxkcy5zaXplKCkgLSAxKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBtT3V0IDw8ICJ9IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHNpemUgICAgPSB0eXBlLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgYm9v
bCB3cml0ZVR5cGUgPSBzaXplID4gMTsKKyAgICAgICAgaWYgKHdyaXRlVHlwZSkKKyAgICAgICAg
eworICAgICAgICAgICAgRW1pdFR5cGVDb25maWcgY29uZmlnID0gRW1pdFR5cGVDb25maWd7bnVs
bHB0cn07CisgICAgICAgICAgICBlbWl0VHlwZSh0eXBlLCBjb25maWcpOworICAgICAgICAgICAg
bU91dCA8PCAiKCI7CisgICAgICAgIH0KKyAgICAgICAgY29uc3RVbmlvbkN1cnIgPSBlbWl0Q29u
c3RhbnRVbmlvbkFycmF5KGNvbnN0VW5pb25DdXJyLCBzaXplKTsKKyAgICAgICAgaWYgKHdyaXRl
VHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAiKSI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIGNvbnN0VW5pb25DdXJyOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVy
c2VyOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24gKmNvbnN0VmFsdWVO
b2RlKQoreworICAgIGVtaXRDb25zdGFudFVuaW9uKGNvbnN0VmFsdWVOb2RlLT5nZXRUeXBlKCks
IGNvbnN0VmFsdWVOb2RlLT5nZXRDb25zdGFudFZhbHVlKCkpOworfQorCitib29sIEdlbk1ldGFs
VHJhdmVyc2VyOjp2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICpzd2l6emxlTm9k
ZSkKK3sKKyAgICBncm91cGVkVHJhdmVyc2UoKnN3aXp6bGVOb2RlLT5nZXRPcGVyYW5kKCkpOwor
ICAgIG1PdXQgPDwgIi4iOworCisgICAgeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VS
VFMpCisgICAgICAgIERlYnVnU2luazo6RXNjYXBlZFNpbmsgZXNjYXBlZE91dChtT3V0LmVzY2Fw
ZSgpKTsKKyAgICAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gZXNjYXBlZE91dC5nZXQoKTsKKyNl
bHNlCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dCAgICAgICAgPSBtT3V0OworI2VuZGlmCisg
ICAgICAgIHN3aXp6bGVOb2RlLT53cml0ZU9mZnNldHNBc1hZWlcoJm91dCk7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBURmllbGQgJkdlbk1ldGFsVHJhdmVyc2VyOjpn
ZXREaXJlY3RGaWVsZChjb25zdCBURmllbGRMaXN0Q29sbGVjdGlvbiAmZmllbGRMaXN0Q29sbGVj
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRDb25zdGFudFVuaW9uICZpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXguZ2V0VHlwZSgp
ID09IFRCYXNpY1R5cGU6OkVidEludCk7CisKKyAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZExp
c3QgPSBmaWVsZExpc3RDb2xsZWN0aW9uLmZpZWxkcygpOworICAgIGNvbnN0IGludCBpbmRleFZh
bCAgICAgICAgICA9IGluZGV4LmdldElDb25zdCgpOworICAgIGNvbnN0IFRGaWVsZCAmZmllbGQg
ICAgICAgICA9ICpmaWVsZExpc3RbaW5kZXhWYWxdOworCisgICAgcmV0dXJuIGZpZWxkOworfQor
Citjb25zdCBURmllbGQgJkdlbk1ldGFsVHJhdmVyc2VyOjpnZXREaXJlY3RGaWVsZChjb25zdCBU
SW50ZXJtVHlwZWQgJmZpZWxkc05vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmluZGV4Tm9kZSkKK3sKKyAgICBjb25zdCBU
VHlwZSAmZmllbGRzVHlwZSA9IGZpZWxkc05vZGUuZ2V0VHlwZSgpOworCisgICAgY29uc3QgVEZp
ZWxkTGlzdENvbGxlY3Rpb24gKmZpZWxkTGlzdENvbGxlY3Rpb24gPSBmaWVsZHNUeXBlLmdldFN0
cnVjdCgpOworICAgIGlmIChmaWVsZExpc3RDb2xsZWN0aW9uID09IG51bGxwdHIpCisgICAgewor
ICAgICAgICBmaWVsZExpc3RDb2xsZWN0aW9uID0gZmllbGRzVHlwZS5nZXRJbnRlcmZhY2VCbG9j
aygpOworICAgIH0KKyAgICBBU1NFUlQoZmllbGRMaXN0Q29sbGVjdGlvbik7CisKKyAgICBjb25z
dCBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqaW5kZXhOb2RlXyA9IGluZGV4Tm9kZS5nZXRBc0NvbnN0
YW50VW5pb24oKTsKKyAgICBBU1NFUlQoaW5kZXhOb2RlXyk7CisgICAgY29uc3QgVENvbnN0YW50
VW5pb24gJmluZGV4ID0gKmluZGV4Tm9kZV8tPmdldENvbnN0YW50VmFsdWUoKTsKKworICAgIHJl
dHVybiBnZXREaXJlY3RGaWVsZCgqZmllbGRMaXN0Q29sbGVjdGlvbiwgaW5kZXgpOworfQorCiti
b29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAq
YmluYXJ5Tm9kZSkKK3sKKyAgICBjb25zdCBUT3BlcmF0b3Igb3AgICAgICA9IGJpbmFyeU5vZGUt
PmdldE9wKCk7CisgICAgVEludGVybVR5cGVkICZsZWZ0Tm9kZSAgPSAqYmluYXJ5Tm9kZS0+Z2V0
TGVmdCgpOworICAgIFRJbnRlcm1UeXBlZCAmcmlnaHROb2RlID0gKmJpbmFyeU5vZGUtPmdldFJp
Z2h0KCk7CisKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhE
aXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgeworICAgICAgICAgICAgZ3JvdXBlZFRyYXZl
cnNlKGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1PdXQgPDwgIi4iOworICAgICAgICAgICAgZW1p
dE5hbWVPZihnZXREaXJlY3RGaWVsZChsZWZ0Tm9kZSwgcmlnaHROb2RlKSk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhJbmRpcmVjdDoKKyAgICAgICAgewor
ICAgICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1PdXQg
PDwgIlsiOworICAgICAgICAgICAgcmlnaHROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICAg
ICAgbU91dCA8PCAiXSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJlc3VsdFR5cGUgPSBi
aW5hcnlOb2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmbGVmdFR5cGUg
ICA9IGxlZnROb2RlLmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyaWdodFR5
cGUgID0gcmlnaHROb2RlLmdldFR5cGUoKTsKKworICAgICAgICAgICAgaWYgKElzU3ltYm9saWNP
cGVyYXRvcihvcCwgcmVzdWx0VHlwZSwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBncm91cGVkVHJhdmVyc2UobGVmdE5vZGUpOworICAgICAg
ICAgICAgICAgIGlmIChvcCAhPSBUT3BlcmF0b3I6OkVPcENvbW1hKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbU91dCA8PCAiICI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3AsIHJlc3VsdFR5cGUs
ICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSkgPDwgIiAiOworICAgICAgICAgICAgICAgIGdyb3VwZWRU
cmF2ZXJzZShyaWdodE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1PdXQgPDwgR2V0T3BlcmF0b3JTdHJpbmcob3As
IHJlc3VsdFR5cGUsICZsZWZ0VHlwZSwgJnJpZ2h0VHlwZSkgPDwgIigiOworICAgICAgICAgICAg
ICAgIGxlZnROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG1PdXQgPDwgIiwg
IjsKKyAgICAgICAgICAgICAgICByaWdodE5vZGUudHJhdmVyc2UodGhpcyk7CisgICAgICAgICAg
ICAgICAgbU91dCA8PCAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIElzUG9zdGZpeChUT3BlcmF0b3Igb3Ap
Cit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQ
b3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERlY3JlbWVudDoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNp
dFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKnVuYXJ5Tm9kZSkKK3sKKyAgICBjb25zdCBUT3Bl
cmF0b3Igb3AgICAgICA9IHVuYXJ5Tm9kZS0+Z2V0T3AoKTsKKyAgICBjb25zdCBUVHlwZSAmcmVz
dWx0VHlwZSA9IHVuYXJ5Tm9kZS0+Z2V0VHlwZSgpOworCisgICAgVEludGVybVR5cGVkICZhcmcg
ICAgPSAqdW5hcnlOb2RlLT5nZXRPcGVyYW5kKCk7CisgICAgY29uc3QgVFR5cGUgJmFyZ1R5cGUg
PSBhcmcuZ2V0VHlwZSgpOworCisgICAgY29uc3QgY2hhciAqbmFtZSA9IEdldE9wZXJhdG9yU3Ry
aW5nKG9wLCByZXN1bHRUeXBlLCAmYXJnVHlwZSk7CisKKyAgICBpZiAoSXNTeW1ib2xpY09wZXJh
dG9yKG9wLCByZXN1bHRUeXBlLCAmYXJnVHlwZSkpCisgICAgeworICAgICAgICBjb25zdCBib29s
IHBvc3RmaXggPSBJc1Bvc3RmaXgob3ApOworICAgICAgICBpZiAoIXBvc3RmaXgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1PdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBncm91cGVk
VHJhdmVyc2UoYXJnKTsKKyAgICAgICAgaWYgKHBvc3RmaXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1PdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtT3V0IDw8IG5hbWUgPDwgIigiOworICAgICAgICBhcmcudHJhdmVyc2UodGhpcyk7Cisg
ICAgICAgIG1PdXQgPDwgIikiOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJtVGVybmFyeSAq
Y29uZGl0aW9uYWxOb2RlKQoreworICAgIGdyb3VwZWRUcmF2ZXJzZSgqY29uZGl0aW9uYWxOb2Rl
LT5nZXRDb25kaXRpb24oKSk7CisgICAgbU91dCA8PCAiID8gIjsKKyAgICBncm91cGVkVHJhdmVy
c2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0VHJ1ZUV4cHJlc3Npb24oKSk7CisgICAgbU91dCA8PCAi
IDogIjsKKyAgICBncm91cGVkVHJhdmVyc2UoKmNvbmRpdGlvbmFsTm9kZS0+Z2V0RmFsc2VFeHBy
ZXNzaW9uKCkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVy
c2VyOjp2aXNpdElmRWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqaWZUaGVuRWxzZU5vZGUpCit7
CisgICAgVEludGVybVR5cGVkICZjb25kTm9kZSA9ICppZlRoZW5FbHNlTm9kZS0+Z2V0Q29uZGl0
aW9uKCk7CisgICAgVEludGVybUJsb2NrICp0aGVuTm9kZSA9IGlmVGhlbkVsc2VOb2RlLT5nZXRU
cnVlQmxvY2soKTsKKyAgICBUSW50ZXJtQmxvY2sgKmVsc2VOb2RlID0gaWZUaGVuRWxzZU5vZGUt
PmdldEZhbHNlQmxvY2soKTsKKworICAgIGVtaXRJbmRlbnRhdGlvbigpOworICAgIG1PdXQgPDwg
ImlmICgiOworICAgIGNvbmROb2RlLnRyYXZlcnNlKHRoaXMpOworICAgIG1PdXQgPDwgIikiOwor
CisgICAgaWYgKHRoZW5Ob2RlKQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiXG4iOworICAgICAg
ICB0aGVuTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1PdXQgPDwgIiB7fSI7CisgICAgfQorCisgICAgaWYgKGVsc2VOb2RlKQorICAgIHsKKyAg
ICAgICAgbU91dCA8PCAiXG4iOworICAgICAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICAgICAg
bU91dCA8PCAiZWxzZVxuIjsKKyAgICAgICAgZWxzZU5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBBbHdheXMgZW1pdCAiZWxzZSIgZXZlbiB3
aGVuIGVtcHR5IGJsb2NrIHRvIGF2b2lkIG5lc3RlZCBpZi1zdG10IGlzc3Vlcy4KKyAgICAgICAg
bU91dCA8PCAiIGVsc2Uge30iOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKnN3
aXRjaE5vZGUpCit7CisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91dCA8PCAic3dpdGNo
ICgiOworICAgIHN3aXRjaE5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgbU91
dCA8PCAiKVxuIjsKKworICAgIEFTU0VSVCghbVBhcmVudElzU3dpdGNoKTsKKyAgICBtUGFyZW50
SXNTd2l0Y2ggPSB0cnVlOworICAgIHN3aXRjaE5vZGUtPmdldFN0YXRlbWVudExpc3QoKS0+dHJh
dmVyc2UodGhpcyk7CisgICAgbVBhcmVudElzU3dpdGNoID0gZmFsc2U7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Q2FzZShWaXNpdCwgVElu
dGVybUNhc2UgKmNhc2VOb2RlKQoreworICAgIGVtaXRJbmRlbnRhdGlvbigpOworCisgICAgaWYg
KGNhc2VOb2RlLT5oYXNDb25kaXRpb24oKSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
Y29uZEV4cHIgPSBjYXNlTm9kZS0+Z2V0Q29uZGl0aW9uKCk7CisgICAgICAgIG1PdXQgPDwgImNh
c2UgIjsKKyAgICAgICAgY29uZEV4cHItPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtT3V0IDw8
ICI6IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU91dCA8PCAiZGVmYXVsdDpc
biI7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVy
c2VyOjplbWl0RnVuY3Rpb25TaWduYXR1cmUoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQoreworICAg
IGNvbnN0IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGVtaXRGdW5jdGlvblJl
dHVybihmdW5jKTsKKworICAgIG1PdXQgPDwgIiAiOworICAgIGVtaXROYW1lT2YoZnVuYyk7Cisg
ICAgaWYgKGlzTWFpbikKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIjAiOworICAgIH0KKyAgICBt
T3V0IDw8ICIoIjsKKworICAgIGJvb2wgZW1pdENvbW1hICAgICAgICAgID0gZmFsc2U7CisgICAg
Y29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jLmdldFBhcmFtQ291bnQoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChl
bWl0Q29tbWEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgIiwgIjsKKyAgICAgICAg
fQorICAgICAgICBlbWl0Q29tbWEgPSB0cnVlOworCisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAm
cGFyYW0gPSAqZnVuYy5nZXRQYXJhbShpKTsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUGFyYW1ldGVy
KGZ1bmMsIHBhcmFtKTsKKyAgICB9CisKKyAgICBtT3V0IDw8ICIpIjsKK30KKwordm9pZCBHZW5N
ZXRhbFRyYXZlcnNlcjo6ZW1pdEZ1bmN0aW9uUmV0dXJuKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykK
K3sKKyAgICBjb25zdCBib29sIGlzTWFpbiA9IGZ1bmMuaXNNYWluKCk7CisKKyAgICBjb25zdCBU
VHlwZSAmcmV0dXJuVHlwZSA9IGZ1bmMuZ2V0UmV0dXJuVHlwZSgpOworICAgIGlmIChpc01haW4p
CisgICAgeworICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSByZXR1cm5UeXBl
LmdldFN0cnVjdCgpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IG51bGxwdHIpOworICAg
ICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudE91dC5tYXRjaGVzKCpzdHJ1Y3R1cmUp
KQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8ICJmcmFnbWVudCAiOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKG1QaXBlbGluZVN0cnVjdHMudmVydGV4T3V0Lm1hdGNoZXMoKnN0
cnVjdHVyZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwgInZlcnRleCAiOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVE9ETygpOworICAg
ICAgICB9CisgICAgfQorICAgIGVtaXRUeXBlKHJldHVyblR5cGUsIEVtaXRUeXBlQ29uZmlnKCkp
OworfQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0RnVuY3Rpb25QYXJhbWV0ZXIoY29u
c3QgVEZ1bmN0aW9uICZmdW5jLCBjb25zdCBUVmFyaWFibGUgJnBhcmFtKQoreworICAgIGNvbnN0
IGJvb2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAg
ICAgICAgICA9IHBhcmFtLmdldFR5cGUoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1
cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25m
aWcgZXZkQ29uZmlnOworICAgIGV2ZENvbmZpZy5pc1BhcmFtZXRlciAgICAgICA9IHRydWU7Cisg
ICAgZXZkQ29uZmlnLmlzTWFpblBhcmFtZXRlciAgID0gaXNNYWluOworICAgIGV2ZENvbmZpZy5l
bWl0UG9zdFF1YWxpZmllciA9IGlzTWFpbjsKKyAgICBldmRDb25maWcuaXNQb2ludGVyICAgICAg
ICAgPSBtU3ltYm9sRW52LmlzUG9pbnRlcihwYXJhbSk7CisgICAgZXZkQ29uZmlnLmlzUmVmZXJl
bmNlICAgICAgID0gbVN5bWJvbEVudi5pc1JlZmVyZW5jZShwYXJhbSk7CisgICAgZW1pdFZhcmlh
YmxlRGVjbGFyYXRpb24oVmFyRGVjbChwYXJhbSksIGV2ZENvbmZpZyk7CisKKyAgICBpZiAoaXNN
YWluKQorICAgIHsKKyAgICAgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlv
biA9CisgICAgICAgICAgICAoKHNoOjpUcmFuc2xhdG9yTWV0YWxEaXJlY3QgKikmbUNvbXBpbGVy
KS0+Z2V0VHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbigpOworICAgICAgICBpZiAoc3RydWN0dXJl
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVBpcGVsaW5lU3RydWN0cy5mcmFnbWVudElu
Lm1hdGNoZXMoKnN0cnVjdHVyZSkgfHwKKyAgICAgICAgICAgICAgICBtUGlwZWxpbmVTdHJ1Y3Rz
LnZlcnRleEluLm1hdGNoZXMoKnN0cnVjdHVyZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbU91dCA8PCAiIFtbc3RhZ2VfaW5dXSI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLmFuZ2xlVW5pZm9ybXMubWF0Y2hlcygqc3RydWN0
dXJlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIgW1tidWZmZXIo
IiA8PCByeDo6bXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXggPDwgIildXSI7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtUGlwZWxpbmVTdHJ1Y3RzLnVzZXJVbmlm
b3Jtcy5tYXRjaGVzKCpzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1PdXQgPDwgIiBbW2J1ZmZlcigiIDw8IG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4IDw8ICIpXV0i
OworICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFVuaWZvcm1CdWZmZXJCaW5kaW5nKHBh
cmFtLm5hbWUoKS5kYXRhKCksIG1NYWluVW5pZm9ybUJ1ZmZlckluZGV4KTsKKyAgICAgICAgICAg
ICAgICBtTWFpblVuaWZvcm1CdWZmZXJJbmRleCArPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3Qo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHN0cnVjdHVyZS0+bmFtZSgp
ID09ICJtZXRhbDo6c2FtcGxlciIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU91
dCA8PCAiIFtbc2FtcGxlcigiIDw8IChtTWFpblNhbXBsZXJJbmRleCkgPDwgIildXSI7CisgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgb3JpZ2luYWxOYW1lID0KKyAgICAgICAgICAg
ICAgICAgICAgcmVmbGVjdGlvbi0+Z2V0T3JpZ2luYWxOYW1lKHBhcmFtLnVuaXF1ZUlkKCkuZ2V0
KCkpOworICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmFkZFNhbXBsZXJCaW5kaW5nKG9yaWdp
bmFsTmFtZSwgbU1haW5TYW1wbGVySW5kZXgpOworICAgICAgICAgICAgICAgIG1NYWluU2FtcGxl
ckluZGV4ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAiIFtbdGV4dHVyZSgiIDw8IChtTWFpblRl
eHR1cmVJbmRleCkgPDwgIildXSI7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBvcmln
aW5hbE5hbWUgPSByZWZsZWN0aW9uLT5nZXRPcmlnaW5hbE5hbWUocGFyYW0udW5pcXVlSWQoKS5n
ZXQoKSk7CisgICAgICAgICAgICByZWZsZWN0aW9uLT5hZGRUZXh0dXJlQmluZGluZyhvcmlnaW5h
bE5hbWUsIG1NYWluU2FtcGxlckluZGV4KTsKKyAgICAgICAgICAgIG1NYWluVGV4dHVyZUluZGV4
ICs9IHR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKE5hbWUocGFyYW0pID09IFBpcGVsaW5le1BpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkLCBu
dWxscHRyfS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQaXBlbGluZTo6VmFyaWFudDo6TW9kaWZpZWQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBtT3V0IDw8ICIgW1tpbnN0YW5jZV9pZF1dIjsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJt
RnVuY3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90b05vZGUpCit7CisgICAgY29uc3QgVEZ1bmN0aW9u
ICZmdW5jID0gKmZ1bmNQcm90b05vZGUtPmdldEZ1bmN0aW9uKCk7CisKKyAgICBlbWl0SW5kZW50
YXRpb24oKTsKKyAgICBlbWl0RnVuY3Rpb25TaWduYXR1cmUoZnVuYyk7Cit9CisKK2Jvb2wgR2Vu
TWV0YWxUcmF2ZXJzZXI6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVu
Y3Rpb25EZWZpbml0aW9uICpmdW5jRGVmTm9kZSkKK3sKKyAgICBjb25zdCBURnVuY3Rpb24gJmZ1
bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgVEludGVybUJsb2NrICZib2R5
ICAgID0gKmZ1bmNEZWZOb2RlLT5nZXRCb2R5KCk7CisKKyAgICBlbWl0SW5kZW50YXRpb24oKTsK
KyAgICBlbWl0RnVuY3Rpb25TaWduYXR1cmUoZnVuYyk7CisgICAgbU91dCA8PCAiXG4iOworICAg
IGJvZHkudHJhdmVyc2UodGhpcyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dlbk1ldGFs
VHJhdmVyc2VyOjpGdW5jVG9OYW1lIEdlbk1ldGFsVHJhdmVyc2VyOjpCdWlsZEZ1bmNUb05hbWUo
KQoreworICAgIEZ1bmNUb05hbWUgbWFwOworCisgICAgYXV0byBwdXRBbmdsZSA9IFsmXShjb25z
dCBjaGFyICpuYW1lU3RyKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyBuYW1lKG5h
bWVTdHIpOworICAgICAgICBBU1NFUlQobWFwLmZpbmQobmFtZSkgPT0gbWFwLmVuZCgpKTsKKyAg
ICAgICAgbWFwW25hbWVdID0gTmFtZShuYW1lU3RyLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFs
KTsKKyAgICB9OworCisgICAgcHV0QW5nbGUoInRleGVsRmV0Y2giKTsKKyAgICBwdXRBbmdsZSgi
dGV4ZWxGZXRjaE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlIik7CisgICAgcHV0QW5n
bGUoInRleHR1cmUxRCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMURMb2QiKTsKKyAgICBwdXRB
bmdsZSgidGV4dHVyZTFEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlMkQiKTsKKyAg
ICBwdXRBbmdsZSgidGV4dHVyZTJETG9kIik7CisgICAgcHV0QW5nbGUoInRleHR1cmUyRFByb2oi
KTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZTJEUHJvakxvZCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0
dXJlM0QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZTNETG9kIik7CisgICAgcHV0QW5nbGUoInRl
eHR1cmUzRFByb2pMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmUiKTsKKyAgICBwdXRB
bmdsZSgidGV4dHVyZUN1YmVMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZUN1YmVQcm9qTG9k
Iik7CisgICAgcHV0QW5nbGUoInRleHR1cmVHcmFkIik7CisgICAgcHV0QW5nbGUoInRleHR1cmVH
cmFkT2Zmc2V0Iik7CisgICAgcHV0QW5nbGUoInRleHR1cmVMb2QiKTsKKyAgICBwdXRBbmdsZSgi
dGV4dHVyZUxvZE9mZnNldCIpOworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlT2Zmc2V0Iik7CisgICAg
cHV0QW5nbGUoInRleHR1cmVQcm9qIik7CisgICAgcHV0QW5nbGUoInRleHR1cmVQcm9qR3JhZCIp
OworICAgIHB1dEFuZ2xlKCJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgi
dGV4dHVyZVByb2pMb2QiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pMb2RPZmZzZXQiKTsK
KyAgICBwdXRBbmdsZSgidGV4dHVyZVByb2pPZmZzZXQiKTsKKyAgICBwdXRBbmdsZSgidGV4dHVy
ZVNpemUiKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2ZXJzZXI6
OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVOb2RlKQor
eworICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAmYXJncyA9ICphZ2dyZWdhdGVOb2RlLT5nZXRT
ZXF1ZW5jZSgpOworCisgICAgYXV0byBlbWl0QXJnTGlzdCA9IFsmXShjb25zdCBjaGFyICpvcGVu
LCBjb25zdCBjaGFyICpjbG9zZSkgeworICAgICAgICBtT3V0IDw8IG9wZW47CisKKyAgICAgICAg
Ym9vbCBlbWl0Q29tbWEgPSBmYWxzZTsKKyAgICAgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDog
YXJncykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVtaXRDb21tYSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtT3V0IDw8ICIsICI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbWl0Q29tbWEgPSB0cnVlOworICAgICAgICAgICAgYXJnLT50cmF2ZXJzZSh0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1PdXQgPDwgY2xvc2U7CisgICAgfTsKKworICAgIGNvbnN0
IFRUeXBlICZyZXRUeXBlID0gYWdncmVnYXRlTm9kZS0+Z2V0VHlwZSgpOworCisgICAgaWYgKGFn
Z3JlZ2F0ZU5vZGUtPmlzQ29uc3RydWN0b3IoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IGJvb2wg
aXNTdGFuZGFsb25lID0gZ2V0UGFyZW50Tm9kZSgpLT5nZXRBc0Jsb2NrKCk7CisgICAgICAgIGlm
IChpc1N0YW5kYWxvbmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFByZXZlbnQgY29uc3Ry
dWN0b3IgZnJvbSBiZWluZyBpbnRlcnByZXRlZCBhcyBhIGRlY2xhcmF0aW9uIGJ5IHdyYXBwaW5n
IGluIHBhcmVucy4KKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiBnaXZlbiBzb21l
dGhpbmcgbGlrZToKKyAgICAgICAgICAgIC8vICAgICAgaW50KHN5bWJvbCk7IC8vIDwtIFRoaXMg
d2lsbCBiZSB0cmVhdGVkIGxpa2UgYGludCBzeW1ib2w7YC4uLiBkb24ndCB3YW50IHRoYXQuCisg
ICAgICAgICAgICAvLyBTbyBpbnN0ZWFkIGVtaXQ6CisgICAgICAgICAgICAvLyAgICAgIChpbnQo
c3ltYm9sKSk7CisgICAgICAgICAgICBtT3V0IDw8ICIoIjsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN0IEVtaXRUeXBlQ29uZmlnIGV0Q29uZmlnOworCisgICAgICAgIGlmIChyZXRUeXBlLmlz
QXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdFR5cGUocmV0VHlwZSwgZXRDb25m
aWcpOworICAgICAgICAgICAgZW1pdEFyZ0xpc3QoInsiLCAifSIpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHJldFR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKyAgICAgICAgICAgIGVtaXRBcmdMaXN0KCJ7
IiwgIn0iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVtaXRUeXBlKHJldFR5cGUsIGV0Q29uZmlnKTsKKyAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIo
IiwgIikiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1N0YW5kYWxvbmUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1PdXQgPDwgIikiOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Ig
b3AgPSBhZ2dyZWdhdGVOb2RlLT5nZXRPcCgpOworICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAg
ICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEZ1bmN0aW9uSW5BU1Q6Cisg
ICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEludGVybmFsUmF3RnVuY3Rpb246Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFn
Z3JlZ2F0ZU5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgZW1pdE5hbWVPZihm
dW5jKTsKKyAgICAgICAgICAgICAgICBlbWl0QXJnTGlzdCgiKCIsICIpIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqYWdncmVnYXRlTm9kZS0+Z2V0RnVuY3Rp
b24oKTsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ICAgICAgICAgICAgICAgPSBtRnVuY1RvTmFt
ZS5maW5kKGZ1bmMubmFtZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXQgIT0gbUZ1bmNU
b05hbWUuZW5kKCkpOworICAgICAgICAgICAgICAgIEVtaXROYW1lKG1PdXQsIGl0LT5zZWNvbmQp
OworICAgICAgICAgICAgICAgIGVtaXRBcmdMaXN0KCIoIiwgIikiKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byBnZXRBcmdUeXBlID0gWyZdKHNpemVf
dCBpbmRleCkgLT4gY29uc3QgVFR5cGUgKiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRl
eCA8IGFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaW5kZXhdLT5nZXRBc1R5cGVkKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAmYXJnLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgICAgIEFTU0VSVCghYXJncy5lbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBUVHlwZSAqYXJnVHlwZTAgPSBnZXRBcmdUeXBlKDApOworICAgICAgICAgICAgICAgIGNvbnN0
IFRUeXBlICphcmdUeXBlMSA9IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGFyZ1R5cGUwKTsKKworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wTmFtZSA9IEdldE9w
ZXJhdG9yU3RyaW5nKG9wLCByZXRUeXBlLCBhcmdUeXBlMCwgYXJnVHlwZTEpOworCisgICAgICAg
ICAgICAgICAgaWYgKElzU3ltYm9saWNPcGVyYXRvcihvcCwgcmV0VHlwZSwgYXJnVHlwZTAsIGFy
Z1R5cGUxKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtTm9kZSAmb3BlcmFuZE5vZGUgPSAqYWdncmVnYXRlTm9kZS0+Z2V0
Q2hpbGROb2RlKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1Bvc3RmaXgo
b3ApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbU91dCA8PCBvcE5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdyb3VwZWRUcmF2ZXJzZShvcGVyYW5kTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFRyYXZlcnNlKG9w
ZXJhbmROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU91dCA8PCBvcE5h
bWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcm1Ob2RlICZsZWZ0Tm9kZSAgPSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGROb2Rl
KDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZyaWdodE5vZGUg
PSAqYWdncmVnYXRlTm9kZS0+Z2V0Q2hpbGROb2RlKDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdyb3VwZWRUcmF2ZXJzZShsZWZ0Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbU91dCA8PCAiICIgPDwgb3BOYW1lIDw8ICIgIjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncm91cGVkVHJhdmVyc2UocmlnaHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBtT3V0IDw8IG9wTmFtZTsKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEFyZ0xpc3QoIigiLCAiKSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEdlbk1ldGFsVHJhdmVyc2VyOjplbWl0T3BlbkJyYWNlKCkKK3sKKyAgICBBU1NF
UlQobUluZGVudExldmVsID49IDApOworCisgICAgZW1pdEluZGVudGF0aW9uKCk7CisgICAgbU91
dCA8PCAie1xuIjsKKyAgICArK21JbmRlbnRMZXZlbDsKK30KKwordm9pZCBHZW5NZXRhbFRyYXZl
cnNlcjo6ZW1pdENsb3NlQnJhY2UoKQoreworICAgIEFTU0VSVChtSW5kZW50TGV2ZWwgPj0gMSk7
CisKKyAgICAtLW1JbmRlbnRMZXZlbDsKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0
IDw8ICJ9IjsKK30KKworc3RhdGljIGJvb2wgUmVxdWlyZXNTZW1pY29sb25UZXJtaW5hdG9yKFRJ
bnRlcm1Ob2RlICZub2RlKQoreworICAgIGlmIChub2RlLmdldEFzQmxvY2soKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG5vZGUuZ2V0QXNMb29wTm9kZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobm9kZS5nZXRB
c1N3aXRjaE5vZGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKG5vZGUuZ2V0QXNJZkVsc2VOb2RlKCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGlmIChub2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChub2RlLmdldEFzQ2FzZU5vZGUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3N0YXRpYyBib29sIE5ld2xpbmVQYWQoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAg
aWYgKG5vZGUuZ2V0QXNGdW5jdGlvbkRlZmluaXRpb24oKSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBpZiAoVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSA9IG5v
ZGUuZ2V0QXNEZWNsYXJhdGlvbk5vZGUoKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChkZWNsTm9k
ZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBUSW50ZXJtTm9kZSAmY2hpbGROb2Rl
ID0gKmRlY2xOb2RlLT5nZXRDaGlsZE5vZGUoMCk7CisgICAgICAgIGlmIChUSW50ZXJtU3ltYm9s
ICpzeW1ib2xOb2RlID0gY2hpbGROb2RlLmdldEFzU3ltYm9sTm9kZSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUtPnZhcmlhYmxlKCk7
CisgICAgICAgICAgICByZXR1cm4gdmFyLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEJsb2NrKFZpc2l0LCBUSW50ZXJt
QmxvY2sgKmJsb2NrTm9kZSkKK3sKKyAgICBBU1NFUlQobUluZGVudExldmVsID49IC0xKTsKKyAg
ICBjb25zdCBib29sIGlzR2xvYmFsU2NvcGUgID0gbUluZGVudExldmVsID09IC0xOworICAgIGNv
bnN0IGJvb2wgcGFyZW50SXNTd2l0Y2ggPSBtUGFyZW50SXNTd2l0Y2g7CisgICAgbVBhcmVudElz
U3dpdGNoICAgICAgICAgICA9IGZhbHNlOworCisgICAgaWYgKGlzR2xvYmFsU2NvcGUpCisgICAg
eworICAgICAgICArK21JbmRlbnRMZXZlbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgZW1pdE9wZW5CcmFjZSgpOworICAgICAgICBpZiAocGFyZW50SXNTd2l0Y2gpCisgICAgICAg
IHsKKyAgICAgICAgICAgICsrbUluZGVudExldmVsOworICAgICAgICB9CisgICAgfQorCisgICAg
VEludGVybU5vZGUgKnByZXZTdG10Tm9kZSA9IG51bGxwdHI7CisKKyAgICBjb25zdCBzaXplX3Qg
c3RtdENvdW50ID0gYmxvY2tOb2RlLT5nZXRDaGlsZENvdW50KCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdG10Q291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1Ob2RlICZz
dG10Tm9kZSA9ICpibG9ja05vZGUtPmdldENoaWxkTm9kZShpKTsKKworICAgICAgICBpZiAoaXNH
bG9iYWxTY29wZSAmJiBwcmV2U3RtdE5vZGUgJiYgKE5ld2xpbmVQYWQoKnByZXZTdG10Tm9kZSkg
fHwgTmV3bGluZVBhZChzdG10Tm9kZSkpKQorICAgICAgICB7CisgICAgICAgICAgICBtT3V0IDw8
ICJcbiI7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgYm9vbCBpc0Nhc2UgPSBzdG10Tm9kZS5n
ZXRBc0Nhc2VOb2RlKCk7CisgICAgICAgIG1JbmRlbnRMZXZlbCAtPSBpc0Nhc2U7CisgICAgICAg
IGVtaXRJbmRlbnRhdGlvbigpOworICAgICAgICBtSW5kZW50TGV2ZWwgKz0gaXNDYXNlOworICAg
ICAgICBzdG10Tm9kZS50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgaWYgKFJlcXVpcmVzU2VtaWNv
bG9uVGVybWluYXRvcihzdG10Tm9kZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1PdXQgPDwg
IjsiOworICAgICAgICB9CisgICAgICAgIG1PdXQgPDwgIlxuIjsKKworICAgICAgICBwcmV2U3Rt
dE5vZGUgPSAmc3RtdE5vZGU7CisgICAgfQorCisgICAgaWYgKGlzR2xvYmFsU2NvcGUpCisgICAg
eworICAgICAgICBBU1NFUlQobUluZGVudExldmVsID09IDApOworICAgICAgICAtLW1JbmRlbnRM
ZXZlbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHBhcmVudElzU3dpdGNo
KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobUluZGVudExldmVsID49IDEpOworICAg
ICAgICAgICAgLS1tSW5kZW50TGV2ZWw7CisgICAgICAgIH0KKyAgICAgICAgZW1pdENsb3NlQnJh
Y2UoKTsKKyAgICAgICAgbVBhcmVudElzU3dpdGNoID0gcGFyZW50SXNTd2l0Y2g7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdEds
b2JhbFF1YWxpZmllckRlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVj
bGFyYXRpb24gKikKK3sKKyAgICBMT0dJQ19FUlJPUigpOyAgLy8gUmV3cml0ZUdsb2JhbFF1YWxp
ZmllckRlY2xzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIGJlZm9yZSB0aGlzLgorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXREZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSkKK3sKKyAgICBBU1NFUlQoZGVjbE5v
ZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICBUSW50ZXJtTm9kZSAmbm9kZSA9ICpkZWNs
Tm9kZS0+Z2V0Q2hpbGROb2RlKDApOworCisgICAgRW1pdFZhcmlhYmxlRGVjbGFyYXRpb25Db25m
aWcgZXZkQ29uZmlnOworCisgICAgaWYgKFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2Rl
LmdldEFzU3ltYm9sTm9kZSgpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIg
PSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlv
bihWYXJEZWNsKHZhciksIGV2ZENvbmZpZyk7CisgICAgfQorICAgIGVsc2UgaWYgKFRJbnRlcm1C
aW5hcnkgKmluaXROb2RlID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUoKSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbml0Tm9kZS0+Z2V0T3AoKSA9PSBUT3BlcmF0b3I6OkVPcEluaXRpYWxpemUpOwor
ICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gaW5pdE5vZGUtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqdmFsdWVOb2RlICAgPSBp
bml0Tm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNUeXBlZCgpOworICAgICAgICBBU1NFUlQoc3ltYm9s
Tm9kZSAmJiB2YWx1ZU5vZGUpOworCisgICAgICAgIGlmIChnZXRSb290Tm9kZSgpID09IGdldFBh
cmVudEJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERlZmVyR2xvYmFsSW5pdGlh
bGl6ZXJzIHNob3VsZCBoYXZlIHR1cm5lZCBub24tY29uc3QgZ2xvYmFsIGluaXRpYWxpemVycyBp
bnRvCisgICAgICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplcnMuIE5vdGUgdGhhdCB2YXJp
YWJsZXMgbWFya2VkIGFzIEV2cUdsb2JhbCBjYW4gYmUgdHJlYXRlZCBhcworICAgICAgICAgICAg
Ly8gRXZxQ29uc3QgaW4gc29tZSBBTkdMRSBjb2RlIGJ1dCBub3QgYWN0dWFsbHkgaGF2ZSB0aGVp
ciBxdWFsaWZpZXIgYWN0dWFsbHkgY2hhbmdlZCB0bworICAgICAgICAgICAgLy8gRXZxQ29uc3Qu
IFRodXMganVzdCBhc3N1bWUgYWxsIEV2cUdsb2JhbCBhcmUgYWN0dWFsbHkgRXZxQ29uc3QgZm9y
IGFsbCBjb2RlIHJ1biBhZnRlcgorICAgICAgICAgICAgLy8gRGVmZXJHbG9iYWxJbml0aWFsaXpl
cnMuCisgICAgICAgICAgICBtT3V0IDw8ICJjb25zdGFudCAiOworICAgICAgICB9CisKKyAgICAg
ICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgpOworICAgICAg
ICBjb25zdCBOYW1lIHZhck5hbWUodmFyKTsKKworICAgICAgICBpZiAoRXhwcmVzc2lvbkNvbnRh
aW5zTmFtZSh2YXJOYW1lLCAqdmFsdWVOb2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJl
bmFtZWRTeW1ib2xzWyZ2YXJdID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUodmFyTmFtZSk7CisgICAg
ICAgIH0KKworICAgICAgICBlbWl0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJEZWNsKHZhciksIGV2
ZENvbmZpZyk7CisgICAgICAgIG1PdXQgPDwgIiA9ICI7CisgICAgICAgIGdyb3VwZWRUcmF2ZXJz
ZSgqdmFsdWVOb2RlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJS
T1IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR2VuTWV0YWxUcmF2
ZXJzZXI6OnZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIGNv
bnN0IFRMb29wVHlwZSBsb29wVHlwZSA9IGxvb3BOb2RlLT5nZXRUeXBlKCk7CisKKyAgICBzd2l0
Y2ggKGxvb3BUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgor
ICAgICAgICAgICAgcmV0dXJuIHZpc2l0Rm9yTG9vcChsb29wTm9kZSk7CisgICAgICAgIGNhc2Ug
VExvb3BUeXBlOjpFTG9vcFdoaWxlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0V2hpbGVMb29w
KGxvb3BOb2RlKTsKKyAgICAgICAgY2FzZSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZToKKyAgICAg
ICAgICAgIHJldHVybiB2aXNpdERvV2hpbGVMb29wKGxvb3BOb2RlKTsKKyAgICB9Cit9CisKK2Jv
b2wgR2VuTWV0YWxUcmF2ZXJzZXI6OnZpc2l0Rm9yTG9vcChUSW50ZXJtTG9vcCAqbG9vcE5vZGUp
Cit7CisgICAgQVNTRVJUKGxvb3BOb2RlLT5nZXRUeXBlKCkgPT0gVExvb3BUeXBlOjpFTG9vcEZv
cik7CisKKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5vZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsK
KyAgICBUSW50ZXJtVHlwZWQgKmNvbmROb2RlID0gbG9vcE5vZGUtPmdldENvbmRpdGlvbigpOwor
ICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOwor
ICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBsb29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFT
U0VSVChib2R5Tm9kZSk7CisKKyAgICBtT3V0IDw8ICJmb3IgKCI7CisKKyAgICBpZiAoaW5pdE5v
ZGUpCisgICAgeworICAgICAgICBpbml0Tm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG1PdXQgPDwgIiAiOworICAgIH0KKworICAgIG1PdXQgPDwg
IjsgIjsKKworICAgIGlmIChjb25kTm9kZSkKKyAgICB7CisgICAgICAgIGNvbmROb2RlLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICB9CisKKyAgICBtT3V0IDw8ICI7ICI7CisKKyAgICBpZiAoZXhwck5v
ZGUpCisgICAgeworICAgICAgICBleHByTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgfQorCisg
ICAgbU91dCA8PCAiKVxuIjsKKworICAgIGJvZHlOb2RlLT50cmF2ZXJzZSh0aGlzKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHZW5NZXRhbFRyYXZlcnNlcjo6dmlzaXRXaGlsZUxv
b3AoVEludGVybUxvb3AgKmxvb3BOb2RlKQoreworICAgIEFTU0VSVChsb29wTm9kZS0+Z2V0VHlw
ZSgpID09IFRMb29wVHlwZTo6RUxvb3BXaGlsZSk7CisKKyAgICBUSW50ZXJtTm9kZSAqaW5pdE5v
ZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmNvbmROb2RlID0g
bG9vcE5vZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqZXhwck5vZGUgPSBs
b29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJbnRlcm1CbG9jayAqYm9keU5vZGUgPSBs
b29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChjb25kTm9kZSAmJiBib2R5Tm9kZSk7Cisg
ICAgQVNTRVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOworCisgICAgZW1pdEluZGVudGF0aW9u
KCk7CisgICAgbU91dCA8PCAid2hpbGUgKCI7CisgICAgY29uZE5vZGUtPnRyYXZlcnNlKHRoaXMp
OworICAgIG1PdXQgPDwgIilcbiI7CisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRoaXMpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2VyOjp2aXNpdERvV2hp
bGVMb29wKFRJbnRlcm1Mb29wICpsb29wTm9kZSkKK3sKKyAgICBBU1NFUlQobG9vcE5vZGUtPmdl
dFR5cGUoKSA9PSBUTG9vcFR5cGU6OkVMb29wRG9XaGlsZSk7CisKKyAgICBUSW50ZXJtTm9kZSAq
aW5pdE5vZGUgID0gbG9vcE5vZGUtPmdldEluaXQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmNvbmRO
b2RlID0gbG9vcE5vZGUtPmdldENvbmRpdGlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqZXhwck5v
ZGUgPSBsb29wTm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIFRJbnRlcm1CbG9jayAqYm9keU5v
ZGUgPSBsb29wTm9kZS0+Z2V0Qm9keSgpOworICAgIEFTU0VSVChjb25kTm9kZSAmJiBib2R5Tm9k
ZSk7CisgICAgQVNTRVJUKCFpbml0Tm9kZSAmJiAhZXhwck5vZGUpOworCisgICAgZW1pdEluZGVu
dGF0aW9uKCk7CisgICAgbU91dCA8PCAiZG9cbiI7CisgICAgYm9keU5vZGUtPnRyYXZlcnNlKHRo
aXMpOworICAgIG1PdXQgPDwgIlxuIjsKKyAgICBlbWl0SW5kZW50YXRpb24oKTsKKyAgICBtT3V0
IDw8ICJ3aGlsZSAoIjsKKyAgICBjb25kTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgbU91dCA8
PCAiKTsiOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEdlbk1ldGFsVHJhdmVyc2Vy
Ojp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCAqYnJhbmNoTm9kZSkKK3sKKyAgICBj
b25zdCBUT3BlcmF0b3IgZmxvd09wID0gYnJhbmNoTm9kZS0+Z2V0Rmxvd09wKCk7CisgICAgVElu
dGVybVR5cGVkICpleHByTm9kZSA9IGJyYW5jaE5vZGUtPmdldEV4cHJlc3Npb24oKTsKKworICAg
IGVtaXRJbmRlbnRhdGlvbigpOworCisgICAgc3dpdGNoIChmbG93T3ApCisgICAgeworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wS2lsbDoKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGV4cHJOb2RlID09IG51bGxwdHIpOworICAgICAgICAgICAgbU91dCA8PCAibWV0YWw6OmRpc2Nh
cmRfZnJhZ21lbnQoKSI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFJldHVybjoKKyAgICAgICAgeworICAgICAgICAgICAgbU91dCA8PCAi
cmV0dXJuIjsKKyAgICAgICAgICAgIGlmIChleHByTm9kZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtT3V0IDw8ICIgIjsKKyAgICAgICAgICAgICAgICBleHByTm9kZS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJyZWFrOgorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQoZXhwck5vZGUgPT0gbnVsbHB0cik7CisgICAgICAgICAgICBtT3V0IDw8ICJicmVhayI7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cENvbnRpbnVlOgorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoZXhwck5vZGUgPT0gbnVs
bHB0cik7CisgICAgICAgICAgICBtT3V0IDw8ICJjb250aW51ZSI7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgTE9H
SUNfRVJST1IoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RhdGljIHNpemVfdCBlbWl0TWV0YWxDYWxsQ291bnQgPSAwOworCitib29sIHNoOjpFbWl0TWV0
YWwoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisgICAgICAgICAgICAgICAgICAgSWRHZW4gJmlkR2VuLAorICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFBpcGVsaW5lU3RydWN0cyAmcGlwZWxpbmVTdHJ1Y3RzLAorICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVBy
ZWx1ZGVDb25maWcgJnBwYykKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBjb21waWxlci5n
ZXRJbmZvU2luaygpLm9iajsKKworICAgIHsKKyAgICAgICAgKytlbWl0TWV0YWxDYWxsQ291bnQ7
CisgICAgICAgIGF1dG8gZmlsZW5hbWVQcm90byA9IHJlYWRTdHJpbmdFbnZWYXIoIkdNRF9GSVhF
RF9FTUlUIik7CisgICAgICAgIGlmICghZmlsZW5hbWVQcm90by5lbXB0eSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoZmlsZW5hbWVQcm90byAhPSAiL2Rldi9udWxsIikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRyeU9wZW4gPSBbJl0oY2hhciBjb25zdCAqZXh0
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlbmFtZVByb3RvOwor
ICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSArPSBzdGQ6OnRvX3N0cmluZyhlbWl0TWV0YWxD
YWxsQ291bnQpOworICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSArPSAiLiI7CisgICAgICAg
ICAgICAgICAgICAgIGZpbGVuYW1lICs9IGV4dDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZvcGVuKGZpbGVuYW1lLmNfc3RyKCksICJyYiIpOworICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgRklMRSAqZmlsZSA9IHRyeU9wZW4oIm1ldGFsIik7CisgICAgICAgICAgICAg
ICAgaWYgKCFmaWxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmls
ZSA9IHRyeU9wZW4oImNwcCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBB
U1NFUlQoZmlsZSk7CisKKyAgICAgICAgICAgICAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7
CisgICAgICAgICAgICAgICAgc2l6ZV90IGZpbGVTaXplID0gZnRlbGwoZmlsZSk7CisgICAgICAg
ICAgICAgICAgZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQpOworCisgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8Y2hhcj4gYnVmZjsKKyAgICAgICAgICAgICAgICBidWZmLnJlc2l6ZShmaWxlU2l6
ZSArIDEpOworICAgICAgICAgICAgICAgIGZyZWFkKGJ1ZmYuZGF0YSgpLCBmaWxlU2l6ZSwgMSwg
ZmlsZSk7CisgICAgICAgICAgICAgICAgYnVmZi5iYWNrKCkgPSAnXDAnOworCisgICAgICAgICAg
ICAgICAgZmNsb3NlKGZpbGUpOworCisgICAgICAgICAgICAgICAgb3V0IDw8IGJ1ZmYuZGF0YSgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG91dCA8PCAiXG5cbiI7CisKKyAgICBpZiAoIUVtaXRQcm9ncmFtUHJlbHVk
ZShyb290LCBvdXQsIHBwYykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0FTU0VSVFMpCisgICAgICAgIERlYnVn
U2luayBvdXRXcmFwcGVyKG91dCwgcmVhZEJvb2xFbnZWYXIoIkdNRF9TVERPVVQiKSk7CisgICAg
ICAgIG91dFdyYXBwZXIud2F0Y2gocmVhZFN0cmluZ0VudlZhcigiR01EX1dBVENIX1NUUklORyIp
KTsKKyNlbHNlCisgICAgICAgIFRJbmZvU2lua0Jhc2UgJm91dFdyYXBwZXIgPSBvdXQ7CisjZW5k
aWYKKyAgICAgICAgR2VuTWV0YWxUcmF2ZXJzZXIgZ2VuKGNvbXBpbGVyLCBvdXRXcmFwcGVyLCBp
ZEdlbiwgcGlwZWxpbmVTdHJ1Y3RzLCBpbnZhcmlhbnRzLCBzeW1ib2xFbnYpOworICAgICAgICBy
b290LnRyYXZlcnNlKCZnZW4pOworICAgIH0KKworICAgIG91dCA8PCAiXG4iOworCisgICAgcmV0
dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW1pdE1ldGFsLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvRW1pdE1ldGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ4YWY5YTFjODdkNTczY2FiNTI3Mjc1
YjRkMjMyY2NmMjRhNDFmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9FbWl0TWV0
YWwuaApAQCAtMCwwICsxLDMyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0VNSVRNRVRBTF9IXworI2RlZmluZSBDT01QSUxF
Ul9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9FTUlUTUVUQUxfSF8KKworI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9D
b21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L0lkR2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdy
aXRlUGlwZWxpbmVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBXYWxrcyB0
aGUgQVNUIGFuZCBlbWl0cyBNZXRhbCBjb2RlLgorQU5HTEVfTk9fRElTQ0FSRCBib29sIEVtaXRN
ZXRhbChUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxp
bmVTdHJ1Y3RzICZwaXBlbGluZVN0cnVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQcm9ncmFtUHJlbHVkZUNvbmZpZyAmcHBjKTsKKworfSAgLy8gbmFtZXNw
YWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfRU1JVE1FVEFMX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRW52aXJvbm1lbnRW
YXJpYWJsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kODIzZmM3MjgyMGNmZmRkZjMyNDBkYzI0NjU5YTVlZGNmZGI5ZDI3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaApAQCAtMCwwICsxLDQ1IEBA
CisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX0VOVklST05NRU5UVkFSSUFCTEVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRU5WSVJPTk1FTlRWQVJJQUJMRV9IXworCisjaW5jbHVk
ZSA8Y3N0ZGxpYj4KKyNpbmNsdWRlIDxzdHJpbmc+CisKKyNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKKworbmFtZXNwYWNlIHNoCit7CisKK2lubGluZSBib29sIHJlYWRCb29sRW52VmFyKGNvbnN0
IGNoYXIgKnZhcikKK3sKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdGQ6OmdldGVudih2YXIpOwor
ICAgIGlmIChzdHIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKHN0cmNtcChzdHIsICIwIikgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgQVNTRVJUKHN0cmNtcChzdHIsICIxIikgPT0gMCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBzdGQ6OnN0cmluZyByZWFkU3RyaW5nRW52VmFyKGNv
bnN0IGNoYXIgKnZhcikKK3sKKyAgICBjb25zdCBjaGFyICpzdHIgPSBzdGQ6OmdldGVudih2YXIp
OworICAgIGlmIChzdHIgPT0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAg
ICB9CisgICAgcmV0dXJuIHN0cjsKK30KKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAg
Ly8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfRU5WSVJPTk1FTlRW
QVJJQUJMRV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29uc3RhbnRzLmNwcCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2U5YzAzZWI1ZDM1
ZTg5ZmViMTZkNjc0ZDk2MTcwYzI3MjY5NmE4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9Ib2lzdENvbnN0YW50cy5jcHAKQEAgLTAsMCArMSw5NiBAQAorLy8KKy8vIENvcHlyaWdo
dCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0hvaXN0Q29u
c3RhbnRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0xheW91dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ZpbmRGdW5jdGlvbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV91dGlsL0ludGVybVJlYnVpbGQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9SZXBsYWNlVmFyaWFibGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworY2xhc3MgUmV3cml0ZXIg
OiBwcml2YXRlIFRJbnRlcm1SZWJ1aWxkCit7CisgIHByaXZhdGU6CisgICAgY29uc3Qgc2l6ZV90
IG1NaW5SZXF1aXJlZFNpemU7CisgICAgVEludGVybVNlcXVlbmNlIG1Ib2lzdGVkRGVjbE5vZGVz
OworCisgIHB1YmxpYzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBzaXplX3Qg
bWluUmVxdWlyZWRTaXplKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVl
LCBmYWxzZSksIG1NaW5SZXF1aXJlZFNpemUobWluUmVxdWlyZWRTaXplKQorICAgIHt9CisKKyAg
ICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGdldFBhcmVudEZ1bmN0aW9uKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9u
KGRlY2xOb2RlKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gZGVjbC5zeW1ib2wu
Z2V0VHlwZSgpOworICAgICAgICAgICAgaWYgKHR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxp
Zmllcjo6RXZxQ29uc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGRlY2wu
aW5pdEV4cHIgJiYgZGVjbC5pbml0RXhwci0+aGFzQ29uc3RhbnRWYWx1ZSgpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBNZXRhbExh
eW91dE9mKHR5cGUpLnNpemVPZjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPj0gbU1p
blJlcXVpcmVkU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbUhvaXN0ZWREZWNsTm9kZXMucHVzaF9iYWNrKCZkZWNsTm9kZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
e2RlY2xOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAgIGJvb2wgcmV3cml0
ZShUSW50ZXJtQmxvY2sgJnJvb3QsIElkR2VuICZpZEdlbikKKyAgICB7CisgICAgICAgIGlmICgh
cmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtSG9pc3RlZERlY2xOb2Rlcy5lbXB0eSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJv
b3QuaW5zZXJ0Q2hpbGROb2RlcyhGaW5kRmlyc3RGdW5jdGlvbkRlZmluaXRpb25JbmRleCgmcm9v
dCksIG1Ib2lzdGVkRGVjbE5vZGVzKTsKKworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpvcGFx
dWVEZWNsTm9kZSA6IG1Ib2lzdGVkRGVjbE5vZGVzKQorICAgICAgICB7CisgICAgICAgICAgICBU
SW50ZXJtRGVjbGFyYXRpb24gKmRlY2xOb2RlID0gb3BhcXVlRGVjbE5vZGUtPmdldEFzRGVjbGFy
YXRpb25Ob2RlKCk7CisgICAgICAgICAgICBBU1NFUlQoZGVjbE5vZGUpOworICAgICAgICAgICAg
Y29uc3QgVFZhcmlhYmxlICZvbGRWYXIgPSBWaWV3RGVjbGFyYXRpb24oKmRlY2xOb2RlKS5zeW1i
b2wudmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmV3TmFtZSAgICAgID0gaWRH
ZW4uY3JlYXRlTmV3TmFtZShvbGRWYXIubmFtZSgpKTsKKyAgICAgICAgICAgIGF1dG8gKm5ld1Zh
ciA9IG5ldyBUVmFyaWFibGUoJm1TeW1ib2xUYWJsZSwgbmV3TmFtZS5yYXdOYW1lKCksICZvbGRW
YXIuZ2V0VHlwZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdOYW1lLnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoIVJlcGxhY2VWYXJpYWJsZSgm
bUNvbXBpbGVyLCAmcm9vdCwgJm9sZFZhciwgbmV3VmFyKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OkhvaXN0Q29uc3RhbnRzKFRD
b21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgbWluUmVxdWlyZWRTaXplKQoreworICAgIHJldHVybiBSZXdy
aXRlcihjb21waWxlciwgbWluUmVxdWlyZWRTaXplKS5yZXdyaXRlKHJvb3QsIGlkR2VuKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0YW50cy5oIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L0hvaXN0Q29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDMwNmE1ZTQ3M2M4YmVjNWNjZmE0OGRkNGYx
ZWJmYzNhNDk0NTA1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ib2lzdENvbnN0
YW50cy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSE9JU1RDT05TVEFOVFNf
SF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBIb2lz
dHMgZnVuY3Rpb24tbG9jYWwgY29uc3RhbnRzIHRvIHRoZSBnbG9iYWwgc2NvcGUgaWYgdGhlaXIg
TWV0YWwgc2l6ZW9mIG1lZXRzCisvLyBgbWluUmVxdWlyZWRTaXplYC4KK0FOR0xFX05PX0RJU0NB
UkQgYm9vbCBIb2lzdENvbnN0YW50cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1pblJlcXVpcmVkU2l6ZSk7CisKK30gIC8vIG5h
bWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX0hPSVNUQ09OU1RBTlRTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRH
ZW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGFlZDZiOWI4ZTYz
OTY0ZjE1MTNiODM2ZmI5ODg5MDIzMjAyMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L0lkR2VuLmNwcApAQCAtMCwwICsxLDk3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0
eXBlPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHVu
b3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0lkR2Vu
OjpJZEdlbigpIHt9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcsIHR5cGVuYW1lIFN0cmlu
Z1RvSW1tdXRhYmxlPgorTmFtZSBJZEdlbjo6Y3JlYXRlTmV3TmFtZShzaXplX3QgY291bnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmdUb0ltbXV0YWJsZSAmdG9JbW11dGFibGUp
Cit7CisgICAgY29uc3QgdW5zaWduZWQgaWQgPSBtTmV4dCsrOworICAgIGNoYXIgaWRCdWZmZXJb
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46OmRpZ2l0czEwICsgMV07CisgICAgc3ByaW50
ZihpZEJ1ZmZlciwgIiV1IiwgaWQpOworCisgICAgbU5ld05hbWVCdWZmZXIuY2xlYXIoKTsKKyAg
ICBtTmV3TmFtZUJ1ZmZlciArPSAnXyc7CisgICAgbU5ld05hbWVCdWZmZXIgKz0gaWRCdWZmZXI7
CisKKyAgICAvLyBOb3RlOgorICAgIC8vIERvdWJsZSB1bmRlcnNjb3JlcyBhcmUgb25seSBhbGxv
d2VkIGluIEMrKyAoYW5kIHRodXMgTWV0YWwpIHZlbmRvciBpZGVudGlmaWVycywgc28gaGVyZSB3
ZQorICAgIC8vIHRha2UgY2FyZSBub3QgdG8gaW50cm9kdWNlIGFueS4KKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IEltbXV0YWJs
ZVN0cmluZyBiYXNlTmFtZSA9IHRvSW1tdXRhYmxlKGJhc2VOYW1lc1tpXSk7CisgICAgICAgIGlm
ICghYmFzZU5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAq
YmFzZSA9IGJhc2VOYW1lLmRhdGEoKTsKKyAgICAgICAgICAgIGlmIChiYXNlTmFtZS5iZWdpbnNX
aXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBiYXNlICs9IHNpemVvZihrQW5nbGVJbnRlcm5hbFByZWZpeCkgLSAxOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCpiYXNlID09ICdfJykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICArK2Jhc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoKmJhc2Ug
IT0gJ18nKTsKKworICAgICAgICAgICAgaWYgKG1OZXdOYW1lQnVmZmVyLmJhY2soKSAhPSAnXycp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbU5ld05hbWVCdWZmZXIgKz0gJ18nOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtTmV3TmFtZUJ1ZmZlciArPSBiYXNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5hbWUoSW1tdXRhYmxlU3RyaW5nKG1OZXdOYW1l
QnVmZmVyKSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7Cit9CisKK05hbWUgSWRHZW46OmNy
ZWF0ZU5ld05hbWUoY29uc3QgSW1tdXRhYmxlU3RyaW5nICZiYXNlTmFtZSkKK3sKKyAgICByZXR1
cm4gY3JlYXRlTmV3TmFtZSh7YmFzZU5hbWV9KTsKK30KKworTmFtZSBJZEdlbjo6Y3JlYXRlTmV3
TmFtZShjb25zdCBOYW1lICZiYXNlTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShi
YXNlTmFtZS5yYXdOYW1lKCkpOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKGNvbnN0
IGNoYXIgKmJhc2VOYW1lKQoreworICAgIHJldHVybiBjcmVhdGVOZXdOYW1lKEltbXV0YWJsZVN0
cmluZyhiYXNlTmFtZSkpOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxJbW11dGFibGVTdHJpbmc+IGJhc2VOYW1lcykKK3sKKyAgICByZXR1cm4g
Y3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBiYXNlTmFtZXMuYmVnaW4oKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBJbW11dGFibGVTdHJpbmcgJnMpIHsgcmV0dXJu
IHM7IH0pOworfQorCitOYW1lIElkR2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxOYW1lPiBiYXNlTmFtZXMpCit7CisgICAgcmV0dXJuIGNyZWF0ZU5ld05hbWUoYmFzZU5h
bWVzLnNpemUoKSwgYmFzZU5hbWVzLmJlZ2luKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
W10oY29uc3QgTmFtZSAmcykgeyByZXR1cm4gcy5yYXdOYW1lKCk7IH0pOworfQorCitOYW1lIElk
R2VuOjpjcmVhdGVOZXdOYW1lKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxjb25zdCBjaGFyICo+IGJh
c2VOYW1lcykKK3sKKyAgICByZXR1cm4gY3JlYXRlTmV3TmFtZShiYXNlTmFtZXMuc2l6ZSgpLCBi
YXNlTmFtZXMuYmVnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBjaGFy
ICpzKSB7IHJldHVybiBJbW11dGFibGVTdHJpbmcocyk7IH0pOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0lkR2VuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ODIw
ODlmNDMyZTE4OWQwZjc5MWUwZTdhMjEzY2NlY2Q0NDJiNzJlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0lkR2VuLmgKQEAgLTAsMCArMSw0MSBAQAorLy8KKy8vIENvcHlyaWdodCAy
MDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRl
ZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXworI2Rl
ZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9JREdFTl9IXwor
CisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisKK25hbWVzcGFjZSBzaAorewor
CisvLyBGb3IgY3JlYXRpbmcgbmV3IGZyZXNoIG5hbWVzLgorLy8gQWxsIG5hbWVzIGNyZWF0ZWQg
YXJlIG1hcmtlZCBhcyBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsLgorY2xhc3MgSWRHZW4gOiBh
bmdsZTo6Tm9uQ29weWFibGUKK3sKKyAgcHVibGljOgorICAgIElkR2VuKCk7CisKKyAgICBOYW1l
IGNyZWF0ZU5ld05hbWUoY29uc3QgSW1tdXRhYmxlU3RyaW5nICZiYXNlTmFtZSk7CisgICAgTmFt
ZSBjcmVhdGVOZXdOYW1lKGNvbnN0IE5hbWUgJmJhc2VOYW1lKTsKKyAgICBOYW1lIGNyZWF0ZU5l
d05hbWUoY29uc3QgY2hhciAqYmFzZU5hbWUpOworICAgIE5hbWUgY3JlYXRlTmV3TmFtZShzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8SW1tdXRhYmxlU3RyaW5nPiBiYXNlTmFtZXMpOworICAgIE5hbWUg
Y3JlYXRlTmV3TmFtZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TmFtZT4gYmFzZU5hbWVzKTsKKyAg
ICBOYW1lIGNyZWF0ZU5ld05hbWUoc3RkOjppbml0aWFsaXplcl9saXN0PGNvbnN0IGNoYXIgKj4g
YmFzZU5hbWVzKTsKKworICBwcml2YXRlOgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmcs
IHR5cGVuYW1lIFN0cmluZ1RvSW1tdXRhYmxlPgorICAgIE5hbWUgY3JlYXRlTmV3TmFtZShzaXpl
X3QgY291bnQsIGNvbnN0IFN0cmluZyAqYmFzZU5hbWVzLCBjb25zdCBTdHJpbmdUb0ltbXV0YWJs
ZSAmdG9JbW11dGFibGUpOworCisgIHByaXZhdGU6CisgICAgdW5zaWduZWQgbU5leHQgPSAwOyAg
ICAgICAgICAvLyBgdW5zaWduZWRgIGJlY2F1c2Ugb2YgIiV1IiB1c2UgaW4gc3ByaW50ZgorICAg
IHN0ZDo6c3RyaW5nIG1OZXdOYW1lQnVmZmVyOyAgLy8gcmV1c2FibGUgYnVmZmVyIHRvIGF2b2lk
IHRvbnMgb2YgcmVhbGxvY2F0aW9ucworfTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRp
ZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfSURHRU5fSF8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0xheW91
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTM0NmY2ZjgxNDI4MmMxMmFmNjc5MTRkMmEzMDQyMzQxNjBmYTJl
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuY3BwCkBAIC0wLDAgKzEs
NDAxIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNjdHlw
ZT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1bm9y
ZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsK
KworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZW51bSBjbGFzcyBMYW5ndWFnZQoreworICAg
IE1ldGFsLAorICAgIEdMU0wsCit9OworCitzdGF0aWMgc2l6ZV90IFJvdW5kVXBUb011bHRpcGxl
T2Yoc2l6ZV90IHgsIHNpemVfdCBtdWx0aXBsZSkKK3sKKyAgICBjb25zdCBzaXplX3QgcmVtID0g
eCAlIG11bHRpcGxlOworICAgIHJldHVybiByZW0gPT0gMCA/IHggOiB4ICsgKG11bHRpcGxlIC0g
cmVtKTsKK30KKwordm9pZCBMYXlvdXQ6OnJlcXVpcmVBbGlnbm1lbnQoc2l6ZV90IGFsaWduLCBi
b29sIHBhZCkKK3sKKyAgICBhbGlnbk9mID0gc3RkOjptYXgoYWxpZ25PZiwgYWxpZ24pOworICAg
IGlmIChwYWQpCisgICAgeworICAgICAgICBzaXplT2YgPSBSb3VuZFVwVG9NdWx0aXBsZU9mKHNp
emVPZiwgYWxpZ24pOworICAgIH0KK30KKworYm9vbCBMYXlvdXQ6Om9wZXJhdG9yPT0oY29uc3Qg
TGF5b3V0ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZU9mID09IG90aGVyLnNpemVP
ZiAmJiBhbGlnbk9mID09IG90aGVyLmFsaWduT2Y7Cit9CisKK3ZvaWQgTGF5b3V0OjpvcGVyYXRv
cis9KGNvbnN0IExheW91dCAmb3RoZXIpCit7CisgICAgcmVxdWlyZUFsaWdubWVudChvdGhlci5h
bGlnbk9mLCB0cnVlKTsKKyAgICBzaXplT2YgKz0gb3RoZXIuc2l6ZU9mOworfQorCit2b2lkIExh
eW91dDo6b3BlcmF0b3IqPShzaXplX3Qgc2NhbGUpCit7CisgICAgc2l6ZU9mICo9IHNjYWxlOwor
fQorCitMYXlvdXQgTGF5b3V0OjpvcGVyYXRvcisoY29uc3QgTGF5b3V0ICZvdGhlcikgY29uc3QK
K3sKKyAgICBhdXRvIHNlbGYgPSAqdGhpczsKKyAgICBzZWxmICs9IG90aGVyOworICAgIHJldHVy
biBzZWxmOworfQorCitMYXlvdXQgTGF5b3V0OjpvcGVyYXRvciooc2l6ZV90IHNjYWxlKSBjb25z
dAoreworICAgIGF1dG8gc2VsZiA9ICp0aGlzOworICAgIHNlbGYgKj0gc2NhbGU7CisgICAgcmV0
dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBMYXlvdXQgU2NhbGFyTGF5b3V0T2YoY29uc3QgVFR5cGUg
JnR5cGUsIExhbmd1YWdlIGxhbmd1YWdlKQoreworICAgIGNvbnN0IFRCYXNpY1R5cGUgYmFzaWNU
eXBlID0gdHlwZS5nZXRCYXNpY1R5cGUoKTsKKyAgICBzd2l0Y2ggKGJhc2ljVHlwZSkKKyAgICB7
CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0Qm9vbDoKKyAgICAgICAgICAgIHJldHVybiB7
MSwgMX07CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0SW50OgorICAgICAgICBjYXNlIFRC
YXNpY1R5cGU6OkVidFVJbnQ6CisgICAgICAgIGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6Cisg
ICAgICAgICAgICByZXR1cm4gezQsIDR9OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
aWYgKElzU2FtcGxlcihiYXNpY1R5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAobGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlIExhbmd1YWdlOjpNZXRhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7
OCwgOH07CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTGFuZ3VhZ2U6OkdMU0w6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gezQsIDR9OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXQ6
OkludmFsaWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBzaXplX3QgaW5uZXJTY2FsZXNQ
YWNrZWRbXSAgID0gezAsIDEsIDIsIDMsIDR9Oworc3RhdGljIGNvbnN0IHNpemVfdCBpbm5lclNj
YWxlc1VucGFja2VkW10gPSB7MCwgMSwgMiwgNCwgNH07CisKK0xheW91dCBzaDo6TWV0YWxMYXlv
dXRPZihjb25zdCBUVHlwZSAmdHlwZSwgTWV0YWxMYXlvdXRPZkNvbmZpZyBjb25maWcpCit7Cisg
ICAgQVNTRVJUKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSA8PSA0KTsKKyAgICBBU1NFUlQodHlwZS5n
ZXRTZWNvbmRhcnlTaXplKCkgPD0gNCk7CisKKyAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdl
IHN0b3JhZ2UgPSB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2NrU3RvcmFnZTsKKworICAg
IGNvbnN0IGJvb2wgaXNQYWNrZWQgPSAhY29uZmlnLmRpc2FibGVQYWNraW5nICYmIChzdG9yYWdl
ID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID09IFRMYXlvdXRCbG9j
a1N0b3JhZ2U6OkVic1NoYXJlZCk7CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIWNvbmZp
Zy5tYXNrQXJyYXkpCisgICAgeworICAgICAgICBjb25maWcubWFza0FycmF5ICAgID0gdHJ1ZTsK
KyAgICAgICAgY29uc3QgTGF5b3V0IGxheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgY29uZmln
KTsKKyAgICAgICAgY29uZmlnLm1hc2tBcnJheSAgICA9IGZhbHNlOworICAgICAgICBjb25zdCBz
aXplX3Qgdm9sICAgID0gdHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisgICAgICAgIHJldHVy
biBsYXlvdXQgKiB2b2w7CisgICAgfQorCisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVj
dHVyZSA9IHR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5nZXRO
b21pbmFsU2l6ZSgpID09IDEpOworICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXpl
KCkgPT0gMSk7CisgICAgICAgIGF1dG8gY29uZmlnMiAgICAgICAgICAgICA9IGNvbmZpZzsKKyAg
ICAgICAgY29uZmlnMi5tYXNrQXJyYXkgICAgICAgID0gZmFsc2U7CisgICAgICAgIGF1dG8gbGF5
b3V0ICAgICAgICAgICAgICA9IExheW91dDo6SWRlbnRpdHkoKTsKKyAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKKyAgICAgICAgZm9yIChjb25z
dCBURmllbGQgKmZpZWxkIDogZmllbGRzKQorICAgICAgICB7CisgICAgICAgICAgICBsYXlvdXQg
Kz0gTWV0YWxMYXlvdXRPZigqZmllbGQtPnR5cGUoKSwgY29uZmlnMik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGNvbmZpZy5hc3N1bWVTdHJ1Y3RzQXJlVGFpbFBhZGRlZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgc2l6ZV90IHBhZCA9IGxheW91dC5zaXplT2YgJSAxNjsKKyAgICAgICAgICAg
IGxheW91dC5zaXplT2YgKz0gcGFkOworICAgICAgICB9CisgICAgICAgIGxheW91dC5zaXplT2Yg
PSBSb3VuZFVwVG9NdWx0aXBsZU9mKGxheW91dC5zaXplT2YsIGxheW91dC5hbGlnbk9mKTsKKyAg
ICAgICAgcmV0dXJuIGxheW91dDsKKyAgICB9CisKKyAgICBpZiAoY29uZmlnLnRyZWF0U2FtcGxl
cnNBc1RleHR1cmVFbnYgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsxNiwgOH07ICAvLyBwb2ludGVyezgsOH0gYW5kIG1ldGFsOjpzYW1w
bGVyezgsOH0KKyAgICB9CisKKyAgICBjb25zdCBMYXlvdXQgc2NhbGFyTGF5b3V0ID0gU2NhbGFy
TGF5b3V0T2YodHlwZSwgTGFuZ3VhZ2U6Ok1ldGFsKTsKKworICAgIGlmICh0eXBlLmlzUmFuazAo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisgICAgfQorICAgIGVsc2Ug
aWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpc1BhY2tlZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1Bh
Y2tlZFt0eXBlLmdldE5vbWluYWxTaXplKCldOworICAgICAgICAgICAgYXV0byBsYXlvdXQgPSBM
YXlvdXR7c2NhbGFyTGF5b3V0LnNpemVPZiAqIGlubmVyU2NhbGUsIHNjYWxhckxheW91dC5hbGln
bk9mfTsKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBzaXplX3QgaW5uZXJTY2FsZSA9IGlubmVy
U2NhbGVzVW5wYWNrZWRbdHlwZS5nZXROb21pbmFsU2l6ZSgpXTsKKyAgICAgICAgICAgIGF1dG8g
bGF5b3V0ICAgICAgICAgICAgID0gTGF5b3V0OjpCb3RoKHNjYWxhckxheW91dC5zaXplT2YgKiBp
bm5lclNjYWxlKTsKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUuaXNNYXRyaXgoKSk7CisgICAg
ICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IFRCYXNpY1R5cGU6OkVidEZsb2F0KTsK
KyAgICAgICAgLy8gdHlwZUN4UiA8PT4gdHlwZVJbQ10KKyAgICAgICAgY29uc3Qgc2l6ZV90IGlu
bmVyU2NhbGUgPSBpbm5lclNjYWxlc1VucGFja2VkW3R5cGUuZ2V0Um93cygpXTsKKyAgICAgICAg
Y29uc3Qgc2l6ZV90IG91dGVyU2NhbGUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Q29s
cygpKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IG4gICAgICAgICAgPSBzY2FsYXJMYXlvdXQuc2l6
ZU9mICogaW5uZXJTY2FsZTsKKyAgICAgICAgcmV0dXJuIHtuICogb3V0ZXJTY2FsZSwgbn07Cisg
ICAgfQorfQorCitUTGF5b3V0QmxvY2tTdG9yYWdlIHNoOjpPdmVybGF5KFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugb2xkU3RvcmFnZSwgY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgY29uc3QgVExheW91
dEJsb2NrU3RvcmFnZSBuZXdTdG9yYWdlID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5ibG9j
a1N0b3JhZ2U7CisgICAgc3dpdGNoIChuZXdTdG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIHJldHVybiBv
bGRTdG9yYWdlID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkID8ga0RlZmF1
bHRMYXlvdXRCbG9ja1N0b3JhZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkU3RvcmFnZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBuZXdTdG9yYWdlOworICAgIH0KK30KKworVExh
eW91dE1hdHJpeFBhY2tpbmcgc2g6Ok92ZXJsYXkoVExheW91dE1hdHJpeFBhY2tpbmcgb2xkUGFj
a2luZywgY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tp
bmcgbmV3UGFja2luZyA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkubWF0cml4UGFja2luZzsK
KyAgICBzd2l0Y2ggKG5ld1BhY2tpbmcpCisgICAgeworICAgICAgICBjYXNlIFRMYXlvdXRNYXRy
aXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZDoKKyAgICAgICAgICAgIHJldHVybiBvbGRQYWNraW5n
ID09IFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmllZCA/IGtEZWZhdWx0TGF5b3V0
TWF0cml4UGFja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkUGFja2luZzsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBuZXdQYWNraW5nOworICAgIH0KK30KKworYm9vbCBzaDo6
Q2FuQmVQYWNrZWQoVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlKQoreworICAgIHN3aXRjaCAo
c3RvcmFnZSkKKyAgICB7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzUGFj
a2VkOgorICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1N0ZDE0MDoKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFn
ZTo6RWJzVW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBzaDo6Q2FuQmVQYWNrZWQoVExheW91
dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIpCit7CisgICAgcmV0dXJuIENhbkJlUGFja2VkKGxh
eW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpOworfQorCitib29sIHNoOjpDYW5CZVBhY2tlZChj
b25zdCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAoIXR5cGUuaXNWZWN0b3IoKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIENhbkJlUGFja2VkKHR5cGUu
Z2V0TGF5b3V0UXVhbGlmaWVyKCkpOworfQorCit2b2lkIHNoOjpTZXRCbG9ja1N0b3JhZ2UoVFR5
cGUgJnR5cGUsIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSkKK3sKKyAgICBhdXRvIHF1YWwg
ICAgICAgICA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCk7CisgICAgcXVhbC5ibG9ja1N0b3Jh
Z2UgPSBzdG9yYWdlOworICAgIHR5cGUuc2V0TGF5b3V0UXVhbGlmaWVyKHF1YWwpOworfQorCitz
dGF0aWMgTGF5b3V0IENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihURmllbGQgY29uc3QgKmNvbnN0
ICpiZWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZCBj
b25zdCAqY29uc3QgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tp
bmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG1h
c2tBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNp
emVfdCBiYXNlQWxpZ25tZW50KQoreworICAgIGNvbnN0IGJvb2wgaXNQYWNrZWQgPQorICAgICAg
ICBzdG9yYWdlID09IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1BhY2tlZCB8fCBzdG9yYWdlID09
IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1NoYXJlZDsKKworICAgIGF1dG8gbGF5b3V0ID0gTGF5
b3V0OjpJZGVudGl0eSgpOworICAgIGZvciAoYXV0byBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCisgICAgeworICAgICAgICBsYXlvdXQgKz0gR2xzbExheW91dE9mKCooKml0ZXIp
LT50eXBlKCksIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIGZhbHNlKTsKKyAgICB9CisgICAgaWYg
KCFpc1BhY2tlZCkgIC8vIFhYWDogQ29ycmVjdD8KKyAgICB7CisgICAgICAgIGxheW91dC5zaXpl
T2YgPSBSb3VuZFVwVG9NdWx0aXBsZU9mKGxheW91dC5zaXplT2YsIGxheW91dC5hbGlnbk9mKTsK
KyAgICB9CisgICAgbGF5b3V0LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7
CisgICAgcmV0dXJuIGxheW91dDsKK30KKworc3RhdGljIExheW91dCBDb21tb25HbHNsTGF5b3V0
T2YoY29uc3QgVFR5cGUgJnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBtYXNrQXJyYXksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgYmFzZUFsaWdubWVudCkK
K3sKKyAgICBBU1NFUlQoc3RvcmFnZSAhPSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNp
ZmllZCk7CisKKyAgICBjb25zdCBib29sIGlzUGFja2VkID0KKyAgICAgICAgc3RvcmFnZSA9PSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQgfHwgc3RvcmFnZSA9PSBUTGF5b3V0QmxvY2tT
dG9yYWdlOjpFYnNTaGFyZWQ7CisKKyAgICBpZiAodHlwZS5pc0FycmF5KCkgJiYgIXR5cGUuaXNN
YXRyaXgoKSAmJiAhbWFza0FycmF5KQorICAgIHsKKyAgICAgICAgYXV0byBsYXlvdXQgPSBHbHNs
TGF5b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgdHJ1ZSk7CisgICAgICAgIGxh
eW91dCAqPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAgICAgICAgbGF5b3V0LnJlcXVp
cmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBsYXlvdXQ7
CisgICAgfQorCisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0
U3RydWN0KCkpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpID09
IDEpOworICAgICAgICBBU1NFUlQodHlwZS5nZXRTZWNvbmRhcnlTaXplKCkgPT0gMSk7CisgICAg
ICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisgICAg
ICAgIHJldHVybiBDb21tb25HbHNsU3RydWN0TGF5b3V0T2YoZmllbGRzLmRhdGEoKSwgZmllbGRz
LmRhdGEoKSArIGZpZWxkcy5zaXplKCksIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0cml4UGFja2luZywgbWFza0FycmF5LCBiYXNlQWxpZ25tZW50
KTsKKyAgICB9CisKKyAgICBjb25zdCBhdXRvIHNjYWxhckxheW91dCA9IFNjYWxhckxheW91dE9m
KHR5cGUsIExhbmd1YWdlOjpHTFNMKTsKKworICAgIGlmICh0eXBlLmlzUmFuazAoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzY2FsYXJMYXlvdXQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUu
aXNWZWN0b3IoKSkKKyAgICB7CisgICAgICAgIGlmIChpc1BhY2tlZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IHNpemVTY2FsZSAgPSBpbm5lclNjYWxlc1BhY2tlZFt0eXBl
LmdldE5vbWluYWxTaXplKCldOworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGFsaWduU2NhbGUg
PSBpbm5lclNjYWxlc1VucGFja2VkW3R5cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAg
ICBhdXRvIGxheW91dCA9CisgICAgICAgICAgICAgICAgTGF5b3V0e3NjYWxhckxheW91dC5zaXpl
T2YgKiBzaXplU2NhbGUsIHNjYWxhckxheW91dC5hbGlnbk9mICogYWxpZ25TY2FsZX07CisgICAg
ICAgICAgICByZXR1cm4gbGF5b3V0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVyU2NhbGUgPSBpbm5lclNjYWxlc1VucGFj
a2VkW3R5cGUuZ2V0Tm9taW5hbFNpemUoKV07CisgICAgICAgICAgICBhdXRvIGxheW91dCAgICAg
ICAgICAgICA9IExheW91dDo6Qm90aChzY2FsYXJMYXlvdXQuc2l6ZU9mICogaW5uZXJTY2FsZSk7
CisgICAgICAgICAgICByZXR1cm4gbGF5b3V0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlLmlzTWF0cml4KCkpOworCisgICAgICAgIHNpemVf
dCBpbm5lckRpbTsKKyAgICAgICAgc2l6ZV90IG91dGVyRGltOworCisgICAgICAgIHN3aXRjaCAo
bWF0cml4UGFja2luZykKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4
UGFja2luZzo6RW1wQ29sdW1uTWFqb3I6CisgICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KHR5cGUuZ2V0Um93cygpKTsKKyAgICAgICAgICAgICAgICBvdXRlckRp
bSA9IHN0YXRpY19jYXN0PHNpemVfdD4odHlwZS5nZXRDb2xzKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wUm93TWFq
b3I6CisgICAgICAgICAgICAgICAgaW5uZXJEaW0gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHR5cGUu
Z2V0Q29scygpKTsKKyAgICAgICAgICAgICAgICBvdXRlckRpbSA9IHN0YXRpY19jYXN0PHNpemVf
dD4odHlwZS5nZXRSb3dzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUTGF5b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAg
ICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgICAgICBpbm5lckRpbSA9IDA7CisgICAgICAg
ICAgICAgICAgb3V0ZXJEaW0gPSAwOworICAgICAgICB9CisKKyAgICAgICAgb3V0ZXJEaW0gKj0g
dHlwZS5nZXRBcnJheVNpemVQcm9kdWN0KCk7CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGlubmVy
U2NhbGUgPSBpbm5lclNjYWxlc1VucGFja2VkW2lubmVyRGltXTsKKyAgICAgICAgY29uc3Qgc2l6
ZV90IG4gICAgICAgICAgPSBpbm5lclNjYWxlICogc2NhbGFyTGF5b3V0LnNpemVPZjsKKyAgICAg
ICAgTGF5b3V0IGxheW91dCAgICAgICAgICAgPSB7b3V0ZXJEaW0gKiBuLCBufTsKKyAgICAgICAg
bGF5b3V0LnJlcXVpcmVBbGlnbm1lbnQoYmFzZUFsaWdubWVudCwgdHJ1ZSk7CisgICAgICAgIHJl
dHVybiBsYXlvdXQ7CisgICAgfQorfQorCitMYXlvdXQgc2g6Okdsc2xMYXlvdXRPZihjb25zdCBU
VHlwZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1h
dHJpeFBhY2tpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1hc2tBcnJheSkKK3sK
KyAgICBBU1NFUlQodHlwZS5nZXROb21pbmFsU2l6ZSgpIDw9IDQpOworICAgIEFTU0VSVCh0eXBl
LmdldFNlY29uZGFyeVNpemUoKSA8PSA0KTsKKworICAgIHN0b3JhZ2UgICAgICAgPSBPdmVybGF5
KHN0b3JhZ2UsIHR5cGUpOworICAgIG1hdHJpeFBhY2tpbmcgPSBPdmVybGF5KG1hdHJpeFBhY2tp
bmcsIHR5cGUpOworCisgICAgc3dpdGNoIChzdG9yYWdlKQorICAgIHsKKyAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNQYWNrZWQ6CisgICAgICAgICAgICByZXR1cm4gQ29tbW9u
R2xzbExheW91dE9mKHR5cGUsIHN0b3JhZ2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMSk7
CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAgICAg
ICAgcmV0dXJuIENvbW1vbkdsc2xMYXlvdXRPZih0eXBlLCBzdG9yYWdlLCBtYXRyaXhQYWNraW5n
LCBtYXNrQXJyYXksIDE2KTsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNT
dGQxNDA6CisgICAgICAgICAgICByZXR1cm4gQ29tbW9uR2xzbExheW91dE9mKHR5cGUsIHN0b3Jh
Z2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1N0ZDQzMDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsTGF5
b3V0T2YodHlwZSwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5LCAxKTsKKyAgICAg
ICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAg
IExPR0lDX0VSUk9SKCk7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0OjpJbnZhbGlkKCk7Cisg
ICAgfQorfQorCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBzaDo6R2xzbFN0cnVjdExheW91dE9m
KFRGaWVsZCBjb25zdCAqY29uc3QgKmJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBURmllbGQgY29uc3QgKmNvbnN0ICplbmQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ug
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtYXNrQXJyYXkpCit7CisgICAgQVNTRVJU
KHN0b3JhZ2UgIT0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzVW5zcGVjaWZpZWQpOworICAgIEFT
U0VSVChtYXRyaXhQYWNraW5nICE9IFRMYXlvdXRNYXRyaXhQYWNraW5nOjpFbXBVbnNwZWNpZmll
ZCk7CisKKyAgICBzd2l0Y2ggKHN0b3JhZ2UpCisgICAgeworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1BhY2tlZDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3Ry
dWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5
LCAxKTsKKyAgICAgICAgY2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTaGFyZWQ6CisgICAg
ICAgICAgICByZXR1cm4gQ29tbW9uR2xzbFN0cnVjdExheW91dE9mKGJlZ2luLCBlbmQsIHN0b3Jh
Z2UsIG1hdHJpeFBhY2tpbmcsIG1hc2tBcnJheSwgMTYpOworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1N0ZDE0MDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25HbHNsU3Ry
dWN0TGF5b3V0T2YoYmVnaW4sIGVuZCwgc3RvcmFnZSwgbWF0cml4UGFja2luZywgbWFza0FycmF5
LCAxNik7CisgICAgICAgIGNhc2UgVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkNDMwOgorICAg
ICAgICAgICAgcmV0dXJuIENvbW1vbkdsc2xTdHJ1Y3RMYXlvdXRPZihiZWdpbiwgZW5kLCBzdG9y
YWdlLCBtYXRyaXhQYWNraW5nLCBtYXNrQXJyYXksIDEpOworICAgICAgICBjYXNlIFRMYXlvdXRC
bG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVkOgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICAgICAgICAgIHJldHVybiBMYXlvdXQ6OkludmFsaWQoKTsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTQxM2VkZjQ5ZmVmMjdjMDBhZDYxNjZhZWFjZmU1MjZhYTk0ZjFkNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9MYXlvdXQuaApAQCAtMCwwICsxLDg4IEBACisvLworLy8g
Q29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX0xB
WU9VVF9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9MQVlPVVRfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY29uc3Rl
eHByIGNvbnN0IGF1dG8ga0RlZmF1bHRMYXlvdXRCbG9ja1N0b3JhZ2UgID0gVExheW91dEJsb2Nr
U3RvcmFnZTo6RWJzU2hhcmVkOworY29uc3RleHByIGNvbnN0IGF1dG8ga0RlZmF1bHRMYXlvdXRN
YXRyaXhQYWNraW5nID0gVExheW91dE1hdHJpeFBhY2tpbmc6OkVtcENvbHVtbk1ham9yOworCisv
LyBSZXR1cm5zIGBvbGRTdG9yYWdlYCBpZiBgdHlwZWAgaGFzIHVuc3BlY2lmaWVkIGJsb2NrIHN0
b3JhZ2UuCisvLyBPdGhlcndpc2UgcmV0dXJucyBibG9jayBzdG9yYWdlIG9mIGB0eXBlYC4KK1RM
YXlvdXRCbG9ja1N0b3JhZ2UgT3ZlcmxheShUTGF5b3V0QmxvY2tTdG9yYWdlIG9sZFN0b3JhZ2Us
IGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gUmV0dXJucyBgb2xkUGFja2luZ2AgaWYgYHR5cGVg
IGhhcyB1bnNwZWNpZmllZCBtYXRyaXggcGFja2luZy4KKy8vIE90aGVyd2lzZSByZXR1cm5zIG1h
dHJpeCBwYWNraW5nIG9mIGB0eXBlYC4KK1RMYXlvdXRNYXRyaXhQYWNraW5nIE92ZXJsYXkoVExh
eW91dE1hdHJpeFBhY2tpbmcgb2xkUGFja2luZywgY29uc3QgVFR5cGUgJnR5cGUpOworCisvLyBS
ZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3NhYmxlIGZvciB0aGUgYmxvY2sgc3Rv
cmFnZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCitib29sIENhbkJlUGFja2VkKFRM
YXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSk7CisKKy8vIFJldHVybnMgd2hldGhlciBvciBub3Qg
aXQgaXMgcGVybWlzc2FibGUgZm9yIHRoZSBsYXlvdXQgcXVhbGlmaWVyIHRvIHVzZSBhIHBhY2tl
ZCByZXByZXNlbnRhdGlvbi4KK2Jvb2wgQ2FuQmVQYWNrZWQoVExheW91dFF1YWxpZmllciBsYXlv
dXRRdWFsaWZpZXIpOworCisvLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGl0IGlzIHBlcm1pc3Nh
YmxlIGZvciB0aGUgdHlwZSB0byB1c2UgYSBwYWNrZWQgcmVwcmVzZW50YXRpb24uCitib29sIENh
bkJlUGFja2VkKGNvbnN0IFRUeXBlICZ0eXBlKTsKKworLy8gU2V0cyB0aGUgYmxvY2sgc3RvcmFn
ZSBmb3IgYSB0eXBlLgordm9pZCBTZXRCbG9ja1N0b3JhZ2UoVFR5cGUgJnR5cGUsIFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSk7CisKKy8vIENvbnRhaW5zIGBzaXplb2ZgIGFuZCBgYWxpZ25v
ZmAgaW5mb3JtYXRpb24uCitzdHJ1Y3QgTGF5b3V0Cit7CisgICAgc2l6ZV90IHNpemVPZjsKKyAg
ICBzaXplX3QgYWxpZ25PZjsKKworICAgIHN0YXRpYyBMYXlvdXQgSWRlbnRpdHkoKSB7IHJldHVy
biB7MCwgMX07IH0KKyAgICBzdGF0aWMgTGF5b3V0IEludmFsaWQoKSB7IHJldHVybiB7MCwgMH07
IH0KKyAgICBzdGF0aWMgTGF5b3V0IEJvdGgoc2l6ZV90IG4pIHsgcmV0dXJuIHtuLCBufTsgfQor
CisgICAgdm9pZCByZXF1aXJlQWxpZ25tZW50KHNpemVfdCBhbGlnbiwgYm9vbCBwYWQpOworCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExheW91dCAmb3RoZXIpIGNvbnN0OworCisgICAgdm9p
ZCBvcGVyYXRvcis9KGNvbnN0IExheW91dCAmb3RoZXIpOworICAgIHZvaWQgb3BlcmF0b3IqPShz
aXplX3Qgc2NhbGUpOworCisgICAgTGF5b3V0IG9wZXJhdG9yKyhjb25zdCBMYXlvdXQgJm90aGVy
KSBjb25zdDsKKyAgICBMYXlvdXQgb3BlcmF0b3IqKHNpemVfdCBzY2FsZSkgY29uc3Q7Cit9Owor
CitzdHJ1Y3QgTWV0YWxMYXlvdXRPZkNvbmZpZworeworICAgIGJvb2wgZGlzYWJsZVBhY2tpbmcg
ICAgICAgICAgICAgPSBmYWxzZTsKKyAgICBib29sIG1hc2tBcnJheSAgICAgICAgICAgICAgICAg
ID0gZmFsc2U7CisgICAgYm9vbCB0cmVhdFNhbXBsZXJzQXNUZXh0dXJlRW52ICA9IGZhbHNlOwor
ICAgIGJvb2wgYXNzdW1lU3RydWN0c0FyZVRhaWxQYWRkZWQgPSBmYWxzZTsgIC8vIFBhZCB0byBt
dWx0aXBsZSBvZiAxNgorfTsKKworLy8gUmV0dXJucyB0aGUgbGF5b3V0IG9mIGEgdHlwZSBpZiBp
dCB3ZXJlIHRvIGJlIHJlcHJlc2VudGVkIGluIGEgTWV0YWwgcHJvZ3JhbS4KKy8vIFRoaXMgZGVs
aWJlcmF0ZWx5IGlnbm9yZXMgdGhlIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYW5kIFRMYXlvdXRNYXRy
aXhQYWNraW5nIG9mIGFueSB0eXBlLgorQU5HTEVfTk9fRElTQ0FSRCBMYXlvdXQgTWV0YWxMYXlv
dXRPZihjb25zdCBUVHlwZSAmdHlwZSwgTWV0YWxMYXlvdXRPZkNvbmZpZyBjb25maWcgPSB7fSk7
CisKKy8vIFJldHVybnMgdGhlIGxheW91dCBvZiBhIHR5cGUgaWYgaXQgd2VyZSB0byBiZSByZXBy
ZXNlbnRlZCBpbiBhIEdMU0wgcHJvZ3JhbS4KK0FOR0xFX05PX0RJU0NBUkQgTGF5b3V0CitHbHNs
TGF5b3V0T2YoY29uc3QgVFR5cGUgJnR5cGUsCisgICAgICAgICAgICAgVExheW91dEJsb2NrU3Rv
cmFnZSBzdG9yYWdlICAgICAgICA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Vuc3BlY2lmaWVk
LAorICAgICAgICAgICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcgPSBUTGF5
b3V0TWF0cml4UGFja2luZzo6RW1wVW5zcGVjaWZpZWQsCisgICAgICAgICAgICAgYm9vbCBtYXNr
QXJyYXkgICAgICAgICAgICAgICAgICAgICA9IGZhbHNlKTsKKworLy8gUmV0dXJucyB0aGUgbGF5
b3V0IG9mIGEgc3RydWN0dXJlIGlmIGl0IHdlcmUgdG8gYmUgcmVwcmVzZW50ZWQgaW4gYSBHTFNM
IHByb2dyYW0uCitBTkdMRV9OT19ESVNDQVJEIExheW91dCBHbHNsU3RydWN0TGF5b3V0T2YoVEZp
ZWxkIGNvbnN0ICpjb25zdCAqYmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEZpZWxkIGNvbnN0ICpjb25zdCAqZW5kLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTGF5b3V0TWF0cml4UGFj
a2luZyBtYXRyaXhQYWNraW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbWFza0FycmF5ID0gZmFsc2UpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKwor
I2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9MQVlP
VVRfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25z
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zZTMwZGFlNmUyZDdiNmU2OTgyZmYwMDI5Mzc0ZTNmYWY0MjNjNWFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuY3BwCkBAIC0w
LDAgKzEsMzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2wuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOwor
CitjbGFzcyBNYXBwZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6Cisg
ICAgRnVuY3Rpb25Ub0RlZmluaXRpb24gbUZ1bmNUb0RlZjsKKworICBwdWJsaWM6CisgICAgTWFw
cGVyKCkgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSkge30KKworICAgIGJv
b2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24gKmZ1bmNEZWZOb2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9u
ICpmdW5jID0gZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAgIEFTU0VSVChmdW5j
LT5nZXRCdWlsdEluT3AoKSA9PSBUT3BlcmF0b3I6OkVPcE51bGwpOworICAgICAgICBtRnVuY1Rv
RGVmW2Z1bmNdID0gZnVuY0RlZk5vZGU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
OworCitGdW5jdGlvblRvRGVmaW5pdGlvbiBzaDo6TWFwRnVuY3Rpb25zVG9EZWZpbml0aW9ucyhU
SW50ZXJtQmxvY2sgJnJvb3QpCit7CisgICAgTWFwcGVyIG1hcHBlcjsKKyAgICByb290LnRyYXZl
cnNlKCZtYXBwZXIpOworICAgIHJldHVybiBzdGQ6Om1vdmUobWFwcGVyLm1GdW5jVG9EZWYpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcEZ1bmN0aW9uc1RvRGVmaW5pdGlvbnMuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU1
NmRkZWU0ZDkwNTBhNzAyMzc1ZWM1OThiZWY4MmI0NWVmMzg1YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9NYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zLmgKQEAgLTAsMCArMSwyNSBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9NQVBGVU5DVElPTlNUT0RFRklOSVRJT05TX0hfCisjZGVmaW5lIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5JVElPTlNf
SF8KKworI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKwor
Ly8gQSBtYXAgZnJvbSBmdW5jdGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBkZWZpbml0aW9u
cy4KK3VzaW5nIEZ1bmN0aW9uVG9EZWZpbml0aW9uID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0
IFRGdW5jdGlvbiAqLCBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICo+OworCisvLyBNYXBzIGZ1
bmN0aW9ucyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGRlZmluaXRpb25zLgorQU5HTEVfTk9fRElT
Q0FSRCBGdW5jdGlvblRvRGVmaW5pdGlvbiBNYXBGdW5jdGlvbnNUb0RlZmluaXRpb25zKFRJbnRl
cm1CbG9jayAmcm9vdCk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX01BUEZVTkNUSU9OU1RPREVGSU5J
VElPTlNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmNwcCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9NYXBTeW1ib2xzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMzVjOTMwNDY5NWQxZWRmZTBmYmVk
NTIxZDZmYjEwNGNmZGM2NjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5
bWJvbHMuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1ib2xzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2lu
ZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQor
eworCitjbGFzcyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICBwcml2YXRl
OgorICAgIHN0ZDo6ZnVuY3Rpb248VEludGVybU5vZGUgJihjb25zdCBURnVuY3Rpb24gKiwgVElu
dGVybVN5bWJvbCAmKT4gbU1hcDsKKworICBwdWJsaWM6CisgICAgUmV3cml0ZXIoVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPFRJbnRlcm1Ob2RlICYoY29u
c3QgVEZ1bmN0aW9uICosIFRJbnRlcm1TeW1ib2wgJik+IG1hcCkKKyAgICAgICAgOiBUSW50ZXJt
UmVidWlsZChjb21waWxlciwgZmFsc2UsIHRydWUpLCBtTWFwKG1hcCkKKyAgICB7fQorCisgICAg
UG9zdFJlc3VsdCB2aXNpdFN5bWJvbFBvc3QoVEludGVybVN5bWJvbCAmc3ltYm9sTm9kZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtTWFwKGdldFBhcmVudEZ1bmN0aW9uKCksIHN5
bWJvbE5vZGUpOworICAgIH0KK307CisKK30gIC8vIG5hbWVzcGFjZQorCitib29sIHNoOjpNYXBT
eW1ib2xzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjxUSW50ZXJtTm9k
ZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXApCit7CisgICAgUmV3
cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN0ZDo6bW92ZShtYXApKTsKKyAgICBpZiAoIXJld3Jp
dGVyLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9NYXBTeW1i
b2xzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTWFwU3ltYm9scy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1Njg5MGExNWNh
MWVjYTU5MDFiMTJhYThjMzkxNmMxNTZmY2JjOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvTWFwU3ltYm9scy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9N
RU1CRVJBQ0NFU1NfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfTUFQVkFSSUFCTEVTVE9NRU1CRVJBQ0NFU1NfSF8KKworI2luY2x1ZGUgPGZ1bmN0
aW9uYWw+CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIE1hcHMg
VEludGVybVN5bWJvbCBub2RlcyB0byBUSW50ZXJtTm9kZSBub2Rlcy4KKy8vIFRoZSBwYXJlbnQg
ZnVuY3Rpb24gb2YgYSBzeW1ib2wgaXMgcHJvdmlkZWQgdG8gdGhlIG1hcHBpbmcgd2hlbiBhcHBs
aWNhYmxlLgorQU5HTEVfTk9fRElTQ0FSRCBib29sIE1hcFN5bWJvbHMoCisgICAgVENvbXBpbGVy
ICZjb21waWxlciwKKyAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgc3RkOjpmdW5jdGlvbjxU
SW50ZXJtTm9kZSAmKGNvbnN0IFRGdW5jdGlvbiAqLCBUSW50ZXJtU3ltYm9sICYpPiBtYXApOwor
Cit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9NQVBWQVJJQUJMRVNUT01FTUJFUkFDQ0VTU19IXwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5
U3RydWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Nzc4ZDM0Y2MzMWM1MDliMDk2MzllMDZlYjM4NjUwZjgw
ZjEyYjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01vZGlmeVN0cnVjdC5jcHAK
QEAgLTAsMCArMSwxMDAxIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2lu
Y2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8bnVtZXJpYz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRf
bWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworc2l6ZV90
IE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBv
cmRlcmluZy5zaXplKCk7Cit9CisKK2NvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZNb2Rp
ZmllZFN0cnVjdE1hY2hpbmVyaWVzOjphdChzaXplX3QgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGluZGV4IDwgc2l6ZSgpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzICAgICAgICAgICAg
ICA9IG9yZGVyaW5nW2luZGV4XTsKKyAgICBjb25zdCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAq
bSA9IGZpbmQoKnMpOworICAgIEFTU0VSVChtKTsKKyAgICByZXR1cm4gKm07Cit9CisKK2NvbnN0
IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICpNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzOjpmaW5k
KGNvbnN0IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0Cit7CisgICAgYXV0byBpdGVyID0gb3JpZ2luYWxU
b01hY2hpbmVyeS5maW5kKCZzKTsKKyAgICBpZiAoaXRlciA9PSBvcmlnaW5hbFRvTWFjaGluZXJ5
LmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVy
biAmaXRlci0+c2Vjb25kOworfQorCit2b2lkIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXM6Omlu
c2VydChjb25zdCBUU3RydWN0dXJlICZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgJm1hY2hpbmVyeSkKK3sKKyAg
ICBBU1NFUlQoIWZpbmQocykpOworICAgIG9yaWdpbmFsVG9NYWNoaW5lcnlbJnNdID0gbWFjaGlu
ZXJ5OworICAgIG9yZGVyaW5nLnB1c2hfYmFjaygmcyk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK25hbWVzcGFjZQoreworCitUSW50ZXJtVHlwZWQgJkZsYXR0ZW4oU3ltYm9sRW52
ICZzeW1ib2xFbnYsIFRJbnRlcm1UeXBlZCAmbm9kZSkKK3sKKyAgICBhdXRvICZ0eXBlID0gbm9k
ZS5nZXRUeXBlKCk7CisgICAgQVNTRVJUKHR5cGUuaXNBcnJheSgpKTsKKworICAgIGF1dG8gJnJl
dFR5cGUgPSBJbm5lcm1vc3RUeXBlKHR5cGUpOworICAgIHJldFR5cGUubWFrZUFycmF5KDEpOwor
CisgICAgcmV0dXJuIHN5bWJvbEVudi5jYWxsRnVuY3Rpb25PdmVybG9hZChOYW1lKCJmbGF0dGVu
IiksIHJldFR5cGUsICpuZXcgVEludGVybVNlcXVlbmNleyZub2RlfSk7Cit9CisKK3N0cnVjdCBG
bGF0dGVuQXJyYXkKK3t9OworCitzdHJ1Y3QgUGF0aEl0ZW0KK3sKKyAgICBlbnVtIGNsYXNzIFR5
cGUKKyAgICB7CisgICAgICAgIEZpZWxkLCAgICAgICAgIC8vIFN0cnVjdCBmaWVsZCBpbmRleGlu
Zy4KKyAgICAgICAgSW5kZXgsICAgICAgICAgLy8gQXJyYXksIHZlY3Rvciwgb3IgbWF0cml4IGlu
ZGV4aW5nLgorICAgICAgICBGbGF0dGVuQXJyYXksICAvLyBBcnJheSBvZiBhbnkgcmFuayAtPiBw
b2ludGVyIG9mIGlubmVybW9zdCB0eXBlLgorICAgIH07CisKKyAgICBQYXRoSXRlbShjb25zdCBU
RmllbGQgJmZpZWxkKSA6IGZpZWxkKCZmaWVsZCksIHR5cGUoVHlwZTo6RmllbGQpIHt9CisgICAg
UGF0aEl0ZW0oaW50IGluZGV4KSA6IGluZGV4KGluZGV4KSwgdHlwZShUeXBlOjpJbmRleCkge30K
KyAgICBQYXRoSXRlbSh1bnNpZ25lZCBpbmRleCkgOiBQYXRoSXRlbShzdGF0aWNfY2FzdDxpbnQ+
KGluZGV4KSkge30KKyAgICBQYXRoSXRlbShGbGF0dGVuQXJyYXkgZmxhdHRlbikgOiB0eXBlKFR5
cGU6OkZsYXR0ZW5BcnJheSkge30KKworICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCBU
RmllbGQgKmZpZWxkOworICAgICAgICBpbnQgaW5kZXg7CisgICAgfTsKKyAgICBUeXBlIHR5cGU7
Cit9OworCitUSW50ZXJtVHlwZWQgJkJ1aWxkUGF0aEFjY2VzcyhTeW1ib2xFbnYgJnN5bWJvbEVu
diwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGF0aEl0ZW0+
ICZwYXRoKQoreworICAgIFRJbnRlcm1UeXBlZCAqY3VyciA9IG5ldyBUSW50ZXJtU3ltYm9sKCZ2
YXIpOworICAgIGZvciAoY29uc3QgUGF0aEl0ZW0gJml0ZW0gOiBwYXRoKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChpdGVtLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgUGF0aEl0
ZW06OlR5cGU6OkZpZWxkOgorICAgICAgICAgICAgICAgIGN1cnIgPSAmQWNjZXNzRmllbGQoKmN1
cnIsIGl0ZW0uZmllbGQtPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFBhdGhJdGVtOjpUeXBlOjpJbmRleDoKKyAgICAgICAgICAgICAgICBjdXJyID0g
JkFjY2Vzc0luZGV4KCpjdXJyLCBpdGVtLmluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgUGF0aEl0ZW06OlR5cGU6OkZsYXR0ZW5BcnJheToKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjdXJyID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqY3Vycik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gKmN1cnI7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIE9y
aWdpbmFsUGFyYW0gPSBjb25zdCBUVmFyaWFibGUgJjsKK3VzaW5nIE1vZGlmaWVkUGFyYW0gPSBj
b25zdCBUVmFyaWFibGUgJjsKKwordXNpbmcgT3JpZ2luYWxBY2Nlc3MgPSBUSW50ZXJtVHlwZWQ7
Cit1c2luZyBNb2RpZmllZEFjY2VzcyA9IFRJbnRlcm1UeXBlZDsKKworc3RydWN0IEFjY2Vzcwor
eworICAgIE9yaWdpbmFsQWNjZXNzICZvcmlnaW5hbDsKKyAgICBNb2RpZmllZEFjY2VzcyAmbW9k
aWZpZWQ7CisKKyAgICBzdHJ1Y3QgRW52CisgICAgeworICAgICAgICBjb25zdCBDb252ZXJ0VHlw
ZSB0eXBlOworICAgIH07Cit9OworCit1c2luZyBDb252ZXJzaW9uRnVuYyA9IHN0ZDo6ZnVuY3Rp
b248QWNjZXNzKEFjY2Vzczo6RW52ICYsIE9yaWdpbmFsQWNjZXNzICYsIE1vZGlmaWVkQWNjZXNz
ICYpPjsKKworY2xhc3MgQ29udmVydFN0cnVjdFN0YXRlIDogYW5nbGU6Ok5vbkNvcHlhYmxlCit7
CisgIHByaXZhdGU6CisgICAgc3RydWN0IENvbnZlcnNpb25JbmZvCisgICAgeworICAgICAgICBD
b252ZXJzaW9uRnVuYyBzdGRGdW5jOworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmFzdEZ1bmM7
CisgICAgICAgIHN0ZDo6dmVjdG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisgICAgICAgIEltbXV0
YWJsZVN0cmluZyBwYXRoTmFtZTsKKyAgICB9OworCisgIHB1YmxpYzoKKyAgICBDb252ZXJ0U3Ry
dWN0U3RhdGUoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kaWZ5U3RydWN0Q29u
ZmlnICZjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkU3RydWN0TWFjaGlu
ZXJpZXMgJm91dE1hY2hpbmVyaWVzKQorICAgICAgICA6IGNvbmZpZyhjb25maWcpLAorICAgICAg
ICAgIHN5bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAgICAgIG1vZGlmaWVkRmllbGRzKCpuZXcg
VEZpZWxkTGlzdCgpKSwKKyAgICAgICAgICBzeW1ib2xUYWJsZShzeW1ib2xFbnYuc3ltYm9sVGFi
bGUoKSksCisgICAgICAgICAgaWRHZW4oaWRHZW4pLAorICAgICAgICAgIG91dE1hY2hpbmVyaWVz
KG91dE1hY2hpbmVyaWVzKQorICAgIHt9CisKKyAgICB+Q29udmVydFN0cnVjdFN0YXRlKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChuYW1lUGF0aC5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKG5h
bWVQYXRoU2l6ZXMuZW1wdHkoKSk7CisgICAgfQorCisgICAgdm9pZCBwdWJsaXNoKGNvbnN0IFRT
dHJ1Y3R1cmUgJm9yaWdpbmFsU3RydWN0LCBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUp
CisgICAgeworICAgICAgICBjb25zdCBib29sIGlzT3JpZ2luYWxUb01vZGlmaWVkID0gY29uZmln
LmNvbnZlcnRUeXBlID09IENvbnZlcnRUeXBlOjpPcmlnaW5hbFRvTW9kaWZpZWQ7CisKKyAgICAg
ICAgYXV0byAmbW9kaWZpZWRTdHJ1Y3QgPSAqbmV3IFRTdHJ1Y3R1cmUoJnN5bWJvbFRhYmxlLCBt
b2RpZmllZFN0cnVjdE5hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmbW9kaWZpZWRGaWVsZHMsIG1vZGlmaWVkU3RydWN0TmFtZS5z
eW1ib2xUeXBlKCkpOworCisgICAgICAgIGF1dG8gJmZ1bmMgPSAqbmV3IFRGdW5jdGlvbigKKyAg
ICAgICAgICAgICZzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgIGlkR2VuLmNyZWF0ZU5ld05hbWUo
aXNPcmlnaW5hbFRvTW9kaWZpZWQgPyAib3JpZ2luYWxUb01vZGlmaWVkIiA6ICJtb2RpZmllZFRv
T3JpZ2luYWwiKQorICAgICAgICAgICAgICAgIC5yYXdOYW1lKCksCisgICAgICAgICAgICBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsLCBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0Vm9pZCksIGZh
bHNlKTsKKworICAgICAgICBPcmlnaW5hbFBhcmFtIG9yaWdpbmFsUGFyYW0gPQorICAgICAgICAg
ICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgb3JpZ2luYWxTdHJ1Y3QsIE5h
bWUoIm9yaWdpbmFsIikpOworICAgICAgICBNb2RpZmllZFBhcmFtIG1vZGlmaWVkUGFyYW0gPQor
ICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShzeW1ib2xUYWJsZSwgbW9kaWZpZWRT
dHJ1Y3QsIE5hbWUoIm1vZGlmaWVkIikpOworICAgICAgICBzeW1ib2xFbnYubWFya0FzUmVmZXJl
bmNlKG9yaWdpbmFsUGFyYW0sIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKyAgICAgICAgc3ltYm9s
RW52Lm1hcmtBc1JlZmVyZW5jZShtb2RpZmllZFBhcmFtLCBjb25maWcuZXh0ZXJuYWxBZGRyZXNz
U3BhY2UpOworICAgICAgICBpZiAoaXNPcmlnaW5hbFRvTW9kaWZpZWQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZvcmlnaW5hbFBhcmFtKTsKKyAgICAgICAgICAg
IGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBhcmFtKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZtb2RpZmllZFBh
cmFtKTsKKyAgICAgICAgICAgIGZ1bmMuYWRkUGFyYW1ldGVyKCZvcmlnaW5hbFBhcmFtKTsKKyAg
ICAgICAgfQorCisgICAgICAgIFRJbnRlcm1CbG9jayAmYm9keSA9ICpuZXcgVEludGVybUJsb2Nr
KCk7CisKKyAgICAgICAgQWNjZXNzOjpFbnYgZW52e2NvbmZpZy5jb252ZXJ0VHlwZX07CisKKyAg
ICAgICAgZm9yIChDb252ZXJzaW9uSW5mbyAmaW5mbyA6IGNvbnZlcnNpb25JbmZvcykKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byBjb252ZXJ0ID0gWyZdKE9yaWdpbmFsQWNjZXNzICZvcmln
aW5hbCwgTW9kaWZpZWRBY2Nlc3MgJm1vZGlmaWVkKSB7CisgICAgICAgICAgICAgICAgaWYgKGlu
Zm8uYXN0RnVuYykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghaW5mby5zdGRGdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZzcmMg
ID0gaXNPcmlnaW5hbFRvTW9kaWZpZWQgPyBtb2RpZmllZCA6IG9yaWdpbmFsOworICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQgJmRlc3QgPSBpc09yaWdpbmFsVG9Nb2RpZmllZCA/IG9y
aWdpbmFsIDogbW9kaWZpZWQ7CisgICAgICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVt
ZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICppbmZvLmFzdEZ1bmMsIG5ldyBUSW50ZXJtU2VxdWVuY2V7JmRlc3QsICZzcmN9
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvLnN0ZEZ1bmMpOworICAgICAg
ICAgICAgICAgICAgICBBY2Nlc3MgYWNjZXNzICAgICAgPSBpbmZvLnN0ZEZ1bmMoZW52LCBvcmln
aW5hbCwgbW9kaWZpZWQpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgJnNyYyAg
PSBpc09yaWdpbmFsVG9Nb2RpZmllZCA/IGFjY2Vzcy5vcmlnaW5hbCA6IGFjY2Vzcy5tb2RpZmll
ZDsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkICZkZXN0ID0gaXNPcmlnaW5hbFRv
TW9kaWZpZWQgPyBhY2Nlc3MubW9kaWZpZWQgOiBhY2Nlc3Mub3JpZ2luYWw7CisgICAgICAgICAg
ICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRv
cjo6RU9wQXNzaWduLCAmZGVzdCwgJnNyYykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICpvcmlnaW5hbCA9ICZCdWlsZFBh
dGhBY2Nlc3Moc3ltYm9sRW52LCBvcmlnaW5hbFBhcmFtLCBpbmZvLnBhdGhJdGVtcyk7CisgICAg
ICAgICAgICBNb2RpZmllZEFjY2VzcyAqbW9kaWZpZWQgPSAmQWNjZXNzRmllbGQobW9kaWZpZWRQ
YXJhbSwgaW5mby5wYXRoTmFtZSk7CisKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG90ID0gb3Jp
Z2luYWwtPmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlIG10ID0gbW9kaWZpZWQt
PmdldFR5cGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChvdC5pc0FycmF5KCkgPT0gbXQuaXNBcnJh
eSgpKTsKKworICAgICAgICAgICAgaWYgKG90LmlzQXJyYXkoKSAmJiBvdCAhPSBtdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3QuZ2V0QXJyYXlTaXplcygpID09IG10
LmdldEFycmF5U2l6ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKG90LmlzQXJyYXlPZkFycmF5
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgPSAm
RmxhdHRlbihzeW1ib2xFbnYsICpvcmlnaW5hbCk7CisgICAgICAgICAgICAgICAgICAgIG1vZGlm
aWVkID0gJkZsYXR0ZW4oc3ltYm9sRW52LCAqbW9kaWZpZWQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBjb25zdCBpbnQgdm9sdW1lID0gc3RhdGljX2Nhc3Q8aW50PihvdC5n
ZXRBcnJheVNpemVQcm9kdWN0KCkpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdm9sdW1lOyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvcmlnaW5hbCA9IG9yaWdpbmFsLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbW9kaWZpZWQgPSBtb2RpZmllZC0+ZGVlcENvcHkoKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbEFjY2VzcyAmbyA9IEFjY2Vzc0luZGV4KCpv
cmlnaW5hbCwgaSk7CisgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQWNjZXNzICZtID0gQWNj
ZXNzSW5kZXgoKm1vZGlmaWVkLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udmVydChvLCBt
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udmVydCgqb3JpZ2luYWwsICptb2RpZmll
ZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRvICpmdW5jUHJvdG8g
PSBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZmdW5jKTsKKyAgICAgICAgYXV0byAqZnVu
Y0RlZiAgID0gbmV3IFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24oZnVuY1Byb3RvLCAmYm9keSk7
CisKKyAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgbWFjaGluZXJ5OworICAgICAgICBt
YWNoaW5lcnkubW9kaWZpZWRTdHJ1Y3QgICAgICAgICAgICAgICAgICAgPSAmbW9kaWZpZWRTdHJ1
Y3Q7CisgICAgICAgIG1hY2hpbmVyeS5nZXRDb252ZXJ0ZXIoY29uZmlnLmNvbnZlcnRUeXBlKSA9
IGZ1bmNEZWY7CisKKyAgICAgICAgb3V0TWFjaGluZXJpZXMuaW5zZXJ0KG9yaWdpbmFsU3RydWN0
LCBtYWNoaW5lcnkpOworICAgIH0KKworICAgIHZvaWQgcHVzaFBhdGgoUGF0aEl0ZW0gY29uc3Qg
Jml0ZW0pCisgICAgeworICAgICAgICBwYXRoSXRlbXMucHVzaF9iYWNrKGl0ZW0pOworCisgICAg
ICAgIHN3aXRjaCAoaXRlbS50eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFBhdGhJ
dGVtOjpUeXBlOjpGaWVsZDoKKyAgICAgICAgICAgICAgICBwdXNoTmFtZVBhdGgoaXRlbS5maWVs
ZC0+bmFtZSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgUGF0aEl0ZW06OlR5cGU6OkluZGV4OgorICAgICAgICAgICAgICAgIHB1c2hOYW1lUGF0
aChpdGVtLmluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSBQYXRoSXRlbTo6VHlwZTo6RmxhdHRlbkFycmF5OgorICAgICAgICAgICAgICAgIG5hbWVQYXRo
U2l6ZXMucHVzaF9iYWNrKG5hbWVQYXRoLnNpemUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHBvcFBhdGgoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFuYW1lUGF0aC5lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKCFuYW1lUGF0aFNpemVz
LmVtcHR5KCkpOworICAgICAgICBuYW1lUGF0aC5yZXNpemUobmFtZVBhdGhTaXplcy5iYWNrKCkp
OworICAgICAgICBuYW1lUGF0aFNpemVzLnBvcF9iYWNrKCk7CisKKyAgICAgICAgQVNTRVJUKCFw
YXRoSXRlbXMuZW1wdHkoKSk7CisgICAgICAgIHBhdGhJdGVtcy5wb3BfYmFjaygpOworICAgIH0K
KworICAgIHZvaWQgZmluYWxpemUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFmaW5hbGl6ZWQp
OworICAgICAgICBmaW5hbGl6ZWQgPSB0cnVlOworICAgICAgICBpbnRyb2R1Y2VQYWNraW5nKCk7
CisgICAgICAgIEFTU0VSVChtZXRhbExheW91dFRvdGFsID09IExheW91dDo6SWRlbnRpdHkoKSk7
CisgICAgICAgIGludHJvZHVjZVBhZGRpbmcoKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE1vZGlm
aWVkRmllbGQoY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
VFR5cGUgJm5ld1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVExheW91dE1hdHJpeFBh
Y2tpbmcgcGFja2luZykKKyAgICB7CisgICAgICAgIFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVh
bGlmaWVyID0gbmV3VHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKTsKKyAgICAgICAgbGF5b3V0UXVh
bGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBzdG9yYWdlOworICAgICAgICBsYXlvdXRRdWFsaWZp
ZXIubWF0cml4UGFja2luZyAgICA9IHBhY2tpbmc7CisgICAgICAgIG5ld1R5cGUuc2V0TGF5b3V0
UXVhbGlmaWVyKGxheW91dFF1YWxpZmllcik7CisKKyAgICAgICAgY29uc3QgSW1tdXRhYmxlU3Ry
aW5nIHBhdGhOYW1lKG5hbWVQYXRoKTsKKyAgICAgICAgbW9kaWZpZWRGaWVsZHMucHVzaF9iYWNr
KG5ldyBURmllbGQoJm5ld1R5cGUsIHBhdGhOYW1lLCBmaWVsZC5saW5lKCksIGZpZWxkLnN5bWJv
bFR5cGUoKSkpOworICAgIH0KKworICAgIHZvaWQgYWRkQ29udmVyc2lvbihjb25zdCBDb252ZXJz
aW9uRnVuYyAmZnVuYykKKyAgICB7CisgICAgICAgIEFTU0VSVCghbW9kaWZpZWRGaWVsZHMuZW1w
dHkoKSk7CisgICAgICAgIGNvbnZlcnNpb25JbmZvcy5wdXNoX2JhY2soe2Z1bmMsIG51bGxwdHIs
IHBhdGhJdGVtcywgbW9kaWZpZWRGaWVsZHMuYmFjaygpLT5uYW1lKCl9KTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZENvbnZlcnNpb24oY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtb2RpZmllZEZpZWxkcy5lbXB0eSgpKTsKKyAgICAgICAgY29udmVyc2lvbklu
Zm9zLnB1c2hfYmFjayh7e30sICZmdW5jLCBwYXRoSXRlbXMsIG1vZGlmaWVkRmllbGRzLmJhY2so
KS0+bmFtZSgpfSk7CisgICAgfQorCisgICAgYm9vbCBoYXNQYWNraW5nKCkgY29uc3QgeyByZXR1
cm4gY29udGFpbnNQYWNrZWQ7IH0KKworICAgIGJvb2wgaGFzUGFkZGluZygpIGNvbnN0IHsgcmV0
dXJuIHBhZEZpZWxkQ291bnQgPiAwOyB9CisKKyAgICBib29sIHJlY3Vyc2UoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlLCBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSAmb3V0TWFjaGluZXJ5KQor
ICAgIHsKKyAgICAgICAgY29uc3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkgKm0gPSBvdXRNYWNo
aW5lcmllcy5maW5kKHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChtID09IG51bGxwdHIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IGlkR2VuLmNyZWF0ZU5ld05hbWUo
c3RydWN0dXJlLm5hbWUoKS5kYXRhKCkpOworICAgICAgICAgICAgaWYgKCFUcnlDcmVhdGVNb2Rp
ZmllZFN0cnVjdChzeW1ib2xFbnYsIGlkR2VuLCBjb25maWcsIHN0cnVjdHVyZSwgbmFtZSwgb3V0
TWFjaGluZXJpZXMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG0gPSBvdXRNYWNoaW5lcmllcy5maW5kKHN0
cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQobSk7CisgICAgICAgIH0KKyAgICAgICAgb3V0
TWFjaGluZXJ5ID0gKm07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRl
OgorICAgIHZvaWQgYWRkUGFkZGluZyhzaXplX3QgcGFkQW1vdW50LCBib29sIHVwZGF0ZUxheW91
dCkKKyAgICB7CisgICAgICAgIGlmIChwYWRBbW91bnQgPT0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGJlZ2luID0g
bW9kaWZpZWRGaWVsZHMuc2l6ZSgpOworCisgICAgICAgIC8vIEl0ZXJhdGl2ZWx5IGFkZGluZyBp
biBzY2FsYXIgb3IgdmVjdG9yIHBhZGRpbmcgYmVjYXVzZSBzb21lIHN0cnVjdCB0eXBlcyB3aWxs
IG5vdAorICAgICAgICAvLyBhbGxvdyBtYXRyaXggb3IgYXJyYXkgbWVtYmVycy4KKyAgICAgICAg
d2hpbGUgKHBhZEFtb3VudCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlICpwYWRU
eXBlOworICAgICAgICAgICAgaWYgKHBhZEFtb3VudCA+PSAxNikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBwYWRBbW91bnQgLT0gMTY7CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9
IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpFYnRGbG9hdCwgNCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlIGlmIChwYWRBbW91bnQgPj0gOCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBwYWRBbW91bnQgLT0gODsKKyAgICAgICAgICAgICAgICBwYWRUeXBlID0gbmV3IFRU
eXBlKFRCYXNpY1R5cGU6OkVidEZsb2F0LCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKHBhZEFtb3VudCA+PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHBhZEFtb3VudCAtPSA0OworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUoVEJh
c2ljVHlwZTo6RWJ0RmxvYXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
cGFkQW1vdW50ID49IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFkQW1vdW50
IC09IDI7CisgICAgICAgICAgICAgICAgcGFkVHlwZSA9IG5ldyBUVHlwZShUQmFzaWNUeXBlOjpF
YnRCb29sLCAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFkQW1vdW50ID09IDEpOworICAgICAgICAgICAg
ICAgIHBhZEFtb3VudCAtPSAxOworICAgICAgICAgICAgICAgIHBhZFR5cGUgPSBuZXcgVFR5cGUo
VEJhc2ljVHlwZTo6RWJ0Qm9vbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1
cGRhdGVMYXlvdXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWV0YWxMYXlvdXRU
b3RhbCArPSBNZXRhbExheW91dE9mKCpwYWRUeXBlKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY29uc3QgTmFtZSBuYW1lID0gaWRHZW4uY3JlYXRlTmV3TmFtZSgicGFkIik7CisgICAg
ICAgICAgICBtb2RpZmllZEZpZWxkcy5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgbmV3IFRG
aWVsZChwYWRUeXBlLCBuYW1lLnJhd05hbWUoKSwga05vU291cmNlTG9jLCBuYW1lLnN5bWJvbFR5
cGUoKSkpOworICAgICAgICAgICAgKytwYWRGaWVsZENvdW50OworICAgICAgICB9CisKKyAgICAg
ICAgc3RkOjpyZXZlcnNlKG1vZGlmaWVkRmllbGRzLmJlZ2luKCkgKyBiZWdpbiwgbW9kaWZpZWRG
aWVsZHMuZW5kKCkpOworICAgIH0KKworICAgIHZvaWQgaW50cm9kdWNlUGFja2luZygpCisgICAg
eworICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gc2V0VW5wYWNrZWRTdG9yYWdl
ID0gW10oVFR5cGUgJnR5cGUpIHsKKyAgICAgICAgICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkuYmxvY2tTdG9yYWdlOworICAgICAgICAg
ICAgc3dpdGNoIChzdG9yYWdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VExheW91dEJsb2NrU3RvcmFnZTo6RWJzU2hhcmVkOgorICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlID0gVExheW91dEJsb2NrU3RvcmFnZTo6RWJzU3RkMTQwOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVic1Bh
Y2tlZDoKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6
OkVic1N0ZDQzMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQxNDA6CisgICAgICAgICAgICAgICAgY2Fz
ZSBUTGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNTdGQ0MzA6CisgICAgICAgICAgICAgICAgY2FzZSBU
TGF5b3V0QmxvY2tTdG9yYWdlOjpFYnNVbnNwZWNpZmllZDoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTZXRCbG9ja1N0b3JhZ2UodHlwZSwg
c3RvcmFnZSk7CisgICAgICAgIH07CisKKyAgICAgICAgTGF5b3V0IGdsc2xMYXlvdXRUb3RhbCA9
IExheW91dDo6SWRlbnRpdHkoKTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgICAgICA9IG1v
ZGlmaWVkRmllbGRzLnNpemUoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkICZjdXJyICAgICAgICAgICA9
ICptb2RpZmllZEZpZWxkc1tpXTsKKyAgICAgICAgICAgIFRUeXBlICZjdXJyVHlwZSAgICAgICAg
PSAqY3Vyci50eXBlKCk7CisgICAgICAgICAgICBjb25zdCBib29sIGNhbkJlUGFja2VkID0gQ2Fu
QmVQYWNrZWQoY3VyclR5cGUpOworCisgICAgICAgICAgICBhdXRvIGRvbnRQYWNrID0gWyZdKCkg
eworICAgICAgICAgICAgICAgIGlmIChjYW5CZVBhY2tlZCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdsc2xMYXlvdXRUb3RhbCArPSBHbHNsTGF5b3V0
T2YoY3VyclR5cGUpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCFDYW5CZVBh
Y2tlZChjdXJyVHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZG9udFBhY2so
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29uc3QgTGF5b3V0IHBhY2tlZEdsc2xMYXlvdXQgICAgICAgICAgID0gR2xzbExheW91dE9m
KGN1cnJUeXBlKTsKKyAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgcGFja2Vk
U3RvcmFnZSA9IGN1cnJUeXBlLmdldExheW91dFF1YWxpZmllcigpLmJsb2NrU3RvcmFnZTsKKyAg
ICAgICAgICAgIHNldFVucGFja2VkU3RvcmFnZShjdXJyVHlwZSk7CisgICAgICAgICAgICBjb25z
dCBMYXlvdXQgdW5wYWNrZWRHbHNsTGF5b3V0ID0gR2xzbExheW91dE9mKGN1cnJUeXBlKTsKKyAg
ICAgICAgICAgIFNldEJsb2NrU3RvcmFnZShjdXJyVHlwZSwgcGFja2VkU3RvcmFnZSk7CisKKyAg
ICAgICAgICAgIEFTU0VSVChwYWNrZWRHbHNsTGF5b3V0LnNpemVPZiA8PSB1bnBhY2tlZEdsc2xM
YXlvdXQuc2l6ZU9mKTsKKyAgICAgICAgICAgIGlmIChwYWNrZWRHbHNsTGF5b3V0LnNpemVPZiA9
PSB1bnBhY2tlZEdsc2xMYXlvdXQuc2l6ZU9mKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGRvbnRQYWNrKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBqID0gaSArIDE7CisgICAgICAgICAgICBpZiAo
aiA9PSBzaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvbnRQYWNrKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0
IHNpemVfdCBwYWQgICAgICAgICAgICA9IHVucGFja2VkR2xzbExheW91dC5zaXplT2YgLSBwYWNr
ZWRHbHNsTGF5b3V0LnNpemVPZjsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmbmV4dCAgICAg
ICAgICA9ICptb2RpZmllZEZpZWxkc1tqXTsKKyAgICAgICAgICAgIGNvbnN0IExheW91dCBuZXh0
R2xzbExheW91dCA9IEdsc2xMYXlvdXRPZigqbmV4dC50eXBlKCkpOworCisgICAgICAgICAgICBp
ZiAocGFkIDwgbmV4dEdsc2xMYXlvdXQuc2l6ZU9mKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGRvbnRQYWNrKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN5bWJvbEVudi5tYXJrQXNQYWNrZWQoY3Vycik7CisgICAgICAg
ICAgICBnbHNsTGF5b3V0VG90YWwgKz0gcGFja2VkR2xzbExheW91dDsKKyAgICAgICAgICAgIGNv
bnRhaW5zUGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaW50cm9k
dWNlUGFkZGluZygpCisgICAgeworICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1BhZGRpbmcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIE1ldGFs
TGF5b3V0T2ZDb25maWcgbGF5b3V0Q29uZmlnOworICAgICAgICBsYXlvdXRDb25maWcuZGlzYWJs
ZVBhY2tpbmcgICAgICAgICAgICAgPSAhY29uZmlnLmFsbG93UGFja2luZzsKKyAgICAgICAgbGF5
b3V0Q29uZmlnLmFzc3VtZVN0cnVjdHNBcmVUYWlsUGFkZGVkID0gdHJ1ZTsKKworICAgICAgICBU
RmllbGRMaXN0IGZpZWxkcyA9IHN0ZDo6bW92ZShtb2RpZmllZEZpZWxkcyk7CisgICAgICAgIEFT
U0VSVCghZmllbGRzLmVtcHR5KCkpOyAgLy8gR0xTTCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbWVt
YmVyLgorCisgICAgICAgIGNvbnN0IFRGaWVsZCAqY29uc3QgZmlyc3QgPSBmaWVsZHMuZnJvbnQo
KTsKKworICAgICAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBmaWVsZHMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBlKCk7CisKKyAgICAgICAg
ICAgIGNvbnN0IExheW91dCBnbHNsTGF5b3V0ICA9IEdsc2xMYXlvdXRPZih0eXBlKTsKKyAgICAg
ICAgICAgIGNvbnN0IExheW91dCBtZXRhbExheW91dCA9IE1ldGFsTGF5b3V0T2YodHlwZSwgbGF5
b3V0Q29uZmlnKTsKKworICAgICAgICAgICAgc2l6ZV90IHByZVBhZEFtb3VudCA9IDA7CisgICAg
ICAgICAgICBpZiAoZ2xzbExheW91dC5hbGlnbk9mID4gbWV0YWxMYXlvdXQuYWxpZ25PZiAmJiBm
aWVsZCAhPSBmaXJzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzaXpl
X3QgcHJlUGFkZGVkU2l6ZSA9IG1ldGFsTGF5b3V0VG90YWwuc2l6ZU9mOworICAgICAgICAgICAg
ICAgIG1ldGFsTGF5b3V0VG90YWwucmVxdWlyZUFsaWdubWVudChnbHNsTGF5b3V0LmFsaWduT2Ys
IHRydWUpOworICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBwYWRkZWRTaXplID0gbWV0YWxM
YXlvdXRUb3RhbC5zaXplT2Y7CisgICAgICAgICAgICAgICAgcHJlUGFkQW1vdW50ICAgICAgICAg
ICAgPSBwYWRkZWRTaXplIC0gcHJlUGFkZGVkU2l6ZTsKKyAgICAgICAgICAgICAgICBtZXRhbExh
eW91dFRvdGFsICs9IG1ldGFsTGF5b3V0OworICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocHJl
UGFkQW1vdW50LCBmYWxzZSk7ICAvLyBOb3RlOiByZXF1aXJlQWxpZ25tZW50KCkgYWxyZWFkeSB1
cGRhdGVkIGxheW91dAorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1ldGFsTGF5b3V0VG90YWwgKz0gbWV0YWxMYXlvdXQ7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1vZGlmaWVkRmllbGRzLnB1c2hfYmFjayhmaWVs
ZCk7CisKKyAgICAgICAgICAgIGlmIChnbHNsTGF5b3V0LnNpemVPZiA+IG1ldGFsTGF5b3V0LnNp
emVPZiAmJiBmaWVsZCAhPSBmaWVsZHMuYmFjaygpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnN0IGJvb2wgdXBkYXRlTGF5b3V0ID0gdHJ1ZTsgIC8vIFhYWDogQ29ycmVjdD8K
KyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgcGFkQW1vdW50ICA9IGdsc2xMYXlvdXQuc2l6
ZU9mIC0gbWV0YWxMYXlvdXQuc2l6ZU9mOworICAgICAgICAgICAgICAgIGFkZFBhZGRpbmcocGFk
QW1vdW50LCB1cGRhdGVMYXlvdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCBwdXNoTmFtZVBhdGgoY29uc3QgY2hhciAqZXh0cmEpCisgICAgeworICAgICAg
ICBBU1NFUlQoZXh0cmEgJiYgKmV4dHJhICE9ICdcMCcpOworICAgICAgICBuYW1lUGF0aFNpemVz
LnB1c2hfYmFjayhuYW1lUGF0aC5zaXplKCkpOworICAgICAgICBjb25zdCBjaGFyICpwID0gZXh0
cmE7CisgICAgICAgIGlmIChuYW1lUGF0aC5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBuYW1lUGF0aCA9IHA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
d2hpbGUgKCpwID09ICdfJykKKyAgICAgICAgeworICAgICAgICAgICAgKytwOworICAgICAgICB9
CisgICAgICAgIGlmICgqcCA9PSAnXDAnKQorICAgICAgICB7CisgICAgICAgICAgICBwID0gIngi
OworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lUGF0aC5iYWNrKCkgIT0gJ18nKQorICAgICAg
ICB7CisgICAgICAgICAgICBuYW1lUGF0aCArPSAnXyc7CisgICAgICAgIH0KKyAgICAgICAgbmFt
ZVBhdGggKz0gcDsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hOYW1lUGF0aCh1bnNpZ25lZCBleHRy
YSkKKyAgICB7CisgICAgICAgIGNoYXIgYnVmZmVyW3N0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjpkaWdpdHMxMCArIDFdOworICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgZXh0cmEp
OworICAgICAgICBwdXNoTmFtZVBhdGgoYnVmZmVyKTsKKyAgICB9CisKKyAgcHVibGljOgorICAg
IGNvbnN0IE1vZGlmeVN0cnVjdENvbmZpZyAmY29uZmlnOworICAgIFN5bWJvbEVudiAmc3ltYm9s
RW52OworCisgIHByaXZhdGU6CisgICAgVEZpZWxkTGlzdCAmbW9kaWZpZWRGaWVsZHM7CisgICAg
TGF5b3V0IG1ldGFsTGF5b3V0VG90YWwgPSBMYXlvdXQ6OklkZW50aXR5KCk7CisgICAgc2l6ZV90
IHBhZEZpZWxkQ291bnQgICAgPSAwOworICAgIGJvb2wgY29udGFpbnNQYWNrZWQgICAgID0gZmFs
c2U7CisgICAgYm9vbCBmaW5hbGl6ZWQgICAgICAgICAgPSBmYWxzZTsKKworICAgIHN0ZDo6dmVj
dG9yPFBhdGhJdGVtPiBwYXRoSXRlbXM7CisKKyAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IG5hbWVQ
YXRoU2l6ZXM7CisgICAgc3RkOjpzdHJpbmcgbmFtZVBhdGg7CisKKyAgICBzdGQ6OnZlY3RvcjxD
b252ZXJzaW9uSW5mbz4gY29udmVyc2lvbkluZm9zOworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9s
VGFibGU7CisgICAgSWRHZW4gJmlkR2VuOworICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMg
Jm91dE1hY2hpbmVyaWVzOworfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcg
TW9kaWZ5RnVuYyA9IGJvb2wgKCopKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7
CisKK2Jvb2wgTW9kaWZ5UmVjdXJzaXZlKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyk7CisKK2Jvb2wgSWRlbnRpdHlN
b2RpZnkoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgY29u
c3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVExheW91dEJsb2Nr
U3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4
UGFja2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLnR5cGUo
KTsKKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBDbG9uZVR5cGUodHlwZSksIHN0
b3JhZ2UsIHBhY2tpbmcpOworICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52
ICYsIE9yaWdpbmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICByZXR1
cm4gQWNjZXNze28sIG19OworICAgIH0pOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJ
bmxpbmVTdHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
IGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0Qmxv
Y2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4
UGFja2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAgICA9
ICpmaWVsZC50eXBlKCk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0gc3Rh
dGUuc3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworICAgIGlmICghc3Vic3RydWN0
dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodHlwZS5p
c0FycmF5KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICgh
c3RhdGUuY29uZmlnLmlubGluZVN0cnVjdChmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgVEZpZWxkTGlzdCAmc3ViZmllbGRzID0gc3Vic3Ry
dWN0dXJlLT5maWVsZHMoKTsKKyAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmllbGQgOiBzdWJm
aWVsZHMpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmc3VidHlwZSAgICAgICAgICAgICAg
ICAgID0gKnN1YmZpZWxkLT50eXBlKCk7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3Jh
Z2Ugc3Vic3RvcmFnZSAgPSBPdmVybGF5KHN0b3JhZ2UsIHN1YnR5cGUpOworICAgICAgICBjb25z
dCBUTGF5b3V0TWF0cml4UGFja2luZyBzdWJwYWNraW5nID0gT3ZlcmxheShwYWNraW5nLCBzdWJ0
eXBlKTsKKyAgICAgICAgTW9kaWZ5UmVjdXJzaXZlKHN0YXRlLCAqc3ViZmllbGQsIHN1YnN0b3Jh
Z2UsIHN1YnBhY2tpbmcpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJl
Y3Vyc2VTdHJ1Y3QoQ29udmVydFN0cnVjdFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRC
bG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0
cml4UGFja2luZyBwYWNraW5nKQoreworICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAgICAgICAg
ICA9ICpmaWVsZC50eXBlKCk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Vic3RydWN0dXJlID0g
c3RhdGUuc3ltYm9sRW52LnJlbWFwKHR5cGUuZ2V0U3RydWN0KCkpOworICAgIGlmICghc3Vic3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0
YXRlLmNvbmZpZy5yZWN1cnNlU3RydWN0KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBNb2RpZmllZFN0cnVjdE1hY2hpbmVyeSBtYWNoaW5lcnk7Cisg
ICAgaWYgKCFzdGF0ZS5yZWN1cnNlKCpzdWJzdHJ1Y3R1cmUsIG1hY2hpbmVyeSkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgVFR5cGUgJm5ld1R5cGUgPSAqbmV3
IFRUeXBlKG1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCwgZmFsc2UpOworICAgIGlmICh0eXBlLmlz
QXJyYXkoKSkKKyAgICB7CisgICAgICAgIG5ld1R5cGUubWFrZUFycmF5cyh0eXBlLmdldEFycmF5
U2l6ZXMoKSk7CisgICAgfQorCisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqY29udmVy
dGVyID0gbWFjaGluZXJ5LmdldENvbnZlcnRlcihzdGF0ZS5jb25maWcuY29udmVydFR5cGUpOwor
ICAgIEFTU0VSVChjb252ZXJ0ZXIpOworCisgICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVsZChmaWVs
ZCwgbmV3VHlwZSwgc3RvcmFnZSwgcGFja2luZyk7CisgICAgc3RhdGUuYWRkQ29udmVyc2lvbigq
Y29udmVydGVyLT5nZXRGdW5jdGlvbigpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFNwbGl0TWF0cml4Q29sdW1ucyhDb252ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXN0YXRlLmNvbmZp
Zy5zcGxpdE1hdHJpeENvbHVtbnMoZmllbGQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGNvbnN0IGludCBjb2xzID0gdHlwZS5nZXRDb2xzKCk7CisgICAgVFR5
cGUgJnJvd1R5cGUgPSBEcm9wQ29sdW1ucyh0eXBlKTsKKworICAgIGZvciAoaW50IGMgPSAwOyBj
IDwgY29sczsgKytjKQorICAgIHsKKyAgICAgICAgc3RhdGUucHVzaFBhdGgoYyk7CisKKyAgICAg
ICAgc3RhdGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgcm93VHlwZSwgc3RvcmFnZSwgcGFja2lu
Zyk7CisgICAgICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICYsIE9yaWdp
bmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICAgICAgcmV0dXJuIEFj
Y2Vzc3tvLCBtfTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFNhdHVyYXRlTWF0cml4Um93cyhDb252
ZXJ0U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZp
ZWxkICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0
b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRy
aXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSAqZmllbGQudHlw
ZSgpOworICAgIGlmICghdHlwZS5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICBjb25zdCBpbnQgcm93cyAgICAgICA9IHR5cGUuZ2V0Um93cygpOwor
ICAgIGNvbnN0IGludCBzYXR1cmF0aW9uID0gc3RhdGUuY29uZmlnLnNhdHVyYXRlTWF0cml4Um93
cyhmaWVsZCk7CisgICAgaWYgKHNhdHVyYXRpb24gPD0gcm93cykKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBpbnQgY29scyA9IHR5cGUuZ2V0Q29scygp
OworICAgIFRUeXBlICZzYXRUeXBlID0gU2V0TWF0cml4Um93RGltKHR5cGUsIHNhdHVyYXRpb24p
OworICAgIHN0YXRlLmFkZE1vZGlmaWVkRmllbGQoZmllbGQsIHNhdFR5cGUsIHN0b3JhZ2UsIHBh
Y2tpbmcpOworCisgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb2xzOyArK2MpCisgICAgeworICAg
ICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7ICsrcikKKyAgICAgICAgeworICAgICAgICAg
ICAgc3RhdGUuYWRkQ29udmVyc2lvbihbPV0oQWNjZXNzOjpFbnYgJiwgT3JpZ2luYWxBY2Nlc3Mg
Jm8sIE1vZGlmaWVkQWNjZXNzICZtKSB7CisgICAgICAgICAgICAgICAgYXV0byAmb18gPSBBY2Nl
c3NJbmRleChBY2Nlc3NJbmRleChvLCBjKSwgcik7CisgICAgICAgICAgICAgICAgYXV0byAmbV8g
PSBBY2Nlc3NJbmRleChBY2Nlc3NJbmRleChtLCBjKSwgcik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEFjY2Vzc3tvXywgbV99OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXN0Qm9vbFRvVWludChDb252ZXJ0U3RydWN0
U3RhdGUgJnN0YXRlLCBjb25zdCBURmllbGQgJmZpZWxkKQoreworICAgIGlmIChmaWVsZC50eXBl
KCktPmdldEJhc2ljVHlwZSgpICE9IFRCYXNpY1R5cGU6OkVidEJvb2wpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmlnLnByb21vdGVCb29s
VG9VaW50KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0FjY2VzcyBDb252ZXJ0Qm9vbFRvVWludChDb252ZXJ0VHlwZSBj
b252ZXJ0VHlwZSwgT3JpZ2luYWxBY2Nlc3MgJm8sIE1vZGlmaWVkQWNjZXNzICZtKQoreworICAg
IGF1dG8gY29lcmNlID0gW10oVEludGVybVR5cGVkICZ0bywgVEludGVybVR5cGVkICZmcm9tKSAt
PiBUSW50ZXJtVHlwZWQgJiB7CisgICAgICAgIHJldHVybiAqVEludGVybUFnZ3JlZ2F0ZTo6Q3Jl
YXRlQ29uc3RydWN0b3IodG8uZ2V0VHlwZSgpLCBuZXcgVEludGVybVNlcXVlbmNleyZmcm9tfSk7
CisgICAgfTsKKyAgICBzd2l0Y2ggKGNvbnZlcnRUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBD
b252ZXJ0VHlwZTo6T3JpZ2luYWxUb01vZGlmaWVkOgorICAgICAgICAgICAgcmV0dXJuIEFjY2Vz
c3tjb2VyY2UobSwgbyksIG19OworICAgICAgICBjYXNlIENvbnZlcnRUeXBlOjpNb2RpZmllZFRv
T3JpZ2luYWw6CisgICAgICAgICAgICByZXR1cm4gQWNjZXNze28sIGNvZXJjZShvLCBtKX07Cisg
ICAgfQorfQorCitib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3JDb21tb24oQ29udmVydFN0cnVj
dFN0YXRlICZzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
RmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRM
YXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBwYWNraW5nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgYXJyYXkpCit7CisgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICh0eXBlLmlzQXJyYXkoKSAhPSBhcnJheSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCEoKHR5cGUuaXNS
YW5rMCgpICYmIEhhc1NjYWxhckJhc2ljVHlwZSh0eXBlKSkgfHwgdHlwZS5pc1ZlY3RvcigpKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29uc3QgYXV0byBzYXR1
cmF0b3IgPQorICAgICAgICBhcnJheSA/IHN0YXRlLmNvbmZpZy5zYXR1cmF0ZVNjYWxhck9yVmVj
dG9yQXJyYXlzIDogc3RhdGUuY29uZmlnLnNhdHVyYXRlU2NhbGFyT3JWZWN0b3I7CisgICAgY29u
c3QgaW50IGRpbSAgICAgICAgPSB0eXBlLmdldE5vbWluYWxTaXplKCk7CisgICAgY29uc3QgaW50
IHNhdHVyYXRpb24gPSBzYXR1cmF0b3IoZmllbGQpOworICAgIGlmIChzYXR1cmF0aW9uIDw9IGRp
bSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUVHlwZSAmc2F0
VHlwZSAgICAgICAgPSBTZXRWZWN0b3JEaW0odHlwZSwgc2F0dXJhdGlvbik7CisgICAgY29uc3Qg
Ym9vbCBib29sVG9VaW50ID0gVGVzdEJvb2xUb1VpbnQoc3RhdGUsIGZpZWxkKTsKKyAgICBpZiAo
Ym9vbFRvVWludCkKKyAgICB7CisgICAgICAgIHNhdFR5cGUuc2V0QmFzaWNUeXBlKFRCYXNpY1R5
cGU6OkVidFVJbnQpOworICAgIH0KKyAgICBzdGF0ZS5hZGRNb2RpZmllZEZpZWxkKGZpZWxkLCBz
YXRUeXBlLCBzdG9yYWdlLCBwYWNraW5nKTsKKworICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGlt
OyArK2QpCisgICAgeworICAgICAgICBzdGF0ZS5hZGRDb252ZXJzaW9uKFs9XShBY2Nlc3M6OkVu
diAmZW52LCBPcmlnaW5hbEFjY2VzcyAmbywgTW9kaWZpZWRBY2Nlc3MgJm0pIHsKKyAgICAgICAg
ICAgIGF1dG8gJm9fID0gZGltID4gMSA/IEFjY2Vzc0luZGV4KG8sIGQpIDogbzsKKyAgICAgICAg
ICAgIGF1dG8gJm1fID0gQWNjZXNzSW5kZXgobSwgZCk7CisgICAgICAgICAgICBpZiAoYm9vbFRv
VWludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29udmVydEJvb2xU
b1VpbnQoZW52LnR5cGUsIG9fLCBtXyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc3tvXywgbV99Owor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzKENvbnZlcnRTdHJ1Y3RTdGF0ZSAm
c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0Qmxv
Y2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICByZXR1cm4gU2F0dXJhdGVT
Y2FsYXJPclZlY3RvckNvbW1vbihzdGF0ZSwgZmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcsIHRydWUp
OworfQorCitib29sIFNhdHVyYXRlU2NhbGFyT3JWZWN0b3IoQ29udmVydFN0cnVjdFN0YXRlICZz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFj
a2luZyBwYWNraW5nKQoreworICAgIHJldHVybiBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQ29tbW9u
KHN0YXRlLCBmaWVsZCwgc3RvcmFnZSwgcGFja2luZywgZmFsc2UpOworfQorCitib29sIFByb21v
dGVCb29sVG9VaW50KENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBpZiAoIVRlc3RCb29sVG9V
aW50KHN0YXRlLCBmaWVsZCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgYXV0byAmcHJvbW90ZWRUeXBlID0gQ2xvbmVUeXBlKCpmaWVsZC50eXBlKCkpOworICAg
IHByb21vdGVkVHlwZS5zZXRCYXNpY1R5cGUoVEJhc2ljVHlwZTo6RWJ0VUludCk7CisgICAgc3Rh
dGUuYWRkTW9kaWZpZWRGaWVsZChmaWVsZCwgcHJvbW90ZWRUeXBlLCBzdG9yYWdlLCBwYWNraW5n
KTsKKworICAgIHN0YXRlLmFkZENvbnZlcnNpb24oWz1dKEFjY2Vzczo6RW52ICZlbnYsIE9yaWdp
bmFsQWNjZXNzICZvLCBNb2RpZmllZEFjY2VzcyAmbSkgeworICAgICAgICByZXR1cm4gQ29udmVy
dEJvb2xUb1VpbnQoZW52LnR5cGUsIG8sIG0pOworICAgIH0pOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgTW9kaWZ5Q29tbW9uKENvbnZlcnRTdHJ1Y3RTdGF0ZSAmc3RhdGUsCisgICAg
ICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAgICAgICAgY29u
c3QgVExheW91dEJsb2NrU3RvcmFnZSBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgY29uc3Qg
VExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZykKK3sKKyAgICBNb2RpZnlGdW5jIGZ1bmNzW10g
PSB7CisgICAgICAgIElubGluZVN0cnVjdCwgICAgICAgICAgICAgICAgICAvLworICAgICAgICBS
ZWN1cnNlU3RydWN0LCAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgU3BsaXRNYXRyaXhDb2x1
bW5zLCAgICAgICAgICAgIC8vCisgICAgICAgIFNhdHVyYXRlTWF0cml4Um93cywgICAgICAgICAg
ICAvLworICAgICAgICBTYXR1cmF0ZVNjYWxhck9yVmVjdG9yQXJyYXlzLCAgLy8KKyAgICAgICAg
U2F0dXJhdGVTY2FsYXJPclZlY3RvciwgICAgICAgIC8vCisgICAgICAgIFByb21vdGVCb29sVG9V
aW50LCAgICAgICAgICAgICAvLworICAgIH07CisKKyAgICBmb3IgKE1vZGlmeUZ1bmMgZnVuYyA6
IGZ1bmNzKQorICAgIHsKKyAgICAgICAgaWYgKGZ1bmMoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBw
YWNraW5nKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gSWRlbnRpdHlNb2RpZnkoc3RhdGUsIGZpZWxkLCBzdG9yYWdl
LCBwYWNraW5nKTsKK30KKworYm9vbCBJbmxpbmVBcnJheShDb252ZXJ0U3RydWN0U3RhdGUgJnN0
YXRlLAorICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkLAorICAgICAgICAgICAg
ICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAg
IGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBhY2tpbmcpCit7CisgICAgY29uc3QgVFR5cGUg
JnR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGlmICghdHlwZS5pc0FycmF5KCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghc3RhdGUuY29uZmlnLmlubGlu
ZUFycmF5KGZpZWxkKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBjb25zdCB1bnNpZ25lZCB2b2x1bWUgPSB0eXBlLmdldEFycmF5U2l6ZVByb2R1Y3QoKTsKKyAg
ICBjb25zdCBib29sIGlzTXVsdGlEaW0gPSB0eXBlLmlzQXJyYXlPZkFycmF5cygpOworCisgICAg
YXV0byAmaW5uZXJtb3N0VHlwZSA9IElubmVybW9zdFR5cGUodHlwZSk7CisgICAgY29uc3QgVEZp
ZWxkIGlubmVybW9zdEZpZWxkKCZpbm5lcm1vc3RUeXBlLCBmaWVsZC5uYW1lKCksIGZpZWxkLmxp
bmUoKSwgZmllbGQuc3ltYm9sVHlwZSgpKTsKKworICAgIGlmIChpc011bHRpRGltKQorICAgIHsK
KyAgICAgICAgc3RhdGUucHVzaFBhdGgoRmxhdHRlbkFycmF5KCkpOworICAgIH0KKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB2b2x1bWU7ICsraSkKKyAgICB7CisgICAgICAgIHN0YXRl
LnB1c2hQYXRoKGkpOworICAgICAgICBNb2RpZnlDb21tb24oc3RhdGUsIGlubmVybW9zdEZpZWxk
LCBzdG9yYWdlLCBwYWNraW5nKTsKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAgIH0KKwor
ICAgIGlmIChpc011bHRpRGltKQorICAgIHsKKyAgICAgICAgc3RhdGUucG9wUGF0aCgpOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1vZGlmeVJlY3Vyc2l2ZShDb252ZXJ0
U3RydWN0U3RhdGUgJnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2Ugc3Rv
cmFnZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRNYXRyaXhQYWNraW5nIHBh
Y2tpbmcpCit7CisgICAgc3RhdGUucHVzaFBhdGgoZmllbGQpOworCisgICAgYm9vbCBtb2RpZmll
ZDsKKyAgICBpZiAoSW5saW5lQXJyYXkoc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBwYWNraW5nKSkK
KyAgICB7CisgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbW9kaWZpZWQgPSBNb2RpZnlDb21tb24oc3RhdGUsIGZpZWxkLCBzdG9yYWdlLCBw
YWNraW5nKTsKKyAgICB9CisKKyAgICBzdGF0ZS5wb3BQYXRoKCk7CisKKyAgICByZXR1cm4gbW9k
aWZpZWQ7Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKworYm9vbCBzaDo6VHJ5Q3JlYXRlTW9kaWZpZWRTdHJ1Y3QoU3ltYm9sRW52ICZz
eW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb2RpZnlTdHJ1Y3RDb25m
aWcgJmNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJm9yaWdpbmFsU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTmFtZSAmbW9kaWZpZWRTdHJ1Y3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcmllcyAmb3V0TWFjaGluZXJpZXMpCit7Cisg
ICAgQ29udmVydFN0cnVjdFN0YXRlIHN0YXRlKHN5bWJvbEVudiwgaWRHZW4sIGNvbmZpZywgb3V0
TWFjaGluZXJpZXMpOworICAgIHNpemVfdCBpZGVudGljYWxGaWVsZENvdW50ID0gMDsKKworICAg
IGNvbnN0IFRGaWVsZExpc3QgJm9yaWdpbmFsRmllbGRzID0gb3JpZ2luYWxTdHJ1Y3QuZmllbGRz
KCk7CisgICAgZm9yIChURmllbGQgKm9yaWdpbmFsRmllbGQgOiBvcmlnaW5hbEZpZWxkcykKKyAg
ICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZvcmlnaW5hbFR5cGUgICAgICAgICAgPSAqb3JpZ2lu
YWxGaWVsZC0+dHlwZSgpOworICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIHN0b3Jh
Z2UgID0gT3ZlcmxheShjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSwgb3JpZ2luYWxUeXBlKTsK
KyAgICAgICAgY29uc3QgVExheW91dE1hdHJpeFBhY2tpbmcgcGFja2luZyA9IE92ZXJsYXkoY29u
ZmlnLmluaXRpYWxNYXRyaXhQYWNraW5nLCBvcmlnaW5hbFR5cGUpOworICAgICAgICBpZiAoIU1v
ZGlmeVJlY3Vyc2l2ZShzdGF0ZSwgKm9yaWdpbmFsRmllbGQsIHN0b3JhZ2UsIHBhY2tpbmcpKQor
ICAgICAgICB7CisgICAgICAgICAgICArK2lkZW50aWNhbEZpZWxkQ291bnQ7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzdGF0ZS5maW5hbGl6ZSgpOworCisgICAgaWYgKGlkZW50aWNhbEZpZWxk
Q291bnQgPT0gb3JpZ2luYWxGaWVsZHMuc2l6ZSgpICYmICFzdGF0ZS5oYXNQYWNraW5nKCkgJiYg
IXN0YXRlLmhhc1BhZGRpbmcoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBzdGF0ZS5wdWJsaXNoKG9yaWdpbmFsU3RydWN0LCBtb2RpZmllZFN0cnVjdE5hbWUp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5
U3RydWN0LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI4Y2Zj
NTUwNDY4MjQzOGQyYWI3YjEyMzBhOTQ5YzY5OGZkYWU5MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Nb2RpZnlTdHJ1Y3QuaApAQCAtMCwwICsxLDEzNSBAQAorLy8KKy8vIENvcHly
aWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9NT0RJRllT
VFJVQ1RfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJF
Q1RfTU9ESUZZU1RSVUNUX0hfCisKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHVub3Jk
ZXJlZF9tYXA+CisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTGF5b3V0LmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1Q
cmVsdWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCitlbnVtIGNsYXNzIENvbnZl
cnRUeXBlCit7CisgICAgT3JpZ2luYWxUb01vZGlmaWVkLAorICAgIE1vZGlmaWVkVG9PcmlnaW5h
bCwKK307CisKKy8vIENvbmZpZ3VyZXMgaG93IHN0cnVjdCBtb2RpZmljYXRpb24gaXMgcGVyZm9y
bWVkLgorY2xhc3MgTW9kaWZ5U3RydWN0Q29uZmlnCit7CisgIHB1YmxpYzoKKyAgICBzdHJ1Y3Qg
UHJlZGljYXRlCisgICAgeworICAgICAgICB1c2luZyBGdW5jID0gYm9vbCAoKikoY29uc3QgVEZp
ZWxkICYpOworICAgICAgICBzdGF0aWMgYm9vbCBGYWxzZShjb25zdCBURmllbGQgJikgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgc3RhdGljIGJvb2wgVHJ1ZShjb25zdCBURmllbGQgJikgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgU2F0dXJhdGVWZWN0b3IKKyAgICB7
CisgICAgICAgIC8vIFZhbGlkIHJldHVybiB2YWx1ZXMgYXJlIFswLCAxLCAyLCAzLCA0XS4KKyAg
ICAgICAgLy8gSWYgb3JpZ2luYWwgZGltID49IHJldHVybiB2YWx1ZSwgdGhlIGZpZWxkIHJlbWFp
bnMgdW50b3VjaGVkLgorICAgICAgICB1c2luZyBGdW5jID0gaW50ICgqKShjb25zdCBURmllbGQg
Jik7CisgICAgICAgIHN0YXRpYyBpbnQgRG9udFNhdHVyYXRlKGNvbnN0IFRGaWVsZCAmKSB7IHJl
dHVybiAwOyB9CisgICAgICAgIHN0YXRpYyBpbnQgRnVsbHlTYXR1cmF0ZShjb25zdCBURmllbGQg
JikgeyByZXR1cm4gNDsgfQorICAgIH07CisKKyAgcHVibGljOgorICAgIE1vZGlmeVN0cnVjdENv
bmZpZyhDb252ZXJ0VHlwZSBjb252ZXJ0VHlwZSwgYm9vbCBhbGxvd1BhY2tpbmcsIGJvb2wgYWxs
b3dQYWRkaW5nKQorICAgICAgICA6IGNvbnZlcnRUeXBlKGNvbnZlcnRUeXBlKSwgYWxsb3dQYWNr
aW5nKGFsbG93UGFja2luZyksIGFsbG93UGFkZGluZyhhbGxvd1BhZGRpbmcpCisgICAge30KKwor
ICAgIC8vIE1hdHJpeCBmaWVsZCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIGZpZWxkcyBvZiByb3cg
dmVjdG9ycy4KKyAgICBQcmVkaWNhdGU6OkZ1bmMgc3BsaXRNYXRyaXhDb2x1bW5zID0gUHJlZGlj
YXRlOjpGYWxzZTsKKworICAgIC8vIEFycmF5IGZpZWxkcyBhcmUgc3BsaXQgaW50byBtdWx0aXBs
ZSBmaWVsZHMgb2YgZWxlbWVudCB0eXBlLgorICAgIFByZWRpY2F0ZTo6RnVuYyBpbmxpbmVBcnJh
eSA9IFByZWRpY2F0ZTo6RmFsc2U7CisKKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGhhdmUgdGhlaXIg
c3ViZmllbGRzIGlubGluZWQgZGlyZWN0bHkuCisgICAgUHJlZGljYXRlOjpGdW5jIGlubGluZVN0
cnVjdCA9IFByZWRpY2F0ZTo6RmFsc2U7CisKKyAgICAvLyBTdHJ1Y3QgZmllbGRzIGFyZSBtb2Rp
ZmllZC4KKyAgICBQcmVkaWNhdGU6OkZ1bmMgcmVjdXJzZVN0cnVjdCA9IFByZWRpY2F0ZTo6RmFs
c2U7CisKKyAgICAvLyBWZWN0b3IgYW5kIHNjYWxhciBib29sIGZpZWxkcyBhcmUgcHJvbW90ZWQg
dG8gdWludCBmaWVsZHMuCisgICAgUHJlZGljYXRlOjpGdW5jIHByb21vdGVCb29sVG9VaW50ID0g
UHJlZGljYXRlOjpGYWxzZTsKKworICAgIC8vIENyZWF0ZXMgYSBuZXcgc3RydWN0dXJlIHdoZXJl
IHNjYWxhciBvciB2ZWN0b3IgZmllbGRzIGFyZSBzYXR1cmF0ZWQgdmVjdG9ycy4KKyAgICAvLyBl
LmcuIGBmbG9hdCAtPiBmbG9hdDRgLgorICAgIC8vIGUuZy4gYGZsb2F0MiAtPiBmbG9hdDRgLgor
ICAgIFNhdHVyYXRlVmVjdG9yOjpGdW5jIHNhdHVyYXRlU2NhbGFyT3JWZWN0b3IgPSBTYXR1cmF0
ZVZlY3Rvcjo6RG9udFNhdHVyYXRlOworCisgICAgLy8gQ3JlYXRlcyBhIG5ldyBzdHJ1Y3R1cmUg
d2hlcmUgc2NhbGFyIG9yIHZlY3RvciBhcnJheSBmaWVsZHMgYXJlIHNhdHVyYXRlZC4KKyAgICAv
LyBlLmcuIGBmbG9hdFsxMF0gLT4gZmxvYXQ0WzEwXWAKKyAgICAvLyBlLmcuIGBmbG9hdDJbMTBd
IC0+IGZsb2F0NFsxMF1gCisgICAgU2F0dXJhdGVWZWN0b3I6OkZ1bmMgc2F0dXJhdGVTY2FsYXJP
clZlY3RvckFycmF5cyA9IFNhdHVyYXRlVmVjdG9yOjpEb250U2F0dXJhdGU7CisKKyAgICAvLyBD
cmVhdGVzIGEgbmV3IHN0cnVjdHVyZSB3aGVyZSBtYXRyaXggZmllbGRzIGFyZSByb3ctc2F0dXJh
dGVkLgorICAgIC8vIGUuZy4gYGZsb2F0MngyIC0+IGZsb2F0Mng0YC4KKyAgICBTYXR1cmF0ZVZl
Y3Rvcjo6RnVuYyBzYXR1cmF0ZU1hdHJpeFJvd3MgPSBTYXR1cmF0ZVZlY3Rvcjo6RG9udFNhdHVy
YXRlOworCisgICAgVExheW91dEJsb2NrU3RvcmFnZSBpbml0aWFsQmxvY2tTdG9yYWdlICAgPSBr
RGVmYXVsdExheW91dEJsb2NrU3RvcmFnZTsKKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBpbml0
aWFsTWF0cml4UGFja2luZyA9IGtEZWZhdWx0TGF5b3V0TWF0cml4UGFja2luZzsKKyAgICBDb252
ZXJ0VHlwZSBjb252ZXJ0VHlwZTsKKyAgICBib29sIGFsbG93UGFja2luZzsKKyAgICBib29sIGFs
bG93UGFkZGluZzsKKyAgICBBZGRyZXNzU3BhY2UgZXh0ZXJuYWxBZGRyZXNzU3BhY2U7Cit9Owor
CitzdHJ1Y3QgTW9kaWZpZWRTdHJ1Y3RNYWNoaW5lcnkKK3sKKyAgICBjb25zdCBUU3RydWN0dXJl
ICptb2RpZmllZFN0cnVjdCAgICAgICAgICAgICAgICAgID0gbnVsbHB0cjsKKyAgICBUSW50ZXJt
RnVuY3Rpb25EZWZpbml0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKyAg
ICBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICpmdW5jTW9kaWZpZWRUb09yaWdpbmFsID0gbnVs
bHB0cjsKKworICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKiZnZXRDb252ZXJ0ZXIoQ29u
dmVydFR5cGUgY29udmVydFR5cGUpCisgICAgeworICAgICAgICBpZiAoY29udmVydFR5cGUgPT0g
Q29udmVydFR5cGU6Ok9yaWdpbmFsVG9Nb2RpZmllZCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZnVuY01vZGlmaWVkVG9PcmlnaW5hbDsKKyAg
ICAgICAgfQorICAgIH0KK307CisKKy8vIEluZGV4ZWQgYnkgdG9wb2xvZ2ljYWwgb3JkZXIuCitj
bGFzcyBNb2RpZmllZFN0cnVjdE1hY2hpbmVyaWVzCit7CisgIHB1YmxpYzoKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0OworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZhdChzaXpl
X3QgaW5kZXgpIGNvbnN0OworICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICpmaW5k
KGNvbnN0IFRTdHJ1Y3R1cmUgJnMpIGNvbnN0OworICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFRTdHJ1
Y3R1cmUgJnMsIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkpOworCisg
IHByaXZhdGU6CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRTdHJ1Y3R1cmUgKiwgTW9k
aWZpZWRTdHJ1Y3RNYWNoaW5lcnk+IG9yaWdpbmFsVG9NYWNoaW5lcnk7CisgICAgc3RkOjp2ZWN0
b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBvcmRlcmluZzsKK307CisKKy8vIFJldHVybnMgdHJ1ZSBh
bmQgYG91dE1hY2hpbmVyeWAgcG9wdWxhdGVkIGlmIG1vZGlmaWNhdGlvbnMgd2VyZSBwZXJmb3Jt
ZWQuCisvLyBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS4KK2Jvb2wgVHJ5Q3JlYXRlTW9kaWZpZWRT
dHJ1Y3QoU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW9kaWZ5
U3RydWN0Q29uZmlnICZjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgJm9yaWdpbmFsU3RydWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBOYW1lICZtb2RpZmllZFN0cnVjdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1vZGlmaWVkU3RydWN0TWFjaGluZXJpZXMgJm91dE1hY2hpbmVyaWVzKTsKKworfSAg
Ly8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfTU9ESUZZU1RSVUNUX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
TmFtZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdjNWQxODVlNmZh
ZDM3NTY5ZWZjYmQ4NTVmMmFlNDAxZTY0M2M4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9OYW1lLmNwcApAQCAtMCwwICsxLDIyMCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybVRyYXZlcnNlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgSW1tdXRh
YmxlU3RyaW5nIEdldE5hbWUoVCBjb25zdCAmb2JqZWN0KQoreworICAgIGlmIChvYmplY3Quc3lt
Ym9sVHlwZSgpID09IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGtF
bXB0eUltbXV0YWJsZVN0cmluZzsKKyAgICB9CisgICAgcmV0dXJuIG9iamVjdC5uYW1lKCk7Cit9
CisKK05hbWU6Ok5hbWUoY29uc3QgVEZpZWxkICZmaWVsZCkgOiBOYW1lKEdldE5hbWUoZmllbGQp
LCBmaWVsZC5zeW1ib2xUeXBlKCkpIHt9CisKK05hbWU6Ok5hbWUoY29uc3QgVFN5bWJvbCAmc3lt
Ym9sKSA6IE5hbWUoR2V0TmFtZShzeW1ib2wpLCBzeW1ib2wuc3ltYm9sVHlwZSgpKSB7fQorCiti
b29sIE5hbWU6Om9wZXJhdG9yPT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1SYXdOYW1lID09IG90aGVyLm1SYXdOYW1lICYmIG1TeW1ib2xUeXBlID09IG90aGVyLm1T
eW1ib2xUeXBlOworfQorCitib29sIE5hbWU6Om9wZXJhdG9yIT0oY29uc3QgTmFtZSAmb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCitib29sIE5hbWU6
Om9wZXJhdG9yPChjb25zdCBOYW1lICZvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobVJhd05hbWUg
PCBvdGhlci5tUmF3TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBpZiAob3RoZXIubVJhd05hbWUgPCBtUmF3TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIG1TeW1ib2xUeXBlIDwgb3RoZXIubVN5bWJvbFR5cGU7
Cit9CisKK2Jvb2wgTmFtZTo6ZW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiBtU3ltYm9sVHlw
ZSA9PSBTeW1ib2xUeXBlOjpFbXB0eTsKK30KKworYm9vbCBOYW1lOjpiZWdpbnNXaXRoKGNvbnN0
IE5hbWUgJnByZWZpeCkgY29uc3QKK3sKKyAgICBpZiAobVN5bWJvbFR5cGUgIT0gcHJlZml4Lm1T
eW1ib2xUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gbVJhd05hbWUuYmVnaW5zV2l0aChwcmVmaXgubVJhd05hbWUpOworfQorCit2b2lkIE5hbWU6
OmVtaXQoVEluZm9TaW5rQmFzZSAmb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobVN5bWJvbFR5
cGUpCisgICAgeworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkJ1aWx0SW46CisgICAgICAgIGNh
c2UgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQ6CisgICAgICAgICAgICBBU1NFUlQoIW1SYXdOYW1l
LmVtcHR5KCkpOworICAgICAgICAgICAgb3V0IDw8IG1SYXdOYW1lOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsOgorICAgICAgICAg
ICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKKyAgICAgICAgICAgIGlmIChtUmF3TmFtZS5i
ZWdpbnNXaXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChtUmF3TmFtZVswXSAhPSAnXycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8IGtBbmdsZUludGVybmFsUHJlZml4IDw8ICdfJyA8PCBtUmF3TmFtZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwga0FuZ2xlSW50ZXJuYWxQcmVmaXggPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkVtcHR5OgorICAg
ICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKKy8vIE5PVEU6IFRoaXMg
bWF0Y2hlcyBtb3JlIHRoaW5ncyB0aGFuIEZpbmRTeW1ib2xOb2RlLgorY2xhc3MgRXhwcmVzc2lv
bkNvbnRhaW5zTmFtZVZpc2l0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICAgIE5h
bWUgbU5hbWU7CisgICAgYm9vbCBtRm91bmROYW1lID0gZmFsc2U7CisKKyAgcHVibGljOgorICAg
IEV4cHJlc3Npb25Db250YWluc05hbWVWaXNpdG9yKGNvbnN0IE5hbWUgJm5hbWUpCisgICAgICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpLCBtTmFtZShuYW1lKQorICAg
IHt9CisKKyAgICBib29sIGZvdW5kTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZE5hbWU7IH0K
KworICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmIChOYW1lKG5vZGUtPnZhcmlhYmxlKCkpID09IG1OYW1lKQorICAgICAg
ICB7CisgICAgICAgICAgICBtRm91bmROYW1lID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgdmlzaXRTd2l6emxlKFZpc2l0LCBUSW50ZXJtU3dpenpsZSAqKSBvdmVycmlkZSB7
IHJldHVybiAhbUZvdW5kTmFtZTsgfQorCisgICAgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCB2aXNp
dCwgVEludGVybUJpbmFyeSAqbm9kZSkgb3ZlcnJpZGUgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0K
KworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBv
dmVycmlkZSAgeyByZXR1cm4gIW1Gb3VuZE5hbWU7IH0KKworICAgIGJvb2wgdmlzaXRUZXJuYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtVGVybmFyeSAqbm9kZSkgb3ZlcnJpZGUgeyByZXR1cm4gIW1G
b3VuZE5hbWU7IH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobm9kZS0+aXND
b25zdHJ1Y3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSAg
ICAgICAgICAgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJl
ICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgICAgICAgICAgaWYgKHN0cnVjdHVy
ZSAmJiBOYW1lKCpzdHJ1Y3R1cmUpID09IG1OYW1lKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1Gb3VuZE5hbWUgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0g
bm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChmdW5jICYmIE5hbWUoKmZ1bmMp
ID09IG1OYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Gb3VuZE5hbWUgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAhbUZvdW5kTmFt
ZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0SWZFbHNlKFZpc2l0IHZpc2l0LCBUSW50ZXJtSWZF
bHNlICpub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRTd2l0Y2goVmlzaXQsIFRJ
bnRlcm1Td2l0Y2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgYm9vbCB2aXNpdENhc2UoVmlzaXQsIFRJ
bnRlcm1DYXNlICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdEZ1bmN0aW9uUHJvdG90
eXBlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqKSBvdmVycmlkZSB7IExPR0lDX0VSUk9SKCk7
IH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRlZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5j
dGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9SKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QmxvY2soVmlz
aXQsIFRJbnRlcm1CbG9jayAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HSUNfRVJST1Io
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRHbG9iYWxR
dWFsaWZpZXJEZWNsYXJhdGlvbihWaXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBU
SW50ZXJtRGVjbGFyYXRpb24gKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9S
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0TG9vcChW
aXNpdCwgVEludGVybUxvb3AgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR0lDX0VSUk9S
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHZpc2l0QnJhbmNo
KFZpc2l0LCBUSW50ZXJtQnJhbmNoICopIG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dJQ19F
UlJPUigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdFBy
ZXByb2Nlc3NvckRpcmVjdGl2ZShUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICopIG92ZXJy
aWRlIHsgTE9HSUNfRVJST1IoKTsgfQorfTsKKworfSAgLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
Citib29sIHNoOjpFeHByZXNzaW9uQ29udGFpbnNOYW1lKGNvbnN0IE5hbWUgJm5hbWUsIFRJbnRl
cm1UeXBlZCAmbm9kZSkKK3sKKyAgICBFeHByZXNzaW9uQ29udGFpbnNOYW1lVmlzaXRvciB2aXNp
dG9yKG5hbWUpOworICAgIG5vZGUudHJhdmVyc2UoJnZpc2l0b3IpOworICAgIHJldHVybiB2aXNp
dG9yLmZvdW5kTmFtZSgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9OYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDZlYWVhOGI0N2JhZjk0MjFlZDU0MDczMDEx
ZjljYjViNTA4NTA2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgKQEAg
LTAsMCArMSw2OCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RS
QU5TTEFUT1JNRVRBTERJUkVDVF9OQU1FX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY29uc3RleHByIGNo
YXIga0FuZ2xlSW50ZXJuYWxQcmVmaXhbXSA9ICJBTkdMRSI7CisKKy8vIFJlcHJlc2VudHMgdGhl
IG5hbWUgb2YgYSBzeW1ib2wuCitjbGFzcyBOYW1lCit7CisgIHB1YmxpYzoKKyAgICBjb25zdGV4
cHIgTmFtZShjb25zdCBOYW1lICYpID0gZGVmYXVsdDsKKworICAgIGNvbnN0ZXhwciBOYW1lKCkg
OiBOYW1lKGtFbXB0eUltbXV0YWJsZVN0cmluZywgU3ltYm9sVHlwZTo6RW1wdHkpIHt9CisKKyAg
ICBleHBsaWNpdCBjb25zdGV4cHIgTmFtZShJbW11dGFibGVTdHJpbmcgcmF3TmFtZSwgU3ltYm9s
VHlwZSBzeW1ib2xUeXBlKQorICAgICAgICA6IG1SYXdOYW1lKHJhd05hbWUpLCBtU3ltYm9sVHlw
ZShzeW1ib2xUeXBlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhd05hbWUuZW1wdHkoKSA9PSAo
c3ltYm9sVHlwZSA9PSBTeW1ib2xUeXBlOjpFbXB0eSkpOworICAgIH0KKworICAgIGV4cGxpY2l0
IGNvbnN0ZXhwciBOYW1lKGNvbnN0IGNoYXIgKnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlw
ZSA9IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpCisgICAgICAgIDogTmFtZShJbW11dGFibGVT
dHJpbmcocmF3TmFtZSksIHN5bWJvbFR5cGUpCisgICAge30KKworICAgIGV4cGxpY2l0IE5hbWUo
Y29uc3Qgc3RkOjpzdHJpbmcgJnJhd05hbWUsIFN5bWJvbFR5cGUgc3ltYm9sVHlwZSkKKyAgICAg
ICAgOiBOYW1lKEltbXV0YWJsZVN0cmluZyhyYXdOYW1lKSwgc3ltYm9sVHlwZSkKKyAgICB7fQor
CisgICAgZXhwbGljaXQgTmFtZShjb25zdCBURmllbGQgJmZpZWxkKTsKKyAgICBleHBsaWNpdCBO
YW1lKGNvbnN0IFRTeW1ib2wgJnN5bWJvbCk7CisKKyAgICBOYW1lICZvcGVyYXRvcj0oY29uc3Qg
TmFtZSAmKSA9IGRlZmF1bHQ7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5hbWUgJm90aGVy
KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTmFtZSAmb3RoZXIpIGNvbnN0Owor
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE5hbWUgJm90aGVyKSBjb25zdDsKKworICAgIGNvbnN0
ZXhwciBjb25zdCBJbW11dGFibGVTdHJpbmcgJnJhd05hbWUoKSBjb25zdCB7IHJldHVybiBtUmF3
TmFtZTsgfQorICAgIGNvbnN0ZXhwciBTeW1ib2xUeXBlIHN5bWJvbFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtU3ltYm9sVHlwZTsgfQorCisgICAgYm9vbCBlbXB0eSgpIGNvbnN0OworICAgIGJvb2wg
YmVnaW5zV2l0aChjb25zdCBOYW1lICZwcmVmaXgpIGNvbnN0OworCisgICAgdm9pZCBlbWl0KFRJ
bmZvU2lua0Jhc2UgJm91dCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBJbW11dGFibGVTdHJp
bmcgbVJhd05hbWU7CisgICAgU3ltYm9sVHlwZSBtU3ltYm9sVHlwZTsKK307CisKK0FOR0xFX05P
X0RJU0NBUkQgYm9vbCBFeHByZXNzaW9uQ29udGFpbnNOYW1lKGNvbnN0IE5hbWUgJm5hbWUsIFRJ
bnRlcm1UeXBlZCAmbm9kZSk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX05BTUVfSF8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjU0YzM3OGExYzk1MDU5ZmQyYjY5NjhlYTYwNDQ3OGJiOWY0OGM4N2YKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEsNDc2
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUGlwZWxpbmUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV91dGlsL0J1aWx0SW4uaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFZBUklBTlRfTkFNRSh2YXJpYW50LCBiYXNlKSAo
dmFyaWFudCA9PSBWYXJpYW50OjpNb2RpZmllZCA/IGJhc2UgIk1vZCIgOiBiYXNlKQorCitib29s
IFBpcGVsaW5lOjp1c2VzKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSBjb25zdAoreworICAgIGlmICh2
YXIuc3ltYm9sVHlwZSgpID09IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChnbG9iYWxJbnN0YW5jZVZhcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiAmdmFyID09IGdsb2JhbEluc3RhbmNlVmFyOworICAgIH0KKworICAgIGNv
bnN0IFRUeXBlICZub2RlVHlwZSAgICAgID0gdmFyLmdldFR5cGUoKTsKKyAgICBjb25zdCBUUXVh
bGlmaWVyIHF1YWxpZmllciA9IG5vZGVUeXBlLmdldFF1YWxpZmllcigpOworCisgICAgc3dpdGNo
ICh0eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAg
IHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxQXR0cmlidXRlOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxVmVydGV4SW46CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAg
IHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxVmVydGV4T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxUG9zaXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGbGF0
T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRTaXplOgorICAg
ICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxU21vb3RoT3V0OgorICAgICAgICAgICAg
ICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2VudHJvaWRPdXQ6CisgICAgICAgICAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFOb1BlcnNwZWN0aXZlT3V0OgorICAgICAgICAgICAgICAgIGNhc2Ug
VFF1YWxpZmllcjo6RXZxVmFyeWluZ091dDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRJbjoK
KyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ21lbnRJbjoKKyAgICAgICAgICAgICAgICBj
YXNlIFRRdWFsaWZpZXI6OkV2cUZsYXRJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZp
ZXI6OkV2cVNtb290aEluOgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxQ2Vu
dHJvaWRJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU5vUGVyc3BlY3Rp
dmVJbjoKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cVZhcnlpbmdJbjoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmll
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZy
YWdtZW50T3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0NvbG9y
OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0RhdGE6CisgICAgICAg
ICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFGcmFnRGVwdGg6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6
OlVzZXJVbmlmb3JtczoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxVW5pZm9ybToKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAg
IGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgc3dpdGNoIChxdWFs
aWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpF
dnFHbG9iYWw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAg
ICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFWZXJ0ZXhJRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgVHlwZTo6SW52b2Nh
dGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxRnJhZ0Nvb3Jk
OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmllcjo6RXZxUG9pbnRDb29yZDoKKyAgICAg
ICAgICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cUZyb250RmFjaW5nOgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBU
eXBlOjpBbmdsZVVuaWZvcm1zOgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsgIC8vIGdsb2Jh
bEluc3RhbmNlVmFyIHNob3VsZCBiZSBub24tbnVsbCBhbmQgdGh1cyBuZXZlciByZWFjaCBoZXJl
LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVy
ZToKKyAgICAgICAgICAgIHJldHVybiBJc1NhbXBsZXIobm9kZVR5cGUuZ2V0QmFzaWNUeXBlKCkp
OworCisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAgICAgIHJldHVybiBO
YW1lKHZhcikgPT0gTmFtZSgqQnVpbHRJblZhcmlhYmxlOjpnbF9JbnN0YW5jZUlEKCkpOworICAg
IH0KK30KKworTmFtZSBQaXBlbGluZTo6Z2V0U3RydWN0VHlwZU5hbWUoVmFyaWFudCB2YXJpYW50
KSBjb25zdAoreworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJ
QU5UX05BTUUodmFyaWFudCwgIlZlcnRleEluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1F
KHZhcmlhbnQsICJWZXJ0ZXhPdXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJGcmFnbWVudEluIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
OjpGcmFnbWVudE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
IkZyYWdtZW50T3V0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpV
c2VyVW5pZm9ybXM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJV
c2VyVW5pZm9ybXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkFu
Z2xlVW5pZm9ybXM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJB
bmdsZVVuaWZvcm1zIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpO
b25Db25zdGFudEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlh
bnQsICJOb25Db25zdEdsb2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICAgICAgbmFtZSA9IFZBUklB
TlRfTkFNRSh2YXJpYW50LCAiSW52b2NhdGlvblZlcnRleEdsb2JhbHMiKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6Cisg
ICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJJbnZvY2F0aW9uRnJhZ21l
bnRHbG9iYWxzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlOjpUZXh0
dXJlOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiVGV4dHVyZUVu
dnMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Okluc3RhbmNlSWQ6
CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJJbnN0YW5jZUlkIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIE5hbWUobmFtZSk7Cit9CisK
K05hbWUgUGlwZWxpbmU6OmdldFN0cnVjdEluc3RhbmNlTmFtZShWYXJpYW50IHZhcmlhbnQpIGNv
bnN0Cit7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRf
TkFNRSh2YXJpYW50LCAidmVydGV4SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFy
aWFudCwgInZlcnRleE91dCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlw
ZTo6RnJhZ21lbnRJbjoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
ImZyYWdtZW50SW4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OkZy
YWdtZW50T3V0OgorICAgICAgICAgICAgbmFtZSA9IFZBUklBTlRfTkFNRSh2YXJpYW50LCAiZnJh
Z21lbnRPdXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlVzZXJV
bmlmb3JtczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgInVzZXJV
bmlmb3JtcyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6QW5nbGVV
bmlmb3JtczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImFuZ2xl
VW5pZm9ybXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6Ok5vbkNv
bnN0YW50R2xvYmFsczoKKyAgICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwg
Im5vbkNvbnN0R2xvYmFscyIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlw
ZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9O
QU1FKHZhcmlhbnQsICJpbnZvY2F0aW9uVmVydGV4R2xvYmFscyIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAg
ICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImludm9jYXRpb25GcmFnbWVudEds
b2JhbHMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGU6OlRleHR1cmU6
CisgICAgICAgICAgICBuYW1lID0gVkFSSUFOVF9OQU1FKHZhcmlhbnQsICJ0ZXh0dXJlRW52cyIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAg
ICAgICAgICAgIG5hbWUgPSBWQVJJQU5UX05BTUUodmFyaWFudCwgImluc3RhbmNlSWQiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gTmFtZShuYW1lKTsKK30KKworc3Rh
dGljIGJvb2wgQWxsb3dQYWNraW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCit7CisgICAgdXNpbmcg
VHlwZSA9IFBpcGVsaW5lOjpUeXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
ICAgY2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5cGU6OlZlcnRleE91
dDoKKyAgICAgICAgY2FzZSBUeXBlOjpGcmFnbWVudEluOgorICAgICAgICBjYXNlIFR5cGU6OkZy
YWdtZW50T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgIGNh
c2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRp
b25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEds
b2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJ
bnN0YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGlj
IGJvb2wgQWxsb3dQYWRkaW5nKFBpcGVsaW5lOjpUeXBlIHR5cGUpCit7CisgICAgdXNpbmcgVHlw
ZSA9IFBpcGVsaW5lOjpUeXBlOworCisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgICAg
Y2FzZSBUeXBlOjpVc2VyVW5pZm9ybXM6CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46Cisg
ICAgICAgIGNhc2UgVHlwZTo6VmVydGV4T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50
SW46CisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6
QW5nbGVVbmlmb3JtczoKKyAgICAgICAgY2FzZSBUeXBlOjpOb25Db25zdGFudEdsb2JhbHM6Cisg
ICAgICAgIGNhc2UgVHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHM6CisgICAgICAgIGNhc2Ug
VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFsczoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0
YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KK2VudW0gQ29tcGFy
ZQoreworICAgIExULAorICAgIExURSwKKyAgICBFUSwKKyAgICBHVEUsCisgICAgR1QsCit9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBib29sIENvbXBhcmVCeShDb21wYXJlIG9w
LCBjb25zdCBUICZ4LCBjb25zdCBUICZ5KQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAg
ICAgICBjYXNlIExUOgorICAgICAgICAgICAgcmV0dXJuIHggPCB5OworICAgICAgICBjYXNlIExU
RToKKyAgICAgICAgICAgIHJldHVybiB4IDw9IHk7CisgICAgICAgIGNhc2UgRVE6CisgICAgICAg
ICAgICByZXR1cm4geCA9PSB5OworICAgICAgICBjYXNlIEdURToKKyAgICAgICAgICAgIHJldHVy
biB4ID49IHk7CisgICAgICAgIGNhc2UgR1Q6CisgICAgICAgICAgICByZXR1cm4geCA+IHk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8VEJhc2ljVHlwZSBCVCwgQ29tcGFyZSBDbXAsIGludCBNYXRj
aERpbSwgaW50IE5ld0RpbT4KK3N0YXRpYyBpbnQgU2F0dXJhdGVWZWN0b3JPZihjb25zdCBURmll
bGQgJmZpZWxkKQoreworICAgIHN0YXRpY19hc3NlcnQoTmV3RGltID49IE1hdGNoRGltLCAiIik7
CisKKyAgICBjb25zdCBUVHlwZSAmdHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgQVNTRVJUKHR5
cGUuaXNTY2FsYXIoKSB8fCB0eXBlLmlzVmVjdG9yKCkpOworCisgICAgY29uc3QgYm9vbCBjb25k
ID0gdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBCVCAmJiAhdHlwZS5pc0FycmF5KCkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICBDb21wYXJlQnkoQ21wLCB0eXBlLmdldE5vbWluYWxTaXplKCksIE1h
dGNoRGltKTsKKworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5ld0RpbTsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK01vZGlmeVN0cnVjdENvbmZpZyBQaXBlbGluZTo6
ZXh0ZXJuYWxTdHJ1Y3RNb2RpZnlDb25maWcoKSBjb25zdAoreworICAgIHVzaW5nIFByZWQgICA9
IE1vZGlmeVN0cnVjdENvbmZpZzo6UHJlZGljYXRlOworICAgIHVzaW5nIFNhdFZlYyA9IE1vZGlm
eVN0cnVjdENvbmZpZzo6U2F0dXJhdGVWZWN0b3I7CisKKyAgICBNb2RpZnlTdHJ1Y3RDb25maWcg
Y29uZmlnKAorICAgICAgICBpc1BpcGVsaW5lT3V0KCkgPyBDb252ZXJ0VHlwZTo6T3JpZ2luYWxU
b01vZGlmaWVkIDogQ29udmVydFR5cGU6Ok1vZGlmaWVkVG9PcmlnaW5hbCwKKyAgICAgICAgQWxs
b3dQYWNraW5nKHR5cGUpLCBBbGxvd1BhZGRpbmcodHlwZSkpOworCisgICAgY29uZmlnLmV4dGVy
bmFsQWRkcmVzc1NwYWNlID0gZXh0ZXJuYWxBZGRyZXNzU3BhY2UoKTsKKworICAgIHN3aXRjaCAo
dHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgVHlwZTo6VmVydGV4SW46CisgICAgICAgICAgICBj
b25maWcuaW5saW5lQXJyYXkgICAgICAgID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAgICAgIGNvbmZp
Zy5zcGxpdE1hdHJpeENvbHVtbnMgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmlnLmlu
bGluZVN0cnVjdCAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJh
eSAgICAgICAgPSBQcmVkOjpUcnVlOworICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0cml4Q29s
dW1ucyA9IFByZWQ6OlRydWU7CisgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAg
ID0gUHJlZDo6VHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6
RnJhZ21lbnRJbjoKKyAgICAgICAgICAgIGNvbmZpZy5pbmxpbmVBcnJheSAgICAgICAgPSBQcmVk
OjpUcnVlOworICAgICAgICAgICAgY29uZmlnLnNwbGl0TWF0cml4Q29sdW1ucyA9IFByZWQ6OlRy
dWU7CisgICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgID0gUHJlZDo6VHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVHlwZTo6RnJhZ21lbnRPdXQ6Cisg
ICAgICAgICAgICBjb25maWcuaW5saW5lQXJyYXkgICAgICAgICAgICA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuc3BsaXRNYXRyaXhDb2x1bW5zICAgICA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuaW5saW5lU3RydWN0ICAgICAgICAgICA9IFByZWQ6OlRydWU7Cisg
ICAgICAgICAgICBjb25maWcuc2F0dXJhdGVTY2FsYXJPclZlY3RvciA9IFtdKGNvbnN0IFRGaWVs
ZCAmZmllbGQpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50IHMgPSBTYXR1cmF0ZVZlY3Rvck9m
PFRCYXNpY1R5cGU6OkVidEludCwgTFQsIDQsIDQ+KGZpZWxkKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoaW50IHMgPSBTYXR1cmF0ZVZlY3Rvck9mPFRCYXNpY1R5cGU6OkVidFVJ
bnQsIExULCA0LCA0PihmaWVsZCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlu
dCBzID0gU2F0dXJhdGVWZWN0b3JPZjxUQmFzaWNUeXBlOjpFYnRGbG9hdCwgTFQsIDQsIDQ+KGZp
ZWxkKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3Jt
czoKKyAgICAgICAgICAgIGNvbmZpZy5wcm9tb3RlQm9vbFRvVWludCAgICAgICAgICAgID0gUHJl
ZDo6VHJ1ZTsKKyAgICAgICAgICAgIGNvbmZpZy5zYXR1cmF0ZU1hdHJpeFJvd3MgICAgICAgICAg
ID0gU2F0VmVjOjpGdWxseVNhdHVyYXRlOworICAgICAgICAgICAgY29uZmlnLnNhdHVyYXRlU2Nh
bGFyT3JWZWN0b3JBcnJheXMgPSBTYXRWZWM6OkZ1bGx5U2F0dXJhdGU7CisgICAgICAgICAgICBj
b25maWcucmVjdXJzZVN0cnVjdCAgICAgICAgICAgICAgICA9IFByZWQ6OlRydWU7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAg
ICAgICBjb25maWcuaW5pdGlhbEJsb2NrU3RvcmFnZSA9IFRMYXlvdXRCbG9ja1N0b3JhZ2U6OkVi
c1N0ZDQzMDsgIC8vIFhYWDogQ29ycmVjdD8KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBUeXBlOjpJbnZvY2F0aW9uVmVydGV4R2xvYmFsczoKKyAgICAgICAgY2FzZSBU
eXBlOjpJbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6OlRleHR1
cmU6CisgICAgICAgIGNhc2UgVHlwZTo6SW5zdGFuY2VJZDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBjb25maWc7Cit9CisKK2Jvb2wgUGlwZWxpbmU6OmFsd2F5c1Jl
cXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWluKCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBj
YXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVuaWZvcm1zOgor
ICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgY2FzZSBUeXBlOjpWZXJ0ZXhPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6
RnJhZ21lbnRPdXQ6CisgICAgICAgIGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAg
ICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5
cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVy
ZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfQorCitib29sIFBpcGVsaW5lOjppc1BpcGVsaW5lT3V0KCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFR5cGU6OlZlcnRleEluOgor
ICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46CisgICAgICAgIGNhc2UgVHlwZTo6VXNlclVu
aWZvcm1zOgorICAgICAgICBjYXNlIFR5cGU6OkFuZ2xlVW5pZm9ybXM6CisgICAgICAgIGNhc2Ug
VHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25W
ZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2Jh
bHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2FzZSBUeXBlOjpJbnN0
YW5jZUlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNhc2UgVHlwZTo6
VmVydGV4T3V0OgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfQorCitBZGRyZXNzU3BhY2UgUGlwZWxpbmU6OmV4dGVybmFs
QWRkcmVzc1NwYWNlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
ICBjYXNlIFR5cGU6OlZlcnRleEluOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50SW46Cisg
ICAgICAgIGNhc2UgVHlwZTo6Tm9uQ29uc3RhbnRHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6
Okludm9jYXRpb25WZXJ0ZXhHbG9iYWxzOgorICAgICAgICBjYXNlIFR5cGU6Okludm9jYXRpb25G
cmFnbWVudEdsb2JhbHM6CisgICAgICAgIGNhc2UgVHlwZTo6VGV4dHVyZToKKyAgICAgICAgY2Fz
ZSBUeXBlOjpJbnN0YW5jZUlkOgorICAgICAgICBjYXNlIFR5cGU6OkZyYWdtZW50T3V0OgorICAg
ICAgICBjYXNlIFR5cGU6OlZlcnRleE91dDoKKyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzU3Bh
Y2U6OlRocmVhZDsKKworICAgICAgICBjYXNlIFR5cGU6OlVzZXJVbmlmb3JtczoKKyAgICAgICAg
Y2FzZSBUeXBlOjpBbmdsZVVuaWZvcm1zOgorICAgICAgICAgICAgcmV0dXJuIEFkZHJlc3NTcGFj
ZTo6Q29uc3RhbnQ7CisgICAgfQorfQorCitib29sIFBpcGVsaW5lU3RydWN0czo6bWF0Y2hlcyhj
b25zdCBUU3RydWN0dXJlICZzLCBib29sIGludGVybmFsLCBib29sIGV4dGVybmFsKSBjb25zdAor
eworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBzW10gPSB7CisgICAgICAgIGZyYWdt
ZW50SW4sCisgICAgICAgIGZyYWdtZW50T3V0LAorICAgICAgICB2ZXJ0ZXhJbiwKKyAgICAgICAg
dmVydGV4T3V0LAorICAgICAgICB1c2VyVW5pZm9ybXMsCisgICAgICAgIGFuZ2xlVW5pZm9ybXMs
CisgICAgICAgIG5vbkNvbnN0YW50R2xvYmFscywKKyAgICAgICAgaW52b2NhdGlvblZlcnRleEds
b2JhbHMsCisgICAgICAgIGludm9jYXRpb25GcmFnbWVudEdsb2JhbHMsCisgICAgICAgIHRleHR1
cmUsCisgICAgICAgIGluc3RhbmNlSWQsCisgICAgfTsKKyAgICBmb3IgKGNvbnN0IGF1dG8gJnAg
OiBwcykKKyAgICB7CisgICAgICAgIGlmIChpbnRlcm5hbCAmJiBwLmludGVybmFsID09ICZzKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZXh0ZXJuYWwgJiYgcC5leHRlcm5hbCA9PSAmcykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUGlwZWxpbmUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45YmY0NzZhZGZkNjQ2MGIwZDllZmM2YWIxZDBmMzc5ZDNmMTNiMTc1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgKQEAgLTAsMCArMSwxMjMg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVU
QUxESVJFQ1RfUElQRUxJTkVfSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfUElQRUxJTkVfSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTW9kaWZ5U3RydWN0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIgorCituYW1lc3BhY2Ugc2gKK3sK
KworLy8gRGF0YSB0aGF0IGlzIHNjb3BlZCBhcyBgZXh0ZXJuYWxgIGFuZCBgaW50ZXJuYWxgIGZv
ciBhIGdpdmVuIHBpcGVsaW5lLgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgUGlwZWxp
bmVTY29wZWQKK3sKKyAgICAvLyBEYXRhIHRoYXQgaXMgY29uZmlndXJlZCB0byB0YWxrIGV4dGVy
bmFsbHkgdG8gdGhlIHByb2dyYW0uCisgICAgLy8gTWF5IGNvaW5jaWRlIHdpdGggYGludGVybmFs
YCwgYnV0IG1heSBhbHNvIGRpdmVyZ2UgZnJvbSBgaW50ZXJuYWxgLgorICAgIGNvbnN0IFQgKmV4
dGVybmFsID0gbnVsbHB0cjsKKworICAgIC8vIERhdGEgdGhhdCBpcyBjb25maWd1cmVkIHRvIHRh
bGsgaW50ZXJuYWxseSB3aXRoaW4gdGhlIHByb2dyYW0uCisgICAgLy8gTWF5IGNvaW5jaWRlIHdp
dGggYGV4dGVybmFsYCwgYnV0IG1heSBhbHNvIGRpdmVyZ2UgZnJvbSBgZXh0ZXJuYWxgLgorICAg
IGNvbnN0IFQgKmludGVybmFsID0gbnVsbHB0cjsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZmYg
dGhlIGlucHV0IGNvaW5jaWRlcyB3aXRoIGVpdGhlciBgZXh0ZXJuYWxgIG9yIGBpbnRlcm5hbGAg
ZGF0YS4KKyAgICBib29sIG1hdGNoZXMoY29uc3QgVCAmb2JqZWN0KSBjb25zdCB7IHJldHVybiBl
eHRlcm5hbCA9PSAmb2JqZWN0IHx8IGludGVybmFsID09ICZvYmplY3Q7IH0KKworICAgIC8vIEJv
dGggYGV4dGVybmFsYCBhbmQgYGludGVybmFsYCByZXByZXNlbnRhdGlvbnMgYXJlIG5vbi1udWxs
LgorICAgIGJvb2wgaXNUb3RhbGx5RnVsbCgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsICYmIGlu
dGVybmFsOyB9CisKKyAgICAvLyBCb3RoIGBleHRlcm5hbGAgYW5kIGBpbnRlcm5hbGAgcmVwcmVz
ZW50YXRpb25zIGFyZSBudWxsLgorICAgIGJvb2wgaXNUb3RhbGx5RW1wdHkoKSBjb25zdCB7IHJl
dHVybiAhZXh0ZXJuYWwgJiYgIWludGVybmFsOyB9CisKKyAgICAvLyBCb3RoIGBleHRlcm5hbGAg
YW5kIGBpbnRlcm5hbGAgcmVwcmVzZW50YXRpb25zIGFyZSB0aGUgc2FtZS4KKyAgICBib29sIGlz
VW5pZm9ybSgpIGNvbnN0IHsgcmV0dXJuIGV4dGVybmFsID09IGludGVybmFsOyB9Cit9OworCisv
LyBSZXByZXNlbnRzIGEgaGlnaC1sZXZlbCBwcm9ncmFtIHBpcGVsaW5lLgorY2xhc3MgUGlwZWxp
bmUKK3sKKyAgcHVibGljOgorICAgIGVudW0gY2xhc3MgVHlwZQorICAgIHsKKyAgICAgICAgVmVy
dGV4SW4sCisgICAgICAgIFZlcnRleE91dCwKKyAgICAgICAgRnJhZ21lbnRJbiwKKyAgICAgICAg
RnJhZ21lbnRPdXQsCisgICAgICAgIFVzZXJVbmlmb3JtcywKKyAgICAgICAgQW5nbGVVbmlmb3Jt
cywKKyAgICAgICAgTm9uQ29uc3RhbnRHbG9iYWxzLAorICAgICAgICBJbnZvY2F0aW9uVmVydGV4
R2xvYmFscywKKyAgICAgICAgSW52b2NhdGlvbkZyYWdtZW50R2xvYmFscywKKyAgICAgICAgVGV4
dHVyZSwKKyAgICAgICAgSW5zdGFuY2VJZCwKKyAgICB9OworCisgICAgZW51bSBjbGFzcyBWYXJp
YW50CisgICAgeworICAgICAgICAvLyBGb3IgYWxsIGludGVybmFsIHBpcGVsaW5lIHVzZXMuCisg
ICAgICAgIC8vIEZvciBleHRlcm5hbCBwaXBlbGluZSB1c2VzIGlmIHBpcGVsaW5lIGRvZXMgbm90
IHJlcXVpcmUgc3BsaXR0aW5nIG9yIHNhdHVyYXRpb24uCisgICAgICAgIE9yaWdpbmFsLAorCisg
ICAgICAgIC8vIE9ubHkgZm9yIGV4dGVybmFsIHBpcGVsaW5lIHVzZXMgaWYgdGhlIHBpcGVsaW5l
IHdhcyBzcGxpdCBvciBzYXR1cmF0ZWQuCisgICAgICAgIE1vZGlmaWVkLAorICAgIH07CisKKyAg
cHVibGljOgorICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBwaXBlbGluZS4KKyAgICBUeXBlIHR5cGU7
CisKKyAgICAvLyBOb24tbnVsbCBpZiBhIGdsb2JhbCBpbnN0YW5jZSBvZiB0aGUgcGlwZWxpbmUg
c3RydWN0IGFscmVhZHkgZXhpc3RzLgorICAgIC8vIElmIG5vbi1udWxsIHN0cnVjdCBzcGxpdHRp
bmcgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCisgICAgY29uc3QgVFZhcmlhYmxlICpnbG9iYWxJbnN0
YW5jZVZhcjsKKworICBwdWJsaWM6CisgICAgLy8gUmV0dXJucyB0cnVlIGlmZiB0aGUgdmFyaWFi
bGUgYmVsb25ncyB0byB0aGUgcGlwZWxpbmUuCisgICAgYm9vbCB1c2VzKGNvbnN0IFRWYXJpYWJs
ZSAmdmFyKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdGhlIG5hbWUgZm9yIHRoZSBzdHJ1Y3Qg
dHlwZSB0aGF0IHN0b3JlcyB2YXJpYWJsZXMgb2YgdGhpcyBwaXBlbGluZS4KKyAgICBOYW1lIGdl
dFN0cnVjdFR5cGVOYW1lKFZhcmlhbnQgdmFyaWFudCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5z
IHRoZSBuYW1lIGZvciB0aGUgc3RydWN0IGluc3RhbmNlIHRoYXQgc3RvcmVzIHZhcmlhYmxlcyBv
ZiB0aGlzIHBpcGVsaW5lLgorICAgIE5hbWUgZ2V0U3RydWN0SW5zdGFuY2VOYW1lKFZhcmlhbnQg
dmFyaWFudCkgY29uc3Q7CisKKyAgICBNb2RpZnlTdHJ1Y3RDb25maWcgZXh0ZXJuYWxTdHJ1Y3RN
b2RpZnlDb25maWcoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGlwZWxp
bmUgYWx3YXlzIHJlcXVpcmVzIGEgbm9uLXBhcmFtZXRlciBsb2NhbCBpbnN0YW5jZSBkZWNsYXJh
dGlvbiBvZgorICAgIC8vIHRoZSBwaXBlbGluZSBzdHJ1Y3R1cmVzLgorICAgIGJvb2wgYWx3YXlz
UmVxdWlyZXNMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25Jbk1haW4oKSBjb25zdDsKKworICAgIC8v
IFJldHVybnMgdHJ1ZSBpZmYgdGhlIHBpcGVsaW5lIGlzIGFuIG91dHB1dCBwaXBlbGluZS4gVGhl
IGV4dGVybmFsIHBpcGVsaW5lIHN0cnVjdHVyZSBzaG91bGQKKyAgICAvLyBiZSByZXR1cm5lZCBm
cm9tIGBtYWluYC4KKyAgICBib29sIGlzUGlwZWxpbmVPdXQoKSBjb25zdDsKKworICAgIEFkZHJl
c3NTcGFjZSBleHRlcm5hbEFkZHJlc3NTcGFjZSgpIGNvbnN0OworfTsKKworLy8gQSBjb2xsZWN0
aW9uIG9mIHZhcmlvdXMgcGlwZWxpbmUgc3RydWN0dXJlcy4KK3N0cnVjdCBQaXBlbGluZVN0cnVj
dHMgOiBhbmdsZTo6Tm9uQ29weWFibGUKK3sKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJl
PiBmcmFnbWVudEluOworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGZyYWdtZW50T3V0
OworICAgIFBpcGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHZlcnRleEluOworICAgIFBpcGVsaW5l
U2NvcGVkPFRTdHJ1Y3R1cmU+IHZlcnRleE91dDsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0
dXJlPiB1c2VyVW5pZm9ybXM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gYW5nbGVV
bmlmb3JtczsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBub25Db25zdGFudEdsb2Jh
bHM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gaW52b2NhdGlvblZlcnRleEdsb2Jh
bHM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gaW52b2NhdGlvbkZyYWdtZW50R2xv
YmFsczsKKyAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiB0ZXh0dXJlOworICAgIFBpcGVs
aW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IGluc3RhbmNlSWQ7CisKKyAgICBib29sIG1hdGNoZXMoY29u
c3QgVFN0cnVjdHVyZSAmcywgYm9vbCBpbnRlcm5hbCwgYm9vbCBleHRlcm5hbCkgY29uc3Q7Cit9
OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9S
X1RSQU5TTEFUT1JNRVRBTERJUkVDVF9QSVBFTElORV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGly
ZWN0L1Byb2dyYW1QcmVsdWRlLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGJmNWEwMmZlMGRiMGJlZDNkMmFhM2M5NTVjYzk5OTI3NTNiN2M4MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5jcHAKQEAgLTAsMCAr
MSwzNzU3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8Y2N0eXBlPgorCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0NvbnN0YW50TmFtZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVRyYXZlcnNl
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor
bmFtZXNwYWNlCit7CisKK2NsYXNzIFByb2dyYW1QcmVsdWRlIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKK3sKKyAgICB1c2luZyBMaW5lVGFnICAgICAgID0gdW5zaWduZWQ7CisgICAgdXNpbmcg
RnVuY0VtaXR0ZXIgICA9IHZvaWQgKCopKFByb2dyYW1QcmVsdWRlICYsIGNvbnN0IFRGdW5jdGlv
biAmKTsKKyAgICB1c2luZyBGdW5jVG9FbWl0dGVyID0gc3RkOjptYXA8TmFtZSwgRnVuY0VtaXR0
ZXI+OworCisgIHB1YmxpYzoKKyAgICBQcm9ncmFtUHJlbHVkZShUSW5mb1NpbmtCYXNlICZvdXQs
IGNvbnN0IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpCisgICAgICAgIDogVEludGVybVRyYXZl
cnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpLCBtT3V0KG91dCkKKyAgICB7CisgICAgICAgIEFMV0FZ
U19JTkxJTkUoKTsKKworICAgICAgICBpZiAocHBjLmhhc1N0cnVjdEVxKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcXVhbFZlY3RvcigpOworICAgICAgICAgICAgZXF1YWxNYXRyaXgoKTsKKyAg
ICAgICAgfQorCisjaWYgMQorICAgICAgICBtT3V0IDw8ICIjZGVmaW5lIEFOR0xFX3RlbnNvciBt
ZXRhbDo6YXJyYXlcbiI7CisjZWxzZQorICAgICAgICB0ZW5zb3IoKTsKKyNlbmRpZgorICAgIH0K
KworICBwcml2YXRlOgorICAgIGJvb2wgZW1pdEd1YXJkKExpbmVUYWcgbGluZVRhZykKKyAgICB7
CisgICAgICAgIGlmIChtRW1pdHRlZC5maW5kKGxpbmVUYWcpICE9IG1FbWl0dGVkLmVuZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
bUVtaXR0ZWQuaW5zZXJ0KGxpbmVUYWcpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBzdGF0aWMgRnVuY1RvRW1pdHRlciBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKKworICAgIHZv
aWQgdmlzaXRPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRGdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
KmFyZ1R5cGUwLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTEg
PSBudWxscHRyKTsKKyAgICB2b2lkIHZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29u
c3QgVFR5cGUgJnR5cGUpOworICAgIHZvaWQgdmlzaXRWYXJpYWJsZShjb25zdCBUVmFyaWFibGUg
JnZhcik7CisgICAgdm9pZCB2aXNpdFN0cnVjdHVyZShjb25zdCBUU3RydWN0dXJlICZzKTsKKwor
ICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpIG92ZXJyaWRl
OworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICpub2RlKSBvdmVycmlk
ZTsKKyAgICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpub2Rl
KSBvdmVycmlkZTsKKyAgICBib29sIHZpc2l0RGVjbGFyYXRpb24oVmlzaXQsIFRJbnRlcm1EZWNs
YXJhdGlvbiAqbm9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sICpub2RlKSBvdmVycmlkZTsKKworICBwcml2YXRlOgorICAgIHZvaWQgQUxXQVlTX0lOTElO
RSgpOworCisgICAgdm9pZCBpbmNsdWRlX21ldGFsX2F0b21pYygpOworICAgIHZvaWQgaW5jbHVk
ZV9tZXRhbF9jb21tb24oKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCk7Cisg
ICAgdm9pZCBpbmNsdWRlX21ldGFsX2dyYXBoaWNzKCk7CisgICAgdm9pZCBpbmNsdWRlX21ldGFs
X21hdGgoKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfbWF0cml4KCk7CisgICAgdm9pZCBpbmNs
dWRlX21ldGFsX3BhY2soKTsKKyAgICB2b2lkIGluY2x1ZGVfbWV0YWxfcmVsYXRpb25hbCgpOwor
CisgICAgdm9pZCBlbmFibGVfaWYoKTsKKyAgICB2b2lkIHNjYWxhcl9vZigpOworICAgIHZvaWQg
aXNfc2NhbGFyKCk7CisgICAgdm9pZCBpc192ZWN0b3IoKTsKKyAgICB2b2lkIGlzX21hdHJpeCgp
OworICAgIHZvaWQgYWRkcmVzc29mKCk7CisgICAgdm9pZCBkaXN0YW5jZSgpOworICAgIHZvaWQg
bGVuZ3RoKCk7CisgICAgdm9pZCBkb3QoKTsKKyAgICB2b2lkIG5vcm1hbGl6ZSgpOworICAgIHZv
aWQgZmFjZWZvcndhcmQoKTsKKyAgICB2b2lkIHJlZmxlY3QoKTsKKyAgICB2b2lkIHJlZnJhY3Qo
KTsKKyAgICB2b2lkIGRlZ3JlZXMoKTsKKyAgICB2b2lkIHJhZGlhbnMoKTsKKyAgICB2b2lkIG1v
ZCgpOworICAgIHZvaWQgcG9zdEluY3JlbWVudE1hdHJpeCgpOworICAgIHZvaWQgcHJlSW5jcmVt
ZW50TWF0cml4KCk7CisgICAgdm9pZCBwb3N0RGVjcmVtZW50TWF0cml4KCk7CisgICAgdm9pZCBw
cmVEZWNyZW1lbnRNYXRyaXgoKTsKKyAgICB2b2lkIG5lZ2F0ZU1hdHJpeCgpOworICAgIHZvaWQg
bWF0bXVsQXNzaWduKCk7CisgICAgdm9pZCBhdGFuKCk7CisgICAgdm9pZCBhZGRNYXRyaXhTY2Fs
YXJBc3NpZ24oKTsKKyAgICB2b2lkIHN1Yk1hdHJpeFNjYWxhckFzc2lnbigpOworICAgIHZvaWQg
YWRkTWF0cml4U2NhbGFyKCk7CisgICAgdm9pZCBzdWJNYXRyaXhTY2FsYXIoKTsKKyAgICB2b2lk
IGRpdk1hdHJpeFNjYWxhcigpOworICAgIHZvaWQgZGl2TWF0cml4U2NhbGFyRmFzdCgpOworICAg
IHZvaWQgZGl2TWF0cml4U2NhbGFyQXNzaWduKCk7CisgICAgdm9pZCBkaXZNYXRyaXhTY2FsYXJB
c3NpZ25GYXN0KCk7CisgICAgdm9pZCB0ZW5zb3IoKTsKKyAgICB2b2lkIGNvbXBvbmVudFdpc2VE
aXZpZGUoKTsKKyAgICB2b2lkIGNvbXBvbmVudFdpc2VEaXZpZGVBc3NpZ24oKTsKKyAgICB2b2lk
IGNvbXBvbmVudFdpc2VNdWx0aXBseSgpOworICAgIHZvaWQgb3V0ZXJQcm9kdWN0KCk7CisgICAg
dm9pZCBpbnZlcnNlMigpOworICAgIHZvaWQgaW52ZXJzZTMoKTsKKyAgICB2b2lkIGludmVyc2U0
KCk7CisgICAgdm9pZCBlcXVhbFZlY3RvcigpOworICAgIHZvaWQgZXF1YWxNYXRyaXgoKTsKKyAg
ICB2b2lkIG5vdEVxdWFsVmVjdG9yKCk7CisgICAgdm9pZCBub3RFcXVhbFN0cnVjdCgpOworICAg
IHZvaWQgZXF1YWxBcnJheSgpOworICAgIHZvaWQgbm90RXF1YWxBcnJheSgpOworICAgIHZvaWQg
c2lnbigpOworICAgIHZvaWQgcGFja19oYWxmXzJ4MTYoKTsKKyAgICB2b2lkIHVucGFja19oYWxm
XzJ4MTYoKTsKKyAgICB2b2lkIHZlY3RvckVsZW1SZWYoKTsKKyAgICB2b2lkIHN3aXp6bGVSZWYo
KTsKKyAgICB2b2lkIG91dCgpOworICAgIHZvaWQgaW5vdXQoKTsKKyAgICB2b2lkIGZsYXR0ZW5B
cnJheSgpOworICAgIHZvaWQgY2FzdFZlY3RvcigpOworICAgIHZvaWQgY2FzdE1hdHJpeCgpOwor
ICAgIHZvaWQgZnVuY3Rpb25Db25zdGFudHMoKTsKKyAgICB2b2lkIGdyYWRpZW50KCk7CisgICAg
dm9pZCB0ZXh0dXJlRW52KCk7CisgICAgdm9pZCB0ZXhlbEZldGNoKCk7CisgICAgdm9pZCB0ZXhl
bEZldGNoT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dl
bmVyaWNfZmxvYXQyKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQyX2Zsb2F0KCk7
CisgICAgdm9pZCB0ZXh0dXJlX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlX2dl
bmVyaWNfZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7
CisgICAgdm9pZCB0ZXh0dXJlX2RlcHRoMmRfZmxvYXQzX2Zsb2F0KCk7CisgICAgdm9pZCB0ZXh0
dXJlX2RlcHRoMmRhcnJheV9mbG9hdDQoKTsKKyAgICB2b2lkIHRleHR1cmVfZGVwdGgyZGFycmF5
X2Zsb2F0NF9mbG9hdCgpOworICAgIHZvaWQgdGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0KCk7Cisg
ICAgdm9pZCB0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQoKTsKKyAgICB2b2lkIHRleHR1
cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlX3RleHR1cmUyZGFy
cmF5X2Zsb2F0M19mbG9hdCgpOworICAgIHZvaWQgdGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9h
dDQoKTsKKyAgICB2b2lkIHRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7Cisg
ICAgdm9pZCB0ZXh0dXJlMURMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUxRFByb2ooKTsKKyAgICB2
b2lkIHRleHR1cmUxRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1cmUyRCgpOworICAgIHZvaWQg
dGV4dHVyZTJETG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlMkRQcm9qKCk7CisgICAgdm9pZCB0ZXh0
dXJlMkRQcm9qTG9kKCk7CisgICAgdm9pZCB0ZXh0dXJlM0RMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmUzRFByb2ooKTsKKyAgICB2b2lkIHRleHR1cmUzRFByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmVDdWJlKCk7CisgICAgdm9pZCB0ZXh0dXJlQ3ViZUxvZCgpOworICAgIHZvaWQgdGV4dHVyZUN1
YmVQcm9qKCk7CisgICAgdm9pZCB0ZXh0dXJlQ3ViZVByb2pMb2QoKTsKKyAgICB2b2lkIHRleHR1
cmVHcmFkKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxv
YXROKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQy
KCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7
CisgICAgdm9pZCB0ZXh0dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7Cisg
ICAgdm9pZCB0ZXh0dXJlR3JhZF9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsK
KyAgICB2b2lkIHRleHR1cmVHcmFkX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQzX2Zsb2F0MygpOwor
ICAgIHZvaWQgdGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDMoKTsK
KyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNl
dF9nZW5lcmljX2Zsb2F0Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKyAgICB2b2lkIHRleHR1cmVH
cmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgIHZvaWQg
dGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdDRfZmxvYXQyX2Zsb2F0Ml9pbnQyKCk7Cisg
ICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICB2b2lkIHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJheV9mbG9hdDRfZmxv
YXQyX2Zsb2F0Ml9pbnQyKCk7CisgICAgdm9pZCB0ZXh0dXJlR3JhZE9mZnNldF9kZXB0aGN1YmVf
ZmxvYXQ0X2Zsb2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZUdyYWRPZmZzZXRf
dGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVy
ZUxvZCgpOworICAgIHZvaWQgdGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MigpOworICAgIHZvaWQg
dGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MygpOworICAgIHZvaWQgdGV4dHVyZUxvZF9kZXB0aDJk
X2Zsb2F0MygpOworICAgIHZvaWQgdGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDMoKTsK
KyAgICB2b2lkIHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0KCk7CisgICAgdm9pZCB0
ZXh0dXJlTG9kT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlT2Zmc2V0KCk7CisgICAgdm9pZCB0
ZXh0dXJlUHJvaigpOworICAgIHZvaWQgdGV4dHVyZVByb2pHcmFkKCk7CisgICAgdm9pZCB0ZXh0
dXJlUHJvakdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zsb2F0MigpOworICAgIHZvaWQgdGV4
dHVyZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICB2b2lkIHRl
eHR1cmVQcm9qR3JhZF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgdm9pZCB0
ZXh0dXJlUHJvakdyYWRfdGV4dHVyZTNkX2Zsb2F0NF9mbG9hdDNfZmxvYXQzKCk7CisgICAgdm9p
ZCB0ZXh0dXJlUHJvakdyYWRPZmZzZXQoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNl
dF9nZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICB2b2lkIHRleHR1cmVQ
cm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICB2
b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qR3JhZE9mZnNldF90ZXh0dXJlM2RfZmxvYXQ0X2Zs
b2F0M19mbG9hdDNfaW50MygpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2QoKTsKKyAgICB2b2lk
IHRleHR1cmVQcm9qTG9kX2dlbmVyaWNfZmxvYXQzKCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvakxv
ZF9nZW5lcmljX2Zsb2F0NCgpOworICAgIHZvaWQgdGV4dHVyZVByb2pMb2RfZGVwdGgyZF9mbG9h
dDQoKTsKKyAgICB2b2lkIHRleHR1cmVQcm9qTG9kX3RleHR1cmUzZF9mbG9hdDQoKTsKKyAgICB2
b2lkIHRleHR1cmVQcm9qTG9kT2Zmc2V0KCk7CisgICAgdm9pZCB0ZXh0dXJlUHJvak9mZnNldCgp
OworICAgIHZvaWQgdGV4dHVyZVNpemUoKTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jh
c2UgJm1PdXQ7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PExpbmVUYWc+IG1FbWl0dGVkOworICAg
IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUU3ltYm9sICo+IG1IYW5kbGVkOworICAgIGNvbnN0
IEZ1bmNUb0VtaXR0ZXIgbUZ1bmNUb0VtaXR0ZXIgPSBCdWlsZEZ1bmNUb0VtaXR0ZXIoKTsKK307
CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KworI2RlZmluZSBQUk9HUkFNX1BSRUxVREVfSU5DTFVERShoZWFkZXIpICAgICAgICAgICAgIFwK
KyAgICB2b2lkIFByb2dyYW1QcmVsdWRlOjppbmNsdWRlXyMjaGVhZGVyKCkgICAgICAgICBcCisg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBpZiAoZW1pdEd1YXJkKF9fTElORV9fKSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBtT3V0IDw8ICgiI2luY2x1ZGUgPCIgI2hlYWRlciAiPlxuXG4iKTsgXAorICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNk
ZWZpbmUgUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobmFtZSwgY29kZSwgLi4uKSAgICAgICAgICAg
ICAgICBcCisgICAgdm9pZCBQcm9ncmFtUHJlbHVkZTo6bmFtZSgpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQVNTRVJUKGNvZGVbMF0gPT0gJ1xu
Jyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChlbWl0R3Vh
cmQoX19MSU5FX18pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIF9fVkFfQVJHU19fOyAvKiBkZXBlbmRlbmNpZXMgKi8gICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBtT3V0IDw8IChzdGF0aWNfY2FzdDxjb25zdCBjaGFyICo+
KGNvZGUgIlxuIikgKyAxKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2F0b21pYykKK1BST0dSQU1f
UFJFTFVERV9JTkNMVURFKG1ldGFsX2NvbW1vbikKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1l
dGFsX2dlb21ldHJpYykKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX2dyYXBoaWNzKQor
UFJPR1JBTV9QUkVMVURFX0lOQ0xVREUobWV0YWxfbWF0aCkKK1BST0dSQU1fUFJFTFVERV9JTkNM
VURFKG1ldGFsX21hdHJpeCkKK1BST0dSQU1fUFJFTFVERV9JTkNMVURFKG1ldGFsX3BhY2spCitQ
Uk9HUkFNX1BSRUxVREVfSU5DTFVERShtZXRhbF9yZWxhdGlvbmFsKQorCisvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShBTFdBWVNfSU5MSU5FLCBSIigK
KyNkZWZpbmUgQU5HTEVfQUxXQVlTX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5l
KSkKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShlbmFibGVfaWYsIFIiKAordGVtcGxh
dGUgPGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfZW5hYmxlX2lmIHt9
OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZW5hYmxlX2lmPHRydWUsIFQ+
Cit7CisgICAgdXNpbmcgdHlwZSA9IFQ7Cit9OwordGVtcGxhdGUgPGJvb2wgQj4KK3VzaW5nIEFO
R0xFX2VuYWJsZV9pZl90ID0gdHlwZW5hbWUgQU5HTEVfZW5hYmxlX2lmPEI+Ojp0eXBlOworKSIp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHNjYWxhcl9vZiwgUiIoCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9zY2FsYXJfb2YKK3sKKyAgICB1c2luZyB0eXBlID0gVDsK
K307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3VzaW5nIEFOR0xFX3NjYWxhcl9vZl90ID0gdHlw
ZW5hbWUgQU5HTEVfc2NhbGFyX29mPFQ+Ojp0eXBlOworKSIpCisKK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKGlzX3NjYWxhciwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdM
RV9pc19zY2FsYXIge307CisjZGVmaW5lIEFOR0xFX0RFRklORV9TQ0FMQVIoc2NhbGFyKSBcCisg
ICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3NjYWxhcjxzY2FsYXI+IHsgZW51bSB7IHZh
bHVlID0gdHJ1ZSB9OyB9CitBTkdMRV9ERUZJTkVfU0NBTEFSKGJvb2wpOworQU5HTEVfREVGSU5F
X1NDQUxBUihjaGFyKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIoc2hvcnQpOworQU5HTEVfREVGSU5F
X1NDQUxBUihpbnQpOworQU5HTEVfREVGSU5FX1NDQUxBUihsb25nKTsKK0FOR0xFX0RFRklORV9T
Q0FMQVIodWNoYXIpOworQU5HTEVfREVGSU5FX1NDQUxBUih1c2hvcnQpOworQU5HTEVfREVGSU5F
X1NDQUxBUih1aW50KTsKK0FOR0xFX0RFRklORV9TQ0FMQVIodWxvbmcpOworQU5HTEVfREVGSU5F
X1NDQUxBUihoYWxmKTsKK0FOR0xFX0RFRklORV9TQ0FMQVIoZmxvYXQpOworKSIpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKGlzX3ZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfaXNfdmVjdG9yCit7CisgICAg
ZW51bSB7IHZhbHVlID0gZmFsc2UgfTsKK307CisjZGVmaW5lIEFOR0xFX0RFRklORV9WRUNUT1Io
c2NhbGFyKSBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6
c2NhbGFyICMjIDI+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUg
PD4gc3RydWN0IEFOR0xFX2lzX3ZlY3RvcjxtZXRhbDo6c2NhbGFyICMjIDM+IHsgZW51bSB7IHZh
bHVlID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX3ZlY3Rv
cjxtZXRhbDo6c2NhbGFyICMjIDQ+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisgICAg
dGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX3NjYWxhcl9vZjxtZXRhbDo6c2NhbGFyICMjIDI+IHsg
dXNpbmcgdHlwZSA9IHNjYWxhcjsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9z
Y2FsYXJfb2Y8bWV0YWw6OnNjYWxhciAjIyAzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwK
KyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMg
ND4geyB1c2luZyB0eXBlID0gc2NhbGFyOyB9CitBTkdMRV9ERUZJTkVfVkVDVE9SKGJvb2wpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUihjaGFyKTsKK0FOR0xFX0RFRklORV9WRUNUT1Ioc2hvcnQpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUihpbnQpOworQU5HTEVfREVGSU5FX1ZFQ1RPUihsb25nKTsKK0FO
R0xFX0RFRklORV9WRUNUT1IodWNoYXIpOworQU5HTEVfREVGSU5FX1ZFQ1RPUih1c2hvcnQpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUih1aW50KTsKK0FOR0xFX0RFRklORV9WRUNUT1IodWxvbmcpOwor
QU5HTEVfREVGSU5FX1ZFQ1RPUihoYWxmKTsKK0FOR0xFX0RFRklORV9WRUNUT1IoZmxvYXQpOwor
KSIsCisgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXJfb2YoKSkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoaXNfbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9pc19tYXRyaXgKK3sKKyAgICBlbnVtIHsg
dmFsdWUgPSBmYWxzZSB9OworfTsKKyNkZWZpbmUgQU5HTEVfREVGSU5FX01BVFJJWChzY2FsYXIp
IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIg
IyMgMngyPiB7IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBBTkdMRV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAjIyAyeDM+IHsgZW51bSB7IHZhbHVl
ID0gdHJ1ZSB9OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxt
ZXRhbDo6c2NhbGFyICMjIDJ4ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7
IGVudW0geyB2YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdM
RV9pc19tYXRyaXg8bWV0YWw6OnNjYWxhciAjIyAzeDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9
OyB9OyBcCisgICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2Nh
bGFyICMjIDN4ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQU5HTEVfaXNfbWF0cml4PG1ldGFsOjpzY2FsYXIgIyMgNHgyPiB7IGVudW0geyB2
YWx1ZSA9IHRydWUgfTsgfTsgXAorICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBBTkdMRV9pc19tYXRy
aXg8bWV0YWw6OnNjYWxhciAjIyA0eDM+IHsgZW51bSB7IHZhbHVlID0gdHJ1ZSB9OyB9OyBcCisg
ICAgdGVtcGxhdGUgPD4gc3RydWN0IEFOR0xFX2lzX21hdHJpeDxtZXRhbDo6c2NhbGFyICMjIDR4
ND4geyBlbnVtIHsgdmFsdWUgPSB0cnVlIH07IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
QU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMngyPiB7IHVzaW5nIHR5cGUgPSBzY2Fs
YXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpz
Y2FsYXIgIyMgMngzPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgMng0PiB7IHVzaW5nIHR5
cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29m
PG1ldGFsOjpzY2FsYXIgIyMgM3gyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgM3gzPiB7
IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVf
c2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgM3g0PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07
IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIg
IyMgNHgyPiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFsOjpzY2FsYXIgIyMgNHgzPiB7IHVzaW5nIHR5cGUgPSBz
Y2FsYXI7IH07IFwKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQU5HTEVfc2NhbGFyX29mPG1ldGFs
OjpzY2FsYXIgIyMgNHg0PiB7IHVzaW5nIHR5cGUgPSBzY2FsYXI7IH0KK0FOR0xFX0RFRklORV9N
QVRSSVgoaGFsZik7CitBTkdMRV9ERUZJTkVfTUFUUklYKGZsb2F0KTsKKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgc2NhbGFyX29mKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGFk
ZHJlc3NvZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBUICogQU5HTEVfYWRkcmVzc29mKHRocmVh
ZCBUICZyZWYpCit7CisgICAgcmV0dXJuICZyZWY7Cit9CispIikKKworUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUoZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX2Rpc3Rh
bmNlX2ltcGwKK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJf
b2ZfdDxUPiBleGVjKFQgeCwgVCB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFsOjpkaXN0
YW5jZSh4LCB5KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5H
TEVfZGlzdGFuY2VfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19zY2FsYXI8VD46
OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4ZWMoVCB4LCBU
IHkpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmFicyh4IC0geSk7CisgICAgfQorfTsK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9zY2FsYXJf
b2ZfdDxUPiBBTkdMRV9kaXN0YW5jZShUIHgsIFQgeSkKK3sKKyAgICByZXR1cm4gQU5HTEVfZGlz
dGFuY2VfaW1wbDxUPjo6ZXhlYyh4LCB5KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmNsdWRlX21ldGFsX21hdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZV9pZigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBpc192ZWN0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21hdHJpeCgp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShsZW5ndGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgor
c3RydWN0IEFOR0xFX2xlbmd0aF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJ
TkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gZXhlYyhUIHgpCisgICAgeworICAgICAgICByZXR1cm4g
bWV0YWw6Omxlbmd0aCh4KTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgQU5HTEVfbGVuZ3RoX2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFy
PFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQg
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBtZXRhbDo6YWJzKHgpOworICAgIH0KK307Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8
VD4gQU5HTEVfbGVuZ3RoKFQgeCkKK3sKKyAgICByZXR1cm4gQU5HTEVfbGVuZ3RoX2ltcGw8VD46
OmV4ZWMoeCk7Cit9OworKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFs
X2dlb21ldHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRo
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlzX3NjYWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9y
KCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUoZG90LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9kb3RfaW1w
bAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIEFOR0xFX3NjYWxhcl9vZl90PFQ+
IGV4ZWMoVCB4LCBUIHkpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmRvdCh4LCB5KTsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfZG90X2ltcGw8
VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+Cit7CisgICAg
c3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgeCwgVCB5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHggKiB5OworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgQU5HTEVfc2NhbGFyX29mX3Q8VD4gQU5HTEVfZG90KFQgeCwgVCB5KQor
eworICAgIHJldHVybiBBTkdMRV9kb3RfaW1wbDxUPjo6ZXhlYyh4LCB5KTsKK307CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ2VvbWV0cmljKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlz
X3NjYWxhcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfdmVjdG9yKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBpc19tYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUo
bm9ybWFsaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9ub3JtYWxpemVfaW1w
bAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisgICAgewor
ICAgICAgICByZXR1cm4gbWV0YWw6Om5vcm1hbGl6ZSh4KTsKKyAgICB9Cit9OwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfbm9ybWFsaXplX2ltcGw8VCwgQU5HTEVfZW5hYmxl
X2lmX3Q8QU5HTEVfaXNfc2NhbGFyPFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FM
V0FZU19JTkxJTkUgVCBleGVjKFQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBBTkdMRV9zaWdu
KHgpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgVCBBTkdMRV9ub3JtYWxpemUoVCB4KQoreworICAgIHJldHVybiBBTkdMRV9ub3JtYWxpemVf
aW1wbDxUPjo6ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1
ZGVfbWV0YWxfY29tbW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFs
X2dlb21ldHJpYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpc19zY2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlzX3ZlY3RvcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGZh
Y2Vmb3J3YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9mYWNlZm9yd2FyZF9p
bXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQgbiwgVCBpLCBU
IG5yZWYpCisgICAgeworICAgICAgICByZXR1cm4gbWV0YWw6OmZhY2Vmb3J3YXJkKG4sIGksIG5y
ZWYpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9mYWNl
Zm9yd2FyZF9pbXBsPFQsIEFOR0xFX2VuYWJsZV9pZl90PEFOR0xFX2lzX3NjYWxhcjxUPjo6dmFs
dWU+PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIG4sIFQgaSwg
VCBucmVmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFOR0xFX2RvdChucmVmLCBpKSA8IFQoMCkg
PyBuIDogLW47CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlT
X0lOTElORSBUIEFOR0xFX2ZhY2Vmb3J3YXJkKFQgbiwgVCBpLCBUIG5yZWYpCit7CisgICAgcmV0
dXJuIEFOR0xFX2ZhY2Vmb3J3YXJkX2ltcGw8VD46OmV4ZWMobiwgaSwgbnJlZik7Cit9OworKSIs
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBpc19zY2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfbWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBkb3QoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocmVmbGVjdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEVuYWJsZSA9
IHZvaWQ+CitzdHJ1Y3QgQU5HTEVfcmVmbGVjdF9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FM
V0FZU19JTkxJTkUgVCBleGVjKFQgaSwgVCBuKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFs
OjpyZWZsZWN0KGksIG4pOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVj
dCBBTkdMRV9yZWZsZWN0X2ltcGw8VCwgQU5HTEVfZW5hYmxlX2lmX3Q8QU5HTEVfaXNfc2NhbGFy
PFQ+Ojp2YWx1ZT4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgVCBleGVjKFQg
aSwgVCBuKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgLSBUKDIpICogQU5HTEVfZG90KG4sIGkp
ICogbjsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5M
SU5FIFQgQU5HTEVfcmVmbGVjdChUIGksIFQgbikKK3sKKyAgICByZXR1cm4gQU5HTEVfcmVmbGVj
dF9pbXBsPFQ+OjpleGVjKGksIG4pOworfTsKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
aW5jbHVkZV9tZXRhbF9nZW9tZXRyaWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJs
ZV9pZigpLAorICAgICAgICAgICAgICAgICAgICAgICAgaXNfc2NhbGFyKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBpc192ZWN0b3IoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX21h
dHJpeCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgZG90KCkpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKHJlZnJhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX3JlZnJh
Y3RfaW1wbAoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIGksIFQg
biwgQU5HTEVfc2NhbGFyX29mX3Q8VD4gZXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ldGFs
OjpyZWZyYWN0KGksIG4sIGV0YSk7CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
c3RydWN0IEFOR0xFX3JlZnJhY3RfaW1wbDxULCBBTkdMRV9lbmFibGVfaWZfdDxBTkdMRV9pc19z
Y2FsYXI8VD46OnZhbHVlPj4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBUIGV4
ZWMoVCBpLCBUIG4sIFQgZXRhKQorICAgIHsKKyAgICAgICAgYXV0byBkb3ROSSA9IG4gKiBpOwor
ICAgICAgICBhdXRvIGsgPSBUKDEpIC0gZXRhICogZXRhICogKFQoMSkgLSBkb3ROSSAqIGRvdE5J
KTsKKyAgICAgICAgaWYgKGsgPCBUKDApKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
VCgwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBldGEgKiBpIC0gKGV0YSAqIGRvdE5JICsgbWV0YWw6OnNxcnQoaykpICogbjsKKyAgICAg
ICAgfQorICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgVCBBTkdMRV9yZWZyYWN0KFQgaSwgVCBuLCBBTkdMRV9zY2FsYXJfb2ZfdDxUPiBldGEpCit7
CisgICAgcmV0dXJuIEFOR0xFX3JlZnJhY3RfaW1wbDxUPjo6ZXhlYyhpLCBuLCBldGEpOworfTsK
KykiLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dlb21ldHJpYygpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZW5hYmxlX2lmKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpc19z
Y2FsYXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzX3ZlY3RvcigpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgaXNfbWF0cml4KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHNp
Z24sCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorc3RydWN0IEFOR0xFX3NpZ25faW1wbAoreworICAgIHN0
YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIFQgZXhlYyhUIHgpCisgICAgeworICAgICAgICByZXR1
cm4gbWV0YWw6OnNpZ24oeCk7CisgICAgfQorfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVf
c2lnbl9pbXBsPGludD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBpbnQgZXhl
YyhpbnQgeCkKKyAgICB7CisgICAgICAgIHJldHVybiAoMCA8IHgpIC0gKHggPCAwKTsKKyAgICB9
Cit9OwordGVtcGxhdGUgPGludCBOPgorc3RydWN0IEFOR0xFX3NpZ25faW1wbDxtZXRhbDo6dmVj
PGludCwgTj4+Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6OnZlYzxp
bnQsIE4+IGV4ZWMobWV0YWw6OnZlYzxpbnQsIE4+IHgpCisgICAgeworICAgICAgICBtZXRhbDo6
dmVjPGludCwgTj4gczsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHNbaV0gPSBBTkdMRV9zaWduX2ltcGw8aW50Pjo6ZXhlYyh4W2ld
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gczsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfc2lnbihUIHgpCit7CisgICAg
cmV0dXJuIEFOR0xFX3NpZ25faW1wbDxUPjo6ZXhlYyh4KTsKK307CispIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfY29tbW9uKCkpCisKK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKGF0YW4sCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2F0YW4oVCB5T3ZlclgpCit7Cisg
ICAgcmV0dXJuIG1ldGFsOjphdGFuKHlPdmVyWCk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgVCBBTkdMRV9hdGFuKFQgeSwgVCB4KQoreworICAgIHJldHVy
biBtZXRhbDo6YXRhbjIoeSwgeCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShkZWdyZWVzLCBS
IigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBUIEFOR0xFX2Rl
Z3JlZXMoVCB4KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPig1Ny4yOTU3Nzk1MTMwODIz
MikgKiB4OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHJhZGlhbnMsIFIiKAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIFQgQU5HTEVfcmFkaWFu
cyhUIHgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KDEuNzQ1MzI5MjUxOTk0MzI5NWUt
MikgKiB4OworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG1vZCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIFggQU5HTEVfbW9kKFggeCwgWSB5KQoreworICAgIHJldHVybiB4
IC0geSAqIG1ldGFsOjpmbG9vcih4IC8geSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluY2x1ZGVfbWV0YWxfbWF0aCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShwYWNr
X2hhbGZfMngxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorQU5HTEVfQUxXQVlTX0lO
TElORSB1aW50IEFOR0xFX3BhY2tfaGFsZl8yeDE2KGZsb2F0MiB2KQoreworICAgIHJldHVybiBh
c190eXBlPHVpbnQ+KGhhbGYyKHYpKTsKK30KKykiLCApCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHVucGFja19oYWxmXzJ4MTYsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK0FOR0xF
X0FMV0FZU19JTkxJTkUgZmxvYXQyIEFOR0xFX3VucGFja19oYWxmXzJ4MTYodWludCB4KQorewor
ICAgIHJldHVybiBmbG9hdDIoYXNfdHlwZTxoYWxmMj4oeCkpOworfQorKSIsICkKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUobWF0bXVsQXNzaWduLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgdGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgTiwg
Tj4gJm9wZXJhdG9yKj0odGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgTiwgTj4gJmEsIG1ldGFsOjpt
YXRyaXg8VCwgTiwgTj4gYikKK3sKKyAgICBhID0gYSAqIGI7CisgICAgcmV0dXJuIGE7Cit9Cisp
IikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocG9zdEluY3JlbWVudE1hdHJpeCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBp
bnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiBvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhLCBpbnQp
Cit7CisgICAgYXV0byBiID0gYTsKKyAgICBhICs9IFQoMSk7CisgICAgcmV0dXJuIGI7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2lnbigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRShwcmVJbmNyZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+
ICZvcGVyYXRvcisrKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZhKQorewor
ICAgIGEgKz0gVCgxKTsKKyAgICByZXR1cm4gYTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkTWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHBvc3REZWNyZW1lbnRNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0b3ItLSh0aHJlYWQgbWV0YWw6Om1h
dHJpeDxULCBDb2xzLCBSb3dzPiAmYSwgaW50KQoreworICAgIGF1dG8gYiA9IGE7CisgICAgYSAt
PSBUKDEpOworICAgIHJldHVybiBiOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBz
dWJNYXRyaXhTY2FsYXJBc3NpZ24oKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUocHJlRGVj
cmVtZW50TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQg
bWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmb3BlcmF0b3ItLSh0aHJlYWQgbWV0YWw6Om1h
dHJpeDxULCBDb2xzLCBSb3dzPiAmYSkKK3sKKyAgICBhIC09IFQoMSk7CisgICAgcmV0dXJuIGE7
Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk1hdHJpeFNjYWxhckFzc2lnbigp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShuZWdhdGVNYXRyaXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gb3BlcmF0
b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSkKK3sKKyAgICBmb3IgKHNpemVfdCBj
b2wgPSAwOyBjb2wgPCBDb2xzOyArK2NvbCkKKyAgICB7CisgICAgICAgIHRocmVhZCBhdXRvICZt
Q29sID0gbVtjb2xdOworICAgICAgICBtQ29sID0gLW1Db2w7CisgICAgfQorICAgIHJldHVybiBt
OworfQorKSIsICkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyQXNz
aWduLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVy
YXRvcis9KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgpCit7Cisg
ICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAgICAg
ICBtW2NvbF0gKz0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9CispIikKKworUFJPR1JBTV9Q
UkVMVURFX0RFQ0xBUkUoYWRkTWF0cml4U2NhbGFyLAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxX
QVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yKyhtZXRhbDo6
bWF0cml4PFQsIENvbHMsIFJvd3M+IG0sIFQgeCkKK3sKKyAgICBtICs9IHg7CisgICAgcmV0dXJu
IG07Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdHJpeFNjYWxhckFzc2ln
bigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXJBc3NpZ24sCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29s
cywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIHRocmVhZCBtZXRhbDo6bWF0cml4PFQs
IENvbHMsIFJvd3M+ICZvcGVyYXRvci09KHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJv
d3M+ICZtLCBUIHgpCit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytj
b2wpCisgICAgeworICAgICAgICBtW2NvbF0gLT0geDsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9
CispIiwgKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShzdWJNYXRyaXhTY2FsYXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywg
aW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93
cz4gb3BlcmF0b3ItKG1ldGFsOjptYXRyaXg8VCwgQ29scywgUm93cz4gbSwgVCB4KQoreworICAg
IG0gLT0geDsKKyAgICByZXR1cm4gbTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
c3ViTWF0cml4U2NhbGFyQXNzaWduKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGRpdk1h
dHJpeFNjYWxhckFzc2lnbkZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCBpbnQgQ29scywgaW50IFJvd3M+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZvcGVyYXRvci89KHRocmVhZCBt
ZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+ICZtLCBUIHgpCit7CisgICAgeCA9IFQoMSkgLyB4
OworICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsKKyAg
ICAgICAgbVtjb2xdICo9IHg7CisgICAgfQorICAgIHJldHVybiBtOworfQorKSIsICkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyQXNzaWduLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dz
PgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiAmb3BlcmF0b3IvPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmbSwgVCB4
KQoreworICAgIGZvciAoc2l6ZV90IGNvbCA9IDA7IGNvbCA8IENvbHM7ICsrY29sKQorICAgIHsK
KyAgICAgICAgbVtjb2xdIC89IHg7CisgICAgfQorICAgIHJldHVybiBtOworfQorKSIsICkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyRmFzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorI2lmIF9fTUVUQUxfVkVSU0lPTl9fIDw9IDIyMAordGVtcGxhdGUg
PHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0
YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxULCBDb2xz
LCBSb3dzPiBtLCBUIHgpCit7CisgICAgbSAvPSB4OworICAgIHJldHVybiBtOworfQorI2VuZGlm
CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdk1hdHJpeFNjYWxhckFzc2lnbkZhc3Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZGl2TWF0cml4U2NhbGFyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgUiIoCisjaWYgX19NRVRBTF9WRVJTSU9OX18gPD0gMjIwCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dzPgorQU5HTEVfQUxXQVlTX0lOTElORSBt
ZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IG9wZXJhdG9yLyhtZXRhbDo6bWF0cml4PFQsIENv
bHMsIFJvd3M+IG0sIFQgeCkKK3sKKyAgICBtIC89IHg7CisgICAgcmV0dXJuIG07Cit9CisjZW5k
aWYKKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGl2TWF0cml4U2NhbGFyQXNzaWduKCkp
CisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGNvbXBvbmVudFdpc2VEaXZpZGUsIFIiKAordGVt
cGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBvcGVyYXRvci8obWV0YWw6Om1hdHJpeDxU
LCBDb2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQsIENvbHMsIFJvd3M+IGIpCit7CisgICAg
Zm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsgKytjb2wpCisgICAgeworICAgICAgICBh
W2NvbF0gLz0gYltjb2xdOworICAgIH0KKyAgICByZXR1cm4gYTsKK30KKykiKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlRGl2aWRlQXNzaWduLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IENvbHMsIGludCBSb3dz
PgorQU5HTEVfQUxXQVlTX0lOTElORSB0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dz
PiAmb3BlcmF0b3IvPSh0aHJlYWQgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiAmYSwgbWV0
YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBiKQoreworICAgIGEgPSBhIC8gYjsKKyAgICByZXR1
cm4gYTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlk
ZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShjb21wb25lbnRXaXNlTXVsdGlwbHksIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDb2xzLCBpbnQgUm93cz4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBBTkdMRV9jb21wb25lbnRXaXNl
TXVsdGlwbHkobWV0YWw6Om1hdHJpeDxULCBDb2xzLCBSb3dzPiBhLCBtZXRhbDo6bWF0cml4PFQs
IENvbHMsIFJvd3M+IGIpCit7CisgICAgZm9yIChzaXplX3QgY29sID0gMDsgY29sIDwgQ29sczsg
Kytjb2wpCisgICAgeworICAgICAgICBhW2NvbF0gKj0gYltjb2xdOworICAgIH0KKyAgICByZXR1
cm4gYTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShvdXRlclByb2R1Y3QsIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBNLCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgbWV0YWw6Om1hdHJpeDxULCBOLCBNPiBBTkdMRV9vdXRlclByb2R1Y3QobWV0YWw6OnZlYzxU
LCBNPiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCit7CisgICAgbWV0YWw6Om1hdHJpeDxULCBOLCBN
PiBvOworICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgTjsgKytuKQorICAgIHsKKyAgICAgICAg
b1tuXSA9IHUgKiB2W25dOworICAgIH0KKyAgICByZXR1cm4gbzsKK30KKykiKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShpbnZlcnNlMiwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCAyLCAyPiBBTkdMRV9pbnZlcnNlKG1l
dGFsOjptYXRyaXg8VCwgMiwgMj4gbSkKK3sKKyAgICBtZXRhbDo6bWF0cml4PFQsIDIsIDI+IGFk
ajsKKyAgICBhZGpbMF1bMF0gPSAgbVsxXVsxXTsKKyAgICBhZGpbMF1bMV0gPSAtbVswXVsxXTsK
KyAgICBhZGpbMV1bMF0gPSAtbVsxXVswXTsKKyAgICBhZGpbMV1bMV0gPSAgbVswXVswXTsKKyAg
ICBUIGRldCA9IChhZGpbMF1bMF0gKiBtWzBdWzBdKSArIChhZGpbMF1bMV0gKiBtWzFdWzBdKTsK
KyAgICByZXR1cm4gYWRqICogKFQoMSkgLyBkZXQpOworfQorKSIpCisKK1BST0dSQU1fUFJFTFVE
RV9ERUNMQVJFKGludmVyc2UzLCBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBtZXRhbDo6bWF0cml4PFQsIDMsIDM+IEFOR0xFX2ludmVyc2UobWV0YWw6Om1h
dHJpeDxULCAzLCAzPiBtKQoreworICAgIFQgYSA9IG1bMV1bMV0gKiBtWzJdWzJdIC0gbVsyXVsx
XSAqIG1bMV1bMl07CisgICAgVCBiID0gbVsxXVswXSAqIG1bMl1bMl07CisgICAgVCBjID0gbVsx
XVsyXSAqIG1bMl1bMF07CisgICAgVCBkID0gbVsxXVswXSAqIG1bMl1bMV07CisgICAgVCBkZXQg
PSBtWzBdWzBdICogKGEpIC0KKyAgICAgICAgICAgIG1bMF1bMV0gKiAoYiAtIGMpICsKKyAgICAg
ICAgICAgIG1bMF1bMl0gKiAoZCAtIG1bMV1bMV0gKiBtWzJdWzBdKTsKKyAgICBkZXQgPSBUKDEp
IC8gZGV0OworICAgIG1ldGFsOjptYXRyaXg8VCwgMywgMz4gbWludjsKKyAgICBtaW52WzBdWzBd
ID0gKGEpICogZGV0OworICAgIG1pbnZbMF1bMV0gPSAobVswXVsyXSAqIG1bMl1bMV0gLSBtWzBd
WzFdICogbVsyXVsyXSkgKiBkZXQ7CisgICAgbWludlswXVsyXSA9IChtWzBdWzFdICogbVsxXVsy
XSAtIG1bMF1bMl0gKiBtWzFdWzFdKSAqIGRldDsKKyAgICBtaW52WzFdWzBdID0gKGMgLSBiKSAq
IGRldDsKKyAgICBtaW52WzFdWzFdID0gKG1bMF1bMF0gKiBtWzJdWzJdIC0gbVswXVsyXSAqIG1b
Ml1bMF0pICogZGV0OworICAgIG1pbnZbMV1bMl0gPSAobVsxXVswXSAqIG1bMF1bMl0gLSBtWzBd
WzBdICogbVsxXVsyXSkgKiBkZXQ7CisgICAgbWludlsyXVswXSA9IChkIC0gbVsyXVswXSAqIG1b
MV1bMV0pICogZGV0OworICAgIG1pbnZbMl1bMV0gPSAobVsyXVswXSAqIG1bMF1bMV0gLSBtWzBd
WzBdICogbVsyXVsxXSkgKiBkZXQ7CisgICAgbWludlsyXVsyXSA9IChtWzBdWzBdICogbVsxXVsx
XSAtIG1bMV1bMF0gKiBtWzBdWzFdKSAqIGRldDsKKyAgICByZXR1cm4gbWludjsKK30KKykiKQor
CitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShpbnZlcnNlNCwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCA0LCA0PiBBTkdMRV9p
bnZlcnNlKG1ldGFsOjptYXRyaXg8VCwgNCwgND4gbSkKK3sKKyAgICBUIEEyMzIzID0gbVsyXVsy
XSAqIG1bM11bM10gLSBtWzJdWzNdICogbVszXVsyXTsKKyAgICBUIEExMzIzID0gbVsyXVsxXSAq
IG1bM11bM10gLSBtWzJdWzNdICogbVszXVsxXTsKKyAgICBUIEExMjIzID0gbVsyXVsxXSAqIG1b
M11bMl0gLSBtWzJdWzJdICogbVszXVsxXTsKKyAgICBUIEEwMzIzID0gbVsyXVswXSAqIG1bM11b
M10gLSBtWzJdWzNdICogbVszXVswXTsKKyAgICBUIEEwMjIzID0gbVsyXVswXSAqIG1bM11bMl0g
LSBtWzJdWzJdICogbVszXVswXTsKKyAgICBUIEEwMTIzID0gbVsyXVswXSAqIG1bM11bMV0gLSBt
WzJdWzFdICogbVszXVswXTsKKyAgICBUIEEyMzEzID0gbVsxXVsyXSAqIG1bM11bM10gLSBtWzFd
WzNdICogbVszXVsyXTsKKyAgICBUIEExMzEzID0gbVsxXVsxXSAqIG1bM11bM10gLSBtWzFdWzNd
ICogbVszXVsxXTsKKyAgICBUIEExMjEzID0gbVsxXVsxXSAqIG1bM11bMl0gLSBtWzFdWzJdICog
bVszXVsxXTsKKyAgICBUIEEyMzEyID0gbVsxXVsyXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsy
XVsyXTsKKyAgICBUIEExMzEyID0gbVsxXVsxXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVsx
XTsKKyAgICBUIEExMjEyID0gbVsxXVsxXSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVsxXTsK
KyAgICBUIEEwMzEzID0gbVsxXVswXSAqIG1bM11bM10gLSBtWzFdWzNdICogbVszXVswXTsKKyAg
ICBUIEEwMjEzID0gbVsxXVswXSAqIG1bM11bMl0gLSBtWzFdWzJdICogbVszXVswXTsKKyAgICBU
IEEwMzEyID0gbVsxXVswXSAqIG1bMl1bM10gLSBtWzFdWzNdICogbVsyXVswXTsKKyAgICBUIEEw
MjEyID0gbVsxXVswXSAqIG1bMl1bMl0gLSBtWzFdWzJdICogbVsyXVswXTsKKyAgICBUIEEwMTEz
ID0gbVsxXVswXSAqIG1bM11bMV0gLSBtWzFdWzFdICogbVszXVswXTsKKyAgICBUIEEwMTEyID0g
bVsxXVswXSAqIG1bMl1bMV0gLSBtWzFdWzFdICogbVsyXVswXTsKKyAgICBUIGEgPSBtWzFdWzFd
ICogQTIzMjMgLSBtWzFdWzJdICogQTEzMjMgKyBtWzFdWzNdICogQTEyMjM7CisgICAgVCBiID0g
bVsxXVswXSAqIEEyMzIzIC0gbVsxXVsyXSAqIEEwMzIzICsgbVsxXVszXSAqIEEwMjIzOworICAg
IFQgYyA9IG1bMV1bMF0gKiBBMTMyMyAtIG1bMV1bMV0gKiBBMDMyMyArIG1bMV1bM10gKiBBMDEy
MzsKKyAgICBUIGQgPSBtWzFdWzBdICogQTEyMjMgLSBtWzFdWzFdICogQTAyMjMgKyBtWzFdWzJd
ICogQTAxMjM7CisgICAgVCBkZXQgPSBtWzBdWzBdICogKCBhICkKKyAgICAgICAgICAtIG1bMF1b
MV0gKiAoIGIgKQorICAgICAgICAgICsgbVswXVsyXSAqICggYyApCisgICAgICAgICAgLSBtWzBd
WzNdICogKCBkICk7CisgICAgZGV0ID0gVCgxKSAvIGRldDsKKyAgICBtZXRhbDo6bWF0cml4PFQs
IDQsIDQ+IGltOworICAgIGltWzBdWzBdID0gZGV0ICogICAoIGEgKTsKKyAgICBpbVswXVsxXSA9
IGRldCAqIC0gKCBtWzBdWzFdICogQTIzMjMgLSBtWzBdWzJdICogQTEzMjMgKyBtWzBdWzNdICog
QTEyMjMgKTsKKyAgICBpbVswXVsyXSA9IGRldCAqICAgKCBtWzBdWzFdICogQTIzMTMgLSBtWzBd
WzJdICogQTEzMTMgKyBtWzBdWzNdICogQTEyMTMgKTsKKyAgICBpbVswXVszXSA9IGRldCAqIC0g
KCBtWzBdWzFdICogQTIzMTIgLSBtWzBdWzJdICogQTEzMTIgKyBtWzBdWzNdICogQTEyMTIgKTsK
KyAgICBpbVsxXVswXSA9IGRldCAqIC0gKCBiICk7CisgICAgaW1bMV1bMV0gPSBkZXQgKiAgICgg
bVswXVswXSAqIEEyMzIzIC0gbVswXVsyXSAqIEEwMzIzICsgbVswXVszXSAqIEEwMjIzICk7Cisg
ICAgaW1bMV1bMl0gPSBkZXQgKiAtICggbVswXVswXSAqIEEyMzEzIC0gbVswXVsyXSAqIEEwMzEz
ICsgbVswXVszXSAqIEEwMjEzICk7CisgICAgaW1bMV1bM10gPSBkZXQgKiAgICggbVswXVswXSAq
IEEyMzEyIC0gbVswXVsyXSAqIEEwMzEyICsgbVswXVszXSAqIEEwMjEyICk7CisgICAgaW1bMl1b
MF0gPSBkZXQgKiAgICggYyApOworICAgIGltWzJdWzFdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBB
MTMyMyAtIG1bMF1bMV0gKiBBMDMyMyArIG1bMF1bM10gKiBBMDEyMyApOworICAgIGltWzJdWzJd
ID0gZGV0ICogICAoIG1bMF1bMF0gKiBBMTMxMyAtIG1bMF1bMV0gKiBBMDMxMyArIG1bMF1bM10g
KiBBMDExMyApOworICAgIGltWzJdWzNdID0gZGV0ICogLSAoIG1bMF1bMF0gKiBBMTMxMiAtIG1b
MF1bMV0gKiBBMDMxMiArIG1bMF1bM10gKiBBMDExMiApOworICAgIGltWzNdWzBdID0gZGV0ICog
LSAoIGQgKTsKKyAgICBpbVszXVsxXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTEyMjMgLSBtWzBd
WzFdICogQTAyMjMgKyBtWzBdWzJdICogQTAxMjMgKTsKKyAgICBpbVszXVsyXSA9IGRldCAqIC0g
KCBtWzBdWzBdICogQTEyMTMgLSBtWzBdWzFdICogQTAyMTMgKyBtWzBdWzJdICogQTAxMTMgKTsK
KyAgICBpbVszXVszXSA9IGRldCAqICAgKCBtWzBdWzBdICogQTEyMTIgLSBtWzBdWzFdICogQTAy
MTIgKyBtWzBdWzJdICogQTAxMTIgKTsKKyAgICByZXR1cm4gaW07Cit9CispIikKKworUFJPR1JB
TV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBi
b29sIEFOR0xFX2VxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJyYXk8VCwgTj4g
dikKK3sKKyAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgICBpZiAodVtp
XSAhPSB2W2ldKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CispIikKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUobm90RXF1YWxBcnJheSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVfQUxXQVlTX0lO
TElORSBib29sIEFOR0xFX25vdEVxdWFsKG1ldGFsOjphcnJheTxULCBOPiB1LCBtZXRhbDo6YXJy
YXk8VCwgTj4gdikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKHUsdik7Cit9CispIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVxdWFsQXJyYXkoKSkKKworUFJPR1JBTV9QUkVMVURFX0RF
Q0xBUkUoZXF1YWxWZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYm9vbCBBTkdMRV9lcXVh
bChtZXRhbDo6dmVjPFQsIE4+IHUsIG1ldGFsOjp2ZWM8VCwgTj4gdikKK3sKKyAgICByZXR1cm4g
bWV0YWw6OmFsbCh1ID09IHYpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmNs
dWRlX21ldGFsX21hdGgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZXF1YWxNYXRyaXgs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQg
QywgaW50IFI+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfZXF1YWwobWV0YWw6Om1h
dHJpeDxULCBDLCBSPiBhLCBtZXRhbDo6bWF0cml4PFQsIEMsIFI+IGIpCit7CisgICAgZm9yIChp
bnQgYyA9IDA7IGMgPCBDOyArK2MpCisgICAgeworICAgICAgICBpZiAoIUFOR0xFX2VxdWFsKGFb
Y10sIGJbY10pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVxdWFsVmVjdG9yKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKG5vdEVxdWFsVmVj
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
aW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGJvb2wgQU5HTEVfbm90RXF1YWwobWV0YWw6OnZl
YzxULCBOPiB1LCBtZXRhbDo6dmVjPFQsIE4+IHYpCit7CisgICAgcmV0dXJuICFBTkdMRV9lcXVh
bCh1LCB2KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWxWZWN0b3IoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUobm90RXF1YWxTdHJ1Y3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBib29sIEFOR0xFX25vdEVxdWFsU3RydWN0KHRocmVhZCBjb25zdCBUICZhLCB0aHJlYWQgY29u
c3QgVCAmYikKK3sKKyAgICByZXR1cm4gIUFOR0xFX2VxdWFsKGEsIGIpOworfQorKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBlcXVhbFZlY3RvcigpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZXF1YWxNYXRyaXgoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodmVjdG9yRWxlbVJl
ZiwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitzdHJ1Y3QgQU5HTEVfVmVjdG9y
RWxlbVJlZgoreworICAgIHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZtVmVjOworICAgIFQgbVJl
ZjsKKyAgICBjb25zdCBpbnQgbUluZGV4OworICAgIH5BTkdMRV9WZWN0b3JFbGVtUmVmKCkgeyBt
VmVjW21JbmRleF0gPSBtUmVmOyB9CisgICAgQU5HTEVfVmVjdG9yRWxlbVJlZih0aHJlYWQgbWV0
YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaW5kZXgpCisgICAgICAgIDogbVZlYyh2ZWMpLCBtUmVm
KHZlY1tpbmRleF0pLCBtSW5kZXgoaW5kZXgpCisgICAge30KKyAgICBvcGVyYXRvciB0aHJlYWQg
VCAmKCkgeyByZXR1cm4gbVJlZjsgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPiBBTkdMRV9lbGVt
X3JlZih0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiAmdmVjLCBpbnQgaW5kZXgpCit7CisgICAgcmV0
dXJuIEFOR0xFX1ZlY3RvckVsZW1SZWY8VCwgTj4odmVjLCBpbmRleCk7Cit9CispIikKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUoc3dpenpsZVJlZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBWTiwgaW50IFNOPgorc3RydWN0IEFOR0xF
X1N3aXp6bGVSZWYKK3sKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxULCBWTj4gJm1WZWM7CisgICAg
bWV0YWw6OnZlYzxULCBTTj4gbVJlZjsKKyAgICBpbnQgbUluZGljZXNbU05dOworICAgIH5BTkdM
RV9Td2l6emxlUmVmKCkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU047ICsr
aSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGogPSBtSW5kaWNlc1tpXTsKKyAg
ICAgICAgICAgIG1WZWNbal0gPSBtUmVmW2ldOworICAgICAgICB9CisgICAgfQorICAgIEFOR0xF
X1N3aXp6bGVSZWYodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTj4gJnZlYywgdGhyZWFkIGNvbnN0IGlu
dCAqaW5kaWNlcykKKyAgICAgICAgOiBtVmVjKHZlYykKKyAgICB7CisgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgU047ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGog
PSBpbmRpY2VzW2ldOworICAgICAgICAgICAgbUluZGljZXNbaV0gPSBqOworICAgICAgICAgICAg
bVJlZltpXSA9IG1WZWNbal07CisgICAgICAgIH0KKyAgICB9CisgICAgb3BlcmF0b3IgdGhyZWFk
IG1ldGFsOjp2ZWM8VCwgU04+ICYoKSB7IHJldHVybiBtUmVmOyB9Cit9OwordGVtcGxhdGUgPHR5
cGVuYW1lIFQsIGludCBOPgorQU5HTEVfQUxXQVlTX0lOTElORSBBTkdMRV9WZWN0b3JFbGVtUmVm
PFQsIE4+IEFOR0xFX3N3aXp6bGVfcmVmKHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGlu
dCBpMCkKK3sKKyAgICByZXR1cm4gQU5HTEVfVmVjdG9yRWxlbVJlZjxULCBOPih2ZWMsIGluZGV4
KTsKK30KK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgTj4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
QU5HTEVfU3dpenpsZVJlZjxULCBOLCAyPiBBTkdMRV9zd2l6emxlX3JlZih0aHJlYWQgbWV0YWw6
OnZlYzxULCBOPiAmdmVjLCBpbnQgaTAsIGludCBpMSkKK3sKKyAgICBjb25zdCBpbnQgaXNbXSA9
IHsgaTAsIGkxIH07CisgICAgcmV0dXJuIEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMj4odmVjLCBp
cyk7Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IEFOR0xFX1N3aXp6bGVSZWY8VCwgTiwgMz4gQU5HTEVfc3dpenpsZV9yZWYodGhyZWFkIG1ldGFs
Ojp2ZWM8VCwgTj4gJnZlYywgaW50IGkwLCBpbnQgaTEsIGludCBpMikKK3sKKyAgICBjb25zdCBp
bnQgaXNbXSA9IHsgaTAsIGkxLCBpMiB9OworICAgIHJldHVybiBBTkdMRV9Td2l6emxlUmVmPFQs
IE4sIDM+KHZlYywgaXMpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgorQU5HTEVf
QUxXQVlTX0lOTElORSBBTkdMRV9Td2l6emxlUmVmPFQsIE4sIDQ+IEFOR0xFX3N3aXp6bGVfcmVm
KHRocmVhZCBtZXRhbDo6dmVjPFQsIE4+ICZ2ZWMsIGludCBpMCwgaW50IGkxLCBpbnQgaTIsIGlu
dCBpMykKK3sKKyAgICBjb25zdCBpbnQgaXNbXSA9IHsgaTAsIGkxLCBpMiwgaTMgfTsKKyAgICBy
ZXR1cm4gQU5HTEVfU3dpenpsZVJlZjxULCBOLCA0Pih2ZWMsIGlzKTsKK30KKykiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgdmVjdG9yRWxlbVJlZigpKQorCitQUk9HUkFNX1BSRUxVREVfREVD
TEFSRShvdXQsIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfT3V0Cit7
CisgICAgVCBtVGVtcDsKKyAgICB0aHJlYWQgVCAmbURlc3Q7CisgICAgfkFOR0xFX091dCgpIHsg
bURlc3QgPSBtVGVtcDsgfQorICAgIEFOR0xFX091dCh0aHJlYWQgVCAmZGVzdCkKKyAgICAgICAg
OiBtRGVzdChkZXN0KQorICAgIHt9CisgICAgb3BlcmF0b3IgdGhyZWFkIFQgJigpIHsgcmV0dXJu
IG1UZW1wOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IEFOR0xFX091dDxUPiBBTkdMRV9vdXQodGhyZWFkIFQgJmRlc3QpCit7CisgICAgcmV0dXJuIEFO
R0xFX091dDxUPihkZXN0KTsKK30KKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRShpbm91
dCwgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBBTkdMRV9Jbk91dAoreworICAg
IFQgbVRlbXA7CisgICAgdGhyZWFkIFQgJm1EZXN0OworICAgIH5BTkdMRV9Jbk91dCgpIHsgbURl
c3QgPSBtVGVtcDsgfQorICAgIEFOR0xFX0luT3V0KHRocmVhZCBUICZkZXN0KQorICAgICAgICA6
IG1UZW1wKGRlc3QpLCBtRGVzdChkZXN0KQorICAgIHt9CisgICAgb3BlcmF0b3IgdGhyZWFkIFQg
JigpIHsgcmV0dXJuIG1UZW1wOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIEFOR0xFX0luT3V0PFQ+IEFOR0xFX2lub3V0KHRocmVhZCBUICZkZXN0KQor
eworICAgIHJldHVybiBBTkdMRV9Jbk91dDxUPihkZXN0KTsKK30KKykiKQorCitQUk9HUkFNX1BS
RUxVREVfREVDTEFSRShmbGF0dGVuQXJyYXksIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgQU5HTEVfZmxhdHRlbl9pbXBsCit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJ
TkUgdGhyZWFkIFQgKmV4ZWModGhyZWFkIFQgJngpCisgICAgeworICAgICAgICByZXR1cm4gJng7
CisgICAgfQorfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KK3N0cnVjdCBBTkdM
RV9mbGF0dGVuX2ltcGw8bWV0YWw6OmFycmF5PFQsIE4+PgoreworICAgIHN0YXRpYyBBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gZXhlYyh0aHJlYWQgbWV0YWw6OmFycmF5PFQsIE4+ICZhcnIpIC0+
IFQKKyAgICB7CisgICAgICAgIHJldHVybiBBTkdMRV9mbGF0dGVuX2ltcGw8VD46OmV4ZWMoYXJy
WzBdKTsKKyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX2ZsYXR0ZW4odGhyZWFkIG1ldGFsOjphcnJheTxULCBO
PiAmYXJyKSAtPiBUCit7CisgICAgcmV0dXJuIEFOR0xFX2ZsYXR0ZW5faW1wbDxUPjo6ZXhlYyhh
cnJbMF0pOworfQorKSIpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKGNhc3RWZWN0b3IsIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOMSwgaW50IE4yPgorc3RydWN0IEFOR0xFX2Nh
c3RWZWN0b3Ige307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IE4+CitzdHJ1Y3QgQU5HTEVf
Y2FzdFZlY3RvcjxULCBOLCBOPgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjp2ZWM8VCwgTj4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCBOPiBjb25zdCAmdikKKyAg
ICB7CisgICAgICAgIHJldHVybiB2OworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3N0cnVjdCBBTkdMRV9jYXN0VmVjdG9yPFQsIDIsIDM+Cit7CisgICAgc3RhdGljIEFOR0xFX0FM
V0FZU19JTkxJTkUgbWV0YWw6OnZlYzxULCAyPiBleGVjKHRocmVhZCBtZXRhbDo6dmVjPFQsIDM+
IGNvbnN0ICZ2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHYueHk7CisgICAgfQorfTsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFOR0xFX2Nhc3RWZWN0b3I8VCwgMiwgND4KK3sKKyAg
ICBzdGF0aWMgQU5HTEVfQUxXQVlTX0lOTElORSBtZXRhbDo6dmVjPFQsIDI+IGV4ZWModGhyZWFk
IG1ldGFsOjp2ZWM8VCwgND4gY29uc3QgJnYpCisgICAgeworICAgICAgICByZXR1cm4gdi54eTsK
KyAgICB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQU5HTEVfY2FzdFZlY3Rv
cjxULCAzLCA0PgoreworICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjp2ZWM8
VCwgMz4gZXhlYyh0aHJlYWQgbWV0YWw6OnZlYzxULCA0PiBjb25zdCAmdikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhc190eXBlPG1ldGFsOjp2ZWM8VCwgMz4+KHYpOworICAgIH0KK307Cit0ZW1w
bGF0ZSA8aW50IE4xLCBpbnQgTjIsIHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIG1l
dGFsOjp2ZWM8VCwgTjE+IEFOR0xFX2Nhc3QodGhyZWFkIG1ldGFsOjp2ZWM8VCwgTjI+IGNvbnN0
ICZ2KQoreworICAgIHJldHVybiBBTkdMRV9jYXN0VmVjdG9yPFQsIE4xLCBOMj46OmV4ZWModik7
Cit9CispIikKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoY2FzdE1hdHJpeCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBDMSwgaW50IFIx
LCBpbnQgQzIsIGludCBSMiwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK3N0cnVjdCBBTkdMRV9j
YXN0TWF0cml4Cit7CisgICAgc3RhdGljIEFOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJp
eDxULCBDMSwgUjE+IGV4ZWModGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAm
bTIpCisgICAgeworICAgICAgICBtZXRhbDo6bWF0cml4PFQsIEMxLCBSMT4gbTE7CisgICAgICAg
IGNvbnN0IGludCBNaW5DID0gQzEgPD0gQzIgPyBDMSA6IEMyOworICAgICAgICBjb25zdCBpbnQg
TWluUiA9IFIxIDw9IFIyID8gUjEgOiBSMjsKKyAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBN
aW5DOyArK2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgTWlu
UjsgKytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gbTJbY11b
cl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCByID0gUjI7IHIgPCBSMTsg
KytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3JdID0gYyA9PSByID8g
VCgxKSA6IFQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQg
YyA9IEMyOyBjIDwgQzE7ICsrYykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBSMTsgKytyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG0xW2NdW3Jd
ID0gYyA9PSByID8gVCgxKSA6IFQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG0xOworICAgIH0KK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IEMxLCBp
bnQgUjEsIGludCBDMiwgaW50IFIyPgorc3RydWN0IEFOR0xFX2Nhc3RNYXRyaXg8VCwgQzEsIFIx
LCBDMiwgUjIsIEFOR0xFX2VuYWJsZV9pZl90PChDMSA8PSBDMiAmJiBSMSA8PSBSMik+Pgorewor
ICAgIHN0YXRpYyBBTkdMRV9BTFdBWVNfSU5MSU5FIG1ldGFsOjptYXRyaXg8VCwgQzEsIFIxPiBl
eGVjKHRocmVhZCBtZXRhbDo6bWF0cml4PFQsIEMyLCBSMj4gY29uc3QgJm0yKQorICAgIHsKKyAg
ICAgICAgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IG0xOworICAgICAgICBmb3IgKHNpemVfdCBj
ID0gMDsgYyA8IEMxOyArK2MpCisgICAgICAgIHsKKyAgICAgICAgICAgIG0xW2NdID0gQU5HTEVf
Y2FzdDxSMT4obTJbY10pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtMTsKKyAgICB9Cit9
OwordGVtcGxhdGUgPGludCBDMSwgaW50IFIxLCBpbnQgQzIsIGludCBSMiwgdHlwZW5hbWUgVD4K
K0FOR0xFX0FMV0FZU19JTkxJTkUgbWV0YWw6Om1hdHJpeDxULCBDMSwgUjE+IEFOR0xFX2Nhc3Qo
dGhyZWFkIG1ldGFsOjptYXRyaXg8VCwgQzIsIFIyPiBjb25zdCAmbSkKK3sKKyAgICByZXR1cm4g
QU5HTEVfY2FzdE1hdHJpeDxULCBDMSwgUjEsIEMyLCBSMj46OmV4ZWMobSk7Cit9OworKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfaWYoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc3RWZWN0b3IoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGVuc29yLCBSIigK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QuLi4gRFM+CitzdHJ1Y3QgQU5HTEVfdGVuc29y
X3RyYWl0czsKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgRD4KK3N0cnVjdCBBTkdMRV90
ZW5zb3JfdHJhaXRzPFQsIEQ+Cit7CisgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQg
fTsKKyAgICB1c2luZyBpbm5lcl90eXBlID0gVDsKKyAgICB1c2luZyBvdXRlcl90eXBlID0gaW5u
ZXJfdHlwZVtEXTsKK307Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IEQsIHNpemVfdC4u
LiBEUz4KK3N0cnVjdCBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIEQsIERTLi4uPgoreworICAgIGVu
dW0gOiBzaXplX3QgeyBvdXRlcl9kaW0gPSBEIH07CisgICAgdXNpbmcgaW5uZXJfdHlwZSA9IHR5
cGVuYW1lIEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+OjpvdXRlcl90eXBlOworICAgIHVz
aW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworfTsKK3RlbXBsYXRlIDxzaXplX3QgRCwg
dHlwZW5hbWUgdmFsdWVfdHlwZV8sIHR5cGVuYW1lIGlubmVyX3R5cGVfPgorc3RydWN0IEFOR0xF
X3RlbnNvcl9pbXBsCit7CisgICAgZW51bSA6IHNpemVfdCB7IG91dGVyX2RpbSA9IEQgfTsKKyAg
ICB1c2luZyB2YWx1ZV90eXBlID0gdmFsdWVfdHlwZV87CisgICAgdXNpbmcgaW5uZXJfdHlwZSA9
IGlubmVyX3R5cGVfOworICAgIHVzaW5nIG91dGVyX3R5cGUgPSBpbm5lcl90eXBlW0RdOworICAg
IG91dGVyX3R5cGUgX2RhdGE7CisgICAgQU5HTEVfQUxXQVlTX0lOTElORSBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG91dGVyX2RpbTsgfQorICAgIEFOR0xFX0FMV0FZU19JTkxJTkUgaW5u
ZXJfdHlwZSAmb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gX2RhdGFbaV07IH0KKyAgICBB
TkdMRV9BTFdBWVNfSU5MSU5FIGNvbnN0IGlubmVyX3R5cGUgJm9wZXJhdG9yW10oc2l6ZV90IGkp
IGNvbnN0IHsgcmV0dXJuIF9kYXRhW2ldOyB9Cit9OwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNp
emVfdC4uLiBEUz4KK3VzaW5nIEFOR0xFX3RlbnNvciA9IEFOR0xFX3RlbnNvcl9pbXBsPAorICAg
IEFOR0xFX3RlbnNvcl90cmFpdHM8VCwgRFMuLi4+OjpvdXRlcl9kaW0sCisgICAgVCwKKyAgICB0
eXBlbmFtZSBBTkdMRV90ZW5zb3JfdHJhaXRzPFQsIERTLi4uPjo6aW5uZXJfdHlwZT47CispIikK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUoZ3JhZGllbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICBSIigKK3RlbXBsYXRlIDxpbnQgTj4KK3N0cnVjdCBBTkdMRV9ncmFkaWVudF90cmFpdHM7
Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFOR0xFX2dyYWRpZW50X3RyYWl0czwyPiB7IHVzaW5nIHR5
cGUgPSBtZXRhbDo6Z3JhZGllbnQyZDsgfTsKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQU5HTEVfZ3Jh
ZGllbnRfdHJhaXRzPDM+IHsgdXNpbmcgdHlwZSA9IG1ldGFsOjpncmFkaWVudDNkOyB9OworCit0
ZW1wbGF0ZSA8aW50IE4+Cit1c2luZyBBTkdMRV9ncmFkaWVudCA9IHR5cGVuYW1lIEFOR0xFX2dy
YWRpZW50X3RyYWl0czxOPjo6dHlwZTsKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK3N0cnVjdCBBTkdMRV9UZXh0dXJlRW52Cit7CisgICAgdGhyZWFkIFQgKnRleHR1cmU7
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyICpzYW1wbGVyOworfTsKKykiKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRShmdW5jdGlvbkNvbnN0YW50cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorI2RlZmluZSBBTkdMRV9TQU1QTEVfQ09NUEFSRV9HUkFESUVOVF9JTkRFWCAwCisj
ZGVmaW5lIEFOR0xFX1NBTVBMRV9DT01QQVJFX0xPRF9JTkRFWCAgICAgIDEKKyNkZWZpbmUgQU5H
TEVfUkFTVEVSSVpBVElPTl9ESVNDQVJEX0lOREVYICAgMgorCitjb25zdGFudCBib29sIEFOR0xF
X1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCBbW2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1NBTVBM
RV9DT01QQVJFX0dSQURJRU5UX0lOREVYKV1dOworY29uc3RhbnQgYm9vbCBBTkdMRV9Vc2VTYW1w
bGVDb21wYXJlTG9kICAgICAgW1tmdW5jdGlvbl9jb25zdGFudChBTkdMRV9TQU1QTEVfQ09NUEFS
RV9MT0RfSU5ERVgpXV07Citjb25zdGFudCBib29sIEFOR0xFX1Jhc3Rlcml6YXRpb25EaXNjYXJk
ICAgICBbW2Z1bmN0aW9uX2NvbnN0YW50KEFOR0xFX1JBU1RFUklaQVRJT05fRElTQ0FSRF9JTkRF
WCldXTsKKykiKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXhlbEZldGNoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleGVsRmV0Y2goZW52LCAuLi4p
IEFOR0xFX3RleGVsRmV0Y2hfaW1wbCgqZW52LnRleHR1cmUsIF9fVkFfQVJHU19fKQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90
ZXhlbEZldGNoX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjppbnQyIGNvbnN0ICZjb29yZCwKKyAgICB1aW50IGxldmVsKQoreworICAgIHJldHVy
biB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQpLCBsZXZlbCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hf
aW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6Omlu
dDMgY29uc3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
cmVhZCh1aW50Myhjb29yZCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaF9pbXBsKAorICAgIHRocmVh
ZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
aW50MyBjb25zdCAmY29vcmQsCisgICAgdWludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVy
ZS5yZWFkKHVpbnQyKGNvb3JkLnh5KSwgdWludChjb29yZC56KSwgbGV2ZWwpOworfQorKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9E
RUNMQVJFKHRleGVsRmV0Y2hPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNk
ZWZpbmUgQU5HTEVfdGV4ZWxGZXRjaE9mZnNldChlbnYsIC4uLikgQU5HTEVfdGV4ZWxGZXRjaE9m
ZnNldF9pbXBsKCplbnYudGV4dHVyZSwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleGVsRmV0Y2hPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OmludDIgY29uc3QgJmNvb3JkLAorICAgIHVpbnQgbGV2ZWwsCisgICAgdGhyZWFkIG1ldGFsOjpp
bnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUucmVhZCh1aW50Mihjb29y
ZCArIG9mZnNldCksIGxldmVsKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitB
TkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4ZWxGZXRjaE9mZnNldF9pbXBsKAorICAg
IHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6aW50MyBjb25zdCAm
Y29vcmQsCisgICAgdWludCBsZXZlbCwKKyAgICB0aHJlYWQgbWV0YWw6OmludDMgY29uc3QgJm9m
ZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5yZWFkKHVpbnQzKGNvb3JkICsgb2Zmc2V0KSwg
bGV2ZWwpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXhlbEZldGNoT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0
dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZj
b29yZCwKKyAgICB1aW50IGxldmVsLAorICAgIHRocmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zm
c2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnJlYWQodWludDIoY29vcmQueHkgKyBvZmZzZXQp
LCB1aW50KGNvb3JkLnopLCBsZXZlbCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlKGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19f
KQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVfZ2VuZXJpY19mbG9hdDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9m
bG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRl
eHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAg
IHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25z
dCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisgICAg
ZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2dlbmVyaWNfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKK3sKKyAgICBy
ZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1
cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQg
bWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMg
Y29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZV9kZXB0aDJkX2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9p
bXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQg
bWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMg
Y29uc3QgJmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29y
ZC54eSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aDJkX2Zsb2F0M19mbG9hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVw
dGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJp
YXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCBtZXRh
bDo6YmlhcyhiaWFzKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9kZXB0aDJkYXJyYXlfZmxvYXQ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1l
dGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHks
IHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgY29vcmQudyk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZV9kZXB0aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAg
UiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlX2ltcGwoCisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkX2FycmF5PFQ+ICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgY29tcGFyZSkKK3sKKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eXosIHVpbnQo
bWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgY29tcGFyZSk7Cit9CispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV9k
ZXB0aGN1YmVfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwo
CisgICAgdGhyZWFkIG1ldGFsOjpkZXB0aGN1YmU8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQu
eHl6KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9H
UkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX2RlcHRoY3ViZV9mbG9hdDRfZmxvYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRl
cHRoY3ViZTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0
IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwg
bWV0YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVfdGV4dHVyZTJkYXJyYXlf
ZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlX2ltcGwoCisgICAgdGhy
ZWFkIG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFs
OjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0
ICZjb29yZCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHks
IHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZV90ZXh0
dXJlMmRhcnJheV9mbG9hdDNfZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1
cmVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29y
ZC56KSksIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlX3RleHR1cmUy
ZGFycmF5X2Zsb2F0NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZV9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpKTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0NF9mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0
ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAg
ICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6LCB1aW50KG1ldGFsOjpy
b3VuZChjb29yZC53KSksIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZSgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
MURMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVy
ZTFETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMURMb2RfaW1wbCgqZW52LnRleHR1cmUsICpl
bnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRExvZF9pbXBsKAorICAgIHRo
cmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKyAgICB0aHJlYWQgZmxvYXQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6Omxl
dmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZTFEUHJvaiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlMURQcm9qKGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlMURQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFf
QVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlMURQcm9qX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzID0gMCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueC9jb29yZC55LCBtZXRh
bDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVf
QUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pfaW1wbCgKKyAgICB0aHJlYWQg
VGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBs
ZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJp
YXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54L2Nv
b3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlMURQcm9q
TG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUx
RFByb2pMb2QoZW52LCAuLi4pIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUxRFByb2pMb2RfaW1w
bCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBs
ZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmNvb3Jk
LAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVy
LCBjb29yZC54L2Nvb3JkLnksIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
MURQcm9qTG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0
IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueC9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30K
KykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BS
RUxVREVfREVDTEFSRSh0ZXh0dXJlMkQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNk
ZWZpbmUgQU5HTEVfdGV4dHVyZTJEKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRfaW1wbCgqZW52
LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRF9pbXBs
KAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxl
ciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZTJEX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFk
IG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQy
IGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmJpYXMoYmlhcykpOworfQorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
MkRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRv
IEFOR0xFX3RleHR1cmUyRF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4
dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVf
REVDTEFSRSh0ZXh0dXJlMkRMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZp
bmUgQU5HTEVfdGV4dHVyZTJETG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlMkRMb2RfaW1wbCgq
ZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRExv
ZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAm
Y29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNh
bXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlMkRQcm9qLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3Rl
eHR1cmUyRFByb2ooZW52LCAuLi4pIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgqZW52LnRleHR1
cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pfaW1wbCgK
KyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIg
Y29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAor
ICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVy
LCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUy
RFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29u
c3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6YmlhcyhiaWFzKSk7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVM
VURFX0RFQ0xBUkUodGV4dHVyZTJEUHJvakxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAorI2RlZmluZSBBTkdMRV90ZXh0dXJlMkRQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJl
MkRQcm9qTG9kX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19fKQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlMkRQcm9qTG9kX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUs
CisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBt
ZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQueiwgbWV0YWw6OmxldmVs
KGxldmVsKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUyRFByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlM0RMb2QsCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNETG9kKGVu
diwgLi4uKSBBTkdMRV90ZXh0dXJlM0RMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxl
ciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmUzRExvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0
dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6bGV2
ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigp
KQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlM0RQcm9qLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmUzRFByb2ooZW52LCAuLi4pIEFO
R0xFX3RleHR1cmUzRFByb2pfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9B
UkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmUzRFByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQorewor
ICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0
YWw6OmJpYXMoYmlhcykpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmUzRFByb2pMb2QsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZTNEUHJvakxvZChl
bnYsIC4uLikgQU5HTEVfdGV4dHVyZTNEUHJvakxvZF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5z
YW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZTNEUHJvakxvZF9pbXBsKAorICAgIHRo
cmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxv
YXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJl
Q3ViZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJl
Q3ViZShlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVfaW1wbCgqZW52LnRleHR1cmUsICplbnYu
c2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlX2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCkKK3sKKyAgICByZXR1
cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlQ3ViZV9p
bXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29v
cmQsCisgICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxl
ciwgY29vcmQsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlQ3Vi
ZUxvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJl
Q3ViZUxvZChlbnYsIC4uLikgQU5HTEVfdGV4dHVyZUN1YmVMb2RfaW1wbCgqZW52LnRleHR1cmUs
ICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVDdWJlTG9kX2ltcGwoCisg
ICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNv
bnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAg
ICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQsIG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVDdWJlUHJv
aiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlQ3Vi
ZVByb2ooZW52LCAuLi4pIEFOR0xFX3RleHR1cmVDdWJlUHJval9pbXBsKCplbnYudGV4dHVyZSwg
KmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+
CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUN1YmVQcm9qX2ltcGwoCisg
ICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNv
bnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAg
ICBmbG9hdCBiaWFzID0gMCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHl6L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlQ3ViZVByb2pMb2QsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUg
QU5HTEVfdGV4dHVyZUN1YmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlQ3ViZVByb2pM
b2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3Rl
eHR1cmVDdWJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAg
IHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6
OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwpCit7CisgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2
ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQ
Uk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlR3JhZChlbnYsIC4uLikgQU5HTEVfdGV4dHVy
ZUdyYWRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURF
X0RFQ0xBUkUodGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmUsIGludCBO
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGZsb2F0LCBOPiBjb25zdCAmY29vcmQs
CisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZkUGR4LAorICAgIHRocmVh
ZCBtZXRhbDo6dmVjPGZsb2F0LCBOPiBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVy
ZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50PE4+KGRQZHgsIGRQZHkpKTsK
K30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkX2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRl
eHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRo
cmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6
OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpOworfQorKSIs
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRocmVh
ZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2Ft
cGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29u
c3QgJmRQZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5
LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQ
ZHkpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfZGVwdGgyZF9mbG9hdDNfZmxvYXQy
X2Zsb2F0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdyYWRfaW1wbCgKKyAg
ICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1
cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFk
aWVudDJkKGRQZHgsIGRQZHkpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0
YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSkpID4gY29vcmQueik7CisgICAgfQorfQorKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUdyYWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZUdyYWRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgy
ZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVh
ZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNv
bnN0ICZkUGR5KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFy
ZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQoY29vcmQueikpLCBjb29yZC53
LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQo
ZFBkeCwgZFBkeSkpID4gY29vcmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUdyYWQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRfZGVwdGhj
dWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0
dXJlR3JhZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGhjdWJlPFQ+ICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCit7CisgICAgaWYg
KEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5eiwg
Y29vcmQudywgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSkpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGUo
c2FtcGxlciwgY29vcmQueHl6LCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgsIGRQZHkpKSA+IGNv
b3JkLncpOworICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25D
b25zdGFudHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkKCkpCisKK1BS
T0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkX3RleHR1cmVjdWJlX2Zsb2F0M19mbG9h
dDNfZmxvYXQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3JhZF9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZWN1YmU8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNv
bnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmZFBkeSkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQsIG1ldGFsOjpncmFkaWVudGN1YmUoZFBkeCwgZFBkeSkpOwor
fQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlR3JhZCgpKQorCitQUk9HUkFN
X1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlR3JhZE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlR3JhZE9mZnNldChlbnYsIC4uLikgQU5HTEVf
dGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9B
UkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJP
R1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19mbG9hdE5fZmxv
YXROX2Zsb2F0Tl9pbnROLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dHVyZSwgaW50IE4+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAg
ICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFs
Ojp2ZWM8ZmxvYXQsIE4+IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OnZlYzxmbG9h
dCwgTj4gY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjp2ZWM8ZmxvYXQsIE4+IGNvbnN0
ICZkUGR5LAorICAgIHRocmVhZCBtZXRhbDo6dmVjPGludCwgTj4gY29uc3QgJm9mZnNldCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIEFOR0xFX2dyYWRpZW50
PE4+KGRQZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBncmFkaWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZzZXQo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfZ2VuZXJpY19m
bG9hdDNfZmxvYXQyX2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdM
RV90ZXh0dXJlR3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3Qg
JmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhyZWFk
IG1ldGFsOjppbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxl
KHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpn
cmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlR3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIsCisgICAg
ICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVHcmFkT2Zmc2V0X2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgbWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKK3sK
KyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6
OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7
Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisK
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQz
X2Zsb2F0Ml9mbG9hdDJfaW50MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUdy
YWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisg
ICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAm
ZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQg
bWV0YWw6OmludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29t
cGFyZUdyYWRpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1
cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpncmFk
aWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3Jk
Lnh5LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3JkLnopOwor
ICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25zdGFudHMo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRhcnJheV9mbG9hdDRf
ZmxvYXQyX2Zsb2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlR3Jh
ZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVy
ZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFk
IG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNv
bnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZkUGR5LAorICAgIHRo
cmVhZCBtZXRhbDo6aW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1w
bGVDb21wYXJlR3JhZGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
dGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91
bmQoY29vcmQueikpLCBjb29yZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zm
c2V0KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgdWludChtZXRhbDo6cm91bmQo
Y29vcmQueikpLCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KSA+IGNvb3Jk
LncpOworICAgIH0KK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25Db25z
dGFudHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVHcmFkT2Zmc2V0KCkpCisK
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoY3ViZV9mbG9h
dDRfZmxvYXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
R3JhZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGhjdWJlPFQ+ICZ0ZXh0dXJl
LAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQg
bWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29u
c3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHksCisgICAgdGhy
ZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2Ft
cGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgbWV0YWw6OmdyYWRpZW50Y3ViZShkUGR4LCBkUGR5KSwg
b2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUdyYWRPZmZz
ZXQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUdyYWRPZmZzZXRfdGV4dHVy
ZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDNfaW50MywKKyAgICAgICAgICAgICAgICAgICAgICAg
IFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5H
TEVfdGV4dHVyZUdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmVjdWJl
PFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFs
OjpmbG9hdDMgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQ
ZHksCisgICAgdGhyZWFkIG1ldGFsOjppbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJu
IHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6Z3JhZGllbnRjdWJlKGRQZHgs
IGRQZHkpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
R3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kLAorICAg
ICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVMb2QoZW52LCAu
Li4pIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19W
QV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKwor
UFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF9nZW5lcmljX2Zsb2F0MiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdM
RV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZUxvZF9pbXBsKAorICAgIHRocmVhZCBU
ZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxl
ciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2
ZWwpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBtZXRhbDo6
bGV2ZWwobGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUxv
ZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlTG9kX2dlbmVyaWNfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVy
ZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBm
bG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQs
IG1ldGFsOjpsZXZlbChsZXZlbCkpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlTG9kKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfZGVwdGgy
ZF9mbG9hdDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAg
ICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICBpZiAoQU5HTEVfVXNlU2FtcGxlQ29tcGFy
ZUxvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBs
ZV9jb21wYXJlKHNhbXBsZXIsIGNvb3JkLnh5LCBjb29yZC56LCBtZXRhbDo6bGV2ZWwobGV2ZWwp
KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
Pih0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmxldmVsKGxldmVsKSkg
PiBjb29yZC56KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlTG9kKCkpCisK
K1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQz
LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FO
R0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kX2ltcGwoCisgICAgdGhyZWFk
IG1ldGFsOjp0ZXh0dXJlMmRfYXJyYXk8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpz
YW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZj
b29yZCwKKyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgbWV0YWw6OmxldmVs
KGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2QoKSkK
KworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9h
dDQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
QU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RfaW1wbCgKKyAgICB0aHJl
YWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3Qg
JmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShz
YW1wbGVyLCBjb29yZC54eXosIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLncpKSwgbWV0YWw6Omxl
dmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVMb2Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZUxvZE9mZnNldCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAorI2RlZmluZSBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0KGVudiwg
Li4uKSBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBs
ZXIsIF9fVkFfQVJHU19fKQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FM
V0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFk
IFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1w
bGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBs
ZXZlbCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0
dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZCwgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zmc2V0KTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1
dG8gQU5HTEVfdGV4dHVyZUxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhy
ZWFkIGludDMgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2Ft
cGxlciwgY29vcmQsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RP
ZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAg
dGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6
ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICBmbG9hdCBsZXZlbCwKKyAgICB0aHJlYWQgaW50MiBj
b25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUo
c2FtcGxlciwgY29vcmQueHksIGNvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
dGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHksIG1ldGFsOjpsZXZlbChsZXZlbCksIG9m
ZnNldCkgPiBjb29yZC56KTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5H
TEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0
aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29u
c3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZz
ZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5LCB1aW50
KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xF
X3RleHR1cmVMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUyZF9hcnJh
eTxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVs
LAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5eiwgdWludChtZXRhbDo6cm91bmQoY29vcmQudykpLCBt
ZXRhbDo6bGV2ZWwobGV2ZWwpLCBvZmZzZXQpOworfQorKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlT2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVPZmZzZXQoZW52LCAu
Li4pIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgqZW52LnRleHR1cmUsICplbnYuc2FtcGxlciwg
X19WQV9BUkdTX18pCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlT
X0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVy
ZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisg
ICAgdGhyZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9m
ZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQsIG9mZnNl
dCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElO
RSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4
dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhy
ZWFkIGZsb2F0MiBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwK
KyAgICBmbG9hdCBiaWFzKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBj
b29yZCwgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVPZmZzZXRf
aW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNh
bXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQsCisg
ICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1w
bGUoc2FtcGxlciwgY29vcmQueHksIHVpbnQobWV0YWw6OnJvdW5kKGNvb3JkLnopKSwgb2Zmc2V0
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5F
IGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0
dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJl
YWQgZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0LAor
ICAgIGZsb2F0IGJpYXMpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5LCB1aW50KG1ldGFsOjpyb3VuZChjb29yZC56KSksIG1ldGFsOjpiaWFzKGJpYXMpLCBv
ZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUg
JnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAg
IHRocmVhZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZz
ZXQpCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLCBvZmZzZXQp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUg
YXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1
cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVh
ZCBmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQsCisg
ICAgZmxvYXQgYmlhcykKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQsIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlT2Zmc2V0X2ltcGwoCisg
ICAgdGhyZWFkIG1ldGFsOjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgZmxvYXQzIGNvbnN0ICZjb29yZCwK
KyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54eSwgb2Zmc2V0KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZU9mZnNldF9pbXBsKAor
ICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIGZsb2F0MyBjb25zdCAmY29vcmQs
CisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzKQoreworICAg
IHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eSwgbWV0YWw6OmJpYXMoYmlh
cyksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVFbnYo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2osCisgICAgICAgICAgICAg
ICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2ooZW52LCAuLi4pIEFOR0xF
X3RleHR1cmVQcm9qX2ltcGwoKmVudi50ZXh0dXJlLCAqZW52LnNhbXBsZXIsIF9fVkFfQVJHU19f
KQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0
byBBTkdMRV90ZXh0dXJlUHJval9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAor
ICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0
YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgYmlhcyA9IDApCit7CisgICAgcmV0
dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpiaWFz
KGJpYXMpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGJpYXMgPSAwKQor
eworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBt
ZXRhbDo6YmlhcyhiaWFzKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qX2ltcGwoCisgICAgdGhyZWFkIG1ldGFs
Ojp0ZXh0dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBm
bG9hdCBiaWFzID0gMCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29v
cmQueHl6L2Nvb3JkLncsIG1ldGFsOjpiaWFzKGJpYXMpKTsKK30KKykiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0
dXJlUHJvakdyYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVf
dGV4dHVyZVByb2pHcmFkKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgqZW52
LnRleHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVy
ZVByb2pHcmFkX2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxXQVlTX0lO
TElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJl
ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAg
ICB0aHJlYWQgbWV0YWw6OmZsb2F0MyBjb25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpm
bG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHkp
Cit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnos
IG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRl
eHR1cmVQcm9qR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dHVyZT4KK0FOR0xFX0FMV0FZ
U19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRfaW1wbCgKKyAgICB0aHJlYWQgVGV4
dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIs
CisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIHRocmVhZCBtZXRh
bDo6ZmxvYXQyIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQyIGNvbnN0ICZk
UGR5KQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29y
ZC53LCBtZXRhbDo6Z3JhZGllbnQyZChkUGR4LCBkUGR5KSk7Cit9CispIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFS
RSh0ZXh0dXJlUHJvakdyYWRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkX2ltcGwoCisgICAgdGhyZWFkIG1ldGFs
OjpkZXB0aDJkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2FtcGxlciBjb25zdCAm
c2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29vcmQsCisgICAgdGhy
ZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIg
Y29uc3QgJmRQZHkpCit7CisgICAgaWYgKEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVHcmFkaWVudCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNhbXBsZV9jb21w
YXJlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLncsIGNvb3JkLnovY29vcmQudywgbWV0YWw6Omdy
YWRpZW50MmQoZFBkeCwgZFBkeSkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nv
b3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpKSA+IGNvb3JkLnovY29vcmQudyk7
CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkNvbnN0YW50
cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pHcmFkKCkpCisKK1BST0dS
QU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qR3JhZF90ZXh0dXJlM2RfZmxvYXQ0X2Zsb2F0
M19mbG9hdDMsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZF9pbXBs
KAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVhZCBt
ZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBj
b25zdCAmY29vcmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHgsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmRQZHkpCit7CisgICAgcmV0dXJuIHRleHR1cmUu
c2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6Z3JhZGllbnQzZChkUGR4
LCBkUGR5KSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3Jh
ZCgpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4dHVyZVByb2pHcmFk
T2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgqZW52LnRl
eHR1cmUsICplbnYuc2FtcGxlciwgX19WQV9BUkdTX18pCispIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVBy
b2pHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zsb2F0Ml9mbG9hdDJfaW50MiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9B
TFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pHcmFkT2Zmc2V0X2ltcGwoCisgICAg
dGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0
ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZjb29yZCwKKyAgICB0
aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJl
dHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6Z3Jh
ZGllbnQyZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJF
KHRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2ludDIs
CisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJl
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qR3JhZE9mZnNldF9p
bXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6c2Ft
cGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAmY29v
cmQsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDIgY29uc3QgJmRQZHgsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDIgY29uc3QgJmRQZHksCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCkK
K3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywg
bWV0YWw6OmdyYWRpZW50MmQoZFBkeCwgZFBkeSksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qR3JhZE9mZnNldCgpKQorCitQUk9HUkFNX1BSRUxV
REVfREVDTEFSRSh0ZXh0dXJlUHJvakdyYWRPZmZzZXRfZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zs
b2F0Ml9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OmRlcHRoMmQ8VD4gJnRleHR1cmUsCisgICAgdGhy
ZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQ0IGNvbnN0ICZjb29yZCwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeCwK
KyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0MiBjb25zdCAmZFBkeSwKKyAgICB0aHJlYWQgaW50MiBj
b25zdCAmb2Zmc2V0KQoreworICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlR3JhZGllbnQp
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29t
cGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpn
cmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNv
b3JkLnh5L2Nvb3JkLncsIG1ldGFsOjpncmFkaWVudDJkKGRQZHgsIGRQZHkpLCBvZmZzZXQpID4g
Y29vcmQuei9jb29yZC53KTsKKyAgICB9Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlUHJv
akdyYWRPZmZzZXQoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pHcmFk
T2Zmc2V0X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJ
TkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakdyYWRPZmZzZXRfaW1wbCgKKyAgICB0aHJlYWQgbWV0
YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAg
IHRocmVhZCBtZXRhbDo6ZmxvYXQzIGNvbnN0ICZkUGR4LAorICAgIHRocmVhZCBtZXRhbDo6Zmxv
YXQzIGNvbnN0ICZkUGR5LAorICAgIHRocmVhZCBpbnQzIGNvbnN0ICZvZmZzZXQpCit7CisgICAg
cmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5ei9jb29yZC53LCBtZXRhbDo6
Z3JhZGllbnQzZChkUGR4LCBkUGR5KSwgb2Zmc2V0KTsKK30KKykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZVByb2pHcmFkT2Zmc2V0KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHRleHR1cmVQcm9qTG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5l
IEFOR0xFX3RleHR1cmVQcm9qTG9kKGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvakxvZF9pbXBs
KCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKykiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUVudigpKQorCitQUk9HUkFNX1BSRUxVREVfREVDTEFSRSh0
ZXh0dXJlUHJvakxvZF9nZW5lcmljX2Zsb2F0MywKKyAgICAgICAgICAgICAgICAgICAgICAgIFIi
KAordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8g
QU5HTEVfdGV4dHVyZVByb2pMb2RfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwK
KyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1l
dGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVy
biB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC56LCBtZXRhbDo6bGV2ZWwo
bGV2ZWwpKTsKK30KKykiLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pMb2Qo
KSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9h
dDQsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0
dXJlPgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kX2ltcGwo
CisgICAgdGhyZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVy
IGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwK
KyAgICBmbG9hdCBsZXZlbCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwg
Y29vcmQueHkvY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qTG9kKCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNM
QVJFKHRleHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxvYXQ0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgUiIoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBB
TkdMRV90ZXh0dXJlUHJvakxvZF9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6ZGVwdGgyZDxUPiAm
dGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAg
dGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQorewor
ICAgIGlmIChBTkdMRV9Vc2VTYW1wbGVDb21wYXJlTG9kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KHRleHR1cmUuc2FtcGxlX2NvbXBhcmUoc2FtcGxlciwgY29vcmQueHkv
Y29vcmQudywgY29vcmQuei9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih0ZXh0dXJlLnNh
bXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2ZWwpKSA+IGNv
b3JkLnovY29vcmQudyk7CisgICAgfQorfQorKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbkNvbnN0YW50cygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZVByb2pM
b2QoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4dHVyZVByb2pMb2RfdGV4dHVyZTNk
X2Zsb2F0NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFIiKAordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RfaW1wbCgK
KyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0
YWw6OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29u
c3QgJmNvb3JkLAorICAgIGZsb2F0IGxldmVsKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBs
ZShzYW1wbGVyLCBjb29yZC54eXovY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSk7Cit9Cisp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVQcm9qTG9kKCkpCisKK1BST0dSQU1f
UFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9qTG9kT2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0KGVudiwgLi4uKSBB
TkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKCplbnYudGV4dHVyZSwgKmVudi5zYW1wbGVy
LCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdB
WVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pMb2RPZmZzZXRfaW1wbCgKKyAgICB0aHJl
YWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29uc3QgJnNh
bXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3QgJmNvb3JkLAorICAgIGZsb2F0
IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgcmV0dXJuIHRl
eHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3JkLnosIG1ldGFsOjpsZXZlbChsZXZl
bCksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUZXh0dXJlPgorQU5HTEVfQUxX
QVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qTG9kT2Zmc2V0X2ltcGwoCisgICAgdGhy
ZWFkIFRleHR1cmUgJnRleHR1cmUsCisgICAgdGhyZWFkIG1ldGFsOjpzYW1wbGVyIGNvbnN0ICZz
YW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNvbnN0ICZjb29yZCwKKyAgICBmbG9h
dCBsZXZlbCwKKyAgICB0aHJlYWQgaW50MiBjb25zdCAmb2Zmc2V0KQoreworICAgIHJldHVybiB0
ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53LCBtZXRhbDo6bGV2ZWwobGV2
ZWwpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19J
TkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9pbXBsKAorICAgIHRocmVhZCBt
ZXRhbDo6ZGVwdGgyZDxUPiAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6OnNhbXBsZXIgY29u
c3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDQgY29uc3QgJmNvb3JkLAorICAg
IGZsb2F0IGxldmVsLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQpCit7CisgICAgaWYg
KEFOR0xFX1VzZVNhbXBsZUNvbXBhcmVMb2QpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4odGV4dHVyZS5zYW1wbGVfY29tcGFyZShzYW1wbGVyLCBjb29yZC54eS9jb29yZC53
LCBjb29yZC56L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCkpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odGV4dHVyZS5z
YW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQudywgbWV0YWw6OmxldmVsKGxldmVsKSwgb2Zm
c2V0KSA+IGNvb3JkLnovY29vcmQudyk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvakxvZE9mZnNldF9p
bXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTNkPFQ+ICZ0ZXh0dXJlLAorICAgIHRocmVh
ZCBtZXRhbDo6c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0
NCBjb25zdCAmY29vcmQsCisgICAgZmxvYXQgbGV2ZWwsCisgICAgdGhyZWFkIGludDMgY29uc3Qg
Jm9mZnNldCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHl6
L2Nvb3JkLncsIG1ldGFsOjpsZXZlbChsZXZlbCksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlRW52KCkpCisKK1BST0dSQU1fUFJFTFVERV9ERUNMQVJFKHRleHR1cmVQcm9q
T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgUiIoCisjZGVmaW5lIEFOR0xFX3RleHR1
cmVQcm9qT2Zmc2V0KGVudiwgLi4uKSBBTkdMRV90ZXh0dXJlUHJvak9mZnNldF9pbXBsKCplbnYu
dGV4dHVyZSwgKmVudi5zYW1wbGVyLCBfX1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1l
IFRleHR1cmU+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVByb2pPZmZz
ZXRfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAmdGV4dHVyZSwKKyAgICB0aHJlYWQgbWV0YWw6
OnNhbXBsZXIgY29uc3QgJnNhbXBsZXIsCisgICAgdGhyZWFkIG1ldGFsOjpmbG9hdDMgY29uc3Qg
JmNvb3JkLAorICAgIHRocmVhZCBpbnQyIGNvbnN0ICZvZmZzZXQsCisgICAgZmxvYXQgYmlhcyA9
IDApCit7CisgICAgcmV0dXJuIHRleHR1cmUuc2FtcGxlKHNhbXBsZXIsIGNvb3JkLnh5L2Nvb3Jk
LnosIG1ldGFsOjpiaWFzKGJpYXMpLCBvZmZzZXQpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VGV4dHVyZT4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlUHJvak9mZnNl
dF9pbXBsKAorICAgIHRocmVhZCBUZXh0dXJlICZ0ZXh0dXJlLAorICAgIHRocmVhZCBtZXRhbDo6
c2FtcGxlciBjb25zdCAmc2FtcGxlciwKKyAgICB0aHJlYWQgbWV0YWw6OmZsb2F0NCBjb25zdCAm
Y29vcmQsCisgICAgdGhyZWFkIGludDIgY29uc3QgJm9mZnNldCwKKyAgICBmbG9hdCBiaWFzID0g
MCkKK3sKKyAgICByZXR1cm4gdGV4dHVyZS5zYW1wbGUoc2FtcGxlciwgY29vcmQueHkvY29vcmQu
dywgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorQU5HTEVfQUxXQVlTX0lOTElORSBhdXRvIEFOR0xFX3RleHR1cmVQcm9qT2Zmc2V0X2ltcGwo
CisgICAgdGhyZWFkIG1ldGFsOjp0ZXh0dXJlM2Q8VD4gJnRleHR1cmUsCisgICAgdGhyZWFkIG1l
dGFsOjpzYW1wbGVyIGNvbnN0ICZzYW1wbGVyLAorICAgIHRocmVhZCBtZXRhbDo6ZmxvYXQ0IGNv
bnN0ICZjb29yZCwKKyAgICB0aHJlYWQgaW50MyBjb25zdCAmb2Zmc2V0LAorICAgIGZsb2F0IGJp
YXMgPSAwKQoreworICAgIHJldHVybiB0ZXh0dXJlLnNhbXBsZShzYW1wbGVyLCBjb29yZC54eXov
Y29vcmQudywgbWV0YWw6OmJpYXMoYmlhcyksIG9mZnNldCk7Cit9CispIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVFbnYoKSkKKworUFJPR1JBTV9QUkVMVURFX0RFQ0xBUkUodGV4
dHVyZVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBSIigKKyNkZWZpbmUgQU5HTEVfdGV4
dHVyZVNpemUoZW52LCAuLi4pIEFOR0xFX3RleHR1cmVTaXplX2ltcGwoKmVudi50ZXh0dXJlLCBf
X1ZBX0FSR1NfXykKKwordGVtcGxhdGUgPHR5cGVuYW1lIFRleHR1cmU+CitBTkdMRV9BTFdBWVNf
SU5MSU5FIGF1dG8gQU5HTEVfdGV4dHVyZVNpemVfaW1wbCgKKyAgICB0aHJlYWQgVGV4dHVyZSAm
dGV4dHVyZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIGludDIodGV4dHVyZS5nZXRf
d2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpKTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9BTFdBWVNfSU5MSU5FIGF1dG8gQU5HTEVf
dGV4dHVyZVNpemVfaW1wbCgKKyAgICB0aHJlYWQgbWV0YWw6OnRleHR1cmUzZDxUPiAmdGV4dHVy
ZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAgcmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgo
dWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9oZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdl
dF9kZXB0aCh1aW50KGxldmVsKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xF
X0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJlU2l6ZV9pbXBsKAorICAgIHRocmVhZCBt
ZXRhbDo6ZGVwdGgyZF9hcnJheTxUPiAmdGV4dHVyZSwKKyAgICBpbnQgbGV2ZWwpCit7CisgICAg
cmV0dXJuIGludDModGV4dHVyZS5nZXRfd2lkdGgodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9o
ZWlnaHQodWludChsZXZlbCkpLCB0ZXh0dXJlLmdldF9hcnJheV9zaXplKCkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK0FOR0xFX0FMV0FZU19JTkxJTkUgYXV0byBBTkdMRV90ZXh0dXJl
U2l6ZV9pbXBsKAorICAgIHRocmVhZCBtZXRhbDo6dGV4dHVyZTJkX2FycmF5PFQ+ICZ0ZXh0dXJl
LAorICAgIGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gaW50Myh0ZXh0dXJlLmdldF93aWR0aCh1
aW50KGxldmVsKSksIHRleHR1cmUuZ2V0X2hlaWdodCh1aW50KGxldmVsKSksIHRleHR1cmUuZ2V0
X2FycmF5X3NpemUoKSk7Cit9CispIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVF
bnYoKSkKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gUmV0dXJuZWQgTmFtZSBpcyB2
YWxpZCBmb3IgYXMgbG9uZyBhcyBgYnVmZmVyYCBpcyBzdGlsbCBhbGl2ZS4KKy8vIFJldHVybnMg
ZmFsc2UgaWYgbm8gdGVtcGxhdGUgYXJncyBleGlzdC4KKy8vIFJldHVybnMgZmFsc2UgaWYgYnVm
ZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2guCisvLworLy8gRXhhbXBsZToKKy8vICAiZm9vPDEsMj4i
IC0tPiAiZm9vPD4iCitzdGF0aWMgc3RkOjpwYWlyPE5hbWUsIGJvb2w+IE1hc2tUZW1wbGF0ZUFy
Z3MoY29uc3QgTmFtZSAmbmFtZSwgc2l6ZV90IGJ1ZmZlclNpemUsIGNoYXIgKmJ1ZmZlcikKK3sK
KyAgICBjb25zdCBjaGFyICpiZWdpbiA9IG5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKyAgICBjb25z
dCBjaGFyICplbmQgICA9IHN0cmNocihiZWdpbiwgJzwnKTsKKyAgICBpZiAoIWVuZCkKKyAgICB7
CisgICAgICAgIHJldHVybiB7e30sIGZhbHNlfTsKKyAgICB9CisgICAgc2l6ZV90IG4gPSBlbmQg
LSBiZWdpbjsKKyAgICBpZiAobiArIDMgPiBidWZmZXJTaXplKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHt7fSwgZmFsc2V9OworICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsr
aSkKKyAgICB7CisgICAgICAgIGJ1ZmZlcltpXSA9IGJlZ2luW2ldOworICAgIH0KKyAgICBidWZm
ZXJbbiArIDBdID0gJzwnOworICAgIGJ1ZmZlcltuICsgMV0gPSAnPic7CisgICAgYnVmZmVyW24g
KyAyXSA9ICdcMCc7CisgICAgcmV0dXJuIHtOYW1lKGJ1ZmZlciwgbmFtZS5zeW1ib2xUeXBlKCkp
LCB0cnVlfTsKK30KKworUHJvZ3JhbVByZWx1ZGU6OkZ1bmNUb0VtaXR0ZXIgUHJvZ3JhbVByZWx1
ZGU6OkJ1aWxkRnVuY1RvRW1pdHRlcigpCit7CisjZGVmaW5lIEVNSVRfTUVUSE9EKG1ldGhvZCkg
XAorICAgIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICYpIC0+IHZvaWQg
eyByZXR1cm4gcHAubWV0aG9kKCk7IH0KKyAgICBGdW5jVG9FbWl0dGVyIG1hcDsKKworICAgIGF1
dG8gcHV0ID0gWyZdKE5hbWUgbmFtZSwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBG
dW5jRW1pdHRlciAmZGVzdCA9IG1hcFtuYW1lXTsKKyAgICAgICAgQVNTRVJUKCFkZXN0KTsKKyAg
ICAgICAgZGVzdCA9IGVtaXR0ZXI7CisgICAgfTsKKworICAgIGF1dG8gcHV0QW5nbGUgPSBbJl0o
Y29uc3QgY2hhciAqbmFtZVN0ciwgRnVuY0VtaXR0ZXIgZW1pdHRlcikgeworICAgICAgICBOYW1l
IG5hbWUobmFtZVN0ciwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7CisgICAgICAgIHB1dChu
YW1lLCBlbWl0dGVyKTsKKyAgICB9OworCisgICAgYXV0byBwdXRCdWlsdEluID0gWyZdKGNvbnN0
IGNoYXIgKm5hbWVTdHIsIEZ1bmNFbWl0dGVyIGVtaXR0ZXIpIHsKKyAgICAgICAgTmFtZSBuYW1l
KG5hbWVTdHIsIFN5bWJvbFR5cGU6OkJ1aWx0SW4pOworICAgICAgICBwdXQobmFtZSwgZW1pdHRl
cik7CisgICAgfTsKKworICAgIHB1dEFuZ2xlKCJhZGRyZXNzb2YiLCBFTUlUX01FVEhPRChhZGRy
ZXNzb2YpKTsKKyAgICBwdXRBbmdsZSgiY2FzdDw+IiwgRU1JVF9NRVRIT0QoY2FzdE1hdHJpeCkp
OworICAgIHB1dEFuZ2xlKCJlbGVtX3JlZiIsIEVNSVRfTUVUSE9EKHZlY3RvckVsZW1SZWYpKTsK
KyAgICBwdXRBbmdsZSgiZmxhdHRlbiIsIEVNSVRfTUVUSE9EKGZsYXR0ZW5BcnJheSkpOworICAg
IHB1dEFuZ2xlKCJpbm91dCIsIEVNSVRfTUVUSE9EKGlub3V0KSk7CisgICAgcHV0QW5nbGUoIm91
dCIsIEVNSVRfTUVUSE9EKG91dCkpOworICAgIHB1dEFuZ2xlKCJzd2l6emxlX3JlZiIsIEVNSVRf
TUVUSE9EKHN3aXp6bGVSZWYpKTsKKworICAgIHB1dEJ1aWx0SW4oInRleGVsRmV0Y2giLCBFTUlU
X01FVEhPRCh0ZXhlbEZldGNoKSk7CisgICAgcHV0QnVpbHRJbigidGV4ZWxGZXRjaE9mZnNldCIs
IEVNSVRfTUVUSE9EKHRleGVsRmV0Y2hPZmZzZXQpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJl
IiwgW10oUHJvZ3JhbVByZWx1ZGUgJnBwLCBjb25zdCBURnVuY3Rpb24gJmZ1bmMpIHsKKyAgICAg
ICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nIHRleHR1cmVOYW1lID0KKyAgICAgICAgICAgIEdldFRl
eHR1cmVUeXBlTmFtZShmdW5jLmdldFBhcmFtKDApLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkp
LnJhd05hbWUoKTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmNvb3JkICAgICAgICAgID0gZnVuYy5n
ZXRQYXJhbSgxKS0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUQmFzaWNUeXBlIGNvb3JkQmFz
aWMgPSBjb29yZC5nZXRCYXNpY1R5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGNvb3JkTiAgICAg
ICAgICAgID0gY29vcmQuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgY29uc3QgYm9vbCBiaWFz
ICAgICAgICAgICAgID0gZnVuYy5nZXRQYXJhbUNvdW50KCkgPj0gMzsKKyAgICAgICAgaWYgKHRl
eHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4g
PT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRf
ZmxvYXQzX2Zsb2F0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biBwcC50ZXh0dXJlX2RlcHRoMmRfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aGN1YmU8Iikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVi
dEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChiaWFzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBw
LnRleHR1cmVfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV9kZXB0aGN1YmVfZmxvYXQ0KCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgo
Im1ldGFsOjpkZXB0aDJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29v
cmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2RlcHRoMmRhcnJheV9mbG9hdDRfZmxv
YXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1
cmVfZGVwdGgyZGFycmF5X2Zsb2F0NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTJkX2FycmF5PCIp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYmlhcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBw
cC50ZXh0dXJlX3RleHR1cmUyZGFycmF5X2Zsb2F0M19mbG9hdCgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZV90ZXh0dXJlMmRhcnJheV9mbG9h
dDMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNp
Y1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChiaWFzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHBwLnRleHR1cmVfdGV4dHVyZTJkYXJyYXlfZmxvYXQ0X2Zsb2F0KCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX3RleHR1cmUyZGFy
cmF5X2Zsb2F0NCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb29y
ZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSAyKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoYmlhcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZV9nZW5lcmljX2Zsb2F0Ml9mbG9hdCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19mbG9hdDIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29y
ZE4gPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGJpYXMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVfZ2VuZXJpY19mbG9hdDNfZmxvYXQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlX2dlbmVyaWNf
ZmxvYXQzKCk7CisgICAgICAgIH0KKyAgICAgICAgVE9ETygpOworICAgIH0pOworICAgIHB1dEJ1
aWx0SW4oInRleHR1cmUxRExvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRExvZCkpOworICAgIHB1
dEJ1aWx0SW4oInRleHR1cmUxRFByb2oiLCBFTUlUX01FVEhPRCh0ZXh0dXJlMURQcm9qKSk7Cisg
ICAgcHV0QnVpbHRJbigidGV4dHVyZTFEUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmUxRFBy
b2pMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkQiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
MkQpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJl
MkRMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlMkRQcm9qIiwgRU1JVF9NRVRIT0QodGV4
dHVyZTJEUHJvaikpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRExvZCIsIEVNSVRfTUVUSE9E
KHRleHR1cmUzRExvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUzRFByb2oiLCBFTUlUX01F
VEhPRCh0ZXh0dXJlM0RQcm9qKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZTNEUHJvakxvZCIs
IEVNSVRfTUVUSE9EKHRleHR1cmUzRFByb2pMb2QpKTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJl
Q3ViZSIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVy
ZUN1YmVMb2QiLCBFTUlUX01FVEhPRCh0ZXh0dXJlQ3ViZUxvZCkpOworICAgIHB1dEJ1aWx0SW4o
InRleHR1cmVDdWJlUHJvaiIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlUHJvaikpOworICAgIHB1
dEJ1aWx0SW4oInRleHR1cmVDdWJlUHJvakxvZCIsIEVNSVRfTUVUSE9EKHRleHR1cmVDdWJlUHJv
akxvZCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmUyRFByb2pMb2QiLCBFTUlUX01FVEhPRCh0
ZXh0dXJlMkRQcm9qTG9kKSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUdyYWQiLCBbXShQcm9n
cmFtUHJlbHVkZSAmcHAsIGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgeworICAgICAgICBjb25zdCBJ
bW11dGFibGVTdHJpbmcgdGV4dHVyZU5hbWUgPQorICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVO
YW1lKGZ1bmMuZ2V0UGFyYW0oMCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgp
OworICAgICAgICBjb25zdCBUVHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEp
LT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3Jk
LmdldEJhc2ljVHlwZSgpOworICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBj
b29yZC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAg
ICAgPSBmdW5jLmdldFBhcmFtKDIpLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBkUGR4
TiAgICAgICAgICAgICA9IGRQZHguZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1
cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0g
MyAmJiBkUGR4TiA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBw
cC50ZXh0dXJlR3JhZF9kZXB0aDJkX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFs
OjpkZXB0aDJkX2FycmF5PCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9kZXB0
aDJkYXJyYXlfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwi
KSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6
RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9h
dDNfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1
cmVOYW1lLmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlY3ViZTwiKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmRO
ID09IDMgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcHAudGV4dHVyZUdyYWRfdGV4dHVyZWN1YmVfZmxvYXQzX2Zsb2F0M19mbG9hdDMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBkUGR4TiA9PSAyKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdDNfZmxvYXQyX2Zs
b2F0MigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6
OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZF9nZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQy
KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0
RmxvYXQgJiYgY29vcmROID09IGRQZHhOKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZUdyYWRfZ2VuZXJpY19mbG9hdE5fZmxvYXROX2Zsb2F0TigpOworICAgICAgICB9
CisgICAgICAgIFRPRE8oKTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlR3JhZE9m
ZnNldCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7Cisg
ICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBH
ZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpKS5yYXdOYW1lKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1
bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29y
ZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4g
ICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBl
ICZkUGR4ICAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAg
Y29uc3QgaW50IGRQZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAg
ICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0
ICYmIGNvb3JkTiA9PSAzICYmIGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2RlcHRoMmRfZmxvYXQzX2Zsb2F0Ml9m
bG9hdDJfaW50MigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0
dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgyZF9hcnJheTwiKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29v
cmROID09IDQgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcHAudGV4dHVyZUdyYWRPZmZzZXRfZGVwdGgyZGFycmF5X2Zsb2F0NF9mbG9hdDJfZmxv
YXQyX2ludDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVy
ZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoY3ViZTwiKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09
IDQgJiYgZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cHAudGV4dHVyZUdyYWRPZmZzZXRfZGVwdGhjdWJlX2Zsb2F0NF9mbG9hdDNfZmxvYXQzX2ludDMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVn
aW5zV2l0aCgibWV0YWw6OnRleHR1cmVjdWJlPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMyAmJiBk
UGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0
dXJlR3JhZE9mZnNldF90ZXh0dXJlY3ViZV9mbG9hdDNfZmxvYXQzX2Zsb2F0M19pbnQzKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2lj
VHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVHcmFkT2Zmc2V0X2dlbmVyaWNfZmxvYXQzX2Zs
b2F0Ml9mbG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09
IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0ICYmIGRQZHhOID09IDIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zs
b2F0NF9mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gZFBkeE4pCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlR3JhZE9mZnNldF9nZW5lcmljX2Zsb2F0
Tl9mbG9hdE5fZmxvYXROX2ludE4oKTsKKyAgICAgICAgfQorICAgICAgICBUT0RPKCk7CisgICAg
fSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZUxvZCIsIFtdKFByb2dyYW1QcmVsdWRlICZwcCwg
Y29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyB0
ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlwZU5hbWUoZnVuYy5nZXRQYXJh
bSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1lKCk7CisgICAgICAgIGNvbnN0
IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0oMSktPmdldFR5cGUoKTsKKyAg
ICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29vcmQuZ2V0QmFzaWNUeXBlKCk7
CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9IGNvb3JkLmdldE5vbWluYWxT
aXplKCk7CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6ZGVwdGgy
ZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlw
ZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZGVwdGgyZF9mbG9hdDMoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OnRl
eHR1cmUyZF9hcnJheTwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3JkQmFzaWMg
PT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfdGV4dHVyZTJkYXJyYXlfZmxvYXQz
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNU
eXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcHAudGV4dHVyZUxvZF90ZXh0dXJlMmRhcnJheV9mbG9hdDQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBl
OjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Y29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gMykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVMb2RfZ2VuZXJpY19mbG9hdDMoKTsK
KyAgICAgICAgfQorICAgICAgICBUT0RPKCk7CisgICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4
dHVyZUxvZE9mZnNldCIsIEVNSVRfTUVUSE9EKHRleHR1cmVMb2RPZmZzZXQpKTsKKyAgICBwdXRC
dWlsdEluKCJ0ZXh0dXJlT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZU9mZnNldCkpOworICAg
IHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qIiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2opKTsKKyAg
ICBwdXRCdWlsdEluKCJ0ZXh0dXJlUHJvakdyYWQiLCBbXShQcm9ncmFtUHJlbHVkZSAmcHAsIGNv
bnN0IFRGdW5jdGlvbiAmZnVuYykgeworICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgdGV4
dHVyZU5hbWUgPQorICAgICAgICAgICAgR2V0VGV4dHVyZVR5cGVOYW1lKGZ1bmMuZ2V0UGFyYW0o
MCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkucmF3TmFtZSgpOworICAgICAgICBjb25zdCBU
VHlwZSAmY29vcmQgICAgICAgICAgPSBmdW5jLmdldFBhcmFtKDEpLT5nZXRUeXBlKCk7CisgICAg
ICAgIGNvbnN0IFRCYXNpY1R5cGUgY29vcmRCYXNpYyA9IGNvb3JkLmdldEJhc2ljVHlwZSgpOwor
ICAgICAgICBjb25zdCBpbnQgY29vcmROICAgICAgICAgICAgPSBjb29yZC5nZXROb21pbmFsU2l6
ZSgpOworICAgICAgICBjb25zdCBUVHlwZSAmZFBkeCAgICAgICAgICAgPSBmdW5jLmdldFBhcmFt
KDIpLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBkUGR4TiAgICAgICAgICAgICA9IGRQ
ZHguZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgaWYgKHRleHR1cmVOYW1lLmJlZ2luc1dpdGgo
Im1ldGFsOjpkZXB0aDJkPCIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNp
YyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRf
ZGVwdGgyZF9mbG9hdDRfZmxvYXQyX2Zsb2F0MigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNXaXRoKCJtZXRhbDo6dGV4dHVyZTNkPCIp
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29vcmRCYXNpYyA9PSBUQmFzaWNUeXBlOjpF
YnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakdyYWRfdGV4dHVyZTNkX2Zsb2F0NF9m
bG9hdDNfZmxvYXQzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4g
PT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9n
ZW5lcmljX2Zsb2F0M19mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNv
b3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYgZFBkeE4g
PT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZF9n
ZW5lcmljX2Zsb2F0NF9mbG9hdDJfZmxvYXQyKCk7CisgICAgICAgIH0KKyAgICAgICAgVE9ETygp
OworICAgIH0pOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIFtdKFBy
b2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0
IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlw
ZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1l
KCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0o
MSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29v
cmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9
IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZkUGR4ICAgICAg
ICAgICA9IGZ1bmMuZ2V0UGFyYW0oMiktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50IGRQ
ZHhOICAgICAgICAgICAgID0gZFBkeC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBpZiAodGV4
dHVyZU5hbWUuYmVnaW5zV2l0aCgibWV0YWw6OmRlcHRoMmQ8IikpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9
PSA0ICYmIGRQZHhOID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBwLnRleHR1cmVQcm9qR3JhZE9mZnNldF9kZXB0aDJkX2Zsb2F0NF9mbG9hdDJfZmxvYXQyX2lu
dDIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodGV4dHVyZU5hbWUu
YmVnaW5zV2l0aCgibWV0YWw6OnRleHR1cmUzZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQgJiYg
ZFBkeE4gPT0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHAudGV4
dHVyZVByb2pHcmFkT2Zmc2V0X3RleHR1cmUzZF9mbG9hdDRfZmxvYXQzX2Zsb2F0M19pbnQzKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvb3JkQmFzaWMgPT0gVEJh
c2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMgJiYgZFBkeE4gPT0gMikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qR3JhZE9mZnNldF9nZW5lcmljX2Zs
b2F0M19mbG9hdDJfZmxvYXQyX2ludDIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29vcmRC
YXNpYyA9PSBUQmFzaWNUeXBlOjpFYnRGbG9hdCAmJiBjb29yZE4gPT0gNCAmJiBkUGR4TiA9PSAy
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAudGV4dHVyZVByb2pHcmFkT2Zmc2V0
X2dlbmVyaWNfZmxvYXQ0X2Zsb2F0Ml9mbG9hdDJfaW50MigpOworICAgICAgICB9CisgICAgICAg
IFRPRE8oKTsKKyAgICB9KTsKKyAgICBwdXRCdWlsdEluKCJ0ZXh0dXJlUHJvakxvZCIsIFtdKFBy
b2dyYW1QcmVsdWRlICZwcCwgY29uc3QgVEZ1bmN0aW9uICZmdW5jKSB7CisgICAgICAgIGNvbnN0
IEltbXV0YWJsZVN0cmluZyB0ZXh0dXJlTmFtZSA9CisgICAgICAgICAgICBHZXRUZXh0dXJlVHlw
ZU5hbWUoZnVuYy5nZXRQYXJhbSgwKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKS5yYXdOYW1l
KCk7CisgICAgICAgIGNvbnN0IFRUeXBlICZjb29yZCAgICAgICAgICA9IGZ1bmMuZ2V0UGFyYW0o
MSktPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEJhc2ljVHlwZSBjb29yZEJhc2ljID0gY29v
cmQuZ2V0QmFzaWNUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBjb29yZE4gICAgICAgICAgICA9
IGNvb3JkLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgIGlmICh0ZXh0dXJlTmFtZS5iZWdpbnNX
aXRoKCJtZXRhbDo6ZGVwdGgyZDwiKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvb3Jk
QmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBwLnRleHR1cmVQcm9qTG9kX2RlcHRoMmRfZmxv
YXQ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmVOYW1l
LmJlZ2luc1dpdGgoIm1ldGFsOjp0ZXh0dXJlM2Q8IikpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVidEZsb2F0ICYmIGNvb3JkTiA9PSA0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF90
ZXh0dXJlM2RfZmxvYXQ0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGNvb3JkQmFzaWMgPT0gVEJhc2ljVHlwZTo6RWJ0RmxvYXQgJiYgY29vcmROID09IDMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBwcC50ZXh0dXJlUHJvakxvZF9nZW5lcmljX2Zsb2F0
MygpOworICAgICAgICB9CisgICAgICAgIGlmIChjb29yZEJhc2ljID09IFRCYXNpY1R5cGU6OkVi
dEZsb2F0ICYmIGNvb3JkTiA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcHAu
dGV4dHVyZVByb2pMb2RfZ2VuZXJpY19mbG9hdDQoKTsKKyAgICAgICAgfQorICAgICAgICBUT0RP
KCk7CisgICAgfSk7CisgICAgcHV0QnVpbHRJbigidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBFTUlU
X01FVEhPRCh0ZXh0dXJlUHJvakxvZE9mZnNldCkpOworICAgIHB1dEJ1aWx0SW4oInRleHR1cmVQ
cm9qT2Zmc2V0IiwgRU1JVF9NRVRIT0QodGV4dHVyZVByb2pPZmZzZXQpKTsKKyAgICBwdXRCdWls
dEluKCJ0ZXh0dXJlU2l6ZSIsIEVNSVRfTUVUSE9EKHRleHR1cmVTaXplKSk7CisKKyAgICByZXR1
cm4gbWFwOworCisjdW5kZWYgRU1JVF9NRVRIT0QKK30KKwordm9pZCBQcm9ncmFtUHJlbHVkZTo6
dmlzaXRPcGVyYXRvcihUT3BlcmF0b3Igb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVFR5cGUgKmFyZ1R5cGUwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUVHlwZSAqYXJnVHlwZTEpCit7CisgICAgc3dpdGNoIChvcCkKKyAg
ICB7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BSYWRpYW5zOgorICAgICAgICAgICAgcmFk
aWFucygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BE
ZWdyZWVzOgorICAgICAgICAgICAgZGVncmVlcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBdGFuOgorICAgICAgICAgICAgYXRhbigpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNb2Q6CisgICAgICAgICAg
ICBtb2QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
UmVmcmFjdDoKKyAgICAgICAgICAgIHJlZnJhY3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGlzdGFuY2U6CisgICAgICAgICAgICBkaXN0YW5jZSgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZW5ndGg6
CisgICAgICAgICAgICBsZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wRG90OgorICAgICAgICAgICAgZG90KCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE5vcm1hbGl6ZToKKyAgICAgICAgICAgIG5v
cm1hbGl6ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BGYWNlZm9yd2FyZDoKKyAgICAgICAgICAgIGZhY2Vmb3J3YXJkKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFJlZmxlY3Q6CisgICAgICAgICAgICBy
ZWZsZWN0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6
RU9wU2luOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wVGFuOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXNpbjoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3M6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BT
aW5oOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ29zaDoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcFRhbmg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc2luaDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFjb3NoOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
QXRhbmg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBYnM6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BGbWE6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3c6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BFeHA6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFeHAy
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9nOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTG9nMjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNxcnQ6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BGbG9vcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFRydW5j
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQ2VpbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEZyYWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUm91bmQ6CisgICAgICAg
IGNhc2UgVE9wZXJhdG9yOjpFT3BSb3VuZEV2ZW46CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNb2RmOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTGRleHA6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BGcmV4cDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEludmVyc2Vz
cXJ0OgorICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9tYXRoKCk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRXF1YWw6CisgICAgICAgICAgICBpZiAo
YXJnVHlwZTAtPmlzVmVjdG9yKCkgJiYgYXJnVHlwZTEtPmlzVmVjdG9yKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZXF1YWxWZWN0b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIEV2ZW4gaWYgQXJnMCBpcyBhIHZlY3RvciBvciBtYXRyaXgsIGl0IGNvdWxkIGFs
c28gYmUgYW4gYXJyYXkuCisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzQXJyYXkoKSAmJiBh
cmdUeXBlMS0+aXNBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVxdWFs
QXJyYXkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNW
ZWN0b3IoKSAmJiBhcmdUeXBlMS0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBub3RFcXVhbFZlY3RvcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoYXJnVHlwZTAtPmdldFN0cnVjdCgpICYmIGFyZ1R5cGUxLT5nZXRTdHJ1Y3QoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBub3RFcXVhbFN0cnVjdCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gU2FtZSBhcyBhYm92ZS4KKyAgICAgICAgICAgIGlmIChhcmdU
eXBlMC0+aXNBcnJheSgpICYmIGFyZ1R5cGUxLT5pc0FycmF5KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbm90RXF1YWxBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENyb3NzOgorICAgICAgICAg
ICAgaW5jbHVkZV9tZXRhbF9nZW9tZXRyaWMoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTaWduOgorICAgICAgICAgICAgc2lnbigpOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENsYW1wOgorICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTWluOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF4
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWl4OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wU3RlcDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFNtb290aHN0ZXA6CisgICAg
ICAgICAgICBpbmNsdWRlX21ldGFsX2NvbW1vbigpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEFsbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cEFueToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElzbmFuOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSXNpbmY6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX3JlbGF0aW9uYWwo
KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BERmR4
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wREZkeToKKyAgICAgICAgY2FzZSBUT3BlcmF0
b3I6OkVPcEZ3aWR0aDoKKyAgICAgICAgICAgIGluY2x1ZGVfbWV0YWxfZ3JhcGhpY3MoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BUcmFuc3Bvc2U6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEZXRlcm1pbmFudDoKKyAgICAgICAgICAgIGlu
Y2x1ZGVfbWV0YWxfbWF0cml4KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQWRkOgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgp
ICYmIGFyZ1R5cGUxLT5pc1NjYWxhcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGFkZE1hdHJpeFNjYWxhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFN1YjoKKyAgICAgICAgICAgIGlmIChhcmdUeXBl
MC0+aXNNYXRyaXgoKSAmJiBhcmdUeXBlMS0+aXNTY2FsYXIoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzdWJNYXRyaXhTY2FsYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXY6CisgICAgICAgICAg
ICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGFyZ1R5cGUxLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZSgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChhcmdUeXBlMS0+aXNTY2FsYXIoKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRpdk1hdHJpeFNjYWxhcigpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlz
TWF0cml4KCkgJiYgYXJnVHlwZTEtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29tcG9uZW50V2lzZURpdmlkZUFzc2lnbigpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE11bE1hdHJpeENv
bXBvbmVudFdpc2U6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkgJiYgYXJn
VHlwZTEtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29tcG9u
ZW50V2lzZU11bHRpcGx5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wT3V0ZXJQcm9kdWN0OgorICAgICAgICAgICAgb3V0
ZXJQcm9kdWN0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW52ZXJzZToKKyAgICAgICAgICAgIHN3aXRjaCAoYXJnVHlwZTAtPmdldENvbHMoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAg
ICAgIGludmVyc2UyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgaW52ZXJzZTMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAg
ICAgICBpbnZlcnNlNCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICAgICAgbWF0bXVsQXNzaWduKCk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUHJlSW5jcmVt
ZW50OgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHByZUluY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBvc3RJbmNy
ZW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAtPmlzTWF0cml4KCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcG9zdEluY3JlbWVudE1hdHJpeCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURl
Y3JlbWVudDoKKyAgICAgICAgICAgIGlmIChhcmdUeXBlMC0+aXNNYXRyaXgoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBwcmVEZWNyZW1lbnRNYXRyaXgoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3N0
RGVjcmVtZW50OgorICAgICAgICAgICAgaWYgKGFyZ1R5cGUwLT5pc01hdHJpeCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHBvc3REZWNyZW1lbnRNYXRyaXgoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wTmVnYXRpdmU6CisgICAgICAgICAgICBpZiAoYXJnVHlwZTAt
PmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmVnYXRlTWF0cml4
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQ29tbWE6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNo
aWZ0TGVmdEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHRB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlQW5kQXNzaWduOgorICAg
ICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEJpdHdpc2VPckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cE11bDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElNb2Q6CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXRTaGlmdExlZnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRT
aGlmdFJpZ2h0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZUFuZDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VYb3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BCaXR3aXNlT3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbjoKKyAg
ICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuOgorICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0
ZXJUaGFuRXF1YWw6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkNvbXBvbmVu
dFdpc2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BMZXNzVGhhbkVxdWFsQ29tcG9uZW50
V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEdyZWF0ZXJUaGFuRXF1YWxDb21wb25l
bnRXaXNlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wR3JlYXRlclRoYW5Db21wb25lbnRX
aXNlOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wTG9naWNhbFhvcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcExv
Z2ljYWxBbmQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQb3NpdGl2ZToKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcExvZ2ljYWxOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BMb2dpY2FsTm90Q29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJp
dHdpc2VOb3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFz
c2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgY2Fz
ZSBUT3BlcmF0b3I6OkVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRy
aXhUaW1lc1NjYWxhcjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzTWF0
cml4OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUmV0dXJuOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQnJlYWs6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb250aW51ZToK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcE5vdEVxdWFsQ29tcG9uZW50V2lzZToKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5k
ZXhJbmRpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0U3RydWN0
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEZsb2F0Qml0c1RvSW50OgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wSW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BVaW50Qml0c1RvRmxvYXQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGbG9hdEJpdHNU
b1VpbnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BOdWxsOgorICAgICAgICAgICAgLy8g
ZG8gbm90aGluZworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcEtpbGw6CisgICAgICAgICAgICBpbmNsdWRlX21ldGFsX2dyYXBoaWNzKCk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja1Vub3JtMngxNjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFBhY2tTbm9ybTJ4MTY6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BQYWNrVW5vcm00eDg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BQ
YWNrU25vcm00eDg6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tTbm9ybTJ4MTY6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTJ4MTY6CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tVbm9ybTR4ODoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6
OkVPcFVucGFja1Nub3JtNHg4OgorICAgICAgICAgICAgaW5jbHVkZV9tZXRhbF9wYWNrKCk7Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFja0hhbGYy
eDE2OgorICAgICAgICAgICAgcGFja19oYWxmXzJ4MTYoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVW5wYWNrSGFsZjJ4MTY6CisgICAgICAgICAgICB1
bnBhY2tfaGFsZl8yeDE2KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wQml0ZmllbGRFeHRyYWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0ZmllbGRJbnNlcnQ6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRmaWVsZFJldmVy
c2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXRDb3VudDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEZpbmRMU0I6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BGaW5kTVNC
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVWFkZENhcnJ5OgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wVXN1YkJvcnJvdzoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFVtdWxF
eHRlbmRlZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEltdWxFeHRlbmRlZDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJhcnJpZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BNZW1vcnlCYXJyaWVyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmll
ckF0b21pY0NvdW50ZXI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNZW1vcnlCYXJyaWVy
QnVmZmVyOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllckltYWdlOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWVtb3J5QmFycmllclNoYXJlZDoKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEdyb3VwTWVtb3J5QmFycmllcjoKKyAgICAgICAgY2FzZSBUT3Bl
cmF0b3I6OkVPcEF0b21pY0FkZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY01p
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21pY01heDoKKyAgICAgICAgY2FzZSBU
T3BlcmF0b3I6OkVPcEF0b21pY0FuZDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEF0b21p
Y09yOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXRvbWljWG9yOgorICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQXRvbWljRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpF
T3BBdG9taWNDb21wU3dhcDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEVtaXRWZXJ0ZXg6
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BFbmRQcmltaXRpdmU6CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BGVHJhbnNmb3JtOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUGFj
a0RvdWJsZTJ4MzI6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BVbnBhY2tEb3VibGUyeDMy
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQXJyYXlMZW5ndGg6CisgICAgICAgICAgICBU
T0RPKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Q29uc3RydWN0OgorICAgICAgICAgICAgQVNTRVJUKCFmdW5jKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQ2FsbEJ1aWx0SW5GdW5jdGlvbjoKKyAgICAgICAgICAgIEFTU0VS
VChmdW5jKTsKKyAgICAgICAgICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoZnVuYykuc2Vjb25kKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IE5hbWUgbmFtZSgqZnVuYyk7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byBlbmQgPSBtRnVuY1RvRW1pdHRlci5lbmQoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGl0ZXIgICAgICA9IG1GdW5jVG9FbWl0dGVyLmZpbmQobmFtZSk7
CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gZW5kKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2hhciBidWZmZXJbMzJdOworICAgICAgICAgICAgICAgICAgICBh
dXRvIG1hc2sgPSBNYXNrVGVtcGxhdGVBcmdzKG5hbWUsIHNpemVvZihidWZmZXIpLCBidWZmZXIp
OworICAgICAgICAgICAgICAgICAgICBpZiAobWFzay5zZWNvbmQpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIgPSBtRnVuY1RvRW1pdHRlci5maW5k
KG1hc2suZmlyc3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IGVuZCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gJmVtaXR0ZXIgPSBpdGVyLT5zZWNvbmQ7CisgICAg
ICAgICAgICAgICAgICAgIGVtaXR0ZXIoKnRoaXMsICpmdW5jKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUHJv
Z3JhbVByZWx1ZGU6OnZpc2l0VmFyaWFibGUoY29uc3QgTmFtZSAmbmFtZSwgY29uc3QgVFR5cGUg
JnR5cGUpCit7CisgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnMgPSB0eXBlLmdldFN0cnVjdCgp
KQorICAgIHsKKyAgICAgICAgY29uc3QgTmFtZSB0eXBlTmFtZSgqcyk7CisgICAgICAgIGlmICh0
eXBlTmFtZS5iZWdpbnNXaXRoKE5hbWUoIlRleHR1cmVFbnY8IikpKQorICAgICAgICB7CisgICAg
ICAgICAgICB0ZXh0dXJlRW52KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgaWYgKG5hbWUgPT0gY29uc3RhbnRfbmFtZXM6OmtSYXN0ZXJpemF0aW9uRGlzY2Fy
ZEVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uQ29uc3RhbnRzKCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0VmFyaWFibGUo
Y29uc3QgVFZhcmlhYmxlICZ2YXIpCit7CisgICAgaWYgKG1IYW5kbGVkLmluc2VydCgmdmFyKS5z
ZWNvbmQpCisgICAgeworICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUodmFyKSwgdmFyLmdldFR5
cGUoKSk7CisgICAgfQorfQorCit2b2lkIFByb2dyYW1QcmVsdWRlOjp2aXNpdFN0cnVjdHVyZShj
b25zdCBUU3RydWN0dXJlICZzKQoreworICAgIGlmIChtSGFuZGxlZC5pbnNlcnQoJnMpLnNlY29u
ZCkKKyAgICB7CisgICAgICAgIGZvciAoY29uc3QgVEZpZWxkICpmaWVsZCA6IHMuZmllbGRzKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gKmZpZWxkLT50eXBl
KCk7CisgICAgICAgICAgICB2aXNpdFZhcmlhYmxlKE5hbWUoKmZpZWxkKSwgdHlwZSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUHJvZ3JhbVByZWx1ZGU6OnZpc2l0QmluYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlw
ZSAgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICBjb25zdCBUVHlwZSAmcmlnaHRU
eXBlID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworICAgIHZpc2l0T3BlcmF0b3Iobm9k
ZS0+Z2V0T3AoKSwgbnVsbHB0ciwgJmxlZnRUeXBlLCAmcmlnaHRUeXBlKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtUHJlbHVkZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwg
VEludGVybVVuYXJ5ICpub2RlKQoreworICAgIGNvbnN0IFRUeXBlICZhcmdUeXBlID0gbm9kZS0+
Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCk7CisgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgp
LCBudWxscHRyLCAmYXJnVHlwZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3Jh
bVByZWx1ZGU6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpu
b2RlKQoreworICAgIGNvbnN0IHNpemVfdCBhcmdDb3VudCA9IG5vZGUtPmdldENoaWxkQ291bnQo
KTsKKworICAgIGF1dG8gZ2V0QXJnVHlwZSA9IFtub2RlLCBhcmdDb3VudF0oc2l6ZV90IGluZGV4
KSAtPiBjb25zdCBUVHlwZSAmIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgYXJnQ291bnQpOwor
ICAgICAgICBUSW50ZXJtVHlwZWQgKmFyZyA9IG5vZGUtPmdldENoaWxkTm9kZShpbmRleCktPmdl
dEFzVHlwZWQoKTsKKyAgICAgICAgQVNTRVJUKGFyZyk7CisgICAgICAgIHJldHVybiBhcmctPmdl
dFR5cGUoKTsKKyAgICB9OworCisgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jID0gbm9kZS0+Z2V0
RnVuY3Rpb24oKTsKKworICAgIHN3aXRjaCAobm9kZS0+Z2V0Q2hpbGRDb3VudCgpKQorICAgIHsK
KyAgICAgICAgY2FzZSAwOgorICAgICAgICB7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5v
ZGUtPmdldE9wKCksIGZ1bmMsIG51bGxwdHIpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUgJmFy
Z1R5cGUwID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIHZpc2l0T3BlcmF0b3Iobm9kZS0+
Z2V0T3AoKSwgZnVuYywgJmFyZ1R5cGUwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIDI6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdU
eXBlMCA9IGdldEFyZ1R5cGUoMCk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmYXJnVHlwZTEg
PSBnZXRBcmdUeXBlKDEpOworICAgICAgICAgICAgdmlzaXRPcGVyYXRvcihub2RlLT5nZXRPcCgp
LCBmdW5jLCAmYXJnVHlwZTAsICZhcmdUeXBlMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUg
JmFyZ1R5cGUwID0gZ2V0QXJnVHlwZSgwKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZhcmdU
eXBlMSA9IGdldEFyZ1R5cGUoMSk7CisgICAgICAgICAgICB2aXNpdE9wZXJhdG9yKG5vZGUtPmdl
dE9wKCksIGZ1bmMsICZhcmdUeXBlMCwgJmFyZ1R5cGUxKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtUHJlbHVk
ZTo6dmlzaXREZWNsYXJhdGlvbihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICpub2RlKQorewor
ICAgIERlY2xhcmF0aW9uIGRlY2wgID0gVmlld0RlY2xhcmF0aW9uKCpub2RlKTsKKyAgICBjb25z
dCBUVHlwZSAmdHlwZSA9IGRlY2wuc3ltYm9sLmdldFR5cGUoKTsKKyAgICBpZiAodHlwZS5pc1N0
cnVjdFNwZWNpZmllcigpKQorICAgIHsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqcyA9IHR5
cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIEFTU0VSVChzKTsKKyAgICAgICAgdmlzaXRTdHJ1Y3R1
cmUoKnMpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQcm9ncmFtUHJlbHVk
ZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqbm9kZSkKK3sKKyAgICB2aXNpdFZhcmlhYmxl
KG5vZGUtPnZhcmlhYmxlKCkpOworfQorCitib29sIHNoOjpFbWl0UHJvZ3JhbVByZWx1ZGUoVElu
dGVybUJsb2NrICZyb290LCBUSW5mb1NpbmtCYXNlICZvdXQsIGNvbnN0IFByb2dyYW1QcmVsdWRl
Q29uZmlnICZwcGMpCit7CisgICAgUHJvZ3JhbVByZWx1ZGUgcHJvZ3JhbVByZWx1ZGUob3V0LCBw
cGMpOworICAgIHJvb3QudHJhdmVyc2UoJnByb2dyYW1QcmVsdWRlKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9ncmFtUHJlbHVkZS5oIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAwNDEzZjU3NjkyYTA1MzRkYTRk
N2RjOTYzYTA5OGJiODhjZGRjNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Qcm9n
cmFtUHJlbHVkZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUFJPR1JBTVBSRUxVREVfSF8KKyNk
ZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUFJPR1JBTVBS
RUxVREVfSF8KKworI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworY2xhc3MgVEluZm9TaW5rQmFzZTsK
K2NsYXNzIFRJbnRlcm1CbG9jazsKKworc3RydWN0IFByb2dyYW1QcmVsdWRlQ29uZmlnCit7Cisg
ICAgYm9vbCBoYXNTdHJ1Y3RFcSA9IGZhbHNlOworfTsKKworLy8gVGhpcyBlbWl0cyBmaXhlZCBo
ZWxwZXIgTWV0YWwgY29kZSBkaXJlY3RseSB3aXRob3V0IGFkZGluZyBjb2RlIHRvIHRoZSBBU1Qu
IFRoaXMgd2Fsa3MgdGhlIEFTVCB0bworLy8gZmlndXJlIG91dCB0aGUgcmVxdWlyZWQgd2hhdCBw
cmVsdWRlIE1TTCBjb2RlIGlzIG5lZWRlZCBmb3IgdmFyaW91cyB0aGluZ3MgaW4gdGhlIEFTVC4g
WW91IGNhbgorLy8gdGhpbmsgb2YgdGhpcyBhcyBlZmZlY3RpdmVseSBpbmxpbmluZyB2YXJpb3Vz
IHBvcnRpb25zIG9mIGEgaGVscGVyIGxpYnJhcnkgaW50byB0aGUgZW1pdHRlZAorLy8gTWV0YWwg
cHJvZ3JhbS4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBFbWl0UHJvZ3JhbVByZWx1ZGUoVEludGVy
bUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW5mb1NpbmtCYXNlICZvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFByb2dyYW1QcmVsdWRlQ29uZmlnICZwcGMpOworCit9ICAvLyBuYW1lc3BhY2Ug
c2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVD
VF9QUk9HUkFNUFJFTFVERV9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVy
ZmFjZUJsb2Nrcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYTgxNjk2ZjA2YWY2OWQ0YWRhMjU3OWMwMmQwOGM0ODk0NWZkOWU4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5jcHAKQEAg
LTAsMCArMSwxMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVk
ZSA8dW5vcmRlcmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWR1Y2VJbnRlcmZhY2VCbG9ja3MuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NlcGFyYXRlRGVjbGFyYXRpb25zLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5o
IgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25h
bWVzcGFjZQoreworCitjbGFzcyBSZWR1Y2VyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7Cisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqLCBzdGQ6Om1hcDxJ
bW11dGFibGVTdHJpbmcsIGNvbnN0IFRWYXJpYWJsZSAqPj4KKyAgICAgICAgbUxpZnRlZE1hcDsK
KyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFZhcmlhYmxlICosIGNvbnN0IFRWYXJpYWJs
ZSAqPiBtSW5zdGFuY2VNYXA7CisKKyAgcHVibGljOgorICAgIFJlZHVjZXIoVENvbXBpbGVyICZj
b21waWxlcikgOiBUSW50ZXJtUmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAg
ICBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRlY2xOb2RlLmdldENoaWxkQ291
bnQoKSA9PSAxKTsKKyAgICAgICAgVEludGVybU5vZGUgJm5vZGUgPSAqZGVjbE5vZGUuZ2V0Q2hp
bGROb2RlKDApOworCisgICAgICAgIGlmIChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9k
ZS5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlh
YmxlICZ2YXIgICAgICAgID0gc3ltYm9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNv
bnN0IFRUeXBlICZ0eXBlICAgICAgICAgICA9IHZhci5nZXRUeXBlKCk7CisgICAgICAgICAgICBj
b25zdCBTeW1ib2xUeXBlIHN5bWJvbFR5cGUgPSB2YXIuc3ltYm9sVHlwZSgpOworICAgICAgICAg
ICAgaWYgKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldElu
dGVyZmFjZUJsb2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHN5bWJv
bFR5cGUgPT0gU3ltYm9sVHlwZTo6RW1wdHkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvICZuYW1lVG9WYXIgPSBtTGlmdGVkTWFwW2ludGVyZmFjZUJsb2NrXTsK
KyAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gcmVwbGFjZW1l
bnRzOworICAgICAgICAgICAgICAgICAgICBmb3IgKFRGaWVsZCAqZmllbGQgOiBpbnRlcmZhY2VC
bG9jay0+ZmllbGRzKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gJmxpZnRlZFR5cGUgPSBDbG9uZVR5cGUoKmZpZWxkLT50eXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGxpZnRlZFR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0g
VFF1YWxpZmllcjo6RXZxVW5pZm9ybSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpZnRlZFR5cGUuZ2V0UXVhbGlmaWVyKCkgPT0gVFF1YWxpZmllcjo6RXZxR2xvYmFsKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpZnRlZFR5cGUuc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXI6
OkV2cVVuaWZvcm0pOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byAqbGlmdGVkVmFyID0g
bmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBmaWVsZC0+bmFtZSgpLCAmbGlmdGVkVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmllbGQtPnN5bWJvbFR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVUb1Zh
cltmaWVsZC0+bmFtZSgpXSA9IGxpZnRlZFZhcjsKKworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwbGFjZW1lbnRzLnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcg
VEludGVybURlY2xhcmF0aW9ue25ldyBUSW50ZXJtU3ltYm9sKGxpZnRlZFZhcil9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpN
dWx0aShzdGQ6Om1vdmUocmVwbGFjZW1lbnRzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCh0eXBlLmdldFF1YWxpZmllcigpID09IFRRdWFsaWZpZXI6OkV2cVVuaWZvcm0pOworCisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gJnN0cnVjdHVyZSA9CisgICAgICAgICAgICAgICAgICAg
ICAgICAqbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgaW50ZXJmYWNlQmxvY2stPm5hbWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJmYWNlQmxv
Y2stPmZpZWxkcygpLCBpbnRlcmZhY2VCbG9jay0+c3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byAmc3RydWN0VmFyID0gQ3JlYXRlU3RydWN0VHlwZVZhcmlhYmxlKG1TeW1i
b2xUYWJsZSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byAmaW5zdGFuY2VW
YXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2VWYXJpYWJsZShtU3lt
Ym9sVGFibGUsIHN0cnVjdHVyZSwgTmFtZSh2YXIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUUXVhbGlmaWVyOjpFdnFVbmlmb3JtLCAmdHlwZS5nZXRB
cnJheVNpemVzKCkpOworCisgICAgICAgICAgICAgICAgICAgIG1JbnN0YW5jZU1hcFsmdmFyXSA9
ICZpbnN0YW5jZVZhcjsKKworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnRzW10gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVEludGVybURlY2xhcmF0
aW9ue25ldyBUSW50ZXJtU3ltYm9sKCZzdHJ1Y3RWYXIpfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bmV3IFRJbnRlcm1TeW1ib2woJmluc3RhbmNlVmFy
KX19OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlUmVzdWx0OjpNdWx0aShzdGQ6OmJl
Z2luKHJlcGxhY2VtZW50cyksIHN0ZDo6ZW5kKHJlcGxhY2VtZW50cykpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7ZGVjbE5v
ZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0U3lt
Ym9sUHJlKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUudmFyaWFibGUoKTsKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byBpdCA9IG1JbnN0YW5jZU1hcC5maW5kKCZ2YXIpOworICAgICAg
ICAgICAgaWYgKGl0ICE9IG1JbnN0YW5jZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtU3ltYm9sKGl0LT5zZWNvbmQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjb25zdCBUSW50ZXJmYWNlQmxvY2sgKmli
ID0gdmFyLmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvIGl0ID0gbUxpZnRlZE1hcC5maW5kKGliKTsKKyAgICAgICAgICAgIGlmIChpdCAh
PSBtTGlmdGVkTWFwLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8g
KmxpZnRlZFZhciA9IGl0LT5zZWNvbmRbdmFyLm5hbWUoKV07CisgICAgICAgICAgICAgICAgQVNT
RVJUKGxpZnRlZFZhcik7CisgICAgICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybVN5bWJv
bChsaWZ0ZWRWYXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBz
eW1ib2xOb2RlOworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6UmVkdWNlSW50ZXJmYWNlQmxvY2tzKFRD
b21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBSZWR1Y2VyIHJl
ZHVjZXIoY29tcGlsZXIpOworICAgIGlmICghcmVkdWNlci5yZWJ1aWxkUm9vdChyb290KSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVNlcGFyYXRlRGVj
bGFyYXRpb25zKCZjb21waWxlciwgJnJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJs
b2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM2OTVjYmFkZmQ2NGEyMTJhNWJlNTUxODliOWNlNzJjNjhkNzRh
ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tz
LmgKQEAgLTAsMCArMSwzNSBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xB
VE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KKyNkZWZp
bmUgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVEVUNFSU5URVJG
QUNFQkxPQ0tTX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8v
IFRoaXMgcmV3cml0ZXMgaW50ZXJmYWNlIGJsb2NrIGRlY2xhcmF0aW9ucyBvbmx5LgorLy8KKy8v
IEFjY2VzcyBvZiBpbnRlcmZhY2UgYmxvY2tzIGlzIG5vdCByZXdyaXR0ZW4gKGUuZy4gVE9wZXJh
dG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrKS4gLy8KKy8vIFhYWDogXiBTdGlsbCB0
cnVlPworLy8KKy8vIEV4YW1wbGU6CisvLyAgdW5pZm9ybSBGb28geyBpbnQgeDsgfTsKKy8vIEJl
Y29tZXM6CisvLyAgdW5pZm9ybSBpbnQgeDsKKy8vCisvLyBFeGFtcGxlOgorLy8gIHVuaWZvcm0g
Rm9vIHsgaW50IHg7IH0gZm9vOworLy8gQmVjb21lczoKKy8vICBzdHJ1Y3QgRm9vIHsgaW50IHg7
IH07IHVuaWZvcm0gRm9vIHg7CisvLworQU5HTEVfTk9fRElTQ0FSRCBib29sIFJlZHVjZUludGVy
ZmFjZUJsb2NrcyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9
ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5T
TEFUT1JNRVRBTERJUkVDVF9SRURVQ0VJTlRFUkZBQ0VCTE9DS1NfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZWZlcmVuY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZWZlcmVuY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YjVkODZjNzg4ZTVkNmMyMzIxNTFiODM2MjZmODYwMTlhM2NiZGY5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZmVyZW5jZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8vCisv
LyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1Rf
UkVGRVJFTkNFX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFM
RElSRUNUX1JFRkVSRU5DRV9IXworCituYW1lc3BhY2Ugc2gKK3sKKworLy8gU2ltaWxhciB0byBz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyLCBidXQgYWxzbyBsaWZ0cyBjb21wYXJpc29uIG9wZXJhdG9y
cy4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUmVmCit7CisgIHB1YmxpYzoKKyAgICBS
ZWYoY29uc3QgUmVmICYpID0gZGVmYXVsdDsKKyAgICBSZWYoUmVmICYmKSAgICAgID0gZGVmYXVs
dDsKKyAgICBSZWYoVCAmcmVmKSA6IG1QdHIoJnJlZikge30KKworICAgIFJlZiAmb3BlcmF0b3I9
KGNvbnN0IFJlZiAmKSA9IGRlZmF1bHQ7CisgICAgUmVmICZvcGVyYXRvcj0oUmVmICYmKSA9IGRl
ZmF1bHQ7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyBy
ZXR1cm4gKm1QdHIgPT0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
UmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgIT0gKm90aGVyLm1QdHI7IH0KKyAgICBi
b29sIG9wZXJhdG9yPD0oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIgPD0g
Km90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgUmVmICZvdGhlcikgY29u
c3QgeyByZXR1cm4gKm1QdHIgPj0gKm90aGVyLm1QdHI7IH0KKyAgICBib29sIG9wZXJhdG9yPChj
b25zdCBSZWYgJm90aGVyKSBjb25zdCB7IHJldHVybiAqbVB0ciA8ICpvdGhlci5tUHRyOyB9Cisg
ICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgUmVmICZvdGhlcikgY29uc3QgeyByZXR1cm4gKm1QdHIg
PiAqb3RoZXIubVB0cjsgfQorCisgICAgVCAmZ2V0KCkgeyByZXR1cm4gKm1QdHI7IH0KKyAgICBU
IGNvbnN0ICZnZXQoKSBjb25zdCB7IHJldHVybiAqbVB0cjsgfQorCisgICAgb3BlcmF0b3IgVCAm
KCkgeyByZXR1cm4gKm1QdHI7IH0KKyAgICBvcGVyYXRvciBUIGNvbnN0ICYoKSBjb25zdCB7IHJl
dHVybiAqbVB0cjsgfQorCisgICAgb3BlcmF0b3IgVCAqKCkgeyByZXR1cm4gKm1QdHI7IH0KKyAg
ICBvcGVyYXRvciBUIGNvbnN0ICooKSBjb25zdCB7IHJldHVybiAqbVB0cjsgfQorCisgIHByaXZh
dGU6CisgICAgVCAqbVB0cjsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgQ1Jl
ZiA9IFJlZjxUIGNvbnN0PjsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09N
UElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVGRVJFTkNFX0hfCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzc4MTc3NmM1
NjA3OTIxZGUzMjJmZTk2NTlkODM2ZTBhMzJiNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVDYXNlRGVjbGFyYXRpb25zLmNwcApAQCAtMCwwICsxLDkxIEBACisvLwor
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1lc3Bh
Y2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFz
cyBSZXdyaXRlciA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAoreworICAgIHN0ZDo6dmVjdG9yPHN0
ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPj4gbURlY2xhcmVkVmFyU3RhY2s7CisKKyAgcHVi
bGljOgorICAgIFJld3JpdGVyKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJlYnVpbGQo
Y29tcGlsZXIsIHRydWUsIHRydWUpIHt9CisKKyAgICB+UmV3cml0ZXIoKSBvdmVycmlkZSB7IEFT
U0VSVChtRGVjbGFyZWRWYXJTdGFjay5lbXB0eSgpKTsgfQorCisgIHByaXZhdGU6CisgICAgUHJl
UmVzdWx0IHZpc2l0U3dpdGNoUHJlKFRJbnRlcm1Td2l0Y2ggJm5vZGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVy
bVN3aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCghbURlY2xhcmVk
VmFyU3RhY2suZW1wdHkoKSk7CisgICAgICAgIGNvbnN0IGF1dG8gdmFycyA9IHN0ZDo6bW92ZSht
RGVjbGFyZWRWYXJTdGFjay5iYWNrKCkpOworICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5wb3Bf
YmFjaygpOworICAgICAgICBpZiAoIXZhcnMuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byAmYmxvY2sgPSAqbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgZm9yIChj
b25zdCBUVmFyaWFibGUgKnZhciA6IHZhcnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYmxvY2suYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dmFyfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBibG9jay5hcHBlbmRTdGF0ZW1lbnQoJm5vZGUpOwor
ICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2Rl
OworICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUHJlKFRJbnRlcm1EZWNs
YXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbURlY2xhcmVkVmFy
U3RhY2suZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybU5vZGUgKnBhcmVu
dCA9IGdldFBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQtPmdldEFzQmxvY2so
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqZ3JhbmRwYXJl
bnQgPSBnZXRQYXJlbnROb2RlKDEpOworICAgICAgICAgICAgICAgIGlmIChncmFuZHBhcmVudCAm
JiBncmFuZHBhcmVudC0+Z2V0QXNTd2l0Y2hOb2RlKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbiBkZWNsID0gVmlld0RlY2xhcmF0aW9uKG5vZGUp
OworICAgICAgICAgICAgICAgICAgICBtRGVjbGFyZWRWYXJTdGFjay5iYWNrKCkucHVzaF9iYWNr
KCZkZWNsLnN5bWJvbC52YXJpYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wu
aW5pdEV4cHIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAqbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZkZWNsLnN5
bWJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVjbC5pbml0RXhwcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9Cit9
OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK2Jvb2wgc2g6OlJld3JpdGVDYXNlRGVjbGFyYXRpb25zKFRDb21waWxlciAmY29tcGlsZXIs
IFRJbnRlcm1CbG9jayAmcm9vdCkKK3sKKyAgICBpZiAoIVJld3JpdGVyKGNvbXBpbGVyKS5yZWJ1
aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNs
YXJhdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU1YTg4MjE1NDc1ZDA4ZTUxYjIxNzRlZTNlMWEzYWFjYjU0NDUwYzcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaApAQCAtMCww
ICsxLDUwIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNM
QVRPUk1FVEFMRElSRUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJT05TX0hfCisjZGVmaW5lIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVDQVNFREVDTEFSQVRJ
T05TX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIEVYQU1Q
TEUKKy8vICAgIHN3aXRjaCAoZXhwcikKKy8vICAgIHsKKy8vICAgICAgY2FzZSAwOgorLy8gICAg
ICAgIGludCB4ID0gMDsKKy8vICAgICAgICBicmVhazsKKy8vICAgICAgY2FzZSAxOgorLy8gICAg
ICAgIGludCB5ID0gMDsKKy8vICAgICAgICB7CisvLyAgICAgICAgICBpbnQgeiA9IDA7CisvLyAg
ICAgICAgfQorLy8gICAgICAgIGJyZWFrOworLy8gICAgfQorLy8gQmVjb21lcworLy8gICAgewor
Ly8gICAgICBpbnQgeDsKKy8vICAgICAgaW50IHk7CisvLyAgICAgIHN3aXRjaCAoZXhwcikKKy8v
ICAgICAgeworLy8gICAgICAgIGNhc2UgMDoKKy8vICAgICAgICAgIHggPSAwOworLy8gICAgICAg
ICAgYnJlYWs7CisvLyAgICAgICAgY2FzZSAxOgorLy8gICAgICAgICAgeSA9IDA7CisvLyAgICAg
ICAgICB7CisvLyAgICAgICAgICAgIGludCB6ID0gMDsKKy8vICAgICAgICAgIH0KKy8vICAgICAg
ICAgIGJyZWFrOworLy8gICAgICB9CisvLyAgICB9CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3
cml0ZUNhc2VEZWNsYXJhdGlvbnMoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZy
b290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNM
QVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUNBU0VERUNMQVJBVElPTlNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGFkNWEzNmM4MWI1YzcyNDE4YTZhOWJhZDE1NWEzYzQ1MzZiNmJlYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuY3BwCkBAIC0wLDAg
KzEsMTE0IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBzaDsKKworbmFtZXNwYWNlCit7CisKK2NsYXNzIEZpbmREZWNsYXJl
ZEdsb2JhbHMgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKK3sKKyAgcHVibGljOgorICAgIHN0ZDo6
dW5vcmRlcmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4gbURlY2xhcmVkR2xvYmFsczsKKworICAg
IEZpbmREZWNsYXJlZEdsb2JhbHMoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJtUmVidWls
ZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXREZWNsYXJh
dGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJmRlY2xOb2RlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgVEludGVybU5vZGUgKmRlY2xhcmF0b3JOb2RlID0gZGVjbE5vZGUuZ2V0Q2hpbGROb2Rl
KDApOworICAgICAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlICAgPSBudWxscHRyOworCisg
ICAgICAgIGlmIChUSW50ZXJtQmluYXJ5ICppbml0Tm9kZSA9IGRlY2xhcmF0b3JOb2RlLT5nZXRB
c0JpbmFyeU5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sTm9kZSA9IGluaXRO
b2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sTm9kZSA9IGRlY2xhcmF0b3JOb2RlLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChzeW1ib2xOb2Rl
KTsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLT52YXJpYWJsZSgp
OworCisgICAgICAgIG1EZWNsYXJlZEdsb2JhbHMuaW5zZXJ0KCZ2YXIpOworCisgICAgICAgIHJl
dHVybiB7ZGVjbE5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUHJlUmVz
dWx0IHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24g
Jm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6
TmVpdGhlcn07CisgICAgfQorfTsKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJl
YnVpbGQKK3sKKyAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+
ICZtRGVjbGFyZWRHbG9iYWxzOworICAgIEludmFyaWFudHMgJm1PdXRJbnZhcmlhbnRzOworCisg
IHB1YmxpYzoKKyAgICBSZXdyaXRlcihUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBUVmFyaWFibGUgKj4gJmRlY2xhcmVkR2xv
YmFscywKKyAgICAgICAgICAgICBJbnZhcmlhbnRzICZvdXRJbnZhcmlhbnRzKQorICAgICAgICA6
IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCBmYWxzZSksCisgICAgICAgICAgbURlY2xh
cmVkR2xvYmFscyhkZWNsYXJlZEdsb2JhbHMpLAorICAgICAgICAgIG1PdXRJbnZhcmlhbnRzKG91
dEludmFyaWFudHMpCisgICAge30KKworICAgIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmll
ckRlY2xhcmF0aW9uUHJlKAorICAgICAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b24gJmdxRGVjbE5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBUSW50ZXJtU3ltYm9sICZz
eW1ib2xOb2RlID0gKmdxRGVjbE5vZGUuZ2V0U3ltYm9sKCk7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAmdmFyICAgICAgPSBzeW1ib2xOb2RlLnZhcmlhYmxlKCk7CisKKyAgICAgICAgaWYgKGdx
RGVjbE5vZGUuaXNJbnZhcmlhbnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbU91dEludmFy
aWFudHMuaW5zZXJ0KHZhcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAobURlY2xhcmVkR2xv
YmFscy5maW5kKCZ2YXIpID09IG1EZWNsYXJlZEdsb2JhbHMuZW5kKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1EZWNsYXJhdGlvbnsmc3ltYm9sTm9kZX07Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUHJlUmVzdWx0
IHZpc2l0RGVjbGFyYXRpb25QcmUoVEludGVybURlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0K
KworICAgIFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2Rl
LCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KK307CisKK30gIC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworYm9vbCBzaDo6UmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xzKFRDb21waWxlciAm
Y29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJs
b2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFu
dHMgJm91dEludmFyaWFudHMpCit7CisgICAgRmluZERlY2xhcmVkR2xvYmFscyBmZGcoY29tcGls
ZXIpOworICAgIGlmICghZmRnLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgTE9H
SUNfRVJST1IoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFJld3JpdGVy
IHJld3JpdGVyKGNvbXBpbGVyLCBmZGcubURlY2xhcmVkR2xvYmFscywgb3V0SW52YXJpYW50cyk7
CisgICAgaWYgKCFyZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTMxYmNhZmJhNmNmMTdm
YTljOThkNTFlZTg1YzM2ZDMwZTdmNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVHbG9iYWxRdWFsaWZpZXJEZWNscy5oCkBAIC0wLDAgKzEsNDggQEAKKy8vCisvLyBD
b3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8v
CisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVX
UklURUdMT0JBTFFVQUxJRklFUkRFQ0xTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVHTE9CQUxRVUFMSUZJRVJERUNMU19IXworCisj
aW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tcGlsZXIuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8vIFRyYWNrcyBUVmFyaWFibGVzIGFu
ZCBURmllbGRzIHRoYXQgYXJlIG1hcmtlZCBhcyAiaW52YXJpYW50Ii4KK2NsYXNzIEludmFyaWFu
dHMKK3sKKyAgcHVibGljOgorICAgIHZvaWQgaW5zZXJ0KGNvbnN0IFRWYXJpYWJsZSAmdmFyKSB7
IG1JbnZhcmlhbnRzLmluc2VydCgmdmFyKTsgfQorCisgICAgdm9pZCBpbnNlcnQoY29uc3QgVEZp
ZWxkICZmaWVsZCkgeyBtSW52YXJpYW50cy5pbnNlcnQoJmZpZWxkKTsgfQorCisgICAgYm9vbCBj
b250YWlucyhjb25zdCBUVmFyaWFibGUgJnZhcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtSW52YXJpYW50cy5maW5kKCZ2YXIpICE9IG1JbnZhcmlhbnRzLmVuZCgpOworICAgIH0KKwor
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgVEZpZWxkICZmaWVsZCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtSW52YXJpYW50cy5maW5kKCZmaWVsZCkgIT0gbUludmFyaWFudHMuZW5kKCk7
CisgICAgfQorCisgIHByaXZhdGU6CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IHZvaWQg
Kj4gbUludmFyaWFudHM7Cit9OworCisvLyBUaGlzIHJld3JpdGVzIFRJbnRlcm1HbG9iYWxRdWFs
aWZpZXJEZWNsYXJhdGlvbnMgYXMgVEludGVybURlY2xhcmF0aW9ucy4KKy8vIGBvdXRJbnZhcmlh
bnRzYCBpcyBwb3B1bGF0ZWQgd2l0aCB0aGUgaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBvdGhlcndp
c2UgYmUgbG9zdCBieSBzdWNoIGEKKy8vIHRyYW5zZm9ybS4KK0FOR0xFX05PX0RJU0NBUkQgYm9v
bCBSZXdyaXRlR2xvYmFsUXVhbGlmaWVyRGVjbHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2Nr
ICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnZhcmlhbnRzICZvdXRJbnZhcmlhbnRzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklU
RUdMT0JBTFFVQUxJRklFUkRFQ0xTX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0
ZUtleXdvcmRzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUwMTRmNDBmODFjY2FkNTAxMzM3MDY1OGJjODk0MmIwMDJkNmI4ZTMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmNwcApAQCAtMCwwICsxLDQzNCBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGNjdHlwZT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2lu
Y2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3Jk
ZXJlZF9zZXQ+CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9Bc3RIZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvRGVidWcuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBzaDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgUmVtYXBwaW5nID0gc3RkOjp1bm9yZGVyZWRfbWFw
PGNvbnN0IFQgKiwgY29uc3QgVCAqPjsKKworY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVy
bVJlYnVpbGQKK3sKKyAgcHJpdmF0ZToKKyAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJp
bmc+ICZtS2V5d29yZHM7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBSZW1hcHBpbmc8VEZpZWxk
PiBtb2RpZmllZEZpZWxkczsKKyAgICBSZW1hcHBpbmc8VEZpZWxkTGlzdD4gbUZpZWxkTGlzdHM7
CisgICAgUmVtYXBwaW5nPFRGdW5jdGlvbj4gbUZ1bmN0aW9uczsKKyAgICBSZW1hcHBpbmc8VElu
dGVyZmFjZUJsb2NrPiBtSW50ZXJmYWNlQmxvY2tzOworICAgIFJlbWFwcGluZzxUU3RydWN0dXJl
PiBtU3RydWN0dXJlczsKKyAgICBSZW1hcHBpbmc8VFZhcmlhYmxlPiBtVmFyaWFibGVzOworICAg
IHN0ZDo6c3RyaW5nIG1OZXdOYW1lQnVmZmVyOworCisgIHByaXZhdGU6CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgSW1tdXRhYmxlU3RyaW5nIG1heWJlQ3JlYXRlTmV3TmFtZShUIGNv
bnN0ICZvYmplY3QpCisgICAgeworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhvYmplY3QsIGZh
bHNlKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1JZEdlbi5jcmVhdGVOZXdOYW1l
KE5hbWUob2JqZWN0KSkucmF3TmFtZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOYW1l
KG9iamVjdCkucmF3TmFtZSgpOworICAgIH0KKworICAgIGNvbnN0IFRGaWVsZCAqY3JlYXRlUmVu
YW1lZChjb25zdCBURmllbGQgJmZpZWxkKQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9
CisgICAgICAgICAgICBuZXcgVEZpZWxkKGNvbnN0X2Nhc3Q8VFR5cGUgKj4oJmdldFJlbmFtZWRP
ck9yaWdpbmFsKCpmaWVsZC50eXBlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVD
cmVhdGVOZXdOYW1lKGZpZWxkKSwgZmllbGQubGluZSgpLCBTeW1ib2xUeXBlOjpBbmdsZUludGVy
bmFsKTsKKworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAgICBjb25zdCBURmll
bGRMaXN0ICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlzdCkKKyAgICB7
CisgICAgICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVEZpZWxkTGlzdCgpOworICAgICAgICBmb3Ig
KGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZExpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJlbmFtZWQtPnB1c2hfYmFjayhjb25zdF9jYXN0PFRGaWVsZCAqPigmZ2V0UmVuYW1lZE9yT3Jp
Z2luYWwoKmZpZWxkKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZW5hbWVkOworICAg
IH0KKworICAgIGNvbnN0IFRGdW5jdGlvbiAqY3JlYXRlUmVuYW1lZChjb25zdCBURnVuY3Rpb24g
JmZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgYXV0byAqcmVuYW1lZCA9CisgICAgICAgICAgICBu
ZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShmdW5jdGlvbiks
IFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZn
ZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jdGlvbi5nZXRSZXR1cm5UeXBlKCkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbi5pc0tub3duVG9Ob3RIYXZlU2lkZUVmZmVjdHMoKSk7
CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IHBhcmFtQ291bnQgPSBmdW5jdGlvbi5nZXRQYXJhbUNv
dW50KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1Db3VudDsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnBhcmFtID0gKmZ1bmN0aW9u
LmdldFBhcmFtKGkpOworICAgICAgICAgICAgcmVuYW1lZC0+YWRkUGFyYW1ldGVyKCZnZXRSZW5h
bWVkT3JPcmlnaW5hbChwYXJhbSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZ1bmN0aW9u
LmlzRGVmaW5lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZW5hbWVkLT5zZXREZWZpbmVk
KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZnVuY3Rpb24uaGFzUHJvdG90eXBlRGVjbGFy
YXRpb24oKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1lZC0+c2V0SGFzUHJvdG90eXBl
RGVjbGFyYXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZW5hbWVkOworICAg
IH0KKworICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayAqY3JlYXRlUmVuYW1lZChjb25zdCBUSW50
ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQorICAgIHsKKyAgICAgICAgVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXIgPSBUTGF5b3V0UXVhbGlmaWVyOjpDcmVhdGUoKTsKKyAgICAg
ICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAgICAgPSBpbnRlcmZhY2VCbG9jay5ibG9j
a1N0b3JhZ2UoKTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJpbmRpbmcgICAgICAgICAgPSBp
bnRlcmZhY2VCbG9jay5ibG9ja0JpbmRpbmcoKTsKKworICAgICAgICBhdXRvICpyZW5hbWVkID0K
KyAgICAgICAgICAgIG5ldyBUSW50ZXJmYWNlQmxvY2soJm1TeW1ib2xUYWJsZSwgbWF5YmVDcmVh
dGVOZXdOYW1lKGludGVyZmFjZUJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmdldFJlbmFtZWRPck9yaWdpbmFsKGludGVyZmFjZUJsb2NrLmZpZWxkcygpKSwgbGF5b3V0
UXVhbGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpB
bmdsZUludGVybmFsLCBpbnRlcmZhY2VCbG9jay5leHRlbnNpb24oKSk7CisKKyAgICAgICAgcmV0
dXJuIHJlbmFtZWQ7CisgICAgfQorCisgICAgY29uc3QgVFN0cnVjdHVyZSAqY3JlYXRlUmVuYW1l
ZChjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBhdXRvICpyZW5h
bWVkID0KKyAgICAgICAgICAgIG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIG1heWJlQ3Jl
YXRlTmV3TmFtZShzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdldFJl
bmFtZWRPck9yaWdpbmFsKHN0cnVjdHVyZS5maWVsZHMoKSksIFN5bWJvbFR5cGU6OkFuZ2xlSW50
ZXJuYWwpOworCisgICAgICAgIHJlbmFtZWQtPnNldEF0R2xvYmFsU2NvcGUoc3RydWN0dXJlLmF0
R2xvYmFsU2NvcGUoKSk7CisKKyAgICAgICAgcmV0dXJuIHJlbmFtZWQ7CisgICAgfQorCisgICAg
Y29uc3QgVFR5cGUgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVFR5cGUgJnR5cGUpCisgICAgeworICAg
ICAgICBUVHlwZSAqcmVuYW1lZDsKKworICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVyZSAqc3Ry
dWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1l
ZCA9IG5ldyBUVHlwZSgmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoKnN0cnVjdHVyZSksIHR5cGUuaXNT
dHJ1Y3RTcGVjaWZpZXIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3QgVElu
dGVyZmFjZUJsb2NrICppbnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmVuYW1lZCA9IG5ldyBUVHlwZSgmZ2V0UmVuYW1lZE9y
T3JpZ2luYWwoKmludGVyZmFjZUJsb2NrKSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBMT0dJQ19FUlJPUigp
OyAgLy8gQ2FuJ3QgcmVuYW1lIGJ1aWx0LWluIHR5cGVzLgorICAgICAgICAgICAgcmVuYW1lZCA9
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJlbmFtZWQtPm1ha2VBcnJheXModHlwZS5nZXRBcnJheVNpemVz
KCkpOworICAgICAgICB9CisgICAgICAgIHJlbmFtZWQtPnNldFByZWNpc2UodHlwZS5pc1ByZWNp
c2UoKSk7CisgICAgICAgIHJlbmFtZWQtPnNldEludmFyaWFudCh0eXBlLmlzSW52YXJpYW50KCkp
OworICAgICAgICByZW5hbWVkLT5zZXRNZW1vcnlRdWFsaWZpZXIodHlwZS5nZXRNZW1vcnlRdWFs
aWZpZXIoKSk7CisgICAgICAgIHJlbmFtZWQtPnNldExheW91dFF1YWxpZmllcih0eXBlLmdldExh
eW91dFF1YWxpZmllcigpKTsKKworICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICB9CisKKyAg
ICBjb25zdCBUVmFyaWFibGUgKmNyZWF0ZVJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJs
ZSkKKyAgICB7CisgICAgICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZSh2YXJpYWJsZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZnZXRSZW5hbWVkT3JPcmlnaW5hbCh2YXJpYWJsZS5nZXRUeXBl
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpB
bmdsZUludGVybmFsLCB2YXJpYWJsZS5leHRlbnNpb24oKSk7CisKKyAgICAgICAgcmV0dXJuIHJl
bmFtZWQ7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCAq
dHJ5R2V0UmVuYW1lZEltcGwoY29uc3QgVCAmb2JqZWN0LCBSZW1hcHBpbmc8VD4gKnJlbWFwcGlu
ZykKKyAgICB7CisgICAgICAgIGlmICghbmVlZHNSZW5hbWluZyhvYmplY3QsIHRydWUpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChyZW1hcHBpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXQgPSByZW1hcHBp
bmctPmZpbmQoJm9iamVjdCk7CisgICAgICAgICAgICBpZiAoaXQgIT0gcmVtYXBwaW5nLT5lbmQo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFQgKnJlbmFtZWRPYmplY3Qg
PSBjcmVhdGVSZW5hbWVkKG9iamVjdCk7CisKKyAgICAgICAgaWYgKHJlbWFwcGluZykKKyAgICAg
ICAgeworICAgICAgICAgICAgKCpyZW1hcHBpbmcpWyZvYmplY3RdID0gcmVuYW1lZE9iamVjdDsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZW5hbWVkT2JqZWN0OworICAgIH0KKworICAg
IGNvbnN0IFRGaWVsZCAqdHJ5R2V0UmVuYW1lZChjb25zdCBURmllbGQgJmZpZWxkKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZpZWxkLCAmbW9kaWZpZWRGaWVsZHMp
OworICAgIH0KKworICAgIGNvbnN0IFRGaWVsZExpc3QgKnRyeUdldFJlbmFtZWQoY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRMaXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJ
bXBsKGZpZWxkTGlzdCwgJm1GaWVsZExpc3RzKTsKKyAgICB9CisKKyAgICBjb25zdCBURnVuY3Rp
b24gKnRyeUdldFJlbmFtZWQoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZ1bmMsICZtRnVuY3Rpb25zKTsKKyAgICB9CisKKyAg
ICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgKnRyeUdldFJlbmFtZWQoY29uc3QgVEludGVyZmFjZUJs
b2NrICZpbnRlcmZhY2VCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVk
SW1wbChpbnRlcmZhY2VCbG9jaywgJm1JbnRlcmZhY2VCbG9ja3MpOworICAgIH0KKworICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHN0cnVjdHVyZSwgJm1T
dHJ1Y3R1cmVzKTsKKyAgICB9CisKKyAgICBjb25zdCBUVHlwZSAqdHJ5R2V0UmVuYW1lZChjb25z
dCBUVHlwZSAmdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh0
eXBlLCBzdGF0aWNfY2FzdDxSZW1hcHBpbmc8VFR5cGU+ICo+KG51bGxwdHIpKTsKKyAgICB9CisK
KyAgICBjb25zdCBUVmFyaWFibGUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJp
YWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh2YXJpYWJsZSwg
Jm1WYXJpYWJsZXMpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNv
bnN0IFQgJmdldFJlbmFtZWRPck9yaWdpbmFsKGNvbnN0IFQgJm9iamVjdCkKKyAgICB7CisgICAg
ICAgIGNvbnN0IFQgKnJlbmFtZWQgPSB0cnlHZXRSZW5hbWVkKG9iamVjdCk7CisgICAgICAgIGlm
IChyZW5hbWVkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlbmFtZWQ7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICBib29sIG5lZWRzUmVuYW1pbmdJbXBsKGNvbnN0IFQgJm9iamVjdCkgY29u
c3QKKyAgICB7CisgICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IG9iamVjdC5z
eW1ib2xUeXBlKCk7CisgICAgICAgIHN3aXRjaCAoc3ltYm9sVHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpCdWlsdEluOgorICAgICAgICAgICAgY2FzZSBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsOgorICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpFbXB0
eToKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNhc2UgU3lt
Ym9sVHlwZTo6VXNlckRlZmluZWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZSA9IE5hbWUob2JqZWN0KS5yYXdO
YW1lKCk7CisgICAgICAgIGlmIChtS2V5d29yZHMuZmluZChuYW1lKSAhPSBtS2V5d29yZHMuZW5k
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG5hbWUuYmVnaW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZpeCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBURmllbGQgJmZp
ZWxkLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1Jl
bmFtaW5nSW1wbChmaWVsZCkgfHwgKHJlY3Vyc2l2ZSAmJiBuZWVkc1JlbmFtaW5nKCpmaWVsZC50
eXBlKCksIHRydWUpKTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRMaXN0LCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChyZWN1cnNpdmUpOworICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBm
aWVsZExpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKCpmaWVs
ZCwgdHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBURnVuY3Rpb24gJmZ1bmN0aW9uLCBib29sIHJl
Y3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nSW1wbChmdW5j
dGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFyZWN1cnNpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHNpemVfdCBwYXJhbUNvdW50ID0gZnVu
Y3Rpb24uZ2V0UGFyYW1Db3VudCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBh
cmFtQ291bnQ7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZw
YXJhbSA9ICpmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFt
aW5nKHBhcmFtLCB0cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZp
bnRlcmZhY2VCbG9jaywgYm9vbCByZWN1cnNpdmUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbmVlZHNSZW5hbWluZ0ltcGwoaW50ZXJmYWNlQmxvY2spIHx8CisgICAgICAgICAgICAgICAo
cmVjdXJzaXZlICYmIG5lZWRzUmVuYW1pbmcoaW50ZXJmYWNlQmxvY2suZmllbGRzKCksIHRydWUp
KTsKKyAgICB9CisKKyAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFN0cnVjdHVyZSAmc3Ry
dWN0dXJlLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVk
c1JlbmFtaW5nSW1wbChzdHJ1Y3R1cmUpIHx8CisgICAgICAgICAgICAgICAocmVjdXJzaXZlICYm
IG5lZWRzUmVuYW1pbmcoc3RydWN0dXJlLmZpZWxkcygpLCB0cnVlKSk7CisgICAgfQorCisgICAg
Ym9vbCBuZWVkc1JlbmFtaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHJlY3Vyc2l2ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBl
LmdldFN0cnVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmVlZHNSZW5hbWlu
Zygqc3RydWN0dXJlLCByZWN1cnNpdmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNv
bnN0IFRJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldEludGVyZmFjZUJs
b2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nKCppbnRl
cmZhY2VCbG9jaywgcmVjdXJzaXZlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgbmVlZHNSZW5hbWluZyhjb25zdCBUVmFyaWFibGUgJnZhcmlhYmxlLCBib29sIHJlY3Vyc2l2
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nSW1wbCh2YXJpYWJs
ZSkgfHwKKyAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZyh2YXJpYWJs
ZS5nZXRUeXBlKCksIHRydWUpKTsKKyAgICB9CisKKyAgcHVibGljOgorICAgIFJld3JpdGVyKFRD
b21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxl
U3RyaW5nPiAma2V5d29yZHMpCisgICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZh
bHNlLCB0cnVlKSwgbUtleXdvcmRzKGtleXdvcmRzKSwgbUlkR2VuKGlkR2VuKQorICAgIHt9CisK
KyAgICBQb3N0UmVzdWx0IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgJnN5bWJvbE5vZGUpCisg
ICAgeworICAgICAgICBjb25zdCBUVmFyaWFibGUgJnZhciA9IHN5bWJvbE5vZGUudmFyaWFibGUo
KTsKKyAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodmFyLCB0cnVlKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZyVmFyID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodmFy
KTsKKyAgICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1TeW1ib2woJnJWYXIpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzeW1ib2xOb2RlOworICAgIH0KKworICAgIFBvc3RSZXN1bHQg
dmlzaXRGdW5jdGlvblByb3RvdHlwZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90
b05vZGUpCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3Rv
Tm9kZS5nZXRGdW5jdGlvbigpOworICAgICAgICBpZiAobmVlZHNSZW5hbWluZyhmdW5jLCB0cnVl
KSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZyRnVuYyA9IGdldFJl
bmFtZWRPck9yaWdpbmFsKGZ1bmMpOworICAgICAgICAgICAgcmV0dXJuICpuZXcgVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlKCZyRnVuYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZ1bmNQ
cm90b05vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlv
blBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAq
ZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAgICAgICAgY29uc3QgVEZ1bmN0
aW9uICZmdW5jICAgICAgICAgICAgICAgICAgID0gKmZ1bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24o
KTsKKyAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcoZnVuYywgdHJ1ZSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChm
dW5jKTsKKyAgICAgICAgICAgIGF1dG8gKnJGdW5jUHJvdG9Ob2RlICAgPSBuZXcgVEludGVybUZ1
bmN0aW9uUHJvdG90eXBlKCZyRnVuYyk7CisgICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJt
RnVuY3Rpb25EZWZpbml0aW9uKHJGdW5jUHJvdG9Ob2RlLCBmdW5jRGVmTm9kZS5nZXRCb2R5KCkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmdW5jRGVmTm9kZTsKKyAgICB9CisKKyAgICBQ
b3N0UmVzdWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZhZ2dyZWdhdGVO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0ZU5vZGUuaXNDb25zdHJ1
Y3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGFnZ3Jl
Z2F0ZU5vZGUuZ2V0VHlwZSgpOworICAgICAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcodHlwZSwg
dHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnJUeXBl
ID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodHlwZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRJ
bnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9yKHJUeXBlLCBhZ2dyZWdhdGVOb2RlLmdl
dFNlcXVlbmNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmFnZ3JlZ2F0ZU5v
ZGUuZ2V0RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRy
dWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1
bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KGFnZ3JlZ2F0ZU5vZGUuZ2V0T3AoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVuY3Rpb25JbkFTVDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwo
ckZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZU5vZGUuZ2V0U2VxdWVuY2UoKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9u
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0
ZVJhd0Z1bmN0aW9uQ2FsbChyRnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlTm9kZS5nZXRT
ZXF1ZW5jZSgpKTsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUJ1aWx0SW5GdW5jdGlv
bkNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgckZ1bmMsIGFnZ3JlZ2F0ZU5vZGUu
Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBhZ2dyZWdhdGVOb2RlOworICAgIH0KK307CisKK30gIC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYm9vbCBzaDo6
UmV3cml0ZUtleXdvcmRzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgIElkR2Vu
ICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFi
bGVTdHJpbmc+ICZrZXl3b3JkcykKK3sKKyAgICBSZXdyaXRlciByZXdyaXRlcihjb21waWxlciwg
aWRHZW4sIGtleXdvcmRzKTsKKyAgICBpZiAoIXJld3JpdGVyLnJlYnVpbGRSb290KHJvb3QpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9SZXdyaXRlS2V5d29yZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTYyYmM3OWI0MTE4ZjljNzQ0NzVjMjY4
YjY5ZGU2MjVjNTdmNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVL
ZXl3b3Jkcy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJf
VFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCisjZGVm
aW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVLRVlX
T1JEU19IXworCisjaW5jbHVkZSA8c2V0PgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uaCIKKworbmFt
ZXNwYWNlIHNoCit7CisKKy8vIFRoaXMgd2Fsa3MgdGhlIHRyZWUgYW5kIHJlbmFtZXMgYWxsIG5h
bWVzIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGUgaW5wdXQgYGtleXdvcmRzYC4KK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBSZXdyaXRlS2V5d29yZHMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c2V0PEltbXV0YWJsZVN0cmlu
Zz4gJmtleXdvcmRzKTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1Jld3JpdGVPdXRBcmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MWMwMzdkNTI5MGFkZjIzMjI1ZWI4OGRk
MGZiNzc4OWFhZTU0ZDJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVP
dXRBcmdzLmNwcApAQCAtMCwwICsxLDIwNCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3JpdGVPdXRBcmdzLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK25hbWVzcGFjZQoreworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK2NsYXNzIFNtYWxsTXVsdGlTZXQKK3sKKyAgcHVibGljOgorICAgIHN0cnVjdCBFbnRy
eQorICAgIHsKKyAgICAgICAgVCBlbGVtOworICAgICAgICBzaXplX3QgY291bnQ7CisgICAgfTsK
KworICAgIGNvbnN0IEVudHJ5ICpmaW5kKGNvbnN0IFQgJngpIGNvbnN0CisgICAgeworICAgICAg
ICBmb3IgKGF1dG8gJmVudHJ5IDogbUVudHJpZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICh4ID09IGVudHJ5LmVsZW0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICZlbnRyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBzaXplX3QgbXVsdGlwbGljaXR5KGNvbnN0IFQgJngpIGNvbnN0Cisg
ICAgeworICAgICAgICBjb25zdCBFbnRyeSAqZW50cnkgPSBmaW5kKHgpOworICAgICAgICByZXR1
cm4gZW50cnkgPyBlbnRyeS0+Y291bnQgOiAwOworICAgIH0KKworICAgIGNvbnN0IEVudHJ5ICZp
bnNlcnQoY29uc3QgVCAmeCkKKyAgICB7CisgICAgICAgIEVudHJ5ICplbnRyeSA9IGZpbmRNdXRh
YmxlKHgpOworICAgICAgICBpZiAoZW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrZW50
cnktPmNvdW50OworICAgICAgICAgICAgcmV0dXJuICplbnRyeTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FbnRyaWVzLnB1c2hfYmFjayh7eCwgMX0p
OworICAgICAgICAgICAgcmV0dXJuIG1FbnRyaWVzLmJhY2soKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgY2xlYXIoKSB7IG1FbnRyaWVzLmNsZWFyKCk7IH0KKworICAgIGJvb2wgZW1w
dHkoKSBjb25zdCB7IHJldHVybiBtRW50cmllcy5lbXB0eSgpOyB9CisKKyAgICBzaXplX3QgdW5p
cXVlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1FbnRyaWVzLnNpemUoKTsgfQorCisgIHByaXZhdGU6
CisgICAgQU5HTEVfSU5MSU5FIEVudHJ5ICpmaW5kTXV0YWJsZShjb25zdCBUICZ4KSB7IHJldHVy
biBjb25zdF9jYXN0PEVudHJ5ICo+KGZpbmQoeCkpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6
OnZlY3RvcjxFbnRyeT4gbUVudHJpZXM7Cit9OworCitjb25zdCBUVmFyaWFibGUgKkdldFZhcmlh
YmxlKFRJbnRlcm1Ob2RlICZub2RlKQoreworICAgIFRJbnRlcm1UeXBlZCAqdHlOb2RlID0gbm9k
ZS5nZXRBc1R5cGVkKCk7CisgICAgQVNTRVJUKHR5Tm9kZSk7CisgICAgaWYgKFRJbnRlcm1TeW1i
b2wgKnN5bWJvbCA9IHR5Tm9kZS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gJnN5bWJvbC0+dmFyaWFibGUoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK2NsYXNzIFJld3JpdGVyIDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgU21hbGxN
dWx0aVNldDxjb25zdCBUVmFyaWFibGUgKj4gbVZhckJ1ZmZlcjsgIC8vIHJldXNhYmxlIGJ1ZmZl
cgorICAgIFN5bWJvbEVudiAmbVN5bWJvbEVudjsKKworICBwdWJsaWM6CisgICAgflJld3JpdGVy
KCkgb3ZlcnJpZGUgeyBBU1NFUlQobVZhckJ1ZmZlci5lbXB0eSgpKTsgfQorCisgICAgUmV3cml0
ZXIoVENvbXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xF
bnYpCisgICAge30KKworICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1B
Z2dyZWdhdGUgJmFnZ3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQo
bVZhckJ1ZmZlci5lbXB0eSgpKTsKKworICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmMgPSBh
Z2dyZWdhdGVOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmICghZnVuYykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgICAgIH0KKworICAgICAg
ICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpOwor
ICAgICAgICBzaXplX3QgYXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKworICAgICAgICBh
dXRvIGdldFBhcmFtUXVhbGlmaWVyID0gWyZdKHNpemVfdCBpKSB7CisgICAgICAgICAgICBjb25z
dCBUVmFyaWFibGUgJnBhcmFtICAgICA9ICpmdW5jLT5nZXRQYXJhbShpKTsKKyAgICAgICAgICAg
IGNvbnN0IFRUeXBlICZwYXJhbVR5cGUgICAgID0gcGFyYW0uZ2V0VHlwZSgpOworICAgICAgICAg
ICAgY29uc3QgVFF1YWxpZmllciBwYXJhbVF1YWwgPSBwYXJhbVR5cGUuZ2V0UXVhbGlmaWVyKCk7
CisgICAgICAgICAgICBzd2l0Y2ggKHBhcmFtUXVhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFRRdWFsaWZpZXI6OkV2cU91dDoKKyAgICAgICAgICAgICAgICBjYXNlIFRR
dWFsaWZpZXI6OkV2cUluT3V0OgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xFbnYu
aXNSZWZlcmVuY2UocGFyYW0pKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZShwYXJhbSwgQWRkcmVzc1NwYWNl
OjpUaHJlYWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBhcmFtUXVhbDsKKyAgICAgICAg
fTsKKworICAgICAgICBib29sIG1pZ2h0QWxpYXMgPSBmYWxzZTsKKworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IFRRdWFsaWZpZXIgcGFyYW1RdWFsID0gZ2V0UGFyYW1RdWFsaWZpZXIoaSk7CisKKyAgICAg
ICAgICAgIHN3aXRjaCAocGFyYW1RdWFsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNhc2UgVFF1YWxpZmllcjo6RXZxT3V0OgorICAgICAgICAgICAgICAgIGNhc2UgVFF1YWxpZmll
cjo6RXZxSW5PdXQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25z
dCBUVmFyaWFibGUgKnZhciA9IEdldFZhcmlhYmxlKCphcmdzW2ldKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1WYXJCdWZmZXIuaW5zZXJ0KHZhcikuY291bnQgPiAxKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtaWdodEFsaWFzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgPSBhcmdDb3VudDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgYm9vbCBoYXNJbmRldGVybWlu
YXRlVmFyID0gbVZhckJ1ZmZlci5maW5kKG51bGxwdHIpOworCisgICAgICAgIGlmICghbWlnaHRB
bGlhcykKKyAgICAgICAgeworICAgICAgICAgICAgbWlnaHRBbGlhcyA9IGhhc0luZGV0ZXJtaW5h
dGVWYXIgJiYgbVZhckJ1ZmZlci51bmlxdWVTaXplKCkgPiAxOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG1pZ2h0QWxpYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQgKmFyZyA9IGFyZ3NbaV0tPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoYXJnKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgKnZhciAgICAg
ICA9IEdldFZhcmlhYmxlKCphcmcpOworICAgICAgICAgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIg
cGFyYW1RdWFsID0gZ2V0UGFyYW1RdWFsaWZpZXIoaSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
aGFzSW5kZXRlcm1pbmF0ZVZhciB8fCBtVmFyQnVmZmVyLm11bHRpcGxpY2l0eSh2YXIpID4gMSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyYW1RdWFs
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRR
dWFsaWZpZXI6OkV2cU91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0g
Jm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgib3V0IiksIGFyZy0+Z2V0VHlw
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXthcmd9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFJbk91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
W2ldID0gJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWUoImlub3V0IiksIGFyZy0+Z2V0VHlwZSgpLCAqbmV3IFRJbnRl
cm1TZXF1ZW5jZXthcmd9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1WYXJCdWZmZXIuY2xlYXIoKTsKKwor
ICAgICAgICByZXR1cm4gYWdncmVnYXRlTm9kZTsKKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKK2Jvb2wgc2g6OlJld3JpdGVPdXRBcmdzKFRDb21waWxlciAmY29tcGls
ZXIsIFRJbnRlcm1CbG9jayAmcm9vdCwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCit7CisgICAgUmV3
cml0ZXIgcmV3cml0ZXIoY29tcGlsZXIsIHN5bWJvbEVudik7CisgICAgaWYgKCFyZXdyaXRlci5y
ZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFy
Z3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk4MmI3NDdh
M2U3ZGVmZTI0YmRiNTllNjIxY2E3NDUwZTMxY2Q0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaApAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJp
Z2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVP
VVRBUkdTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElS
RUNUX1JFV1JJVEVPVVRBUkdTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Nv
bXBpbGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUHJvZ3JhbVByZWx1ZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Ry
YW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuaCIKKworbmFtZXNwYWNlIHNoCit7CisKKy8v
IGUuZy46CisvLyAgICAvKnZvaWQgZm9vKG91dCBpbnQgeCwgaW5vdXQgaW50IHkpKi8KKy8vICAg
IGZvbyh6LCB3KTsKKy8vIGJlY29tZXMKKy8vICAgIGZvbyhPdXQoeiksIEluT3V0KHcpKTsKKy8v
IHVubGVzcyBgemAgYW5kIGB3YCBhcmUgZGV0ZWN0ZWQgdG8gbmV2ZXIgYWxpYXMuCisvLyBUaGUg
dHJhbnNsYXRlZCBleGFtcGxlIGVmZmVjdGl2ZWx5IGJlaGF2ZXMgdGhlIHNhbWUgYXM6CisvLyAg
ICBpbnQgXzE7CisvLyAgICBpbnQgXzIgPSB3OworLy8gICAgZm9vKF8xLCBfMik7CisvLyAgICB6
ID0gXzE7CisvLyAgICB3ID0gXzI7CitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZU91dEFy
Z3MoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290LCBTeW1ib2xFbnYgJnN5
bWJvbEVudik7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVPVVRBUkdTX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZVBpcGVsaW5lcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzYzN2UyMzMwMGFiOTllMTBmYjgwYWM4ZjVm
ZjBjNmUxODA2NjFjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlw
ZWxpbmVzLmNwcApAQCAtMCwwICsxLDkzOCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgPGNzdHJp
bmc+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0Pgor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvRGlzY292ZXJEZXBlbmRlbnRGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L01hcFN5bWJvbHMuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9QaXBlbGluZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jl
d3JpdGVQaXBlbGluZXMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1BydW5lTm9PcHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9G
aW5kTWFpbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bVJlYnVpbGQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRl
cm1UcmF2ZXJzZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK25hbWVzcGFjZQoreworCit1c2luZyBWYXJpYWJsZVNldCAgPSBzdGQ6OnVub3Jk
ZXJlZF9zZXQ8Y29uc3QgVFZhcmlhYmxlICo+OwordXNpbmcgVmFyaWFibGVMaXN0ID0gc3RkOjp2
ZWN0b3I8Y29uc3QgVFZhcmlhYmxlICo+OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitz
dHJ1Y3QgUGlwZWxpbmVTdHJ1Y3RJbmZvCit7CisgICAgVmFyaWFibGVTZXQgcGlwZWxpbmVWYXJp
YWJsZXM7CisgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3Q7Cisg
ICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkID0gbnVsbHB0cjsKKyAg
ICBjb25zdCBURnVuY3Rpb24gKmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwgPSBudWxscHRyOworCisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChwaXBlbGluZVN0cnVj
dC5pc1RvdGFsbHlFbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocGlwZWxp
bmVWYXJpYWJsZXMuZW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZVN0
cnVjdC5pc1RvdGFsbHlGdWxsKCkpOworICAgICAgICAgICAgQVNTRVJUKCFwaXBlbGluZVZhcmlh
Ymxlcy5lbXB0eSgpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KK307CisKK2NsYXNzIEdlbmVyYXRlUGlwZWxpbmVTdHJ1Y3QgOiBwcml2YXRlIFRJbnRlcm1S
ZWJ1aWxkCit7CisgIHByaXZhdGU6CisgICAgY29uc3QgUGlwZWxpbmUgJm1QaXBlbGluZTsKKyAg
ICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisgICAgSW52YXJpYW50cyAmbUludmFyaWFudHM7Cisg
ICAgVmFyaWFibGVMaXN0IG1QaXBlbGluZVZhcmlhYmxlTGlzdDsKKyAgICBJZEdlbiAmbUlkR2Vu
OworICAgIFBpcGVsaW5lU3RydWN0SW5mbyBtSW5mbzsKKworICBwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgRXhlYyhQaXBlbGluZVN0cnVjdEluZm8gJm91dCwKKyAgICAgICAgICAgICAgICAgICAg
IFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
JnJvb3QsCisgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisgICAgICAgICAgICAgICAgICAgICBT
eW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmlu
dmFyaWFudHMpCisgICAgeworICAgICAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0IHNlbGYoY29t
cGlsZXIsIGlkR2VuLCBwaXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzKTsKKyAgICAgICAg
aWYgKCFzZWxmLmV4ZWMocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBvdXQgPSBzZWxmLm1JbmZvOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBHZW5lcmF0ZVBpcGVsaW5lU3RydWN0KFRD
b21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRH
ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMpCisgICAgICAgIDog
VEludGVybVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpLAorICAgICAgICAgIG1QaXBlbGlu
ZShwaXBlbGluZSksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAorICAgICAgICAg
IG1JbnZhcmlhbnRzKGludmFyaWFudHMpLAorICAgICAgICAgIG1JZEdlbihpZEdlbikKKyAgICB7
fQorCisgICAgYm9vbCBleGVjKFRJbnRlcm1CbG9jayAmcm9vdCkKKyAgICB7CisgICAgICAgIGlm
ICghcmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtSW5mby5waXBlbGluZVZhcmlhYmxlcy5lbXB0
eSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAm
cGlwZWxpbmVTdHJ1Y3QgPSBbJl0oKSAtPiBjb25zdCBUU3RydWN0dXJlICYgeworICAgICAgICAg
ICAgaWYgKG1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKm1QaXBlbGluZS5nbG9iYWxJbnN0YW5jZVZhci0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnRlcm5hbFBpcGVsaW5lU3RydWN0
KHJvb3QsIHNlcSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0oKTsKKworICAgICAgICBNb2Rp
ZmllZFN0cnVjdE1hY2hpbmVyaWVzIG1vZGlmaWVkTWFjaGluZXJpZXM7CisgICAgICAgIGNvbnN0
IGJvb2wgbW9kaWZpZWQgPSBUcnlDcmVhdGVNb2RpZmllZFN0cnVjdCgKKyAgICAgICAgICAgIG1T
eW1ib2xFbnYsIG1JZEdlbiwgbVBpcGVsaW5lLmV4dGVybmFsU3RydWN0TW9kaWZ5Q29uZmlnKCks
IHBpcGVsaW5lU3RydWN0LAorICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdFR5cGVOYW1l
KFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCksIG1vZGlmaWVkTWFjaGluZXJpZXMpOworCisg
ICAgICAgIGlmIChtb2RpZmllZCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBl
bGluZS50eXBlICE9IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKTsKKyAgICAgICAgICAgIEFTU0VS
VCghbVBpcGVsaW5lLmdsb2JhbEluc3RhbmNlVmFyKTsgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBl
biBieSBjb25zdHJ1Y3Rpb24uCisKKyAgICAgICAgICAgIGF1dG8gZ2V0RnVuY3Rpb24gPSBbXShz
aDo6VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAqZnVuY0RlY2wpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZnVuY0RlY2wgPyBmdW5jRGVjbC0+Z2V0RnVuY3Rpb24oKSA6IG51bGxwdHI7Cisg
ICAgICAgICAgICB9OworCisgICAgICAgICAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1vZGlmaWVk
TWFjaGluZXJpZXMuc2l6ZSgpOworICAgICAgICAgICAgQVNTRVJUKHNpemUgPiAwKTsKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IE1vZGlmaWVkU3RydWN0TWFjaGluZXJ5ICZtYWNoaW5lcnkg
PSBtb2RpZmllZE1hY2hpbmVyaWVzLmF0KGkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtYWNo
aW5lcnkubW9kaWZpZWRTdHJ1Y3QpOworCisgICAgICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhu
ZXcgVEludGVybURlY2xhcmF0aW9ueworICAgICAgICAgICAgICAgICAgICAmQ3JlYXRlU3RydWN0
VHlwZVZhcmlhYmxlKG1TeW1ib2xUYWJsZSwgKm1hY2hpbmVyeS5tb2RpZmllZFN0cnVjdCl9KTsK
KworICAgICAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1hY2hpbmVyeS5mdW5jT3Jp
Z2luYWxUb01vZGlmaWVkKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtYWNoaW5lcnku
ZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoX2Jh
Y2sobWFjaGluZXJ5LmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIW1hY2hpbmVyeS5mdW5jT3JpZ2luYWxUb01vZGlmaWVkKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2VxLnB1c2hfYmFjayhtYWNoaW5lcnkuZnVuY01vZGlmaWVkVG9P
cmlnaW5hbCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGkgPT0g
c2l6ZSAtIDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW5mby5m
dW5jT3JpZ2luYWxUb01vZGlmaWVkID0gZ2V0RnVuY3Rpb24obWFjaGluZXJ5LmZ1bmNPcmlnaW5h
bFRvTW9kaWZpZWQpOworICAgICAgICAgICAgICAgICAgICBtSW5mby5mdW5jTW9kaWZpZWRUb09y
aWdpbmFsID0gZ2V0RnVuY3Rpb24obWFjaGluZXJ5LmZ1bmNNb2RpZmllZFRvT3JpZ2luYWwpOwor
CisgICAgICAgICAgICAgICAgICAgIG1JbmZvLnBpcGVsaW5lU3RydWN0LmludGVybmFsID0gJnBp
cGVsaW5lU3RydWN0OworICAgICAgICAgICAgICAgICAgICBtSW5mby5waXBlbGluZVN0cnVjdC5l
eHRlcm5hbCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA/IG1hY2hpbmVyeS5t
b2RpZmllZFN0cnVjdCA6ICZwaXBlbGluZVN0cnVjdDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBtSW5mby5waXBlbGluZVN0cnVjdC5pbnRlcm5hbCA9ICZwaXBlbGluZVN0cnVjdDsKKyAgICAg
ICAgICAgIG1JbmZvLnBpcGVsaW5lU3RydWN0LmV4dGVybmFsID0gJnBpcGVsaW5lU3RydWN0Owor
ICAgICAgICB9CisKKyAgICAgICAgcm9vdC5pbnNlcnRDaGlsZE5vZGVzKEZpbmRNYWluSW5kZXgo
JnJvb3QpLCBzZXEpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRl
OgorICAgIFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rp
b25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2Rl
LCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXREZWNs
YXJhdGlvblBvc3QoVEludGVybURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIERlY2xhcmF0aW9uIGRlY2wgICAgID0gVmlld0RlY2xhcmF0aW9uKGRlY2xOb2Rl
KTsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgp
OworCisgICAgICAgIGlmIChtUGlwZWxpbmUudXNlcyh2YXIpKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQobUluZm8ucGlwZWxpbmVWYXJpYWJsZXMuZmluZCgmdmFyKSA9PSBtSW5mby5w
aXBlbGluZVZhcmlhYmxlcy5lbmQoKSk7CisgICAgICAgICAgICBtSW5mby5waXBlbGluZVZhcmlh
Ymxlcy5pbnNlcnQoJnZhcik7CisgICAgICAgICAgICBtUGlwZWxpbmVWYXJpYWJsZUxpc3QucHVz
aF9iYWNrKCZ2YXIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZGVjbE5vZGU7CisgICAgfQorCisgICAgY29uc3QgVFN0cnVjdHVyZSAm
Y3JlYXRlSW50ZXJuYWxQaXBlbGluZVN0cnVjdChUSW50ZXJtQmxvY2sgJnJvb3QsIFRJbnRlcm1T
ZXF1ZW5jZSAmb3V0RGVjbFNlcSkKKyAgICB7CisgICAgICAgIGF1dG8gJmZpZWxkcyA9ICpuZXcg
VEZpZWxkTGlzdCgpOworCisgICAgICAgIHN3aXRjaCAobVBpcGVsaW5lLnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNhc2UgUGlwZWxpbmU6OlR5cGU6OlRleHR1cmU6CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZhciA6IG1QaXBlbGlu
ZVZhcmlhYmxlTGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCghbUludmFyaWFudHMuY29udGFpbnMoKnZhcikpOworICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVHlwZSAmdmFyVHlwZSAgICAgICAgID0gdmFyLT5nZXRUeXBlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFRCYXNpY1R5cGUgc2FtcGxlclR5cGUgPSB2YXJUeXBlLmdldEJhc2lj
VHlwZSgpOworCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnRleHR1cmVF
bnYgPSBtU3ltYm9sRW52LmdldFRleHR1cmVFbnYoc2FtcGxlclR5cGUpOworICAgICAgICAgICAg
ICAgICAgICBhdXRvICp0ZXh0dXJlRW52VHlwZSAgICAgICAgID0gbmV3IFRUeXBlKCZ0ZXh0dXJl
RW52LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJUeXBlLmlzQXJyYXkoKSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUVu
dlR5cGUtPm1ha2VBcnJheXModmFyVHlwZS5nZXRBcnJheVNpemVzKCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2hfYmFjaygKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBURmllbGQodGV4dHVyZUVudlR5cGUsIHZhci0+bmFtZSgp
LCBrTm9Tb3VyY2VMb2MsIHZhci0+c3ltYm9sVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBUVmFyaWFibGUgKnZh
ciA6IG1QaXBlbGluZVZhcmlhYmxlTGlzdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gJnR5cGUgID0gQ2xvbmVUeXBlKHZhci0+Z2V0VHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byAqZmllbGQgPSBuZXcgVEZpZWxkKCZ0eXBlLCB2YXItPm5hbWUo
KSwga05vU291cmNlTG9jLCB2YXItPnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
IGZpZWxkcy5wdXNoX2JhY2soZmllbGQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChtSW52
YXJpYW50cy5jb250YWlucygqdmFyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbUludmFyaWFudHMuaW5zZXJ0KCpmaWVsZCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIE5hbWUgcGlwZWxpbmVTdHJ1Y3ROYW1lID0gbVBp
cGVsaW5lLmdldFN0cnVjdFR5cGVOYW1lKFBpcGVsaW5lOjpWYXJpYW50OjpPcmlnaW5hbCk7Cisg
ICAgICAgIGF1dG8gJnMgPSAqbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgcGlwZWxpbmVT
dHJ1Y3ROYW1lLnJhd05hbWUoKSwgJmZpZWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwaXBlbGluZVN0cnVjdE5hbWUuc3ltYm9sVHlwZSgpKTsKKworICAgICAgICBvdXRE
ZWNsU2VxLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9ueyZDcmVhdGVTdHJ1Y3RUeXBl
VmFyaWFibGUobVN5bWJvbFRhYmxlLCBzKX0pOworCisgICAgICAgIHJldHVybiBzOworICAgIH0K
K307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK1BpcGVsaW5lU2NvcGVkPFRWYXJpYWJs
ZT4gQ3JlYXRlUGlwZWxpbmVNYWluTG9jYWxWYXIoVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUGlwZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJlPiBwaXBlbGluZVN0
cnVjdCkKK3sKKyAgICBBU1NFUlQocGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKwor
ICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gcGlwZWxpbmVNYWluTG9jYWxWYXI7CisKKyAg
ICBhdXRvIHBvcHVsYXRlRXh0ZXJuYWxNYWluTG9jYWxWYXIgPSBbJl0oKSB7CisgICAgICAgIEFT
U0VSVCghcGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWwpOworICAgICAgICBwaXBlbGluZU1h
aW5Mb2NhbFZhci5leHRlcm5hbCA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAg
ICAgc3ltYm9sVGFibGUsICpwaXBlbGluZVN0cnVjdC5leHRlcm5hbCwKKyAgICAgICAgICAgIHBp
cGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShwaXBlbGluZVN0cnVjdC5pc1VuaWZvcm0oKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBpcGVsaW5l
OjpWYXJpYW50OjpPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IFBpcGVsaW5lOjpWYXJpYW50OjpNb2RpZmllZCkpOworICAgIH07CisKKyAg
ICBhdXRvIHBvcHVsYXRlRGlzdGluY3RJbnRlcm5hbE1haW5Mb2NhbFZhciA9IFsmXSgpIHsKKyAg
ICAgICAgQVNTRVJUKCFwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAgICAgIHBp
cGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsID0KKyAgICAgICAgICAgICZDcmVhdGVJbnN0YW5j
ZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCAqcGlwZWxpbmVTdHJ1Y3QuaW50ZXJuYWwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlbGluZS5nZXRTdHJ1Y3RJbnN0YW5jZU5h
bWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok9yaWdpbmFsKSk7CisgICAgfTsKKworICAgIGlmIChwaXBl
bGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorICAgIHsKKyAgICAgICAg
cG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgfQorICAgIGVsc2Ug
aWYgKHBpcGVsaW5lLmFsd2F5c1JlcXVpcmVzTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSW5NYWlu
KCkpCisgICAgeworICAgICAgICBwb3B1bGF0ZUV4dGVybmFsTWFpbkxvY2FsVmFyKCk7CisKKyAg
ICAgICAgaWYgKHBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCA9IHBpcGVsaW5lTWFpbkxvY2FsVmFy
LmV4dGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZSBpZiAoIXBpcGVsaW5lU3RydWN0LmlzVW5pZm9ybSgpKQorICAgIHsKKyAg
ICAgICAgcG9wdWxhdGVEaXN0aW5jdEludGVybmFsTWFpbkxvY2FsVmFyKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIHBpcGVsaW5lTWFpbkxvY2FsVmFyOworfQorCitjbGFzcyBQaXBlbGluZUZ1bmN0
aW9uRW52Cit7CisgIHByaXZhdGU6CisgICAgVENvbXBpbGVyICZtQ29tcGlsZXI7CisgICAgU3lt
Ym9sRW52ICZtU3ltYm9sRW52OworICAgIFRTeW1ib2xUYWJsZSAmbVN5bWJvbFRhYmxlOworICAg
IElkR2VuICZtSWRHZW47CisgICAgY29uc3QgUGlwZWxpbmUgJm1QaXBlbGluZTsKKyAgICBjb25z
dCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZtUGlwZWxpbmVGdW5jdGlv
bnM7CisgICAgY29uc3QgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVyZT4gbVBpcGVsaW5lU3RydWN0
OworICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gJm1QaXBlbGluZU1haW5Mb2NhbFZhcjsK
KworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxjb25zdCBURnVuY3Rpb24gKiwgY29uc3QgVEZ1bmN0
aW9uICo+IG1GdW5jTWFwOworCisgIHB1YmxpYzoKKyAgICBQaXBlbGluZUZ1bmN0aW9uRW52KFRD
b21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5
bWJvbEVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFBpcGVsaW5lICZwaXBlbGluZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rpb24gKj4gJnBp
cGVsaW5lRnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgUGlwZWxpbmVTY29wZWQ8
VFN0cnVjdHVyZT4gcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICBQaXBl
bGluZVNjb3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhcikKKyAgICAgICAgOiBt
Q29tcGlsZXIoY29tcGlsZXIpLAorICAgICAgICAgIG1TeW1ib2xFbnYoc3ltYm9sRW52KSwKKyAg
ICAgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sRW52LnN5bWJvbFRhYmxlKCkpLAorICAgICAgICAg
IG1JZEdlbihpZEdlbiksCisgICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKyAgICAgICAg
ICBtUGlwZWxpbmVGdW5jdGlvbnMocGlwZWxpbmVGdW5jdGlvbnMpLAorICAgICAgICAgIG1QaXBl
bGluZVN0cnVjdChwaXBlbGluZVN0cnVjdCksCisgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2Fs
VmFyKHBpcGVsaW5lTWFpbkxvY2FsVmFyKQorICAgIHt9CisKKyAgICBib29sIGlzT3JpZ2luYWxQ
aXBlbGluZUZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtUGlwZWxpbmVGdW5jdGlvbnMuZmluZCgmZnVuYykgIT0gbVBpcGVsaW5lRnVu
Y3Rpb25zLmVuZCgpOworICAgIH0KKworICAgIGJvb2wgaXNVcGRhdGVkUGlwZWxpbmVGdW5jdGlv
bihjb25zdCBURnVuY3Rpb24gJmZ1bmMpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIGl0ID0g
bUZ1bmNNYXAuZmluZCgmZnVuYyk7CisgICAgICAgIGlmIChpdCA9PSBtRnVuY01hcC5lbmQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiAmZnVuYyA9PSBpdC0+c2Vjb25kOworICAgIH0KKworICAgIGNvbnN0IFRGdW5jdGlv
biAmZ2V0VXBkYXRlZEZ1bmN0aW9uKGNvbnN0IFRGdW5jdGlvbiAmZnVuYykKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc09yaWdpbmFsUGlwZWxpbmVGdW5jdGlvbihmdW5jKSB8fCBpc1VwZGF0ZWRQ
aXBlbGluZUZ1bmN0aW9uKGZ1bmMpKTsKKworICAgICAgICBjb25zdCBURnVuY3Rpb24gKm5ld0Z1
bmM7CisKKyAgICAgICAgYXV0byBpdCA9IG1GdW5jTWFwLmZpbmQoJmZ1bmMpOworICAgICAgICBp
ZiAoaXQgPT0gbUZ1bmNNYXAuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGJv
b2wgaXNNYWluID0gZnVuYy5pc01haW4oKTsKKworICAgICAgICAgICAgaWYgKGlzTWFpbiAmJiBt
UGlwZWxpbmUuaXNQaXBlbGluZU91dCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEFTU0VSVChmdW5jLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBUQmFzaWNUeXBl
OjpFYnRWb2lkKTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRD
aGFuZ2VSZXR1cm5UeXBlKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptUGlwZWxp
bmVTdHJ1Y3QuZXh0ZXJuYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
aXNNYWluICYmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvblZl
cnRleEdsb2JhbHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5l
LnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6Okludm9jYXRpb25GcmFnbWVudEdsb2JhbHMpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAq
PiB2YXJpYWJsZXM7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDog
bVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5wdXNoX2JhY2sobmV3IFRWYXJpYWJsZSgmbVN5
bWJvbFRhYmxlLCBmaWVsZC0+bmFtZSgpLCBmaWVsZC0+dHlwZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtPnN5bWJvbFR5cGUo
KSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJkNsb25l
RnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMobVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCB2YXJp
YWJsZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1Q
aXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpUZXh0dXJlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNvbnN0IFRWYXJpYWJsZSAqPiB2YXJpYWJsZXM7
CisgICAgICAgICAgICAgICAgVHJhbnNsYXRvck1ldGFsUmVmbGVjdGlvbiAqcmVmbGVjdGlvbiA9
CisgICAgICAgICAgICAgICAgICAgICgoc2g6OlRyYW5zbGF0b3JNZXRhbERpcmVjdCAqKSZtQ29t
cGlsZXIpLT5nZXRUcmFuc2xhdG9yTWV0YWxSZWZsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVs
ZHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgKnRleHR1cmVFbnYgPSBmaWVsZC0+dHlwZSgpLT5nZXRTdHJ1Y3QoKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVFbnYgJiYgdGV4dHVyZUVudi0+ZmllbGRzKCkuc2l6
ZSgpID09IDIpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqc3ViZmll
bGQgOiB0ZXh0dXJlRW52LT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTmFtZSBuYW1lID0gbUlkR2VuLmNyZWF0ZU5ld05hbWUo
e2ZpZWxkLT5uYW1lKCksIHN1YmZpZWxkLT5uYW1lKCl9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRUeXBlICZ0eXBlICAgICA9ICpuZXcgVFR5cGUoKnN1YmZpZWxkLT50eXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF0eXBlLmlzQXJyYXkoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlLm1ha2VBcnJheXMoZmllbGQtPnR5cGUoKS0+Z2V0QXJyYXlTaXpl
cygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gKnZhciA9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRhYmxlLCBuYW1lLnJhd05hbWUo
KSwgJnR5cGUsIG5hbWUuc3ltYm9sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlcy5wdXNoX2JhY2sodmFyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmxlY3Rp
b24tPmFkZE9yaWdpbmFsTmFtZSh2YXItPnVuaXF1ZUlkKCkuZ2V0KCksIGZpZWxkLT5uYW1lKCku
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBuZXdGdW5jID0gJkNsb25lRnVuY3Rpb25BbmRBcHBlbmRQYXJhbXMobVN5bWJv
bFRhYmxlLCBudWxscHRyLCBmdW5jLCB2YXJpYWJsZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAoaXNNYWluICYmIG1QaXBlbGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBl
OjpJbnN0YW5jZUlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5hbWUgbmFtZSA9
IG1QaXBlbGluZS5nZXRTdHJ1Y3RJbnN0YW5jZU5hbWUoUGlwZWxpbmU6OlZhcmlhbnQ6Ok1vZGlm
aWVkKTsKKyAgICAgICAgICAgICAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidFVJbnQpLCBuYW1lLnN5bWJvbFR5cGUo
KSk7CisgICAgICAgICAgICAgICAgbmV3RnVuYyAgID0gJkNsb25lRnVuY3Rpb25BbmRQcmVwZW5k
UGFyYW0obVN5bWJvbFRhYmxlLCBudWxscHRyLCBmdW5jLCAqdmFyKTsKKyAgICAgICAgICAgICAg
ICBtU3ltYm9sRW52Lm1hcmtBc1JlZmVyZW5jZSgqdmFyLCBtUGlwZWxpbmUuZXh0ZXJuYWxBZGRy
ZXNzU3BhY2UoKSk7CisgICAgICAgICAgICAgICAgbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVy
bmFsID0gdmFyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaXNNYWluICYm
IG1QaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbkluTWFpbigp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtUGlwZWxpbmVNYWluTG9j
YWxWYXIuaXNUb3RhbGx5RnVsbCgpKTsKKyAgICAgICAgICAgICAgICBuZXdGdW5jID0gJmZ1bmM7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlICp2YXI7CisgICAgICAgICAgICAgICAgQWRkcmVzc1Nw
YWNlIGFkZHJlc3NTcGFjZTsKKworICAgICAgICAgICAgICAgIGlmIChpc01haW4gJiYgIW1QaXBl
bGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgbVN5bWJvbFRhYmxlLCAqbVBpcGVsaW5lU3RydWN0LmV4dGVybmFsLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBl
bGluZTo6VmFyaWFudDo6TW9kaWZpZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1Nw
YWNlID0gbVBpcGVsaW5lLmV4dGVybmFsQWRkcmVzc1NwYWNlKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciA9ICZDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKAorICAgICAgICAgICAgICAgICAg
ICAgICAgbVN5bWJvbFRhYmxlLCAqbVBpcGVsaW5lU3RydWN0LmludGVybmFsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbVBpcGVsaW5lLmdldFN0cnVjdEluc3RhbmNlTmFtZShQaXBlbGluZTo6
VmFyaWFudDo6T3JpZ2luYWwpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0g
bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IG1QaXBlbGluZS5leHRlcm5hbEFkZHJlc3NTcGFjZSgpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFkZHJlc3NTcGFjZTo6VGhyZWFk
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJvb2wgbWFya0FzUmVmZXJl
bmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoaXNNYWluKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtUGlwZWxpbmUudHlwZSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQaXBlbGluZTo6VHlw
ZTo6VmVydGV4SW46CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBpcGVsaW5lOjpUeXBl
OjpGcmFnbWVudEluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtBc1JlZmVyZW5j
ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKG1hcmtBc1JlZmVyZW5jZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIG1TeW1ib2xFbnYubWFya0FzUmVmZXJlbmNlKCp2YXIsIGFkZHJlc3NTcGFj
ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3RnVuYyA9ICZDbG9u
ZUZ1bmN0aW9uQW5kUHJlcGVuZFBhcmFtKG1TeW1ib2xUYWJsZSwgbnVsbHB0ciwgZnVuYywgKnZh
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1GdW5jTWFwWyZmdW5jXSAgID0gbmV3
RnVuYzsKKyAgICAgICAgICAgIG1GdW5jTWFwW25ld0Z1bmNdID0gbmV3RnVuYzsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld0Z1bmMgPSBpdC0+c2Vj
b25kOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICpuZXdGdW5jOworICAgIH0KKworICAg
IFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBl
KAorICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgJmZ1bmNQcm90b05vZGUpCisgICAg
eworICAgICAgICBjb25zdCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY1Byb3RvTm9kZS5nZXRGdW5j
dGlvbigpOworICAgICAgICBpZiAoIWlzT3JpZ2luYWxQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpICYm
ICFpc1VwZGF0ZWRQaXBlbGluZUZ1bmN0aW9uKGZ1bmMpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBURnVuY3Rpb24gJm5l
d0Z1bmMgPSBnZXRVcGRhdGVkRnVuY3Rpb24oZnVuYyk7CisgICAgICAgIHJldHVybiBuZXcgVElu
dGVybUZ1bmN0aW9uUHJvdG90eXBlKCZuZXdGdW5jKTsKKyAgICB9Cit9OworCitjbGFzcyBVcGRh
dGVQaXBlbGluZUZ1bmN0aW9ucyA6IHByaXZhdGUgVEludGVybVJlYnVpbGQKK3sKKyAgcHJpdmF0
ZToKKyAgICBjb25zdCBQaXBlbGluZSAmbVBpcGVsaW5lOworICAgIGNvbnN0IFBpcGVsaW5lU2Nv
cGVkPFRTdHJ1Y3R1cmU+IG1QaXBlbGluZVN0cnVjdDsKKyAgICBQaXBlbGluZVNjb3BlZDxUVmFy
aWFibGU+ICZtUGlwZWxpbmVNYWluTG9jYWxWYXI7CisgICAgU3ltYm9sRW52ICZtU3ltYm9sRW52
OworICAgIFBpcGVsaW5lRnVuY3Rpb25FbnYgbUVudjsKKyAgICBjb25zdCBURnVuY3Rpb24gKm1G
dW5jT3JpZ2luYWxUb01vZGlmaWVkOworICAgIGNvbnN0IFRGdW5jdGlvbiAqbUZ1bmNNb2RpZmll
ZFRvT3JpZ2luYWw7CisKKyAgcHVibGljOgorICAgIHN0YXRpYyBib29sIFRocmVhZFBpcGVsaW5l
KFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBp
cGVsaW5lICZwaXBlbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVEZ1bmN0aW9uICo+ICZwaXBlbGluZUZ1bmN0aW9ucywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNjb3BlZDxUU3RydWN0dXJl
PiBwaXBlbGluZVN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGlu
ZVNjb3BlZDxUVmFyaWFibGU+ICZwaXBlbGluZU1haW5Mb2NhbFZhciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3ltYm9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jT3JpZ2luYWxUb01vZGlmaWVkLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAqZnVuY01vZGlmaWVkVG9PcmlnaW5h
bCkKKyAgICB7CisgICAgICAgIFVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zIHNlbGYoY29tcGlsZXIs
IHBpcGVsaW5lLCBwaXBlbGluZUZ1bmN0aW9ucywgcGlwZWxpbmVTdHJ1Y3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVNYWluTG9jYWxWYXIsIGlkR2VuLCBz
eW1ib2xFbnYsIGZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY01vZGlmaWVkVG9PcmlnaW5hbCk7CisgICAgICAgIGlmICghc2Vs
Zi5yZWJ1aWxkUm9vdChyb290KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICBwcml2YXRlOgor
ICAgIFVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGlwZWxpbmUgJnBpcGVsaW5lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURnVuY3Rp
b24gKj4gJnBpcGVsaW5lRnVuY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBp
cGVsaW5lU2NvcGVkPFRTdHJ1Y3R1cmU+IHBpcGVsaW5lU3RydWN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBpcGVsaW5lU2NvcGVkPFRWYXJpYWJsZT4gJnBpcGVsaW5lTWFpbkxvY2Fs
VmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24gKmZ1bmNPcmlnaW5hbFRvTW9kaWZpZWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICpmdW5jTW9kaWZpZWRU
b09yaWdpbmFsKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCBmYWxzZSwgdHJ1
ZSksCisgICAgICAgICAgbVBpcGVsaW5lKHBpcGVsaW5lKSwKKyAgICAgICAgICBtUGlwZWxpbmVT
dHJ1Y3QocGlwZWxpbmVTdHJ1Y3QpLAorICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhcihw
aXBlbGluZU1haW5Mb2NhbFZhciksCisgICAgICAgICAgbVN5bWJvbEVudihzeW1ib2xFbnYpLAor
ICAgICAgICAgIG1FbnYoY29tcGlsZXIsCisgICAgICAgICAgICAgICBzeW1ib2xFbnYsCisgICAg
ICAgICAgICAgICBpZEdlbiwKKyAgICAgICAgICAgICAgIHBpcGVsaW5lLAorICAgICAgICAgICAg
ICAgcGlwZWxpbmVGdW5jdGlvbnMsCisgICAgICAgICAgICAgICBwaXBlbGluZVN0cnVjdCwKKyAg
ICAgICAgICAgICAgIG1QaXBlbGluZU1haW5Mb2NhbFZhciksCisgICAgICAgICAgbUZ1bmNPcmln
aW5hbFRvTW9kaWZpZWQoZnVuY09yaWdpbmFsVG9Nb2RpZmllZCksCisgICAgICAgICAgbUZ1bmNN
b2RpZmllZFRvT3JpZ2luYWwoZnVuY01vZGlmaWVkVG9PcmlnaW5hbCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtUGlwZWxpbmVTdHJ1Y3QuaXNUb3RhbGx5RnVsbCgpKTsKKyAgICB9CisKKyAgICBj
b25zdCBUVmFyaWFibGUgJmdldEludGVybmFsUGlwZWxpbmVWYXJpYWJsZShjb25zdCBURnVuY3Rp
b24gJnBpcGVsaW5lRnVuYykKKyAgICB7CisgICAgICAgIGlmIChwaXBlbGluZUZ1bmMuaXNNYWlu
KCkgJiYgKG1QaXBlbGluZS5hbHdheXNSZXF1aXJlc0xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbklu
TWFpbigpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFtUGlwZWxp
bmVNYWluTG9jYWxWYXIuaXNVbmlmb3JtKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKyAgICAgICAgICAgIHJldHVybiAq
bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHBpcGVsaW5lRnVuYy5nZXRQYXJhbUNvdW50
KCkgPiAwKTsKKyAgICAgICAgICAgIHJldHVybiAqcGlwZWxpbmVGdW5jLmdldFBhcmFtKDApOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgVFZhcmlhYmxlICZnZXRFeHRlcm5hbFBpcGVs
aW5lVmFyaWFibGUoY29uc3QgVEZ1bmN0aW9uICZtYWluRnVuYykKKyAgICB7CisgICAgICAgIEFT
U0VSVChtYWluRnVuYy5pc01haW4oKSk7CisgICAgICAgIGlmIChtUGlwZWxpbmVNYWluTG9jYWxW
YXIuZXh0ZXJuYWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqbVBpcGVsaW5lTWFp
bkxvY2FsVmFyLmV4dGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKG1haW5GdW5jLmdldFBhcmFtQ291bnQoKSA+IDApOworICAgICAg
ICAgICAgcmV0dXJuICptYWluRnVuYy5nZXRQYXJhbSgwKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFBvc3RSZXN1bHQgdmlzaXRBZ2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJmNhbGxO
b2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGNhbGxOb2RlLmlzQ29uc3RydWN0b3Io
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZvbGRD
YWxsZWRGdW5jID0gKmNhbGxOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgICAgICBpZiAoIW1F
bnYuaXNPcmlnaW5hbFBpcGVsaW5lRnVuY3Rpb24ob2xkQ2FsbGVkRnVuYykpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxOb2RlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZuZXdDYWxsZWRGdW5jID0gbUVudi5nZXRVcGRhdGVk
RnVuY3Rpb24ob2xkQ2FsbGVkRnVuYyk7CisKKyAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAq
b2xkT3duZXJGdW5jID0gZ2V0UGFyZW50RnVuY3Rpb24oKTsKKyAgICAgICAgICAgIEFTU0VSVChv
bGRPd25lckZ1bmMpOworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZuZXdPd25lckZ1bmMg
PSBtRW52LmdldFVwZGF0ZWRGdW5jdGlvbigqb2xkT3duZXJGdW5jKTsKKworICAgICAgICAgICAg
cmV0dXJuICpUSW50ZXJtQWdncmVnYXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwoCisgICAgICAgICAg
ICAgICAgbmV3Q2FsbGVkRnVuYywgJkNsb25lU2VxdWVuY2VBbmRQcmVwZW5kKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbE5vZGUuZ2V0U2VxdWVuY2UoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRl
cm5hbFBpcGVsaW5lVmFyaWFibGUobmV3T3duZXJGdW5jKSkpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVElu
dGVybUZ1bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKyAgICAgICAgICAgIG1F
bnYuY3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90b05vZGUpOworICAgICAg
ICBpZiAobmV3RnVuY1Byb3RvTm9kZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZnVuY1Byb3RvTm9kZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKm5ld0Z1
bmNQcm90b05vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5p
dGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAmZnVuY0RlZk5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb24oKS0+aXNNYWluKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2aXNpdE1haW4oZnVuY0RlZk5vZGUpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZp
c2l0Tm9uTWFpbihmdW5jRGVmTm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJt
Tm9kZSAmdmlzaXROb25NYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2Rl
KQorICAgIHsKKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2Rl
ID0gKmZ1bmNEZWZOb2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgICAgIEFTU0VSVCgh
ZnVuY1Byb3RvTm9kZS5nZXRGdW5jdGlvbigpLT5pc01haW4oKSk7CisKKyAgICAgICAgVEludGVy
bUZ1bmN0aW9uUHJvdG90eXBlICpuZXdGdW5jUHJvdG9Ob2RlID0KKyAgICAgICAgICAgIG1FbnYu
Y3JlYXRlVXBkYXRlZEZ1bmN0aW9uUHJvdG90eXBlKGZ1bmNQcm90b05vZGUpOworICAgICAgICBp
ZiAobmV3RnVuY1Byb3RvTm9kZSA9PSBudWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY0RlZk5vZGU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBURnVuY3Rpb24g
JmZ1bmMgPSAqbmV3RnVuY1Byb3RvTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgQVNTRVJU
KCFmdW5jLmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmJvZHkgPSBmdW5jRGVm
Tm9kZS5nZXRCb2R5KCk7CisKKyAgICAgICAgcmV0dXJuICpuZXcgVEludGVybUZ1bmN0aW9uRGVm
aW5pdGlvbihuZXdGdW5jUHJvdG9Ob2RlLCBib2R5KTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9k
ZSAmdmlzaXRNYWluKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gJmZ1bmNEZWZOb2RlKQorICAg
IHsKKyAgICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9Ob2RlID0gKmZ1
bmNEZWZOb2RlLmdldEZ1bmN0aW9uUHJvdG90eXBlKCk7CisgICAgICAgIEFTU0VSVChmdW5jUHJv
dG9Ob2RlLmdldEZ1bmN0aW9uKCktPmlzTWFpbigpKTsKKworICAgICAgICBUSW50ZXJtRnVuY3Rp
b25Qcm90b3R5cGUgKm5ld0Z1bmNQcm90b05vZGUgPQorICAgICAgICAgICAgbUVudi5jcmVhdGVV
cGRhdGVkRnVuY3Rpb25Qcm90b3R5cGUoZnVuY1Byb3RvTm9kZSk7CisgICAgICAgIGlmIChuZXdG
dW5jUHJvdG9Ob2RlID09IG51bGxwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
dW5jRGVmTm9kZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZnVuYyA9
ICpuZXdGdW5jUHJvdG9Ob2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQoZnVuYy5p
c01haW4oKSk7CisKKyAgICAgICAgYXV0byBjYWxsTW9kaWZpZWRUb09yaWdpbmFsID0gWyZdKFRJ
bnRlcm1CbG9jayAmYm9keSkgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBlbGluZU1haW5Mb2Nh
bFZhci5pbnRlcm5hbCk7CisgICAgICAgICAgICBpZiAoIW1QaXBlbGluZS5pc1BpcGVsaW5lT3V0
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1GdW5jTW9kaWZpZWRU
b09yaWdpbmFsKTsKKyAgICAgICAgICAgICAgICBhdXRvICptID0gbmV3IFRJbnRlcm1TeW1ib2wo
JmdldEV4dGVybmFsUGlwZWxpbmVWYXJpYWJsZShmdW5jKSk7CisgICAgICAgICAgICAgICAgYXV0
byAqbyA9IG5ldyBUSW50ZXJtU3ltYm9sKG1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7
CisgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRTdGF0ZW1lbnQoVEludGVybUFnZ3JlZ2F0ZTo6
Q3JlYXRlRnVuY3Rpb25DYWxsKAorICAgICAgICAgICAgICAgICAgICAqbUZ1bmNNb2RpZmllZFRv
T3JpZ2luYWwsIG5ldyBUSW50ZXJtU2VxdWVuY2V7bSwgb30pKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKworICAgICAgICBhdXRvIGNhbGxPcmlnaW5hbFRvTW9kaWZpZWQgPSBbJl0oVElu
dGVybUJsb2NrICZib2R5KSB7CisgICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2Fs
VmFyLmludGVybmFsKTsKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUuaXNQaXBlbGluZU91dCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChtRnVuY09yaWdpbmFsVG9N
b2RpZmllZCk7CisgICAgICAgICAgICAgICAgYXV0byAqbyA9IG5ldyBUSW50ZXJtU3ltYm9sKG1Q
aXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCk7CisgICAgICAgICAgICAgICAgYXV0byAqbSA9
IG5ldyBUSW50ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpOwor
ICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kU3RhdGVtZW50KFRJbnRlcm1BZ2dyZWdhdGU6OkNy
ZWF0ZUZ1bmN0aW9uQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgKm1GdW5jT3JpZ2luYWxUb01v
ZGlmaWVkLCBuZXcgVEludGVybVNlcXVlbmNle28sIG19KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisKKyAgICAgICAgVEludGVybUJsb2NrICpib2R5ID0gZnVuY0RlZk5vZGUuZ2V0Qm9k
eSgpOworCisgICAgICAgIGlmIChtUGlwZWxpbmUuYWx3YXlzUmVxdWlyZXNMb2NhbFZhcmlhYmxl
RGVjbGFyYXRpb25Jbk1haW4oKSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1QaXBl
bGluZU1haW5Mb2NhbFZhci5pc1RvdGFsbHlGdWxsKCkpOworCisgICAgICAgICAgICBhdXRvICpu
ZXdCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOworICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5k
U3RhdGVtZW50KG5ldyBUSW50ZXJtRGVjbGFyYXRpb257bVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlu
dGVybmFsfSk7CisKKyAgICAgICAgICAgIGlmIChtUGlwZWxpbmUudHlwZSA9PSBQaXBlbGluZTo6
VHlwZTo6SW52b2NhdGlvblZlcnRleEdsb2JhbHMgfHwKKyAgICAgICAgICAgICAgICBtUGlwZWxp
bmUudHlwZSA9PSBQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50R2xvYmFscykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBQb3B1bGF0ZSBzdHJ1Y3QgaW5zdGFuY2Ug
d2l0aCByZWZlcmVuY2VzIHRvIGdsb2JhbCBwaXBlbGluZSB2YXJpYWJsZXMuCisgICAgICAgICAg
ICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDogbVBpcGVsaW5lU3RydWN0LmV4dGVybmFs
LT5maWVsZHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
KnZhciAgICAgICAgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9sVGFibGUsIGZpZWxkLT5uYW1lKCks
IGZpZWxkLT50eXBlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmllbGQtPnN5bWJvbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gKnN5
bWJvbCAgICAgPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworICAgICAgICAgICAgICAgICAgICBh
dXRvICZhY2Nlc3NOb2RlID0gQWNjZXNzRmllbGQoKm1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRl
cm5hbCwgdmFyLT5uYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBhdXRvICphc3NpZ25Ob2Rl
ID0gbmV3IFRJbnRlcm1CaW5hcnkoVE9wZXJhdG9yOjpFT3BBc3NpZ24sICZhY2Nlc3NOb2RlLCBz
eW1ib2wpOworICAgICAgICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYXNz
aWduTm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAobVBpcGVsaW5lLnR5cGUgPT0gUGlwZWxpbmU6OlR5cGU6OlRleHR1cmUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbVBp
cGVsaW5lU3RydWN0LmV4dGVybmFsLT5maWVsZHMoKTsKKworICAgICAgICAgICAgICAgIEFTU0VS
VChmdW5jLmdldFBhcmFtQ291bnQoKSA+PSAyICogZmllbGRzLnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgc2l6ZV90IHBhcmFtSW5kZXggPSBmdW5jLmdldFBhcmFtQ291bnQoKSAtIDIgKiBmaWVs
ZHMuc2l6ZSgpOworCisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBURmllbGQgKmZpZWxkIDog
ZmllbGRzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZh
cmlhYmxlICZ0ZXh0dXJlUGFyYW0gPSAqZnVuYy5nZXRQYXJhbShwYXJhbUluZGV4KyspOworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUVmFyaWFibGUgJnNhbXBsZXJQYXJhbSA9ICpmdW5jLmdl
dFBhcmFtKHBhcmFtSW5kZXgrKyk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBnbyA9IFsm
XShUSW50ZXJtVHlwZWQgJmVudiwgY29uc3QgaW50ICppbmRleCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkICZ0ZXh0dXJlRmllbGQgPSBBY2Nlc3NGaWVsZCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4
KSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIikpOworICAgICAgICAgICAgICAgICAgICAgICAg
VEludGVybVR5cGVkICZzYW1wbGVyRmllbGQgPSBBY2Nlc3NGaWVsZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBY2Nlc3NJbmRleCgqZW52LmRlZXBDb3B5KCksIGluZGV4KSwgSW1tdXRh
YmxlU3RyaW5nKCJzYW1wbGVyIikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG1r
QXNzaWduID0gWyZdKFRJbnRlcm1UeXBlZCAmZmllbGQsIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1CaW5hcnko
VE9wZXJhdG9yOjpFT3BBc3NpZ24sICZmaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3Zlcmxv
YWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOYW1lKCJhZGRyZXNzb2YiKSwgZmllbGQuZ2V0VHlwZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU2Vx
dWVuY2V7JkFjY2Vzc0luZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpuZXcgVEludGVybVN5bWJvbCgmcGFyYW0pLCBpbmRl
eCl9KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobWtBc3NpZ24odGV4dHVyZUZpZWxkLCB0ZXh0
dXJlUGFyYW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRl
bWVudChta0Fzc2lnbihzYW1wbGVyRmllbGQsIHNhbXBsZXJQYXJhbSkpOworICAgICAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAmZW52ID0gQWNj
ZXNzRmllbGQoKm1QaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5hbCwgZmllbGQtPm5hbWUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZlbnZUeXBlID0gZW52LmdldFR5cGUo
KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZW52VHlwZS5pc0FycmF5KCkpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghZW52VHlwZS5p
c0FycmF5T2ZBcnJheXMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIG4g
PSBzdGF0aWNfY2FzdDxpbnQ+KGVudlR5cGUuZ2V0QXJyYXlTaXplUHJvZHVjdCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvKGVudiwgJmkp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ28oZW52LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1QaXBl
bGluZS50eXBlID09IFBpcGVsaW5lOjpUeXBlOjpJbnN0YW5jZUlkKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybUJpbmFy
eSgKKyAgICAgICAgICAgICAgICAgICAgVE9wZXJhdG9yOjpFT3BBc3NpZ24sCisgICAgICAgICAg
ICAgICAgICAgICZBY2Nlc3NGaWVsZEJ5SW5kZXgoKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRJbnRl
cm5hbFBpcGVsaW5lVmFyaWFibGUoZnVuYykpLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgJkFz
VHlwZShtU3ltYm9sRW52LCAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKm5ldyBUSW50ZXJtU3ltYm9sKCZnZXRFeHRlcm5hbFBpcGVs
aW5lVmFyaWFibGUoZnVuYykpKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoIW1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQobmV3IFRJbnRlcm1EZWNsYXJh
dGlvbnttUGlwZWxpbmVNYWluTG9jYWxWYXIuZXh0ZXJuYWx9KTsKKyAgICAgICAgICAgICAgICBj
YWxsTW9kaWZpZWRUb09yaWdpbmFsKCpuZXdCb2R5KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KGJvZHkpOworCisgICAgICAgICAgICBpZiAo
IW1QaXBlbGluZU1haW5Mb2NhbFZhci5pc1VuaWZvcm0oKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG1QaXBlbGluZS5pc1BpcGVsaW5lT3V0KCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbmV3Qm9keS0+YXBwZW5kU3RhdGVtZW50KG5ldyBUSW50
ZXJtQnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBUT3BlcmF0b3I6OkVPcFJldHVybiwgbmV3
IFRJbnRlcm1TeW1ib2wobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmV4dGVybmFsKSkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib2R5ID0gbmV3Qm9keTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICghbVBpcGVsaW5lTWFpbkxvY2FsVmFyLmlzVW5pZm9ybSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoIW1QaXBlbGluZU1haW5Mb2NhbFZhci5leHRlcm5hbCk7Cisg
ICAgICAgICAgICBBU1NFUlQobVBpcGVsaW5lTWFpbkxvY2FsVmFyLmludGVybmFsKTsKKworICAg
ICAgICAgICAgYXV0byAqbmV3Qm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAg
IG5ld0JvZHktPmFwcGVuZFN0YXRlbWVudChuZXcgVEludGVybURlY2xhcmF0aW9ue21QaXBlbGlu
ZU1haW5Mb2NhbFZhci5pbnRlcm5hbH0pOworICAgICAgICAgICAgY2FsbE1vZGlmaWVkVG9Pcmln
aW5hbCgqbmV3Qm9keSk7CisgICAgICAgICAgICBuZXdCb2R5LT5hcHBlbmRTdGF0ZW1lbnQoYm9k
eSk7CisgICAgICAgICAgICBjYWxsT3JpZ2luYWxUb01vZGlmaWVkKCpuZXdCb2R5KTsKKyAgICAg
ICAgICAgIGJvZHkgPSBuZXdCb2R5OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICpuZXcg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihuZXdGdW5jUHJvdG9Ob2RlLCBib2R5KTsKKyAgICB9
Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIFVwZGF0ZVBpcGVsaW5lU3lt
Ym9scyhQaXBlbGluZTo6VHlwZSBwaXBlbGluZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybUJsb2NrICZyb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZz
eW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYXJpYWJsZVNldCAm
cGlwZWxpbmVWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVNj
b3BlZDxUVmFyaWFibGU+IHBpcGVsaW5lTWFpbkxvY2FsVmFyKQoreworICAgIGF1dG8gbWFwID0g
WyZdKGNvbnN0IFRGdW5jdGlvbiAqb3duZXIsIFRJbnRlcm1TeW1ib2wgJnN5bWJvbCkgLT4gVElu
dGVybU5vZGUgJiB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sLnZhcmlh
YmxlKCk7CisgICAgICAgIGlmIChwaXBlbGluZVZhcmlhYmxlcy5maW5kKCZ2YXIpID09IHBpcGVs
aW5lVmFyaWFibGVzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3ltYm9s
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChvd25lcik7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZSAqc3RydWN0SW5zdGFuY2VWYXI7CisgICAgICAgIGlmIChvd25lci0+aXNNYWluKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwaXBlbGluZU1haW5Mb2NhbFZhci5pbnRlcm5h
bCk7CisgICAgICAgICAgICBzdHJ1Y3RJbnN0YW5jZVZhciA9IHBpcGVsaW5lTWFpbkxvY2FsVmFy
LmludGVybmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG93bmVyLT5nZXRQYXJhbUNvdW50KCkgPiAwKTsKKyAgICAgICAgICAgIHN0cnVj
dEluc3RhbmNlVmFyID0gb3duZXItPmdldFBhcmFtKDApOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVChzdHJ1Y3RJbnN0YW5jZVZhcik7CisgICAgICAgIHJldHVybiBBY2Nlc3NGaWVsZCgqc3Ry
dWN0SW5zdGFuY2VWYXIsIHZhci5uYW1lKCkpOworICAgIH07CisgICAgcmV0dXJuIE1hcFN5bWJv
bHMoY29tcGlsZXIsIHJvb3QsIG1hcCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
K2Jvb2wgUmV3cml0ZVBpcGVsaW5lKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICBJZEdlbiAm
aWRHZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBQaXBlbGluZSAmcGlwZWxpbmUsCisg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAgICAg
ICAgICAgIEludmFyaWFudHMgJmludmFyaWFudHMsCisgICAgICAgICAgICAgICAgICAgICBQaXBl
bGluZVNjb3BlZDxUU3RydWN0dXJlPiAmb3V0U3RydWN0KQoreworICAgIEFTU0VSVChvdXRTdHJ1
Y3QuaXNUb3RhbGx5RW1wdHkoKSk7CisKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlID0g
Y29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKTsKKworICAgIFBpcGVsaW5lU3RydWN0SW5mbyBwc2k7
CisgICAgaWYgKCFHZW5lcmF0ZVBpcGVsaW5lU3RydWN0OjpFeGVjKHBzaSwgY29tcGlsZXIsIHJv
b3QsIGlkR2VuLCBwaXBlbGluZSwgc3ltYm9sRW52LCBpbnZhcmlhbnRzKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAocHNpLmlzRW1wdHkoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IGF1dG8gcGlwZWxpbmVG
dW5jdGlvbnMgPSBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucyhyb290LCBbJl0oY29uc3QgVFZh
cmlhYmxlICZ2YXIpIHsKKyAgICAgICAgcmV0dXJuIHBzaS5waXBlbGluZVZhcmlhYmxlcy5maW5k
KCZ2YXIpICE9IHBzaS5waXBlbGluZVZhcmlhYmxlcy5lbmQoKTsKKyAgICB9KTsKKworICAgIGF1
dG8gcGlwZWxpbmVNYWluTG9jYWxWYXIgPQorICAgICAgICBDcmVhdGVQaXBlbGluZU1haW5Mb2Nh
bFZhcihzeW1ib2xUYWJsZSwgcGlwZWxpbmUsIHBzaS5waXBlbGluZVN0cnVjdCk7CisKKyAgICBp
ZiAoIVVwZGF0ZVBpcGVsaW5lRnVuY3Rpb25zOjpUaHJlYWRQaXBlbGluZSgKKyAgICAgICAgICAg
IGNvbXBpbGVyLCByb290LCBwaXBlbGluZSwgcGlwZWxpbmVGdW5jdGlvbnMsIHBzaS5waXBlbGlu
ZVN0cnVjdCwgcGlwZWxpbmVNYWluTG9jYWxWYXIsCisgICAgICAgICAgICBpZEdlbiwgc3ltYm9s
RW52LCBwc2kuZnVuY09yaWdpbmFsVG9Nb2RpZmllZCwgcHNpLmZ1bmNNb2RpZmllZFRvT3JpZ2lu
YWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghcGlw
ZWxpbmUuZ2xvYmFsSW5zdGFuY2VWYXIpCisgICAgeworICAgICAgICBpZiAoIVVwZGF0ZVBpcGVs
aW5lU3ltYm9scyhwaXBlbGluZS50eXBlLCBjb21waWxlciwgcm9vdCwgc3ltYm9sRW52LCBwc2ku
cGlwZWxpbmVWYXJpYWJsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
cGVsaW5lTWFpbkxvY2FsVmFyKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFQcnVuZU5vT3BzKCZjb21waWxlciwgJnJv
b3QsICZjb21waWxlci5nZXRTeW1ib2xUYWJsZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBvdXRTdHJ1Y3QgPSBwc2kucGlwZWxpbmVTdHJ1Y3Q7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gIC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBzaDo6
UmV3cml0ZVBpcGVsaW5lcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElk
R2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZh
bmdsZVVuaWZvcm1zR2xvYmFsSW5zdGFuY2VWYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZhcmlh
bnRzICZpbnZhcmlhbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQaXBlbGluZVN0cnVj
dHMgJm91dFN0cnVjdHMpCit7CisgICAgc3RydWN0IEluZm8KKyAgICB7CisgICAgICAgIFBpcGVs
aW5lOjpUeXBlIHBpcGVsaW5lVHlwZTsKKyAgICAgICAgUGlwZWxpbmVTY29wZWQ8VFN0cnVjdHVy
ZT4gJm91dFN0cnVjdDsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlICpnbG9iYWxJbnN0YW5jZVZh
cjsKKyAgICB9OworCisgICAgSW5mbyBpbmZvc1tdID0geworICAgICAgICB7UGlwZWxpbmU6OlR5
cGU6Okluc3RhbmNlSWQsIG91dFN0cnVjdHMuaW5zdGFuY2VJZCwgbnVsbHB0cn0sCisgICAgICAg
IHtQaXBlbGluZTo6VHlwZTo6VGV4dHVyZSwgb3V0U3RydWN0cy50ZXh0dXJlLCBudWxscHRyfSwK
KyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpOb25Db25zdGFudEdsb2JhbHMsIG91dFN0cnVjdHMu
bm9uQ29uc3RhbnRHbG9iYWxzLCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpB
bmdsZVVuaWZvcm1zLCBvdXRTdHJ1Y3RzLmFuZ2xlVW5pZm9ybXMsICZhbmdsZVVuaWZvcm1zR2xv
YmFsSW5zdGFuY2VWYXJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OlVzZXJVbmlmb3Jtcywg
b3V0U3RydWN0cy51c2VyVW5pZm9ybXMsIG51bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5
cGU6OlZlcnRleEluLCBvdXRTdHJ1Y3RzLnZlcnRleEluLCBudWxscHRyfSwKKyAgICAgICAge1Bp
cGVsaW5lOjpUeXBlOjpWZXJ0ZXhPdXQsIG91dFN0cnVjdHMudmVydGV4T3V0LCBudWxscHRyfSwK
KyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpGcmFnbWVudEluLCBvdXRTdHJ1Y3RzLmZyYWdtZW50
SW4sIG51bGxwdHJ9LAorICAgICAgICB7UGlwZWxpbmU6OlR5cGU6OkZyYWdtZW50T3V0LCBvdXRT
dHJ1Y3RzLmZyYWdtZW50T3V0LCBudWxscHRyfSwKKyAgICAgICAge1BpcGVsaW5lOjpUeXBlOjpJ
bnZvY2F0aW9uVmVydGV4R2xvYmFscywgb3V0U3RydWN0cy5pbnZvY2F0aW9uVmVydGV4R2xvYmFs
cywgbnVsbHB0cn0sCisgICAgICAgIHtQaXBlbGluZTo6VHlwZTo6SW52b2NhdGlvbkZyYWdtZW50
R2xvYmFscywgb3V0U3RydWN0cy5pbnZvY2F0aW9uRnJhZ21lbnRHbG9iYWxzLCBudWxscHRyfSwK
KyAgICB9OworCisgICAgZm9yIChJbmZvICZpbmZvIDogaW5mb3MpCisgICAgeworICAgICAgICBQ
aXBlbGluZSBwaXBlbGluZXtpbmZvLnBpcGVsaW5lVHlwZSwgaW5mby5nbG9iYWxJbnN0YW5jZVZh
cn07CisgICAgICAgIGlmICghUmV3cml0ZVBpcGVsaW5lKGNvbXBpbGVyLCByb290LCBpZEdlbiwg
cGlwZWxpbmUsIHN5bWJvbEVudiwgaW52YXJpYW50cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mby5vdXRTdHJ1Y3QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlwZWxpbmVzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBp
cGVsaW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5MWJhODJiNGU5Njc3ZDJjMjk3NGY5MTRiN2UzNDgwYjBl
ODliNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVBpcGVsaW5lcy5o
CkBAIC0wLDAgKzEsNDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRP
Ul9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURVBJUEVMSU5FU19IXworI2RlZmluZSBDT01Q
SUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFUElQRUxJTkVTX0hf
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1BpcGVsaW5lLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUdsb2JhbFF1YWxpZmllckRlY2xz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
U3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBUaGlzIHJld3JpdGVzIGFsbCBw
aXBlbGluZXMuCisvLworLy8gRm9yIGVhY2ggcGlwZWxpbmU6CisvLyAgICAtIERpc2NvdmVyIGFs
bCB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgcGlwZWxpbmUKKy8vICAgIC0gTW92ZSB0
aGUgdmFyaWFibGVzIGludG8gYW4gaW50ZXJuYWwgcGlwZWxpbmUgc3RydWN0IGluc3RhbmNlIGFu
ZCB1cGRhdGUgb2xkIHZhcmlhYmxlcyB0byBiZQorLy8gICAgICBtZW1iZXIgYWNjZXNzIGluc3Rl
YWQuCisvLyAgICAtIERlcGVuZGVuY3kgaW5qZWN0IHRoZSBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1
Y3QgdG8gYWxsIGZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB2YXJpYWJsZXMgZnJvbQorLy8gICAgICB0
aGUgc3RydWN0LgorLy8gICAgLSBBIG5ldyBleHRlcm5hbCBwaXBlbGluZSBzdHJ1Y3QgaXMgY3Jl
YXRlZCBpZiBuZWVkZWQgZm9yIGltcGVkYW5jZSByZWFzb25zLiBPdGhlcndpc2UgdGhlCisvLyAg
ICAgIGV4dGVybmFsIGFuZCBpbnRlcm5hbCBwaXBlbGluZSBzdHJ1Y3RzIGFyZSB0aGUgc2FtZS4K
Ky8vICAgIC0gQWRkIGBtYWluYCBwYXJhbWV0ZXIgb3IgcmV0dXJuIHZhbHVlIGZvciB0aGUgZXh0
ZXJuYWwgcGlwZWxpbmUgc3RydWN0IGFzIG5lZWRlZC4KKy8vICAgIC0gSW5zaWRlIGBtYWluYCwg
bWFwIHRoZSBleHRlcm5hbCBzdHJ1Y3QgdG8gdGhlIGludGVybmFsIHN0cnVjdCBpZiB0aGV5IGRp
ZmZlciBhbmQgaXMgcHJvdmlkZWQKKy8vICAgICAgYXMgYSBwYXJhbWV0ZXIgdG8gYG1haW5gLgor
Ly8gICAgLSBJbnNpZGUgYG1haW5gLCBtYXAgdGhlIGludGVybmFsIHN0cnVjdCB0byB0aGUgZXh0
ZXJuYWwgc3RydWN0IGlmIHRoZXkgZGlmZmVyIGFuZCBpcyByZXR1cm5lZAorLy8gICAgICBmcm9t
IGBtYWluYC4KK0FOR0xFX05PX0RJU0NBUkQgYm9vbCBSZXdyaXRlUGlwZWxpbmVzKFRDb21waWxl
ciAmY29tcGlsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50
ZXJtQmxvY2sgJnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
ZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUVmFyaWFibGUgJmFuZ2xlVW5pZm9ybXNHbG9iYWxJbnN0YW5jZVZhciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YXJpYW50cyAmaW52YXJpYW50cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpcGVsaW5lU3RydWN0cyAm
b3V0U3RydWN0cyk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVQSVBFTElORVNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3Bw
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L1Jld3JpdGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTc3YzFhNTg1NTFiMzJjOWZmNmNkYzllN2JhZWIzOGNhODZiZGQyYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuY3Bw
CkBAIC0wLDAgKzEsMzc2IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2Vz
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
QXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvQXNOb2RlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50
ZXJtUmVidWlsZC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7CisKK25hbWVzcGFjZQoreworCiti
b29sIElzT3V0UGFyYW0oY29uc3QgVFR5cGUgJnBhcmFtVHlwZSkKK3sKKyAgICBjb25zdCBUUXVh
bGlmaWVyIHF1YWwgPSBwYXJhbVR5cGUuZ2V0UXVhbGlmaWVyKCk7CisgICAgc3dpdGNoIChxdWFs
KQorICAgIHsKKyAgICAgICAgY2FzZSBUUXVhbGlmaWVyOjpFdnFJbk91dDoKKyAgICAgICAgY2Fz
ZSBUUXVhbGlmaWVyOjpFdnFPdXQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJ
c1ZlY3RvckFjY2VzcyhUSW50ZXJtQmluYXJ5ICZiaW5hcnkpCit7CisgICAgVE9wZXJhdG9yIG9w
ID0gYmluYXJ5LmdldE9wKCk7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2Ug
VE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcElu
ZGV4SW5kaXJlY3Q6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IFRUeXBlICZsZWZ0VHlw
ZSA9IGJpbmFyeS5nZXRMZWZ0KCktPmdldFR5cGUoKTsKKyAgICBpZiAoIWxlZnRUeXBlLmlzVmVj
dG9yKCkgfHwgbGVmdFR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIEFTU0VSVChJc1NjYWxhckJhc2ljVHlwZShiaW5hcnkuZ2V0VHlwZSgp
KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJc1ZlY3RvckFjY2VzcyhUSW50ZXJt
Tm9kZSAmbm9kZSkKK3sKKyAgICBpZiAoYXV0byAqYmluID0gbm9kZS5nZXRBc0JpbmFyeU5vZGUo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBJc1ZlY3RvckFjY2VzcygqYmluKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBEaWZmZXJzIGZyb20gSXNBc3NpZ25tZW50IGluIHRo
YXQgaXQgZG9lcyBub3QgaW5jbHVkZSAoKyspIG9yICgtLSkuCitib29sIElzQXNzaWduRXF1YWxz
U2lnbihUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbml0
aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2ln
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0
QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIE9u
bHkgaW5jbHVkZXMgKCQ9KSBzdHlsZSBhc3NpZ25zLCB3aGVyZSAoJCkgaXMgYSBiaW5hcnkgb3Au
Citib29sIElzQ29tcG91bmRBc3NpZ24oVE9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3Ap
CisgICAgeworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
TXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2ln
bjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9y
OjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0
QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRSaWdodEFzc2lnbjoK
KyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wQml0d2lzZU9yQXNzaWduOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
UmV0dXJuc1JlZmVyZW5jZShUT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BJbml0aWFsaXplOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQWRkQXNzaWdu
OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wU3ViQXNzaWduOgorICAgICAgICBjYXNlIFRP
cGVyYXRvcjo6RU9wTXVsQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9y
VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BWZWN0b3JUaW1l
c1NjYWxhckFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2Nh
bGFyQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTWF0cml4VGltZXNNYXRyaXhB
c3NpZ246CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BEaXZBc3NpZ246CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BJTW9kQXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9w
Qml0U2hpZnRMZWZ0QXNzaWduOgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wQml0U2hpZnRS
aWdodEFzc2lnbjoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BCaXR3aXNlWG9yQXNzaWduOgorICAgICAgICBj
YXNlIFRPcGVyYXRvcjo6RU9wQml0d2lzZU9yQXNzaWduOgorCisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BQb3N0SW5jcmVtZW50OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wUG9zdERl
Y3JlbWVudDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZUluY3JlbWVudDoKKyAgICAg
ICAgY2FzZSBUT3BlcmF0b3I6OkVPcFByZURlY3JlbWVudDoKKworICAgICAgICBjYXNlIFRPcGVy
YXRvcjo6RU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleElu
ZGlyZWN0OgorICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6Cisg
ICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworVEludGVybVR5cGVkICZEZWNvbXBvc2VDb21wb3Vu
ZEFzc2lnbm1lbnQoVEludGVybUJpbmFyeSAmbm9kZSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBu
b2RlLmdldE9wKCk7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9wZXJh
dG9yOjpFT3BBZGRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wQWRkOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BTdWJBc3NpZ246
CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wU3ViOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNdWxBc3NpZ246CisgICAgICAgICAgICBvcCA9
IFRPcGVyYXRvcjo6RU9wTXVsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9w
ZXJhdG9yOjpFT3BWZWN0b3JUaW1lc01hdHJpeDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgICAg
ICBvcCA9IFRPcGVyYXRvcjo6RU9wVmVjdG9yVGltZXNTY2FsYXI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcE1hdHJpeFRpbWVzU2NhbGFyOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJp
eEFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJhdG9yOjpFT3BNYXRyaXhUaW1lc01hdHJp
eDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wRGl2QXNz
aWduOgorICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcERpdjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wSU1vZEFzc2lnbjoKKyAgICAgICAgICAg
IG9wID0gVE9wZXJhdG9yOjpFT3BJTW9kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdExlZnRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRP
cGVyYXRvcjo6RU9wQml0U2hpZnRMZWZ0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVE9wZXJhdG9yOjpFT3BCaXRTaGlmdFJpZ2h0QXNzaWduOgorICAgICAgICAgICAgb3AgPSBU
T3BlcmF0b3I6OkVPcEJpdFNoaWZ0UmlnaHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUT3BlcmF0b3I6OkVPcEJpdHdpc2VBbmRBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRP
cGVyYXRvcjo6RU9wQml0d2lzZUFuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFRPcGVyYXRvcjo6RU9wQml0d2lzZVhvckFzc2lnbjoKKyAgICAgICAgICAgIG9wID0gVE9wZXJh
dG9yOjpFT3BCaXR3aXNlWG9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BCaXR3aXNlT3JBc3NpZ246CisgICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6
RU9wQml0d2lzZU9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBMT0dJQ19FUlJPUigpOworICAgIH0KKworICAgIC8vIFRoaXMgYXNzdW1lcyBTZXBh
cmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuCisgICAgLy8g
VGhpcyBhc3N1bXB0aW9uIGFsbG93cyB0aGlzIGNvZGUgdG8gbm90IG5lZWQgdG8gaW50cm9kdWNl
IHRlbXBvcmFyaWVzLgorICAgIC8vCisgICAgLy8gZS5nLiBkb250IGhhdmUgdG8gd29ycnkgYWJv
dXQ6CisgICAgLy8gICAgICB2ZWNbaGFzU2lkZUVmZmVjdCgpXSAqPSA0CisgICAgLy8gYmVjb21p
bmcKKyAgICAvLyAgICAgIHZlY1toYXNTaWRlRWZmZWN0KCldID0gdmVjW2hhc1NpZGVFZmZlY3Qo
KV0gKiA0CisKKyAgICBUSW50ZXJtVHlwZWQgKmxlZnQgID0gbm9kZS5nZXRMZWZ0KCk7CisgICAg
VEludGVybVR5cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKyAgICByZXR1cm4gKm5ldyBU
SW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wQXNzaWduLCBsZWZ0LT5kZWVwQ29weSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRJbnRlcm1CaW5hcnkob3AsIGxlZnQsIHJp
Z2h0KSk7Cit9CisKK2NsYXNzIFJld3JpdGVyMSA6IHB1YmxpYyBUSW50ZXJtUmVidWlsZAorewor
ICBwdWJsaWM6CisgICAgUmV3cml0ZXIxKFRDb21waWxlciAmY29tcGlsZXIpIDogVEludGVybVJl
YnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0cnVlKSB7fQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJp
bmFyeVBvc3QoVEludGVybUJpbmFyeSAmYmluYXJ5Tm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeU5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYg
KElzQ29tcG91bmRBc3NpZ24ob3ApKQorICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQgJmxlZnQgPSAqYmluYXJ5Tm9kZS5nZXRMZWZ0KCk7CisgICAgICAgICAgICBpZiAobGVmdC5n
ZXRBc1N3aXp6bGVOb2RlKCkgfHwgSXNWZWN0b3JBY2Nlc3MobGVmdCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIERlY29tcG9zZUNvbXBvdW5kQXNzaWdubWVudChiaW5h
cnlOb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmluYXJ5
Tm9kZTsKKyAgICB9Cit9OworCitjbGFzcyBSZXdyaXRlcjIgOiBwdWJsaWMgVEludGVybVJlYnVp
bGQKK3sKKyAgICBzdGQ6OnZlY3Rvcjxib29sPiBtUmVxdWlyZXNBZGRyZXNzaW5nU3RhY2s7Cisg
ICAgU3ltYm9sRW52ICZtU3ltYm9sRW52OworCisgIHByaXZhdGU6CisgICAgYm9vbCByZXF1aXJl
c0FkZHJlc3NpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1SZXF1aXJlc0FkZHJlc3Np
bmdTdGFjay5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5iYWNrKCk7
CisgICAgfQorCisgIHB1YmxpYzoKKyAgICB+UmV3cml0ZXIyKCkgb3ZlcnJpZGUgeyBBU1NFUlQo
bVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLmVtcHR5KCkpOyB9CisKKyAgICBSZXdyaXRlcjIoVENv
bXBpbGVyICZjb21waWxlciwgU3ltYm9sRW52ICZzeW1ib2xFbnYpCisgICAgICAgIDogVEludGVy
bVJlYnVpbGQoY29tcGlsZXIsIHRydWUsIHRydWUpLCBtU3ltYm9sRW52KHN5bWJvbEVudikKKyAg
ICB7fQorCisgICAgUHJlUmVzdWx0IHZpc2l0QWdncmVnYXRlUHJlKFRJbnRlcm1BZ2dyZWdhdGUg
JmFnZ3JlZ2F0ZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBURnVuY3Rpb24g
KmZ1bmMgPSBhZ2dyZWdhdGVOb2RlLmdldEZ1bmN0aW9uKCk7CisgICAgICAgIGlmICghZnVuYykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0ZU5vZGU7CisgICAgICAgIH0K
KworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MgPSAqYWdncmVnYXRlTm9kZS5nZXRTZXF1
ZW5jZSgpOworICAgICAgICBzaXplX3QgYXJnQ291bnQgICAgICAgPSBhcmdzLnNpemUoKTsKKwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0gPSAqZnVuYy0+Z2V0UGFyYW0oaSk7
CisgICAgICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1UeXBlID0gcGFyYW0uZ2V0VHlwZSgpOwor
ICAgICAgICAgICAgVEludGVybU5vZGUgKmFyZyAgICAgICA9IGFyZ3NbaV07CisgICAgICAgICAg
ICBBU1NFUlQoYXJnKTsKKworICAgICAgICAgICAgbVJlcXVpcmVzQWRkcmVzc2luZ1N0YWNrLnB1
c2hfYmFjayhJc091dFBhcmFtKHBhcmFtVHlwZSkpOworICAgICAgICAgICAgYXJnc1tpXSA9IHJl
YnVpbGQoKmFyZykuc2luZ2xlKCk7CisgICAgICAgICAgICBBU1NFUlQoYXJnc1tpXSk7CisgICAg
ICAgICAgICBBU1NFUlQoIW1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5lbXB0eSgpKTsKKyAgICAg
ICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3BfYmFjaygpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHthZ2dyZWdhdGVOb2RlLCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAg
IH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmc3dp
enpsZU5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIXJlcXVpcmVzQWRkcmVzc2lu
ZygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3dpenpsZU5vZGU7CisgICAgICAg
IH0KKworICAgICAgICBUSW50ZXJtVHlwZWQgJnZlY05vZGUgICAgICAgICA9ICpzd2l6emxlTm9k
ZS5nZXRPcGVyYW5kKCk7CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXJMaXN0ICZvZmZzZXRzID0g
c3dpenpsZU5vZGUuZ2V0U3dpenpsZU9mZnNldHMoKTsKKyAgICAgICAgQVNTRVJUKCFvZmZzZXRz
LmVtcHR5KCkpOworICAgICAgICBBU1NFUlQob2Zmc2V0cy5zaXplKCkgPD0gNCk7CisKKyAgICAg
ICAgYXV0byAmYXJncyA9ICpuZXcgVEludGVybVNlcXVlbmNlKCk7CisgICAgICAgIGFyZ3MucmVz
ZXJ2ZShvZmZzZXRzLnNpemUoKSArIDEpOworICAgICAgICBhcmdzLnB1c2hfYmFjaygmdmVjTm9k
ZSk7CisgICAgICAgIGZvciAoaW50IG9mZnNldCA6IG9mZnNldHMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGFyZ3MucHVzaF9iYWNrKG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbihuZXcgVENvbnN0
YW50VW5pb24ob2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqbmV3IFRUeXBlKFRCYXNpY1R5cGU6OkVidEludCkpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBtU3ltYm9sRW52LmNhbGxGdW5jdGlvbk92ZXJsb2FkKE5hbWUo
InN3aXp6bGVfcmVmIiksIHN3aXp6bGVOb2RlLmdldFR5cGUoKSwgYXJncyk7CisgICAgfQorCisg
ICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJmJpbmFyeU5vZGUpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBUT3BlcmF0b3Igb3AgPSBiaW5hcnlOb2RlLmdl
dE9wKCk7CisKKyAgICAgICAgY29uc3QgYm9vbCBpc0FjY2VzcyA9IElzVmVjdG9yQWNjZXNzKGJp
bmFyeU5vZGUpOworCisgICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZVRvcCAgID0gIVJldHVybnNS
ZWZlcmVuY2Uob3ApIHx8ICFyZXF1aXJlc0FkZHJlc3NpbmcoKTsKKyAgICAgICAgY29uc3QgYm9v
bCBkaXNhYmxlTGVmdCAgPSBkaXNhYmxlVG9wOworICAgICAgICBjb25zdCBib29sIGRpc2FibGVS
aWdodCA9IGRpc2FibGVUb3AgfHwgaXNBY2Nlc3MgfHwgSXNBc3NpZ25FcXVhbHNTaWduKG9wKTsK
KworICAgICAgICBhdXRvIHRyYXZlcnNlID0gWyZdKFRJbnRlcm1UeXBlZCAmbm9kZSwgY29uc3Qg
Ym9vbCBkaXNhYmxlKSAtPiBUSW50ZXJtVHlwZWQgJiB7CisgICAgICAgICAgICBpZiAoZGlzYWJs
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVxdWlyZXNBZGRyZXNzaW5nU3Rh
Y2sucHVzaF9iYWNrKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gKm5l
d05vZGUgPSBhc05vZGU8VEludGVybVR5cGVkPihyZWJ1aWxkKG5vZGUpLnNpbmdsZSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChuZXdOb2RlKTsKKyAgICAgICAgICAgIGlmIChkaXNhYmxlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1SZXF1aXJlc0FkZHJlc3NpbmdTdGFjay5wb3Bf
YmFjaygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuICpuZXdOb2RlOworICAg
ICAgICB9OworCisgICAgICAgIFRJbnRlcm1UeXBlZCAmbGVmdE5vZGUgID0gKmJpbmFyeU5vZGUu
Z2V0TGVmdCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgJnJpZ2h0Tm9kZSA9ICpiaW5hcnlOb2Rl
LmdldFJpZ2h0KCk7CisKKyAgICAgICAgVEludGVybVR5cGVkICZuZXdMZWZ0ICA9IHRyYXZlcnNl
KGxlZnROb2RlLCBkaXNhYmxlTGVmdCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAmbmV3UmlnaHQg
PSB0cmF2ZXJzZShyaWdodE5vZGUsIGRpc2FibGVSaWdodCk7CisKKyAgICAgICAgaWYgKCFpc0Fj
Y2VzcyB8fCBkaXNhYmxlVG9wKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoJmxlZnROb2Rl
ID09ICZuZXdMZWZ0ICYmICZyaWdodE5vZGUgPT0gJm5ld1JpZ2h0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiB7JmJpbmFyeU5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geypuZXcgVEludGVybUJpbmFyeShv
cCwgJm5ld0xlZnQsICZuZXdSaWdodCksIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4ge21TeW1ib2xFbnYuY2FsbEZ1bmN0aW9uT3ZlcmxvYWQoTmFtZSgi
ZWxlbV9yZWYiKSwgYmluYXJ5Tm9kZS5nZXRUeXBlKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3IFRJbnRlcm1TZXF1ZW5jZXsmbmV3TGVmdCwg
Jm5ld1JpZ2h0fSksCisgICAgICAgICAgICAgICAgVmlzaXRCaXRzOjpOZWl0aGVyfTsKKyAgICB9
Cit9OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgc2g6OlJld3JpdGVVbmFk
ZHJlc3NhYmxlUmVmZXJlbmNlcyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9vdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudikKK3sKKyAg
ICBpZiAoIVJld3JpdGVyMShjb21waWxlcikucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghUmV3cml0ZXIyKGNvbXBpbGVyLCBz
eW1ib2xFbnYpLnJlYnVpbGRSb290KHJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlVW5h
ZGRyZXNzYWJsZVJlZmVyZW5jZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2RhOTg0M2ViMmU2MDdlZWNjNjkw
ZmNlYzE2MmM2MjdhNjFiN2EyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVVbmFkZHJlc3NhYmxlUmVmZXJlbmNlcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8vCisvLyBDb3B5
cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklU
RVVOQUREUkVTU0FCTEVSRUZFUkVOQ0VTX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1JFV1JJVEVVTkFERFJFU1NBQkxFUkVGRVJFTkNFU19IXwor
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1QcmVsdWRlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBHaXZlbjoKKy8vICAgdm9pZCBmb28o
b3V0IHgpOworLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBmb2xsb3dpbmcgdG8gYmUgbGVnYWwg
aW4gR0xTTCBidXQgbm90IGluIE1ldGFsOgorLy8gICBmb28oZXhwcmVzc2lvbik7CisvLyBUaGlz
IGNhbiBoYXBwZW4gaW4gY2FzZXMgd2hlcmUgYGV4cHJlc3Npb25gIGlzIGEgdmVjdG9yIHN3aXp6
bGUgb3IgdmVjdG9yIGVsZW1lbnQgYWNjZXNzLgorLy8gVGhpcyByZXdyaXRlIGZ1bmN0aW9uYWxp
dHkgaW50cm9kdWNlcyB0ZW1wb3JhcmllcyB0aGF0IHNlcnZlIGFzIHByb3hpZXMgdG8gYmUgcGFz
c2VkIHRvIHRoZQorLy8gb3V0L2lub3V0IHBhcmFtZXRlcnMgYXMgbmVlZGVkLiBUaGUgY29ycmVz
cG9uZGluZyBleHByZXNzaW9ucyBnZXQgcG9wdWxhdGVkIHdpdGggdGhlaXIKKy8vIHByb3hpZXMg
YWZ0ZXIgdGhlIGZ1bmN0aW9uIGNhbGwuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgUmV3cml0ZVVu
YWRkcmVzc2FibGVSZWZlcmVuY2VzKFRDb21waWxlciAmY29tcGlsZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAmcm9v
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sRW52ICZzeW1ib2xFbnYpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9SRVdSSVRFVU5BRERS
RVNTQUJMRVJFRkVSRU5DRVNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kRXhwcmVzc2lvbnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NlcGFyYXRlQ29tcG91bmRFeHBy
ZXNzaW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWE3YjM3M2QzMWIyMjkzYWIwODQ5NTJkNDhmMjE5ODFl
MzViZWY0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5k
RXhwcmVzc2lvbnMuY3BwCkBAIC0wLDAgKzEsNjU1IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8
dW5vcmRlcmVkX21hcD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9EZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0Vudmlyb25tZW50VmFyaWFibGUuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNv
bXBvdW5kRXhwcmVzc2lvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzaDsKKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbmFtZXNwYWNlCit7CisKK2Jvb2wgSXNJbmRleChU
T3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICAgIGNhc2UgVE9w
ZXJhdG9yOjpFT3BJbmRleERpcmVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4
RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERp
cmVjdFN0cnVjdDoKKyAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVPcEluZGV4SW5kaXJlY3Q6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNJbmRleChUSW50ZXJtVHlwZWQgJmV4cHIp
Cit7CisgICAgaWYgKGF1dG8gKmJpbmFyeSA9IGV4cHIuZ2V0QXNCaW5hcnlOb2RlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gSXNJbmRleChiaW5hcnktPmdldE9wKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gZXhwci5nZXRBc1N3aXp6bGVOb2RlKCk7Cit9CisKK2Jvb2wgVmlld0JpbmFyeUNoYWlu
KFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkICZub2RlLCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlw
ZWQgKj4gJm91dCkKK3sKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5hcnkgPSBub2RlLmdldEFzQmlu
YXJ5Tm9kZSgpOworICAgIGlmICghYmluYXJ5IHx8IGJpbmFyeS0+Z2V0T3AoKSAhPSBvcCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQgKmxl
ZnQgID0gYmluYXJ5LT5nZXRMZWZ0KCk7CisgICAgVEludGVybVR5cGVkICpyaWdodCA9IGJpbmFy
eS0+Z2V0UmlnaHQoKTsKKworICAgIGlmICghVmlld0JpbmFyeUNoYWluKG9wLCAqbGVmdCwgb3V0
KSkKKyAgICB7CisgICAgICAgIG91dC5wdXNoX2JhY2sobGVmdCk7CisgICAgfQorCisgICAgaWYg
KCFWaWV3QmluYXJ5Q2hhaW4ob3AsICpyaWdodCwgb3V0KSkKKyAgICB7CisgICAgICAgIG91dC5w
dXNoX2JhY2socmlnaHQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGQ6OnZl
Y3RvcjxUSW50ZXJtVHlwZWQgKj4gVmlld0JpbmFyeUNoYWluKFRJbnRlcm1CaW5hcnkgJm5vZGUp
Cit7CisgICAgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IGNoYWluOworICAgIFZpZXdCaW5h
cnlDaGFpbihub2RlLmdldE9wKCksIG5vZGUsIGNoYWluKTsKKyAgICBBU1NFUlQoY2hhaW4uc2l6
ZSgpID49IDIpOworICAgIHJldHVybiBjaGFpbjsKK30KKworY2xhc3MgUHJlUGFzcyA6IHB1Ymxp
YyBUSW50ZXJtUmVidWlsZAoreworICBwdWJsaWM6CisgICAgUHJlUGFzcyhUQ29tcGlsZXIgJmNv
bXBpbGVyKSA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCB0cnVlKSB7fQorCisgIHBy
aXZhdGU6CisgICAgLy8gQ2hhbmdlIGNoYWlucyBvZgorICAgIC8vICAgICAgeCBPUCB5IE9QIHoK
KyAgICAvLyB0bworICAgIC8vICAgICAgeCBPUCAoeSBPUCB6KQorICAgIC8vIHJlZ2FyZGxlc3Mg
b2Ygb3JpZ2luYWwgcGFyZW50aGVzaXphdGlvbi4KKyAgICBUSW50ZXJtVHlwZWQgJnJlYXNzb2Np
YXRlUmlnaHQoVEludGVybUJpbmFyeSAmbm9kZSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVy
YXRvciBvcCAgICAgICAgICAgICAgICA9IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgc3RkOjp2ZWN0
b3I8VEludGVybVR5cGVkICo+IGNoYWluID0gVmlld0JpbmFyeUNoYWluKG5vZGUpOworCisgICAg
ICAgIFRJbnRlcm1UeXBlZCAqcmVzdWx0ID0gY2hhaW4uYmFjaygpOworICAgICAgICBjaGFpbi5w
b3BfYmFjaygpOworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKworICAgICAgICBjb25zdCBhdXRv
IGJlZ2luID0gY2hhaW4ucmJlZ2luKCk7CisgICAgICAgIGNvbnN0IGF1dG8gZW5kICAgPSBjaGFp
bi5yZW5kKCk7CisKKyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7
ICsraXRlcikKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVR5cGVkICpwYXJ0ID0gKml0
ZXI7CisgICAgICAgICAgICBBU1NFUlQocGFydCk7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAq
dGVtcCA9IHJlYnVpbGQoKnBhcnQpLnNpbmdsZSgpOworICAgICAgICAgICAgQVNTRVJUKHRlbXAp
OworICAgICAgICAgICAgcGFydCA9IHRlbXAtPmdldEFzVHlwZWQoKTsKKyAgICAgICAgICAgIEFT
U0VSVChwYXJ0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBUSW50ZXJtQmluYXJ5KG9wLCBw
YXJ0LCByZXN1bHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAqcmVzdWx0OworICAgIH0K
KworICBwcml2YXRlOgorICAgIFByZVJlc3VsdCB2aXNpdEJpbmFyeVByZShUSW50ZXJtQmluYXJ5
ICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVE9wZXJhdG9yIG9wID0gbm9k
ZS5nZXRPcCgpOworICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsQW5kIHx8
IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4ge3JlYXNzb2NpYXRlUmlnaHQobm9kZSksIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorfTsKKworY2xhc3MgU2VwYXJhdG9y
IDogcHVibGljIFRJbnRlcm1SZWJ1aWxkCit7CisgICAgSWRHZW4gJm1JZEdlbjsKKyAgICBzdGQ6
OnZlY3RvcjxzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPj4gbVN0bXRzU3RhY2s7CisgICAgc3Rk
Ojp2ZWN0b3I8c3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBUSW50ZXJtRGVj
bGFyYXRpb24gKj4+IG1CaW5kaW5nTWFwU3RhY2s7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRJ
bnRlcm1UeXBlZCAqLCBUSW50ZXJtVHlwZWQgKj4gbUV4cHJNYXA7CisgICAgc3RkOjp1bm9yZGVy
ZWRfc2V0PFRJbnRlcm1EZWNsYXJhdGlvbiAqPiBtTWFza2VkRGVjbHM7CisKKyAgcHVibGljOgor
ICAgIFNlcGFyYXRvcihUQ29tcGlsZXIgJmNvbXBpbGVyLCBTeW1ib2xFbnYgJnN5bWJvbEVudiwg
SWRHZW4gJmlkR2VuKQorICAgICAgICA6IFRJbnRlcm1SZWJ1aWxkKGNvbXBpbGVyLCB0cnVlLCB0
cnVlKSwgbUlkR2VuKGlkR2VuKQorICAgIHt9CisKKyAgICB+U2VwYXJhdG9yKCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIEFTU0VSVChtU3RtdHNTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgQVNT
RVJUKG1FeHByTWFwLmVtcHR5KCkpOworICAgICAgICBBU1NFUlQobUJpbmRpbmdNYXBTdGFjay5l
bXB0eSgpKTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiAmZ2V0Q3VyclN0bXRzKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbVN0bXRzU3RhY2su
ZW1wdHkoKSk7CisgICAgICAgIHJldHVybiBtU3RtdHNTdGFjay5iYWNrKCk7CisgICAgfQorCisg
ICAgc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFRWYXJpYWJsZSAqLCBUSW50ZXJtRGVjbGFyYXRp
b24gKj4gJmdldEN1cnJCaW5kaW5nTWFwKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbUJpbmRp
bmdNYXBTdGFjay5lbXB0eSgpKTsKKyAgICAgICAgcmV0dXJuIG1CaW5kaW5nTWFwU3RhY2suYmFj
aygpOworICAgIH0KKworICAgIHZvaWQgcHVzaFN0bXQoVEludGVybU5vZGUgJm5vZGUpIHsgZ2V0
Q3VyclN0bXRzKCkucHVzaF9iYWNrKCZub2RlKTsgfQorCisgICAgYm9vbCBpc1Rlcm1pbmFsRXhw
cihUSW50ZXJtTm9kZSAmbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGVUeXBlIG5vZGVUeXBlID0g
Z2V0Tm9kZVR5cGUobm9kZSk7CisgICAgICAgIHN3aXRjaCAobm9kZVR5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkNvbnN0YW50VW5pb246CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCAqcHVsbE1hcHBlZEV4cHIoVEludGVybVR5cGVk
ICpub2RlLCBib29sIGFsbG93QmFja3RyYWNrKQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVk
ICpleHByOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IG1FeHByTWFwLmZp
bmQobm9kZSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBtRXhwck1hcC5lbmQoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgICAgIGV4cHIgPSBpdGVyLT5zZWNvbmQ7
CisgICAgICAgICAgICBBU1NFUlQoZXhwcik7CisgICAgICAgICAgICBtRXhwck1hcC5lcmFzZShp
dGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhbGxvd0JhY2t0cmFjaykKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byAmYmluZGluZ01hcCA9IGdldEN1cnJCaW5kaW5nTWFwKCk7Cisg
ICAgICAgICAgICB3aGlsZSAoVEludGVybVN5bWJvbCAqc3ltYm9sID0gZXhwci0+Z2V0QXNTeW1i
b2xOb2RlKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxl
ICZ2YXIgPSBzeW1ib2wtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgYXV0byBpdGVyICAg
ICAgICAgICAgPSBiaW5kaW5nTWFwLmZpbmQoJnZhcik7CisgICAgICAgICAgICAgICAgaWYgKGl0
ZXIgPT0gYmluZGluZ01hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBleHByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBB
U1NFUlQodmFyLnN5bWJvbFR5cGUoKSA9PSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKKyAg
ICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBpdGVyLT5zZWNvbmQ7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGRlY2wpOworICAgICAgICAgICAgICAgIGV4cHIgPSBWaWV3
RGVjbGFyYXRpb24oKmRlY2wpLmluaXRFeHByOworICAgICAgICAgICAgICAgIEFTU0VSVChleHBy
KTsKKyAgICAgICAgICAgICAgICBiaW5kaW5nTWFwLmVyYXNlKGl0ZXIpOworICAgICAgICAgICAg
ICAgIG1NYXNrZWREZWNscy5pbnNlcnQoZGVjbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBib29sIGlzU3RhbmRhbG9uZUV4
cHIoVEludGVybVR5cGVkICZleHByKQorICAgIHsKKyAgICAgICAgaWYgKGdldFBhcmVudE5vZGUo
KS0+Z2V0QXNCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQoZXhwci5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0g
VEJhc2ljVHlwZTo6RWJ0Vm9pZCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICB2b2lkIHB1c2hCaW5kaW5nKFRJbnRlcm1UeXBlZCAmb2xkRXhwciwgVEludGVybVR5cGVkICZu
ZXdFeHByKQorICAgIHsKKyAgICAgICAgaWYgKGlzU3RhbmRhbG9uZUV4cHIobmV3RXhwcikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5ld0V4cHIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChJc0luZGV4KG5ld0V4cHIpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXhwck1hcFsmb2xkRXhwcl0gPSAmbmV3RXhwcjsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvICZiaW5kaW5nTWFwID0gZ2V0Q3VyckJp
bmRpbmdNYXAoKTsKKyAgICAgICAgY29uc3QgTmFtZSBuYW1lICA9IG1JZEdlbi5jcmVhdGVOZXdO
YW1lKCIiKTsKKyAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUo
Jm1TeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZuZXdFeHByLmdldFR5cGUoKSwgbmFtZS5z
eW1ib2xUeXBlKCkpOworICAgICAgICBhdXRvICpkZWNsID0gbmV3IFRJbnRlcm1EZWNsYXJhdGlv
bih2YXIsICZuZXdFeHByKTsKKyAgICAgICAgcHVzaFN0bXQoKmRlY2wpOworICAgICAgICBtRXhw
ck1hcFsmb2xkRXhwcl0gPSBuZXcgVEludGVybVN5bWJvbCh2YXIpOworICAgICAgICBiaW5kaW5n
TWFwW3Zhcl0gICAgPSBkZWNsOworICAgIH0KKworICAgIHZvaWQgcHVzaFN0YWNrcygpCisgICAg
eworICAgICAgICBtU3RtdHNTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICAgICAgbUJpbmRpbmdN
YXBTdGFjay5lbXBsYWNlX2JhY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcFN0YWNrcygpCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1CaW5kaW5nTWFwU3RhY2suZW1wdHkoKSk7CisgICAgICAg
IEFTU0VSVCghbVN0bXRzU3RhY2suZW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChtU3RtdHNTdGFj
ay5iYWNrKCkuZW1wdHkoKSk7CisgICAgICAgIG1CaW5kaW5nTWFwU3RhY2sucG9wX2JhY2soKTsK
KyAgICAgICAgbVN0bXRzU3RhY2sucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hT
dG10c0ludG9CbG9jayhUSW50ZXJtQmxvY2sgJmJsb2NrLCBzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiAmc3RtdHMpCisgICAgeworICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcSA9ICpibG9j
ay5nZXRTZXF1ZW5jZSgpOworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpzdG10IDogc3RtdHMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2wgPSBz
dG10LT5nZXRBc0RlY2xhcmF0aW9uTm9kZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGF1dG8gaXRlciA9IG1NYXNrZWREZWNscy5maW5kKGRlY2wpOworICAgICAgICAgICAgICAg
IGlmIChpdGVyICE9IG1NYXNrZWREZWNscy5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIG1NYXNrZWREZWNscy5lcmFzZShpdGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc2VxLnB1c2hfYmFjayhzdG10KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJbnRl
cm1CbG9jayAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKGNvbnN0IFRWYXJpYWJsZSAmdmFyLCBU
SW50ZXJtVHlwZWQgJm5ld0V4cHIpCisgICAgeworICAgICAgICBzdGQ6OnZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiBzdG10cyA9IHN0ZDo6bW92ZShnZXRDdXJyU3RtdHMoKSk7CisgICAgICAgIHBvcFN0
YWNrcygpOworCisgICAgICAgIGF1dG8gJmJsb2NrID0gKm5ldyBUSW50ZXJtQmxvY2soKTsKKyAg
ICAgICAgYXV0byAmc2VxICAgPSAqYmxvY2suZ2V0U2VxdWVuY2UoKTsKKyAgICAgICAgc2VxLnJl
c2VydmUoMSArIHN0bXRzLnNpemUoKSk7CisgICAgICAgIHB1c2hTdG10c0ludG9CbG9jayhibG9j
aywgc3RtdHMpOworICAgICAgICBzZXEucHVzaF9iYWNrKG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVy
YXRvcjo6RU9wQXNzaWduLCBuZXcgVEludGVybVN5bWJvbCgmdmFyKSwgJm5ld0V4cHIpKTsKKwor
ICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgUHJlUmVzdWx0
IHZpc2l0QmxvY2tQcmUoVEludGVybUJsb2NrICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgcHVzaFN0YWNrcygpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0
UmVzdWx0IHZpc2l0QmxvY2tQb3N0KFRJbnRlcm1CbG9jayAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IHN0bXRzID0gc3RkOjptb3ZlKGdl
dEN1cnJTdG10cygpKTsKKyAgICAgICAgcG9wU3RhY2tzKCk7CisKKyAgICAgICAgVEludGVybVNl
cXVlbmNlICZzZXEgPSAqbm9kZS5nZXRTZXF1ZW5jZSgpOworICAgICAgICBzZXEuY2xlYXIoKTsK
KyAgICAgICAgc2VxLnJlc2VydmUoc3RtdHMuc2l6ZSgpKTsKKyAgICAgICAgcHVzaFN0bXRzSW50
b0Jsb2NrKG5vZGUsIHN0bXRzKTsKKworICAgICAgICBUSW50ZXJtTm9kZSAqcGFyZW50ID0gZ2V0
UGFyZW50Tm9kZSgpOworICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+Z2V0QXNCbG9jaygp
KQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdERlY2xhcmF0
aW9uUHJlKFRJbnRlcm1EZWNsYXJhdGlvbiAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IERlY2xhcmF0aW9uIGRlY2wgPSBWaWV3RGVjbGFyYXRpb24obm9kZSk7CisgICAgICAgIGlmICgh
ZGVjbC5pbml0RXhwciB8fCBpc1Rlcm1pbmFsRXhwcigqZGVjbC5pbml0RXhwcikpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICAgICAgcmV0dXJuIHtub2Rl
LCBWaXNpdEJpdHM6Ok5laXRoZXJ9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOwor
ICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBvc3QoVEludGVybURlY2xh
cmF0aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGVjbGFyYXRpb24gZGVjbCA9
IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKyAgICAgICAgQVNTRVJUKGRlY2wuc3ltYm9sLnZhcmlh
YmxlKCkuc3ltYm9sVHlwZSgpICE9IFN5bWJvbFR5cGU6OkVtcHR5KTsKKyAgICAgICAgQVNTRVJU
KCFkZWNsLnN5bWJvbC52YXJpYWJsZSgpLmdldFR5cGUoKS5pc1N0cnVjdFNwZWNpZmllcigpKTsK
KworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXRFeHByID0gcHVsbE1hcHBlZEV4cHIoZGVj
bC5pbml0RXhwciwgdHJ1ZSk7CisgICAgICAgIGlmIChkZWNsLmluaXRFeHByID09IG5ld0luaXRF
eHByKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gJm5ld05vZGUgPSAqbmV3
IFRJbnRlcm1EZWNsYXJhdGlvbigpOworICAgICAgICAgICAgbmV3Tm9kZS5hcHBlbmREZWNsYXJh
dG9yKAorICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wSW5p
dGlhbGl6ZSwgJmRlY2wuc3ltYm9sLCBuZXdJbml0RXhwcikpOworICAgICAgICAgICAgcHVzaFN0
bXQobmV3Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisg
ICAgUG9zdFJlc3VsdCB2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5vZGUpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmV4cHIgICAgPSBub2RlLmdldE9wZXJhbmQo
KTsKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdFeHByID0gcHVsbE1hcHBlZEV4cHIoZXhwciwg
ZmFsc2UpOworICAgICAgICBpZiAoZXhwciA9PSBuZXdFeHByKQorICAgICAgICB7CisgICAgICAg
ICAgICBwdXNoQmluZGluZyhub2RlLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsICpuZXcgVEludGVybVVuYXJ5
KG5vZGUuZ2V0T3AoKSwgbmV3RXhwciwgbm9kZS5nZXRGdW5jdGlvbigpKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUHJlUmVzdWx0IHZpc2l0QmluYXJ5
UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBU
T3BlcmF0b3Igb3AgPSBub2RlLmdldE9wKCk7CisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6
OkVPcExvZ2ljYWxBbmQgfHwgb3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAqcmlnaHQgPSBub2RlLmdldFJpZ2h0KCk7CisKKyAgICAg
ICAgICAgIFBvc3RSZXN1bHQgbGVmdFJlc3VsdCA9IHJlYnVpbGQoKmxlZnQpOworICAgICAgICAg
ICAgQVNTRVJUKGxlZnRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgICAgICBwdXNoU3RhY2tz
KCk7CisgICAgICAgICAgICBQb3N0UmVzdWx0IHJpZ2h0UmVzdWx0ID0gcmVidWlsZCgqcmlnaHQp
OworICAgICAgICAgICAgQVNTRVJUKHJpZ2h0UmVzdWx0LnNpbmdsZSgpKTsKKworICAgICAgICAg
ICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OlBvc3R9OworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJpbmFyeVBvc3QoVElu
dGVybUJpbmFyeSAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRv
ciBvcCA9IG5vZGUuZ2V0T3AoKTsKKyAgICAgICAgaWYgKG9wID09IFRPcGVyYXRvcjo6RU9wSW5p
dGlhbGl6ZSAmJiBnZXRQYXJlbnROb2RlKCktPmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBpcyBoYW5kbGVkIGJ5IHZpc2l0RGVj
bGFyYXRpb25Qb3N0CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfQorCisgICAg
ICAgIFRJbnRlcm1UeXBlZCAqbGVmdCAgPSBub2RlLmdldExlZnQoKTsKKyAgICAgICAgVEludGVy
bVR5cGVkICpyaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKworICAgICAgICBpZiAob3AgPT0gVE9w
ZXJhdG9yOjpFT3BMb2dpY2FsQW5kIHx8IG9wID09IFRPcGVyYXRvcjo6RU9wTG9naWNhbE9yKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBOYW1lIG5hbWUgPSBtSWRHZW4uY3JlYXRlTmV3
TmFtZSgiIik7CisgICAgICAgICAgICBhdXRvICp2YXIgPSBuZXcgVFZhcmlhYmxlKCZtU3ltYm9s
VGFibGUsIG5hbWUucmF3TmFtZSgpLCBuZXcgVFR5cGUoVEJhc2ljVHlwZTo6RWJ0Qm9vbCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuc3ltYm9sVHlwZSgpKTsK
KworICAgICAgICAgICAgVEludGVybVR5cGVkICpuZXdSaWdodCAgID0gcHVsbE1hcHBlZEV4cHIo
cmlnaHQsIHRydWUpOworICAgICAgICAgICAgVEludGVybUJsb2NrICpyaWdodEJsb2NrID0gJmJ1
aWxkQmxvY2tXaXRoVGFpbEFzc2lnbigqdmFyLCAqbmV3UmlnaHQpOworICAgICAgICAgICAgVElu
dGVybVR5cGVkICpuZXdMZWZ0ICAgID0gcHVsbE1hcHBlZEV4cHIobGVmdCwgdHJ1ZSk7CisKKyAg
ICAgICAgICAgIFRJbnRlcm1UeXBlZCAqY29uZCA9IG5ldyBUSW50ZXJtU3ltYm9sKHZhcik7Cisg
ICAgICAgICAgICBpZiAob3AgPT0gVE9wZXJhdG9yOjpFT3BMb2dpY2FsT3IpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uZCA9IG5ldyBUSW50ZXJtVW5hcnkoVE9wZXJhdG9yOjpF
T3BMb2dpY2FsTm90LCBjb25kLCBudWxscHRyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtRGVjbGFyYXRpb24odmFyLCBuZXdMZWZ0KSk7CisgICAg
ICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1JZkVsc2UoY29uZCwgcmlnaHRCbG9jaywgbnVs
bHB0cikpOworICAgICAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVFeHByKG5vZGUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1FeHByTWFwWyZub2RlXSA9IG5ldyBUSW50ZXJtU3lt
Ym9sKHZhcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICB9CisKKyAgICAgICAgY29uc3QgYm9vbCBpc0Fzc2lnbiAgICA9IElzQXNzaWdubWVudChv
cCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3TGVmdCAgPSBwdWxsTWFwcGVkRXhwcihsZWZ0
LCBmYWxzZSk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3UmlnaHQgPSBwdWxsTWFwcGVkRXhw
cihyaWdodCwgaXNBc3NpZ24pOworCisgICAgICAgIGlmIChvcCA9PSBUT3BlcmF0b3I6OkVPcENv
bW1hKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3UmlnaHQp
OworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBUSW50ZXJtQmluYXJ5ICpuZXdOb2RlOworICAgICAgICAgICAg
aWYgKGxlZnQgPT0gbmV3TGVmdCAmJiByaWdodCA9PSBuZXdSaWdodCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBuZXdOb2RlID0gJm5vZGU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmV3Tm9kZSA9IG5ldyBU
SW50ZXJtQmluYXJ5KG9wLCBuZXdMZWZ0LCBuZXdSaWdodCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBwdXNoQmluZGluZyhub2RlLCAqbmV3Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4g
bm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFByZVJlc3VsdCB2aXNpdFRlcm5hcnlQcmUo
VEludGVybVRlcm5hcnkgJm5vZGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBQb3N0UmVzdWx0
IGNvbmRSZXN1bHQgPSByZWJ1aWxkKCpub2RlLmdldENvbmRpdGlvbigpKTsKKyAgICAgICAgQVNT
RVJUKGNvbmRSZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgIHB1c2hTdGFja3MoKTsKKyAgICAg
ICAgUG9zdFJlc3VsdCB0aGVuUmVzdWx0ID0gcmVidWlsZCgqbm9kZS5nZXRUcnVlRXhwcmVzc2lv
bigpKTsKKyAgICAgICAgQVNTRVJUKHRoZW5SZXN1bHQuc2luZ2xlKCkpOworCisgICAgICAgIHB1
c2hTdGFja3MoKTsKKyAgICAgICAgUG9zdFJlc3VsdCBlbHNlUmVzdWx0ID0gcmVidWlsZCgqbm9k
ZS5nZXRGYWxzZUV4cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChlbHNlUmVzdWx0LnNpbmds
ZSgpKTsKKworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6UG9zdH07CisgICAgfQor
CisgICAgUG9zdFJlc3VsdCB2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5ICZub2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpjb25kICA9IG5vZGUuZ2V0Q29u
ZGl0aW9uKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqdGhlbiAgPSBub2RlLmdldFRydWVFeHBy
ZXNzaW9uKCk7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZWxzZV8gPSBub2RlLmdldEZhbHNlRXhw
cmVzc2lvbigpOworCisgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1JZEdlbi5jcmVhdGVOZXdO
YW1lKCIiKTsKKyAgICAgICAgYXV0byAqdmFyID0KKyAgICAgICAgICAgIG5ldyBUVmFyaWFibGUo
Jm1TeW1ib2xUYWJsZSwgbmFtZS5yYXdOYW1lKCksICZub2RlLmdldFR5cGUoKSwgbmFtZS5zeW1i
b2xUeXBlKCkpOworCisgICAgICAgIFRJbnRlcm1UeXBlZCAqbmV3RWxzZSAgID0gcHVsbE1hcHBl
ZEV4cHIoZWxzZV8sIGZhbHNlKTsKKyAgICAgICAgVEludGVybUJsb2NrICplbHNlQmxvY2sgPSAm
YnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIsICpuZXdFbHNlKTsKKyAgICAgICAgVEludGVy
bVR5cGVkICpuZXdUaGVuICAgPSBwdWxsTWFwcGVkRXhwcih0aGVuLCB0cnVlKTsKKyAgICAgICAg
VEludGVybUJsb2NrICp0aGVuQmxvY2sgPSAmYnVpbGRCbG9ja1dpdGhUYWlsQXNzaWduKCp2YXIs
ICpuZXdUaGVuKTsKKyAgICAgICAgVEludGVybVR5cGVkICpuZXdDb25kICAgPSBwdWxsTWFwcGVk
RXhwcihjb25kLCB0cnVlKTsKKworICAgICAgICBwdXNoU3RtdCgqbmV3IFRJbnRlcm1EZWNsYXJh
dGlvbnt2YXJ9KTsKKyAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtSWZFbHNlKG5ld0NvbmQs
IHRoZW5CbG9jaywgZWxzZUJsb2NrKSk7CisgICAgICAgIGlmICghaXNTdGFuZGFsb25lRXhwcihu
b2RlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4cHJNYXBbJm5vZGVdID0gbmV3IFRJbnRl
cm1TeW1ib2wodmFyKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRTd2l6emxlUG9zdChUSW50ZXJtU3dpenpsZSAmbm9kZSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0
T3BlcmFuZCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBwdWxsTWFwcGVkRXhw
cihleHByLCBmYWxzZSk7CisgICAgICAgIGlmIChleHByID09IG5ld0V4cHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaEJpbmRpbmcobm9kZSwgKm5ldyBUSW50
ZXJtU3dpenpsZShuZXdFeHByLCBub2RlLmdldFN3aXp6bGVPZmZzZXRzKCkpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0QWdn
cmVnYXRlUG9zdChUSW50ZXJtQWdncmVnYXRlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgVEludGVybVNlcXVlbmNlICZhcmdzID0gKm5vZGUuZ2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
Zm9yIChUSW50ZXJtTm9kZSAqJmFyZyA6IGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworICAgICAgICAgICAgQVNTRVJU
KHRhcmcpOworICAgICAgICAgICAgYXJnID0gcHVsbE1hcHBlZEV4cHIodGFyZywgZmFsc2UpOwor
ICAgICAgICB9CisgICAgICAgIHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICByZXR1
cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0
aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vzc29yRGlyZWN0aXZlICZub2RlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3RvdHlwZVBvc3QoVEludGVybUZ1bmN0
aW9uUHJvdG90eXBlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFnZXRQYXJl
bnRGdW5jdGlvbigpKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoU3RtdChub2RlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlz
aXRDYXNlUHJlKFRJbnRlcm1DYXNlICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KFRJbnRlcm1UeXBlZCAqY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpc1Rlcm1pbmFsRXhwcigqY29uZCkpOworICAgICAgICB9CisgICAg
ICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVp
dGhlcn07CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3
aXRjaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqaW5pdCAg
ICA9IG5vZGUuZ2V0SW5pdCgpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0luaXQgPSBwdWxs
TWFwcGVkRXhwcihpbml0LCBmYWxzZSk7CisgICAgICAgIGlmIChpbml0ID09IG5ld0luaXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtU3dpdGNo
KG5ld0luaXQsIG5vZGUuZ2V0U3RhdGVtZW50TGlzdCgpKSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQb3N0UmVzdWx0IHZpc2l0RnVuY3Rpb25EZWZp
bml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcHVzaFN0bXQobm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0K
KworICAgIFBvc3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2UgJm5vZGUpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQgKmNvbmQgICAgPSBub2RlLmdldENv
bmRpdGlvbigpOworICAgICAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBwdWxsTWFwcGVkRXhw
cihjb25kLCBmYWxzZSk7CisgICAgICAgIGlmIChjb25kID09IG5ld0NvbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgcHVzaFN0bXQoKm5ldyBUSW50ZXJtSWZFbHNlKG5ld0NvbmQs
IG5vZGUuZ2V0VHJ1ZUJsb2NrKCksIG5vZGUuZ2V0RmFsc2VCbG9jaygpKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgUG9zdFJlc3VsdCB2aXNpdEJyYW5j
aFBvc3QoVEludGVybUJyYW5jaCAmbm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFRJbnRl
cm1UeXBlZCAqZXhwciAgICA9IG5vZGUuZ2V0RXhwcmVzc2lvbigpOworICAgICAgICBUSW50ZXJt
VHlwZWQgKm5ld0V4cHIgPSBwdWxsTWFwcGVkRXhwcihleHByLCBmYWxzZSk7CisgICAgICAgIGlm
IChleHByID09IG5ld0V4cHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hTdG10KG5vZGUp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaFN0
bXQoKm5ldyBUSW50ZXJtQnJhbmNoKG5vZGUuZ2V0Rmxvd09wKCksIG5ld0V4cHIpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRM
b29wUHJlKFRJbnRlcm1Mb29wICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFy
ZWJ1aWxkSW5QbGFjZSgqbm9kZS5nZXRCb2R5KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBM
T0dJQ19FUlJPUigpOworICAgICAgICB9CisgICAgICAgIHB1c2hTdG10KG5vZGUpOworICAgICAg
ICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6TmVpdGhlcn07CisgICAgfQorCisgICAgUG9zdFJl
c3VsdCB2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBub2RlLmdldFR5cGUo
KTsKKyAgICAgICAgaWYgKCF0eXBlLmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHB1c2hCaW5kaW5nKG5vZGUsIG5vZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2Rl
OworICAgIH0KKworICAgIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
blBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsgIC8vIFRoZXNlIHNob3VsZCBiZSBzY3J1YmJl
ZCBmcm9tIEFTVCBiZWZvcmUgcmV3cml0ZXIgaXMgY2FsbGVkLgorICAgICAgICBwdXNoU3RtdChu
b2RlKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorfTsKKworfSAgLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIHNoOjpTZXBhcmF0
ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xFbnYgJnN5bWJvbEVudiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJZEdlbiAmaWRHZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KQoreworICAgIGlmIChyZWFk
Qm9vbEVudlZhcigiR01UX0RJU0FCTEVfU0VQQVJBVEVfQ09NUE9VTkRfRVhQUkVTU0lPTlMiKSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghU2ltcGxpZnlM
b29wQ29uZGl0aW9ucygmY29tcGlsZXIsICZyb290LCAmY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUo
KSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFQcmVQ
YXNzKGNvbXBpbGVyKS5yZWJ1aWxkUm9vdChyb290KSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIVNlcGFyYXRvcihjb21waWxlciwgc3ltYm9sRW52LCBp
ZEdlbikucmVidWlsZFJvb3Qocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2Vw
YXJhdGVDb21wb3VuZEV4cHJlc3Npb25zLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21wb3Vu
ZEV4cHJlc3Npb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWU0MGE1NTk2ODJhZGRlYzliNmE1MDAwNzJhNjBj
M2QwNjFkYjRiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBv
dW5kRXhwcmVzc2lvbnMuaApAQCAtMCwwICsxLDQ3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRF
WFBSRVNTSU9OU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9TRVBBUkFURUNPTVBPVU5ERVhQUkVTU0lPTlNfSF8KKworI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lk
R2VuLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBUcmFuc2Zvcm1zIGNvZGUg
dG8gKHVzdWFsbHkpIGhhdmUgbW9zdCBvbmUgbm9uLXRlcm1pbmFsIGV4cHJlc3Npb24gcGVyIHN0
YXRlbWVudC4KKy8vIFRoaXMgYWxzbyByZXdyaXRlcyAoJiYpLCAofHwpLCBhbmQgKD86KSBpbnRv
IHJhdyBpZi9pZi1ub3QvaWYtZWxzZSBzdGF0ZW1lbnRzLCByZXNwZWN0aXZlbHkuCisvLworLy8g
ZS5nLgorLy8gICAgaW50IHggPSA2ICsgZm9vKHksIGJhcigpKTsKKy8vIGJlY29tZXMKKy8vICAg
IGF1dG8gXzEgPSBiYXIoKTsKKy8vICAgIGF1dG8gXzIgPSBmb28oeSwgXzEpOworLy8gICAgYXV0
byBfMyA9IDYgKyBfMjsKKy8vICAgIGludCB4ID0gXzM7CisvLworLy8gV0FSTklORzoKKy8vICAg
IC0gVGhpcyBkb2VzIG5vdCByZXdyaXRlIG9iamVjdCBpbmRleGluZyBvcGVyYXRvcnMgYXMgYSB3
aG9sZSAoZS5nLiBmb28ueCwgZm9vW3hdKSwgYnV0IHdpbGwKKy8vICAgICAgcmV3cml0ZSB0aGUg
YXJndW1lbnRzIHRvIHRoZSBvcGVyYXRvciAod2hlbiBhcHBsaWNhYmxlKS4KKy8vICAgICAgZS5n
LgorLy8gICAgICAgIGZvbyhnZXRWZWMoKVtpICsgMl0gKyAxKTsKKy8vICAgICAgYmVjb21lcwor
Ly8gICAgICAgIGF1dG8gXzEgPSBnZXRWZWMoKTsKKy8vICAgICAgICBhdXRvIF8yID0gaSArIDI7
CisvLyAgICAgICAgYXV0byBfMyA9IF8xW18yXSArIDE7IC8vIEluZGV4IG9wZXJhdG9yIHJlbWFp
bnMgaW4gKCspIGV4cHIgaGVyZS4KKy8vICAgICAgICBmb28oXzMpOworLy8KK0FOR0xFX05PX0RJ
U0NBUkQgYm9vbCBTZXBhcmF0ZUNvbXBvdW5kRXhwcmVzc2lvbnMoVENvbXBpbGVyICZjb21waWxl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lt
Ym9sRW52ICZzeW1ib2xFbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElkR2VuICZpZEdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNw
YWNlIHNoCisKKyNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxE
SVJFQ1RfU0VQQVJBVEVDT01QT1VOREVYUFJFU1NJT05TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJh
OGM2ZDEyMGIwYjQ1MjIwNjk0YmZiYjY3NGYwZGJjM2QwYzIxYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC9TZXBhcmF0ZUNvbXBvdW5kU3RydWN0RGVjbGFyYXRpb25zLmNwcApAQCAt
MCwwICsxLDc3IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2VwYXJhdGVDb21w
b3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dHJlZV9vcHMvU2VwYXJhdGVEZWNsYXJhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJzZS5oIgorCit1c2luZyBuYW1lc3BhY2Ugc2g7
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK25hbWVzcGFjZQoreworCitjbGFzcyBTZXBh
cmF0b3IgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgU2VwYXJh
dG9yKFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwg
ZmFsc2UsIHRydWUsICZzeW1ib2xUYWJsZSkge30KKworICAgIGJvb2wgdmlzaXREZWNsYXJhdGlv
bihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICpkZWNsTm9kZSkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChkZWNsTm9kZS0+Z2V0Q2hpbGRDb3VudCgpID09IDEpOworICAgICAgICBU
SW50ZXJtTm9kZSAmbm9kZSA9ICpkZWNsTm9kZS0+Z2V0Q2hpbGROb2RlKDApOworCisgICAgICAg
IGlmIChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlID0gbm9kZS5nZXRBc1N5bWJvbE5vZGUoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgICAgICAgID0gc3lt
Ym9sTm9kZS0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgICAg
ICAgICA9IHZhci5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBTeW1ib2xUeXBlIHN5bWJv
bFR5cGUgPSB2YXIuc3ltYm9sVHlwZSgpOworICAgICAgICAgICAgaWYgKHR5cGUuaXNTdHJ1Y3RT
cGVjaWZpZXIoKSAmJiBzeW1ib2xUeXBlICE9IFN5bWJvbFR5cGU6OkVtcHR5KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUu
Z2V0U3RydWN0KCk7CisgICAgICAgICAgICAgICAgYXV0byAqc3RydWN0VmFyICAgICAgICAgICAg
ID0gbmV3IFRWYXJpYWJsZShtU3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVFR5cGUoc3Ry
dWN0dXJlLCB0cnVlKSwgU3ltYm9sVHlwZTo6RW1wdHkpOworCisgICAgICAgICAgICAgICAgYXV0
byAqaW5zdGFuY2VUeXBlID0gbmV3IFRUeXBlKHN0cnVjdHVyZSwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIGluc3RhbmNlVHlwZS0+c2V0UXVhbGlmaWVyKHR5cGUuZ2V0UXVhbGlmaWVyKCkpOwor
ICAgICAgICAgICAgICAgIGF1dG8gKmluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShtU3ltYm9s
VGFibGUsIHZhci5uYW1lKCksIGluc3RhbmNlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sVHlwZSwgdmFyLmV4dGVuc2lvbigpKTsK
KworICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSByZXBsYWNlbWVudHM7CisgICAgICAg
ICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2hfYmFjayhuZXcgVEludGVybVN5bWJvbChzdHJ1Y3RW
YXIpKTsKKyAgICAgICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaF9iYWNrKG5ldyBUSW50ZXJt
U3ltYm9sKGluc3RhbmNlVmFyKSk7CisgICAgICAgICAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRz
LnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgTm9kZVJlcGxhY2VXaXRoTXVsdGlwbGVF
bnRyeShkZWNsTm9kZSwgc3ltYm9sTm9kZSwgc3RkOjptb3ZlKHJlcGxhY2VtZW50cykpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
OworCit9ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK2Jvb2wgc2g6OlNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBpbGVy
ICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQoreworICAgIFNlcGFyYXRvciBzZXBhcmF0
b3IoY29tcGlsZXIuZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgcm9vdC50cmF2ZXJzZSgmc2VwYXJh
dG9yKTsKKyAgICBpZiAoIXNlcGFyYXRvci51cGRhdGVUcmVlKCZjb21waWxlciwgJnJvb3QpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghU2VwYXJhdGVE
ZWNsYXJhdGlvbnMoJmNvbXBpbGVyLCAmcm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvU2VwYXJhdGVDb21wb3VuZFN0cnVjdERlY2xhcmF0aW9ucy5oIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Nl
cGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzEyZTgwZDhh
NTgxZTQ0ZTE5NmU4NjY0MzhmOWJjZTFkYTk0M2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1NlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMuaApAQCAtMCwwICsxLDI0
IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1F
VEFMRElSRUNUX1NFUEFSQVRFQ09NUE9VTkRTVFJVQ1RERUNMQVJBVElPTlNfSF8KKyNkZWZpbmUg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJBVEVDT01QT1VO
RFNUUlVDVERFQ0xBUkFUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmgiCisKK25hbWVzcGFjZSBz
aAoreworCisvLyBFeGFtcGxlOgorLy8gIHN0cnVjdCBGb28geyBpbnQgeDsgfSBmb287CisvLyBC
ZWNvbWVzOgorLy8gIHN0cnVjdCBGb28ge2ludCB4OyB9OyBGb28gZm9vOworQU5HTEVfTk9fRElT
Q0FSRCBib29sIFNlcGFyYXRlQ29tcG91bmRTdHJ1Y3REZWNsYXJhdGlvbnMoVENvbXBpbGVyICZj
b21waWxlciwgVEludGVybUJsb2NrICZyb290KTsKKworfSAgLy8gbmFtZXNwYWNlIHNoCisKKyNl
bmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfU0VQQVJB
VEVDT01QT1VORFNUUlVDVERFQ0xBUkFUSU9OU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1NraXBwaW5nVHJhdmVyc2VyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU2tpcHBpbmdUcmF2ZXJzZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mZjQ5ZGFkMjI1MmU0NjdhZDk3OTFhMTc1ODQwYjY4Y2UyMTYzYjcxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1NraXBwaW5nVHJhdmVyc2VyLmgKQEAgLTAsMCAr
MSw0NyBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9TS0lQUElOR1RSQVZFUlNFUl9IXworI2RlZmluZSBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TS0lQUElOR1RSQVZFUlNFUl9IXworCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKwor
bmFtZXNwYWNlIHNoCit7CisKKy8vIEEgVEludGVybVRyYXZlcnNlciB0aGF0IHNraXBzIHRyYXZl
cnNpbmcgY2hpbGRlbiBieSBkZWZhdWx0LgorY2xhc3MgU2tpcHBpbmdUcmF2ZXJzZXIgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgU2tpcHBpbmdUcmF2ZXJzZXIo
Ym9vbCBwcmVWaXNpdF8sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpblZpc2l0XywKKyAg
ICAgICAgICAgICAgICAgICAgICBib29sIHBvc3RWaXNpdF8sCisgICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSA9IG51bGxwdHIpCisgICAgICAgIDogVEludGVy
bVRyYXZlcnNlcihwcmVWaXNpdF8sIGluVmlzaXRfLCBwb3N0VmlzaXRfLCBzeW1ib2xUYWJsZSkK
KyAgICB7fQorCisgICAgYm9vbCB2aXNpdFN3aXp6bGUoVmlzaXQsIFRJbnRlcm1Td2l6emxlICop
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5h
cnkgKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50
ZXJtQmluYXJ5ICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdFRlcm5hcnkoVmlz
aXQsIFRJbnRlcm1UZXJuYXJ5ICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdElm
RWxzZShWaXNpdCwgVEludGVybUlmRWxzZSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
dmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKikgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICBib29sIHZpc2l0Q2FzZShWaXNpdCwgVEludGVybUNhc2UgKikgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBib29sIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uKFZpc2l0LCBUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgdmlz
aXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICopIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9v
bCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0LCBUSW50ZXJtRGVjbGFyYXRpb24gKikgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKikgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoICop
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0
aW9uKFZpc2l0LCBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gKikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKwor
I2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TS0lQ
UElOR1RSQVZFUlNFUl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzUzZGFjZjJkNjg4Y2Jl
NjAxNTg4MDA2YWUyOTdmYWM0MTMwNWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1N5bWJvbEVudi5jcHAKQEAgLTAsMCArMSw2ODEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8bGltaXRzPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9JbW11dGFibGVTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5oIgor
Cit1c2luZyBuYW1lc3BhY2Ugc2g7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NvbnN0
ZXhwciBBZGRyZXNzU3BhY2Uga0FkZHJlc3NTcGFjZXNbXSA9IHsKKyAgICBBZGRyZXNzU3BhY2U6
OkNvbnN0YW50LAorICAgIEFkZHJlc3NTcGFjZTo6RGV2aWNlLAorICAgIEFkZHJlc3NTcGFjZTo6
VGhyZWFkLAorfTsKKworY2hhciBjb25zdCAqc2g6OnRvU3RyaW5nKEFkZHJlc3NTcGFjZSBzcGFj
ZSkKK3sKKyAgICBzd2l0Y2ggKHNwYWNlKQorICAgIHsKKyAgICAgICAgY2FzZSBBZGRyZXNzU3Bh
Y2U6OkNvbnN0YW50OgorICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudCI7CisgICAgICAgIGNh
c2UgQWRkcmVzc1NwYWNlOjpEZXZpY2U6CisgICAgICAgICAgICByZXR1cm4gImRldmljZSI7Cisg
ICAgICAgIGNhc2UgQWRkcmVzc1NwYWNlOjpUaHJlYWQ6CisgICAgICAgICAgICByZXR1cm4gInRo
cmVhZCI7CisgICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit1c2luZyBOYW1l
VG9TdHJ1Y3QgPSBzdGQ6Om1hcDxOYW1lLCBjb25zdCBUU3RydWN0dXJlICo+OworCitjbGFzcyBT
dHJ1Y3RGaW5kZXIgOiBUSW50ZXJtUmVidWlsZAoreworICAgIE5hbWVUb1N0cnVjdCBuYW1lVG9T
dHJ1Y3Q7CisKKyAgICBTdHJ1Y3RGaW5kZXIoVENvbXBpbGVyICZjb21waWxlcikgOiBUSW50ZXJt
UmVidWlsZChjb21waWxlciwgdHJ1ZSwgZmFsc2UpIHt9CisKKyAgICBQcmVSZXN1bHQgdmlzaXRE
ZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBEZWNsYXJhdGlvbiBkZWNsICAgICA9IFZpZXdEZWNsYXJhdGlvbihub2RlKTsKKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOworICAg
ICAgICBjb25zdCBUVHlwZSAmdHlwZSAgICA9IHZhci5nZXRUeXBlKCk7CisKKyAgICAgICAgaWYg
KHZhci5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6RW1wdHkgJiYgdHlwZS5pc1N0cnVjdFNw
ZWNpZmllcigpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzID0g
dHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChzKTsKKyAgICAgICAgICAgIGNv
bnN0IE5hbWUgbmFtZSgqcyk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlIComeiA9IG5h
bWVUb1N0cnVjdFtuYW1lXTsKKyAgICAgICAgICAgIEFTU0VSVCgheik7CisgICAgICAgICAgICB6
ID0gczsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIFBy
ZVJlc3VsdCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0
aW9uICZub2RlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJp
dHM6Ok5laXRoZXJ9OworICAgIH0KKworICBwdWJsaWM6CisgICAgc3RhdGljIE5hbWVUb1N0cnVj
dCBGaW5kU3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLCBUSW50ZXJtQmxvY2sgJnJvb3QpCisg
ICAgeworICAgICAgICBTdHJ1Y3RGaW5kZXIgZmluZGVyKGNvbXBpbGVyKTsKKyAgICAgICAgaWYg
KCFmaW5kZXIucmVidWlsZFJvb3Qocm9vdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIExPR0lD
X0VSUk9SKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShmaW5kZXIubmFt
ZVRvU3RydWN0KTsKKyAgICB9Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitUZW1w
bGF0ZUFyZzo6VGVtcGxhdGVBcmcoYm9vbCB2YWx1ZSkgOiBtS2luZChLaW5kOjpCb29sKSwgbVZh
bHVlKHZhbHVlKSB7fQorCitUZW1wbGF0ZUFyZzo6VGVtcGxhdGVBcmcoaW50IHZhbHVlKSA6IG1L
aW5kKEtpbmQ6OkludCksIG1WYWx1ZSh2YWx1ZSkge30KKworVGVtcGxhdGVBcmc6OlRlbXBsYXRl
QXJnKHVuc2lnbmVkIHZhbHVlKSA6IG1LaW5kKEtpbmQ6OlVJbnQpLCBtVmFsdWUodmFsdWUpIHt9
CisKK1RlbXBsYXRlQXJnOjpUZW1wbGF0ZUFyZyhjb25zdCBUVHlwZSAmdmFsdWUpIDogbUtpbmQo
S2luZDo6VHlwZSksIG1WYWx1ZSh2YWx1ZSkge30KKworYm9vbCBUZW1wbGF0ZUFyZzo6b3BlcmF0
b3I9PShjb25zdCBUZW1wbGF0ZUFyZyAmb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1LaW5kICE9
IG90aGVyLm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHN3aXRjaCAobUtpbmQpCisgICAgeworICAgICAgICBjYXNlIEtpbmQ6OkJvb2w6CisgICAgICAg
ICAgICByZXR1cm4gbVZhbHVlLmIgPT0gb3RoZXIubVZhbHVlLmI7CisgICAgICAgIGNhc2UgS2lu
ZDo6SW50OgorICAgICAgICAgICAgcmV0dXJuIG1WYWx1ZS5pID09IG90aGVyLm1WYWx1ZS5pOwor
ICAgICAgICBjYXNlIEtpbmQ6OlVJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLnUgPT0g
b3RoZXIubVZhbHVlLnU7CisgICAgICAgIGNhc2UgS2luZDo6VHlwZToKKyAgICAgICAgICAgIHJl
dHVybiAqbVZhbHVlLnQgPT0gKm90aGVyLm1WYWx1ZS50OworICAgIH0KK30KKworYm9vbCBUZW1w
bGF0ZUFyZzo6b3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRlQXJnICZvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAobUtpbmQgPCBvdGhlci5tS2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChtS2luZCA+IG90aGVyLm1LaW5kKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAobUtpbmQpCisgICAgeworICAgICAgICBj
YXNlIEtpbmQ6OkJvb2w6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVlLmIgPCBvdGhlci5tVmFs
dWUuYjsKKyAgICAgICAgY2FzZSBLaW5kOjpJbnQ6CisgICAgICAgICAgICByZXR1cm4gbVZhbHVl
LmkgPCBvdGhlci5tVmFsdWUuaTsKKyAgICAgICAgY2FzZSBLaW5kOjpVSW50OgorICAgICAgICAg
ICAgcmV0dXJuIG1WYWx1ZS51IDwgb3RoZXIubVZhbHVlLnU7CisgICAgICAgIGNhc2UgS2luZDo6
VHlwZToKKyAgICAgICAgICAgIHJldHVybiAqbVZhbHVlLnQgPCAqb3RoZXIubVZhbHVlLnQ7Cisg
ICAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitib29sIFN5bWJvbEVudjo6VGVt
cGxhdGVOYW1lOjpvcGVyYXRvcj09KGNvbnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGJhc2VOYW1lID09IG90aGVyLmJhc2VOYW1lICYmIHRlbXBsYXRlQXJncyA9
PSBvdGhlci50ZW1wbGF0ZUFyZ3M7Cit9CisKK2Jvb2wgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6
Om9wZXJhdG9yPChjb25zdCBUZW1wbGF0ZU5hbWUgJm90aGVyKSBjb25zdAoreworICAgIGlmIChi
YXNlTmFtZSA8IG90aGVyLmJhc2VOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGlmIChvdGhlci5iYXNlTmFtZSA8IGJhc2VOYW1lKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdGVtcGxhdGVBcmdzIDwgb3RoZXIudGVt
cGxhdGVBcmdzOworfQorCitib29sIFN5bWJvbEVudjo6VGVtcGxhdGVOYW1lOjplbXB0eSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGJhc2VOYW1lLmVtcHR5KCkgJiYgdGVtcGxhdGVBcmdzLmVtcHR5
KCk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjpUZW1wbGF0ZU5hbWU6OmNsZWFyKCkKK3sKKyAgICBi
YXNlTmFtZSA9IE5hbWUoKTsKKyAgICB0ZW1wbGF0ZUFyZ3MuY2xlYXIoKTsKK30KKworTmFtZSBT
eW1ib2xFbnY6OlRlbXBsYXRlTmFtZTo6ZnVsbE5hbWUoc3RkOjpzdHJpbmcgJmJ1ZmZlcikgY29u
c3QKK3sKKyAgICBBU1NFUlQoYnVmZmVyLmVtcHR5KCkpOworCisgICAgaWYgKHRlbXBsYXRlQXJn
cy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2VOYW1lOworICAgIH0KKworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG4gPSBzdGQ6Om1heCh7CisgICAgICAgIHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjpkaWdpdHMxMCwgIC8vCisgICAgICAgIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6ZGlnaXRzMTAsICAgICAgIC8vCisgICAgICAgIDUsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heF9sZW5ndGgoInRydWUiLCAiZmFsc2Ui
KQorICAgIH0pOworCisgICAgYnVmZmVyLnJlc2VydmUoYmFzZU5hbWUucmF3TmFtZSgpLmxlbmd0
aCgpICsgKG4gKyAyKSAqIHRlbXBsYXRlQXJncy5zaXplKCkgKyAxKTsKKyAgICBidWZmZXIgKz0g
YmFzZU5hbWUucmF3TmFtZSgpLmRhdGEoKTsKKworICAgIGlmICghdGVtcGxhdGVBcmdzLmVtcHR5
KCkpCisgICAgeworICAgICAgICBidWZmZXIgKz0gIjwiOworCisgICAgICAgIGJvb2wgZmlyc3Qg
PSB0cnVlOworICAgICAgICBjaGFyIGFyZ0J1ZmZlcltuICsgMV07CisgICAgICAgIGZvciAoY29u
c3QgVGVtcGxhdGVBcmcgJmFyZyA6IHRlbXBsYXRlQXJncykKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYnVmZmVyICs9ICIsICI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNvbnN0IFRlbXBsYXRlQXJnOjpWYWx1ZSB2YWx1ZSA9IGFyZy52YWx1ZSgpOworICAgICAgICAg
ICAgY29uc3QgVGVtcGxhdGVBcmc6OktpbmQga2luZCAgID0gYXJnLmtpbmQoKTsKKyAgICAgICAg
ICAgIHN3aXRjaCAoa2luZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRl
bXBsYXRlQXJnOjpLaW5kOjpCb29sOgorICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuYikK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9
ICJ0cnVlIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciAr
PSAiZmFsc2UiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6SW50OgorICAg
ICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdmFsdWUuaSk7CisgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBhcmdCdWZmZXI7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBUZW1wbGF0ZUFyZzo6S2luZDo6VUludDoK
KyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihhcmdCdWZmZXIsICIldSIsIHZhbHVlLnUpOwor
ICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYXJnQnVmZmVyOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVGVtcGxhdGVBcmc6OktpbmQ6OlR5
cGU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSA9ICp2YWx1ZS50OworICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3QgVFN0cnVjdHVy
ZSAqcyA9IHR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBzLT5uYW1lKCkuZGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEhhc1NjYWxhckJhc2ljVHlw
ZSh0eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCF0eXBlLmlzQXJyYXkoKSk7ICAvLyBUT0RPCisgICAgICAgICAgICAgICAgICAgICAg
ICBidWZmZXIgKz0gdHlwZS5nZXRCYXNpY1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGFyZ0J1ZmZlciwgIiVpIiwgdHlwZS5nZXRO
b21pbmFsU2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYXJn
QnVmZmVyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBl
LmdldENvbHMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1
ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gIngiOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYXJnQnVmZmVyLCAiJWkiLCB0eXBlLmdldFJv
d3MoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGFyZ0J1ZmZlcjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGJ1ZmZlciArPSAiPiI7CisgICAgfQorCisgICAgY29uc3QgSW1tdXRh
YmxlU3RyaW5nIG5hbWUoYnVmZmVyKTsKKyAgICBidWZmZXIuY2xlYXIoKTsKKworICAgIHJldHVy
biBOYW1lKG5hbWUsIGJhc2VOYW1lLnN5bWJvbFR5cGUoKSk7Cit9CisKK3ZvaWQgU3ltYm9sRW52
OjpUZW1wbGF0ZU5hbWU6OmFzc2lnbihjb25zdCBOYW1lICZuYW1lLCBzaXplX3QgYXJnQ291bnQs
IGNvbnN0IFRlbXBsYXRlQXJnICphcmdzKQoreworICAgIGJhc2VOYW1lID0gbmFtZTsKKyAgICB0
ZW1wbGF0ZUFyZ3MuY2xlYXIoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ0NvdW50
OyArK2kpCisgICAgeworICAgICAgICB0ZW1wbGF0ZUFyZ3MucHVzaF9iYWNrKGFyZ3NbaV0pOwor
ICAgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworU3ltYm9sRW52OjpTeW1ib2xF
bnYoVENvbXBpbGVyICZjb21waWxlciwgVEludGVybUJsb2NrICZyb290KQorICAgIDogbVN5bWJv
bFRhYmxlKGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorICAgICAgbU5hbWVUb1N0cnVjdChT
dHJ1Y3RGaW5kZXI6OkZpbmRTdHJ1Y3RzKGNvbXBpbGVyLCByb290KSkKK3t9CisKK2NvbnN0IFRT
dHJ1Y3R1cmUgJlN5bWJvbEVudjo6cmVtYXAoY29uc3QgVFN0cnVjdHVyZSAmcykgY29uc3QKK3sK
KyAgICBjb25zdCBOYW1lIG5hbWUocyk7CisgICAgYXV0byBpdGVyID0gbU5hbWVUb1N0cnVjdC5m
aW5kKG5hbWUpOworICAgIGlmIChpdGVyID09IG1OYW1lVG9TdHJ1Y3QuZW5kKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gczsKKyAgICB9CisgICAgY29uc3QgVFN0cnVjdHVyZSAmeiA9ICppdGVy
LT5zZWNvbmQ7CisgICAgcmV0dXJuIHo7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgKlN5bWJvbEVu
djo6cmVtYXAoY29uc3QgVFN0cnVjdHVyZSAqcykgY29uc3QKK3sKKyAgICBpZiAocykKKyAgICB7
CisgICAgICAgIHJldHVybiAmcmVtYXAoKnMpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworY29uc3QgVEZ1bmN0aW9uICZTeW1ib2xFbnY6OmdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KCkKK3sKKyAgICBBU1NFUlQoIW1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKworICAgIFNp
Z1RvRnVuYyAmc2lnVG9GdW5jID0gbU92ZXJsb2Fkc1ttUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZm
ZXJdOworICAgIFRGdW5jdGlvbiAqJmZ1bmMgICAgID0gc2lnVG9GdW5jW21SZXVzYWJsZVNpZ0J1
ZmZlcl07CisKKyAgICBpZiAoIWZ1bmMpCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmcmV0
dXJuVHlwZSA9IG1SZXVzYWJsZVNpZ0J1ZmZlci5iYWNrKCk7CisgICAgICAgIG1SZXVzYWJsZVNp
Z0J1ZmZlci5wb3BfYmFjaygpOworCisgICAgICAgIGNvbnN0IE5hbWUgbmFtZSA9IG1SZXVzYWJs
ZVRlbXBsYXRlTmFtZUJ1ZmZlci5mdWxsTmFtZShtUmV1c2FibGVTdHJpbmdCdWZmZXIpOworCisg
ICAgICAgIGZ1bmMgPSBuZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgp
LCBuYW1lLnN5bWJvbFR5cGUoKSwgJnJldHVyblR5cGUsIGZhbHNlKTsKKyAgICAgICAgZm9yIChj
b25zdCBUVHlwZSAmcGFyYW1UeXBlIDogbVJldXNhYmxlU2lnQnVmZmVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBmdW5jLT5hZGRQYXJhbWV0ZXIoCisgICAgICAgICAgICAgICAgbmV3IFRWYXJp
YWJsZSgmbVN5bWJvbFRhYmxlLCBrRW1wdHlJbW11dGFibGVTdHJpbmcsICZwYXJhbVR5cGUsIFN5
bWJvbFR5cGU6OkVtcHR5KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtUmV1c2FibGVTaWdC
dWZmZXIuY2xlYXIoKTsKKyAgICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuY2xlYXIoKTsK
KworICAgIHJldHVybiAqZnVuYzsKK30KKworY29uc3QgVEZ1bmN0aW9uICZTeW1ib2xFbnY6Omdl
dEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZyZXR1cm5UeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcmFt
Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUVHlwZSAqKnBhcmFtVHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbXBsYXRlQXJnICp0ZW1w
bGF0ZUFyZ3MpCit7CisgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1ZmZlci5lbXB0eSgpKTsKKyAg
ICBBU1NFUlQobVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmVtcHR5KCkpOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCisgICAgeworICAgICAgICBtUmV1
c2FibGVTaWdCdWZmZXIucHVzaF9iYWNrKCpwYXJhbVR5cGVzW2ldKTsKKyAgICB9CisgICAgbVJl
dXNhYmxlU2lnQnVmZmVyLnB1c2hfYmFjayhyZXR1cm5UeXBlKTsKKyAgICBtUmV1c2FibGVUZW1w
bGF0ZU5hbWVCdWZmZXIuYXNzaWduKG5hbWUsIHRlbXBsYXRlQXJnQ291bnQsIHRlbXBsYXRlQXJn
cyk7CisgICAgcmV0dXJuIGdldEZ1bmN0aW9uT3ZlcmxvYWRJbXBsKCk7Cit9CisKK1RJbnRlcm1B
Z2dyZWdhdGUgJlN5bWJvbEVudjo6Y2FsbEZ1bmN0aW9uT3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVFR5cGUgJnJldHVyblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291bnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRlbXBsYXRlQXJnICp0ZW1wbGF0ZUFyZ3MpCit7CisgICAgQVNTRVJUKG1SZXVzYWJsZVNpZ0J1
ZmZlci5lbXB0eSgpKTsKKyAgICBBU1NFUlQobVJldXNhYmxlVGVtcGxhdGVOYW1lQnVmZmVyLmVt
cHR5KCkpOworCisgICAgZm9yIChUSW50ZXJtTm9kZSAqYXJnIDogYXJncykKKyAgICB7CisgICAg
ICAgIFRJbnRlcm1UeXBlZCAqdGFyZyA9IGFyZy0+Z2V0QXNUeXBlZCgpOworICAgICAgICBBU1NF
UlQodGFyZyk7CisgICAgICAgIG1SZXVzYWJsZVNpZ0J1ZmZlci5wdXNoX2JhY2sodGFyZy0+Z2V0
VHlwZSgpKTsKKyAgICB9CisgICAgbVJldXNhYmxlU2lnQnVmZmVyLnB1c2hfYmFjayhyZXR1cm5U
eXBlKTsKKyAgICBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXIuYXNzaWduKG5hbWUsIHRlbXBs
YXRlQXJnQ291bnQsIHRlbXBsYXRlQXJncyk7CisgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0g
Z2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKyAgICByZXR1cm4gKlRJbnRlcm1BZ2dyZWdhdGU6
OkNyZWF0ZVJhd0Z1bmN0aW9uQ2FsbChmdW5jLCAmYXJncyk7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1
cmUgJlN5bWJvbEVudjo6bmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3Qg
JmZpZWxkcykKK3sKKyAgICBBU1NFUlQobmFtZS5zeW1ib2xUeXBlKCkgPT0gU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCk7CisKKyAgICBUU3RydWN0dXJlIComcyA9IG1BbmdsZVN0cnVjdHNbbmFt
ZS5yYXdOYW1lKCldOworICAgIEFTU0VSVCghcyk7CisgICAgcyA9IG5ldyBUU3RydWN0dXJlKCZt
U3ltYm9sVGFibGUsIG5hbWUucmF3TmFtZSgpLCAmZmllbGRzLCBuYW1lLnN5bWJvbFR5cGUoKSk7
CisgICAgcmV0dXJuICpzOworfQorCitjb25zdCBUU3RydWN0dXJlICZTeW1ib2xFbnY6OmdldFRl
eHR1cmVFbnYoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVy
KHNhbXBsZXJUeXBlKSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqJmVudiA9IG1UZXh0dXJlRW52
c1tzYW1wbGVyVHlwZV07CisgICAgaWYgKGVudiA9PSBudWxscHRyKQorICAgIHsKKyAgICAgICAg
YXV0byAqdGV4dHVyZVR5cGUgPSBuZXcgVFR5cGUoc2FtcGxlclR5cGUpOworICAgICAgICBhdXRv
ICp0ZXh0dXJlICAgICA9IG5ldyBURmllbGQodGV4dHVyZVR5cGUsIEltbXV0YWJsZVN0cmluZygi
dGV4dHVyZSIpLCBrTm9Tb3VyY2VMb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgbWFya0FzUG9pbnRlcigqdGV4
dHVyZSwgQWRkcmVzc1NwYWNlOjpUaHJlYWQpOworCisgICAgICAgIGF1dG8gKnNhbXBsZXIgPQor
ICAgICAgICAgICAgbmV3IFRGaWVsZChuZXcgVFR5cGUoJmdldFNhbXBsZXJTdHJ1Y3QoKSwgZmFs
c2UpLCBJbW11dGFibGVTdHJpbmcoInNhbXBsZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
a05vU291cmNlTG9jLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgIG1hcmtBc1Bv
aW50ZXIoKnNhbXBsZXIsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKKworICAgICAgICBzdGQ6OnN0
cmluZyBlbnZOYW1lOworICAgICAgICBlbnZOYW1lICs9ICJUZXh0dXJlRW52PCI7CisgICAgICAg
IGVudk5hbWUgKz0gR2V0VGV4dHVyZVR5cGVOYW1lKHNhbXBsZXJUeXBlKS5yYXdOYW1lKCkuZGF0
YSgpOworICAgICAgICBlbnZOYW1lICs9ICI+IjsKKworICAgICAgICBlbnYgPSAmbmV3U3RydWN0
dXJlKE5hbWUoZW52TmFtZSwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKm5ldyBURmllbGRMaXN0e3RleHR1cmUsIHNhbXBsZXJ9KTsKKyAg
ICB9CisgICAgcmV0dXJuICplbnY7Cit9CisKK2NvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6
Z2V0U2FtcGxlclN0cnVjdCgpCit7CisgICAgaWYgKCFtU2FtcGxlcikKKyAgICB7CisgICAgICAg
IG1TYW1wbGVyID0gbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5n
KCJtZXRhbDo6c2FtcGxlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
dyBURmllbGRMaXN0KCksIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICB9CisgICAgcmV0
dXJuICptU2FtcGxlcjsKK30KKwordm9pZCBTeW1ib2xFbnY6Om1hcmtTcGFjZShWYXJGaWVsZCB4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzU3BhY2Ugc3BhY2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1Nw
YWNlPiAmbWFwKQoreworICAgIC8vIEl0IGlzIGluIHByaW5jaXBsZSBwZXJtaXNzaWJsZSB0byBo
YXZlIHJlZmVyZW5jZXMgdG8gcG9pbnRlcnMgb3IgbXVsdGlwbGUgcG9pbnRlcnMsIGJ1dCB0aGlz
CisgICAgLy8gaXMgbm90IHJlcXVpcmVkIGZvciBub3cgYW5kIHdvdWxkIHJlcXVpcmUgY29kZSBj
aGFuZ2VzIHRvIGdldCByaWdodC4KKyAgICBBU1NFUlQoIWlzUG9pbnRlcih4KSk7CisgICAgQVNT
RVJUKCFpc1JlZmVyZW5jZSh4KSk7CisKKyAgICBtYXBbeF0gPSBzcGFjZTsKK30KKworY29uc3Qg
QWRkcmVzc1NwYWNlICpTeW1ib2xFbnY6OmlzU3BhY2UoVmFyRmllbGQgeCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJG
aWVsZCwgQWRkcmVzc1NwYWNlPiAmbWFwKSBjb25zdAoreworICAgIGNvbnN0IGF1dG8gaXRlciA9
IG1hcC5maW5kKHgpOworICAgIGlmIChpdGVyID09IG1hcC5lbmQoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBjb25zdCBBZGRyZXNzU3BhY2Ugc3BhY2UgPSBp
dGVyLT5zZWNvbmQ7CisgICAgY29uc3QgYXV0byBpbmRleCAgICAgICAgID0gc3RhdGljX2Nhc3Q8
c3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxBZGRyZXNzU3BhY2U+PihzcGFjZSk7CisgICAgcmV0dXJu
ICZrQWRkcmVzc1NwYWNlc1tpbmRleF07Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQb2lu
dGVyKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sKKyAgICByZXR1cm4gbWFya1Nw
YWNlKHgsIHNwYWNlLCBtUG9pbnRlcnMpOworfQorCit2b2lkIFN5bWJvbEVudjo6bWFya0FzUmVm
ZXJlbmNlKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSkKK3sKKyAgICByZXR1cm4gbWFy
a1NwYWNlKHgsIHNwYWNlLCBtUmVmZXJlbmNlcyk7Cit9CisKK2NvbnN0IEFkZHJlc3NTcGFjZSAq
U3ltYm9sRW52Ojppc1BvaW50ZXIoVmFyRmllbGQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNT
cGFjZSh4LCBtUG9pbnRlcnMpOworfQorCitjb25zdCBBZGRyZXNzU3BhY2UgKlN5bWJvbEVudjo6
aXNSZWZlcmVuY2UoVmFyRmllbGQgeCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNTcGFjZSh4LCBt
UmVmZXJlbmNlcyk7Cit9CisKK3ZvaWQgU3ltYm9sRW52OjptYXJrQXNQYWNrZWQoY29uc3QgVEZp
ZWxkICZmaWVsZCkKK3sKKyAgICBtUGFja2VkRmllbGRzLmluc2VydCgmZmllbGQpOworfQorCiti
b29sIFN5bWJvbEVudjo6aXNQYWNrZWQoY29uc3QgVEZpZWxkICZmaWVsZCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVBhY2tlZEZpZWxkcy5maW5kKCZmaWVsZCkgIT0gbVBhY2tlZEZpZWxkcy5lbmQo
KTsKK30KKworc3RhdGljIFRCYXNpY1R5cGUgR2V0VGV4dHVyZUJhc2ljVHlwZShUQmFzaWNUeXBl
IGJhc2ljVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKGJhc2ljVHlwZSkpOworCisgICAg
c3dpdGNoIChiYXNpY1R5cGUpCisgICAgeworICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Cisg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4
dGVybmFsT0VTOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJEWTJZRVhUOgorICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVM6
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJETVNBcnJheToKKyAgICAgICAgY2FzZSBFYnRTYW1w
bGVyVmlkZW9XRUJHTDoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJy
YXlTaGFkb3c6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjFEOgorICAgICAgICBjYXNlIEVidFNh
bXBsZXIxREFycmF5OgorICAgICAgICBjYXNlIEVidFNhbXBsZXIxREFycmF5U2hhZG93OgorICAg
ICAgICBjYXNlIEVidFNhbXBsZXJCdWZmZXI6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVB
cnJheToKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorICAgICAgICBj
YXNlIEVidFNhbXBsZXIxRFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0U2hh
ZG93OgorICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEZsb2F0OworCisgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAg
ICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6
CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorICAgICAgICBjYXNlIEVidElTYW1wbGVy
MkRNU0FycmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIxREFycmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRSZWN0OgorICAgICAg
ICBjYXNlIEVidElTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFy
cmF5OgorICAgICAgICAgICAgcmV0dXJuIFRCYXNpY1R5cGU6OkVidEludDsKKworICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5Ogor
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNUzoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
TVNBcnJheToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjFEOgorICAgICAgICBjYXNlIEVidFVT
YW1wbGVyMURBcnJheToKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEUmVjdDoKKyAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlckJ1ZmZlcjoKKyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmVBcnJh
eToKKyAgICAgICAgICAgIHJldHVybiBUQmFzaWNUeXBlOjpFYnRVSW50OworCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBMT0dJQ19FUlJPUigpOworICAgICAgICAgICAgcmV0dXJuIFRC
YXNpY1R5cGU6OkVidFZvaWQ7CisgICAgfQorfQorCitOYW1lIHNoOjpHZXRUZXh0dXJlVHlwZU5h
bWUoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKK3sKKyAgICBBU1NFUlQoSXNTYW1wbGVyKHNhbXBs
ZXJUeXBlKSk7CisKKyAgICBjb25zdCBUQmFzaWNUeXBlIHRleHR1cmVUeXBlID0gR2V0VGV4dHVy
ZUJhc2ljVHlwZShzYW1wbGVyVHlwZSk7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKworI2RlZmlu
ZSBIQU5ETEVfVEVYVFVSRV9OQU1FKGJhc2VOYW1lKSAgICAgICAgICAgICAgICBcCisgICAgZG8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBz
d2l0Y2ggKHRleHR1cmVUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGNhc2UgVEJhc2ljVHlwZTo6RWJ0RmxvYXQ6ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgIG5hbWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjxmbG9hdD4iOyBcCisgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNh
c2UgVEJhc2ljVHlwZTo6RWJ0SW50OiAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
IG5hbWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjxpbnQ+IjsgICBcCisgICAgICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2Ug
VEJhc2ljVHlwZTo6RWJ0VUludDogICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIG5h
bWUgPSAibWV0YWw6OiIgYmFzZU5hbWUgIjx1aW50PiI7ICBcCisgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRlZmF1bHQ6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIExPR0lD
X0VSUk9SKCk7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbmFtZSA9
IG51bGxwdHI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAg
ICBzd2l0Y2ggKHNhbXBsZXJUeXBlKQorICAgIHsKKyAgICAgICAgLy8gMWQKKyAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMUQ6ICAvLyBEZXNrdG9wIEdMU0wgc2FtcGxlciB0eXBlOgorICAgICAgICBj
YXNlIEVidElTYW1wbGVyMUQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIxRDoKKyAgICAgICAg
ICAgIEhBTkRMRV9URVhUVVJFX05BTUUoInRleHR1cmUxZCIpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgLy8gMWQgYXJyYXkKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMURBcnJheToK
KyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjFEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXIxREFycmF5OgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZTFkX2Fy
cmF5Iik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBCdWZmZXIgdGV4dHVyZXMK
KyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQnVmZmVyOgorICAgICAgICBjYXNlIEVidElTYW1wbGVy
QnVmZmVyOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyQnVmZmVyOgorICAgICAgICAgICAgSEFO
RExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZV9idWZmZXIiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIDJkIHRleHR1cmVzCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAg
ICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRS
ZWN0OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRSZWN0OgorICAgICAgICAgICAgSEFORExF
X1RFWFRVUkVfTkFNRSgidGV4dHVyZTJkIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAvLyAzZCB0ZXh0dXJlcworICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjNEOgorICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAgICAg
ICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlM2QiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIC8vIEN1YmUgdGV4dHVyZXMKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToK
KyAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJD
dWJlOgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4dHVyZWN1YmUiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIDJkIGFycmF5IHRleHR1cmVzCisgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5
OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICAgIEhBTkRMRV9U
RVhUVVJFX05BTUUoInRleHR1cmUyZF9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNUzoKKyAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJETVM6
CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TOgorICAgICAgICAgICAgSEFORExFX1RFWFRV
UkVfTkFNRSgidGV4dHVyZTJkX21zIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TQXJy
YXk6CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRE1TQXJyYXk6CisgICAgICAgICAgICBIQU5E
TEVfVEVYVFVSRV9OQU1FKCJ0ZXh0dXJlMmRfbXNfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIC8vIGN1YmUgYXJyYXkKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFy
cmF5OgorICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgidGV4
dHVyZWN1YmVfYXJyYXkiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIFNoYWRv
dworICAgICAgICBjYXNlIEVidFNhbXBsZXIxRFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1w
bGVyMURBcnJheVNoYWRvdzoKKyAgICAgICAgICAgIFRPRE8oKTsKKyAgICAgICAgICAgIEhBTkRM
RV9URVhUVVJFX05BTUUoIlRPRE8iKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEUmVjdFNoYWRvdzoKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFk
b3c6CisgICAgICAgICAgICBIQU5ETEVfVEVYVFVSRV9OQU1FKCJkZXB0aDJkIik7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAg
ICAgICAgSEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlIik7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGgyZF9hcnJheSIpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5U2hhZG93OgorICAgICAgICAgICAg
SEFORExFX1RFWFRVUkVfTkFNRSgiZGVwdGhjdWJlX2FycmF5Iik7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAvLyBFeHRlbnRpb25zCisgICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVy
bmFsT0VTOiAgICAgICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgZXhp
c3RzOgorICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbDJEWTJZRVhUOiAgLy8gT25seSB2
YWxpZCBpZiBHTF9FWFRfWVVWX3RhcmdldCBleGlzdHM6CisgICAgICAgIGNhc2UgRWJ0U2FtcGxl
clZpZGVvV0VCR0w6CisgICAgICAgICAgICBUT0RPKCk7CisgICAgICAgICAgICBIQU5ETEVfVEVY
VFVSRV9OQU1FKCJUT0RPIik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsKKyAgICAgICAgICAgIG5hbWUgPSBudWxscHRy
OworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisjdW5kZWYgSEFORExFX1RFWFRVUkVfTkFN
RQorCisgICAgcmV0dXJuIE5hbWUobmFtZSwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJv
bEVudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRjOTY0NWUwNTE5ODg2N2YyNWRjMDMwYzAyZWVjMDc1NjVmYmQy
ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmgKQEAgLTAsMCAr
MSwyMTggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkFOU0xB
VE9STUVUQUxESVJFQ1RfU1lNQk9MRU5WX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
VFJBTlNMQVRPUk1FVEFMRElSRUNUX1NZTUJPTEVOVl9IXworCisjaW5jbHVkZSA8dW5vcmRlcmVk
X3NldD4KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgorCituYW1lc3Bh
Y2Ugc2gKK3sKKworZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UKK3sKKyAgICBDb25zdGFudCwKKyAg
ICBEZXZpY2UsCisgICAgVGhyZWFkLAorfTsKKworY2hhciBjb25zdCAqdG9TdHJpbmcoQWRkcmVz
c1NwYWNlIHNwYWNlKTsKKworY2xhc3MgVmFyRmllbGQKK3sKKyAgcHVibGljOgorICAgIFZhckZp
ZWxkKGNvbnN0IFRWYXJpYWJsZSAmdmFyKSA6IG1WYXJpYWJsZSgmdmFyKSB7fQorICAgIFZhckZp
ZWxkKGNvbnN0IFRGaWVsZCAmZmllbGQpIDogbUZpZWxkKCZmaWVsZCkge30KKworICAgIEFOR0xF
X0lOTElORSBjb25zdCBUVmFyaWFibGUgKnZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbVZhcmlh
YmxlOyB9CisKKyAgICBBTkdMRV9JTkxJTkUgY29uc3QgVEZpZWxkICpmaWVsZCgpIGNvbnN0IHsg
cmV0dXJuIG1GaWVsZDsgfQorCisgICAgQU5HTEVfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBWYXJGaWVsZCAmb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbVZhcmlhYmxl
ID09IG90aGVyLm1WYXJpYWJsZSAmJiBtRmllbGQgPT0gb3RoZXIubUZpZWxkOworICAgIH0KKwor
ICBwcml2YXRlOgorICAgIGNvbnN0IFRWYXJpYWJsZSAqbVZhcmlhYmxlID0gbnVsbHB0cjsKKyAg
ICBjb25zdCBURmllbGQgKm1GaWVsZCAgICAgICA9IG51bGxwdHI7Cit9OworCit9ICAvLyBuYW1l
c3BhY2Ugc2gKKworbmFtZXNwYWNlIHN0ZAoreworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IGhhc2g8
c2g6OlZhckZpZWxkPgoreworICAgIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IHNoOjpWYXJGaWVs
ZCAmeCkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IHNoOjpUVmFyaWFibGUgKnZhciA9IHgu
dmFyaWFibGUoKTsKKyAgICAgICAgaWYgKHZhcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6aGFzaDxjb25zdCBzaDo6VFZhcmlhYmxlICo+KCkodmFyKTsKKyAgICAgICAgfQor
ICAgICAgICBjb25zdCBzaDo6VEZpZWxkICpmaWVsZCA9IHguZmllbGQoKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6aGFzaDxjb25zdCBzaDo6VEZpZWxkICo+KCkoZmllbGQpOworICAgIH0KK307CisK
K30gIC8vIG5hbWVzcGFjZSBzdGQKKworbmFtZXNwYWNlIHNoCit7CisKK2NsYXNzIFRlbXBsYXRl
QXJnCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEtpbmQKKyAgICB7CisgICAgICAgIEJv
b2wsCisgICAgICAgIEludCwKKyAgICAgICAgVUludCwKKyAgICAgICAgVHlwZSwKKyAgICB9Owor
CisgICAgdW5pb24gVmFsdWUKKyAgICB7CisgICAgICAgIFZhbHVlKGJvb2wgdmFsdWUpIDogYih2
YWx1ZSkge30KKyAgICAgICAgVmFsdWUoaW50IHZhbHVlKSA6IGkodmFsdWUpIHt9CisgICAgICAg
IFZhbHVlKHVuc2lnbmVkIHZhbHVlKSA6IHUodmFsdWUpIHt9CisgICAgICAgIFZhbHVlKGNvbnN0
IFRUeXBlICZ2YWx1ZSkgOiB0KCZ2YWx1ZSkge30KKworICAgICAgICBib29sIGI7CisgICAgICAg
IGludCBpOworICAgICAgICB1bnNpZ25lZCB1OworICAgICAgICBjb25zdCBUVHlwZSAqdDsKKyAg
ICB9OworCisgICAgVGVtcGxhdGVBcmcoYm9vbCB2YWx1ZSk7CisgICAgVGVtcGxhdGVBcmcoaW50
IHZhbHVlKTsKKyAgICBUZW1wbGF0ZUFyZyh1bnNpZ25lZCB2YWx1ZSk7CisgICAgVGVtcGxhdGVB
cmcoY29uc3QgVFR5cGUgJnZhbHVlKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZW1w
bGF0ZUFyZyAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRlbXBsYXRl
QXJnICZvdGhlcikgY29uc3Q7CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtS2lu
ZDsgfQorICAgIFZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9CisKKyAgcHVi
bGljOgorICAgIEtpbmQgbUtpbmQ7CisgICAgVmFsdWUgbVZhbHVlOworfTsKKworLy8gQW4gZW52
aXJvbm1lbnQgZm9yIGNyZWF0aW5nIGFuZCB1bmlxdWVseSBzaGFyaW5nIFRTeW1ib2wgb2JqZWN0
cy4KK2NsYXNzIFN5bWJvbEVudgoreworICAgIGNsYXNzIFRlbXBsYXRlTmFtZQorICAgIHsKKyAg
ICAgICAgTmFtZSBiYXNlTmFtZTsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VGVtcGxhdGVBcmc+IHRl
bXBsYXRlQXJnczsKKworICAgICAgcHVibGljOgorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgVGVtcGxhdGVOYW1lICZvdGhlcikgY29uc3Q7CisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IFRlbXBsYXRlTmFtZSAmb3RoZXIpIGNvbnN0OworCisgICAgICAgIGJvb2wgZW1wdHkoKSBj
b25zdDsKKyAgICAgICAgdm9pZCBjbGVhcigpOworCisgICAgICAgIE5hbWUgZnVsbE5hbWUoc3Rk
OjpzdHJpbmcgJmJ1ZmZlcikgY29uc3Q7CisKKyAgICAgICAgdm9pZCBhc3NpZ24oY29uc3QgTmFt
ZSAmbmFtZSwgc2l6ZV90IGFyZ0NvdW50LCBjb25zdCBUZW1wbGF0ZUFyZyAqYXJncyk7CisgICAg
fTsKKworICAgIHVzaW5nIFR5cGVSZWYgICAgICAgID0gQ1JlZjxUVHlwZT47CisgICAgdXNpbmcg
U2lnICAgICAgICAgICAgPSBzdGQ6OnZlY3RvcjxUeXBlUmVmPjsgIC8vIFBhcmFtMCwgUGFyYW0x
LCAuLi4gUGFyYW1OLCBSZXR1cm4KKyAgICB1c2luZyBTaWdUb0Z1bmMgICAgICA9IHN0ZDo6bWFw
PFNpZywgVEZ1bmN0aW9uICo+OworICAgIHVzaW5nIE92ZXJsb2FkcyAgICAgID0gc3RkOjptYXA8
VGVtcGxhdGVOYW1lLCBTaWdUb0Z1bmM+OworICAgIHVzaW5nIEFuZ2xlU3RydWN0cyAgID0gc3Rk
OjptYXA8SW1tdXRhYmxlU3RyaW5nLCBUU3RydWN0dXJlICo+OworICAgIHVzaW5nIFRleHR1cmVT
dHJ1Y3RzID0gc3RkOjptYXA8VEJhc2ljVHlwZSwgVFN0cnVjdHVyZSAqPjsKKworICBwdWJsaWM6
CisgICAgU3ltYm9sRW52KFRDb21waWxlciAmY29tcGlsZXIsIFRJbnRlcm1CbG9jayAmcm9vdCk7
CisKKyAgICBUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlKCkgeyByZXR1cm4gbVN5bWJvbFRhYmxl
OyB9CisKKyAgICAvLyBUaGVyZSBleGlzdCBBbmdsZSByZXdyaXRlcyB0aGF0IGNhbiBsZWFkIHRv
IGluY29oZXJlbnQgc3RydWN0cworICAgIC8vCisgICAgLy8gRXhhbXBsZQorICAgIC8vICAgIHN0
cnVjdCBBIHsgLi4uIH0KKyAgICAvLyAgICBzdHJ1Y3QgQiB7IEEnIGE7IH0gLy8gQScgaGFzIHNh
bWUgbmFtZSBhcyBBIGJ1dCBpcyBub3QgaWRlbnRpY2FsLgorICAgIC8vIGJlY29tZXMKKyAgICAv
LyAgICBzdHJ1Y3QgQSB7IC4uLiB9CisgICAgLy8gICAgc3RydWN0IEIgeyBBIGE7IH0KKyAgICAv
LworICAgIC8vIFRoaXMgbm90YWJseSBoYXBwZW5zIHdoZW4gQSBjb250YWlucyBhIHNhbXBsZXIg
aW4gdGhlIG9yaWdpbmFsIEdMU0wgY29kZSBidXQgaXMgcmV3cml0dGVuIHRvCisgICAgLy8gbm90
IGhhdmUgYSBzYW1wbGVyLCB5ZXQgdGhlIEEnIHN0cnVjdCBmaWVsZCBzdGlsbCBjb250YWlucyB0
aGUgc2FtcGxlciBmaWVsZC4KKyAgICBjb25zdCBUU3RydWN0dXJlICZyZW1hcChjb25zdCBUU3Ry
dWN0dXJlICZzKSBjb25zdDsKKworICAgIC8vIExpa2UgYFRTdHJ1Y3R1cmUgJnJlbWFwKGNvbnN0
IFRTdHJ1Y3R1cmUgJnMpYCBidXQgYWRkaXRpb25hbGx5IG1hcHMgbnVsbCB0byBudWxsLgorICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnJlbWFwKGNvbnN0IFRTdHJ1Y3R1cmUgKnMpIGNvbnN0OworCisg
ICAgY29uc3QgVEZ1bmN0aW9uICZnZXRGdW5jdGlvbk92ZXJsb2FkKGNvbnN0IE5hbWUgJm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZy
ZXR1cm5UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgcGFyYW1Db3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFR5cGUgKipwYXJhbVR5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgdGVtcGxhdGVBcmdDb3VudCAgICAgICAgID0gMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVtcGxhdGVBcmcgKnRlbXBs
YXRlQXJncyA9IG51bGxwdHIpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSAmY2FsbEZ1bmN0aW9u
T3ZlcmxvYWQoY29uc3QgTmFtZSAmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmcmV0dXJuVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHRlbXBsYXRlQXJnQ291
bnQgICAgICAgICA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGVtcGxhdGVBcmcgKnRlbXBsYXRlQXJncyA9IG51bGxwdHIpOworCisgICAgY29u
c3QgVFN0cnVjdHVyZSAmbmV3U3RydWN0dXJlKGNvbnN0IE5hbWUgJm5hbWUsIFRGaWVsZExpc3Qg
JmZpZWxkcyk7CisKKyAgICBjb25zdCBUU3RydWN0dXJlICZnZXRUZXh0dXJlRW52KFRCYXNpY1R5
cGUgc2FtcGxlclR5cGUpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJmdldFNhbXBsZXJTdHJ1Y3Qo
KTsKKworICAgIHZvaWQgbWFya0FzUG9pbnRlcihWYXJGaWVsZCB4LCBBZGRyZXNzU3BhY2Ugc3Bh
Y2UpOworICAgIGNvbnN0IEFkZHJlc3NTcGFjZSAqaXNQb2ludGVyKFZhckZpZWxkIHgpIGNvbnN0
OworCisgICAgdm9pZCBtYXJrQXNSZWZlcmVuY2UoVmFyRmllbGQgeCwgQWRkcmVzc1NwYWNlIHNw
YWNlKTsKKyAgICBjb25zdCBBZGRyZXNzU3BhY2UgKmlzUmVmZXJlbmNlKFZhckZpZWxkIHgpIGNv
bnN0OworCisgICAgdm9pZCBtYXJrQXNQYWNrZWQoY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAg
Ym9vbCBpc1BhY2tlZChjb25zdCBURmllbGQgJmZpZWxkKSBjb25zdDsKKworICBwcml2YXRlOgor
ICAgIGNvbnN0IFRGdW5jdGlvbiAmZ2V0RnVuY3Rpb25PdmVybG9hZEltcGwoKTsKKworICAgIHZv
aWQgbWFya1NwYWNlKFZhckZpZWxkIHgsIEFkZHJlc3NTcGFjZSBzcGFjZSwgc3RkOjp1bm9yZGVy
ZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+ICZtYXApOworICAgIGNvbnN0IEFkZHJlc3NT
cGFjZSAqaXNTcGFjZShWYXJGaWVsZCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnVub3JkZXJlZF9tYXA8VmFyRmllbGQsIEFkZHJlc3NTcGFjZT4gJm1hcCkg
Y29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBUU3ltYm9sVGFibGUgJm1TeW1ib2xUYWJsZTsKKwor
ICAgIHN0ZDo6bWFwPE5hbWUsIGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbU5hbWVUb1N0cnVjdDsKKyAg
ICBPdmVybG9hZHMgbU92ZXJsb2FkczsKKyAgICBTaWcgbVJldXNhYmxlU2lnQnVmZmVyOworICAg
IFRlbXBsYXRlTmFtZSBtUmV1c2FibGVUZW1wbGF0ZU5hbWVCdWZmZXI7CisgICAgc3RkOjpzdHJp
bmcgbVJldXNhYmxlU3RyaW5nQnVmZmVyOworCisgICAgQW5nbGVTdHJ1Y3RzIG1BbmdsZVN0cnVj
dHM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFRCYXNpY1R5cGUsIGNvbnN0IFRTdHJ1Y3R1cmUg
Kj4gbVRleHR1cmVFbnZzOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKm1TYW1wbGVyID0gbnVsbHB0
cjsKKworICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxWYXJGaWVsZCwgQWRkcmVzc1NwYWNlPiBtUG9p
bnRlcnM7CisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPFZhckZpZWxkLCBBZGRyZXNzU3BhY2U+IG1S
ZWZlcmVuY2VzOworICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxjb25zdCBURmllbGQgKj4gbVBhY2tl
ZEZpZWxkczsKK307CisKK05hbWUgR2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxl
clR5cGUpOworCit9ICAvLyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFO
U0xBVE9SX1RSQU5TTEFUT1JNRVRBTERJUkVDVF9TWU1CT0xFTlZfSF8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1RvcG9zb3J0U3Ry
dWN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTg0MzMzMmRkOGRhYzI3OTJkYjJkMjYwOGI4NmVlZTEyOWI1
YzFlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuY3Bw
CkBAIC0wLDAgKzEsMzgzIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNp
bmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVk
ZSA8dmVjdG9yPgorCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbW11dGFibGVTdHJp
bmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvQXN0SGVscGVycy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L0RlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKwordXNpbmcg
bmFtZXNwYWNlIHNoOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sK
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBFZGdlcyA9IHN0ZDo6dW5vcmRlcmVkX3Nl
dDxUPjsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit1c2luZyBHcmFwaCA9IHN0ZDo6dW5vcmRl
cmVkX21hcDxULCBFZGdlczxUPj47CisKK3ZvaWQgQnVpbGRHcmFwaEltcGwoU3ltYm9sRW52ICZz
eW1ib2xFbnYsIEdyYXBoPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmcsIGNvbnN0IFRTdHJ1Y3R1cmUg
KnMpCit7CisgICAgaWYgKGcuZmluZChzKSAhPSBnLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEVkZ2VzPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJmVzID0gZ1tzXTsK
KworICAgIGNvbnN0IFRGaWVsZExpc3QgJmZzID0gcy0+ZmllbGRzKCk7CisgICAgZm9yIChjb25z
dCBURmllbGQgKmYgOiBmcykKKyAgICB7CisgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICp6
ID0gc3ltYm9sRW52LnJlbWFwKGYtPnR5cGUoKS0+Z2V0U3RydWN0KCkpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcy5pbnNlcnQoeik7CisgICAgICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1i
b2xFbnYsIGcsIHopOworICAgICAgICAgICAgRWRnZXM8Y29uc3QgVFN0cnVjdHVyZSAqPiAmZXog
PSBnW3pdOworICAgICAgICAgICAgZXMuaW5zZXJ0KGV6LmJlZ2luKCksIGV6LmVuZCgpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBCdWlsZEdyYXBo
KFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNvbnN0IFRTdHJ1Y3R1cmUgKj4gJnN0cnVjdHMpCit7Cisg
ICAgR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBnOworICAgIGZvciAoY29uc3QgVFN0cnVjdHVy
ZSAqcyA6IHN0cnVjdHMpCisgICAgeworICAgICAgICBCdWlsZEdyYXBoSW1wbChzeW1ib2xFbnYs
IGcsIHMpOworICAgIH0KKyAgICByZXR1cm4gZzsKK30KKworLy8gQWxnb3J0aG06IGh0dHBzOi8v
ZW4ud2lraXBlZGlhLm9yZy93aWtpL1RvcG9sb2dpY2FsX3NvcnRpbmcjRGVwdGgtZmlyc3Rfc2Vh
cmNoCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0ZDo6dmVjdG9yPFQ+IFRvcG9zb3J0KGNvbnN0
IEdyYXBoPFQ+ICZnKQoreworICAgIC8vIG5vZGVzIHdpdGggdGVtcG9yYXJ5IG1hcmsKKyAgICBz
dGQ6OnVub3JkZXJlZF9zZXQ8VD4gdGVtcHM7CisKKyAgICAvLyBub2RlcyB3aXRob3V0IHBlcm1h
bmVudCBtYXJrCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PFQ+IGludlBlcm1zOworICAgIGZvciAo
Y29uc3QgYXV0byAmZW50cnkgOiBnKQorICAgIHsKKyAgICAgICAgaW52UGVybXMuaW5zZXJ0KGVu
dHJ5LmZpcnN0KTsKKyAgICB9CisKKyAgICAvLyBMIOKGkCBFbXB0eSBsaXN0IHRoYXQgd2lsbCBj
b250YWluIHRoZSBzb3J0ZWQgZWxlbWVudHMKKyAgICBzdGQ6OnZlY3RvcjxUPiBMOworCisgICAg
Ly8gZnVuY3Rpb24gdmlzaXQobm9kZSBuKQorICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChUKT4gdmlz
aXQgPSBbJl0oVCBuKSAtPiB2b2lkIHsKKyAgICAgICAgLy8gaWYgbiBoYXMgYSBwZXJtYW5lbnQg
bWFyayB0aGVuCisgICAgICAgIGlmIChpbnZQZXJtcy5maW5kKG4pID09IGludlBlcm1zLmVuZCgp
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyByZXR1cm4KKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAvLyBpZiBuIGhhcyBhIHRlbXBvcmFyeSBtYXJrIHRoZW4KKyAg
ICAgICAgaWYgKHRlbXBzLmZpbmQobikgIT0gdGVtcHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIHN0b3AgICAobm90IGEgREFHKQorICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIG1hcmsgbiB3aXRoIGEgdGVtcG9yYXJ5IG1hcmsKKyAg
ICAgICAgdGVtcHMuaW5zZXJ0KG4pOworCisgICAgICAgIC8vIGZvciBlYWNoIG5vZGUgbSB3aXRo
IGFuIGVkZ2UgZnJvbSBuIHRvIG0gZG8KKyAgICAgICAgYXV0byBlbkl0ZXIgPSBnLmZpbmQobik7
CisgICAgICAgIEFTU0VSVChlbkl0ZXIgIT0gZy5lbmQoKSk7CisgICAgICAgIGNvbnN0IEVkZ2Vz
PFQ+ICZlbiA9IGVuSXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKFQgbSA6IGVuKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyB2aXNpdChtKQorICAgICAgICAgICAgdmlzaXQobSk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyByZW1vdmUgdGVtcG9yYXJ5IG1hcmsgZnJvbSBuCisgICAgICAg
IHRlbXBzLmVyYXNlKG4pOworICAgICAgICAvLyBtYXJrIG4gd2l0aCBhIHBlcm1hbmVudCBtYXJr
CisgICAgICAgIGludlBlcm1zLmVyYXNlKG4pOworICAgICAgICAvLyBhZGQgbiB0byBoZWFkIG9m
IEwKKyAgICAgICAgTC5wdXNoX2JhY2sobik7CisgICAgfTsKKworICAgIC8vIHdoaWxlIGV4aXN0
cyBub2RlcyB3aXRob3V0IGEgcGVybWFuZW50IG1hcmsgZG8KKyAgICB3aGlsZSAoIWludlBlcm1z
LmVtcHR5KCkpCisgICAgeworICAgICAgICAvLyBzZWxlY3QgYW4gdW5tYXJrZWQgbm9kZSBuCisg
ICAgICAgIFQgbiA9ICppbnZQZXJtcy5iZWdpbigpOworICAgICAgICAvLyB2aXNpdChuKQorICAg
ICAgICB2aXNpdChuKTsKKyAgICB9CisKKyAgICByZXR1cm4gTDsKK30KKworVEludGVybUZ1bmN0
aW9uRGVmaW5pdGlvbiAqQ3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihUU3ltYm9sVGFibGUg
JnN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZhU3RydWN0VHlwZSkKK3sKKyAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLworCisgICAgYXV0byAmZnVuY0VxdWFsaXR5ID0KKyAgICAgICAgKm5l
dyBURnVuY3Rpb24oJnN5bWJvbFRhYmxlLCBJbW11dGFibGVTdHJpbmcoImVxdWFsIiksIFN5bWJv
bFR5cGU6OkFuZ2xlSW50ZXJuYWwsCisgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUVHlwZShU
QmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisgICAgYXV0byAmYVN0cnVjdCA9IENyZWF0ZUlu
c3RhbmNlVmFyaWFibGUoc3ltYm9sVGFibGUsIGFTdHJ1Y3RUeXBlLCBOYW1lKCJhIikpOworICAg
IGF1dG8gJmJTdHJ1Y3QgPSBDcmVhdGVJbnN0YW5jZVZhcmlhYmxlKHN5bWJvbFRhYmxlLCBhU3Ry
dWN0VHlwZSwgTmFtZSgiYiIpKTsKKyAgICBmdW5jRXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZhU3Ry
dWN0KTsKKyAgICBmdW5jRXF1YWxpdHkuYWRkUGFyYW1ldGVyKCZiU3RydWN0KTsKKworICAgIGF1
dG8gJmJvZHlFcXVhbGl0eSA9ICpuZXcgVEludGVybUJsb2NrKCk7CisgICAgc3RkOjp2ZWN0b3I8
VEludGVybVR5cGVkICo+IGFuZE5vZGVzOworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAg
ICBjb25zdCBURmllbGRMaXN0ICZhRmllbGRzID0gYVN0cnVjdFR5cGUuZmllbGRzKCk7CisgICAg
Y29uc3Qgc2l6ZV90IHNpemUgICAgICAgICA9IGFGaWVsZHMuc2l6ZSgpOworCisgICAgYXV0byB0
ZXN0RXF1YWxpdHkgPSBbJl0oVEludGVybVR5cGVkICZhLCBUSW50ZXJtVHlwZWQgJmIpIC0+IFRJ
bnRlcm1UeXBlZCAqIHsKKyAgICAgICAgQVNTRVJUKGEuZ2V0VHlwZSgpID09IGIuZ2V0VHlwZSgp
KTsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBhLmdldFR5cGUoKTsKKyAgICAgICAgaWYg
KHR5cGUuaXNWZWN0b3IoKSB8fCB0eXBlLmlzTWF0cml4KCkgfHwgdHlwZS5nZXRTdHJ1Y3QoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byAqZnVuYyA9CisgICAgICAgICAgICAgICAgbmV3
IFRGdW5jdGlvbigmc3ltYm9sVGFibGUsIEltbXV0YWJsZVN0cmluZygiZXF1YWwiKSwgU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBU
VHlwZShUQmFzaWNUeXBlOjpFYnRCb29sKSwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gVElu
dGVybUFnZ3JlZ2F0ZTo6Q3JlYXRlRnVuY3Rpb25DYWxsKCpmdW5jLCBuZXcgVEludGVybVNlcXVl
bmNleyZhLCAmYn0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KFRPcGVyYXRvcjo6RU9wRXF1YWwsICZhLCAm
Yik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwg
c2l6ZTsgKytpZHgpCisgICAgeworICAgICAgICBjb25zdCBURmllbGQgJmFGaWVsZCAgICA9ICph
RmllbGRzW2lkeF07CisgICAgICAgIGNvbnN0IFRUeXBlICZhRmllbGRUeXBlID0gKmFGaWVsZC50
eXBlKCk7CisgICAgICAgIGF1dG8gJmFGaWVsZE5hbWUgICAgICAgID0gYUZpZWxkLm5hbWUoKTsK
KworICAgICAgICBpZiAoYUZpZWxkVHlwZS5pc0FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVCghYUZpZWxkVHlwZS5pc0FycmF5T2ZBcnJheXMoKSk7ICAvLyBUT0RPCisgICAg
ICAgICAgICBpbnQgZGltID0gYUZpZWxkVHlwZS5nZXRPdXRlcm1vc3RBcnJheVNpemUoKTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGQgPSAwOyBkIDwgZGltOyArK2QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYXV0byAmYUFjY2VzcyA9IEFjY2Vzc0luZGV4KEFjY2Vzc0ZpZWxkKGFT
dHJ1Y3QsIGFGaWVsZE5hbWUpLCBkKTsKKyAgICAgICAgICAgICAgICBhdXRvICZiQWNjZXNzID0g
QWNjZXNzSW5kZXgoQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSksIGQpOworICAgICAg
ICAgICAgICAgIGF1dG8gKmVxTm9kZSAgPSB0ZXN0RXF1YWxpdHkoYkFjY2VzcywgYUFjY2Vzcyk7
CisgICAgICAgICAgICAgICAgYW5kTm9kZXMucHVzaF9iYWNrKGVxTm9kZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhdXRv
ICZhQWNjZXNzID0gQWNjZXNzRmllbGQoYVN0cnVjdCwgYUZpZWxkTmFtZSk7CisgICAgICAgICAg
ICBhdXRvICZiQWNjZXNzID0gQWNjZXNzRmllbGQoYlN0cnVjdCwgYUZpZWxkTmFtZSk7CisgICAg
ICAgICAgICBhdXRvICplcU5vZGUgID0gdGVzdEVxdWFsaXR5KGJBY2Nlc3MsIGFBY2Nlc3MpOwor
ICAgICAgICAgICAgYW5kTm9kZXMucHVzaF9iYWNrKGVxTm9kZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBBU1NFUlQoYW5kTm9kZXMuc2l6ZSgpID4gMCk7ICAvLyBFbXB0eSBzdHJ1Y3RzIGFy
ZSBub3QgYWxsb3dlZCBpbiBHTFNMCisgICAgVEludGVybVR5cGVkICpvdXROb2RlID0gYW5kTm9k
ZXMuYmFjaygpOworICAgIGFuZE5vZGVzLnBvcF9iYWNrKCk7CisgICAgZm9yIChUSW50ZXJtVHlw
ZWQgKmFuZE5vZGUgOiBhbmROb2RlcykKKyAgICB7CisgICAgICAgIG91dE5vZGUgPSBuZXcgVElu
dGVybUJpbmFyeShUT3BlcmF0b3I6OkVPcExvZ2ljYWxBbmQsIGFuZE5vZGUsIG91dE5vZGUpOwor
ICAgIH0KKyAgICBib2R5RXF1YWxpdHkuYXBwZW5kU3RhdGVtZW50KG5ldyBUSW50ZXJtQnJhbmNo
KFRPcGVyYXRvcjo6RU9wUmV0dXJuLCBvdXROb2RlKSk7CisgICAgYXV0byAqZnVuY1Byb3RvRXF1
YWxpdHkgPSBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZmdW5jRXF1YWxpdHkpOworICAg
IHJldHVybiBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihmdW5jUHJvdG9FcXVhbGl0eSwg
JmJvZHlFcXVhbGl0eSk7Cit9CisKK3N0cnVjdCBEZWNsYXJlZFN0cnVjdHVyZQoreworICAgIFRJ
bnRlcm1EZWNsYXJhdGlvbiAqZGVjbE5vZGU7CisgICAgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlv
biAqZXF1YWxpdHlGdW5jdGlvbkRlZmluaXRpb247CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3Ry
dWN0dXJlOworfTsKKworYm9vbCBHZXRBc0RlY2xhcmVkU3RydWN0dXJlKFN5bWJvbEVudiAmc3lt
Ym9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZub2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlY2xhcmVkU3RydWN0dXJlICZvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnVub3JkZXJlZF9zZXQ8Y29uc3QgVFN0
cnVjdHVyZSAqPiAmdXNlZFN0cnVjdHMpCit7CisgICAgaWYgKFRJbnRlcm1EZWNsYXJhdGlvbiAq
ZGVjbE5vZGUgPSBub2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkpCisgICAgeworICAgICAgICBB
U1NFUlQoZGVjbE5vZGUtPmdldENoaWxkQ291bnQoKSA9PSAxKTsKKyAgICAgICAgVEludGVybU5v
ZGUgJm5vZGUgPSAqZGVjbE5vZGUtPmdldENoaWxkTm9kZSgwKTsKKworICAgICAgICBpZiAoVElu
dGVybVN5bWJvbCAqc3ltYm9sTm9kZSA9IG5vZGUuZ2V0QXNTeW1ib2xOb2RlKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmdmFyID0gc3ltYm9sTm9kZS0+dmFyaWFi
bGUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlICAgID0gdmFyLmdldFR5cGUoKTsK
KyAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBzeW1ib2xFbnYu
cmVtYXAodHlwZS5nZXRTdHJ1Y3QoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKHR5cGUuaXNTdHJ1Y3RTcGVjaWZpZXIoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIG91dC5kZWNsTm9kZSAgPSBkZWNsTm9kZTsKKyAgICAgICAgICAgICAgICAg
ICAgb3V0LnN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LmVx
dWFsaXR5RnVuY3Rpb25EZWZpbml0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRT
dHJ1Y3RzLmZpbmQoc3RydWN0dXJlKSA9PSB1c2VkU3RydWN0cy5lbmQoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID8gbnVsbHB0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
Q3JlYXRlU3RydWN0RXF1YWxpdHlGdW5jdGlvbihzeW1ib2xUYWJsZSwgKnN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NsYXNz
IEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1
YmxpYzoKKyAgICBTeW1ib2xFbnYgJm1TeW1ib2xFbnY7CisgICAgc3RkOjp1bm9yZGVyZWRfc2V0
PGNvbnN0IFRTdHJ1Y3R1cmUgKj4gbVVzZWRTdHJ1Y3RzOworCisgICAgRmluZFN0cnVjdEVxdWFs
aXR5VXNlKFN5bWJvbEVudiAmc3ltYm9sRW52KQorICAgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
ZmFsc2UsIGZhbHNlLCB0cnVlKSwgbVN5bWJvbEVudihzeW1ib2xFbnYpCisgICAge30KKworICAg
IGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKmJpbmFyeSkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGNvbnN0IFRPcGVyYXRvciBvcCA9IGJpbmFyeS0+Z2V0T3AoKTsKKwor
ICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wRXF1YWw6CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRvcjo6RU9wTm90RXF1YWw6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmxlZnRUeXBlICA9IGJp
bmFyeS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUg
JnJpZ2h0VHlwZSA9IGJpbmFyeS0+Z2V0UmlnaHQoKS0+Z2V0VHlwZSgpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChsZWZ0VHlwZS5nZXRTdHJ1Y3QoKSA9PSByaWdodFR5cGUuZ2V0U3RydWN0KCkp
OworICAgICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSBtU3lt
Ym9sRW52LnJlbWFwKGxlZnRUeXBlLmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICBwcml2YXRlOgorICAgIHZvaWQgdXNlU3RydWN0KGNvbnN0IFRT
dHJ1Y3R1cmUgJnN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChtVXNlZFN0cnVjdHMuaW5z
ZXJ0KCZzdHJ1Y3R1cmUpLnNlY29uZCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25z
dCBURmllbGQgKmZpZWxkIDogc3RydWN0dXJlLmZpZWxkcygpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdWJTdHJ1Y3QgPSBtU3ltYm9sRW52
LnJlbWFwKGZpZWxkLT50eXBlKCktPmdldFN0cnVjdCgpKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHVzZVN0cnVjdCgqc3ViU3RydWN0KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9ICAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Jvb2wgc2g6OlRvcG9z
b3J0U3RydWN0cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
IFN5bWJvbEVudiAmc3ltYm9sRW52LAorICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1C
bG9jayAmcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUHJlbHVkZUNvbmZp
ZyAmcHBjKQoreworICAgIEZpbmRTdHJ1Y3RFcXVhbGl0eVVzZSBmaW5kZXIoc3ltYm9sRW52KTsK
KyAgICByb290LnRyYXZlcnNlKCZmaW5kZXIpOworICAgIHBwYy5oYXNTdHJ1Y3RFcSA9ICFmaW5k
ZXIubVVzZWRTdHJ1Y3RzLmVtcHR5KCk7CisKKyAgICBEZWNsYXJlZFN0cnVjdHVyZSBkZWNsYXJl
ZFN0cnVjdDsKKyAgICBzdGQ6OnZlY3RvcjxEZWNsYXJlZFN0cnVjdHVyZT4gZGVjbGFyZWRTdHJ1
Y3RzOworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IG5vblN0cnVjdFN0bXROb2RlczsK
KworICAgIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHN0bXRDb3VudCA9IHJvb3QuZ2V0Q2hpbGRD
b3VudCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0bXRDb3VudDsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSAmc3RtdE5vZGUgPSAqcm9vdC5nZXRD
aGlsZE5vZGUoaSk7CisgICAgICAgICAgICBpZiAoR2V0QXNEZWNsYXJlZFN0cnVjdHVyZShzeW1i
b2xFbnYsIHN0bXROb2RlLCBkZWNsYXJlZFN0cnVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCksIGZpbmRlci5tVXNlZFN0
cnVjdHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlY2xhcmVkU3RydWN0cy5w
dXNoX2JhY2soZGVjbGFyZWRTdHJ1Y3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5vblN0cnVjdFN0bXROb2Rlcy5wdXNo
X2JhY2soJnN0bXROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8Y29uc3QgVFN0cnVjdHVyZSAqPiBzdHJ1Y3RzOworICAg
ICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8Y29uc3QgVFN0cnVjdHVyZSAqLCBEZWNsYXJlZFN0cnVj
dHVyZT4gcmF3VG9EZWNsYXJlZDsKKworICAgICAgICBmb3IgKGNvbnN0IERlY2xhcmVkU3RydWN0
dXJlICZkIDogZGVjbGFyZWRTdHJ1Y3RzKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3Rz
LnB1c2hfYmFjayhkLnN0cnVjdHVyZSk7CisgICAgICAgICAgICBBU1NFUlQocmF3VG9EZWNsYXJl
ZC5maW5kKGQuc3RydWN0dXJlKSA9PSByYXdUb0RlY2xhcmVkLmVuZCgpKTsKKyAgICAgICAgICAg
IHJhd1RvRGVjbGFyZWRbZC5zdHJ1Y3R1cmVdID0gZDsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IE5vdGU6IEdyYXBoIG1heSBjb250YWluIG1vcmUgdGhhbiBvbmx5IGV4cGxpY2l0bHkgZGVjbGFy
ZWQgc3RydWN0dXJlcy4KKyAgICAgICAgR3JhcGg8Y29uc3QgVFN0cnVjdHVyZSAqPiBnICAgICAg
ICAgICAgICAgICAgID0gQnVpbGRHcmFwaChzeW1ib2xFbnYsIHN0cnVjdHMpOworICAgICAgICBz
dGQ6OnZlY3Rvcjxjb25zdCBUU3RydWN0dXJlICo+IHNvcnRlZFN0cnVjdHMgPSBUb3Bvc29ydChn
KTsKKyAgICAgICAgQVNTRVJUKGRlY2xhcmVkU3RydWN0cy5zaXplKCkgPD0gc29ydGVkU3RydWN0
cy5zaXplKCkpOworCisgICAgICAgIGRlY2xhcmVkU3RydWN0cy5jbGVhcigpOworICAgICAgICBm
b3IgKGNvbnN0IFRTdHJ1Y3R1cmUgKnMgOiBzb3J0ZWRTdHJ1Y3RzKQorICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIGl0ID0gcmF3VG9EZWNsYXJlZC5maW5kKHMpOworICAgICAgICAgICAgaWYg
KGl0ICE9IHJhd1RvRGVjbGFyZWQuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXV0byAmZCA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgQVNTRVJUKGQuZGVjbE5v
ZGUpOworICAgICAgICAgICAgICAgIGRlY2xhcmVkU3RydWN0cy5wdXNoX2JhY2soZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB7CisgICAgICAgIFRJbnRlcm1TZXF1
ZW5jZSBuZXdTdG10Tm9kZXM7CisKKyAgICAgICAgZm9yIChEZWNsYXJlZFN0cnVjdHVyZSAmZGVj
bGFyZWRTdHJ1Y3QgOiBkZWNsYXJlZFN0cnVjdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChkZWNsYXJlZFN0cnVjdC5kZWNsTm9kZSk7CisgICAgICAgICAgICBuZXdTdG10Tm9kZXMu
cHVzaF9iYWNrKGRlY2xhcmVkU3RydWN0LmRlY2xOb2RlKTsKKyAgICAgICAgICAgIGlmIChkZWNs
YXJlZFN0cnVjdC5lcXVhbGl0eUZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBuZXdTdG10Tm9kZXMucHVzaF9iYWNrKGRlY2xhcmVkU3RydWN0LmVxdWFs
aXR5RnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAoVEludGVybU5vZGUgKnN0bXROb2RlIDogbm9uU3RydWN0U3RtdE5vZGVzKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc3RtdE5vZGUpOworICAgICAgICAgICAgbmV3U3Rt
dE5vZGVzLnB1c2hfYmFjayhzdG10Tm9kZSk7CisgICAgICAgIH0KKworICAgICAgICAqcm9vdC5n
ZXRTZXF1ZW5jZSgpID0gbmV3U3RtdE5vZGVzOworICAgIH0KKworICAgIHJldHVybiBjb21waWxl
ci52YWxpZGF0ZUFTVCgmcm9vdCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3Nv
cnRTdHJ1Y3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvVG9wb3NvcnRTdHJ1Y3RzLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTM5MDhlMzRkZDRkOTZjZDA0ZDYwMjc0ZGYxODFiMGQ0ODkzM2E1MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9Ub3Bvc29ydFN0cnVjdHMuaApAQCAtMCwwICsxLDI3IEBACisvLwor
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNU
X1RPUE9TT1JUU1RSVUNUU19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9UT1BPU09SVFNUUlVDVFNfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Byb2dyYW1Q
cmVsdWRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvU3ltYm9sRW52LmgiCisKK25hbWVzcGFjZSBzaAoreworCisvLyBEb2VzIGEgdG9wb3Nv
cnQgb24gc3RydWN0cyBiYXNlZCBvbiB0eXBlIGRlcGVuZGVuY2llcy4KKy8vIFN0cnVjdCB0eXBl
IGRlY2xhcmF0aW9ucyBhcmUgbW92ZWQgdG8gdGhlIHRvcCBvZiB0aGUgcm9vdCBibG9jay4KK0FO
R0xFX05PX0RJU0NBUkQgYm9vbCBUb3Bvc29ydFN0cnVjdHMoVENvbXBpbGVyICZjb21waWxlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sRW52ICZzeW1ib2xF
bnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAm
cm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbVByZWx1
ZGVDb25maWcgJnBwYyk7CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJBTlNMQVRPUk1FVEFMRElSRUNUX1RPUE9TT1JUU1RSVUNUU19IXwpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFw
TWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDE0YmM2M2ZjYTI5OGViYTRjZmRhNDY3OTRjZTk2OGExMWZi
ZDhjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5jcHAKQEAgLTAs
MCArMSw5NCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1dyYXBNYWluLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L0FzdEhlbHBlcnMuaCIKKwordXNpbmcgbmFtZXNwYWNlIHNoOworCisvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLworCituYW1lc3BhY2UKK3sKKworY2xhc3MgV3JhcHBlciA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHByaXZhdGU6CisgICAgSWRHZW4gJm1JZEdlbjsK
KworICBwdWJsaWM6CisgICAgV3JhcHBlcihUU3ltYm9sVGFibGUgJnN5bWJvbFRhYmxlLCBJZEdl
biAmaWRHZW4pCisgICAgICAgIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUs
ICZzeW1ib2xUYWJsZSksIG1JZEdlbihpZEdlbikKKyAgICB7fQorCisgICAgYm9vbCB2aXNpdEJs
b2NrKFZpc2l0LCBUSW50ZXJtQmxvY2sgKmJsb2NrTm9kZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChibG9ja05vZGUgIT0gZ2V0Um9vdE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpu
b2RlIDogKmJsb2NrTm9kZS0+Z2V0U2VxdWVuY2UoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmZ1bmNEZWZOb2RlID0gbm9kZS0+Z2V0QXNG
dW5jdGlvbkRlZmluaXRpb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24gJmZ1bmMgPSAqZnVuY0RlZk5vZGUtPmdldEZ1bmN0aW9uKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGZ1bmMuaXNNYWluKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB2aXNpdE1haW4oKmJsb2NrTm9kZSwgZnVuY0RlZk5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgcHJpdmF0ZToKKyAgICB2
b2lkIHZpc2l0TWFpbihUSW50ZXJtQmxvY2sgJnJvb3QsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRp
b24gKmZ1bmNEZWZOb2RlKQorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0g
KmZ1bmNEZWZOb2RlLT5nZXRGdW5jdGlvbigpOworICAgICAgICBBU1NFUlQoZnVuYy5pc01haW4o
KSk7CisgICAgICAgIEFTU0VSVChmdW5jLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9
PSBUQmFzaWNUeXBlOjpFYnRWb2lkKTsKKyAgICAgICAgQVNTRVJUKGZ1bmMuZ2V0UGFyYW1Db3Vu
dCgpID09IDApOworCisgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmZXh0ZXJuYWxNYWluRnVuYyA9
ICpmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb24oKTsKKyAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZp
bnRlcm5hbE1haW5GdW5jID0gQ2xvbmVGdW5jdGlvbigqbVN5bWJvbFRhYmxlLCBtSWRHZW4sIGV4
dGVybmFsTWFpbkZ1bmMpOworCisgICAgICAgIFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAqZXh0
ZXJuYWxNYWluUHJvdG8gPSBmdW5jRGVmTm9kZS0+Z2V0RnVuY3Rpb25Qcm90b3R5cGUoKTsKKyAg
ICAgICAgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICppbnRlcm5hbE1haW5Qcm90byA9CisgICAg
ICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZpbnRlcm5hbE1haW5GdW5jKTsK
KworICAgICAgICBUSW50ZXJtQmxvY2sgKmV4dGVybmFsTWFpbkJvZHkgPSBuZXcgVEludGVybUJs
b2NrKCk7CisgICAgICAgIGV4dGVybmFsTWFpbkJvZHktPmFwcGVuZFN0YXRlbWVudCgKKyAgICAg
ICAgICAgIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUZ1bmN0aW9uQ2FsbChpbnRlcm5hbE1haW5G
dW5jLCBuZXcgVEludGVybVNlcXVlbmNlKCkpKTsKKworICAgICAgICBUSW50ZXJtQmxvY2sgKmlu
dGVybmFsTWFpbkJvZHkgPSBmdW5jRGVmTm9kZS0+Z2V0Qm9keSgpOworCisgICAgICAgIFRJbnRl
cm1GdW5jdGlvbkRlZmluaXRpb24gKmV4dGVybmFsTWFpbkRlZiA9CisgICAgICAgICAgICBuZXcg
VEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihleHRlcm5hbE1haW5Qcm90bywgZXh0ZXJuYWxNYWlu
Qm9keSk7CisgICAgICAgIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKmludGVybmFsTWFpbkRl
ZiA9CisgICAgICAgICAgICBuZXcgVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbihpbnRlcm5hbE1h
aW5Qcm90bywgaW50ZXJuYWxNYWluQm9keSk7CisKKyAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRz
LnB1c2hfYmFjayhOb2RlUmVwbGFjZVdpdGhNdWx0aXBsZUVudHJ5KAorICAgICAgICAgICAgJnJv
b3QsIGZ1bmNEZWZOb2RlLCBUSW50ZXJtU2VxdWVuY2V7aW50ZXJuYWxNYWluRGVmLCBleHRlcm5h
bE1haW5EZWZ9KSk7CisgICAgfQorfTsKKworfSAgLy8gbmFtZXNwYWNlCisKK2Jvb2wgc2g6Oldy
YXBNYWluKFRDb21waWxlciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgVEludGVybUJsb2NrICZy
b290KQoreworICAgIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUgPSBjb21waWxlci5nZXRTeW1i
b2xUYWJsZSgpOworICAgIFdyYXBwZXIgd3JhcHBlcihzeW1ib2xUYWJsZSwgaWRHZW4pOworICAg
IHJvb3QudHJhdmVyc2UoJndyYXBwZXIpOworICAgIGlmICghd3JhcHBlci51cGRhdGVUcmVlKCZj
b21waWxlciwgJnJvb3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFwTWFpbi5oIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0L1dyYXBNYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWIwZWRmZjQyYjhlMzRkZDFhODBh
Mjc1NTIyZGYzYjdkNDZhNDYxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9XcmFw
TWFpbi5oCkBAIC0wLDAgKzEsMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJB
TlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9UUkFOU0xBVE9STUVUQUxESVJFQ1RfV1JBUE1BSU5fSF8KKworI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIK
KworbmFtZXNwYWNlIHNoCit7CisKKy8vIENoYW5nZXMKKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7
IG1haW4tYm9keSB9CisvLyBUbworLy8gICAgdm9pZCBGUkVTSF9OQU1FKGFyZ3MpIHsgbWFpbi1i
b2R5IH0KKy8vICAgIHZvaWQgbWFpbihhcmdzKSB7IEZSRVNIX05BTUUoYXJncyk7IH0KKy8vCisv
LyBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWZ1bCBpZiB0aGUgb3JpZ2luYWwgYG1haW5gIGhh
cyBtdWx0aXBsZSByZXR1cm4gcGF0aHMgYmVjYXVzZSB0aGlzCisvLyByZWR1Y2VzIGRvd24gdG8g
YSBzaW5nbGUgcGF0aCBpbiB0aGUgbmV3IGBtYWluYC4gTmljZSBmb3IgaW5zZXJ0aW5nIGNsZWFu
dXAgY29kZSBpbiBgbWFpbmAuCitBTkdMRV9OT19ESVNDQVJEIGJvb2wgV3JhcE1haW4oVENvbXBp
bGVyICZjb21waWxlciwgSWRHZW4gJmlkR2VuLCBUSW50ZXJtQmxvY2sgJnJvb3QpOworCit9ICAv
LyBuYW1lc3BhY2Ugc2gKKworI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFU
T1JNRVRBTERJUkVDVF9XUkFQTUFJTl9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuY3BwIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsVXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwYThiZjNhZmQxMjMwZTY1ZmRkY2NlOTgxOGFh
N2NjMmNiOThkMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5jcHAKQEAgLTAsMCAr
MSwzMDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyAgICBwcmFnbWEg
d2FybmluZyhkaXNhYmxlIDogNDcxOCkKKyNlbmRpZgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsVXRpbHMuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5j
bHVkZSA8Y2xpbWl0cz4KKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
U3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgiCisK
K25hbWVzcGFjZSBzaAoreworCitjb25zdCBjaGFyICpnZXRCYXNpY01ldGFsU3RyaW5nKGNvbnN0
IFRUeXBlICp0KQoreworICAgIHN3aXRjaCAodC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgeworICAg
ICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgICAgICByZXR1cm4gInZvaWQiOworICAgICAgICBj
YXNlIEVidEZsb2F0OgorICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisgICAgICAgIGNhc2Ug
RWJ0SW50OgorICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAgICBjYXNlIEVidFVJbnQ6
CisgICAgICAgICAgICByZXR1cm4gInVpbnQiOworICAgICAgICBjYXNlIEVidEJvb2w6CisgICAg
ICAgICAgICByZXR1cm4gImJvb2wiOworICAgICAgICBjYXNlIEVidFl1dkNzY1N0YW5kYXJkRVhU
OgorICAgICAgICAgICAgcmV0dXJuICJ5dXZDc2NTdGFuZGFyZEVYVCI7CisgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOworICAgICAgICBj
YXNlIEVidFNhbXBsZXIzRDoKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjNEIjsKKyAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAic2FtcGxlckN1YmUi
OworICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgICAgICAgIHJldHVy
biAic2FtcGxlckV4dGVybmFsT0VTIjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWwy
RFkyWUVYVDoKKyAgICAgICAgICAgIHJldHVybiAiX19zYW1wbGVyRXh0ZXJuYWwyRFkyWUVYVCI7
CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgICAgICAgIHJldHVybiAic2Ft
cGxlcjJEUmVjdCI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAg
ICByZXR1cm4gInNhbXBsZXIyREFycmF5IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRNUzoK
KyAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJETVMiOworICAgICAgICBjYXNlIEVidFNhbXBs
ZXIyRE1TQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRE1TQXJyYXkiOworICAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gInNhbXBs
ZXJDdWJlQXJyYXkiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICBy
ZXR1cm4gImlzYW1wbGVyMkQiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICAg
ICAgICByZXR1cm4gImlzYW1wbGVyM0QiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToK
KyAgICAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlIjsKKyAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyMkRBcnJheSI7CisgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRE1TOgorICAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjJE
TVMiOworICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRNU0FycmF5OgorICAgICAgICAgICAgcmV0
dXJuICJpc2FtcGxlcjJETVNBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlQXJy
YXk6CisgICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyQ3ViZUFycmF5IjsKKyAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEOgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEIjsKKyAgICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsK
KyAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICAgICAgICByZXR1cm4gInVzYW1w
bGVyQ3ViZSI7CisgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAg
cmV0dXJuICJ1c2FtcGxlcjJEQXJyYXkiOworICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRNUzoK
KyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TIjsKKyAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjJETVNBcnJheToKKyAgICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRE1TQXJyYXkiOwor
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZUFycmF5OgorICAgICAgICAgICAgcmV0dXJuICJ1
c2FtcGxlckN1YmVBcnJheSI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAg
ICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOworICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlU2hhZG93OgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZVNoYWRvdyI7Cisg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXIyREFycmF5U2hhZG93IjsKKyAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZUFycmF5
U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZUFycmF5U2hhZG93IjsKKyAg
ICAgICAgY2FzZSBFYnRTdHJ1Y3Q6CisgICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7Cisg
ICAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgICByZXR1cm4gImludGVy
ZmFjZSBibG9jayI7CisgICAgICAgIGNhc2UgRWJ0SW1hZ2UyRDoKKyAgICAgICAgICAgIHJldHVy
biAidGV4dHVyZTJkIjsKKyAgICAgICAgY2FzZSBFYnRJSW1hZ2UyRDoKKyAgICAgICAgICAgIHJl
dHVybiAidGV4dHVyZTJkPGludD4iOworICAgICAgICBjYXNlIEVidFVJbWFnZTJEOgorICAgICAg
ICAgICAgcmV0dXJuICJ0ZXh0dXJlMmQ8dWludD4iOworICAgICAgICBjYXNlIEVidEltYWdlM0Q6
CisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZCI7CisgICAgICAgIGNhc2UgRWJ0SUltYWdl
M0Q6CisgICAgICAgICAgICByZXR1cm4gInRleHR1cmUzZDxpbnQ+IjsKKyAgICAgICAgY2FzZSBF
YnRVSW1hZ2UzRDoKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZTNkPHVpbnQ+IjsKKyAgICAg
ICAgY2FzZSBFYnRJbWFnZTJEQXJyYXk6CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJy
YXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0
ZXh0dXJlMmQ+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisgICAgICAgICAg
ICB9CisgICAgICAgIGNhc2UgRWJ0SUltYWdlMkRBcnJheToKKyAgICAgICAgICAgIGlmICh0LT5p
c1Vuc2l6ZWRBcnJheSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAi
YXJyYXlfcmVmPHRleHR1cmUyZDxpbnQ+PiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJOT1RfSU1QTEVNRU5U
RUQiOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEVidFVJbWFnZTJEQXJyYXk6CisgICAg
ICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0dXJlMmQ8dWludD4+IjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gIk5PVF9JTVBMRU1FTlRFRCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0SW1h
Z2VDdWJlOgorICAgICAgICAgICAgcmV0dXJuICJ0ZXh0dXJlY3ViZSI7CisgICAgICAgIGNhc2Ug
RWJ0SUltYWdlQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1YmU8aW50PiI7Cisg
ICAgICAgIGNhc2UgRWJ0VUltYWdlQ3ViZToKKyAgICAgICAgICAgIHJldHVybiAidGV4dHVyZWN1
YmU8dWludD4iOworICAgICAgICBjYXNlIEVidEltYWdlQ3ViZUFycmF5OgorICAgICAgICAgICAg
aWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZWN1YmU+IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5PVF9JTVBM
RU1FTlRFRCI7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRWJ0SUltYWdlQ3ViZUFycmF5
OgorICAgICAgICAgICAgaWYgKHQtPmlzVW5zaXplZEFycmF5KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICJhcnJheV9yZWY8dGV4dHVyZWN1YmU8aW50Pj4iOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBFYnRVSW1hZ2VDdWJlQXJyYXk6CisgICAgICAgICAgICBpZiAodC0+aXNVbnNpemVkQXJyYXko
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5X3JlZjx0ZXh0
dXJlY3ViZTx1aW50Pj4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAiTk9UX0lNUExFTUVOVEVEIjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBFYnRBdG9taWNDb3VudGVyOgorICAgICAgICAgICAgcmV0
dXJuICJhdG9taWNfdWludCI7CisgICAgICAgIGNhc2UgRWJ0U2FtcGxlclZpZGVvV0VCR0w6Cisg
ICAgICAgICAgICByZXR1cm4gIiRzYW1wbGVyVmlkZW9XRUJHTCI7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgcmV0dXJuICJ1bmtub3du
IHR5cGUiOworICAgIH0KK30KKworY29uc3QgY2hhciAqZ2V0QnVpbHRJbk1ldGFsVHlwZU5hbWVT
dHJpbmcoY29uc3QgVFR5cGUgKnQpCit7CisgICAgaWYgKHQtPmlzTWF0cml4KCkpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHQtPmdldENvbHMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJmbG9hdDIiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0MngzIjsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDJ4NCI7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
dC0+Z2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxv
YXQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJmbG9hdDN4NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Um93cygpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJmbG9hdDR4MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQ0eDMiOworICAgICAgICAgICAgICAgICAgICBj
YXNlIDQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0NCI7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQor
ICAgIGlmICh0LT5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0LT5nZXRCYXNp
Y1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHQtPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gImZsb2F0MiI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiZmxvYXQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdDQiOworICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0
Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50MiI7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50MyI7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiaW50NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBFYnRCb29sOgor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodC0+Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAiYm9vbDIiOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gImJvb2wzIjsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sNCI7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
dC0+Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidWludDIiOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
InVpbnQzIjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJ1aW50NCI7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnRl
cmZhY2VCbG9jayk7CisgICAgcmV0dXJuIGdldEJhc2ljTWV0YWxTdHJpbmcodCk7Cit9CisKK0lt
bXV0YWJsZVN0cmluZyBHZXRNZXRhbFR5cGVOYW1lKGNvbnN0IFRUeXBlICZ0eXBlLCBTaEhhc2hG
dW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwgTmFtZU1hcCAqbmFtZU1hcCkKK3sKKyAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHJldHVybiBIYXNoTmFtZSh0
eXBlLmdldFN0cnVjdCgpLCBoYXNoRnVuY3Rpb24sIG5hbWVNYXApOworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIEltbXV0YWJsZVN0cmluZyhnZXRCdWlsdEluTWV0YWxUeXBlTmFtZVN0cmluZygm
dHlwZSkpOworfQorCit9ICAvLyBuYW1lc3BhY2Ugc2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbFV0aWxz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxVdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlM2NlM2NlZmQ3MzY5MTU4M2FhMzJmODgx
ODYyZjc3ZDc2NDNkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxVdGlscy5oCkBAIC0wLDAg
KzEsMzEgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAwMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgVFJBTlNMQVRPUl9NRVRBTF9VVElMU19IXwor
I2RlZmluZSBUUkFOU0xBVE9SX01FVEFMX1VUSUxTX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9D
b21tb24uaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW1tdXRhYmxlU3RyaW5nLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xVbmlxdWVJZC5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVHlwZXMuaCIKK25hbWVzcGFjZSBzaAoreworCitjb25zdCBjaGFyICpnZXRC
YXNpY01ldGFsU3RyaW5nKGNvbnN0IFRUeXBlICp0KTsKKworY29uc3QgY2hhciAqZ2V0QnVpbHRJ
bk1ldGFsVHlwZU5hbWVTdHJpbmcoY29uc3QgVFR5cGUgKnQpOworCitJbW11dGFibGVTdHJpbmcg
R2V0TWV0YWxUeXBlTmFtZShjb25zdCBUVHlwZSAmdHlwZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCAqbmFtZU1hcCk7CisKK30gIC8vIG5hbWVzcGFj
ZSBzaAorCisjZW5kaWYgIC8vIFRSQU5TTEFUT1JfTUVUQUxfVVRJTFNfSF8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JWdWxrYW4uY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKaW5kZXggMjAxY2JjOTFmNmUzYzIxZGQxOTI1NDVk
NmM1ZDUwZjkzODc0YmY3MS4uYzVlYzY3ZGVlNjI1OTBmY2I4MTJkOGRiZTMyYjVjNWRkYTQ4NzVi
NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvclZ1bGthbi5jcHAKQEAgLTE2Myw2ICsx
NjMsOCBAQCBjbGFzcyBEZWNsYXJlRGVmYXVsdFVuaWZvcm1zVHJhdmVyc2VyIDogcHVibGljIFRJ
bnRlcm1UcmF2ZXJzZXIKIGNvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRQb2ludENv
b3JkTmFtZSAgICA9IEltbXV0YWJsZVN0cmluZygiZmxpcHBlZFBvaW50Q29vcmQiKTsKIGNvbnN0
ZXhwciBJbW11dGFibGVTdHJpbmcga0ZsaXBwZWRGcmFnQ29vcmROYW1lICAgICA9IEltbXV0YWJs
ZVN0cmluZygiZmxpcHBlZEZyYWdDb29yZCIpOwogY29uc3RleHByIEltbXV0YWJsZVN0cmluZyBr
RW11bGF0ZWREZXB0aFJhbmdlUGFyYW1zID0gSW1tdXRhYmxlU3RyaW5nKCJBTkdMRURlcHRoUmFu
Z2VQYXJhbXMiKTsKK2NvbnN0ZXhwciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zQmxvY2tOYW1l
ICAgICAgICA9IEltbXV0YWJsZVN0cmluZygiQU5HTEVVbmlmb3JtQmxvY2siKTsKK2NvbnN0ZXhw
ciBJbW11dGFibGVTdHJpbmcga1VuaWZvcm1zVmFyTmFtZSAgICAgICAgICA9IEltbXV0YWJsZVN0
cmluZygiQU5HTEVVbmlmb3JtcyIpOwogCiBjb25zdGV4cHIgZ2w6OlNoYWRlck1hcDxjb25zdCBj
aGFyICo+IGtEZWZhdWx0VW5pZm9ybU5hbWVzID0gewogICAgIHtnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4LCB2azo6a0RlZmF1bHRVbmlmb3Jtc05hbWVWU30sCkBAIC00NTAsOSArNDUyLDkgQEAgY29u
c3QgVFZhcmlhYmxlICpBZGRHcmFwaGljc0RyaXZlclVuaWZvcm1zVG9TaGFkZXIoVEludGVybUJs
b2NrICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGaWVsZHMu
ZW5kKCkpOwogCiAgICAgLy8gRGVmaW5lIGEgZHJpdmVyIHVuaWZvcm0gYmxvY2sgIkFOR0xFVW5p
Zm9ybUJsb2NrIiB3aXRoIGluc3RhbmNlIG5hbWUgIkFOR0xFVW5pZm9ybXMiLgotICAgIHJldHVy
biBEZWNsYXJlSW50ZXJmYWNlQmxvY2soCi0gICAgICAgIHJvb3QsIHN5bWJvbFRhYmxlLCBkcml2
ZXJGaWVsZExpc3QsIEV2cVVuaWZvcm0sIFRNZW1vcnlRdWFsaWZpZXI6OkNyZWF0ZSgpLCAwLAot
ICAgICAgICBJbW11dGFibGVTdHJpbmcodms6OmtEcml2ZXJVbmlmb3Jtc0Jsb2NrTmFtZSksIElt
bXV0YWJsZVN0cmluZyh2azo6a0RyaXZlclVuaWZvcm1zVmFyTmFtZSkpOworICAgIHJldHVybiBE
ZWNsYXJlSW50ZXJmYWNlQmxvY2socm9vdCwgc3ltYm9sVGFibGUsIGRyaXZlckZpZWxkTGlzdCwg
RXZxVW5pZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRNZW1vcnlRdWFs
aWZpZXI6OkNyZWF0ZSgpLCAwLCBrVW5pZm9ybXNCbG9ja05hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrVW5pZm9ybXNWYXJOYW1lKTsKIH0KIAogY29uc3QgVFZhcmlhYmxl
ICpBZGRDb21wdXRlRHJpdmVyVW5pZm9ybXNUb1NoYWRlcihUSW50ZXJtQmxvY2sgKnJvb3QsIFRT
eW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAppbmRleCBhM2UwMzk5ZTNlODA3
MmFiNjk3M2Q3YmFlZmYxNjM5MGQwMmYyYzc0Li44ZjZmYzQ2NWZhZTk4ZjdmYzEzOTEyNmRmNmQ0
NGMzMDJiYTM3MGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgKQEAgLTIzMiw2ICsyMzIsNyBAQCBjbGFzcyBU
VHlwZQogCiAgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID4g
MSAmJiBzZWNvbmRhcnlTaXplID09IDE7IH0KICAgICBib29sIGlzVmVjdG9yQXJyYXkoKSBjb25z
dCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmIGlzQXJy
YXkoKTsgfQorICAgIGJvb2wgaXNSYW5rMCgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID09
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxOyB9CiAgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gcHJpbWFyeVNpemUgPT0gMSAmJiBzZWNvbmRhcnlTaXplID09
IDEgJiYgIW1TdHJ1Y3R1cmUgJiYgIWlzQXJyYXkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNULmNwcCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlQVNU
LmNwcAppbmRleCA3NmE4YmMyZjVlNGE4MzAxYzFlMWU5ZmExNmZmYzZkMTE2NTI2ZWUxLi5iYTRk
NmYzZTVmNWJjYTUwNzE5NTU3N2VkZDUyMDY3MDQwZDc2NDMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUFTVC5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFs
aWRhdGVBU1QuY3BwCkBAIC03NiwxMiArNzYsNyBAQCBWYWxpZGF0ZUFTVDo6VmFsaWRhdGVBU1Qo
VEludGVybU5vZGUgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNz
ICpkaWFnbm9zdGljcywKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWxpZGF0ZUFT
VE9wdGlvbnMgJm9wdGlvbnMpCiAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIGZhbHNlLCB0
cnVlLCBudWxscHRyKSwgbU9wdGlvbnMob3B0aW9ucyksIG1EaWFnbm9zdGljcyhkaWFnbm9zdGlj
cykKLXsKLSAgICBpZiAobU9wdGlvbnMudmFsaWRhdGVTaW5nbGVQYXJlbnQpCi0gICAgewotICAg
ICAgICBtUGFyZW50W3Jvb3RdID0gbnVsbHB0cjsKLSAgICB9Ci19Cit7fQogCiB2b2lkIFZhbGlk
YXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1Ob2RlICpub2RlKQogewpAQCAt
OTAsMTIgKzg1LDEzIEBAIHZvaWQgVmFsaWRhdGVBU1Q6OnZpc2l0Tm9kZShWaXNpdCB2aXNpdCwg
VEludGVybU5vZGUgKm5vZGUpCiAgICAgICAgIHNpemVfdCBjaGlsZENvdW50ID0gbm9kZS0+Z2V0
Q2hpbGRDb3VudCgpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7
ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgVEludGVybU5vZGUgKmNoaWxkID0gbm9kZS0+
Z2V0Q2hpbGROb2RlKGkpOwotICAgICAgICAgICAgaWYgKG1QYXJlbnQuZmluZChjaGlsZCkgIT0g
bVBhcmVudC5lbmQoKSkKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpjaGlsZCAgID0gbm9kZS0+
Z2V0Q2hpbGROb2RlKGkpOworICAgICAgICAgICAgVEludGVybU5vZGUgKiZwYXJlbnQgPSBtUGFy
ZW50W2NoaWxkXTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgdmlzaXRlZCB0d2ljZSBidXQgdGhyb3VnaCB0aGUg
c2FtZSBwYXJlbnQsIHRoZSBwcm9ibGVtIGlzIGluIG9uZSBvZgogICAgICAgICAgICAgICAgIC8v
IHRoZSBhbmNlc3RvcnMuCi0gICAgICAgICAgICAgICAgaWYgKG1QYXJlbnRbY2hpbGRdICE9IG5v
ZGUpCisgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBub2RlKQogICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5lcnJvcihub2RlLT5nZXRMaW5l
KCksICJGb3VuZCBjaGlsZCB3aXRoIHR3byBwYXJlbnRzIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiPHZhbGlkYXRlU2luZ2xlUGFyZW50PiIpOwpAQCAtMTAzLDE3
ICs5OSwxNyBAQCB2b2lkIFZhbGlkYXRlQVNUOjp2aXNpdE5vZGUoVmlzaXQgdmlzaXQsIFRJbnRl
cm1Ob2RlICpub2RlKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgbVBhcmVudFtjaGlsZF0gPSBub2RlOworICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsK
ICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVsbENo
aWxkcmVuKFZpc2l0IHZpc2l0LCBUSW50ZXJtTm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0X2NvdW50
KQordm9pZCBWYWxpZGF0ZUFTVDo6ZXhwZWN0Tm9uTnVsbENoaWxkcmVuKFZpc2l0IHZpc2l0LCBU
SW50ZXJtTm9kZSAqbm9kZSwgc2l6ZV90IGxlYXN0Q291bnQpCiB7CiAgICAgaWYgKHZpc2l0ID09
IFByZVZpc2l0ICYmIG1PcHRpb25zLnZhbGlkYXRlTnVsbE5vZGVzKQogICAgIHsKICAgICAgICAg
c2l6ZV90IGNoaWxkQ291bnQgPSBub2RlLT5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGlmIChj
aGlsZENvdW50IDwgbGVhc3RfY291bnQpCisgICAgICAgIGlmIChjaGlsZENvdW50IDwgbGVhc3RD
b3VudCkKICAgICAgICAgewogICAgICAgICAgICAgbURpYWdub3N0aWNzLT5lcnJvcihub2RlLT5n
ZXRMaW5lKCksICJUb28gZmV3IGNoaWxkcmVuIiwgIjx2YWxpZGF0ZU51bGxOb2Rlcz4iKTsKICAg
ICAgICAgICAgIG1OdWxsTm9kZXNGYWlsZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9i
YWxJbml0aWFsaXplcnMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdHJlZV9vcHMvRGVmZXJHbG9iYWxJbml0aWFsaXplcnMuY3BwCmluZGV4IGRm
YTIzYWFmMTliZTQ4OTk1Y2MwNjM2OGI1MWQwMWIwYTEyOWZkOWIuLmJiYzhkY2Q0ZThhODJlNDcy
MGE3N2QwODFiMzdjOWY2ZDdkMGY0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL0RlZmVyR2xvYmFsSW5pdGlhbGl6
ZXJzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90cmVlX29wcy9EZWZlckdsb2JhbEluaXRpYWxpemVycy5jcHAKQEAgLTUzLDcgKzUzLDgg
QEAgdm9pZCBHZXREZWZlcnJlZEluaXRpYWxpemVycyhUSW50ZXJtRGVjbGFyYXRpb24gKmRlY2xh
cmF0aW9uLAogICAgICAgICBBU1NFUlQoc3ltYm9sTm9kZSk7CiAgICAgICAgIFRJbnRlcm1UeXBl
ZCAqZXhwcmVzc2lvbiA9IGluaXQtPmdldFJpZ2h0KCk7CiAKLSAgICAgICAgaWYgKGV4cHJlc3Np
b24tPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8ICFleHByZXNzaW9uLT5oYXNDb25zdGFu
dFZhbHVlKCkpCisgICAgICAgIGlmIChleHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFD
b25zdCB8fCAhZXhwcmVzc2lvbi0+aGFzQ29uc3RhbnRWYWx1ZSgpIHx8CisgICAgICAgICAgICBz
eW1ib2xOb2RlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFHbG9iYWwpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIC8vIEZvciB2YXJpYWJsZXMgd2hpY2ggYXJlIG5vdCBjb25zdGFudCwgZGVmZXIgdGhl
aXIgcmVhbCBpbml0aWFsaXphdGlvbiB1bnRpbAogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgaW5p
dGlhbGl6ZSB1bmlmb3Jtcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1BydW5lRW1wdHlDYXNlcy5jcHAgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9QcnVu
ZUVtcHR5Q2FzZXMuY3BwCmluZGV4IDI4OWRlMjE1MmU5YzUxNDU5NGY2MjMxZDRkZjkyZDY2YjE3
OWEyYjcuLjJlZTgyMzkzZmNlNTExYTBkYTc3OTRkYjlhNjMxNzEwZGM4Nzc1NGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVf
b3BzL1BydW5lRW1wdHlDYXNlcy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUHJ1bmVFbXB0eUNhc2VzLmNwcApAQCAtMTcs
NyArMTcsNyBAQCBuYW1lc3BhY2Ugc2gKIG5hbWVzcGFjZQogewogCi1ib29sIEFyZUVtcHR5Qmxv
Y2tzKFRJbnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7Citib29sIEFyZUVtcHR5QmxvY2tzKGNv
bnN0IFRJbnRlcm1TZXF1ZW5jZSAqc3RhdGVtZW50cyk7CiAKIGJvb2wgSXNFbXB0eUJsb2NrKFRJ
bnRlcm1Ob2RlICpub2RlKQogewpAQCAtMzcsNyArMzcsNyBAQCBib29sIElzRW1wdHlCbG9jayhU
SW50ZXJtTm9kZSAqbm9kZSkKIAogLy8gUmV0dXJuIHRydWUgaWYgYWxsIHN0YXRlbWVudHMgaW4g
InN0YXRlbWVudHMiIGNvbnNpc3Qgb25seSBvZiBlbXB0eSBibG9ja3MgYW5kIG5vLW9wIHN0YXRl
bWVudHMuCiAvLyBSZXR1cm5zIHRydWUgYWxzbyBpZiB0aGVyZSBhcmUgbm8gc3RhdGVtZW50cy4K
LWJvb2wgQXJlRW1wdHlCbG9ja3MoVEludGVybVNlcXVlbmNlICpzdGF0ZW1lbnRzKQorYm9vbCBB
cmVFbXB0eUJsb2Nrcyhjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnN0YXRlbWVudHMpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDB1OyBpIDwgc3RhdGVtZW50cy0+c2l6ZSgpOyArK2kpCiAgICAgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvdHJlZV9vcHMvUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2guY3BwIGIvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvUmVtb3ZlU3dpdGNoRmFs
bFRocm91Z2guY3BwCmluZGV4IDQ1MDBhZWE0ZTQ4MmMwMjMwOTBjYzdiZDhlNjhlZGFjNTE0YTQ5
MjAuLmRkOGRkNTQzZjZlMWEyMjUxMzM3ZWQ0ZGIwN2ZmYmRmNzcwMWEwMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3Bz
L1JlbW92ZVN3aXRjaEZhbGxUaHJvdWdoLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9SZW1vdmVTd2l0Y2hGYWxsVGhyb3Vn
aC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUmVtb3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2
ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgogICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCB2aXNpdEJyYW5jaChWaXNp
dCwgVEludGVybUJyYW5jaCAqbm9kZSkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIG91dHB1dFNlcXVl
bmNlKFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVfdCBzdGFydEluZGV4KTsKKyAgICB2
b2lkIG91dHB1dFNlcXVlbmNlKGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqc2VxdWVuY2UsIHNpemVf
dCBzdGFydEluZGV4KTsKICAgICB2b2lkIGhhbmRsZVByZXZpb3VzQ2FzZSgpOwogCiAgICAgVElu
dGVybUJsb2NrICptU3RhdGVtZW50TGlzdDsKQEAgLTE1MywxMSArMTUzLDEzIEBAIGJvb2wgUmVt
b3ZlU3dpdGNoRmFsbFRocm91Z2hUcmF2ZXJzZXI6OnZpc2l0U3dpdGNoKFZpc2l0LCBUSW50ZXJt
U3dpdGNoICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW1vdmVTd2l0Y2hG
YWxsVGhyb3VnaFRyYXZlcnNlcjo6b3V0cHV0U2VxdWVuY2UoVEludGVybVNlcXVlbmNlICpzZXF1
ZW5jZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCit2b2lkIFJlbW92ZVN3aXRjaEZhbGxUaHJvdWdoVHJh
dmVyc2VyOjpvdXRwdXRTZXF1ZW5jZShjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnNlcXVlbmNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHN0YXJ0SW5kZXgpCiB7CisgICAgYXV0byAmb3V0U2VxID0gKm1TdGF0ZW1lbnRMaXN0T3V0
LT5nZXRTZXF1ZW5jZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgc2Vx
dWVuY2UtPnNpemUoKTsgKytpKQogICAgIHsKLSAgICAgICAgbVN0YXRlbWVudExpc3RPdXQtPmdl
dFNlcXVlbmNlKCktPnB1c2hfYmFjayhzZXF1ZW5jZS0+YXQoaSkpOworICAgICAgICBvdXRTZXEu
cHVzaF9iYWNrKHNlcXVlbmNlLT5hdChpKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1w
bGlmeUxvb3BDb25kaXRpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCmluZGV4
IDc0MTQ1NDAwZWJjNjNhN2I5NGEzYzM1NzgyNGZhODlmYzJjN2YxMWUuLjBjMmFhOGZiNmNiMWNh
ZGE4ODlkMDk0ODljYTdmNTQzN2IzOGNlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRp
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuY3BwCkBAIC0yMSwxMCArMjEs
MTcgQEAgbmFtZXNwYWNlIHNoCiBuYW1lc3BhY2UKIHsKIAorc3RydWN0IExvb3BJbmZvCit7Cisg
ICAgY29uc3QgVFZhcmlhYmxlICpjb25kaXRpb25WYXJpYWJsZSA9IG51bGxwdHI7CisgICAgVElu
dGVybVR5cGVkICpjb25kaXRpb24gICAgICAgICAgICA9IG51bGxwdHI7CisgICAgVEludGVybVR5
cGVkICpleHByZXNzaW9uICAgICAgICAgICA9IG51bGxwdHI7Cit9OworCiBjbGFzcyBTaW1wbGlm
eUxvb3BDb25kaXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNl
cgogewogICBwdWJsaWM6Ci0gICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcih1bnNp
Z25lZCBpbnQgY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAorICAgIFNpbXBsaWZ5TG9vcENvbmRp
dGlvbnNUcmF2ZXJzZXIoY29uc3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25z
VG9TaW1wbGlmeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xU
YWJsZSAqc3ltYm9sVGFibGUpOwogCiAgICAgdm9pZCB0cmF2ZXJzZUxvb3AoVEludGVybUxvb3Ag
Km5vZGUpIG92ZXJyaWRlOwpAQCAtMzQsNiArNDEsNyBAQCBjbGFzcyBTaW1wbGlmeUxvb3BDb25k
aXRpb25zVHJhdmVyc2VyIDogcHVibGljIFRMVmFsdWVUcmFja2luZ1RyYXZlcnNlcgogICAgIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpIG92
ZXJyaWRlOwogICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVGVybmFy
eSAqbm9kZSkgb3ZlcnJpZGU7CiAgICAgYm9vbCB2aXNpdERlY2xhcmF0aW9uKFZpc2l0IHZpc2l0
LCBUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIG92ZXJyaWRlOworICAgIGJvb2wgdmlzaXRCcmFu
Y2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2ggKm5vZGUpIG92ZXJyaWRlOwogCiAgICAgYm9v
bCBmb3VuZExvb3BUb0NoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Gb3VuZExvb3BUb0NoYW5nZTsg
fQogCkBAIC00MiwxNiArNTAsMTkgQEAgY2xhc3MgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZl
cnNlciA6IHB1YmxpYyBUTFZhbHVlVHJhY2tpbmdUcmF2ZXJzZXIKICAgICAvLyBmb3VuZC4KICAg
ICBib29sIG1Gb3VuZExvb3BUb0NoYW5nZTsKICAgICBib29sIG1JbnNpZGVMb29wSW5pdENvbmRp
dGlvbk9yRXhwcmVzc2lvbjsKLSAgICBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIgbUNvbmRpdGlv
bnNUb1NpbXBsaWZ5OworICAgIGNvbnN0IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlciAqbUNvbmRp
dGlvbnNUb1NpbXBsaWZ5OworCisgIHByaXZhdGU6CisgICAgTG9vcEluZm8gbUxvb3A7CiB9Owog
CiBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjpTaW1wbGlmeUxvb3BDb25kaXRpb25z
VHJhdmVyc2VyKAotICAgIHVuc2lnbmVkIGludCBjb25kaXRpb25zVG9TaW1wbGlmeU1hc2ssCisg
ICAgY29uc3QgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyICpjb25kaXRpb25zVG9TaW1wbGlmeSwK
ICAgICBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQogICAgIDogVExWYWx1ZVRyYWNraW5nVHJh
dmVyc2VyKHRydWUsIGZhbHNlLCBmYWxzZSwgc3ltYm9sVGFibGUpLAogICAgICAgbUZvdW5kTG9v
cFRvQ2hhbmdlKGZhbHNlKSwKICAgICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVz
c2lvbihmYWxzZSksCi0gICAgICBtQ29uZGl0aW9uc1RvU2ltcGxpZnkoY29uZGl0aW9uc1RvU2lt
cGxpZnlNYXNrKQorICAgICAgbUNvbmRpdGlvbnNUb1NpbXBsaWZ5KGNvbmRpdGlvbnNUb1NpbXBs
aWZ5KQoge30KIAogLy8gSWYgd2UncmUgaW5zaWRlIGEgbG9vcCBpbml0aWFsaXphdGlvbiwgY29u
ZGl0aW9uLCBvciBleHByZXNzaW9uLCB3ZSBjaGVjayBmb3IgZXhwcmVzc2lvbnMgdGhhdApAQCAt
NjgsNyArNzksOCBAQCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnZpc2l0
VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZQogICAgIGlmIChtRm91bmRMb29w
VG9DaGFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIEFscmVhZHkgZGVjaWRlZCB0byBj
aGFuZ2UgdGhpcyBsb29wLgogCi0gICAgbUZvdW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNU
b1NpbXBsaWZ5Lm1hdGNoKG5vZGUpOworICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkp
OworICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2go
bm9kZSk7CiAgICAgcmV0dXJuICFtRm91bmRMb29wVG9DaGFuZ2U7CiB9CiAKQEAgLTgwLDcgKzky
LDkgQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdEJpbmFyeShW
aXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqbm8KICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRo
aXMgbG9vcC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlm
eS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCksIGlzTFZhbHVlUmVxdWlyZWRIZXJlKCkpOwor
ICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExvb3BUb0NoYW5n
ZSA9CisgICAgICAgIG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50
Tm9kZSgpLCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSgpKTsKICAgICByZXR1cm4gIW1Gb3VuZExvb3BU
b0NoYW5nZTsKIH0KIApAQCAtOTIsNyArMTA2LDggQEAgYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRp
b25zVHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2EK
ICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBB
bHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9vcC4KIAotICAgIG1Gb3VuZExvb3BUb0No
YW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRjaChub2RlLCBnZXRQYXJlbnROb2RlKCkp
OworICAgIEFTU0VSVChtQ29uZGl0aW9uc1RvU2ltcGxpZnkpOworICAgIG1Gb3VuZExvb3BUb0No
YW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS0+bWF0Y2gobm9kZSwgZ2V0UGFyZW50Tm9kZSgp
KTsKICAgICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtMTA0LDcgKzExOSw4
IEBAIGJvb2wgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dmlzaXRUZXJuYXJ5KFZp
c2l0IHZpc2l0LCBUSW50ZXJtVGVybmFyeSAqCiAgICAgaWYgKG1Gb3VuZExvb3BUb0NoYW5nZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8gQWxyZWFkeSBkZWNpZGVkIHRvIGNoYW5nZSB0aGlz
IGxvb3AuCiAKLSAgICBtRm91bmRMb29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnku
bWF0Y2gobm9kZSk7CisgICAgQVNTRVJUKG1Db25kaXRpb25zVG9TaW1wbGlmeSk7CisgICAgbUZv
dW5kTG9vcFRvQ2hhbmdlID0gbUNvbmRpdGlvbnNUb1NpbXBsaWZ5LT5tYXRjaChub2RlKTsKICAg
ICByZXR1cm4gIW1Gb3VuZExvb3BUb0NoYW5nZTsKIH0KIApAQCAtMTE2LDEwICsxMzIsMzUgQEAg
Ym9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJhdmVyc2VyOjp2aXNpdERlY2xhcmF0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtRGVjbGEKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7ICAvLyBBbHJlYWR5IGRlY2lkZWQgdG8gY2hhbmdlIHRoaXMgbG9v
cC4KIAotICAgIG1Gb3VuZExvb3BUb0NoYW5nZSA9IG1Db25kaXRpb25zVG9TaW1wbGlmeS5tYXRj
aChub2RlKTsKKyAgICBBU1NFUlQobUNvbmRpdGlvbnNUb1NpbXBsaWZ5KTsKKyAgICBtRm91bmRM
b29wVG9DaGFuZ2UgPSBtQ29uZGl0aW9uc1RvU2ltcGxpZnktPm1hdGNoKG5vZGUpOwogICAgIHJl
dHVybiAhbUZvdW5kTG9vcFRvQ2hhbmdlOwogfQogCitib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnNUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoICpub2Rl
KQoreworICAgIGlmIChub2RlLT5nZXRGbG93T3AoKSA9PSBFT3BDb250aW51ZSAmJiAobUxvb3Au
Y29uZGl0aW9uIHx8IG1Mb29wLmV4cHJlc3Npb24pKQorICAgIHsKKyAgICAgICAgVEludGVybUJs
b2NrICpwYXJlbnQgPSBnZXRQYXJlbnROb2RlKCktPmdldEFzQmxvY2soKTsKKyAgICAgICAgQVNT
RVJUKHBhcmVudCk7CisgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSBzZXE7CisgICAgICAgIGlmICht
TG9vcC5leHByZXNzaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBzZXEucHVzaF9iYWNrKG1M
b29wLmV4cHJlc3Npb24tPmRlZXBDb3B5KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChtTG9v
cC5jb25kaXRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtTG9vcC5jb25kaXRp
b25WYXJpYWJsZSk7CisgICAgICAgICAgICBzZXEucHVzaF9iYWNrKAorICAgICAgICAgICAgICAg
IENyZWF0ZVRlbXBBc3NpZ25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3Au
Y29uZGl0aW9uLT5kZWVwQ29weSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgc2VxLnB1c2hfYmFj
ayhub2RlKTsKKyAgICAgICAgbU11bHRpUmVwbGFjZW1lbnRzLnB1c2hfYmFjayhOb2RlUmVwbGFj
ZVdpdGhNdWx0aXBsZUVudHJ5KHBhcmVudCwgbm9kZSwgc3RkOjptb3ZlKHNlcSkpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJh
dmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgLy8gTWFyayB0
aGF0IHdlJ3JlIGluc2lkZSBhIGxvb3AgY29uZGl0aW9uIG9yIGV4cHJlc3Npb24sIGFuZCBkZXRl
cm1pbmUgaWYgdGhlIGxvb3AgbmVlZHMgdG8gYmUKQEAgLTEyOCw3ICsxNjksNyBAQCB2b2lkIFNp
bXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAq
bm9kZSkKICAgICBTY29wZWROb2RlSW5UcmF2ZXJzYWxQYXRoIGFkZFRvUGF0aCh0aGlzLCBub2Rl
KTsKIAogICAgIG1JbnNpZGVMb29wSW5pdENvbmRpdGlvbk9yRXhwcmVzc2lvbiA9IHRydWU7Ci0g
ICAgbUZvdW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gZmFsc2U7CisgICAgbUZv
dW5kTG9vcFRvQ2hhbmdlICAgICAgICAgICAgICAgICAgID0gIW1Db25kaXRpb25zVG9TaW1wbGlm
eTsKIAogICAgIGlmICghbUZvdW5kTG9vcFRvQ2hhbmdlICYmIG5vZGUtPmdldEluaXQoKSkKICAg
ICB7CkBAIC0xNDcsODMgKzE4OCwxNDEgQEAgdm9pZCBTaW1wbGlmeUxvb3BDb25kaXRpb25zVHJh
dmVyc2VyOjp0cmF2ZXJzZUxvb3AoVEludGVybUxvb3AgKm5vZGUpCiAKICAgICBtSW5zaWRlTG9v
cEluaXRDb25kaXRpb25PckV4cHJlc3Npb24gPSBmYWxzZTsKIAorICAgIGNvbnN0IExvb3BJbmZv
IHByZXZMb29wID0gbUxvb3A7CisKICAgICBpZiAobUZvdW5kTG9vcFRvQ2hhbmdlKQogICAgIHsK
LSAgICAgICAgY29uc3QgVFR5cGUgKmJvb2xUeXBlICAgICAgICA9IFN0YXRpY1R5cGU6OkdldDxF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cVRlbXBvcmFyeSwgMSwgMT4oKTsKLSAgICAgICAgVFZh
cmlhYmxlICpjb25kaXRpb25WYXJpYWJsZSA9IENyZWF0ZVRlbXBWYXJpYWJsZShtU3ltYm9sVGFi
bGUsIGJvb2xUeXBlKTsKKyAgICAgICAgY29uc3QgVFR5cGUgKmJvb2xUeXBlICAgPSBTdGF0aWNU
eXBlOjpHZXQ8RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFUZW1wb3JhcnksIDEsIDE+KCk7Cisg
ICAgICAgIG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlID0gQ3JlYXRlVGVtcFZhcmlhYmxlKG1TeW1i
b2xUYWJsZSwgYm9vbFR5cGUpOworICAgICAgICBtTG9vcC5jb25kaXRpb24gICAgICAgICA9IG5v
ZGUtPmdldENvbmRpdGlvbigpOworICAgICAgICBtTG9vcC5leHByZXNzaW9uICAgICAgICA9IG5v
ZGUtPmdldEV4cHJlc3Npb24oKTsKIAogICAgICAgICAvLyBSZXBsYWNlIHRoZSBsb29wIGNvbmRp
dGlvbiB3aXRoIGEgYm9vbGVhbiB2YXJpYWJsZSB0aGF0J3MgdXBkYXRlZCBvbiBlYWNoIGl0ZXJh
dGlvbi4KICAgICAgICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAg
ICAgICBpZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkKICAgICAgICAgewotICAgICAgICAgICAg
Ly8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICB3aGlsZSAoZXhwcikgeyBib2R5OyB9Ci0g
ICAgICAgICAgICAvLyBpbnRvCi0gICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOwotICAg
ICAgICAgICAgLy8gICB3aGlsZSAoczApIHsgeyBib2R5OyB9IHMwID0gZXhwcjsgfQotICAgICAg
ICAgICAgVEludGVybURlY2xhcmF0aW9uICp0ZW1wSW5pdERlY2xhcmF0aW9uID0KLSAgICAgICAg
ICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwg
bm9kZS0+Z2V0Q29uZGl0aW9uKCktPmRlZXBDb3B5KCkpOwotICAgICAgICAgICAgaW5zZXJ0U3Rh
dGVtZW50SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xhcmF0aW9uKTsKLQotICAgICAgICAgICAg
VEludGVybUJsb2NrICpuZXdCb2R5ID0gbmV3IFRJbnRlcm1CbG9jaygpOwotICAgICAgICAgICAg
aWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgIEFTU0VSVCghbUxvb3AuZXhwcmVzc2lv
bik7CisKKyAgICAgICAgICAgIGlmIChtTG9vcC5jb25kaXRpb24tPmdldEFzU3ltYm9sTm9kZSgp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCkt
PnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkpOworICAgICAgICAgICAgICAgIC8vIE1hc2sgY29u
dGludWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAgICAg
ICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8v
ICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorICAgICAgICAgICAgICAgIC8vIGludG8KKyAgICAg
ICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHByOworICAgICAgICAgICAgICAgIC8vICAgd2hp
bGUgKHMwKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAgICBUSW50ZXJtRGVjbGFyYXRpb24gKnRl
bXBJbml0RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERl
Y2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9uKTsK
KyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRlbXBJbml0RGVj
bGFyYXRpb24pOworCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0aW9uKENyZWF0ZVRl
bXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRpb24gdmFyaWFibGUgdXBkYXRlLgor
ICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51bGxwdHI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVHJh
bnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKGV4cHIpIHsgYm9keTsgfQorICAg
ICAgICAgICAgICAgIC8vIGludG8KKyAgICAgICAgICAgICAgICAvLyAgIGJvb2wgczAgPSBleHBy
OworICAgICAgICAgICAgICAgIC8vICAgd2hpbGUgKHMwKSB7IHsgYm9keTsgfSBzMCA9IGV4cHI7
IH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3Rh
dGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIHMwID0g
ZXhwcjsgY29udGludWU7CisgICAgICAgICAgICAgICAgVEludGVybURlY2xhcmF0aW9uICp0ZW1w
SW5pdERlY2xhcmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNs
YXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbik7Cisg
ICAgICAgICAgICAgICAgaW5zZXJ0U3RhdGVtZW50SW5QYXJlbnRCbG9jayh0ZW1wSW5pdERlY2xh
cmF0aW9uKTsKKworICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAqbmV3Qm9keSA9IG5ldyBU
SW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2Uo
KS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKKyAgICAgICAgICAg
ICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
LCBtTG9vcC5jb25kaXRpb24tPmRlZXBDb3B5KCkpKTsKKworICAgICAgICAgICAgICAgIC8vIENh
bid0IHVzZSBxdWV1ZVJlcGxhY2VtZW50IHRvIHJlcGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1h
eSBoYXZlIGJlZW4gbnVsbHB0ci4KKyAgICAgICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8g
dGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwg
YmUKKyAgICAgICAgICAgICAgICAvLyB0cmF2ZXJzZWQsIGJ1dCB0aGF0IHdvbid0IGNyZWF0ZSBh
bnkgcHJvYmxlbXMuCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Qm9keShuZXdCb2R5KTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUobUxv
b3AuY29uZGl0aW9uVmFyaWFibGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld0Jv
ZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1w
QXNzaWdubWVudE5vZGUoY29uZGl0aW9uVmFyaWFibGUsIG5vZGUtPmdldENvbmRpdGlvbigpLT5k
ZWVwQ29weSgpKSk7Ci0KLSAgICAgICAgICAgIC8vIENhbid0IHVzZSBxdWV1ZVJlcGxhY2VtZW50
IHRvIHJlcGxhY2Ugb2xkIGJvZHksIHNpbmNlIGl0IG1heSBoYXZlIGJlZW4gbnVsbHB0ci4KLSAg
ICAgICAgICAgIC8vIEl0J3Mgc2FmZSB0byBkbyB0aGUgcmVwbGFjZW1lbnRzIGluIHBsYWNlIGhl
cmUgLSB0aGUgbmV3IGJvZHkgd2lsbCBzdGlsbCBiZQotICAgICAgICAgICAgLy8gdHJhdmVyc2Vk
LCBidXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1zLgotICAgICAgICAgICAgbm9kZS0+
c2V0Qm9keShuZXdCb2R5KTsKLSAgICAgICAgICAgIG5vZGUtPnNldENvbmRpdGlvbihDcmVhdGVU
ZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJpYWJsZSkpOwogICAgICAgICB9CiAgICAgICAgIGVs
c2UgaWYgKGxvb3BUeXBlID09IEVMb29wRG9XaGlsZSkKICAgICAgICAgewotICAgICAgICAgICAg
Ly8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICBkbyB7Ci0gICAgICAgICAgICAvLyAgICAg
Ym9keTsKLSAgICAgICAgICAgIC8vICAgfSB3aGlsZSAoZXhwcik7Ci0gICAgICAgICAgICAvLyBp
bnRvCi0gICAgICAgICAgICAvLyAgIGJvb2wgczAgPSB0cnVlOwotICAgICAgICAgICAgLy8gICBk
byB7Ci0gICAgICAgICAgICAvLyAgICAgeyBib2R5OyB9Ci0gICAgICAgICAgICAvLyAgICAgczAg
PSBleHByOwotICAgICAgICAgICAgLy8gICB9IHdoaWxlIChzMCk7Ci0gICAgICAgICAgICBUSW50
ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQotICAgICAgICAgICAgICAgIENy
ZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKGNvbmRpdGlvblZhcmlhYmxlLCBDcmVhdGVCb29s
Tm9kZSh0cnVlKSk7Ci0gICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBhcmVudEJsb2NrKHRl
bXBJbml0RGVjbGFyYXRpb24pOwotCi0gICAgICAgICAgICBUSW50ZXJtQmxvY2sgKm5ld0JvZHkg
PSBuZXcgVEludGVybUJsb2NrKCk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQor
ICAgICAgICAgICAgQVNTRVJUKCFtTG9vcC5leHByZXNzaW9uKTsKKworICAgICAgICAgICAgaWYg
KG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNTeW1ib2xOb2RlKCkpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbmV3Qm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJv
ZHkoKSk7CisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1lbnQgY29uZGl0
aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBtTG9vcC5jb25kaXRpb24gPSBu
dWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobUxvb3AuY29uZGl0
aW9uLT5nZXRBc0NvbnN0YW50VW5pb24oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAvLyBUcmFuc2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICBkbyB7CisgICAgICAgICAgICAg
ICAgLy8gICAgIGJvZHk7CisgICAgICAgICAgICAgICAgLy8gICB9IHdoaWxlIChleHByKTsKKyAg
ICAgICAgICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICBib29sIHMwID0gZXhw
cjsKKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgYm9k
eTsKKyAgICAgICAgICAgICAgICAvLyAgIH0gd2hpbGUgKHMwKTsKKyAgICAgICAgICAgICAgICBU
SW50ZXJtRGVjbGFyYXRpb24gKnRlbXBJbml0RGVjbGFyYXRpb24gPQorICAgICAgICAgICAgICAg
ICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0aW9uTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJs
ZSwgbUxvb3AuY29uZGl0aW9uKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRTdGF0ZW1lbnRJblBh
cmVudEJsb2NrKHRlbXBJbml0RGVjbGFyYXRpb24pOworCisgICAgICAgICAgICAgICAgbm9kZS0+
c2V0Q29uZGl0aW9uKENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxl
KSk7CisKKyAgICAgICAgICAgICAgICAvLyBNYXNrIGNvbnRpbnVlIHN0YXRlbWVudCBjb25kaXRp
b24gdmFyaWFibGUgdXBkYXRlLgorICAgICAgICAgICAgICAgIG1Mb29wLmNvbmRpdGlvbiA9IG51
bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgZG8gewor
ICAgICAgICAgICAgICAgIC8vICAgICBib2R5OworICAgICAgICAgICAgICAgIC8vICAgfSB3aGls
ZSAoZXhwcik7CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAg
Ym9vbCBzMDsKKyAgICAgICAgICAgICAgICAvLyAgIGRvIHsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgeyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gICAgIHMwID0gZXhwcjsKKyAgICAgICAg
ICAgICAgICAvLyAgIH0gd2hpbGUgKHMwKTsKKyAgICAgICAgICAgICAgICAvLyBMb2NhbCBjYXNl
IHN0YXRlbWVudHMgYXJlIHRyYW5zZm9ybWVkIGludG86CisgICAgICAgICAgICAgICAgLy8gICBz
MCA9IGV4cHI7IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAq
dGVtcEluaXREZWNsYXJhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRlbXBEZWNs
YXJhdGlvbk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUpOworICAgICAgICAgICAgICAgIGlu
c2VydFN0YXRlbWVudEluUGFyZW50QmxvY2sodGVtcEluaXREZWNsYXJhdGlvbik7CisKKyAgICAg
ICAgICAgICAgICBUSW50ZXJtQmxvY2sgKm5ld0JvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG5ld0JvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2Rl
LT5nZXRCb2R5KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdCb2R5
LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2soCisgICAgICAgICAgICAgICAgICAgIENyZWF0ZVRl
bXBBc3NpZ25tZW50Tm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSwgbUxvb3AuY29uZGl0aW9u
KSk7CisKKyAgICAgICAgICAgICAgICAvLyBDYW4ndCB1c2UgcXVldWVSZXBsYWNlbWVudCB0byBy
ZXBsYWNlIG9sZCBib2R5LCBzaW5jZSBpdCBtYXkgaGF2ZSBiZWVuIG51bGxwdHIuCisgICAgICAg
ICAgICAgICAgLy8gSXQncyBzYWZlIHRvIGRvIHRoZSByZXBsYWNlbWVudHMgaW4gcGxhY2UgaGVy
ZSAtIHRoZSBuZXcgYm9keSB3aWxsIHN0aWxsIGJlCisgICAgICAgICAgICAgICAgLy8gdHJhdmVy
c2VkLCBidXQgdGhhdCB3b24ndCBjcmVhdGUgYW55IHByb2JsZW1zLgorICAgICAgICAgICAgICAg
IG5vZGUtPnNldEJvZHkobmV3Qm9keSk7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0Q29uZGl0
aW9uKENyZWF0ZVRlbXBTeW1ib2xOb2RlKG1Mb29wLmNvbmRpdGlvblZhcmlhYmxlKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBuZXdCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2so
Ci0gICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlh
YmxlLCBub2RlLT5nZXRDb25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOwotCi0gICAgICAgICAgICAv
LyBDYW4ndCB1c2UgcXVldWVSZXBsYWNlbWVudCB0byByZXBsYWNlIG9sZCBib2R5LCBzaW5jZSBp
dCBtYXkgaGF2ZSBiZWVuIG51bGxwdHIuCi0gICAgICAgICAgICAvLyBJdCdzIHNhZmUgdG8gZG8g
dGhlIHJlcGxhY2VtZW50cyBpbiBwbGFjZSBoZXJlIC0gdGhlIG5ldyBib2R5IHdpbGwgc3RpbGwg
YmUKLSAgICAgICAgICAgIC8vIHRyYXZlcnNlZCwgYnV0IHRoYXQgd29uJ3QgY3JlYXRlIGFueSBw
cm9ibGVtcy4KLSAgICAgICAgICAgIG5vZGUtPnNldEJvZHkobmV3Qm9keSk7Ci0gICAgICAgICAg
ICBub2RlLT5zZXRDb25kaXRpb24oQ3JlYXRlVGVtcFN5bWJvbE5vZGUoY29uZGl0aW9uVmFyaWFi
bGUpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikK
ICAgICAgICAgewotICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9vcCBjb25kaXRpb24gaW5zaWRl
IHRoZSBsb29wLgotICAgICAgICAgICAgLy8gVHJhbnNmb3JtOgotICAgICAgICAgICAgLy8gICBm
b3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vIGludG8KLSAg
ICAgICAgICAgIC8vICAgewotICAgICAgICAgICAgLy8gICAgIGluaXQ7Ci0gICAgICAgICAgICAv
LyAgICAgYm9vbCBzMCA9IGV4cHI7Ci0gICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7Ci0g
ICAgICAgICAgICAvLyAgICAgICB7IGJvZHk7IH0KLSAgICAgICAgICAgIC8vICAgICAgIGV4cHJC
OwotICAgICAgICAgICAgLy8gICAgICAgczAgPSBleHByOwotICAgICAgICAgICAgLy8gICAgIH0K
LSAgICAgICAgICAgIC8vICAgfQorICAgICAgICAgICAgaWYgKCFtTG9vcC5jb25kaXRpb24pCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUxvb3AuY29uZGl0aW9uID0gQ3JlYXRlQm9v
bE5vZGUodHJ1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRJbnRlcm1Mb29wICp3
aGlsZUxvb3A7CiAgICAgICAgICAgICBUSW50ZXJtQmxvY2sgKmxvb3BTY29wZSAgICAgICAgICAg
ID0gbmV3IFRJbnRlcm1CbG9jaygpOwogICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICpsb29w
U2NvcGVTZXF1ZW5jZSA9IGxvb3BTY29wZS0+Z2V0U2VxdWVuY2UoKTsKIApAQCAtMjMzLDQ4ICsz
MzIsMTMwIEBAIHZvaWQgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1RyYXZlcnNlcjo6dHJhdmVyc2VM
b29wKFRJbnRlcm1Mb29wICpub2RlKQogICAgICAgICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNl
LT5wdXNoX2JhY2sobm9kZS0+Z2V0SW5pdCgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgLy8gSW5zZXJ0ICJib29sIHMwID0gZXhwcjsiIGlmIGFwcGxpY2FibGUsICJib29sIHMwID0g
dHJ1ZTsiIG90aGVyd2lzZQotICAgICAgICAgICAgVEludGVybVR5cGVkICpjb25kaXRpb25Jbml0
aWFsaXplciA9IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkp
CisgICAgICAgICAgICBpZiAobUxvb3AuY29uZGl0aW9uLT5nZXRBc1N5bWJvbE5vZGUoKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25kaXRpb25Jbml0aWFsaXplciA9IG5vZGUt
PmdldENvbmRpdGlvbigpLT5kZWVwQ29weSgpOworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhl
IGxvb3AgY29uZGl0aW9uIGluc2lkZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAvLyBUcmFu
c2Zvcm06CisgICAgICAgICAgICAgICAgLy8gICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJv
ZHk7IH0KKyAgICAgICAgICAgICAgICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICB7Cisg
ICAgICAgICAgICAgICAgLy8gICAgIGluaXQ7CisgICAgICAgICAgICAgICAgLy8gICAgIHdoaWxl
IChleHByKSB7CisgICAgICAgICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisgICAgICAgICAg
ICAgICAgLy8gICAgICAgZXhwckI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAg
ICAgICAgICAvLyAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExv
Y2FsIGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAg
ICAvLyAgIGV4cHJCOyBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCAieyBi
b2R5OyB9IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIFRJbnRlcm1CbG9jayAq
d2hpbGVMb29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2soKTsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEluc2VydCAiZXhwckI7IiBp
biB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9u
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3aGlsZUxvb3BCb2R5
LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+Z2V0RXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlICJ3aGlsZShleHByKSB7IHdo
aWxlTG9vcEJvZHkgfSIKKyAgICAgICAgICAgICAgICB3aGlsZUxvb3AgPQorICAgICAgICAgICAg
ICAgICAgICBuZXcgVEludGVybUxvb3AoRUxvb3BXaGlsZSwgbnVsbHB0ciwgbUxvb3AuY29uZGl0
aW9uLCBudWxscHRyLCB3aGlsZUxvb3BCb2R5KTsKKworICAgICAgICAgICAgICAgIC8vIE1hc2sg
Y29udGludWUgc3RhdGVtZW50IGNvbmRpdGlvbiB2YXJpYWJsZSB1cGRhdGUuCisgICAgICAgICAg
ICAgICAgbUxvb3AuY29uZGl0aW9uID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGVsc2UgaWYgKG1Mb29wLmNvbmRpdGlvbi0+Z2V0QXNDb25z
dGFudFVuaW9uKCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uZGl0aW9uSW5p
dGlhbGl6ZXIgPSBDcmVhdGVCb29sTm9kZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAvLyBNb3Zl
IHRoZSBsb29wIGNvbmRpdGlvbiBpbnNpZGUgdGhlIGxvb3AuCisgICAgICAgICAgICAgICAgLy8g
VHJhbnNmb3JtOgorICAgICAgICAgICAgICAgIC8vICAgZm9yIChpbml0OyBleHByOyBleHByQikg
eyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gaW50bworICAgICAgICAgICAgICAgIC8vICAg
eworICAgICAgICAgICAgICAgIC8vICAgICBpbml0OworICAgICAgICAgICAgICAgIC8vICAgICBi
b29sIHMwID0gZXhwcjsKKyAgICAgICAgICAgICAgICAvLyAgICAgd2hpbGUgKHMwKSB7CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgeyBib2R5OyB9CisgICAgICAgICAgICAgICAgLy8gICAgICAg
ZXhwckI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAgICAgICAvLyAgIH0K
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2FsIGNhc2Ugc3RhdGVt
ZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAvLyAgIGV4cHJCOyBj
b250aW51ZTsKKworICAgICAgICAgICAgICAgIC8vIEluc2VydCAiYm9vbCBzMCA9IGV4cHI7Igor
ICAgICAgICAgICAgICAgIGxvb3BTY29wZVNlcXVlbmNlLT5wdXNoX2JhY2soCisgICAgICAgICAg
ICAgICAgICAgIENyZWF0ZVRlbXBJbml0RGVjbGFyYXRpb25Ob2RlKG1Mb29wLmNvbmRpdGlvblZh
cmlhYmxlLCBtTG9vcC5jb25kaXRpb24pKTsKKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgInsg
Ym9keTsgfSIgaW4gdGhlIHdoaWxlIGxvb3AKKyAgICAgICAgICAgICAgICBUSW50ZXJtQmxvY2sg
KndoaWxlTG9vcEJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldEJvZHkoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRCb2R5KCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJbnNlcnQgImV4cHJCOyIg
aW4gdGhlIHdoaWxlIGxvb3AKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lv
bigpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9k
eS0+Z2V0U2VxdWVuY2UoKS0+cHVzaF9iYWNrKG5vZGUtPmdldEV4cHJlc3Npb24oKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hp
bGVMb29wQm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9IG5ldyBUSW50ZXJtTG9v
cChFTG9vcFdoaWxlLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSks
IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlTG9vcEJvZHkpOworCisgICAgICAgICAgICAgICAgLy8gTWFzayBjb250aW51ZSBzdGF0ZW1l
bnQgY29uZGl0aW9uIHZhcmlhYmxlIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBtTG9vcC5jb25k
aXRpb24gPSBudWxscHRyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9vcFNjb3BlU2Vx
dWVuY2UtPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICBDcmVhdGVUZW1wSW5pdERlY2xhcmF0
aW9uTm9kZShjb25kaXRpb25WYXJpYWJsZSwgY29uZGl0aW9uSW5pdGlhbGl6ZXIpKTsKLQotICAg
ICAgICAgICAgLy8gSW5zZXJ0ICJ7IGJvZHk7IH0iIGluIHRoZSB3aGlsZSBsb29wCi0gICAgICAg
ICAgICBUSW50ZXJtQmxvY2sgKndoaWxlTG9vcEJvZHkgPSBuZXcgVEludGVybUJsb2NrKCk7Ci0g
ICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjayhub2RlLT5nZXRC
b2R5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSW5zZXJ0ICJleHByQjsiIGlu
IHRoZSB3aGlsZSBsb29wCi0gICAgICAgICAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlTG9vcEJvZHktPmdldFNlcXVlbmNl
KCktPnB1c2hfYmFjayhub2RlLT5nZXRFeHByZXNzaW9uKCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgLy8gSW5zZXJ0ICJzMCA9IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAotICAgICAg
ICAgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQorICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvb3AgY29uZGl0aW9uIGluc2lk
ZSB0aGUgbG9vcC4KKyAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm06CisgICAgICAgICAgICAg
ICAgLy8gICBmb3IgKGluaXQ7IGV4cHI7IGV4cHJCKSB7IGJvZHk7IH0KKyAgICAgICAgICAgICAg
ICAvLyBpbnRvCisgICAgICAgICAgICAgICAgLy8gICB7CisgICAgICAgICAgICAgICAgLy8gICAg
IGluaXQ7CisgICAgICAgICAgICAgICAgLy8gICAgIGJvb2wgczAgPSBleHByOworICAgICAgICAg
ICAgICAgIC8vICAgICB3aGlsZSAoczApIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgICB7IGJv
ZHk7IH0KKyAgICAgICAgICAgICAgICAvLyAgICAgICBleHByQjsKKyAgICAgICAgICAgICAgICAv
LyAgICAgICBzMCA9IGV4cHI7CisgICAgICAgICAgICAgICAgLy8gICAgIH0KKyAgICAgICAgICAg
ICAgICAvLyAgIH0KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIExvY2Fs
IGNhc2Ugc3RhdGVtZW50cyBhcmUgdHJhbnNmb3JtZWQgaW50bzoKKyAgICAgICAgICAgICAgICAv
LyAgIGV4cHJCOyBzMCA9IGV4cHI7IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgLy8gSW5z
ZXJ0ICJib29sIHMwID0gZXhwcjsiCisgICAgICAgICAgICAgICAgbG9vcFNjb3BlU2VxdWVuY2Ut
PnB1c2hfYmFjaygKKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlVGVtcEluaXREZWNsYXJhdGlv
bk5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbikpOworICAgICAg
ICAgICAgICAgIC8vIEluc2VydCAieyBib2R5OyB9IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAg
ICAgICAgICAgIFRJbnRlcm1CbG9jayAqd2hpbGVMb29wQm9keSA9IG5ldyBUSW50ZXJtQmxvY2so
KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0Qm9keSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGVMb29wQm9keS0+Z2V0U2VxdWVuY2UoKS0+cHVz
aF9iYWNrKG5vZGUtPmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8vIEluc2VydCAiZXhwckI7IiBpbiB0aGUgd2hpbGUgbG9vcAorICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB3aGlsZUxvb3BCb2R5LT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sobm9kZS0+
Z2V0RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
SW5zZXJ0ICJzMCA9IGV4cHI7IiBpbiB0aGUgd2hpbGUgbG9vcAogICAgICAgICAgICAgICAgIHdo
aWxlTG9vcEJvZHktPmdldFNlcXVlbmNlKCktPnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICAg
ICAgQ3JlYXRlVGVtcEFzc2lnbm1lbnROb2RlKGNvbmRpdGlvblZhcmlhYmxlLCBub2RlLT5nZXRD
b25kaXRpb24oKS0+ZGVlcENvcHkoKSkpOworICAgICAgICAgICAgICAgICAgICBDcmVhdGVUZW1w
QXNzaWdubWVudE5vZGUobUxvb3AuY29uZGl0aW9uVmFyaWFibGUsIG1Mb29wLmNvbmRpdGlvbi0+
ZGVlcENvcHkoKSkpOworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAid2hpbGUoczApIHsgd2hp
bGVMb29wQm9keSB9IgorICAgICAgICAgICAgICAgIHdoaWxlTG9vcCA9IG5ldyBUSW50ZXJtTG9v
cChFTG9vcFdoaWxlLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDcmVhdGVUZW1wU3ltYm9sTm9kZShtTG9vcC5jb25kaXRpb25WYXJpYWJsZSks
IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlTG9vcEJvZHkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBDcmVhdGUgIndo
aWxlKHMwKSB7IHdoaWxlTG9vcEJvZHkgfSIKLSAgICAgICAgICAgIFRJbnRlcm1Mb29wICp3aGls
ZUxvb3AgPQotICAgICAgICAgICAgICAgIG5ldyBUSW50ZXJtTG9vcChFTG9vcFdoaWxlLCBudWxs
cHRyLCBDcmVhdGVUZW1wU3ltYm9sTm9kZShjb25kaXRpb25WYXJpYWJsZSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIHdoaWxlTG9vcEJvZHkpOwogICAgICAgICAg
ICAgbG9vcFNjb3BlLT5nZXRTZXF1ZW5jZSgpLT5wdXNoX2JhY2sod2hpbGVMb29wKTsKICAgICAg
ICAgICAgIHF1ZXVlUmVwbGFjZW1lbnQobG9vcFNjb3BlLCBPcmlnaW5hbE5vZGU6OklTX0RST1BQ
RUQpOwogCiAgICAgICAgICAgICAvLyBBZnRlciB0aGlzIHRoZSBvbGQgYm9keSBub2RlIHdpbGwg
YmUgdHJhdmVyc2VkIGFuZCBsb29wcyBpbnNpZGUgaXQgbWF5IGJlCi0gICAgICAgICAgICAvLyB0
cmFuc2Zvcm1lZC4gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgb2xkIGJvZHkgbm9kZSB3aWxsIHN0
aWxsIGJlIGluIHRoZSBBU1QgYWZ0ZXIgdGhlCi0gICAgICAgICAgICAvLyB0cmFuc2Zvcm1hdGlv
biB0aGF0J3MgcXVldWVkIGhlcmUsIGFuZCB0cmFuc2Zvcm1pbmcgbG9vcHMgaW5zaWRlIGl0IGRv
ZXNuJ3QgbmVlZCB0bwotICAgICAgICAgICAgLy8ga25vdyB0aGUgZXhhY3QgcG9zdC10cmFuc2Zv
cm0gcGF0aCB0byBpdC4KKyAgICAgICAgICAgIC8vIHRyYW5zZm9ybWVkLiBUaGlzIGlzIGZpbmUs
IHNpbmNlIHRoZSBvbGQgYm9keSBub2RlIHdpbGwgc3RpbGwgYmUgaW4gdGhlIEFTVCBhZnRlcgor
ICAgICAgICAgICAgLy8gdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQncyBxdWV1ZWQgaGVyZSwgYW5k
IHRyYW5zZm9ybWluZyBsb29wcyBpbnNpZGUgaXQgZG9lc24ndAorICAgICAgICAgICAgLy8gbmVl
ZCB0byBrbm93IHRoZSBleGFjdCBwb3N0LXRyYW5zZm9ybSBwYXRoIHRvIGl0LgogICAgICAgICB9
CiAgICAgfQogCkBAIC0yODMsMTYgKzQ2NCwyNiBAQCB2b2lkIFNpbXBsaWZ5TG9vcENvbmRpdGlv
bnNUcmF2ZXJzZXI6OnRyYXZlcnNlTG9vcChUSW50ZXJtTG9vcCAqbm9kZSkKICAgICAvLyBXZSB0
cmF2ZXJzZSB0aGUgYm9keSBvZiB0aGUgbG9vcCBldmVuIGlmIHRoZSBsb29wIGlzIHRyYW5zZm9y
bWVkLgogICAgIGlmIChub2RlLT5nZXRCb2R5KCkpCiAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+
dHJhdmVyc2UodGhpcyk7CisKKyAgICBtTG9vcCA9IHByZXZMb29wOwogfQogCiB9ICAvLyBuYW1l
c3BhY2UKIAorYm9vbCBTaW1wbGlmeUxvb3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIs
IFRJbnRlcm1Ob2RlICpyb290LCBUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlKQoreworICAgIFNp
bXBsaWZ5TG9vcENvbmRpdGlvbnNUcmF2ZXJzZXIgdHJhdmVyc2VyKG51bGxwdHIsIHN5bWJvbFRh
YmxlKTsKKyAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKyAgICByZXR1cm4gdHJhdmVy
c2VyLnVwZGF0ZVRyZWUoY29tcGlsZXIsIHJvb3QpOworfQorCiBib29sIFNpbXBsaWZ5TG9vcENv
bmRpdGlvbnMoVENvbXBpbGVyICpjb21waWxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSAqc3ltYm9sVGFibGUpCiB7Ci0gICAgU2ltcGxpZnlMb29wQ29uZGl0
aW9uc1RyYXZlcnNlciB0cmF2ZXJzZXIoY29uZGl0aW9uc1RvU2ltcGxpZnlNYXNrLCBzeW1ib2xU
YWJsZSk7CisgICAgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyIGNvbmRpdGlvbnNUb1NpbXBsaWZ5
KGNvbmRpdGlvbnNUb1NpbXBsaWZ5TWFzayk7CisgICAgU2ltcGxpZnlMb29wQ29uZGl0aW9uc1Ry
YXZlcnNlciB0cmF2ZXJzZXIoJmNvbmRpdGlvbnNUb1NpbXBsaWZ5LCBzeW1ib2xUYWJsZSk7CiAg
ICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZlcnNlcik7CiAgICAgcmV0dXJuIHRyYXZlcnNlci51cGRh
dGVUcmVlKGNvbXBpbGVyLCByb290KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRp
dGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfb3BzL1NpbXBsaWZ5TG9vcENvbmRpdGlvbnMuaAppbmRleCA0Y2RlZGU2ODMyZGU5MzAy
NDM0OGQ3YzY5YWE5ZTYxYzA2YmI0NTBmLi42OGI5OGY4NWM0ODliOGY0Mjg4YjU5NDgzZDlmM2M5
YWQ5MDU2YmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90cmVlX29wcy9TaW1wbGlmeUxvb3BDb25kaXRpb25zLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV9vcHMvU2lt
cGxpZnlMb29wQ29uZGl0aW9ucy5oCkBAIC0xOSw2ICsxOSwxMCBAQCBjbGFzcyBUQ29tcGlsZXI7
CiBjbGFzcyBUSW50ZXJtTm9kZTsKIGNsYXNzIFRTeW1ib2xUYWJsZTsKIAorQU5HTEVfTk9fRElT
Q0FSRCBib29sIFNpbXBsaWZ5TG9vcENvbmRpdGlvbnMoVENvbXBpbGVyICpjb21waWxlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICpy
b290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJv
bFRhYmxlICpzeW1ib2xUYWJsZSk7CisKIEFOR0xFX05PX0RJU0NBUkQgYm9vbCBTaW1wbGlmeUxv
b3BDb25kaXRpb25zKFRDb21waWxlciAqY29tcGlsZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqcm9vdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb25kaXRpb25zVG9T
aW1wbGlmeSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Bc05vZGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
YzZkZTE4MmQ5ZWYyM2IzYWIwMmM0MDllYmQxM2E2YjZlMzQ2OWZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91
dGlsL0FzTm9kZS5oCkBAIC0wLDAgKzEsMjEyIEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisjZGVmaW5lIENPTVBJTEVS
X1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCisKKyNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtTm9kZS5o
IgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIHNoCit7CisKK25hbWVzcGFjZSBw
cml2Cit7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEFzTm9kZQore307CisKK3Rl
bXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1Ob2RlPgoreworICAgIHN0YXRpYyBBTkdM
RV9JTkxJTkUgVEludGVybU5vZGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpIHsgcmV0dXJuIG5v
ZGU7IH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1UeXBlZD4KK3sK
KyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1UeXBlZCAqZXhlYyhUSW50ZXJtTm9kZSAq
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNUeXBlZCgpIDog
bnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJt
U3ltYm9sPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybVN5bWJvbCAqZXhlYyhU
SW50ZXJtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0
QXNTeW1ib2xOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1
Y3QgQXNOb2RlPFRJbnRlcm1Db25zdGFudFVuaW9uPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJ
TkUgVEludGVybUNvbnN0YW50VW5pb24gKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpIDogbnVsbHB0
cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtRnVuY3Rp
b25Qcm90b3R5cGU+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25Q
cm90b3R5cGUgKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1cm4g
bm9kZSA/IG5vZGUtPmdldEFzRnVuY3Rpb25Qcm90b3R5cGVOb2RlKCkgOiBudWxscHRyOworICAg
IH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1QcmVwcm9jZXNzb3JE
aXJlY3RpdmU+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtUHJlcHJvY2Vzc29y
RGlyZWN0aXZlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5vZGUgPyBub2RlLT5nZXRBc1ByZXByb2Nlc3NvckRpcmVjdGl2ZSgpIDogbnVsbHB0cjsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtU3dpenpsZT4KK3sK
KyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Td2l6emxlICpleGVjKFRJbnRlcm1Ob2Rl
ICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1N3aXp6bGVO
b2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2Rl
PFRJbnRlcm1CaW5hcnk+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtQmluYXJ5
ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBu
b2RlLT5nZXRBc0JpbmFyeU5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUg
PD4KK3N0cnVjdCBBc05vZGU8VEludGVybVVuYXJ5PgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJ
TkUgVEludGVybVVuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1VuYXJ5Tm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtVGVybmFyeT4KK3sKKyAgICBz
dGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1UZXJuYXJ5ICpleGVjKFRJbnRlcm1Ob2RlICpub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc1Rlcm5hcnlOb2RlKCkg
OiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRl
cm1JZkVsc2U+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtSWZFbHNlICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5n
ZXRBc0lmRWxzZU5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0
cnVjdCBBc05vZGU8VEludGVybVN3aXRjaD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJ
bnRlcm1Td2l0Y2ggKmV4ZWMoVEludGVybU5vZGUgKm5vZGUpCisgICAgeworICAgICAgICByZXR1
cm4gbm9kZSA/IG5vZGUtPmdldEFzU3dpdGNoTm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtQ2FzZT4KK3sKKyAgICBzdGF0aWMg
QU5HTEVfSU5MSU5FIFRJbnRlcm1DYXNlICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0Nhc2VOb2RlKCkgOiBudWxscHRyOwor
ICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgQXNOb2RlPFRJbnRlcm1GdW5jdGlvbkRl
ZmluaXRpb24+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBUSW50ZXJtRnVuY3Rpb25EZWZp
bml0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5v
ZGUgPyBub2RlLT5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpIDogbnVsbHB0cjsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9kZTxUSW50ZXJtQWdncmVnYXRlPgoreworICAg
IHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUFnZ3JlZ2F0ZSAqZXhlYyhUSW50ZXJtTm9kZSAq
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUo
KSA6IG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VElu
dGVybUJsb2NrPgoreworICAgIHN0YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybUJsb2NrICpleGVj
KFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5n
ZXRBc0Jsb2NrKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3Qg
QXNOb2RlPFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbj4KK3sKKyAgICBzdGF0aWMg
QU5HTEVfSU5MSU5FIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAqZXhlYyhUSW50
ZXJtTm9kZSAqbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlID8gbm9kZS0+Z2V0QXNH
bG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsKKwor
dGVtcGxhdGUgPD4KK3N0cnVjdCBBc05vZGU8VEludGVybURlY2xhcmF0aW9uPgoreworICAgIHN0
YXRpYyBBTkdMRV9JTkxJTkUgVEludGVybURlY2xhcmF0aW9uICpleGVjKFRJbnRlcm1Ob2RlICpu
b2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2RlLT5nZXRBc0RlY2xhcmF0aW9u
Tm9kZSgpIDogbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEFzTm9k
ZTxUSW50ZXJtTG9vcD4KK3sKKyAgICBzdGF0aWMgQU5HTEVfSU5MSU5FIFRJbnRlcm1Mb29wICpl
eGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGUgPyBub2Rl
LT5nZXRBc0xvb3BOb2RlKCkgOiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlIDw+Citz
dHJ1Y3QgQXNOb2RlPFRJbnRlcm1CcmFuY2g+Cit7CisgICAgc3RhdGljIEFOR0xFX0lOTElORSBU
SW50ZXJtQnJhbmNoICpleGVjKFRJbnRlcm1Ob2RlICpub2RlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5vZGUgPyBub2RlLT5nZXRBc0JyYW5jaE5vZGUoKSA6IG51bGxwdHI7CisgICAgfQorfTsK
KworfSAgLy8gbmFtZXNwYWNlIHByaXYKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitBTkdMRV9J
TkxJTkUgVCAqYXNOb2RlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIHJldHVybiBwcml2OjpB
c05vZGU8VD46OmV4ZWMobm9kZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYg
IC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNQVNOT0RFX0hfCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVl
X3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXIuY3BwCmluZGV4IGQwOGMzODZkYTA3ZmU5MGRmNmFlMjE5ODJhNDhlMTExYzNkYzdmMGUu
LmFjYzc4OTI5NmIyYjcxZTFiODMzYTkzMjM4OTE3NGE4OGU4MDNjMDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9J
bnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXIuY3BwCkBAIC02NSw3ICs2NSw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpJ
c0R5bmFtaWNJbmRleGluZ09mU3dpenpsZWRWZWN0b3IoVEludGVybUJpbmFyeSAqCiAgICAgcmV0
dXJuIElzRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1hdHJpeChub2RlKSAmJiBub2RlLT5nZXRM
ZWZ0KCktPmdldEFzU3dpenpsZU5vZGUoKTsKIH0KIAotYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1h
dGNoZXI6Om1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUpCitib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2hJbnRlcm5hbChU
SW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAg
ICBpZiAoKG1NYXNrICYga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSkgIT0gMCkKICAgICB7CkBA
IC04Nyw3ICs4Nyw3IEBAIGJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaEludGVy
bmFsKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybVVuYXJ5
ICpub2RlKQorYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1VbmFy
eSAqbm9kZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga0FycmF5TGVuZ3RoTWV0aG9kKSAh
PSAwKQogICAgIHsKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1VbmFyeSAqbm9kZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBU
SW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkKK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjpt
YXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QK
IHsKICAgICAvLyBMLXZhbHVlIHRyYWNraW5nIGluZm9ybWF0aW9uIGlzIG5lZWRlZCB0byBjaGVj
ayBmb3IgZHluYW1pYyBpbmRleGluZyBpbiBMLXZhbHVlLgogICAgIC8vIFRyYXZlcnNlcnMgdGhh
dCBkb24ndCB0cmFjayBsLXZhbHVlcyBjYW4gc3RpbGwgdXNlIHRoaXMgY2xhc3MgYW5kIG1hdGNo
IGJpbmFyeSBub2RlcyB3aXRoCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0
dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJl
bnROb2QKIAogYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1CaW5h
cnkgKm5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5v
ZGUgKnBhcmVudE5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGlzTFZhbHVlUmVxdWlyZWRIZXJlKSBjb25zdAogewogICAgIGlmIChtYXRjaElu
dGVybmFsKG5vZGUsIHBhcmVudE5vZGUpKQogICAgIHsKQEAgLTEyNiw3ICsxMjYsNyBAQCBib29s
IEludGVybU5vZGVQYXR0ZXJuTWF0Y2hlcjo6bWF0Y2goVEludGVybUJpbmFyeSAqbm9kZSwKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRj
aChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkKK2Jvb2wg
SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBU
SW50ZXJtTm9kZSAqcGFyZW50Tm9kZSkgY29uc3QKIHsKICAgICBpZiAoKG1NYXNrICYga0V4cHJl
c3Npb25SZXR1cm5pbmdBcnJheSkgIT0gMCkKICAgICB7CkBAIC0xNjEsNyArMTYxLDcgQEAgYm9v
bCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUs
IFRJbnRlcm1Ob2RlICpwYXJlbnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW50ZXJt
Tm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkKK2Jvb2wgSW50
ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkgY29uc3QK
IHsKICAgICBpZiAoKG1NYXNrICYga1VuZm9sZGVkU2hvcnRDaXJjdWl0RXhwcmVzc2lvbikgIT0g
MCkKICAgICB7CkBAIC0xNzAsNyArMTcwLDcgQEAgYm9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNo
ZXI6Om1hdGNoKFRJbnRlcm1UZXJuYXJ5ICpub2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBJbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXI6Om1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAq
bm9kZSkKK2Jvb2wgSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyOjptYXRjaChUSW50ZXJtRGVjbGFy
YXRpb24gKm5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKChtTWFzayAmIGtNdWx0aURlY2xhcmF0aW9u
KSAhPSAwKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1Ob2RlUGF0dGVybk1hdGNoZXIuaAppbmRleCBlOWM0YmNmYTUzMWZhOTQzYWZlNTRj
MDYzZWNlYWUyMDc3OGIzOTJlLi42ZjNkODczNTU2NzRlMGM4N2E3ZWQ0Nzc1ODdjNzIwNDQ1NTJk
ZDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVy
bU5vZGVQYXR0ZXJuTWF0Y2hlci5oCkBAIC0yOCw1MiArMjgsNTIgQEAgY2xhc3MgSW50ZXJtTm9k
ZVBhdHRlcm5NYXRjaGVyCiAgICAgc3RhdGljIGJvb2wgSXNEeW5hbWljSW5kZXhpbmdPZlZlY3Rv
ck9yTWF0cml4KFRJbnRlcm1CaW5hcnkgKm5vZGUpOwogICAgIHN0YXRpYyBib29sIElzRHluYW1p
Y0luZGV4aW5nT2ZTd2l6emxlZFZlY3RvcihUSW50ZXJtQmluYXJ5ICpub2RlKTsKIAotICAgIGVu
dW0gUGF0dGVyblR5cGUKKyAgICBlbnVtIFBhdHRlcm5UeXBlIDogdW5zaWduZWQgaW50CiAgICAg
ewogICAgICAgICAvLyBNYXRjaGVzIGV4cHJlc3Npb25zIHRoYXQgYXJlIHVuZm9sZGVkIHRvIGlm
IHN0YXRlbWVudHMgYnkgVW5mb2xkU2hvcnRDaXJjdWl0VG9JZgotICAgICAgICBrVW5mb2xkZWRT
aG9ydENpcmN1aXRFeHByZXNzaW9uID0gMHgwMDAxLAorICAgICAgICBrVW5mb2xkZWRTaG9ydENp
cmN1aXRFeHByZXNzaW9uID0gMXUgPDwgMHUsCiAKICAgICAgICAgLy8gTWF0Y2hlcyBleHByZXNz
aW9ucyB0aGF0IHJldHVybiBhcnJheXMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHNpbXBsZSBzdGF0
ZW1lbnRzIHdoZXJlIGEKICAgICAgICAgLy8gY29uc3RydWN0b3Igb3IgZnVuY3Rpb24gY2FsbCBy
ZXN1bHQgaXMgYXNzaWduZWQuCi0gICAgICAgIGtFeHByZXNzaW9uUmV0dXJuaW5nQXJyYXkgPSAw
eDAwMDEgPDwgMSwKKyAgICAgICAga0V4cHJlc3Npb25SZXR1cm5pbmdBcnJheSA9IDF1IDw8IDF1
LAogCiAgICAgICAgIC8vIE1hdGNoZXMgZHluYW1pYyBpbmRleGluZyBvZiB2ZWN0b3JzIG9yIG1h
dHJpY2VzIGluIGwtdmFsdWVzLgotICAgICAgICBrRHluYW1pY0luZGV4aW5nT2ZWZWN0b3JPck1h
dHJpeEluTFZhbHVlID0gMHgwMDAxIDw8IDIsCisgICAgICAgIGtEeW5hbWljSW5kZXhpbmdPZlZl
Y3Rvck9yTWF0cml4SW5MVmFsdWUgPSAxdSA8PCAydSwKIAogICAgICAgICAvLyBNYXRjaGVzIGRl
Y2xhcmF0aW9ucyB3aXRoIG1vcmUgdGhhbiBvbmUgZGVjbGFyZWQgdmFyaWFibGVzLgotICAgICAg
ICBrTXVsdGlEZWNsYXJhdGlvbiA9IDB4MDAwMSA8PCAzLAorICAgICAgICBrTXVsdGlEZWNsYXJh
dGlvbiA9IDF1IDw8IDN1LAogCiAgICAgICAgIC8vIE1hdGNoZXMgZGVjbGFyYXRpb25zIG9mIGFy
cmF5cy4KLSAgICAgICAga0FycmF5RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNCwKKyAgICAgICAg
a0FycmF5RGVjbGFyYXRpb24gPSAxdSA8PCA0dSwKIAogICAgICAgICAvLyBNYXRjaGVzIGRlY2xh
cmF0aW9ucyBvZiBzdHJ1Y3RzIHdoZXJlIHRoZSBzdHJ1Y3QgdHlwZSBkb2VzIG5vdCBoYXZlIGEg
bmFtZS4KLSAgICAgICAga05hbWVsZXNzU3RydWN0RGVjbGFyYXRpb24gPSAweDAwMDEgPDwgNSwK
KyAgICAgICAga05hbWVsZXNzU3RydWN0RGVjbGFyYXRpb24gPSAxdSA8PCA1dSwKIAogICAgICAg
ICAvLyBNYXRjaGVzIGFycmF5IGxlbmd0aCgpIG1ldGhvZC4KLSAgICAgICAga0FycmF5TGVuZ3Ro
TWV0aG9kID0gMHgwMDAxIDw8IDYsCisgICAgICAgIGtBcnJheUxlbmd0aE1ldGhvZCA9IDF1IDw8
IDZ1LAogCiAgICAgICAgIC8vIE1hdGNoZXMgYSB2ZWN0b3Igb3IgbWF0cml4IGNvbnN0cnVjdG9y
IHdob3NlIGFyZ3VtZW50cyBhcmUgc2NhbGFyaXplZCBieSB0aGUKICAgICAgICAgLy8gU0hfU0NB
TEFSSVpFX1ZFQ19PUl9NQVRfQ09OU1RSVUNUT1JfQVJHVU1FTlRTIHdvcmthcm91bmQuCi0gICAg
ICAgIGtTY2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDB4MDAwMSA8PCA3CisgICAgICAg
IGtTY2FsYXJpemVkVmVjT3JNYXRDb25zdHJ1Y3RvciA9IDF1IDw8IDd1LAogICAgIH07CiAgICAg
SW50ZXJtTm9kZVBhdHRlcm5NYXRjaGVyKGNvbnN0IHVuc2lnbmVkIGludCBtYXNrKTsKIAotICAg
IGJvb2wgbWF0Y2goVEludGVybVVuYXJ5ICpub2RlKTsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1V
bmFyeSAqbm9kZSkgY29uc3Q7CiAKLSAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkgKm5vZGUs
IFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKKyAgICBib29sIG1hdGNoKFRJbnRlcm1CaW5hcnkg
Km5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKSBjb25zdDsKIAogICAgIC8vIFVzZSB0aGlz
IHZlcnNpb24gZm9yIGNoZWNraW5nIGJpbmFyeSBub2RlIG1hdGNoZXMgaW4gY2FzZSB5b3UncmUg
dXNpbmcgZmxhZwogICAgIC8vIGtEeW5hbWljSW5kZXhpbmdPZlZlY3Rvck9yTWF0cml4SW5MVmFs
dWUuCi0gICAgYm9vbCBtYXRjaChUSW50ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFy
ZW50Tm9kZSwgYm9vbCBpc0xWYWx1ZVJlcXVpcmVkSGVyZSk7CisgICAgYm9vbCBtYXRjaChUSW50
ZXJtQmluYXJ5ICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50Tm9kZSwgYm9vbCBpc0xWYWx1ZVJl
cXVpcmVkSGVyZSkgY29uc3Q7CiAKLSAgICBib29sIG1hdGNoKFRJbnRlcm1BZ2dyZWdhdGUgKm5v
ZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKLSAgICBib29sIG1hdGNoKFRJbnRlcm1UZXJu
YXJ5ICpub2RlKTsKLSAgICBib29sIG1hdGNoKFRJbnRlcm1EZWNsYXJhdGlvbiAqbm9kZSk7Cisg
ICAgYm9vbCBtYXRjaChUSW50ZXJtQWdncmVnYXRlICpub2RlLCBUSW50ZXJtTm9kZSAqcGFyZW50
Tm9kZSkgY29uc3Q7CisgICAgYm9vbCBtYXRjaChUSW50ZXJtVGVybmFyeSAqbm9kZSkgY29uc3Q7
CisgICAgYm9vbCBtYXRjaChUSW50ZXJtRGVjbGFyYXRpb24gKm5vZGUpIGNvbnN0OwogCiAgIHBy
aXZhdGU6CiAgICAgY29uc3QgdW5zaWduZWQgaW50IG1NYXNrOwogCi0gICAgYm9vbCBtYXRjaElu
dGVybmFsKFRJbnRlcm1CaW5hcnkgKm5vZGUsIFRJbnRlcm1Ob2RlICpwYXJlbnROb2RlKTsKKyAg
ICBib29sIG1hdGNoSW50ZXJuYWwoVEludGVybUJpbmFyeSAqbm9kZSwgVEludGVybU5vZGUgKnBh
cmVudE5vZGUpIGNvbnN0OwogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHNoCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwv
SW50ZXJtTm9kZV91dGlsLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCmluZGV4IDZhYjEzYmE0
Njk1ZWMxYzQzMGJiYTFjNjI5NmE1NjFhNGY5NzQzMmUuLmQzZTFmY2EwMDE0Mjk5YjRjNDY5MzAy
N2NiNThkNmZkMGNlNjE2NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1Ob2RlX3V0aWwuY3BwCkBAIC0yMjQsNiArMjI0LDUwIEBAIFRWYXJpYWJsZSAqRGVj
bGFyZVRlbXBWYXJpYWJsZShUU3ltYm9sVGFibGUgKnN5bWJvbFRhYmxlLAogICAgIHJldHVybiB2
YXJpYWJsZTsKIH0KIAorc3RkOjpwYWlyPGNvbnN0IFRWYXJpYWJsZSAqLCBjb25zdCBUVmFyaWFi
bGUgKj4gRGVjbGFyZVN0cnVjdHVyZSgKKyAgICBUSW50ZXJtQmxvY2sgKnJvb3QsCisgICAgVFN5
bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKKyAgICBURmllbGRMaXN0ICpmaWVsZExpc3QsCisgICAg
VFF1YWxpZmllciBxdWFsaWZpZXIsCisgICAgY29uc3QgVE1lbW9yeVF1YWxpZmllciAmbWVtb3J5
UXVhbGlmaWVyLAorICAgIHVpbnQzMl90IGFycmF5U2l6ZSwKKyAgICBjb25zdCBJbW11dGFibGVT
dHJpbmcgJnN0cnVjdFR5cGVOYW1lLAorICAgIGNvbnN0IEltbXV0YWJsZVN0cmluZyAqc3RydWN0
SW5zdGFuY2VOYW1lKQoreworICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9CisgICAgICAgIG5l
dyBUU3RydWN0dXJlKHN5bWJvbFRhYmxlLCBzdHJ1Y3RUeXBlTmFtZSwgZmllbGRMaXN0LCBTeW1i
b2xUeXBlOjpBbmdsZUludGVybmFsKTsKKworICAgIGF1dG8gbWFrZVN0cnVjdHVyZVR5cGUgPSBb
Jl0oYm9vbCBpc1N0cnVjdFNwZWNpZmllcikgeworICAgICAgICBUVHlwZSAqc3RydWN0dXJlVHlw
ZSA9IG5ldyBUVHlwZShzdHJ1Y3R1cmUsIGlzU3RydWN0U3BlY2lmaWVyKTsKKyAgICAgICAgc3Ry
dWN0dXJlVHlwZS0+c2V0UXVhbGlmaWVyKHF1YWxpZmllcik7CisgICAgICAgIHN0cnVjdHVyZVR5
cGUtPnNldE1lbW9yeVF1YWxpZmllcihtZW1vcnlRdWFsaWZpZXIpOworICAgICAgICBpZiAoYXJy
YXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0dXJlVHlwZS0+bWFrZUFy
cmF5KGFycmF5U2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVR5cGU7
CisgICAgfTsKKworICAgIFRJbnRlcm1TZXF1ZW5jZSBpbnNlcnRTZXF1ZW5jZTsKKworICAgIFRW
YXJpYWJsZSAqdHlwZVZhciA9IG5ldyBUVmFyaWFibGUoc3ltYm9sVGFibGUsIGtFbXB0eUltbXV0
YWJsZVN0cmluZywgbWFrZVN0cnVjdHVyZVR5cGUodHJ1ZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpFbXB0eSk7CisgICAgaW5zZXJ0U2VxdWVu
Y2UucHVzaF9iYWNrKG5ldyBUSW50ZXJtRGVjbGFyYXRpb257dHlwZVZhcn0pOworCisgICAgVFZh
cmlhYmxlICppbnN0YW5jZVZhciA9IG51bGxwdHI7CisgICAgaWYgKHN0cnVjdEluc3RhbmNlTmFt
ZSkKKyAgICB7CisgICAgICAgIGluc3RhbmNlVmFyID0gbmV3IFRWYXJpYWJsZShzeW1ib2xUYWJs
ZSwgKnN0cnVjdEluc3RhbmNlTmFtZSwgbWFrZVN0cnVjdHVyZVR5cGUoZmFsc2UpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbCk7
CisgICAgICAgIGluc2VydFNlcXVlbmNlLnB1c2hfYmFjayhuZXcgVEludGVybURlY2xhcmF0aW9u
e2luc3RhbmNlVmFyfSk7CisgICAgfQorCisgICAgc2l6ZV90IGZpcnN0RnVuY3Rpb25JbmRleCA9
IEZpbmRGaXJzdEZ1bmN0aW9uRGVmaW5pdGlvbkluZGV4KHJvb3QpOworICAgIHJvb3QtPmluc2Vy
dENoaWxkTm9kZXMoZmlyc3RGdW5jdGlvbkluZGV4LCBpbnNlcnRTZXF1ZW5jZSk7CisKKyAgICBy
ZXR1cm4ge3R5cGVWYXIsIGluc3RhbmNlVmFyfTsKK30KKwogY29uc3QgVFZhcmlhYmxlICpEZWNs
YXJlSW50ZXJmYWNlQmxvY2soVEludGVybUJsb2NrICpyb290LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRGaWVsZExpc3QgKmZpZWxkTGlzdCwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1Ob2RlX3V0aWwuaAppbmRleCAz
OWI4NmRkMWJmMjk2YjcwMzk1NmY3MTI2ZDA3NGJkNTlhY2U2YzRjLi5mNWQxYzkzNTgyYWEwZjUx
MTcwNTcyNjA1NTkzODViNmI3N2Y1OWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtTm9kZV91dGlsLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybU5vZGVfdXRpbC5oCkBAIC00NSw2ICs0NSwxNSBAQCBUVmFyaWFibGUgKkRl
Y2xhcmVUZW1wVmFyaWFibGUoVFN5bWJvbFRhYmxlICpzeW1ib2xUYWJsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1EZWNsYXJhdGlvbiAqKmRlY2xhcmF0aW9uT3V0KTsK
K3N0ZDo6cGFpcjxjb25zdCBUVmFyaWFibGUgKiwgY29uc3QgVFZhcmlhYmxlICo+IERlY2xhcmVT
dHJ1Y3R1cmUoCisgICAgVEludGVybUJsb2NrICpyb290LAorICAgIFRTeW1ib2xUYWJsZSAqc3lt
Ym9sVGFibGUsCisgICAgVEZpZWxkTGlzdCAqZmllbGRMaXN0LAorICAgIFRRdWFsaWZpZXIgcXVh
bGlmaWVyLAorICAgIGNvbnN0IFRNZW1vcnlRdWFsaWZpZXIgJm1lbW9yeVF1YWxpZmllciwKKyAg
ICB1aW50MzJfdCBhcnJheVNpemUsCisgICAgY29uc3QgSW1tdXRhYmxlU3RyaW5nICZzdHJ1Y3RU
eXBlTmFtZSwKKyAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgKnN0cnVjdEluc3RhbmNlTmFtZSk7
CiBjb25zdCBUVmFyaWFibGUgKkRlY2xhcmVJbnRlcmZhY2VCbG9jayhUSW50ZXJtQmxvY2sgKnJv
b3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUg
KnN5bWJvbFRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEZp
ZWxkTGlzdCAqZmllbGRMaXN0LApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0ludGVybVJlYnVpbGQuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL0lu
dGVybVJlYnVpbGQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4ODM0NzM4ODU4YzBjOWZjNjcyODhlYjE1ZTYz
MzFhNTNhNDQwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtUmVidWlsZC5jcHAKQEAgLTAs
MCArMSwxMDI4IEBACisvLworLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3Ry
ZWVfdXRpbC9Bc05vZGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgiCisKKyNkZWZpbmUgR1VBUkQyKGNvbmQsIGZhaWxWYWwpIFwKKyAg
ICBkbyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgaWYgKCEoY29uZCkpICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWlsVmFsOyAgIFwKKyAgICAgICAg
fSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworI2RlZmluZSBH
VUFSRChjb25kKSBHVUFSRDIoY29uZCwgbnVsbHB0cikKKworbmFtZXNwYWNlIHNoCit7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorQU5HTEVfSU5MSU5FIGJvb2wgQWxsQml0
cyhUIGhheXN0YWNrLCBVIG5lZWRsZSkKK3sKKyAgICByZXR1cm4gKGhheXN0YWNrICYgbmVlZGxl
KSA9PSBuZWVkbGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorQU5H
TEVfSU5MSU5FIGJvb2wgQW55Qml0cyhUIGhheXN0YWNrLCBVIG5lZWRsZSkKK3sKKyAgICByZXR1
cm4gKGhheXN0YWNrICYgbmVlZGxlKSAhPSAwOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
LworCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFzZVJlc3VsdChCYXNlUmVzdWx0ICZv
dGhlcikKKyAgICA6IG1BY3Rpb24ob3RoZXIubUFjdGlvbiksCisgICAgICBtVmlzaXQob3RoZXIu
bVZpc2l0KSwKKyAgICAgIG1TaW5nbGUob3RoZXIubVNpbmdsZSksCisgICAgICBtTXVsdGkoc3Rk
Ojptb3ZlKG90aGVyLm1NdWx0aSkpCit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6
QmFzZVJlc3VsdChUSW50ZXJtTm9kZSAmbm9kZSwgVmlzaXRCaXRzIHZpc2l0KQorICAgIDogbUFj
dGlvbihBY3Rpb246OlJlcGxhY2VTaW5nbGUpLCBtVmlzaXQodmlzaXQpLCBtU2luZ2xlKCZub2Rl
KQore30KKworVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OkJhc2VSZXN1bHQoVEludGVybU5v
ZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkKKyAgICA6IG1BY3Rpb24obm9kZSA/IEFjdGlvbjo6
UmVwbGFjZVNpbmdsZSA6IEFjdGlvbjo6RHJvcCksCisgICAgICBtVmlzaXQobm9kZSA/IHZpc2l0
IDogVmlzaXRCaXRzOjpOZWl0aGVyKSwKKyAgICAgIG1TaW5nbGUobm9kZSkKK3t9CisKK1RJbnRl
cm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KG51bGxwdHJfdCkKKyAgICA6IG1BY3Rp
b24oQWN0aW9uOjpEcm9wKSwgbVZpc2l0KFZpc2l0Qml0czo6TmVpdGhlciksIG1TaW5nbGUobnVs
bHB0cikKK3t9CisKK1RJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpCYXNlUmVzdWx0KEZhaWwp
CisgICAgOiBtQWN0aW9uKEFjdGlvbjo6RmFpbCksIG1WaXNpdChWaXNpdEJpdHM6Ok5laXRoZXIp
LCBtU2luZ2xlKG51bGxwdHIpCit7fQorCitUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6QmFz
ZVJlc3VsdChzdGQ6OnZlY3RvcjxUSW50ZXJtTm9kZSAqPiAmJm5vZGVzKQorICAgIDogbUFjdGlv
bihBY3Rpb246OlJlcGxhY2VNdWx0aSksCisgICAgICBtVmlzaXQoVmlzaXRCaXRzOjpOZWl0aGVy
KSwKKyAgICAgIG1TaW5nbGUobnVsbHB0ciksCisgICAgICBtTXVsdGkoc3RkOjptb3ZlKG5vZGVz
KSkKK3t9CisKK3ZvaWQgVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Om1vdmVBc3NpZ25JbXBs
KEJhc2VSZXN1bHQgJm90aGVyKQoreworICAgIG1BY3Rpb24gPSBvdGhlci5tQWN0aW9uOworICAg
IG1WaXNpdCAgPSBvdGhlci5tVmlzaXQ7CisgICAgbVNpbmdsZSA9IG90aGVyLm1TaW5nbGU7Cisg
ICAgbU11bHRpICA9IHN0ZDo6bW92ZShvdGhlci5tTXVsdGkpOworfQorCitUSW50ZXJtUmVidWls
ZDo6QmFzZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6QmFzZVJlc3VsdDo6TXVsdGkoc3RkOjp2ZWN0
b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKK3sKKyAgICBhdXRvIGl0ID0gc3RkOjpyZW1vdmUo
bm9kZXMuYmVnaW4oKSwgbm9kZXMuZW5kKCksIG51bGxwdHIpOworICAgIG5vZGVzLmVyYXNlKGl0
LCBub2Rlcy5lbmQoKSk7CisgICAgcmV0dXJuIHN0ZDo6bW92ZShub2Rlcyk7Cit9CisKK2Jvb2wg
VEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6OmlzRmFpbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1BY3Rpb24gPT0gQWN0aW9uOjpGYWlsOworfQorCitib29sIFRJbnRlcm1SZWJ1aWxkOjpCYXNl
UmVzdWx0Ojppc0Ryb3AoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aW9uID09IEFjdGlvbjo6
RHJvcDsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjpCYXNlUmVzdWx0OjpzaW5n
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtU2luZ2xlOworfQorCitjb25zdCBzdGQ6OnZlY3Rv
cjxUSW50ZXJtTm9kZSAqPiAqVEludGVybVJlYnVpbGQ6OkJhc2VSZXN1bHQ6Om11bHRpKCkgY29u
c3QKK3sKKyAgICBpZiAobUFjdGlvbiA9PSBBY3Rpb246OlJlcGxhY2VNdWx0aSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAmbU11bHRpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordXNpbmcgUHJlUmVzdWx0ID0gVEludGVybVJlYnVp
bGQ6OlByZVJlc3VsdDsKKworUHJlUmVzdWx0OjpQcmVSZXN1bHQoVEludGVybU5vZGUgJm5vZGUs
IFZpc2l0Qml0cyB2aXNpdCkgOiBCYXNlUmVzdWx0KG5vZGUsIHZpc2l0KSB7fQorUHJlUmVzdWx0
OjpQcmVSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNpdCkgOiBCYXNlUmVz
dWx0KG5vZGUsIHZpc2l0KSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQobnVsbHB0cl90KSA6IEJh
c2VSZXN1bHQobnVsbHB0cikge30KK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEZhaWwpIDogQmFzZVJl
c3VsdChGYWlsKCkpIHt9CisKK1ByZVJlc3VsdDo6UHJlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhl
cikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorUHJlUmVzdWx0OjpQcmVSZXN1bHQoUHJlUmVzdWx0
ICYmb3RoZXIpIDogQmFzZVJlc3VsdChvdGhlcikge30KKwordm9pZCBQcmVSZXN1bHQ6Om9wZXJh
dG9yPShQcmVSZXN1bHQgJiZvdGhlcikKK3sKKyAgICBtb3ZlQXNzaWduSW1wbChvdGhlcik7Cit9
CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3VzaW5nIFBvc3RSZXN1bHQgPSBUSW50ZXJt
UmVidWlsZDo6UG9zdFJlc3VsdDsKKworUG9zdFJlc3VsdDo6UG9zdFJlc3VsdChUSW50ZXJtTm9k
ZSAmbm9kZSkgOiBCYXNlUmVzdWx0KG5vZGUsIFZpc2l0Qml0czo6TmVpdGhlcikge30KK1Bvc3RS
ZXN1bHQ6OlBvc3RSZXN1bHQoVEludGVybU5vZGUgKm5vZGUpIDogQmFzZVJlc3VsdChub2RlLCBW
aXNpdEJpdHM6Ok5laXRoZXIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KG51bGxwdHJfdCkg
OiBCYXNlUmVzdWx0KG51bGxwdHIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0KEZhaWwpIDog
QmFzZVJlc3VsdChGYWlsKCkpIHt9CisKK1Bvc3RSZXN1bHQ6OlBvc3RSZXN1bHQoUG9zdFJlc3Vs
dCAmJm90aGVyKSA6IEJhc2VSZXN1bHQob3RoZXIpIHt9CitQb3N0UmVzdWx0OjpQb3N0UmVzdWx0
KEJhc2VSZXN1bHQgJiZvdGhlcikgOiBCYXNlUmVzdWx0KG90aGVyKSB7fQorCit2b2lkIFBvc3RS
ZXN1bHQ6Om9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpCit7CisgICAgbW92ZUFzc2lnbklt
cGwob3RoZXIpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitUSW50ZXJtUmVidWls
ZDo6VEludGVybVJlYnVpbGQoVENvbXBpbGVyICZjb21waWxlciwgYm9vbCBwcmVWaXNpdCwgYm9v
bCBwb3N0VmlzaXQpCisgICAgOiBtQ29tcGlsZXIoY29tcGlsZXIpLAorICAgICAgbVN5bWJvbFRh
YmxlKGNvbXBpbGVyLmdldFN5bWJvbFRhYmxlKCkpLAorICAgICAgbVByZVZpc2l0KHByZVZpc2l0
KSwKKyAgICAgIG1Qb3N0VmlzaXQocG9zdFZpc2l0KQoreworICAgIEFTU0VSVChwcmVWaXNpdCB8
fCBwb3N0VmlzaXQpOworfQorCitUSW50ZXJtUmVidWlsZDo6flRJbnRlcm1SZWJ1aWxkKCkKK3sK
KyAgICBBU1NFUlQoIW1Ob2RlU3RhY2sudmFsdWUpOworICAgIEFTU0VSVCghbU5vZGVTdGFjay50
YWlsKTsKK30KKworY29uc3QgVEZ1bmN0aW9uICpUSW50ZXJtUmVidWlsZDo6Z2V0UGFyZW50RnVu
Y3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBtUGFyZW50RnVuYzsKK30KKworVEludGVybU5v
ZGUgKlRJbnRlcm1SZWJ1aWxkOjpnZXRQYXJlbnROb2RlKHNpemVfdCBvZmZzZXQpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1Ob2RlU3RhY2sudGFpbCk7CisgICAgYXV0byBwYXJlbnQgPSAqbU5vZGVT
dGFjay50YWlsOworICAgIHdoaWxlIChvZmZzZXQgPiAwKQorICAgIHsKKyAgICAgICAgLS1vZmZz
ZXQ7CisgICAgICAgIEFTU0VSVChwYXJlbnQudGFpbCk7CisgICAgICAgIHBhcmVudCA9ICpwYXJl
bnQudGFpbDsKKyAgICB9CisgICAgcmV0dXJuIHBhcmVudC52YWx1ZTsKK30KKworYm9vbCBUSW50
ZXJtUmVidWlsZDo6cmVidWlsZFJvb3QoVEludGVybUJsb2NrICZyb290KQoreworICAgIGlmICgh
cmVidWlsZEluUGxhY2Uocm9vdCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiBtQ29tcGlsZXIudmFsaWRhdGVBU1QoJnJvb3QpOworfQorCitib29sIFRJ
bnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZShUSW50ZXJtQWdncmVnYXRlICZub2RlKQorewor
ICAgIHJldHVybiByZWJ1aWxkSW5QbGFjZUltcGwobm9kZSk7Cit9CisKK2Jvb2wgVEludGVybVJl
YnVpbGQ6OnJlYnVpbGRJblBsYWNlKFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICByZXR1cm4g
cmVidWlsZEluUGxhY2VJbXBsKG5vZGUpOworfQorCitib29sIFRJbnRlcm1SZWJ1aWxkOjpyZWJ1
aWxkSW5QbGFjZShUSW50ZXJtRGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIHJlYnVp
bGRJblBsYWNlSW1wbChub2RlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+Citib29s
IFRJbnRlcm1SZWJ1aWxkOjpyZWJ1aWxkSW5QbGFjZUltcGwoTm9kZSAmbm9kZSkKK3sKKyAgICBh
dXRvICpuZXdOb2RlID0gdHJhdmVyc2VBbnlBczxOb2RlPihub2RlKTsKKyAgICBpZiAoIW5ld05v
ZGUpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG5ld05v
ZGUgIT0gJm5vZGUpCisgICAgeworICAgICAgICAqbm9kZS5nZXRTZXF1ZW5jZSgpID0gc3RkOjpt
b3ZlKCpuZXdOb2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6cmVidWlsZChUSW50ZXJtTm9kZSAmbm9k
ZSkKK3sKKyAgICByZXR1cm4gdHJhdmVyc2VBbnkobm9kZSk7Cit9CisKKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBOb2RlPgorTm9kZSAqVEludGVybVJlYnVp
bGQ6OnRyYXZlcnNlQW55QXMoVEludGVybU5vZGUgJm5vZGUpCit7CisgICAgUG9zdFJlc3VsdCBy
ZXN1bHQodHJhdmVyc2VBbnkobm9kZSkpOworICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rp
b246OkZhaWwgfHwgIXJlc3VsdC5tU2luZ2xlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIHJldHVybiBhc05vZGU8Tm9kZT4ocmVzdWx0Lm1TaW5nbGUpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgTm9kZT4KK2Jvb2wgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNl
QW55QXMoVEludGVybU5vZGUgJm5vZGUsIE5vZGUgKiZvdXQpCit7CisgICAgUG9zdFJlc3VsdCBy
ZXN1bHQodHJhdmVyc2VBbnkobm9kZSkpOworICAgIGlmIChyZXN1bHQubUFjdGlvbiA9PSBBY3Rp
b246OkZhaWwgfHwgcmVzdWx0Lm1BY3Rpb24gPT0gQWN0aW9uOjpSZXBsYWNlTXVsdGkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghcmVzdWx0Lm1TaW5nbGUp
CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgb3V0ID0gYXNOb2RlPE5v
ZGU+KHJlc3VsdC5tU2luZ2xlKTsKKyAgICByZXR1cm4gb3V0OworfQorCitib29sIFRJbnRlcm1S
ZWJ1aWxkOjp0cmF2ZXJzZUFnZ3JlZ2F0ZUJhc2VDaGlsZHJlbihUSW50ZXJtQWdncmVnYXRlQmFz
ZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBjaGlsZHJlbiA9IG5vZGUuZ2V0U2VxdWVuY2Uo
KTsKKyAgICBBU1NFUlQoY2hpbGRyZW4pOworICAgIFRJbnRlcm1TZXF1ZW5jZSBuZXdDaGlsZHJl
bjsKKworICAgIGZvciAoVEludGVybU5vZGUgKmNoaWxkIDogKmNoaWxkcmVuKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGNoaWxkKTsKKyAgICAgICAgUG9zdFJlc3VsdCByZXN1bHQodHJhdmVyc2VB
bnkoKmNoaWxkKSk7CisKKyAgICAgICAgc3dpdGNoIChyZXN1bHQubUFjdGlvbikKKyAgICAgICAg
eworICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VTaW5nbGU6CisgICAgICAgICAgICAg
ICAgbmV3Q2hpbGRyZW4ucHVzaF9iYWNrKHJlc3VsdC5tU2luZ2xlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBY3Rpb246OlJlcGxhY2VNdWx0aToKKyAgICAg
ICAgICAgICAgICBmb3IgKFRJbnRlcm1Ob2RlICpuZXdOb2RlIDogcmVzdWx0Lm1NdWx0aSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNo
X2JhY2sobmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQWN0aW9uOjpEcm9w
OgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFjdGlvbjo6RmFp
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAqY2hpbGRyZW4gPSBzdGQ6Om1vdmUobmV3Q2hpbGRyZW4pOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3N0cnVjdCBUSW50ZXJtUmVidWlsZDo6
Tm9kZVN0YWNrR3VhcmQKK3sKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiBvbGROb2RlU3Rh
Y2s7CisgICAgQ29uc0xpc3Q8VEludGVybU5vZGUgKj4gJm5vZGVTdGFjazsKKyAgICBOb2RlU3Rh
Y2tHdWFyZChDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiAmbm9kZVN0YWNrKQorICAgICAgICA6IG9s
ZE5vZGVTdGFjayhub2RlU3RhY2spLCBub2RlU3RhY2sobm9kZVN0YWNrKQorICAgIHt9CisgICAg
fk5vZGVTdGFja0d1YXJkKCkgeyBub2RlU3RhY2sgPSBvbGROb2RlU3RhY2s7IH0KK307CisKK1Bv
c3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQW55KFRJbnRlcm1Ob2RlICZvcmlnaW5h
bE5vZGUpCit7CisgICAgUHJlUmVzdWx0IHByZVJlc3VsdCA9IHRyYXZlcnNlUHJlKG9yaWdpbmFs
Tm9kZSk7CisgICAgaWYgKCFwcmVSZXN1bHQubVNpbmdsZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChwcmVSZXN1bHQubVZpc2l0ID09IFZpc2l0Qml0czo6TmVpdGhlcik7CisgICAgICAgIHJldHVy
biBzdGQ6Om1vdmUocHJlUmVzdWx0KTsKKyAgICB9CisKKyAgICBUSW50ZXJtTm9kZSAqY3Vyck5v
ZGUgICAgICAgPSBwcmVSZXN1bHQubVNpbmdsZTsKKyAgICBjb25zdCBWaXNpdEJpdHMgdmlzaXQg
ICAgICAgPSBwcmVSZXN1bHQubVZpc2l0OworICAgIGNvbnN0IE5vZGVUeXBlIGN1cnJOb2RlVHlw
ZSA9IGdldE5vZGVUeXBlKCpjdXJyTm9kZSk7CisKKyAgICBjdXJyTm9kZSA9IHRyYXZlcnNlQ2hp
bGRyZW4oY3Vyck5vZGVUeXBlLCBvcmlnaW5hbE5vZGUsICpjdXJyTm9kZSwgdmlzaXQpOworICAg
IGlmICghY3Vyck5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gRmFpbCgpOworICAgIH0KKwor
ICAgIHJldHVybiB0cmF2ZXJzZVBvc3QoY3Vyck5vZGVUeXBlLCBvcmlnaW5hbE5vZGUsICpjdXJy
Tm9kZSwgdmlzaXQpOworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlUHJl
KFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUpCit7CisgICAgaWYgKCFtUHJlVmlzaXQpCisgICAg
eworICAgICAgICByZXR1cm4ge29yaWdpbmFsTm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKKyAgICB9
CisKKyAgICBOb2RlU3RhY2tHdWFyZCBndWFyZChtTm9kZVN0YWNrKTsKKyAgICBtTm9kZVN0YWNr
ID0geyZvcmlnaW5hbE5vZGUsICZndWFyZC5vbGROb2RlU3RhY2t9OworCisgICAgY29uc3QgTm9k
ZVR5cGUgb3JpZ2luYWxOb2RlVHlwZSA9IGdldE5vZGVUeXBlKG9yaWdpbmFsTm9kZSk7CisKKyAg
ICBzd2l0Y2ggKG9yaWdpbmFsTm9kZVR5cGUpCisgICAgeworICAgICAgICBjYXNlIE5vZGVUeXBl
OjpVbmtub3duOgorICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVy
biBGYWlsKCk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHJl
dHVybiB2aXNpdFN5bWJvbFByZSgqb3JpZ2luYWxOb2RlLmdldEFzU3ltYm9sTm9kZSgpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6Q29uc3RhbnRVbmlvbjoKKyAgICAgICAgICAgIHJldHVybiB2
aXNpdENvbnN0YW50VW5pb25QcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0NvbnN0YW50VW5pb24oKSk7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOgorICAgICAgICAgICAg
cmV0dXJuIHZpc2l0RnVuY3Rpb25Qcm90b3R5cGVQcmUoKm9yaWdpbmFsTm9kZS5nZXRBc0Z1bmN0
aW9uUHJvdG90eXBlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6UHJlcHJvY2Vzc29y
RGlyZWN0aXZlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZl
UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNQcmVwcm9jZXNzb3JEaXJlY3RpdmUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlVuYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0VW5hcnlQcmUo
Km9yaWdpbmFsTm9kZS5nZXRBc1VuYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6
QmluYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QmluYXJ5UHJlKCpvcmlnaW5hbE5vZGUu
Z2V0QXNCaW5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpUZXJuYXJ5OgorICAg
ICAgICAgICAgcmV0dXJuIHZpc2l0VGVybmFyeVByZSgqb3JpZ2luYWxOb2RlLmdldEFzVGVybmFy
eU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6CisgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRTd2l6emxlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNTd2l6emxlTm9kZSgpKTsK
KyAgICAgICAgY2FzZSBOb2RlVHlwZTo6SWZFbHNlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0
SWZFbHNlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNJZkVsc2VOb2RlKCkpOworICAgICAgICBjYXNl
IE5vZGVUeXBlOjpTd2l0Y2g6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTd2l0Y2hQcmUoKm9y
aWdpbmFsTm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNh
c2U6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRDYXNlUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXND
YXNlTm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RnVuY3Rpb25EZWZpbml0aW9uOgor
ICAgICAgICAgICAgcmV0dXJuIHZpc2l0RnVuY3Rpb25EZWZpbml0aW9uUHJlKCpvcmlnaW5hbE5v
ZGUuZ2V0QXNGdW5jdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkFn
Z3JlZ2F0ZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEFnZ3JlZ2F0ZVByZSgqb3JpZ2luYWxO
b2RlLmdldEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpCbG9jazoKKyAg
ICAgICAgICAgIHJldHVybiB2aXNpdEJsb2NrUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCbG9jaygp
KTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb246Cisg
ICAgICAgICAgICByZXR1cm4gdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvblByZSgKKyAg
ICAgICAgICAgICAgICAqb3JpZ2luYWxOb2RlLmdldEFzR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRp
b25Ob2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpEZWNsYXJhdGlvbjoKKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdERlY2xhcmF0aW9uUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNEZWNsYXJh
dGlvbk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okxvb3A6CisgICAgICAgICAgICBy
ZXR1cm4gdmlzaXRMb29wUHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNMb29wTm9kZSgpKTsKKyAgICAg
ICAgY2FzZSBOb2RlVHlwZTo6QnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0QnJhbmNo
UHJlKCpvcmlnaW5hbE5vZGUuZ2V0QXNCcmFuY2hOb2RlKCkpOworICAgIH0KK30KKworVEludGVy
bU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUNoaWxkcmVuKE5vZGVUeXBlIGN1cnJOb2Rl
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpCit7CisgICAg
aWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OkNoaWxkcmVuKSkKKyAgICB7CisgICAgICAg
IHJldHVybiAmY3Vyck5vZGU7CisgICAgfQorCisgICAgaWYgKEFueUJpdHModmlzaXQsIFZpc2l0
Qml0czo6Q2hpbGRyZW5SZXF1aXJlc1NhbWUpICYmICZvcmlnaW5hbE5vZGUgIT0gJmN1cnJOb2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICZjdXJyTm9kZTsKKyAgICB9CisKKyAgICBOb2RlU3Rh
Y2tHdWFyZCBndWFyZChtTm9kZVN0YWNrKTsKKyAgICBtTm9kZVN0YWNrID0geyZjdXJyTm9kZSwg
Jmd1YXJkLm9sZE5vZGVTdGFja307CisKKyAgICBzd2l0Y2ggKGN1cnJOb2RlVHlwZSkKKyAgICB7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlVua25vd246CisgICAgICAgICAgICBBU1NFUlQoZmFs
c2UpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OlN5bWJvbDoKKyAgICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkNvbnN0YW50VW5pb246CisgICAgICAgICAgICByZXR1cm4gJmN1cnJOb2RlOworICAg
ICAgICBjYXNlIE5vZGVUeXBlOjpGdW5jdGlvblByb3RvdHlwZToKKyAgICAgICAgICAgIHJldHVy
biAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2
ZToKKyAgICAgICAgICAgIHJldHVybiAmY3Vyck5vZGU7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6
OlVuYXJ5OgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVW5hcnlDaGlsZHJlbigqY3Vyck5v
ZGUuZ2V0QXNVbmFyeU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKyAg
ICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0Jp
bmFyeU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlRlcm5hcnk6CisgICAgICAgICAg
ICByZXR1cm4gdHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzVGVybmFyeU5v
ZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OlN3aXp6bGU6CisgICAgICAgICAgICByZXR1
cm4gdHJhdmVyc2VTd2l6emxlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzU3dpenpsZU5vZGUoKSk7
CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKyAgICAgICAgICAgIHJldHVybiB0cmF2
ZXJzZUlmRWxzZUNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0lmRWxzZU5vZGUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlN3aXRjaDoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVN3aXRj
aENoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc1N3aXRjaE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkNhc2U6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VDYXNlQ2hpbGRyZW4oKmN1
cnJOb2RlLmdldEFzQ2FzZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9u
RGVmaW5pdGlvbjoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUZ1bmN0aW9uRGVmaW5pdGlv
bkNoaWxkcmVuKCpjdXJyTm9kZS5nZXRBc0Z1bmN0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAg
Y2FzZSBOb2RlVHlwZTo6QWdncmVnYXRlOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlQWdn
cmVnYXRlQ2hpbGRyZW4oKmN1cnJOb2RlLmdldEFzQWdncmVnYXRlKCkpOworICAgICAgICBjYXNl
IE5vZGVUeXBlOjpCbG9jazoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJsb2NrQ2hpbGRy
ZW4oKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2Jh
bFF1YWxpZmllckRlY2xhcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlR2xvYmFs
UXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAqY3Vyck5vZGUu
Z2V0QXNHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbk5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9k
ZVR5cGU6OkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNlRGVjbGFyYXRp
b25DaGlsZHJlbigqY3Vyck5vZGUuZ2V0QXNEZWNsYXJhdGlvbk5vZGUoKSk7CisgICAgICAgIGNh
c2UgTm9kZVR5cGU6Okxvb3A6CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2VMb29wQ2hpbGRy
ZW4oKmN1cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkJy
YW5jaDoKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJyYW5jaENoaWxkcmVuKCpjdXJyTm9k
ZS5nZXRBc0JyYW5jaE5vZGUoKSk7CisgICAgfQorfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp0cmF2ZXJzZVBvc3QoTm9kZVR5cGUgY3Vyck5vZGVUeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUgJmN1
cnJOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0
cyB2aXNpdCkKK3sKKyAgICBpZiAoIW1Qb3N0VmlzaXQpCisgICAgeworICAgICAgICByZXR1cm4g
Y3Vyck5vZGU7CisgICAgfQorCisgICAgaWYgKCFBbnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OlBv
c3QpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworICAgIH0KKworICAgIGlmIChB
bnlCaXRzKHZpc2l0LCBWaXNpdEJpdHM6OlBvc3RSZXF1aXJlc1NhbWUpICYmICZvcmlnaW5hbE5v
ZGUgIT0gJmN1cnJOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGN1cnJOb2RlOworICAgIH0K
KworICAgIE5vZGVTdGFja0d1YXJkIGd1YXJkKG1Ob2RlU3RhY2spOworICAgIG1Ob2RlU3RhY2sg
PSB7JmN1cnJOb2RlLCAmZ3VhcmQub2xkTm9kZVN0YWNrfTsKKworICAgIHN3aXRjaCAoY3Vyck5v
ZGVUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6VW5rbm93bjoKKyAgICAgICAg
ICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gRmFpbCgpOworICAgICAgICBj
YXNlIE5vZGVUeXBlOjpTeW1ib2w6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRTeW1ib2xQb3N0
KCpjdXJyTm9kZS5nZXRBc1N5bWJvbE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkNv
bnN0YW50VW5pb246CisgICAgICAgICAgICByZXR1cm4gdmlzaXRDb25zdGFudFVuaW9uUG9zdCgq
Y3Vyck5vZGUuZ2V0QXNDb25zdGFudFVuaW9uKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpG
dW5jdGlvblByb3RvdHlwZToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEZ1bmN0aW9uUHJvdG90
eXBlUG9zdCgqY3Vyck5vZGUuZ2V0QXNGdW5jdGlvblByb3RvdHlwZU5vZGUoKSk7CisgICAgICAg
IGNhc2UgTm9kZVR5cGU6OlByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAgICAgICAgIHJldHVy
biB2aXNpdFByZXByb2Nlc3NvckRpcmVjdGl2ZVBvc3QoKmN1cnJOb2RlLmdldEFzUHJlcHJvY2Vz
c29yRGlyZWN0aXZlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpVbmFyeToKKyAgICAgICAg
ICAgIHJldHVybiB2aXNpdFVuYXJ5UG9zdCgqY3Vyck5vZGUuZ2V0QXNVbmFyeU5vZGUoKSk7Cisg
ICAgICAgIGNhc2UgTm9kZVR5cGU6OkJpbmFyeToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJp
bmFyeVBvc3QoKmN1cnJOb2RlLmdldEFzQmluYXJ5Tm9kZSgpKTsKKyAgICAgICAgY2FzZSBOb2Rl
VHlwZTo6VGVybmFyeToKKyAgICAgICAgICAgIHJldHVybiB2aXNpdFRlcm5hcnlQb3N0KCpjdXJy
Tm9kZS5nZXRBc1Rlcm5hcnlOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpTd2l6emxl
OgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dpenpsZVBvc3QoKmN1cnJOb2RlLmdldEFzU3dp
enpsZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OklmRWxzZToKKyAgICAgICAgICAg
IHJldHVybiB2aXNpdElmRWxzZVBvc3QoKmN1cnJOb2RlLmdldEFzSWZFbHNlTm9kZSgpKTsKKyAg
ICAgICAgY2FzZSBOb2RlVHlwZTo6U3dpdGNoOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0U3dp
dGNoUG9zdCgqY3Vyck5vZGUuZ2V0QXNTd2l0Y2hOb2RlKCkpOworICAgICAgICBjYXNlIE5vZGVU
eXBlOjpDYXNlOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0Q2FzZVBvc3QoKmN1cnJOb2RlLmdl
dEFzQ2FzZU5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlv
bjoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoKmN1cnJO
b2RlLmdldEFzRnVuY3Rpb25EZWZpbml0aW9uKCkpOworICAgICAgICBjYXNlIE5vZGVUeXBlOjpB
Z2dyZWdhdGU6CisgICAgICAgICAgICByZXR1cm4gdmlzaXRBZ2dyZWdhdGVQb3N0KCpjdXJyTm9k
ZS5nZXRBc0FnZ3JlZ2F0ZSgpKTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6QmxvY2s6CisgICAg
ICAgICAgICByZXR1cm4gdmlzaXRCbG9ja1Bvc3QoKmN1cnJOb2RlLmdldEFzQmxvY2soKSk7Cisg
ICAgICAgIGNhc2UgTm9kZVR5cGU6Okdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uOgorICAgICAg
ICAgICAgcmV0dXJuIHZpc2l0R2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb25Qb3N0KAorICAgICAg
ICAgICAgICAgICpjdXJyTm9kZS5nZXRBc0dsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uTm9kZSgp
KTsKKyAgICAgICAgY2FzZSBOb2RlVHlwZTo6RGVjbGFyYXRpb246CisgICAgICAgICAgICByZXR1
cm4gdmlzaXREZWNsYXJhdGlvblBvc3QoKmN1cnJOb2RlLmdldEFzRGVjbGFyYXRpb25Ob2RlKCkp
OworICAgICAgICBjYXNlIE5vZGVUeXBlOjpMb29wOgorICAgICAgICAgICAgcmV0dXJuIHZpc2l0
TG9vcFBvc3QoKmN1cnJOb2RlLmdldEFzTG9vcE5vZGUoKSk7CisgICAgICAgIGNhc2UgTm9kZVR5
cGU6OkJyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiB2aXNpdEJyYW5jaFBvc3QoKmN1cnJOb2Rl
LmdldEFzQnJhbmNoTm9kZSgpKTsKKyAgICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VBZ2dyZWdhdGVDaGlsZHJl
bihUSW50ZXJtQWdncmVnYXRlICZub2RlKQoreworICAgIGlmICh0cmF2ZXJzZUFnZ3JlZ2F0ZUJh
c2VDaGlsZHJlbihub2RlKSkKKyAgICB7CisgICAgICAgIHJldHVybiAmbm9kZTsKKyAgICB9Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJh
dmVyc2VCbG9ja0NoaWxkcmVuKFRJbnRlcm1CbG9jayAmbm9kZSkKK3sKKyAgICBpZiAodHJhdmVy
c2VBZ2dyZWdhdGVCYXNlQ2hpbGRyZW4obm9kZSkpCisgICAgeworICAgICAgICByZXR1cm4gJm5v
ZGU7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitUSW50ZXJtTm9kZSAqVEludGVy
bVJlYnVpbGQ6OnRyYXZlcnNlRGVjbGFyYXRpb25DaGlsZHJlbihUSW50ZXJtRGVjbGFyYXRpb24g
Jm5vZGUpCit7CisgICAgaWYgKHRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKG5vZGUpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICZub2RlOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZVN3aXp6bGVDaGlsZHJl
bihUSW50ZXJtU3dpenpsZSAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBvcGVyYW5kID0gbm9k
ZS5nZXRPcGVyYW5kKCk7CisgICAgQVNTRVJUKG9wZXJhbmQpOworCisgICAgYXV0byAqbmV3T3Bl
cmFuZCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqb3BlcmFuZCk7CisgICAgR1VBUkQo
bmV3T3BlcmFuZCk7CisKKyAgICBpZiAobmV3T3BlcmFuZCAhPSBvcGVyYW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3dpenpsZShuZXdPcGVyYW5kLCBub2RlLmdldFN3aXp6
bGVPZmZzZXRzKCkpOworICAgIH0KKworICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5v
ZGUgKlRJbnRlcm1SZWJ1aWxkOjp0cmF2ZXJzZUJpbmFyeUNoaWxkcmVuKFRJbnRlcm1CaW5hcnkg
Jm5vZGUpCit7CisgICAgYXV0byAqY29uc3QgbGVmdCA9IG5vZGUuZ2V0TGVmdCgpOworICAgIEFT
U0VSVChsZWZ0KTsKKyAgICBhdXRvICpjb25zdCByaWdodCA9IG5vZGUuZ2V0UmlnaHQoKTsKKyAg
ICBBU1NFUlQocmlnaHQpOworCisgICAgYXV0byAqY29uc3QgbmV3TGVmdCA9IHRyYXZlcnNlQW55
QXM8VEludGVybVR5cGVkPigqbGVmdCk7CisgICAgR1VBUkQobmV3TGVmdCk7CisgICAgYXV0byAq
Y29uc3QgbmV3UmlnaHQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKnJpZ2h0KTsKKyAg
ICBHVUFSRChuZXdSaWdodCk7CisKKyAgICBpZiAobmV3TGVmdCAhPSBsZWZ0IHx8IG5ld1JpZ2h0
ICE9IHJpZ2h0KQorICAgIHsKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gbm9kZS5nZXRPcCgpOwor
ICAgICAgICBzd2l0Y2ggKG9wKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRPcGVyYXRv
cjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aWYgKG5ld0xlZnQtPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3AgPSBUT3BlcmF0b3I6OkVPcEluZGV4RGlyZWN0
SW50ZXJmYWNlQmxvY2s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BJbmRleERpcmVj
dEludGVyZmFjZUJsb2NrOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuZXdM
ZWZ0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBvcCA9IFRPcGVyYXRvcjo6RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDb21tYToKKyAgICAgICAgICAgICAgICByZXR1cm4gVElu
dGVybUJpbmFyeTo6Q3JlYXRlQ29tbWEobmV3TGVmdCwgbmV3UmlnaHQsIG1Db21waWxlci5nZXRT
aGFkZXJWZXJzaW9uKCkpOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtQmluYXJ5KG9w
LCBuZXdMZWZ0LCBuZXdSaWdodCk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitU
SW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlVW5hcnlDaGlsZHJlbihUSW50ZXJt
VW5hcnkgJm5vZGUpCit7CisgICAgYXV0byAqY29uc3Qgb3BlcmFuZCA9IG5vZGUuZ2V0T3BlcmFu
ZCgpOworICAgIEFTU0VSVChvcGVyYW5kKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld09wZXJhbmQg
PSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKm9wZXJhbmQpOworICAgIEdVQVJEKG5ld09w
ZXJhbmQpOworCisgICAgaWYgKG5ld09wZXJhbmQgIT0gb3BlcmFuZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgVEludGVybVVuYXJ5KG5vZGUuZ2V0T3AoKSwgbmV3T3BlcmFuZCwgbm9kZS5n
ZXRGdW5jdGlvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1O
b2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VUZXJuYXJ5Q2hpbGRyZW4oVEludGVybVRlcm5h
cnkgJm5vZGUpCit7CisgICAgYXV0byAqY29uc3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7
CisgICAgQVNTRVJUKGNvbmQpOworICAgIGF1dG8gKmNvbnN0IHRydWVfID0gbm9kZS5nZXRUcnVl
RXhwcmVzc2lvbigpOworICAgIEFTU0VSVCh0cnVlXyk7CisgICAgYXV0byAqY29uc3QgZmFsc2Vf
ID0gbm9kZS5nZXRGYWxzZUV4cHJlc3Npb24oKTsKKyAgICBBU1NFUlQoZmFsc2VfKTsKKworICAg
IGF1dG8gKmNvbnN0IG5ld0NvbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmNvbmQp
OworICAgIEdVQVJEKG5ld0NvbmQpOworICAgIGF1dG8gKmNvbnN0IG5ld1RydWUgPSB0cmF2ZXJz
ZUFueUFzPFRJbnRlcm1UeXBlZD4oKnRydWVfKTsKKyAgICBHVUFSRChuZXdUcnVlKTsKKyAgICBh
dXRvICpjb25zdCBuZXdGYWxzZSA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqZmFsc2Vf
KTsKKyAgICBHVUFSRChuZXdGYWxzZSk7CisKKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5l
d1RydWUgIT0gdHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG5ldyBUSW50ZXJtVGVybmFyeShuZXdDb25kLCBuZXdUcnVlLCBuZXdGYWxzZSk7CisgICAg
fQorCisgICAgcmV0dXJuICZub2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6
OnRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oVEludGVybUlmRWxzZSAmbm9kZSkKK3sKKyAgICBhdXRv
ICpjb25zdCBjb25kID0gbm9kZS5nZXRDb25kaXRpb24oKTsKKyAgICBBU1NFUlQoY29uZCk7Cisg
ICAgYXV0byAqY29uc3QgdHJ1ZV8gID0gbm9kZS5nZXRUcnVlQmxvY2soKTsKKyAgICBhdXRvICpj
b25zdCBmYWxzZV8gPSBub2RlLmdldEZhbHNlQmxvY2soKTsKKworICAgIGF1dG8gKmNvbnN0IG5l
d0NvbmQgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1UeXBlZD4oKmNvbmQpOworICAgIEdVQVJEKG5l
d0NvbmQpOworICAgIFRJbnRlcm1CbG9jayAqbmV3VHJ1ZSA9IG51bGxwdHI7CisgICAgaWYgKHRy
dWVfKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqdHJ1ZV8sIG5ld1RydWUp
KTsKKyAgICB9CisgICAgVEludGVybUJsb2NrICpuZXdGYWxzZSA9IG51bGxwdHI7CisgICAgaWYg
KGZhbHNlXykKKyAgICB7CisgICAgICAgIEdVQVJEKHRyYXZlcnNlQW55QXMoKmZhbHNlXywgbmV3
RmFsc2UpKTsKKyAgICB9CisKKyAgICBpZiAobmV3Q29uZCAhPSBjb25kIHx8IG5ld1RydWUgIT0g
dHJ1ZV8gfHwgbmV3RmFsc2UgIT0gZmFsc2VfKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBU
SW50ZXJtSWZFbHNlKG5ld0NvbmQsIG5ld1RydWUsIG5ld0ZhbHNlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6dHJhdmVyc2VT
d2l0Y2hDaGlsZHJlbihUSW50ZXJtU3dpdGNoICZub2RlKQoreworICAgIGF1dG8gKmNvbnN0IGlu
aXQgPSBub2RlLmdldEluaXQoKTsKKyAgICBBU1NFUlQoaW5pdCk7CisgICAgYXV0byAqY29uc3Qg
c3RtdHMgPSBub2RlLmdldFN0YXRlbWVudExpc3QoKTsKKyAgICBBU1NFUlQoc3RtdHMpOworCisg
ICAgYXV0byAqY29uc3QgbmV3SW5pdCA9IHRyYXZlcnNlQW55QXM8VEludGVybVR5cGVkPigqaW5p
dCk7CisgICAgR1VBUkQobmV3SW5pdCk7CisgICAgYXV0byAqY29uc3QgbmV3U3RtdHMgPSB0cmF2
ZXJzZUFueUFzPFRJbnRlcm1CbG9jaz4oKnN0bXRzKTsKKyAgICBHVUFSRChuZXdTdG10cyk7CisK
KyAgICBpZiAobmV3SW5pdCAhPSBpbml0IHx8IG5ld1N0bXRzICE9IHN0bXRzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtU3dpdGNoKG5ld0luaXQsIG5ld1N0bXRzKTsKKyAgICB9
CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKK1RJbnRlcm1Ob2RlICpUSW50ZXJtUmVidWlsZDo6
dHJhdmVyc2VDYXNlQ2hpbGRyZW4oVEludGVybUNhc2UgJm5vZGUpCit7CisgICAgYXV0byAqY29u
c3QgY29uZCA9IG5vZGUuZ2V0Q29uZGl0aW9uKCk7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld0Nv
bmQgPSBudWxscHRyOworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVy
c2VBbnlBcygqY29uZCwgbmV3Q29uZCkpOworICAgIH0KKworICAgIGlmIChuZXdDb25kICE9IGNv
bmQpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFRJbnRlcm1DYXNlKG5ld0NvbmQpOworICAg
IH0KKworICAgIHJldHVybiAmbm9kZTsKK30KKworVEludGVybU5vZGUgKlRJbnRlcm1SZWJ1aWxk
Ojp0cmF2ZXJzZUZ1bmN0aW9uRGVmaW5pdGlvbkNoaWxkcmVuKFRJbnRlcm1GdW5jdGlvbkRlZmlu
aXRpb24gJm5vZGUpCit7CisgICAgR1VBUkQoIW1QYXJlbnRGdW5jKTsgIC8vIEZ1bmN0aW9uIGRl
ZmluaXRpb25zIGNhbm5vdCBiZSBuZXN0ZWQuCisgICAgbVBhcmVudEZ1bmMgPSBub2RlLmdldEZ1
bmN0aW9uKCk7CisgICAgc3RydWN0IE9uRXhpdAorICAgIHsKKyAgICAgICAgY29uc3QgVEZ1bmN0
aW9uIComcGFyZW50RnVuYzsKKyAgICAgICAgT25FeGl0KGNvbnN0IFRGdW5jdGlvbiAqJnBhcmVu
dEZ1bmMpIDogcGFyZW50RnVuYyhwYXJlbnRGdW5jKSB7fQorICAgICAgICB+T25FeGl0KCkgeyBw
YXJlbnRGdW5jID0gbnVsbHB0cjsgfQorICAgIH0gb25FeGl0KG1QYXJlbnRGdW5jKTsKKworICAg
IGF1dG8gKmNvbnN0IHByb3RvID0gbm9kZS5nZXRGdW5jdGlvblByb3RvdHlwZSgpOworICAgIEFT
U0VSVChwcm90byk7CisgICAgYXV0byAqY29uc3QgYm9keSA9IG5vZGUuZ2V0Qm9keSgpOworICAg
IEFTU0VSVChib2R5KTsKKworICAgIGF1dG8gKmNvbnN0IG5ld1Byb3RvID0gdHJhdmVyc2VBbnlB
czxUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGU+KCpwcm90byk7CisgICAgR1VBUkQobmV3UHJvdG8p
OworICAgIGF1dG8gKmNvbnN0IG5ld0JvZHkgPSB0cmF2ZXJzZUFueUFzPFRJbnRlcm1CbG9jaz4o
KmJvZHkpOworICAgIEdVQVJEKG5ld0JvZHkpOworCisgICAgaWYgKG5ld1Byb3RvICE9IHByb3Rv
IHx8IG5ld0JvZHkgIT0gYm9keSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUZ1
bmN0aW9uRGVmaW5pdGlvbihuZXdQcm90bywgbmV3Qm9keSk7CisgICAgfQorCisgICAgcmV0dXJu
ICZub2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlR2xvYmFs
UXVhbGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVy
RGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgYXV0byAqY29uc3Qgc3ltYm9sID0gbm9kZS5nZXRT
eW1ib2woKTsKKyAgICBBU1NFUlQoc3ltYm9sKTsKKworICAgIGF1dG8gKmNvbnN0IG5ld1N5bWJv
bCA9IHRyYXZlcnNlQW55QXM8VEludGVybVN5bWJvbD4oKnN5bWJvbCk7CisgICAgR1VBUkQobmV3
U3ltYm9sKTsKKworICAgIGlmIChuZXdTeW1ib2wgIT0gc3ltYm9sKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24obmV3U3ltYm9sLCBu
b2RlLmlzUHJlY2lzZSgpLCBub2RlLmdldExpbmUoKSk7CisgICAgfQorCisgICAgcmV0dXJuICZu
b2RlOworfQorCitUSW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlTG9vcENoaWxk
cmVuKFRJbnRlcm1Mb29wICZub2RlKQoreworICAgIGNvbnN0IFRMb29wVHlwZSBsb29wVHlwZSA9
IG5vZGUuZ2V0VHlwZSgpOworCisgICAgYXV0byAqY29uc3QgaW5pdCA9IG5vZGUuZ2V0SW5pdCgp
OworICAgIGF1dG8gKmNvbnN0IGNvbmQgPSBub2RlLmdldENvbmRpdGlvbigpOworICAgIGF1dG8g
KmNvbnN0IGV4cHIgPSBub2RlLmdldEV4cHJlc3Npb24oKTsKKyAgICBhdXRvICpjb25zdCBib2R5
ID0gbm9kZS5nZXRCb2R5KCk7CisgICAgQVNTRVJUKGJvZHkpOworCisjaWYgZGVmaW5lZChBTkdM
RV9FTkFCTEVfQVNTRVJUUykKKyAgICBzd2l0Y2ggKGxvb3BUeXBlKQorICAgIHsKKyAgICAgICAg
Y2FzZSBUTG9vcFR5cGU6OkVMb29wRm9yOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVExvb3BUeXBlOjpFTG9vcFdoaWxlOgorICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BE
b1doaWxlOgorICAgICAgICAgICAgQVNTRVJUKGNvbmQpOworICAgICAgICAgICAgQVNTRVJUKCFp
bml0ICYmICFleHByKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAg
YXV0byAqY29uc3QgbmV3Qm9keSA9IHRyYXZlcnNlQW55QXM8VEludGVybUJsb2NrPigqYm9keSk7
CisgICAgR1VBUkQobmV3Qm9keSk7CisgICAgVEludGVybU5vZGUgKm5ld0luaXQgPSBudWxscHRy
OworICAgIGlmIChpbml0KQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqaW5p
dCwgbmV3SW5pdCkpOworICAgIH0KKyAgICBUSW50ZXJtVHlwZWQgKm5ld0NvbmQgPSBudWxscHRy
OworICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqY29u
ZCwgbmV3Q29uZCkpOworICAgIH0KKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRy
OworICAgIGlmIChleHByKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBcygqZXhw
ciwgbmV3RXhwcikpOworICAgIH0KKworICAgIGlmIChuZXdJbml0ICE9IGluaXQgfHwgbmV3Q29u
ZCAhPSBjb25kIHx8IG5ld0V4cHIgIT0gZXhwciB8fCBuZXdCb2R5ICE9IGJvZHkpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGxvb3BUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIFRM
b29wVHlwZTo6RUxvb3BGb3I6CisgICAgICAgICAgICAgICAgR1VBUkQobmV3Qm9keSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRMb29wVHlwZTo6RUxvb3BXaGls
ZToKKyAgICAgICAgICAgIGNhc2UgVExvb3BUeXBlOjpFTG9vcERvV2hpbGU6CisgICAgICAgICAg
ICAgICAgR1VBUkQobmV3Q29uZCAmJiBuZXdCb2R5KTsKKyAgICAgICAgICAgICAgICBHVUFSRCgh
bmV3SW5pdCAmJiAhbmV3RXhwcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5ldyBUSW50ZXJtTG9vcChsb29wVHlwZSwgbmV3SW5pdCwgbmV3Q29u
ZCwgbmV3RXhwciwgbmV3Qm9keSk7CisgICAgfQorCisgICAgcmV0dXJuICZub2RlOworfQorCitU
SW50ZXJtTm9kZSAqVEludGVybVJlYnVpbGQ6OnRyYXZlcnNlQnJhbmNoQ2hpbGRyZW4oVEludGVy
bUJyYW5jaCAmbm9kZSkKK3sKKyAgICBhdXRvICpjb25zdCBleHByID0gbm9kZS5nZXRFeHByZXNz
aW9uKCk7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld0V4cHIgPSBudWxscHRyOworICAgIGlmIChl
eHByKQorICAgIHsKKyAgICAgICAgR1VBUkQodHJhdmVyc2VBbnlBczxUSW50ZXJtVHlwZWQ+KCpl
eHByLCBuZXdFeHByKSk7CisgICAgfQorCisgICAgaWYgKG5ld0V4cHIgIT0gZXhwcikKKyAgICB7
CisgICAgICAgIHJldHVybiBuZXcgVEludGVybUJyYW5jaChub2RlLmdldEZsb3dPcCgpLCBuZXdF
eHByKTsKKyAgICB9CisKKyAgICByZXR1cm4gJm5vZGU7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTeW1ib2xQcmUoVEludGVy
bVN5bWJvbCAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9
CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRDb25zdGFudFVuaW9uUHJlKFRJbnRl
cm1Db25zdGFudFVuaW9uICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpC
b3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90
eXBlUHJlKFRJbnRlcm1GdW5jdGlvblByb3RvdHlwZSAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25v
ZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlz
aXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAm
bm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJl
c3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpCit7
CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVElu
dGVybVJlYnVpbGQ6OnZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpCit7CisgICAg
cmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVSZXN1bHQgVEludGVybVJl
YnVpbGQ6OnZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSkKK3sKKyAgICByZXR1
cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3VsdCBUSW50ZXJtUmVidWls
ZDo6dmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIHJldHVybiB7
bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2
aXNpdElmRWxzZVByZShUSW50ZXJtSWZFbHNlICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwg
VmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFN3
aXRjaFByZShUSW50ZXJtU3dpdGNoICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRC
aXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENhc2VQcmUo
VEludGVybUNhc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9
OworfQorCitQcmVSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0TG9vcFByZShUSW50ZXJtTG9v
cCAmbm9kZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1By
ZVJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRCcmFuY2hQcmUoVEludGVybUJyYW5jaCAmbm9k
ZSkKK3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKK1ByZVJlc3Vs
dCBUSW50ZXJtUmVidWlsZDo6dmlzaXREZWNsYXJhdGlvblByZShUSW50ZXJtRGVjbGFyYXRpb24g
Jm5vZGUpCit7CisgICAgcmV0dXJuIHtub2RlLCBWaXNpdEJpdHM6OkJvdGh9OworfQorCitQcmVS
ZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQcmUoVEludGVybUJsb2NrICZub2RlKQor
eworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEFnZ3JlZ2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKQor
eworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsKK30KKworUHJlUmVzdWx0IFRJ
bnRlcm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25E
ZWZpbml0aW9uICZub2RlKQoreworICAgIHJldHVybiB7bm9kZSwgVmlzaXRCaXRzOjpCb3RofTsK
K30KKworUHJlUmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xh
cmF0aW9uUHJlKAorICAgIFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSkK
K3sKKyAgICByZXR1cm4ge25vZGUsIFZpc2l0Qml0czo6Qm90aH07Cit9CisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0U3ltYm9sUG9z
dChUSW50ZXJtU3ltYm9sICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVz
dWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFu
dFVuaW9uICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRl
cm1SZWJ1aWxkOjp2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUG9zdChUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGUgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVy
bVJlYnVpbGQ6OnZpc2l0UHJlcHJvY2Vzc29yRGlyZWN0aXZlUG9zdChUSW50ZXJtUHJlcHJvY2Vz
c29yRGlyZWN0aXZlICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0
IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFVuYXJ5UG9zdChUSW50ZXJtVW5hcnkgJm5vZGUpCit7Cisg
ICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0Qmlu
YXJ5UG9zdChUSW50ZXJtQmluYXJ5ICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQ
b3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdFRlcm5hcnlQb3N0KFRJbnRlcm1UZXJuYXJ5
ICZub2RlKQoreworICAgIHJldHVybiBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1
aWxkOjp2aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKQoreworICAgIHJldHVy
biBub2RlOworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdElmRWxzZVBvc3Qo
VEludGVybUlmRWxzZSAmbm9kZSkKK3sKKyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3Vs
dCBUSW50ZXJtUmVidWlsZDo6dmlzaXRTd2l0Y2hQb3N0KFRJbnRlcm1Td2l0Y2ggJm5vZGUpCit7
CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0
Q2FzZVBvc3QoVEludGVybUNhc2UgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bv
c3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0TG9vcFBvc3QoVEludGVybUxvb3AgJm5vZGUp
Cit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZp
c2l0QnJhbmNoUG9zdChUSW50ZXJtQnJhbmNoICZub2RlKQoreworICAgIHJldHVybiBub2RlOwor
fQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50
ZXJtRGVjbGFyYXRpb24gJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK1Bvc3RSZXN1
bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0QmxvY2tQb3N0KFRJbnRlcm1CbG9jayAmbm9kZSkKK3sK
KyAgICByZXR1cm4gbm9kZTsKK30KKworUG9zdFJlc3VsdCBUSW50ZXJtUmVidWlsZDo6dmlzaXRB
Z2dyZWdhdGVQb3N0KFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpCit7CisgICAgcmV0dXJuIG5vZGU7
Cit9CisKK1Bvc3RSZXN1bHQgVEludGVybVJlYnVpbGQ6OnZpc2l0RnVuY3Rpb25EZWZpbml0aW9u
UG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2RlKQoreworICAgIHJldHVybiBub2Rl
OworfQorCitQb3N0UmVzdWx0IFRJbnRlcm1SZWJ1aWxkOjp2aXNpdEdsb2JhbFF1YWxpZmllckRl
Y2xhcmF0aW9uUG9zdCgKKyAgICBUSW50ZXJtR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24gJm5v
ZGUpCit7CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBzaApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJl
ZV91dGlsL0ludGVybVJlYnVpbGQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1SZWJ1aWxkLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA5
N2U0MGUzNTU0YjZjMDlmNjZkY2NlY2Q5YmExNWUzNDRmNTJhNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgKQEAgLTAsMCArMSwzMjggQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAy
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYg
Q09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9JTlRFUk1SRUJVSUxEX0hfCisjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXworCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0aWwvSW50ZXJtVHJhdmVyc2UuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9Ob2RlVHlwZS5oIgorCituYW1lc3BhY2Ug
c2gKK3sKKworLy8gV2Fsa3MgdGhlIHRyZWUgdG8gcmVidWlsZCBub2Rlcy4KKy8vIFRoaXMgY2xh
c3MgaXMgaW50ZW5kZWQgdG8gYmUgZGVyaXZlZCB3aXRoIG92ZXJyaWRkZW4gdmlzaXRYWFggZnVu
Y3Rpb25zLgorLy8KKy8vIEVhY2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBoYXZl
IGEgVmlzaXQgcGFyYW1ldGVyIHNpbXBseSBoYXMgdGhlIHZpc2l0b3IgY2FsbGVkCisvLyBleGFj
dGx5IG9uY2UsIHJlZ2FyZGxlc3Mgb2YgKHByZVZpc2l0KSBvciAocG9zdFZpc2l0KSB2YWx1ZXMu
CisKKy8vIEVhY2ggdmlzaXRYWFggZnVuY3Rpb24gdGhhdCBoYXMgYSBWaXNpdCBwYXJhbWV0ZXIg
YmVoYXZlcyBhcyBmb2xsb3dzOgorLy8gICAgKiBJZiAocHJlVmlzaXQpOgorLy8gICAgICAtIFRo
ZSBub2RlIGlzIHZpc2l0ZWQgYmVmb3JlIGNoaWxkcmVuIGFyZSB0cmF2ZXJzZWQuCisvLyAgICAg
IC0gVGhlIHJldHVybmVkIHZhbHVlIGlzIHVzZWQgdG8gcmVwbGFjZSB0aGUgdmlzaXRlZCBub2Rl
LiBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5IGJlIHRoZSBzYW1lCisvLyAgICAgICAgYXMgdGhlIG9y
aWdpbmFsIG5vZGUuCisvLyAgICAgIC0gSWYgbXVsdGlwbGUgbm9kZXMgYXJlIHJldHVybmVkLCBj
aGlsZHJlbiBhbmQgcG9zdCB2aXNpdHMgb2YgdGhlIHJldHVybmVkIG5vZGVzIGFyZSBub3QKKy8v
ICAgICAgICBwcmVmb3JtZWQsIGV2ZW4gaWYgaXQgaXMgYSBzaW5nbGV0b24gY29sbGVjdGlvbi4K
Ky8vICAgICogSWYgKGNoaWxkVmlzaXQpCisvLyAgICAgIC0gSWYgYW55IG5ldyBjaGlsZHJlbiBh
cmUgcmV0dXJuZWQsIHRoZSBub2RlIGlzIGF1dG9tYXRpY2FsbHkgcmVidWlsdCB3aXRoIHRoZSBu
ZXcgY2hpbGRyZW4KKy8vICAgICAgICBiZWZvcmUgcG9zdCB2aXNpdC4KKy8vICAgICAgLSBEZXBl
bmRpbmcgb24gdGhlIHR5cGUgb2YgdGhlIG5vZGUsIG51bGwgY2hpbGRyZW4gbWF5IGJlIGRpc2Nh
cmRlZC4KKy8vICAgICAgLSBJbGwtdHlwZWQgY2hpbGRyZW4gY2F1c2UgcmVidWlsZCBlcnJvcnMu
IElsbC10eXBlZCBtZWFucyB0aGUgbm9kZSB0byBhdXRvbWF0aWNhbGx5IHJlYnVpbGQKKy8vICAg
ICAgICBjYW5ub3QgYWNjZXB0IGEgY2hpbGQgb2YgYSBjZXJ0YWluIHR5cGUgYXMgaW5wdXQgdG8g
aXRzIGNvbnN0cnVjdG9yLgorLy8gICAgICAtIE9ubHkgaW5zdGFuY2VzIG9mIFRJbnRlcm1BZ2dy
ZWdhdGVCYXNlIGNhbiBhY2NlcHQgTXVsdGkgcmVzdWx0cyBmb3IgYW55IG9mIGl0cyBjaGlsZHJl
bi4KKy8vICAgICAgICBJZiBzdXBwbGllZCwgdGhlIG5vZGVzIGFyZSBzcGxpY2VkIGNoaWxkcmVu
IGF0IHRoZSBzcG90IG9mIHRoZSBvcmlnaW5hbCBjaGlsZC4KKy8vICAgICogSWYgKHBvc3RWaXNp
dCkKKy8vICAgICAgLSBUaGUgbm9kZSBpcyB2aXNpdGVkIGFmdGVyIGFueSBjaGlsZHJlbiBhcmUg
dHJhdmVyc2VkLgorLy8gICAgICAtIE9ubHkgYWZ0ZXIgc3VjaCBhIHJlYnVpbGQgKG9yIGxhY2sg
dGhlcmVvZiksIHRoZSBwb3N0LXZpc2l0IGlzIHBlcmZvcm1lZC4KKy8vCisvLyBOb2RlcyBpbiB2
aXNpdCBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgbW9kaWZpZWQgaW4gcGxhY2UsIGluY2x1
ZGluZyBUSW50ZXJtQWdncmVnYXRlQmFzZQorLy8gY2hpbGQgc2VxdWVuY2VzLgorLy8KKy8vIFRo
ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBvZiBhbGwgdGhlIHZpc2l0WFhYIGZ1bmN0aW9ucyBz
dXBwb3J0IGZ1bGwgcHJlIGFuZCBwb3N0IHRyYXZlcnNhbAorLy8gd2l0aG91dCBtb2RpZnlpbmcg
dGhlIHZpc2l0ZWQgbm9kZXMuCisvLworY2xhc3MgVEludGVybVJlYnVpbGQgOiBhbmdsZTo6Tm9u
Q29weWFibGUKK3sKKworICAgIGVudW0gY2xhc3MgQWN0aW9uCisgICAgeworICAgICAgICBSZXBs
YWNlU2luZ2xlLAorICAgICAgICBSZXBsYWNlTXVsdGksCisgICAgICAgIERyb3AsCisgICAgICAg
IEZhaWwsCisgICAgfTsKKworICBwdWJsaWM6CisgICAgc3RydWN0IEZhaWwKKyAgICB7fTsKKwor
ICAgIGVudW0gVmlzaXRCaXRzIDogc2l6ZV90CisgICAgeworICAgICAgICAvLyBObyBiaXRzIGFy
ZSBzZXQuCisgICAgICAgIEVtcHR5ID0gMHUsCisKKyAgICAgICAgLy8gQWxsb3cgdmlzaXQgb2Yg
cmV0dXJuZWQgbm9kZSdzIGNoaWxkcmVuLgorICAgICAgICBDaGlsZHJlbiA9IDF1IDw8IDB1LAor
CisgICAgICAgIC8vIEFsbG93IHBvc3QgdmlzaXQgb2YgcmV0dXJuZWQgbm9kZS4KKyAgICAgICAg
UG9zdCA9IDF1IDw8IDF1LAorCisgICAgICAgIC8vIElmIChDaGlsZHJlbikgYml0LCBvbmx5IHZp
c2l0IGlmIHRoZSByZXR1cm5lZCBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBub2Rl
LgorICAgICAgICBDaGlsZHJlblJlcXVpcmVzU2FtZSA9IDF1IDw8IDJ1LAorCisgICAgICAgIC8v
IElmIChQb3N0KSBiaXQsIG9ubHkgdmlzaXQgaWYgdGhlIHJldHVybmVkIG5vZGUgaXMgdGhlIHNh
bWUgYXMgdGhlIG9yaWdpbmFsIG5vZGUuCisgICAgICAgIFBvc3RSZXF1aXJlc1NhbWUgPSAxdSA8
PCAzdSwKKworICAgICAgICBSZXF1aXJlU2FtZSAgPSBDaGlsZHJlblJlcXVpcmVzU2FtZSB8IFBv
c3RSZXF1aXJlc1NhbWUsCisgICAgICAgIE5laXRoZXIgICAgICA9IEVtcHR5LAorICAgICAgICBC
b3RoICAgICAgICAgPSBDaGlsZHJlbiB8IFBvc3QsCisgICAgICAgIEJvdGhXaGVuU2FtZSA9IEJv
dGggfCBSZXF1aXJlU2FtZSwKKyAgICB9OworCisgIHByaXZhdGU6CisgICAgc3RydWN0IE5vZGVT
dGFja0d1YXJkOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IENvbnNM
aXN0CisgICAgeworICAgICAgICBUIHZhbHVlOworICAgICAgICBDb25zTGlzdDxUPiAqdGFpbDsK
KyAgICB9OworCisgICAgY2xhc3MgQmFzZVJlc3VsdAorICAgIHsKKyAgICAgICAgQmFzZVJlc3Vs
dChjb25zdCBCYXNlUmVzdWx0ICYpID0gZGVsZXRlOworICAgICAgICBCYXNlUmVzdWx0ICZvcGVy
YXRvcj0oY29uc3QgQmFzZVJlc3VsdCAmKSA9IGRlbGV0ZTsKKworICAgICAgcHVibGljOgorICAg
ICAgICBCYXNlUmVzdWx0KEJhc2VSZXN1bHQgJiZvdGhlcikgPSBkZWZhdWx0OworICAgICAgICBC
YXNlUmVzdWx0KEJhc2VSZXN1bHQgJm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGNvbnN0
cnVjdG9yIGltcGxzCisgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgJm5vZGUsIFZpc2l0
Qml0cyB2aXNpdCk7CisgICAgICAgIEJhc2VSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0
Qml0cyB2aXNpdCk7CisgICAgICAgIEJhc2VSZXN1bHQobnVsbHB0cl90KTsKKyAgICAgICAgQmFz
ZVJlc3VsdChGYWlsKTsKKyAgICAgICAgQmFzZVJlc3VsdChzdGQ6OnZlY3RvcjxUSW50ZXJtTm9k
ZSAqPiAmJm5vZGVzKTsKKworICAgICAgICB2b2lkIG1vdmVBc3NpZ25JbXBsKEJhc2VSZXN1bHQg
Jm90aGVyKTsgIC8vIEZvciBzdWJjbGFzcyBtb3ZlIGFzc2lnbiBpbXBscworCisgICAgICAgIHN0
YXRpYyBCYXNlUmVzdWx0IE11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMp
OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorICAgICAgICBzdGF0aWMgQmFz
ZVJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNFbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+IG5vZGVzOworICAgICAgICAg
ICAgZm9yIChJdGVyIG5vZGVzQ3VyciA9IG5vZGVzQmVnaW47IG5vZGVzQ3VyciAhPSBub2Rlc0Vu
ZDsgKytub2Rlc0N1cnIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbm9kZXMucHVz
aF9iYWNrKCpub2Rlc0N1cnIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZShub2Rlcyk7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzRmFpbCgpIGNvbnN0
OworICAgICAgICBib29sIGlzRHJvcCgpIGNvbnN0OworICAgICAgICBUSW50ZXJtTm9kZSAqc2lu
Z2xlKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICpt
dWx0aSgpIGNvbnN0OworCisgICAgICBwdWJsaWM6CisgICAgICAgIEFjdGlvbiBtQWN0aW9uOwor
ICAgICAgICBWaXNpdEJpdHMgbVZpc2l0OworICAgICAgICBUSW50ZXJtTm9kZSAqbVNpbmdsZTsK
KyAgICAgICAgc3RkOjp2ZWN0b3I8VEludGVybU5vZGUgKj4gbU11bHRpOworICAgIH07CisKKyAg
cHVibGljOgorICAgIGNsYXNzIFByZVJlc3VsdCA6IHByaXZhdGUgQmFzZVJlc3VsdAorICAgIHsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIFRJbnRlcm1SZWJ1aWxkOworCisgICAgICBwdWJsaWM6Cisg
ICAgICAgIFByZVJlc3VsdChQcmVSZXN1bHQgJiZvdGhlcik7CisgICAgICAgIFByZVJlc3VsdChU
SW50ZXJtTm9kZSAmbm9kZSwgVmlzaXRCaXRzIHZpc2l0ID0gVmlzaXRCaXRzOjpCb3RoV2hlblNh
bWUpOworICAgICAgICBQcmVSZXN1bHQoVEludGVybU5vZGUgKm5vZGUsIFZpc2l0Qml0cyB2aXNp
dCA9IFZpc2l0Qml0czo6Qm90aFdoZW5TYW1lKTsKKyAgICAgICAgUHJlUmVzdWx0KG51bGxwdHJf
dCk7ICAvLyBVc2VkIHRvIGRyb3AgYSBub2RlLgorICAgICAgICBQcmVSZXN1bHQoRmFpbCk7ICAg
ICAgIC8vIFVzZWQgdG8gc2lnbmFsIGZhaWx1cmUuCisKKyAgICAgICAgdm9pZCBvcGVyYXRvcj0o
UHJlUmVzdWx0ICYmb3RoZXIpOworCisgICAgICAgIHN0YXRpYyBQcmVSZXN1bHQgTXVsdGkoc3Rk
Ojp2ZWN0b3I8VEludGVybU5vZGUgKj4gJiZub2RlcykKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEJhc2VSZXN1bHQ6Ok11bHRpKHN0ZDo6bW92ZShub2RlcykpOworICAgICAgICB9CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXI+CisgICAgICAgIHN0YXRpYyBQcmVSZXN1
bHQgTXVsdGkoSXRlciBub2Rlc0JlZ2luLCBJdGVyIG5vZGVzRW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gQmFzZVJlc3VsdDo6TXVsdGkobm9kZXNCZWdpbiwgbm9kZXNFbmQpOwor
ICAgICAgICB9CisKKyAgICAgICAgdXNpbmcgQmFzZVJlc3VsdDo6aXNEcm9wOworICAgICAgICB1
c2luZyBCYXNlUmVzdWx0Ojppc0ZhaWw7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6Om11bHRp
OworICAgICAgICB1c2luZyBCYXNlUmVzdWx0OjpzaW5nbGU7CisKKyAgICAgIHByaXZhdGU6Cisg
ICAgICAgIFByZVJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIpOworICAgIH07CisKKyAgICBjbGFz
cyBQb3N0UmVzdWx0IDogcHJpdmF0ZSBCYXNlUmVzdWx0CisgICAgeworICAgICAgICBmcmllbmQg
Y2xhc3MgVEludGVybVJlYnVpbGQ7CisKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgUG9zdFJlc3Vs
dChQb3N0UmVzdWx0ICYmb3RoZXIpOworICAgICAgICBQb3N0UmVzdWx0KFRJbnRlcm1Ob2RlICZu
b2RlKTsKKyAgICAgICAgUG9zdFJlc3VsdChUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAgICAgIFBv
c3RSZXN1bHQobnVsbHB0cl90KTsgIC8vIFVzZWQgdG8gZHJvcCBhIG5vZGUKKyAgICAgICAgUG9z
dFJlc3VsdChGYWlsKTsgICAgICAgLy8gVXNlZCB0byBzaWduYWwgZmFpbHVyZS4KKworICAgICAg
ICB2b2lkIG9wZXJhdG9yPShQb3N0UmVzdWx0ICYmb3RoZXIpOworCisgICAgICAgIHN0YXRpYyBQ
b3N0UmVzdWx0IE11bHRpKHN0ZDo6dmVjdG9yPFRJbnRlcm1Ob2RlICo+ICYmbm9kZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShzdGQ6Om1vdmUobm9k
ZXMpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgorICAg
ICAgICBzdGF0aWMgUG9zdFJlc3VsdCBNdWx0aShJdGVyIG5vZGVzQmVnaW4sIEl0ZXIgbm9kZXNF
bmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCYXNlUmVzdWx0OjpNdWx0aShub2Rl
c0JlZ2luLCBub2Rlc0VuZCk7CisgICAgICAgIH0KKworICAgICAgICB1c2luZyBCYXNlUmVzdWx0
Ojppc0Ryb3A7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OmlzRmFpbDsKKyAgICAgICAgdXNp
bmcgQmFzZVJlc3VsdDo6bXVsdGk7CisgICAgICAgIHVzaW5nIEJhc2VSZXN1bHQ6OnNpbmdsZTsK
KworICAgICAgcHJpdmF0ZToKKyAgICAgICAgUG9zdFJlc3VsdChCYXNlUmVzdWx0ICYmb3RoZXIp
OworICAgIH07CisKKyAgcHVibGljOgorICAgIFRJbnRlcm1SZWJ1aWxkKFRDb21waWxlciAmY29t
cGlsZXIsIGJvb2wgcHJlVmlzaXQsIGJvb2wgcG9zdFZpc2l0KTsKKworICAgIHZpcnR1YWwgflRJ
bnRlcm1SZWJ1aWxkKCk7CisKKyAgICAvLyBSZWJ1aWxkcyB0aGUgdHJlZSBzdGFydGluZyBhdCB0
aGUgcHJvdmlkZWQgcm9vdC4gSWYgYSBuZXcgbm9kZSB3b3VsZCBiZSByZXR1cm5lZCBmb3IgdGhl
CisgICAgLy8gcm9vdCwgdGhlIHJvb3Qgbm9kZSdzIGNoaWxkcmVuIGJlY29tZSB0aGF0IG9mIHRo
ZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1cmUKKyAgICAvLyBvY2N1
cnJlZC4KKyAgICBBTkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZFJvb3QoVEludGVybUJsb2Nr
ICZyb290KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRTeW1i
b2xQcmUoVEludGVybVN5bWJvbCAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRD
b25zdGFudFVuaW9uUHJlKFRJbnRlcm1Db25zdGFudFVuaW9uICZub2RlKTsKKyAgICB2aXJ0dWFs
IFByZVJlc3VsdCB2aXNpdEZ1bmN0aW9uUHJvdG90eXBlUHJlKFRJbnRlcm1GdW5jdGlvblByb3Rv
dHlwZSAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJl
Y3RpdmVQcmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAmbm9kZSk7CisgICAgdmlydHVh
bCBQcmVSZXN1bHQgdmlzaXRVbmFyeVByZShUSW50ZXJtVW5hcnkgJm5vZGUpOworICAgIHZpcnR1
YWwgUHJlUmVzdWx0IHZpc2l0QmluYXJ5UHJlKFRJbnRlcm1CaW5hcnkgJm5vZGUpOworICAgIHZp
cnR1YWwgUHJlUmVzdWx0IHZpc2l0VGVybmFyeVByZShUSW50ZXJtVGVybmFyeSAmbm9kZSk7Cisg
ICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRTd2l6emxlUHJlKFRJbnRlcm1Td2l6emxlICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdElmRWxzZVByZShUSW50ZXJtSWZFbHNlICZu
b2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdFN3aXRjaFByZShUSW50ZXJtU3dpdGNo
ICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdENhc2VQcmUoVEludGVybUNhc2Ug
Jm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0TG9vcFByZShUSW50ZXJtTG9vcCAm
bm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXRCcmFuY2hQcmUoVEludGVybUJyYW5j
aCAmbm9kZSk7CisgICAgdmlydHVhbCBQcmVSZXN1bHQgdmlzaXREZWNsYXJhdGlvblByZShUSW50
ZXJtRGVjbGFyYXRpb24gJm5vZGUpOworICAgIHZpcnR1YWwgUHJlUmVzdWx0IHZpc2l0QmxvY2tQ
cmUoVEludGVybUJsb2NrICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEFnZ3Jl
Z2F0ZVByZShUSW50ZXJtQWdncmVnYXRlICZub2RlKTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2
aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblByZShUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFByZVJlc3VsdCB2aXNpdEdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9u
UHJlKFRJbnRlcm1HbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbiAmbm9kZSk7CisKKyAgICB2aXJ0
dWFsIFBvc3RSZXN1bHQgdmlzaXRTeW1ib2xQb3N0KFRJbnRlcm1TeW1ib2wgJm5vZGUpOworICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdENvbnN0YW50VW5pb25Qb3N0KFRJbnRlcm1Db25zdGFu
dFVuaW9uICZub2RlKTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRGdW5jdGlvblByb3Rv
dHlwZVBvc3QoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmVQb3N0KFRJbnRlcm1QcmVwcm9jZXNz
b3JEaXJlY3RpdmUgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdFVuYXJ5UG9z
dChUSW50ZXJtVW5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJpbmFy
eVBvc3QoVEludGVybUJpbmFyeSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0
VGVybmFyeVBvc3QoVEludGVybVRlcm5hcnkgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3Vs
dCB2aXNpdFN3aXp6bGVQb3N0KFRJbnRlcm1Td2l6emxlICZub2RlKTsKKyAgICB2aXJ0dWFsIFBv
c3RSZXN1bHQgdmlzaXRJZkVsc2VQb3N0KFRJbnRlcm1JZkVsc2UgJm5vZGUpOworICAgIHZpcnR1
YWwgUG9zdFJlc3VsdCB2aXNpdFN3aXRjaFBvc3QoVEludGVybVN3aXRjaCAmbm9kZSk7CisgICAg
dmlydHVhbCBQb3N0UmVzdWx0IHZpc2l0Q2FzZVBvc3QoVEludGVybUNhc2UgJm5vZGUpOworICAg
IHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdExvb3BQb3N0KFRJbnRlcm1Mb29wICZub2RlKTsKKyAg
ICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRCcmFuY2hQb3N0KFRJbnRlcm1CcmFuY2ggJm5vZGUp
OworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdERlY2xhcmF0aW9uUG9zdChUSW50ZXJtRGVj
bGFyYXRpb24gJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEJsb2NrUG9zdChU
SW50ZXJtQmxvY2sgJm5vZGUpOworICAgIHZpcnR1YWwgUG9zdFJlc3VsdCB2aXNpdEFnZ3JlZ2F0
ZVBvc3QoVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisgICAgdmlydHVhbCBQb3N0UmVzdWx0IHZp
c2l0RnVuY3Rpb25EZWZpbml0aW9uUG9zdChUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uICZub2Rl
KTsKKyAgICB2aXJ0dWFsIFBvc3RSZXN1bHQgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
blBvc3QoVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICZub2RlKTsKKworICAgIC8v
IENhbiBiZSB1c2VkIHRvIHJlYnVpbGQgYSBzcGVjaWZpYyBub2RlIGR1cmluZyBhIHRyYXZlcnNh
bC4gVXNlZnVsIGZvciBmaW5lIGNvbnRyb2wgb2YKKyAgICAvLyByZWJ1aWxkaW5nIGEgbm9kZSdz
IGNoaWxkcmVuLgorICAgIEFOR0xFX05PX0RJU0NBUkQgUG9zdFJlc3VsdCByZWJ1aWxkKFRJbnRl
cm1Ob2RlICZub2RlKTsKKworICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBs
YWNlLiBJZiBhIG5ldyBub2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGls
ZHJlbgorICAgIC8vIGJlY29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5z
IGZhbHNlIGlmIGZhaWx1cmUgb2NjdXJyZWQuCisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJl
YnVpbGRJblBsYWNlKFRJbnRlcm1BZ2dyZWdhdGUgJm5vZGUpOworCisgICAgLy8gUmVidWlsZHMg
dGhlIHByb3ZpZGVkIG5vZGUgaW4gcGxhY2UuIElmIGEgbmV3IG5vZGUgd291bGQgYmUgcmV0dXJu
ZWQsIHRoZSBvbGQgbm9kZSdzIGNoaWxkcmVuCisgICAgLy8gYmVjb21lIHRoYXQgb2YgdGhlIG5l
dyBub2RlIGluc3RlYWQuIFJldHVybnMgZmFsc2UgaWYgZmFpbHVyZSBvY2N1cnJlZC4KKyAgICBB
TkdMRV9OT19ESVNDQVJEIGJvb2wgcmVidWlsZEluUGxhY2UoVEludGVybUJsb2NrICZub2RlKTsK
KworICAgIC8vIFJlYnVpbGRzIHRoZSBwcm92aWRlZCBub2RlIGluIHBsYWNlLiBJZiBhIG5ldyBu
b2RlIHdvdWxkIGJlIHJldHVybmVkLCB0aGUgb2xkIG5vZGUncyBjaGlsZHJlbgorICAgIC8vIGJl
Y29tZSB0aGF0IG9mIHRoZSBuZXcgbm9kZSBpbnN0ZWFkLiBSZXR1cm5zIGZhbHNlIGlmIGZhaWx1
cmUgb2NjdXJyZWQuCisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29sIHJlYnVpbGRJblBsYWNlKFRJ
bnRlcm1EZWNsYXJhdGlvbiAmbm9kZSk7CisKKyAgICAvLyBJZiBjdXJyZW50bHkgYXQgb3IgYmVs
b3cgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBib2R5LCB0aGlzIHJldHVybnMgdGhlIGZ1bmN0aW9u
IHRoYXQgZW5jbG9zZXMKKyAgICAvLyB0aGUgY3VycmVudGx5IHZpc2l0ZWQgbm9kZS4gKFRoaXMg
cmV0dXJucyBudWxsIGlmIGF0IGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gbm9kZS4pCisgICAgY29u
c3QgVEZ1bmN0aW9uICpnZXRQYXJlbnRGdW5jdGlvbigpIGNvbnN0OworCisgICAgVEludGVybU5v
ZGUgKmdldFBhcmVudE5vZGUoc2l6ZV90IG9mZnNldCA9IDApIGNvbnN0OworCisgIHByaXZhdGU6
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+CisgICAgQU5HTEVfTk9fRElTQ0FSRCBib29s
IHJlYnVpbGRJblBsYWNlSW1wbChOb2RlICZub2RlKTsKKworICAgIFBvc3RSZXN1bHQgdHJhdmVy
c2VBbnkoVEludGVybU5vZGUgJm5vZGUpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE5vZGU+
CisgICAgTm9kZSAqdHJhdmVyc2VBbnlBcyhUSW50ZXJtTm9kZSAmbm9kZSk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgTm9kZT4KKyAgICBib29sIHRyYXZlcnNlQW55QXMoVEludGVybU5vZGUg
Jm5vZGUsIE5vZGUgKiZvdXQpOworCisgICAgUHJlUmVzdWx0IHRyYXZlcnNlUHJlKFRJbnRlcm1O
b2RlICZvcmlnaW5hbE5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUNoaWxkcmVuKE5v
ZGVUeXBlIGN1cnJOb2RlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUSW50ZXJtTm9kZSAmb3JpZ2luYWxOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlICZjdXJyTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWaXNpdEJpdHMgdmlzaXQpOworICAgIFBvc3RSZXN1bHQgdHJhdmVyc2VQb3N0
KE5vZGVUeXBlIG5vZGVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJ
bnRlcm1Ob2RlICZvcmlnaW5hbE5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
dGVybU5vZGUgJmN1cnJOb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0Qml0
cyB2aXNpdCk7CisKKyAgICBib29sIHRyYXZlcnNlQWdncmVnYXRlQmFzZUNoaWxkcmVuKFRJbnRl
cm1BZ2dyZWdhdGVCYXNlICZub2RlKTsKKworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZVVuYXJ5
Q2hpbGRyZW4oVEludGVybVVuYXJ5ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VC
aW5hcnlDaGlsZHJlbihUSW50ZXJtQmluYXJ5ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJh
dmVyc2VUZXJuYXJ5Q2hpbGRyZW4oVEludGVybVRlcm5hcnkgJm5vZGUpOworICAgIFRJbnRlcm1O
b2RlICp0cmF2ZXJzZVN3aXp6bGVDaGlsZHJlbihUSW50ZXJtU3dpenpsZSAmbm9kZSk7CisgICAg
VEludGVybU5vZGUgKnRyYXZlcnNlSWZFbHNlQ2hpbGRyZW4oVEludGVybUlmRWxzZSAmbm9kZSk7
CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlU3dpdGNoQ2hpbGRyZW4oVEludGVybVN3aXRjaCAm
bm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlQ2FzZUNoaWxkcmVuKFRJbnRlcm1DYXNl
ICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVyc2VMb29wQ2hpbGRyZW4oVEludGVybUxv
b3AgJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZUJyYW5jaENoaWxkcmVuKFRJbnRl
cm1CcmFuY2ggJm5vZGUpOworICAgIFRJbnRlcm1Ob2RlICp0cmF2ZXJzZURlY2xhcmF0aW9uQ2hp
bGRyZW4oVEludGVybURlY2xhcmF0aW9uICZub2RlKTsKKyAgICBUSW50ZXJtTm9kZSAqdHJhdmVy
c2VCbG9ja0NoaWxkcmVuKFRJbnRlcm1CbG9jayAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRy
YXZlcnNlQWdncmVnYXRlQ2hpbGRyZW4oVEludGVybUFnZ3JlZ2F0ZSAmbm9kZSk7CisgICAgVElu
dGVybU5vZGUgKnRyYXZlcnNlRnVuY3Rpb25EZWZpbml0aW9uQ2hpbGRyZW4oVEludGVybUZ1bmN0
aW9uRGVmaW5pdGlvbiAmbm9kZSk7CisgICAgVEludGVybU5vZGUgKnRyYXZlcnNlR2xvYmFsUXVh
bGlmaWVyRGVjbGFyYXRpb25DaGlsZHJlbigKKyAgICAgICAgVEludGVybUdsb2JhbFF1YWxpZmll
ckRlY2xhcmF0aW9uICZub2RlKTsKKworICBwcm90ZWN0ZWQ6CisgICAgVENvbXBpbGVyICZtQ29t
cGlsZXI7CisgICAgVFN5bWJvbFRhYmxlICZtU3ltYm9sVGFibGU7CisgICAgY29uc3QgVEZ1bmN0
aW9uICptUGFyZW50RnVuYyA9IG51bGxwdHI7CisgICAgR2V0Tm9kZVR5cGUgZ2V0Tm9kZVR5cGU7
CisKKyAgcHJpdmF0ZToKKyAgICBDb25zTGlzdDxUSW50ZXJtTm9kZSAqPiBtTm9kZVN0YWNre251
bGxwdHIsIG51bGxwdHJ9OworICAgIGJvb2wgbVByZVZpc2l0OworICAgIGJvb2wgbVBvc3RWaXNp
dDsKK307CisKK30gIC8vIG5hbWVzcGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5T
TEFUT1JfVFJFRVVUSUxfSU5URVJNUkVCVUlMRF9IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90cmVlX3V0
aWwvTm9kZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTllNWFmMmQ1YWFjY2I1Y2I5MGUyNDJkNTBkZjg0
ZWZlMDljYzdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdHJlZV91dGlsL05vZGVUeXBlLmgKQEAgLTAsMCArMSwxNTUg
QEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9UUkVFVVRJTF9OT0RF
VFlQRV9IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX1RSRUVVVElMX05PREVUWVBFX0hf
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRpbC9JbnRlcm1UcmF2ZXJz
ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworZW51bSBjbGFzcyBOb2RlVHlwZQoreworICAgIFVu
a25vd24sCisgICAgU3ltYm9sLAorICAgIENvbnN0YW50VW5pb24sCisgICAgRnVuY3Rpb25Qcm90
b3R5cGUsCisgICAgUHJlcHJvY2Vzc29yRGlyZWN0aXZlLAorICAgIFVuYXJ5LAorICAgIEJpbmFy
eSwKKyAgICBUZXJuYXJ5LAorICAgIFN3aXp6bGUsCisgICAgSWZFbHNlLAorICAgIFN3aXRjaCwK
KyAgICBDYXNlLAorICAgIEZ1bmN0aW9uRGVmaW5pdGlvbiwKKyAgICBBZ2dyZWdhdGUsCisgICAg
QmxvY2ssCisgICAgR2xvYmFsUXVhbGlmaWVyRGVjbGFyYXRpb24sCisgICAgRGVjbGFyYXRpb24s
CisgICAgTG9vcCwKKyAgICBCcmFuY2gsCit9OworCisvLyBUaGlzIGlzIGEgZnVuY3Rpb24gbGlr
ZSBvYmplY3QgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uIHRoYXQgc3RhY2sgYWxsb2NhdGVzIHRoaXMg
YmVjYXVzZQorLy8gVEludGVybVRyYXZlcnNlciBpcyBhIGhlYXZ5IG9iamVjdCB0byBjb25zdHJ1
Y3QuCitjbGFzcyBHZXROb2RlVHlwZSA6IHByaXZhdGUgVEludGVybVRyYXZlcnNlcgoreworICAg
IE5vZGVUeXBlIG5vZGVUeXBlOworCisgIHB1YmxpYzoKKyAgICBHZXROb2RlVHlwZSgpIDogVElu
dGVybVRyYXZlcnNlcih0cnVlLCBmYWxzZSwgZmFsc2UpIHt9CisKKyAgICBOb2RlVHlwZSBvcGVy
YXRvcigpKFRJbnRlcm1Ob2RlICZub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS52aXNpdChWaXNp
dDo6UHJlVmlzaXQsIHRoaXMpOworICAgICAgICByZXR1cm4gbm9kZVR5cGU7CisgICAgfQorCisg
IHByaXZhdGU6CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICopIG92ZXJyaWRl
IHsgbm9kZVR5cGUgPSBOb2RlVHlwZTo6U3ltYm9sOyB9CisKKyAgICB2b2lkIHZpc2l0Q29uc3Rh
bnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiAqKSBvdmVycmlkZSB7IG5vZGVUeXBlID0gTm9k
ZVR5cGU6OkNvbnN0YW50VW5pb247IH0KKworICAgIHZvaWQgdmlzaXRGdW5jdGlvblByb3RvdHlw
ZShUSW50ZXJtRnVuY3Rpb25Qcm90b3R5cGUgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5v
ZGVUeXBlID0gTm9kZVR5cGU6OkZ1bmN0aW9uUHJvdG90eXBlOworICAgIH0KKworICAgIHZvaWQg
dmlzaXRQcmVwcm9jZXNzb3JEaXJlY3RpdmUoVEludGVybVByZXByb2Nlc3NvckRpcmVjdGl2ZSAq
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6UHJlcHJvY2Vz
c29yRGlyZWN0aXZlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRTd2l6emxlKFZpc2l0LCBUSW50
ZXJtU3dpenpsZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlw
ZTo6U3dpenpsZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlz
aXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IG5vZGVUeXBlID0gTm9kZVR5cGU6OkJpbmFyeTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICopIG92ZXJyaWRl
CisgICAgeworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpVbmFyeTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRUZXJuYXJ5KFZpc2l0LCBUSW50ZXJt
VGVybmFyeSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6
VGVybmFyeTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRJ
ZkVsc2UoVmlzaXQsIFRJbnRlcm1JZkVsc2UgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5v
ZGVUeXBlID0gTm9kZVR5cGU6OklmRWxzZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGJvb2wgdmlzaXRTd2l0Y2goVmlzaXQsIFRJbnRlcm1Td2l0Y2ggKikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OlN3aXRjaDsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRDYXNlKFZpc2l0LCBUSW50ZXJtQ2Fz
ZSAqKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6Q2FzZTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRGdW5jdGlvbkRl
ZmluaXRpb24oVmlzaXQsIFRJbnRlcm1GdW5jdGlvbkRlZmluaXRpb24gKikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6OkZ1bmN0aW9uRGVmaW5pdGlvbjsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUgKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBl
ID0gTm9kZVR5cGU6OkFnZ3JlZ2F0ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgdmlzaXRCbG9jayhWaXNpdCwgVEludGVybUJsb2NrICopIG92ZXJyaWRlCisgICAg
eworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpCbG9jazsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlvbihW
aXNpdCwgVEludGVybUdsb2JhbFF1YWxpZmllckRlY2xhcmF0aW9uICopIG92ZXJyaWRlCisgICAg
eworICAgICAgICBub2RlVHlwZSA9IE5vZGVUeXBlOjpHbG9iYWxRdWFsaWZpZXJEZWNsYXJhdGlv
bjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXREZWNsYXJh
dGlvbihWaXNpdCwgVEludGVybURlY2xhcmF0aW9uICopIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBub2RlVHlwZSA9IE5vZGVUeXBlOjpEZWNsYXJhdGlvbjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgbm9kZVR5cGUgPSBOb2RlVHlwZTo6TG9vcDsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQsIFRJbnRl
cm1CcmFuY2ggKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG5vZGVUeXBlID0gTm9kZVR5cGU6
OkJyYW5jaDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK30gIC8vIG5hbWVz
cGFjZSBzaAorCisjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfVFJFRVVUSUxfTk9ERVRZ
UEVfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3V0aWwuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdXRpbC5jcHAKaW5kZXggMzQ2NDcwZTRiMjA1M2Y0YzkyMDJkNjVjMTZmM2Ix
NDUxNjgxNTI4Yy4uNTgyZGRjNzBjOTZjMGFkYTAwMTY1YzIxY2ExZTk2NmY3OTU4NGFhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dXRpbC5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdXRpbC5jcHAKQEAgLTgwNCw2ICs4MDQsMTAgQEAgYm9vbCBJc091dHB1dE1ldGFsKFNo
U2hhZGVyT3V0cHV0IG91dHB1dCkKIHsKICAgICByZXR1cm4gb3V0cHV0ID09IFNIX0dMU0xfTUVU
QUxfT1VUUFVUOwogfQorYm9vbCBJc091dHB1dE1ldGFsRGlyZWN0KFNoU2hhZGVyT3V0cHV0IG91
dHB1dCkKK3sKKyAgICByZXR1cm4gb3V0cHV0ID09IFNIX01TTF9NRVRBTF9PVVRQVVQ7Cit9CiAK
IGJvb2wgSXNJblNoYWRlclN0b3JhZ2VCbG9jayhUSW50ZXJtVHlwZWQgKm5vZGUpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91
dGlsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci91
dGlsLmgKaW5kZXggNTNlZTc1NTIwM2Q5Mjg4YjkyZGJiMjYwYmYyNGE1Y2FhNDFlMzE5NS4uZjlh
ZTliYjFkNmVhNDMwYTUzMDQ3MzhjMzQ3NzNmMTI3N2YxNjExNCAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3V0aWwuaApAQCAt
NzcsNiArNzcsNyBAQCBib29sIElzT3V0cHV0R0xTTChTaFNoYWRlck91dHB1dCBvdXRwdXQpOwog
Ym9vbCBJc091dHB1dEhMU0woU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKIGJvb2wgSXNPdXRwdXRW
dWxrYW4oU2hTaGFkZXJPdXRwdXQgb3V0cHV0KTsKIGJvb2wgSXNPdXRwdXRNZXRhbChTaFNoYWRl
ck91dHB1dCBvdXRwdXQpOworYm9vbCBJc091dHB1dE1ldGFsRGlyZWN0KFNoU2hhZGVyT3V0cHV0
IG91dHB1dCk7CiAKIGJvb2wgSXNJblNoYWRlclN0b3JhZ2VCbG9jayhUSW50ZXJtVHlwZWQgKm5v
ZGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9f
dXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dw
dV9pbmZvX3V0aWwvU3lzdGVtSW5mb19hcHBsZS5tbQppbmRleCBhNDlkYzUyNzNmZjA2NjExN2Rl
NzIwN2Q5ZGI3YzllNjRiYWVkMjQyLi4xNTAwZmZmNDIyYzAwMGZkMWU3ZWFlZmJjMDBkMDM3MTVk
MzAyMWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9f
dXRpbC9TeXN0ZW1JbmZvX2FwcGxlLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9ncHVfaW5mb191dGlsL1N5c3RlbUluZm9fYXBwbGUubW0KQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTE5LDcgKzE5LDI1IEBAIG5hbWVzcGFjZSBhbmdsZQogCiBib29sIEdldFN5c3RlbUluZm8o
U3lzdGVtSW5mbyAqaW5mbykKIHsKLSNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8
fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorIyAgICBpZiBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkKKyAg
ICBzdGF0aWMgYm9vbCBpc2lPU0FwcE9uTWFjID0gZmFsc2U7CisgICAgc3RhdGljIGRpc3BhdGNo
X29uY2VfdCBvbmNlOworICAgIGRpc3BhdGNoX29uY2UoJm9uY2UsIF57CisgICAgICBpc2lPU0Fw
cE9uTWFjID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSBpc2lPU0FwcE9uTWFjXTsKKyAg
ICB9KTsKKworICAgIGlmIChpc2lPU0FwcE9uTWFjKQorICAgIHsKKyAgICAgICAgR2V0U3lzdGVt
SW5mb19pb3MoaW5mbyk7CisgICAgICAgIGlmIChpbmZvKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbmZvLT5pc2lPU0FwcE9uTWFjID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
aW5mbzsKKyAgICB9CisKKyAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19tYWMoaW5mbyk7CisjICAg
IGVsaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9NQUNDQVRBTFlTVCkKICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19tYWMoaW5mbyk7CiAj
ICAgIGVsc2UKICAgICByZXR1cm4gR2V0U3lzdGVtSW5mb19pb3MoaW5mbyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1JbmZvX2lv
cy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvZ3B1X2luZm9fdXRpbC9TeXN0ZW1J
bmZvX2lvcy5jcHAKaW5kZXggZTUyZWNiMzI3NWRkMjZmOTNlODM3NTY0NWQ2MGI3NDk3N2U3MTIx
ZC4uN2E5ZDlmYTI4NmIwMmU5ZjNiYjMwMTQ3ZGNlYWFmZWZkNzdhZTU5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2dwdV9pbmZvX3V0aWwvU3lzdGVtSW5mb19pb3Mu
Y3BwCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9ncHVfaW5mb191dGlsL1N5c3Rl
bUluZm9faW9zLmNwcApAQCAtMTgsOSArMTgsMTYgQEAgbmFtZXNwYWNlIGFuZ2xlCiBib29sIEdl
dFN5c3RlbUluZm9faW9zKFN5c3RlbUluZm8gKmluZm8pCiB7CiAgICAgewotICAgICAgICAvLyBU
T0RPKGFuZ2xlYnVnLmNvbS80Mjc1KTogR2V0IHRoZSBhY3R1YWwgc3lzdGVtIHZlcnNpb24gYW5k
IEdQVSBpbmZvLgorICAgICAgICAvLyAgICAgICAgR1BVRGV2aWNlSW5mbyBkZXZpY2VJbmZvOwor
ICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby52ZW5kb3JJZCAgICAgID0ga1ZlbmRvcklEX0Fw
cGxlOworICAgICAgICAvLyAgICAgICAgZGV2aWNlSW5mby5kZXZpY2VJZCAgICAgID0gMDsKKyAg
ICAgICAgLy8gICAgICAgIGRldmljZUluZm8uZHJpdmVyVmVuZG9yICA9ICJBcHBsZSI7CisgICAg
ICAgIC8vICAgICAgICBkZXZpY2VJbmZvLmRyaXZlclZlcnNpb24gPSAiMC4wIjsKKyAgICAgICAg
Ly8gICAgICAgIGRldmljZUluZm8uZHJpdmVyRGF0ZSAgICA9ICIxLzEvMTk3MCI7CisKKyAgICAg
ICAgLy8gVE9ETyhhbmdsZWJ1Zy5jb20vNDI3NSk6IEdldCB0aGUgYWN0dWFsIHN5c3RlbSB2ZXJz
aW9uLgogICAgICAgICBpbmZvLT5tYWNoaW5lTW9kZWxWZXJzaW9uID0gIjAuMCI7Ci0gICAgICAg
IGluZm8tPmdwdXMuZW1wbGFjZV9iYWNrKCkudmVuZG9ySWQgPSBrVmVuZG9ySURfQXBwbGU7Cisg
ICAgICAgIC8vIGluZm8tPmdwdXMucHVzaF9iYWNrKGRldmljZUluZm8pOwogICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL0NhcHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Nh
cHMuY3BwCmluZGV4IDFkZGRkNGQ4NTQ4MzJiMmQyOWIzODBhMDQ4YmQ0YTQzNzk5MzdjM2YuLjc5
MzEwMDliMmFlYThlZTE2ZThlMGQ3ZTkzZjcxN2Y0OTU5NWY3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9DYXBzLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvQ2Fwcy5jcHAKQEAgLTE3MCw4ICsxNzAsOCBAQCBz
dGF0aWMgYm9vbCBHZXRGb3JtYXRTdXBwb3J0QmFzZShjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4
dHVyZUNhcHMsCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1aXJlZEZvcm1hdHNT
aXplOyBpKyspCiAgICAgewotICAgICAgICBjb25zdCBUZXh0dXJlQ2FwcyAmY2FwID0gdGV4dHVy
ZUNhcHMuZ2V0KHJlcXVpcmVkRm9ybWF0c1tpXSk7CiAKKyAgICAgICAgY29uc3QgVGV4dHVyZUNh
cHMgJmNhcCA9IHRleHR1cmVDYXBzLmdldChyZXF1aXJlZEZvcm1hdHNbaV0pOwogICAgICAgICBp
ZiAocmVxdWlyZXNUZXh0dXJpbmcgJiYgIWNhcC50ZXh0dXJhYmxlKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NjIsNyArNDYyLDYgQEAgc3RhdGljIGJvb2wgRGV0
ZXJtaW5lQVNUQ0xEUlRleHR1cmVTdXBwb3J0KGNvbnN0IFRleHR1cmVDYXBzTWFwICZ0ZXh0dXJl
Q2FwcykKICAgICAgICAgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUiwg
IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSLAogICAgICAgICBHTF9D
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUiwgR0xfQ09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ18xMngxMl9LSFIsCiAgICAgfTsKLQogICAgIHJldHVybiBHZXRGb3JtYXRT
dXBwb3J0KHRleHR1cmVDYXBzLCByZXF1aXJlZEZvcm1hdHMsIHRydWUsIHRydWUsIGZhbHNlLCBm
YWxzZSwgZmFsc2UpOwogfQogCkBAIC02MzAsMTIgKzYyOSw3IEBAIHN0YXRpYyBib29sIERldGVy
bWluZURlcHRoVGV4dHVyZUFOR0xFU3VwcG9ydChjb25zdCBUZXh0dXJlQ2Fwc01hcCAmdGV4dHVy
ZUNhcHMpCiB7CiAgICAgY29uc3RleHByIEdMZW51bSByZXF1aXJlZEZvcm1hdHNbXSA9IHsKICAg
ICAgICAgR0xfREVQVEhfQ09NUE9ORU5UMTYsCi0jaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1f
SU9TKSAmJiAoIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1QpIHx8ICFkZWZpbmVk
KEFOR0xFX0NQVV9BUk02NCkpCi0gICAgICAgIC8vIFRPRE8oZGlubyk6IFRlbXBvcmFyaWx5IFJl
bW92aW5nIHRoZSBuZWVkIGZvciBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMKLSAgICAgICAgLy8g
YmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIG9uIGlPUy4KLSAgICAgICAgLy8gVE9ETyhkaW5v
KTogSSB0aGluayB0aGlzIG5lZWRzIHRvIGJlIGEgcnVudGltZSBjaGVjayB3aGVuIHJ1bm5pbmcg
YW4gaU9TIGFwcCBvbiBNYWMuCiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywKLSNl
bmRpZgogICAgICAgICBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywKICAgICB9OwogCkBAIC02NDcs
MTIgKzY0MSw3IEBAIHN0YXRpYyBib29sIERldGVybWluZURlcHRoVGV4dHVyZU9FU1N1cHBvcnQo
Y29uc3QgVGV4dHVyZUNhcHNNYXAgJnRleHR1cmVDYXBzKQogewogICAgIGNvbnN0ZXhwciBHTGVu
dW0gcmVxdWlyZWRGb3JtYXRzW10gPSB7CiAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LAot
I2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgKCFkZWZpbmVkKEFOR0xFX1BMQVRG
T1JNX01BQ0NBVEFMWVNUKSB8fCAhZGVmaW5lZChBTkdMRV9DUFVfQVJNNjQpKQotICAgICAgICAv
LyBUT0RPKGRpbm8pOiBUZW1wb3JhcmlseSBSZW1vdmluZyB0aGUgbmVlZCBmb3IgR0xfREVQVEhf
Q09NUE9ORU5UMzJfT0VTCi0gICAgICAgIC8vIGJlY2F1c2UgaXQgaXMgbm90IHN1cHBvcnRlZCBv
biBpT1MuCi0gICAgICAgIC8vIFRPRE8oZGlubyk6IEkgdGhpbmsgdGhpcyBuZWVkcyB0byBiZSBh
IHJ1bnRpbWUgY2hlY2sgd2hlbiBydW5uaW5nIGFuIGlPUyBhcHAgb24gTWFjLgogICAgICAgICBH
TF9ERVBUSF9DT01QT05FTlQzMl9PRVMsCi0jZW5kaWYKICAgICB9OwogCiAgICAgcmV0dXJuIEdl
dEZvcm1hdFN1cHBvcnQodGV4dHVyZUNhcHMsIHJlcXVpcmVkRm9ybWF0cywgdHJ1ZSwgdHJ1ZSwg
dHJ1ZSwgdHJ1ZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL0Rpc3BsYXkuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL0Rpc3BsYXkuY3BwCmluZGV4IGRkZTQzMzdiYTViN2ZjN2I0ODJlYzI3NTE4OTBiNWRi
ZjMzYTMwNDAuLjY1NzgxNGZlMDY3Mzg5NWE4MzFhNDNjZmNjZWZiNjk5ZTI1NmZjNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmNwcAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvRGlzcGxheS5jcHAKQEAg
LTE4MSw3ICsxODEsMTMgQEAgRUdMQXR0cmliIEdldERpc3BsYXlUeXBlRnJvbUVudmlyb25tZW50
KCkKICAgICAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBFX05VTExfQU5HTEU7CiAg
ICAgfQogI2VuZGlmCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfTUVUQUwpCisgICAgaWYgKGFu
Z2xlRGVmYXVsdEVudiA9PSAibWV0YWwiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVHTF9QTEFU
Rk9STV9BTkdMRV9UWVBFX01FVEFMX0FOR0xFOworICAgIH0KIAorI2VuZGlmCiAjaWYgZGVmaW5l
ZChBTkdMRV9FTkFCTEVfRDNEMTEpCiAgICAgcmV0dXJuIEVHTF9QTEFURk9STV9BTkdMRV9UWVBF
X0QzRDExX0FOR0xFOwogI2VsaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKQEAgLTEzMjUs
NiArMTMzMSw0NyBAQCBFcnJvciBEaXNwbGF5OjptYWtlQ3VycmVudChnbDo6Q29udGV4dCAqcHJl
dmlvdXNDb250ZXh0LAogICAgIHJldHVybiBOb0Vycm9yKCk7CiB9CiAKK0Vycm9yIERpc3BsYXk6
Om1ha2VDdXJyZW50KGNvbnN0IFRocmVhZCAqdGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWdsOjpTdXJmYWNlICpkcmF3U3VyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVnbDo6U3VyZmFjZSAqcmVhZFN1cmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIW1Jbml0aWFsaXplZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBOb0Vycm9yKCk7CisgICAgfQorCisgICAgZ2w6OkNvbnRleHQgKnBy
ZXZpb3VzQ29udGV4dCA9IHRocmVhZC0+Z2V0Q29udGV4dCgpOworICAgIGlmIChwcmV2aW91c0Nv
bnRleHQpCisgICAgeworICAgICAgICBBTkdMRV9UUlkocHJldmlvdXNDb250ZXh0LT51bk1ha2VD
dXJyZW50KHRoaXMpKTsKKyAgICB9CisKKyAgICBBTkdMRV9UUlkobUltcGxlbWVudGF0aW9uLT5t
YWtlQ3VycmVudCh0aGlzLCBkcmF3U3VyZmFjZSwgcmVhZFN1cmZhY2UsIGNvbnRleHQpKTsKKwor
ICAgIGlmIChjb250ZXh0ICE9IG51bGxwdHIpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoY29u
dGV4dC0+bWFrZUN1cnJlbnQodGhpcywgZHJhd1N1cmZhY2UsIHJlYWRTdXJmYWNlKSk7CisgICAg
fQorCisgICAgLy8gVGljayBhbGwgdGhlIHNjcmF0Y2ggYnVmZmVycyB0byBtYWtlIHN1cmUgdGhl
eSBnZXQgY2xlYW5lZCB1cCBldmVudHVhbGx5IGlmIHRoZXkgc3RvcCBiZWluZworICAgIC8vIHVz
ZWQuCisgICAgeworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhtU2Ny
YXRjaEJ1ZmZlck11dGV4KTsKKworICAgICAgICBmb3IgKGFuZ2xlOjpTY3JhdGNoQnVmZmVyICZz
Y2F0Y2hCdWZmZXIgOiBtU2NyYXRjaEJ1ZmZlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNj
YXRjaEJ1ZmZlci50aWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChhbmdsZTo6U2NyYXRj
aEJ1ZmZlciAmemVyb0ZpbGxlZEJ1ZmZlciA6IG1aZXJvRmlsbGVkQnVmZmVycykKKyAgICAgICAg
eworICAgICAgICAgICAgemVyb0ZpbGxlZEJ1ZmZlci50aWNrKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gTm9FcnJvcigpOworfQorCiBFcnJvciBEaXNwbGF5OjpyZXN0b3JlTG9z
dERldmljZSgpCiB7CiAgICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRvciBjdHggPSBtQ29udGV4
dFNldC5iZWdpbigpOyBjdHggIT0gbUNvbnRleHRTZXQuZW5kKCk7IGN0eCsrKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL0Rpc3BsYXkuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9EaXNwbGF5LmgKaW5kZXggNGFjNjMzNmUw
ZjNhY2IwNmVhNTk1YzU0NzVhYTk4ZTRiODZjN2U5NC4uMTZmYWYyYmY1Y2JjZDM5MjhiNTBjNWQx
Y2U1ZDA3MDRjZWE1ZTc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL0Rpc3BsYXkuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvRGlzcGxheS5oCkBAIC0xNjYsNiArMTY2LDExIEBAIGNsYXNzIERpc3BsYXkgZmluYWwg
OiBwdWJsaWMgTGFiZWxlZE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0
dHJpYnV0ZU1hcCAmYXR0cmlicywKICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpDb250ZXh0
ICoqb3V0Q29udGV4dCk7CiAKKyAgICBFcnJvciBtYWtlQ3VycmVudChjb25zdCBUaHJlYWQgKnRo
cmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICBTdXJmYWNlICpkcmF3U3VyZmFjZSwKKyAgICAg
ICAgICAgICAgICAgICAgICBTdXJmYWNlICpyZWFkU3VyZmFjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCk7CisKICAgICBFcnJvciBjcmVhdGVTeW5jKGNvbnN0
IGdsOjpDb250ZXh0ICpjdXJyZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgIEVHTGVu
dW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZU1hcCAmYXR0cmli
cywKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9n
cmFtLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvUHJvZ3JhbS5oCmlu
ZGV4IGZlM2VjMjg1OWJhYTc2Mjg3YjY5ZmM3Y2JmMDNmZDc5ODljNDExZGYuLmJhOTI2N2EwM2M5
Mzk2YzU3YmRlNGQ0N2QyM2M3ODEzNTgxNmMzNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW0uaApAQCAtMjc2LDYgKzI3NiwxMSBAQCBjbGFzcyBQ
cm9ncmFtU3RhdGUgZmluYWwgOiBhbmdsZTo6Tm9uQ29weWFibGUKICAgICB7CiAgICAgICAgIHJl
dHVybiBtRXhlY3V0YWJsZS0+Z2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncygpOwog
ICAgIH0KKyAgICB2b2lkIHNldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoCisgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gX21MaW5rZWRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1F
eGVjdXRhYmxlLT5zZXRMaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKF9tTGlua2VkVHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk7CisgICAgfQogICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEdM
c2l6ZWk+ICZnZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKSBjb25zdAogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1FeGVjdXRhYmxlLT5nZXRUcmFuc2Zvcm1GZWVkYmFja1N0cmlkZXMoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9Qcm9ncmFtRXhl
Y3V0YWJsZS5oIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1F
eGVjdXRhYmxlLmgKaW5kZXggOTUwODMyYjRlODA1MTdhZWNiMDVkZGM2YmNiZWJiODBhYzYyYjRk
Zi4uNDhmM2JkMjE3NTQwODQ3OTZkOThkNTI4MmRkYTZlNWI0ZmE4NjkzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRhYmxlLmgK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL1Byb2dyYW1FeGVjdXRh
YmxlLmgKQEAgLTIyOSw2ICsyMjksMTEgQEAgY2xhc3MgUHJvZ3JhbUV4ZWN1dGFibGUgZmluYWwg
OiBwdWJsaWMgYW5nbGU6OlN1YmplY3QKICAgICB7CiAgICAgICAgIHJldHVybiBtTGlua2VkVHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5nczsKICAgICB9CisgICAgdm9pZCBzZXRMaW5rZWRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzKAorICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxUcmFuc2Zvcm1G
ZWVkYmFja1Zhcnlpbmc+IF9tTGlua2VkVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykKKyAgICB7
CisgICAgICAgIG1MaW5rZWRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzID0gX21MaW5rZWRUcmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzOworICAgIH0KICAgICBHTGludCBnZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKSBjb25zdCB7IHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlOyB9CiAgICAgR0x1aW50IGdldFVuaWZvcm1CbG9ja0JpbmRpbmcoR0x1aW50IHVuaWZvcm1C
bG9ja0luZGV4KSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKaW5kZXgg
ZDRjNmFlZDZlY2MwODNjYTUzYWRlMzZhNzA1MjgzMmRmNTIzMjNmZC4uMjIzNjRiMzQyN2Y4ZGNk
Y2Y1ZDkzYWM2YTk3NmZkMmU3M2Y4ZjdiMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5jcHAK
QEAgLTIwNSw3ICsyMDUsNyBAQCBib29sIG9wZXJhdG9yPj0oY29uc3QgT1NWZXJzaW9uICZhLCBj
b25zdCBPU1ZlcnNpb24gJmIpCiAgICAgICAgICAgIHN0ZDo6dGllKGIubWFqb3JWZXJzaW9uLCBi
Lm1pbm9yVmVyc2lvbiwgYi5wYXRjaFZlcnNpb24pOwogfQogCi0jaWYgIWRlZmluZWQoQU5HTEVf
UExBVEZPUk1fQVBQTEUpCisjaWYgIWRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDT1MpCiBPU1Zl
cnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKIHsKICAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNp
b24KQEAgLTIxMyw2ICsyMTMsMTQgQEAgT1NWZXJzaW9uIEdldE1hY09TVmVyc2lvbigpCiB9CiAj
ZW5kaWYKIAorI2lmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykKK09TVmVyc2lvbiBHZXRp
T1NWZXJzaW9uKCkKK3sKKyAgICAvLyBSZXR1cm4gYSBkZWZhdWx0IHZlcnNpb24KKyAgICByZXR1
cm4gT1NWZXJzaW9uKDAsIDAsIDApOworfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX0xJTlVYKQogYm9vbCBQYXJzZUxpbnV4T1NWZXJzaW9uKGNvbnN0IGNoYXIgKnZlcnNp
b24sIGludCAqbWFqb3IsIGludCAqbWlub3IsIGludCAqcGF0Y2gpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxz
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVy
X3V0aWxzLmgKaW5kZXggMjYxOWJjMzRmMzM3OTAyNjJkODZhMTMzZDhhNjAzOTJjNmExZjk5MS4u
Nzg3NzJhZTJmZDEzNzY4ZDdlZjRmZDJkMjIxYzcwZjI3ODMxODdiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2RyaXZlcl91dGlscy5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2
ZXJfdXRpbHMuaApAQCAtMTY3LDYgKzE2NywxNSBAQCBpbmxpbmUgYm9vbCBJc0FwcGxlKCkKICNl
bmRpZgogfQogCitpbmxpbmUgYm9vbCBJc01hYygpCit7CisjaWYgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9BUFBMRSkgJiYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykKKyAgICByZXR1cm4g
dHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIGlubGluZSBib29s
IElzRnVjaHNpYSgpCiB7CiAjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9GVUNIU0lBKQpAQCAt
MjA0LDYgKzIxMyw4IEBAIGJvb2wgb3BlcmF0b3I+PShjb25zdCBPU1ZlcnNpb24gJmEsIGNvbnN0
IE9TVmVyc2lvbiAmYik7CiAKIE9TVmVyc2lvbiBHZXRNYWNPU1ZlcnNpb24oKTsKIAorT1NWZXJz
aW9uIEdldGlPU1ZlcnNpb24oKTsKKwogT1NWZXJzaW9uIEdldExpbnV4T1NWZXJzaW9uKCk7CiAK
IGlubGluZSBib29sIElzQW5kcm9pZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbSBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNfaW9zLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU3YTg0NWMwNzI1ZjA5NGY2MmU3Y2EzNzMyZjE1MzYxOWNlYzY1ZTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZHJpdmVyX3V0aWxzX2lvcy5tbQpAQCAtMCwwICsxLDI4IEBACisvLworLy8gQ29weXJp
Z2h0IDIwMTkgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBkcml2ZXJfdXRpbHNfaW9zLm1tIDogcHJvdmlkZXMgaW9zLXNwZWNpZmljIGluZm9ybWF0aW9u
IGFib3V0IGN1cnJlbnQgZHJpdmVyLgorCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvZHJp
dmVyX3V0aWxzLmgiCisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCituYW1l
c3BhY2UgcngKK3sKKworT1NWZXJzaW9uIEdldGlPU1ZlcnNpb24oKQoreworICAgIE9TVmVyc2lv
biByZXN1bHQ7CisKKyAgICBOU09wZXJhdGluZ1N5c3RlbVZlcnNpb24gdmVyc2lvbiA9IFtbTlNQ
cm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gb3BlcmF0aW5nU3lzdGVtVmVyc2lvbl07CisgICAgcmVz
dWx0Lm1ham9yVmVyc2lvbiAgICAgICAgICAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHZlcnNpb24u
bWFqb3JWZXJzaW9uKTsKKyAgICByZXN1bHQubWlub3JWZXJzaW9uICAgICAgICAgICAgICA9IHN0
YXRpY19jYXN0PGludD4odmVyc2lvbi5taW5vclZlcnNpb24pOworICAgIHJlc3VsdC5wYXRjaFZl
cnNpb24gICAgICAgICAgICAgID0gc3RhdGljX2Nhc3Q8aW50Pih2ZXJzaW9uLnBhdGNoVmVyc2lv
bik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZHJpdmVyX3V0aWxzX21hYy5tbSBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRp
bHNfbWFjLm1tCmluZGV4IDNhZjQ2ZmM4ODc4YjhiOTU1MzU1ODM5MTYzNTYzMWNhN2RkN2E2MjAu
LjliNTNlYjczNGVhZmFlYjA3MzAyYThiNjA1NzQzYmVlOGFmNjhiMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9kcml2ZXJfdXRpbHNf
bWFjLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9kcml2ZXJfdXRpbHNfbWFjLm1tCkBAIC0xMyw2ICsxMyw3IEBACiBuYW1lc3BhY2UgcngKIHsK
IAorI2lmICFUQVJHRVRfT1NfSU9TCiBPU1ZlcnNpb24gR2V0TWFjT1NWZXJzaW9uKCkKIHsKICAg
ICBPU1ZlcnNpb24gcmVzdWx0OwpAQCAtMjQsNSArMjUsNSBAQCBPU1ZlcnNpb24gR2V0TWFjT1NW
ZXJzaW9uKCkKIAogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KKyNlbmRpZgogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRM
aW5raW5nX2FwcGxlLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjNhNmQ3YTAyZWI3ZmI0
MjMzN2RjMGU1NzRkYzZjNTU4Yzg0MGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL1NvZnRMaW5raW5nX2FwcGxlLmgK
QEAgLTAsMCArMSwxMTIgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIFNvZnRMaW5raW5nX2FwcGxlLmNwcDogTWFjcm9zIGZvciBzb2Z0
LWxpbmtpbmcgRnJhbWV3b3JrcyBhbmQgRnVuY3Rpb25zLgorCisjaWZuZGVmIFNPRlRfTElOS0lO
R19BUFBMRV9IXworI2RlZmluZSBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KKworI2luY2x1ZGUgImNv
bW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9BUFBMRSkKKwor
IyAgICBpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKworIyAgICBpbXBvcnQgPGRpc3BhdGNoL2Rp
c3BhdGNoLmg+CisjICAgIGltcG9ydCA8ZGxmY24uaD4KKyMgICAgaW1wb3J0IDxvYmpjL3J1bnRp
bWUuaD4KKworIyAgICBkZWZpbmUgUkVMRUFTRV9BU1NFUlQoZXhwcmVzc2lvbiwgbWVzc2FnZSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
KGV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgPyBzdGF0aWNfY2Fz
dDx2b2lkPigwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgIDogKEZBVEFMKCkgPDwgIlx0ISBBc3NlcnQgZmFp
bGVkIGluICIgPDwgX19GVU5DVElPTl9fIDw8ICIgKCIgPDwgX19GSUxFX18gPDwgIjoiIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIDw8IF9fTElORV9fIDw8ICIpOiAiIDw8ICNleHByZXNzaW9u
IDw8ICJcblx0ISBNZXNzYWdlOiAiIDw8IG1lc3NhZ2UpKQorCisjICAgIGlmZGVmIF9fY3BsdXNw
bHVzCisjICAgICAgICBkZWZpbmUgRVhURVJOX0NfQkVHSU4gZXh0ZXJuICJDIiB7CisjICAgICAg
ICBkZWZpbmUgRVhURVJOX0NfRU5EIH0KKyMgICAgZWxzZQorIyAgICAgICAgZGVmaW5lIEVYVEVS
Tl9DX0JFR0lOCisjICAgICAgICBkZWZpbmUgRVhURVJOX0NfRU5ECisjICAgIGVuZGlmCisKKyMg
ICAgZGVmaW5lIFNPRlRfTElOS19GUkFNRVdPUktfSEVBREVSKGZyYW1ld29yaykgZXh0ZXJuIHZv
aWQgKmZyYW1ld29yayMjTGlicmFyeSgpOworCisjICAgIGRlZmluZSBTT0ZUX0xJTktfRlJBTUVX
T1JLX1NPVVJDRShmcmFtZXdvcmspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHZvaWQgKmZyYW1ld29yayMjTGlicmFyeSgpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGF0
aWMgZGlzcGF0Y2hfb25jZV90IG9uY2UgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGF0aWMgdm9pZCAqZnJhbWV3
b3JrTGlicmFyeSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgIGZyYW1ld29ya0xpYnJhcnkgPSBkbG9wZW4oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAi
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvIiAjZnJhbWV3b3JrICIuZnJhbWV3b3JrLyIgI2Zy
YW1ld29yaywgUlRMRF9OT1cpOyBcCisgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZyYW1l
d29ya0xpYnJhcnksICJVbmFibGUgdG8gbG9hZCAiICNmcmFtZXdvcmsgIi5mcmFtZXdvcmsiKTsg
ICAgICBcCisgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICByZXR1cm4gZnJhbWV3b3JrTGlicmFyeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworIyAgICBkZWZp
bmUgU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVz
dWx0VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtZXRlck5hbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRVhURVJOX0NfQkVHSU4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICByZXN1bHRUeXBlIGZ1bmN0aW9uTmFtZSBwYXJhbWV0ZXJEZWNsYXJh
dGlvbnM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIEVYVEVSTl9DX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZXh0ZXJuIHJl
c3VsdFR5cGUgaW5pdCMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgcGFyYW1ldGVyRGVjbGFyYXRp
b25zOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBleHRlcm4gcmVzdWx0VHlwZSgqc29m
dExpbmsjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lKSBwYXJhbWV0ZXJEZWNsYXJhdGlvbnM7ICAg
ICAgICAgICAgICBcCisgICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp
bmVfXykpIHJlc3VsdFR5cGUgZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRlY2xhcmF0aW9ucyAgIFwK
KyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
cmV0dXJuIHNvZnRMaW5rIyNmcmFtZXdvcmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0KKworIyAgICBkZWZpbmUg
U09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShmcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSwgcmVzdWx0
VHlwZSwgcGFyYW1ldGVyRGVjbGFyYXRpb25zLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJOYW1lcykgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXN1bHRUeXBlKCpzb2Z0TGluayMjZnJhbWV3
b3JrIyNmdW5jdGlvbk5hbWUpIHBhcmFtZXRlckRlY2xhcmF0aW9ucyA9ICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgaW5pdCMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWU7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICByZXN1bHRUeXBlIGluaXQjI2ZyYW1ld29yayMjZnVuY3Rpb25OYW1lIHBhcmFtZXRlckRl
Y2xhcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RhdGljIGRpc3BhdGNo
X29uY2VfdCBvbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZGlzcGF0Y2hfb25jZSgmb25jZSwgXnsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICBzb2Z0TGluayMjZnJhbWV3b3JrIyNmdW5jdGlvbk5hbWUgPSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgKHJlc3VsdFR5cGUoKikgcGFyYW1ldGVyRGVjbGFyYXRpb25zKWRsc3ltKGZy
YW1ld29yayMjTGlicmFyeSgpLCAjZnVuY3Rpb25OYW1lKTsgXAorICAgICAgICAgICAgfSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIHNvZnRMaW5rIyNm
cmFtZXdvcmsjI2Z1bmN0aW9uTmFtZSBwYXJhbWV0ZXJOYW1lczsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB9CisKKyMgICAgZGVmaW5lIFNPRlRfTElOS19DTEFTU19I
RUFERVIoY2xhc3NOYW1lKSAgICBcCisgICAgICAgIEBjbGFzcyBjbGFzc05hbWU7ICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBleHRlcm4gQ2xhc3MgKCpnZXQjI2NsYXNzTmFtZSMj
Q2xhc3MpKCk7IFwKKyAgICAgICAgY2xhc3NOYW1lICphbGxvYyMjY2xhc3NOYW1lIyNJbnN0YW5j
ZSgpOyBcCisgICAgICAgIGlubGluZSBjbGFzc05hbWUgKmFsbG9jIyNjbGFzc05hbWUjI0luc3Rh
bmNlKCkgeyByZXR1cm4gW2dldCMjY2xhc3NOYW1lIyNDbGFzcygpIGFsbG9jXTsgfQorCisjICAg
IGRlZmluZSBTT0ZUX0xJTktfQ0xBU1MoZnJhbWV3b3JrLCBjbGFzc05hbWUpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBAY2xhc3MgY2xhc3NOYW1lOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgc3RhdGljIENsYXNzIGluaXQjI2NsYXNzTmFtZSgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENsYXNzICgq
Z2V0IyNjbGFzc05hbWUjI0NsYXNzKSgpID0gaW5pdCMjY2xhc3NOYW1lOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWMgQ2xhc3MgY2xhc3MjI2NsYXNzTmFtZTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRpYyBDbGFzcyBjbGFzc05h
bWUjI0Z1bmN0aW9uKCkgeyByZXR1cm4gY2xhc3MjI2NsYXNzTmFtZTsgfSAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljIENs
YXNzIGluaXQjI2NsYXNzTmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRpc3BhdGNoX29uY2UoJm9u
Y2UsIF57ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICAgIGZyYW1ld29yayMjTGlicmFyeSgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBjbGFz
cyMjY2xhc3NOYW1lID0gb2JqY19nZXRDbGFzcygjY2xhc3NOYW1lKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3MjI2NsYXNz
TmFtZSwgIm9iamNfZ2V0Q2xhc3MgZmFpbGVkIGZvciAiICNjbGFzc05hbWUpOyBcCisgICAgICAg
ICAgICAgIGdldCMjY2xhc3NOYW1lIyNDbGFzcyA9IGNsYXNzTmFtZSMjRnVuY3Rpb247ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIHJldHVybiBjbGFzcyMjY2xhc3NOYW1lOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBfUHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHB1c2giKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIF9QcmFnbWEoImNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XdW51c2VkLWZ1bmN0aW9u
XCIiKSBzdGF0aWMgY2xhc3NOYW1lICBcCisgICAgICAgICAgICAgICAgKmFsbG9jIyNjbGFzc05h
bWUjI0luc3RhbmNlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBb
Z2V0IyNjbGFzc05hbWUjI0NsYXNzKCkgYWxsb2NdOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBf
UHJhZ21hKCJjbGFuZyBkaWFnbm9zdGljIHBvcCIpCisKKyNlbmRpZiAgLy8gZGVmaW5lZChBTkdM
RV9QTEFURk9STV9BUFBMRSkKKworI2VuZGlmICAvLyBTT0ZUX0xJTktJTkdfQVBQTEVfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9jZ2wvQ0dMRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTVjMGY2
YmFhNGY4OGRjMWIxOTUzZTM3MzljZmRhN2RmYWMzYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5j
dGlvbnMuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIENHTEZ1bmN0aW9ucy5jcHA6IEV4cG9zaW5nIHRo
ZSBzb2Z0LWxpbmtlZCBDR0wgaW50ZXJmYWNlLgorCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVy
ZXIvZ2wvY2dsL0NHTEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgor
CisjaWYgZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNPUykgfHwgZGVmaW5lZChBTkdMRV9QTEFU
Rk9STV9NQUNDQVRBTFlTVCkKKworU09GVF9MSU5LX0ZSQU1FV09SS19TT1VSQ0UoT3BlbkdMKQor
CitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENH
TEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQ0dMUGl4ZWxGb3JtYXRB
dHRyaWJ1dGUgKmF0dHJpYnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xQaXhlbEZv
cm1hdE9iaiAqcGl4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgKm5waXgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlicywgcGl4LCBucGl4KSkKK1NPRlRfTElO
S19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xD
cmVhdGVDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgKENHTFBpeGVsRm9ybWF0T2JqIHBpeCwgQ0dMQ29udGV4dE9i
aiBzaGFyZSwgQ0dMQ29udGV4dE9iaiAqY3R4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
KHBpeCwgc2hhcmUsIGN0eCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKAorICAgIE9wZW5H
TCwKKyAgICBDR0xEZXNjcmliZVBpeGVsRm9ybWF0LAorICAgIENHTEVycm9yLAorICAgIChDR0xQ
aXhlbEZvcm1hdE9iaiBwaXgsIEdMaW50IHBpeF9udW0sIENHTFBpeGVsRm9ybWF0QXR0cmlidXRl
IGF0dHJpYiwgR0xpbnQgKnZhbHVlKSwKKyAgICAocGl4LCBwaXhfbnVtLCBhdHRyaWIsIHZhbHVl
KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdMLCBDR0xEZXN0cm95Q29udGV4dCwg
Q0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9O
X1NPVVJDRShPcGVuR0wsIENHTERlc3Ryb3lQaXhlbEZvcm1hdCwgQ0dMRXJyb3IsIChDR0xQaXhl
bEZvcm1hdE9iaiBwaXgpLCAocGl4KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VSQ0UoT3BlbkdM
LCBDR0xFcnJvclN0cmluZywgY29uc3QgY2hhciAqLCAoQ0dMRXJyb3IgZXJyb3IpLCAoZXJyb3Ip
KQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTFJlbGVhc2VDb250ZXh0LCB2
b2lkLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19GVU5DVElPTl9TT1VS
Q0UoT3BlbkdMLCBDR0xTZXRDdXJyZW50Q29udGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2Jq
IGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIENHTFNldFZpcnR1YWxTY3JlZW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMQ29udGV4
dE9iaiBjdHgsIEdMaW50IHNjcmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgs
IHNjcmVlbikpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKAorICAgIE9wZW5HTCwKKyAgICBD
R0xUZXhJbWFnZUlPU3VyZmFjZTJELAorICAgIENHTEVycm9yLAorICAgIChDR0xDb250ZXh0T2Jq
IGN0eCwKKyAgICAgR0xlbnVtIHRhcmdldCwKKyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwK
KyAgICAgR0xzaXplaSB3aWR0aCwKKyAgICAgR0xzaXplaSBoZWlnaHQsCisgICAgIEdMZW51bSBm
b3JtYXQsCisgICAgIEdMZW51bSB0eXBlLAorICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlLAor
ICAgICBHTHVpbnQgcGxhbmUpLAorICAgIChjdHgsIHRhcmdldCwgaW50ZXJuYWxfZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGlvU3VyZmFjZSwgcGxhbmUpKQorU09GVF9MSU5L
X0ZVTkNUSU9OX1NPVVJDRShPcGVuR0wsIENHTFVwZGF0ZUNvbnRleHQsIENHTEVycm9yLCAoQ0dM
Q29udGV4dE9iaiBjdHgpLCAoY3R4KSkKKworU09GVF9MSU5LX0ZVTkNUSU9OX1NPVVJDRSgKKyAg
ICBPcGVuR0wsCisgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKyAgICBDR0xFcnJvciwKKyAgICAo
Q0dMUmVuZGVyZXJJbmZvT2JqIHJlbmQsIEdMaW50IHJlbmRfbnVtLCBDR0xSZW5kZXJlclByb3Bl
cnR5IHByb3AsIEdMaW50ICp2YWx1ZSksCisgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9wLCB2YWx1
ZSkpCitTT0ZUX0xJTktfRlVOQ1RJT05fU09VUkNFKE9wZW5HTCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChDR0xSZW5kZXJlckluZm9P
YmogcmVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW5kKSkKK1NPRlRfTElOS19G
VU5DVElPTl9TT1VSQ0UoT3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xRdWVy
eVJlbmRlcmVySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIChHTHVpbnQgZGlzcGxheV9tYXNrLCBDR0xSZW5kZXJlcklu
Zm9PYmogKnJlbmQsIEdMaW50ICpucmVuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChk
aXNwbGF5X21hc2ssIHJlbmQsIG5yZW5kKSkKKworI2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BM
QVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2ds
L2NnbC9DR0xGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZiODcxZTRiZWM4
YWJjMGUyNzJlMjNjNGE2ZTU1NGRlZDVjMGIyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9jZ2wvQ0dMRnVuY3Rpb25z
LmgKQEAgLTAsMCArMSw4NCBAQAorLy8KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gQ0dMRnVuY3Rpb25zLmg6IEV4cG9zaW5nIHRoZSBzb2Z0LWxp
bmtlZCBDR0wgaW50ZXJmYWNlLgorCisjaWZuZGVmIENHTF9GVU5DVElPTlNfSF8KKyNkZWZpbmUg
Q0dMX0ZVTkNUSU9OU19IXworCisjaW5jbHVkZSAiY29tbW9uL3BsYXRmb3JtLmgiCisKKyNpZiBk
ZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01B
Q0NBVEFMWVNUKQorCisjICAgIGluY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KKworIyAgICBpbmNs
dWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9Tb2Z0TGlua2luZ19hcHBsZS5oIgorCitTT0ZUX0xJ
TktfRlJBTUVXT1JLX0hFQURFUihPcGVuR0wpCisKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIo
T3BlbkdMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zdCBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSAqYXR0cmlicywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENHTFBpeGVsRm9ybWF0T2JqICpwaXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCAqbnBpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChh
dHRyaWJzLCBwaXgsIG5waXgpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIENHTENyZWF0ZUNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dMUGl4
ZWxGb3JtYXRPYmogcGl4LCBDR0xDb250ZXh0T2JqIHNoYXJlLCBDR0xDb250ZXh0T2JqICpjdHgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAocGl4LCBzaGFyZSwgY3R4KSkKK1NPRlRfTElO
S19GVU5DVElPTl9IRUFERVIoCisgICAgT3BlbkdMLAorICAgIENHTERlc2NyaWJlUGl4ZWxGb3Jt
YXQsCisgICAgQ0dMRXJyb3IsCisgICAgKENHTFBpeGVsRm9ybWF0T2JqIHBpeCwgR0xpbnQgcGl4
X251bSwgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0cmliLCBHTGludCAqdmFsdWUpLAorICAg
IChwaXgsIHBpeF9udW0sIGF0dHJpYiwgdmFsdWUpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURF
UigKKyAgICBPcGVuR0wsCisgICAgQ0dMRGVzY3JpYmVSZW5kZXJlciwKKyAgICBDR0xFcnJvciwK
KyAgICAoQ0dMUmVuZGVyZXJJbmZvT2JqIHJlbmQsIEdMaW50IHJlbmRfbnVtLCBDR0xSZW5kZXJl
clByb3BlcnR5IHByb3AsIEdMaW50ICp2YWx1ZSksCisgICAgKHJlbmQsIHJlbmRfbnVtLCBwcm9w
LCB2YWx1ZSkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVSKE9wZW5HTCwgQ0dMRGVzdHJveUNv
bnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKK1NPRlRfTElOS19G
VU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xEZXN0cm95UGl4ZWxGb3JtYXQsIENHTEVycm9yLCAo
Q0dMUGl4ZWxGb3JtYXRPYmogcGl4KSwgKHBpeCkpCitTT0ZUX0xJTktfRlVOQ1RJT05fSEVBREVS
KE9wZW5HTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRGVzdHJveVJlbmRlcmVySW5m
bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dMRXJyb3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIChDR0xSZW5kZXJlckluZm9PYmogcmVuZCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIChyZW5kKSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xFcnJv
clN0cmluZywgY29uc3QgY2hhciAqLCAoQ0dMRXJyb3IgZXJyb3IpLCAoZXJyb3IpKQorU09GVF9M
SU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENH
TFF1ZXJ5UmVuZGVyZXJJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDR0xFcnJvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgKEdMdWludCBkaXNwbGF5X21hc2ssIENHTFJlbmRl
cmVySW5mb09iaiAqcmVuZCwgR0xpbnQgKm5yZW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGRpc3BsYXlfbWFzaywgcmVuZCwgbnJlbmQpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURF
UihPcGVuR0wsIENHTFJlbGVhc2VDb250ZXh0LCB2b2lkLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAo
Y3R4KSkKK1NPRlRfTElOS19GVU5DVElPTl9IRUFERVIoT3BlbkdMLCBDR0xTZXRDdXJyZW50Q29u
dGV4dCwgQ0dMRXJyb3IsIChDR0xDb250ZXh0T2JqIGN0eCksIChjdHgpKQorU09GVF9MSU5LX0ZV
TkNUSU9OX0hFQURFUihPcGVuR0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTFNldFZp
cnR1YWxTY3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHTEVycm9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAoQ0dMQ29udGV4dE9iaiBjdHgsIEdMaW50IHNjcmVlbiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgsIHNjcmVlbikpCitTT0ZUX0xJTktfRlVOQ1RJ
T05fSEVBREVSKAorICAgIE9wZW5HTCwKKyAgICBDR0xUZXhJbWFnZUlPU3VyZmFjZTJELAorICAg
IENHTEVycm9yLAorICAgIChDR0xDb250ZXh0T2JqIGN0eCwKKyAgICAgR0xlbnVtIHRhcmdldCwK
KyAgICAgR0xlbnVtIGludGVybmFsX2Zvcm1hdCwKKyAgICAgR0xzaXplaSB3aWR0aCwKKyAgICAg
R0xzaXplaSBoZWlnaHQsCisgICAgIEdMZW51bSBmb3JtYXQsCisgICAgIEdMZW51bSB0eXBlLAor
ICAgICBJT1N1cmZhY2VSZWYgaW9TdXJmYWNlLAorICAgICBHTHVpbnQgcGxhbmUpLAorICAgIChj
dHgsIHRhcmdldCwgaW50ZXJuYWxfZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IGlvU3VyZmFjZSwgcGxhbmUpKQorU09GVF9MSU5LX0ZVTkNUSU9OX0hFQURFUihPcGVuR0wsIENH
TFVwZGF0ZUNvbnRleHQsIENHTEVycm9yLCAoQ0dMQ29udGV4dE9iaiBjdHgpLCAoY3R4KSkKKwor
I2VuZGlmICAvLyBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFOR0xF
X1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorCisjZW5kaWYgIC8vIENHTF9GVU5DVElPTlNfSF8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9jZ2wvRGlzcGxheUNHTC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9nbC9jZ2wvRGlzcGxheUNHTC5tbQppbmRleCBiNWE2MzFhZTQzMjFmMWFkOWI0
ODU2NmZhYTA5ZGZmZmEzOTQ2MzkxLi45MGU4MDU4ZjU4NWZhYjcxZDY1ZTI0MTk1MjA2Mjg0Zjg0
NDU1YjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUv
cmVuZGVyZXIvZ2wvY2dsL0Rpc3BsYXlDR0wubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9EaXNwbGF5Q0dMLm1tCkBAIC0yOSw2ICsy
OSw4IEBACiAjICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9XaW5kb3dTdXJm
YWNlQ0dMLmgiCiAjICAgIGluY2x1ZGUgInBsYXRmb3JtL1BsYXRmb3JtTWV0aG9kcy5oIgogCisj
ICAgIGluY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL2dsL2NnbC9DR0xGdW5jdGlvbnMuaCIKKwog
bmFtZXNwYWNlCiB7CiAKQEAgLTE2Myw5ICsxNjUsMTAgQEAgZWdsOjpFcnJvciBEaXNwbGF5Q0dM
Ojppbml0aWFsaXplKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICBtRUdMRGlzcGxheSA9IGRp
c3BsYXk7CiAKICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotICAgIC8vIEl0J3MgbGVnYWwg
Zm9yIEdldFN5c3RlbUluZm8gdG8gcmV0dXJuIGZhbHNlIGFuZCB0aGVyZWJ5Ci0gICAgLy8gY29u
dGFpbiBpbmNvbXBsZXRlIGluZm9ybWF0aW9uLgotICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1J
bmZvKCZpbmZvKTsKKyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBx
dWVyeSBBTkdMRSdzIFN5c3RlbUluZm8uIjsKKyAgICB9CiAKICAgICAvLyBUaGlzIGNvZGUgaW1w
bGVtZW50cyB0aGUgZWZmZWN0IG9mIHRoZQogICAgIC8vIGRpc2FibGVHUFVTd2l0Y2hpbmdTdXBw
b3J0IHdvcmthcm91bmQgaW4gRmVhdHVyZXNHTC4KQEAgLTQ0MCw3ICs0NDMsNyBAQCBlZ2w6OkVy
cm9yIERpc3BsYXlDR0w6OnJlc3RvcmVMb3N0RGV2aWNlKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlz
cGxheSkKIAogYm9vbCBEaXNwbGF5Q0dMOjppc1ZhbGlkTmF0aXZlV2luZG93KEVHTE5hdGl2ZVdp
bmRvd1R5cGUgd2luZG93KSBjb25zdAogewotICAgIE5TT2JqZWN0ICpsYXllciA9IChfX2JyaWRn
ZSBOU09iamVjdCAqKXdpbmRvdzsKKyAgICBOU09iamVjdCAqbGF5ZXIgPSByZWludGVycHJldF9j
YXN0PE5TT2JqZWN0ICo+KHdpbmRvdyk7CiAgICAgcmV0dXJuIFtsYXllciBpc0tpbmRPZkNsYXNz
OltDQUxheWVyIGNsYXNzXV07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0Rpc3BsYXlFQUdMLm1tIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVB
R0wubW0KaW5kZXggYTc5NTAzN2QxNDc5YTNjZjFkYmNjMjE5ZjQ5MzZkMmI1MDc3ZTcwNi4uYzU1
YWU3ZmJmM2FiNzY5MTU5ZGNlYWU2MWY4MDEzMzcyYjFkZTRlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRGlzcGxheUVB
R0wubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L2dsL2VhZ2wvRGlzcGxheUVBR0wubW0KQEAgLTI3LDYgKzI3LDggQEAKICMgICAgaW1wb3J0IDxR
dWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICMgICAgaW1wb3J0IDxkbGZjbi5oPgogCisjICAgIGlt
cG9ydCAibGliQU5HTEUvcmVuZGVyZXIvZ2wvZWFnbC9FQUdMRnVuY3Rpb25zLmgiCisKIG5hbWVz
cGFjZQogewogCkBAIC02NCw5ICs2NiwxMCBAQCBlZ2w6OkVycm9yIERpc3BsYXlFQUdMOjppbml0
aWFsaXplKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICBtRUdMRGlzcGxheSA9IGRpc3BsYXk7
CiAKICAgICBhbmdsZTo6U3lzdGVtSW5mbyBpbmZvOwotICAgIC8vIEl0J3MgbGVnYWwgZm9yIEdl
dFN5c3RlbUluZm8gdG8gcmV0dXJuIGZhbHNlIGFuZCB0aGVyZWJ5Ci0gICAgLy8gY29udGFpbiBp
bmNvbXBsZXRlIGluZm9ybWF0aW9uLgotICAgICh2b2lkKWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZp
bmZvKTsKKyAgICBpZiAoIWFuZ2xlOjpHZXRTeXN0ZW1JbmZvKCZpbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlZ2w6OkVnbE5vdEluaXRpYWxpemVkKCkgPDwgIlVuYWJsZSB0byBxdWVyeSBB
TkdMRSdzIFN5c3RlbUluZm8uIjsKKyAgICB9CiAKICAgICBtQ29udGV4dCA9IFthbGxvY0VBR0xD
b250ZXh0SW5zdGFuY2UoKSBpbml0V2l0aEFQSTprRUFHTFJlbmRlcmluZ0FQSU9wZW5HTEVTM107
CiAgICAgaWYgKG1Db250ZXh0ID09IG51bGxwdHIpCkBAIC0xMTMsNiArMTE2LDcgQEAgdm9pZCBE
aXNwbGF5RUFHTDo6dGVybWluYXRlKCkKICAgICBpZiAobUNvbnRleHQgIT0gbnVsbHB0cikKICAg
ICB7CiAgICAgICAgIFtnZXRFQUdMQ29udGV4dENsYXNzKCkgc2V0Q3VycmVudENvbnRleHQ6bmls
XTsKKyAgICAgICAgW21Db250ZXh0IHJlbGVhc2VdOwogICAgICAgICBtQ29udGV4dCA9IG51bGxw
dHI7CiAgICAgICAgIG1UaHJlYWRzV2l0aENvbnRleHRDdXJyZW50LmNsZWFyKCk7CiAgICAgfQpA
QCAtMjc1LDcgKzI3OSw3IEBAIGVnbDo6RXJyb3IgRGlzcGxheUVBR0w6OnJlc3RvcmVMb3N0RGV2
aWNlKGNvbnN0IGVnbDo6RGlzcGxheSAqZGlzcGxheSkKIAogYm9vbCBEaXNwbGF5RUFHTDo6aXNW
YWxpZE5hdGl2ZVdpbmRvdyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdpbmRvdykgY29uc3QKIHsKLSAg
ICBOU09iamVjdCAqbGF5ZXIgPSAoX19icmlkZ2UgTlNPYmplY3QgKil3aW5kb3c7CisgICAgTlNP
YmplY3QgKmxheWVyID0gcmVpbnRlcnByZXRfY2FzdDxOU09iamVjdCAqPih3aW5kb3cpOwogICAg
IHJldHVybiBbbGF5ZXIgaXNLaW5kT2ZDbGFzczpbQ0FMYXllciBjbGFzc11dOwogfQogCkBAIC0z
MTEsOSArMzE1LDggQEAgdm9pZCBEaXNwbGF5RUFHTDo6Z2VuZXJhdGVFeHRlbnNpb25zKGVnbDo6
RGlzcGxheUV4dGVuc2lvbnMgKm91dEV4dGVuc2lvbnMpIGNvbnMKICAgICBvdXRFeHRlbnNpb25z
LT5zdXJmYWNlbGVzc0NvbnRleHQgICAgPSB0cnVlOwogICAgIG91dEV4dGVuc2lvbnMtPmRldmlj
ZVF1ZXJ5ICAgICAgICAgICA9IHRydWU7CiAKLSAgICAvLyBDb250ZXh0cyBhcmUgdmlydHVhbGl6
ZWQgc28gdGV4dHVyZXMgYW5zIHNlbWFwaG9yZXMgY2FuIGJlIHNoYXJlZCBnbG9iYWxseQotICAg
IG91dEV4dGVuc2lvbnMtPmRpc3BsYXlUZXh0dXJlU2hhcmVHcm91cCAgID0gdHJ1ZTsKLSAgICBv
dXRFeHRlbnNpb25zLT5kaXNwbGF5U2VtYXBob3JlU2hhcmVHcm91cCA9IHRydWU7CisgICAgLy8g
Q29udGV4dHMgYXJlIHZpcnR1YWxpemVkIHNvIHRleHR1cmVzIGNhbiBiZSBzaGFyZWQgZ2xvYmFs
bHkKKyAgICBvdXRFeHRlbnNpb25zLT5kaXNwbGF5VGV4dHVyZVNoYXJlR3JvdXAgPSB0cnVlOwog
CiAgICAgb3V0RXh0ZW5zaW9ucy0+cG93ZXJQcmVmZXJlbmNlID0gZmFsc2U7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWds
L0VBR0xGdW5jdGlvbnMuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9y
ZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjEyNTEzMzhlZWU2
OGY3MDM0ZGM4YzY3NWFlZWZmZmNhNDE5NjU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0aW9u
cy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8vCisvLyBDb3B5cmlnaHQgMjAyMCBBcHBsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIEVBR0xGdW5jdGlvbnMuaDogRXhwb3NpbmcgdGhlIHNvZnQt
bGlua2VkIEVBR0wgaW50ZXJmYWNlLgorCisjaWZuZGVmIEVBR0xfRlVOQ1RJT05TX0hfCisjZGVm
aW5lIEVBR0xfRlVOQ1RJT05TX0hfCisKKyNpbmNsdWRlICJjb21tb24vcGxhdGZvcm0uaCIKKwor
I2lmIChkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX0lPUykgJiYgIWRlZmluZWQoQU5HTEVfUExBVEZP
Uk1fTUFDQ0FUQUxZU1QpKSB8fCBcCisgICAgKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FU
QUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKKworIyAgICBpbXBvcnQgPE9wZW5H
TEVTL0VBR0wuaD4KKyMgICAgaW1wb3J0IDxPcGVuR0xFUy9FQUdMRHJhd2FibGUuaD4KKyMgICAg
aW1wb3J0IDxPcGVuR0xFUy9FQUdMSU9TdXJmYWNlLmg+CisKKyMgICAgaW5jbHVkZSAibGliQU5H
TEUvcmVuZGVyZXIvZ2wvU29mdExpbmtpbmdfYXBwbGUuaCIKKworU09GVF9MSU5LX0ZSQU1FV09S
S19IRUFERVIoT3BlbkdMRVMpCisKK1NPRlRfTElOS19DTEFTU19IRUFERVIoRUFHTENvbnRleHQp
CisKKyNlbmRpZiAgLy8gKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChB
TkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkpIHx8CisgICAgICAgIC8vIChkZWZpbmVkKEFOR0xF
X1BMQVRGT1JNX01BQ0NBVEFMWVNUKSAmJiBkZWZpbmVkKEFOR0xFX0NQVV9BUk02NCkpCisKKyNl
bmRpZiAgLy8gQ0dMX0ZVTkNUSU9OU19IXwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL2VhZ2wvRUFHTEZ1bmN0aW9ucy5tbSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xG
dW5jdGlvbnMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIxZWI3MGM3NWY0ODc5ZDhjZDE4Yzg4NmRmNjllZjM5
YTIzMTg4NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9nbC9lYWdsL0VBR0xGdW5jdGlvbnMubW0KQEAgLTAsMCArMSwyNSBA
QAorLy8KKy8vIENvcHlyaWdodCAyMDIwIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gRUFHTEZ1bmN0aW9ucy5jcHA6IEV4cG9zaW5nIHRoZSBzb2Z0LWxpbmtlZCBFQUdMIGludGVy
ZmFjZS4KKworI2luY2x1ZGUgImNvbW1vbi9wbGF0Zm9ybS5oIgorCisjaWYgKGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fSU9TKSAmJiAhZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkp
IHx8IFwKKyAgICAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9NQUNDQVRBTFlTVCkgJiYgZGVmaW5l
ZChBTkdMRV9DUFVfQVJNNjQpKQorCisjICAgIGltcG9ydCA8T3BlbkdMRVMvRUFHTC5oPgorIyAg
ICBpbXBvcnQgPE9wZW5HTEVTL0VBR0xEcmF3YWJsZS5oPgorIyAgICBpbXBvcnQgPE9wZW5HTEVT
L0VBR0xJT1N1cmZhY2UuaD4KKworIyAgICBpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9nbC9T
b2Z0TGlua2luZ19hcHBsZS5oIgorCitTT0ZUX0xJTktfRlJBTUVXT1JLX1NPVVJDRShPcGVuR0xF
UykKKworU09GVF9MSU5LX0NMQVNTKE9wZW5HTEVTLCBFQUdMQ29udGV4dCkKKworI2VuZGlmICAv
LyAoZGVmaW5lZChBTkdMRV9QTEFURk9STV9JT1MpICYmICFkZWZpbmVkKEFOR0xFX1BMQVRGT1JN
X01BQ0NBVEFMWVNUKSkgfHwKKyAgICAgICAgLy8gKGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFD
Q0FUQUxZU1QpICYmIGRlZmluZWQoQU5HTEVfQ1BVX0FSTTY0KSkKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3BwCmlu
ZGV4IGQ3MGFlNThhMGJmNDlmNjJkZjkyZTg1MjY5ODc3YjMwMTEyZDNmODIuLjYxNWRkNDRkMTRl
OGRiNzAyNmNiOGQ5MThmNWVjZmY5OGE4YmExYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuY3Bw
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbHNs
YW5nX3dyYXBwZXJfdXRpbHMuY3BwCkBAIC0yODEsMTAgKzI4MSwxMiBAQCBzdGQ6OnN0cmluZyBT
dWJzdGl0dXRlVHJhbnNmb3JtRmVlZGJhY2tNYXJrZXJzKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmln
aW5hbFNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnN0cmluZyAmeGZiT3V0KQogewogICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNs
TWFya2VyU3RhcnQgPSBvcmlnaW5hbFNvdXJjZS5maW5kKGtYZmJEZWNsTWFya2VyKTsKLSAgICBj
b25zdCBzaXplX3QgeGZiRGVjbE1hcmtlckVuZCAgID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29u
c3RTdHJMZW4oa1hmYkRlY2xNYXJrZXIpOworICAgIEFTU0VSVCh4ZmJEZWNsTWFya2VyU3RhcnQg
IT0gc3RkOjpzdHJpbmc6Om5wb3MpOworICAgIGNvbnN0IHNpemVfdCB4ZmJEZWNsTWFya2VyRW5k
ID0geGZiRGVjbE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYkRlY2xNYXJrZXIpOwogCiAg
ICAgY29uc3Qgc2l6ZV90IHhmYk91dE1hcmtlclN0YXJ0ID0gb3JpZ2luYWxTb3VyY2UuZmluZChr
WGZiT3V0TWFya2VyLCB4ZmJEZWNsTWFya2VyU3RhcnQpOwotICAgIGNvbnN0IHNpemVfdCB4ZmJP
dXRNYXJrZXJFbmQgICA9IHhmYk91dE1hcmtlclN0YXJ0ICsgQ29uc3RTdHJMZW4oa1hmYk91dE1h
cmtlcik7CisgICAgQVNTRVJUKHhmYk91dE1hcmtlclN0YXJ0ICE9IHN0ZDo6c3RyaW5nOjpucG9z
KTsKKyAgICBjb25zdCBzaXplX3QgeGZiT3V0TWFya2VyRW5kID0geGZiT3V0TWFya2VyU3RhcnQg
KyBDb25zdFN0ckxlbihrWGZiT3V0TWFya2VyKTsKIAogICAgIC8vIFRoZSBzaGFkZXIgaXMgdGhl
IGZvbGxvd2luZyBmb3JtOgogICAgIC8vCkBAIC0zNjIsNyArMzY0LDggQEAgdm9pZCBHZW5lcmF0
ZVRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0
aW9ucyAmb3B0aW8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbHNsYW5nUHJvZ3JhbUludGVyZmFjZUlu
Zm8gKnByb2dyYW1JbnRlcmZhY2VJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyAqdmVydGV4U2hhZGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJJbnRlcmZhY2VWYXJpYWJs
ZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJp
YWJsZUluZm9NYXBPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZWFybHlSZXR1cm4pCiB7CiAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZz4gJnZhcnlpbmdzID0KICAgICAgICAgcHJvZ3JhbVN0YXRl
LmdldExpbmtlZFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoKTsKQEAgLTQxMyw2ICs0MTYsMTAg
QEAgdm9pZCBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBH
bHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW8KICAgICAgICAgICAgIG91dHB1dE9mZnNldCArPSBp
bmZvLmNvbHVtbkNvdW50ICogaW5mby5yb3dDb3VudCAqIHZhcnlpbmcuc2l6ZSgpOwogICAgICAg
ICB9CiAgICAgfQorICAgIGlmIChlYXJseVJldHVybikKKyAgICB7CisgICAgICAgIHhmYk91dCAr
PSAicmV0dXJuOyI7CisgICAgfQogICAgIHhmYk91dCArPSAifVxuIjsKIAogICAgICp2ZXJ0ZXhT
aGFkZXIgPSBTdWJzdGl0dXRlVHJhbnNmb3JtRmVlZGJhY2tNYXJrZXJzKCp2ZXJ0ZXhTaGFkZXIs
IHhmYkRlY2wsIHhmYk91dCk7CkBAIC0zMzY4LDExICszMzc1LDYgQEAgc3RkOjpzdHJpbmcgR2xz
bGFuZ0dldE1hcHBlZFNhbXBsZXJOYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbE5hbWUp
CiAgICAgcmV0dXJuIHNhbXBsZXJOYW1lOwogfQogCi1zdGQ6OnN0cmluZyBHZXRYZmJCdWZmZXJO
YW1lKGNvbnN0IHVpbnQzMl90IGJ1ZmZlckluZGV4KQotewotICAgIHJldHVybiAieGZiQnVmZmVy
IiArIFN0cihidWZmZXJJbmRleCk7Ci19Ci0KIHZvaWQgR2xzbGFuZ0dlblRyYW5zZm9ybUZlZWRi
YWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9ucyAmb3B0aW9ucywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
bDo6UHJvZ3JhbVN0YXRlICZwcm9ncmFtU3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR2xzbGFuZ1Byb2dyYW1JbnRlcmZhY2VJbmZvICpwcm9n
cmFtSW50ZXJmYWNlSW5mbywKQEAgLTMzODAsNyArMzM4Miw3IEBAIHZvaWQgR2xzbGFuZ0dlblRy
YW5zZm9ybUZlZWRiYWNrRW11bGF0aW9uT3V0cHV0cyhjb25zdCBHbHNsYW5nU291cmNlT3B0aW9u
cyAmb3B0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2hhZGVySW50ZXJmYWNlVmFyaWFibGVJbmZvTWFwICp2YXJpYWJsZUluZm9NYXBPdXQpCiB7CiAg
ICAgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMob3B0aW9ucywgcHJv
Z3JhbVN0YXRlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXIsIHZhcmlhYmxlSW5mb01hcE91dCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hh
ZGVyLCB2YXJpYWJsZUluZm9NYXBPdXQsIGZhbHNlKTsKIH0KIAogdm9pZCBHbHNsYW5nQXNzaWdu
TG9jYXRpb25zKGNvbnN0IEdsc2xhbmdTb3VyY2VPcHRpb25zICZvcHRpb25zLApAQCAtMzQyOCw2
ICszNDMwLDU3IEBAIHZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhjb25zdCBHbHNsYW5nU291
cmNlT3B0aW9ucyAmb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGVJbmZvTWFwT3V0KTsKIH0KIAorc3RkOjpzdHJpbmcgR2V0WGZiQnVmZmVyTmFtZShjb25zdCB1
aW50MzJfdCBidWZmZXJJbmRleCkKK3sKKyAgICByZXR1cm4gInhmYkJ1ZmZlciIgKyBTdHIoYnVm
ZmVySW5kZXgpOworfQorCisKK3ZvaWQgR2xzbGFuZ0Fzc2lnbkxvY2F0aW9ucyhHbHNsYW5nU291
cmNlT3B0aW9ucyAmb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
bDo6UHJvZ3JhbUV4ZWN1dGFibGUgJnByb2dyYW1FeGVjdXRhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdsOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR2xzbGFuZ1Byb2dyYW1JbnRlcmZhY2VJbmZvICpwcm9ncmFtSW50
ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFkZXJNYXBJbnRlcmZh
Y2VWYXJpYWJsZUluZm9NYXAgKnZhcmlhYmxlSW5mb01hcE91dCkKK3sKKyAgICAvLyBBc3NpZ24g
b3V0cHV0cyB0byB0aGUgZnJhZ21lbnQgc2hhZGVyLCBpZiBhbnkuCisgICAgaWYgKChzaGFkZXJU
eXBlID09IGdsOjpTaGFkZXJUeXBlOjpGcmFnbWVudCkgJiYKKyAgICAgICAgcHJvZ3JhbUV4ZWN1
dGFibGUuaGFzTGlua2VkU2hhZGVyU3RhZ2UoZ2w6OlNoYWRlclR5cGU6OkZyYWdtZW50KSkKKyAg
ICB7CisgICAgICAgIEFzc2lnbk91dHB1dExvY2F0aW9ucyhwcm9ncmFtRXhlY3V0YWJsZSwgZ2w6
OlNoYWRlclR5cGU6OkZyYWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJigq
dmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVyVHlwZTo6RnJhZ21lbnRdKTsKKyAgICB9CisK
KyAgICAvLyBBc3NpZ24gYXR0cmlidXRlcyB0byB0aGUgdmVydGV4IHNoYWRlciwgaWYgYW55Lgor
ICAgIGlmICgoc2hhZGVyVHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVydGV4KSAmJgorICAgICAg
ICBwcm9ncmFtRXhlY3V0YWJsZS5oYXNMaW5rZWRTaGFkZXJTdGFnZShnbDo6U2hhZGVyVHlwZTo6
VmVydGV4KSkKKyAgICB7CisgICAgICAgIEFzc2lnbkF0dHJpYnV0ZUxvY2F0aW9ucyhwcm9ncmFt
RXhlY3V0YWJsZSwgZ2w6OlNoYWRlclR5cGU6OlZlcnRleCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRl
eF0pOworICAgIH0KKworICAgIGlmICghcHJvZ3JhbUV4ZWN1dGFibGUuaGFzTGlua2VkU2hhZGVy
U3RhZ2UoZ2w6OlNoYWRlclR5cGU6OkNvbXB1dGUpKQorICAgIHsKKyAgICAgICAgLy8gQXNzaWdu
IHZhcnlpbmcgbG9jYXRpb25zLgorICAgICAgICBBc3NpZ25WYXJ5aW5nTG9jYXRpb25zKG9wdGlv
bnMsIHByb2dyYW1FeGVjdXRhYmxlLCBzaGFkZXJUeXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBPdXQpOworCisg
ICAgICAgIGlmICghcHJvZ3JhbUV4ZWN1dGFibGUuZ2V0TGlua2VkVHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncygpLmVtcHR5KCkgJiYKKyAgICAgICAgICAgIG9wdGlvbnMuc3VwcG9ydHNUcmFuc2Zv
cm1GZWVkYmFja0V4dGVuc2lvbiAmJiAoc2hhZGVyVHlwZSA9PSBnbDo6U2hhZGVyVHlwZTo6VmVy
dGV4KSkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzaWduVHJhbnNmb3JtRmVlZGJhY2tFeHRl
bnNpb25RdWFsaWZpZXJzKAorICAgICAgICAgICAgICAgIHByb2dyYW1FeGVjdXRhYmxlLCBwcm9n
cmFtSW50ZXJmYWNlSW5mby0+bG9jYXRpb25zVXNlZEZvclhmYkV4dGVuc2lvbiwKKyAgICAgICAg
ICAgICAgICBnbDo6U2hhZGVyVHlwZTo6VmVydGV4LCAmKCp2YXJpYWJsZUluZm9NYXBPdXQpW2ds
OjpTaGFkZXJUeXBlOjpWZXJ0ZXhdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFzc2lnblVu
aWZvcm1CaW5kaW5ncyhvcHRpb25zLCBwcm9ncmFtRXhlY3V0YWJsZSwgc2hhZGVyVHlwZSwgcHJv
Z3JhbUludGVyZmFjZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlSW5m
b01hcE91dCk7CisgICAgQXNzaWduVGV4dHVyZUJpbmRpbmdzKG9wdGlvbnMsIHByb2dyYW1FeGVj
dXRhYmxlLCBzaGFkZXJUeXBlLCBwcm9ncmFtSW50ZXJmYWNlSW5mbywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGVJbmZvTWFwT3V0KTsKKyAgICBBc3NpZ25Ob25UZXh0dXJlQmlu
ZGluZ3Mob3B0aW9ucywgcHJvZ3JhbUV4ZWN1dGFibGUsIHNoYWRlclR5cGUsIHByb2dyYW1JbnRl
cmZhY2VJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUluZm9NYXBP
dXQpOworfQorCiB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgR2xzbGFuZ1NvdXJj
ZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6
OlByb2dyYW1TdGF0ZSAmcHJvZ3JhbVN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpQcm9ncmFtTGlua2VkUmVzb3VyY2VzICZyZXNvdXJjZXMsCkBAIC0zNDYyLDcg
KzM1MTUsOCBAQCB2b2lkIEdsc2xhbmdHZXRTaGFkZXJTb3VyY2UoY29uc3QgR2xzbGFuZ1NvdXJj
ZU9wdGlvbnMgJm9wdGlvbnMsCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgR2VuZXJh
dGVUcmFuc2Zvcm1GZWVkYmFja0VtdWxhdGlvbk91dHB1dHMoCiAgICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMsIHByb2dyYW1TdGF0ZSwgcHJvZ3JhbUludGVyZmFjZUluZm8sIHZlcnRleFNvdXJj
ZSwKLSAgICAgICAgICAgICAgICAgICAgJigqdmFyaWFibGVJbmZvTWFwT3V0KVtnbDo6U2hhZGVy
VHlwZTo6VmVydGV4XSk7CisgICAgICAgICAgICAgICAgICAgICYoKnZhcmlhYmxlSW5mb01hcE91
dClbZ2w6OlNoYWRlclR5cGU6OlZlcnRleF0sCisgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
dHJhbnNmb3JtRmVlZGJhY2tFYXJseVJldHVybik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0aWxzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2xzbGFuZ193cmFwcGVyX3V0
aWxzLmgKaW5kZXggMmJkMmM2MWE4NzE4NWY0MTYwYjQwZmUyNjRhMzg4YTIxYzU4ZTJkZC4uNjAy
NDhjZGJhZDc2NTk2MDE4OTA4ZmQxMzcyMDkwNzA1YTE5NWE4YSAxMDA2NDQKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsc2xhbmdfd3JhcHBlcl91
dGlscy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJl
ci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaApAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgR2xzbGFu
Z1NvdXJjZU9wdGlvbnMKICAgICBib29sIHN1cHBvcnRzVHJhbnNmb3JtRmVlZGJhY2tFeHRlbnNp
b24gPSBmYWxzZTsKICAgICBib29sIGVtdWxhdGVUcmFuc2Zvcm1GZWVkYmFjayAgICAgICAgICAg
PSBmYWxzZTsKICAgICBib29sIGVtdWxhdGVCcmVzZW5oYW1MaW5lcyAgICAgICAgICAgICAgPSBm
YWxzZTsKKyAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRWFybHlSZXR1cm4gICAgICAgPSBmYWxz
ZTsKIH07CiAKIHVzaW5nIFNwaXJ2QmxvYiA9IHN0ZDo6dmVjdG9yPHVpbnQzMl90PjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9sb2Fk
X2Z1bmN0aW9uc19kYXRhLmpzb24gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5H
TEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfZGF0YS5qc29uCmluZGV4IDhjM2ZkMDU1ZDJkM2Ni
YzQ4OTc4MjJjZDRmM2JkMjQ1OTFhODdhZGMuLjdiY2RlZDA3ZDRjMjRmZjdkNWM4NjhjMDQ1ZDMw
YjNkNDFiOTJiZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJB
TkdMRS9yZW5kZXJlci9sb2FkX2Z1bmN0aW9uc19kYXRhLmpzb24KKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX2RhdGEuanNv
bgpAQCAtNjcyLDYgKzY3Miw5IEBACiAgICAgIkQzMl9GTE9BVF9TOFgyNF9VSU5UIjogewogICAg
ICAgIkdMX1VOU0lHTkVEX0lOVF8yNF84IjogIkxvYWREMjRTOFRvRDMyRlM4WDI0IiwKICAgICAg
ICJHTF9VTlNJR05FRF9JTlQiOiAiTG9hZEQzMlRvRDMyRlgzMiIKKyAgICB9LAorICAgICJEMzJf
RkxPQVQiOiB7CisgICAgICAiR0xfVU5TSUdORURfSU5UIjogIkxvYWREMjRTOFRvRDMyRiIKICAg
ICB9CiAgIH0sCiAgICJHTF9SMzJJIjogewpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRfZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4u
Y3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2xvYWRf
ZnVuY3Rpb25zX3RhYmxlX2F1dG9nZW4uY3BwCmluZGV4IDIwZTcwNmY3YzliYzgzNzlhMzIwNjRj
MGFmNTkzYTE5MGNkOWRlNGQuLjJlZjAxY2EzY2ZlOTA1NzhjODMwNWRiYTA0MzkxNGFmNzZjMDQ4
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5k
ZXJlci9sb2FkX2Z1bmN0aW9uc190YWJsZV9hdXRvZ2VuLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbG9hZF9mdW5jdGlvbnNfdGFibGVfYXV0
b2dlbi5jcHAKQEAgLTQ0Niw4ICs0NDYsNyBAQCBMb2FkSW1hZ2VGdW5jdGlvbkluZm8gQ09NUFJF
U1NFRF9SR0I4X0xPU1NZX0RFQ09ERV9FVEMyX0FOR0xFX3RvX0JDMV9SR0JfVU5PUk1fQgogICAg
IH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9V
R0hfQUxQSEExX0VUQzJfdG9fRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSygKLSAgICBHTGVudW0g
dHlwZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdI
X0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFfVU5PUk1fQkxPQ0soR0xlbnVtIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKQEAgLTQ3MSw4ICs0NzAsNyBAQCBMb2FkSW1hZ2VG
dW5jdGlvbkluZm8gQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19S
OEc4QjhBOF9VTk9STQogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZvCi1DT01QUkVT
U0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19C
QzFfUkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBD
T01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdM
RV90b19CQzFfUkdCQV9VTk9STV9CTE9DSyhHTGVudW0gdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5
cGUpCiAgICAgewpAQCAtMTMxMiw4ICsxMzEwLDcgQEAgTG9hZEltYWdlRnVuY3Rpb25JbmZvIENP
TVBSRVNTRURfU1JHQjhfRVRDMl90b19SOEc4QjhBOF9VTk9STV9TUkdCKEdMZW51bSB0eXBlKQog
ICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfTE9TU1lf
REVDT0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9STV9TUkdCX0JMT0NLKAotICAgIEdMZW51
bSB0eXBlKQorTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfTE9TU1lfREVD
T0RFX0VUQzJfQU5HTEVfdG9fQkMxX1JHQl9VTk9STV9TUkdCX0JMT0NLKEdMZW51bSB0eXBlKQog
ewogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC0xMzI1LDggKzEzMjIsNyBAQCBMb2FkSW1h
Z2VGdW5jdGlvbkluZm8gQ09NUFJFU1NFRF9TUkdCOF9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90
b19CQzFfUkdCX1VOT1JNXwogICAgIH0KIH0KIAotTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBS
RVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyX3RvX0VUQzJfUjhHOEI4QTFfU1JH
Ql9CTE9DSygKLSAgICBHTGVudW0gdHlwZSkKK0xvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVT
U0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMl90b19FVEMyX1I4RzhCOEExX1NSR0Jf
QkxPQ0soR0xlbnVtIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKQEAgLTEzNTAs
OSArMTM0Niw3IEBAIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBDT01QUkVTU0VEX1NSR0I4X1BVTkNI
VEhST1VHSF9BTFBIQTFfRVRDMl90b19SOEc4QjhBOF9VTk9SCiAgICAgfQogfQogCi1Mb2FkSW1h
Z2VGdW5jdGlvbkluZm8KLUNPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9MT1NT
WV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9TUkdCX0JMT0NLKAotICAgIEdM
ZW51bSB0eXBlKQorTG9hZEltYWdlRnVuY3Rpb25JbmZvIENPTVBSRVNTRURfU1JHQjhfUFVOQ0hU
SFJPVUdIX0FMUEhBMV9MT1NTWV9ERUNPREVfRVRDMl9BTkdMRV90b19CQzFfUkdCQV9VTk9STV9T
UkdCX0JMT0NLKEdMZW51bSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CkBAIC0x
NTEwLDYgKzE1MDQsMTggQEAgTG9hZEltYWdlRnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVOVDI0
X3RvX0QyNF9VTk9STV9YOF9VSU5UKEdMZW51bSB0eXBlKQogICAgIH0KIH0KIAorTG9hZEltYWdl
RnVuY3Rpb25JbmZvIERFUFRIX0NPTVBPTkVOVDI0X3RvX0QzMl9GTE9BVChHTGVudW0gdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VDoKKyAgICAgICAgICAgIHJldHVybiBMb2FkSW1hZ2VGdW5jdGlvbkluZm8oTG9hZEQyNFM4VG9E
MzJGLCB0cnVlKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICByZXR1cm4gTG9hZEltYWdlRnVuY3Rpb25JbmZvKFVucmVhY2hhYmxlTG9h
ZEZ1bmN0aW9uLCB0cnVlKTsKKyAgICB9Cit9CisKIExvYWRJbWFnZUZ1bmN0aW9uSW5mbyBERVBU
SF9DT01QT05FTlQyNF90b19EMzJfRkxPQVRfUzhYMjRfVUlOVChHTGVudW0gdHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHR5cGUpCkBAIC0zNjI0LDYgKzM2MzAsOCBAQCBMb2FkRnVuY3Rpb25NYXAgR2V0
TG9hZEZ1bmN0aW9uc01hcChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEZvcm1hdElEIGFuZ2xlRm9y
bWF0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gREVQVEhfQ09NUE9ORU5UMjRfdG9fRDI0
X1VOT1JNX1M4X1VJTlQ7CiAgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDI0X1VOT1JN
X1g4X1VJTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9DT01QT05FTlQyNF90
b19EMjRfVU5PUk1fWDhfVUlOVDsKKyAgICAgICAgICAgICAgICBjYXNlIEZvcm1hdElEOjpEMzJf
RkxPQVQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9DT01QT05FTlQyNF90b19E
MzJfRkxPQVQ7CiAgICAgICAgICAgICAgICAgY2FzZSBGb3JtYXRJRDo6RDMyX0ZMT0FUX1M4WDI0
X1VJTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBERVBUSF9DT01QT05FTlQyNF90b19E
MzJfRkxPQVRfUzhYMjRfVUlOVDsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0JV
SUxELmduIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21l
dGFsL0JVSUxELmduCmluZGV4IDg2OGM0NzZiOTQ0NWI3ZDllOGE1YWMwNWU0YTU4N2NmMDRmNzFi
NDcuLjBkNTBkODFjZGZlNjhlNDdlOTNiNTMwZTU1MWI3ZGZlOTQ2MjFlZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CVUlM
RC5nbgorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvQlVJTEQuZ24KQEAgLTYsNyArNiw3IEBACiAKIGltcG9ydCgiLi4vLi4vLi4vLi4vZ25p
L2FuZ2xlLmduaSIpCiAKLWFzc2VydChpc19tYWMpCithc3NlcnQoaXNfbWFjIHx8IGlzX2lvcykK
IGFzc2VydChhbmdsZV9lbmFibGVfbWV0YWwpCiAKIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBb
CkBAIC0yMSw2ICsyMSw4IEBAIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBbCiAgICJEaXNwbGF5
TXRsX2FwaS5oIiwKICAgIkZyYW1lQnVmZmVyTXRsLmgiLAogICAiRnJhbWVCdWZmZXJNdGwubW0i
LAorICAiSU9TdXJmYWNlU3VyZmFjZU10bC5oIiwKKyAgIklPU3VyZmFjZVN1cmZhY2VNdGwubW0i
LAogICAiUHJvZ3JhbU10bC5oIiwKICAgIlByb2dyYW1NdGwubW0iLAogICAiUXVlcnlNdGwuaCIs
CkBAIC01Miw2ICs1NCw4IEBAIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBbCiAgICJtdGxfZm9y
bWF0X3RhYmxlX2F1dG9nZW4ubW0iLAogICAibXRsX2Zvcm1hdF91dGlscy5oIiwKICAgIm10bF9m
b3JtYXRfdXRpbHMubW0iLAorICAibXRsX2dsc2xhbmdfbXRsX3V0aWxzLmgiLAorICAibXRsX2ds
c2xhbmdfbXRsX3V0aWxzLm1tIiwKICAgIm10bF9nbHNsYW5nX3V0aWxzLmgiLAogICAibXRsX2ds
c2xhbmdfdXRpbHMubW0iLAogICAibXRsX29jY2x1c2lvbl9xdWVyeV9wb29sLmgiLApAQCAtNjUs
MTIgKzY5LDExIEBAIF9tZXRhbF9iYWNrZW5kX3NvdXJjZXMgPSBbCiAgICJtdGxfdXRpbHMuaCIs
CiAgICJtdGxfdXRpbHMubW0iLAogICAic2hhZGVycy9jb25zdGFudHMuaCIsCi0gICJzaGFkZXJz
L2Zvcm1hdF9hdXRvZ2VuLmgiLAotICAic2hhZGVycy9tdGxfZGVmYXVsdF9zaGFkZXJzX3NyY19h
dXRvZ2VuLmluYyIsCisgICJzaGFkZXJzL210bF9kZWZhdWx0X3NoYWRlcnNfc3JjX2F1dG9nZW4u
aW5jIgogXQogCiBjb25maWcoImFuZ2xlX21ldGFsX2JhY2tlbmRfY29uZmlnIikgewotICBkZWZp
bmVzID0gWyAiQU5HTEVfRU5BQkxFX01FVEFMIiBdCisgIGRlZmluZXMgPSBbICJBTkdMRV9FTkFC
TEVfTUVUQUwiLCAiQU5HTEVfRU5BQkxFX01FVEFMX1NQSVJWIiBdCiAgIGxkZmxhZ3MgPSBbCiAg
ICAgIi13ZWFrX2ZyYW1ld29yayIsCiAgICAgIk1ldGFsIiwKQEAgLTk2LDEyICs5OSwxNiBAQCBh
bmdsZV9zb3VyY2Vfc2V0KCJhbmdsZV9tZXRhbF9iYWNrZW5kIikgewogICAgICIke2FuZ2xlX3Jv
b3R9OmxpYkFOR0xFX2hlYWRlcnMiLAogICBdCiAKLSAgZGVwcyA9IFsgIiR7YW5nbGVfc3BpcnZf
Y3Jvc3NfZGlyfS9nbjpzcGlydl9jcm9zc19zb3VyY2VzIiBdCisgIGRlcHMgPSBbCisgICAgIiRh
bmdsZV9zcGlydl90b29sc19kaXI6c3B2dG9vbHNfdmFsIiwKKyAgICAiJHthbmdsZV9zcGlydl9j
cm9zc19kaXJ9L2duOnNwaXJ2X2Nyb3NzX3NvdXJjZXMiLAorICBdCiAKICAgb2JqY19mbGFncyA9
IFsKICAgICAiLVduby1udWxsYWJpbGl0eS1jb21wbGV0ZW5lc3MiLAogICAgICItV25vLXVuZ3Vh
cmRlZC1hdmFpbGFiaWxpdHkiLAogICAgICItZm5vLW9iamMtYXJjIiwKKyAgICAiLVduby1leHRy
YS1zZW1pLXN0bXQiLAogICBdCiAgIGNmbGFnc19vYmpjICs9IG9iamNfZmxhZ3MKICAgY2ZsYWdz
X29iamNjICs9IG9iamNfZmxhZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwuaAppbmRleCA3
NjI1NDllNGQyNzBmOWNmMjQ0ZjMzZTFmZTBiMTkwNWZhMmExMzkyLi45ZjllYzZjYmQ5YzgzMTU3
ZTMxNDc0ZTY2OGQzNTIyZjJlZDRmMjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLmgKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5o
CkBAIC0xNTIsMTAgKzE1MiwxNSBAQCBjbGFzcyBCdWZmZXJNdGwgOiBwdWJsaWMgQnVmZmVySW1w
bCwgcHVibGljIEJ1ZmZlckhvbGRlck10bAogCiAgICAgQ29udmVyc2lvbkJ1ZmZlck10bCAqZ2V0
VW5pZm9ybUNvbnZlcnNpb25CdWZmZXIoQ29udGV4dE10bCAqY29udGV4dCwgc2l6ZV90IG9mZnNl
dCk7CiAKKyAgICAvLyBOT1RFKGhxbGUpOiBJZiB0aGUgYnVmZmVyIGlzIG1vZGlmZWQgYnkgR1BV
LCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhwbGljaXRseQorICAgIC8vIGNhbGxlZC4KKyAgICB2
b2lkIG1hcmtDb252ZXJzaW9uQnVmZmVyc0RpcnR5KCk7CisKICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4obVN0YXRlLmdldFNpemUoKSk7IH0KIAog
ICBwcml2YXRlOgogICAgIGFuZ2xlOjpSZXN1bHQgc2V0RGF0YUltcGwoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyQmlu
ZGluZyB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpk
YXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyVXNhZ2UgdXNhZ2UpOwpAQCAtMTY3LDIw
ICsxNzIsMjQgQEAgY2xhc3MgQnVmZmVyTXRsIDogcHVibGljIEJ1ZmZlckltcGwsIHB1YmxpYyBC
dWZmZXJIb2xkZXJNdGwKICAgICBhbmdsZTo6UmVzdWx0IGNvbW1pdFNoYWRvd0NvcHkoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQpOwogICAgIGFuZ2xlOjpSZXN1bHQgY29tbWl0U2hhZG93Q29w
eShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgc2l6ZV90IHNpemUpOwogCi0gICAgdm9pZCBt
YXJrQ29udmVyc2lvbkJ1ZmZlcnNEaXJ0eSgpOwotCiAgICAgdm9pZCBjbGVhckNvbnZlcnNpb25C
dWZmZXJzKCk7CisKICAgICBib29sIGNsaWVudFNoYWRvd0NvcHlEYXRhTmVlZFN5bmMoQ29udGV4
dE10bCAqY29udGV4dE10bCk7CiAgICAgdm9pZCBlbnN1cmVTaGFkb3dDb3B5U3luY2VkRnJvbUdQ
VShDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKICAgICB1aW50OF90ICpzeW5jQW5kT2J0YWluU2hh
ZG93Q29weShDb250ZXh0TXRsICpjb250ZXh0TXRsKTsKIAorICAgIC8vIENvbnZlbmllbnQgbWV0
aG9kCisgICAgY29uc3QgdWludDhfdCAqZ2V0Q2xpZW50U2hhZG93Q29weURhdGEoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0Q2xpZW50U2hhZG93
Q29weURhdGEobXRsOjpHZXRJbXBsKGNvbnRleHQpKTsKKyAgICB9CiAgICAgLy8gQ2xpZW50IHNp
ZGUgc2hhZG93IGJ1ZmZlcgogICAgIGFuZ2xlOjpNZW1vcnlCdWZmZXIgbVNoYWRvd0NvcHk7CiAK
ICAgICAvLyBHUFUgc2lkZSBidWZmZXJzIHBvb2wKICAgICBtdGw6OkJ1ZmZlclBvb2wgbUJ1ZmZl
clBvb2w7CiAKLSAgICAvLyBBIGNhY2hlIG9mIGNvbnZlcnRlZCBidWZmZXIgZGF0YS4KKyAgICAv
LyBBIGNhY2hlIG9mIGNvbnZlcnRlZCB2ZXJ0ZXggZGF0YS4KICAgICBzdGQ6OnZlY3RvcjxWZXJ0
ZXhDb252ZXJzaW9uQnVmZmVyTXRsPiBtVmVydGV4Q29udmVyc2lvbkJ1ZmZlcnM7CiAKICAgICBz
dGQ6OnZlY3RvcjxJbmRleENvbnZlcnNpb25CdWZmZXJNdGw+IG1JbmRleENvbnZlcnNpb25CdWZm
ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL0J1ZmZlck10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9CdWZmZXJNdGwubW0KaW5kZXggNjRjN2RlOGEzMjhkNWZj
Y2E2MGI0Y2M1ZWVkMjRmYzY4YjU5NjAwNS4uODA5Njk5NmUyODhmNTk1MTMyMWViODhmZmVkN2Rh
MGQwOTkyMTRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0J1ZmZlck10bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQnVmZmVyTXRsLm1tCkBAIC0yMyw2ICsy
MywxMCBAQCBuYW1lc3BhY2UKIC8vIFN0YXJ0IHdpdGggYSBmYWlybHkgc21hbGwgYnVmZmVyIHNp
emUuIFdlIGNhbiBpbmNyZWFzZSB0aGlzIGR5bmFtaWNhbGx5IGFzIHdlIGNvbnZlcnQgbW9yZSBk
YXRhLgogY29uc3RleHByIHNpemVfdCBrQ29udmVydGVkRWxlbWVudEFycmF5QnVmZmVySW5pdGlh
bFNpemUgPSAxMDI0ICogODsKIAorLy8gVGhlIG1heCBzaXplIHRoYXQgd2Ugd2lsbCB1c2UgYnVm
ZmVyIHBvb2wgZm9yIGR5bmFtaWMgdXBkYXRlLgorLy8gSWYgdGhlIGJ1ZmZlciBzaXplIGV4Y2Vl
ZHMgdGhpcyBsaW1pdCwgd2Ugd2lsbCB1c2Ugb25seSBvbmUgYnVmZmVyIGluc3RlYWQgb2YgdXNp
bmcgdGhlIHBvb2wuCitjb25zdGV4cHIgc2l6ZV90IGtEeW5hbWljQnVmZmVyUG9vbE1heEJ1ZlNp
emUgPSAxMjggKiAxMDI0OworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlPgogYW5nbGU6
OlJlc3VsdCBHZXRGaXJzdExhc3RJbmRpY2VzKGNvbnN0IEluZGV4VHlwZSAqaW5kaWNlcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQsCkBAIC0xMDUsNyAr
MTA5LDcgQEAgYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6OnNldERhdGEoY29uc3QgZ2w6OkNvbnRl
eHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW50
ZW5kZWRTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlclVz
YWdlIHVzYWdlKQogewotICAgIHJldHVybiBzZXREYXRhSW1wbChjb250ZXh0LCBkYXRhLCBpbnRl
bmRlZFNpemUsIHVzYWdlKTsKKyAgICByZXR1cm4gc2V0RGF0YUltcGwoY29udGV4dCwgdGFyZ2V0
LCBkYXRhLCBpbnRlbmRlZFNpemUsIHVzYWdlKTsKIH0KIAogYW5nbGU6OlJlc3VsdCBCdWZmZXJN
dGw6OnNldFN1YkRhdGEoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCkBAIC0xNjQsNyArMTY4
LDggQEAgYW5nbGU6OlJlc3VsdCBCdWZmZXJNdGw6Om1hcFJhbmdlKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAogewogICAgIGlmIChhY2Nlc3MgJiBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJf
QklUKQogICAgIHsKLSAgICAgICAgQU5HTEVfVFJZKHNldERhdGFJbXBsKGNvbnRleHQsIG51bGxw
dHIsIHNpemUoKSwgbVN0YXRlLmdldFVzYWdlKCkpKTsKKyAgICAgICAgQU5HTEVfVFJZKHNldERh
dGFJbXBsKGNvbnRleHQsIGdsOjpCdWZmZXJCaW5kaW5nOjpJbnZhbGlkRW51bSwgbnVsbHB0ciwg
c2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLmdldFVzYWdlKCkp
KTsKICAgICB9CiAKICAgICBpZiAobWFwUHRyKQpAQCAtMTczLDcgKzE3OCw3IEBAIGFuZ2xlOjpS
ZXN1bHQgQnVmZmVyTXRsOjptYXBSYW5nZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAg
ICAgICAgaWYgKG1CdWZmZXJQb29sLmdldE1heEJ1ZmZlcnMoKSA9PSAxKQogICAgICAgICB7CiAg
ICAgICAgICAgICAqbWFwUHRyID0gbUJ1ZmZlci0+bWFwV2l0aE9wdChjb250ZXh0TXRsLCAoYWNj
ZXNzICYgR0xfTUFQX1dSSVRFX0JJVCkgPT0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFjY2VzcyAmIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQpICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzICYgR0xfTUFQX1VOU1lOQ0hS
T05JWkVEX0JJVCkgKwogICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDsKICAgICAgICAgfQog
ICAgICAgICBlbHNlCkBAIC0zOTUsNiArNDAwLDcgQEAgdm9pZCBCdWZmZXJNdGw6OmNsZWFyQ29u
dmVyc2lvbkJ1ZmZlcnMoKQogfQogCiBhbmdsZTo6UmVzdWx0IEJ1ZmZlck10bDo6c2V0RGF0YUlt
cGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkJ1ZmZlckJpbmRpbmcgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGludGVuZGVkU2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyVXNhZ2UgdXNhZ2UpCkBAIC00MTMsNiArNDE5
LDEzIEBAIGFuZ2xlOjpSZXN1bHQgQnVmZmVyTXRsOjpzZXREYXRhSW1wbChjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKIAogICAgIHNpemVfdCBhZGp1c3RlZFNpemUgPSBzdGQ6Om1heDxzaXpl
X3Q+KDEsIGludGVuZGVkU2l6ZSk7CiAKKyAgICAvLyBFbnN1cmVzIG5vIHZhbGlkYXRpb24gbGF5
ZXIgaXNzdWVzIGluIHN0ZDE0MCB3aXRoIGRhdGEgdHlwZXMgbGlrZSB2ZWMzIGJlaW5nIDEyIGJ5
dGVzIHZzIDE2CisgICAgLy8gaW4gTVNMLgorICAgIGlmICh0YXJnZXQgPT0gZ2w6OkJ1ZmZlckJp
bmRpbmc6OlVuaWZvcm0pCisgICAgeworICAgICAgICBhZGp1c3RlZFNpemUgPSByb3VuZFVwUG93
MihhZGp1c3RlZFNpemUsIChzaXplX3QpMTYpOworICAgIH0KKwogICAgIHNpemVfdCBtYXhCdWZm
ZXJzOwogICAgIHN3aXRjaCAodXNhZ2UpCiAgICAgewpAQCAtNDI3LDcgKzQ0MCw3IEBAIGFuZ2xl
OjpSZXN1bHQgQnVmZmVyTXRsOjpzZXREYXRhSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIGR5bmFtaWMgYnVmZmVyLCBhbGxv
dyB1cCB0byAxMCB1cGRhdGUgcGVyIGZyYW1lL2VuY29kaW5nIHdpdGhvdXQKICAgICAgICAgICAg
IC8vIHdhaXRpbmcgZm9yIEdQVS4KLSAgICAgICAgICAgIGlmIChhZGp1c3RlZFNpemUgPD0gbXRs
OjprU2hhcmVkTWVtQnVmZmVyTWF4QnVmU2l6ZUhpbnQpCisgICAgICAgICAgICBpZiAoYWRqdXN0
ZWRTaXplIDw9IGtEeW5hbWljQnVmZmVyUG9vbE1heEJ1ZlNpemUpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgbWF4QnVmZmVycyA9IDEwOwogICAgICAgICAgICAgICAgIG1CdWZmZXJQ
b29sLnNldEFsd2F5c1VzZVNoYXJlZE1lbSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVyTXRsLm1tIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbXBpbGVy
TXRsLm1tCmluZGV4IGE1ODY2NzAxYmQ1ZjAyNTYyMmI2MzU0Mjc4OWQ2NDlhNzE0OTJjMGUuLjNl
MjliNGRkODExODJiODgzZThlYjJjZjA3NjRjY2JmYTkwOThlNTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10
bC5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIv
bWV0YWwvQ29tcGlsZXJNdGwubW0KQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJsaWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9Db21waWxlck10bC5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
RW52aXJvbm1lbnRWYXJpYWJsZS5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTIwLDcgKzIxLDE2
IEBAIENvbXBpbGVyTXRsOjp+Q29tcGlsZXJNdGwoKSB7fQogCiBTaFNoYWRlck91dHB1dCBDb21w
aWxlck10bDo6Z2V0VHJhbnNsYXRvck91dHB1dFR5cGUoKSBjb25zdAogewotICAgIHJldHVybiBT
SF9HTFNMX01FVEFMX09VVFBVVDsKKyAgICBpZiAoc2g6OnJlYWRCb29sRW52VmFyKCJBTkdMRV9H
RU5fTVRMX1dJVEhfU1BJUlYiKSkKKyAgICB7CisgICAgICAgIC8vIFdlIHdhbnQgdG8gcmV0dXJu
IEdMIG91dHB1dCBmaXJzdCwgd2UgY2FuJ3QgYWN0dWFsbHkKKyAgICAgICAgLy8gZ2V0IE1TTCBj
b2RlIHVudGlsIGxpbmsgdGltZS4gVHJhbnNsYXRpb24gdGltZSBpcyB0b28gZWFybHkKKyAgICAg
ICAgcmV0dXJuIFNIX0dMU0xfTUVUQUxfT1VUUFVUOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gU0hfTVNMX01FVEFMX09VVFBVVDsKKyAgICB9CiB9CiAKIH0gIC8vIG5h
bWVzcGFjZSByeApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLmgKaW5kZXggMTY4N2M4Yzkx
NDdiZmI5N2RmN2M1YTY0NDAxMmI1ZDIyMDEzY2VkYy4uMmYzOTM3MWQ5ODMzZGExMzY5NTYzNmY4
MzQwMjAzMzBjZWFhZGNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0NvbnRleHRNdGwuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5oCkBAIC0y
OSw4ICsyOSw4IEBAIGNsYXNzIEZyYW1lYnVmZmVyTXRsOwogY2xhc3MgVmVydGV4QXJyYXlNdGw7
CiBjbGFzcyBQcm9ncmFtTXRsOwogY2xhc3MgUmVuZGVyVGFyZ2V0TXRsOwotY2xhc3MgV2luZG93
U3VyZmFjZU10bDsKLWNsYXNzIFRyYW5zZm9ybUZlZWRiYWNrTXRsOworY2xhc3MgU3VyZmFjZU10
bFByb3RvY29sOworY2xhc3MgQnVmZmVyTXRsOwogCiBjbGFzcyBDb250ZXh0TXRsIDogcHVibGlj
IENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiB7CkBAIC04NSw3ICs4NSw3IEBAIGNs
YXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5kaWNlcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZUNv
dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRleCkgb3ZlcnJpZGU7CiAgICAgYW5nbGU6OlJlc3Vs
dCBkcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4QmFzZUluc3RhbmNlKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLApAQCAtMTU3LDYg
KzE1NywxMiBAQCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMg
bXRsOjpDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR0xpbnQgKmJhc2VWZXJ0aWNlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBHTHVpbnQgKmJhc2VJbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBkcmF3
Y291bnQpIG92ZXJyaWRlOworICAgIGFuZ2xlOjpSZXN1bHQgZHJhd0VsZW1lbnRzU2ltcGxlVHlw
ZXNQcmltaXRpdmVSZXN0YXJ0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmlt
aXRpdmVNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZSB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgICAg
Ly8gRGV2aWNlIGxvc3MKICAgICBnbDo6R3JhcGhpY3NSZXNldFN0YXR1cyBnZXRSZXNldFN0YXR1
cygpIG92ZXJyaWRlOwpAQCAtMTk2LDYgKzIwMiw4IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJs
aWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICBjb25zdCBnbDo6RXh0ZW5z
aW9ucyAmZ2V0TmF0aXZlRXh0ZW5zaW9ucygpIGNvbnN0IG92ZXJyaWRlOwogICAgIGNvbnN0IGds
OjpMaW1pdGF0aW9ucyAmZ2V0TmF0aXZlTGltaXRhdGlvbnMoKSBjb25zdCBvdmVycmlkZTsKIAor
ICAgIGNvbnN0IFByb2dyYW1NdGwgKmdldFByb2dyYW0oKSBjb25zdCB7IHJldHVybiBtUHJvZ3Jh
bTsgfQorCiAgICAgLy8gU2hhZGVyIGNyZWF0aW9uCiAgICAgQ29tcGlsZXJJbXBsICpjcmVhdGVD
b21waWxlcigpIG92ZXJyaWRlOwogICAgIFNoYWRlckltcGwgKmNyZWF0ZVNoYWRlcihjb25zdCBn
bDo6U2hhZGVyU3RhdGUgJnN0YXRlKSBvdmVycmlkZTsKQEAgLTI0OSwxMiArMjU3LDI0IEBAIGNs
YXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQK
ICAgICBhbmdsZTo6UmVzdWx0IG1lbW9yeUJhcnJpZXIoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIEdMYml0ZmllbGQgYmFycmllcnMpIG92ZXJyaWRlOwogICAgIGFuZ2xlOjpSZXN1bHQgbWVt
b3J5QmFycmllckJ5UmVnaW9uKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBHTGJpdGZpZWxk
IGJhcnJpZXJzKSBvdmVycmlkZTsKIAorICAgIHZvaWQgaW52YWxpZGF0ZUN1cnJlbnRUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lkIG9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNo
YW5nZWQoKTsKKyAgICBhbmdsZTo6UmVzdWx0IG9uQmVnaW5UcmFuc2Zvcm1GZWVkYmFjaygKKyAg
ICAgICAgc2l6ZV90IGJ1ZmZlckNvdW50LAorICAgICAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKTsKKworICAgIHZvaWQgb25F
bmRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgIGFuZ2xlOjpSZXN1bHQgb25QYXVzZVRyYW5zZm9y
bUZlZWRiYWNrKCk7CisKKyAgICB2b2lkIHBvcHVsYXRlVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJT
ZXQoCisgICAgICAgIHNpemVfdCBidWZmZXJDb3VudCwKKyAgICAgICAgY29uc3QgZ2w6OlRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyc0FycmF5PEJ1ZmZlck10bCAqPiAmYnVmZmVycyk7CiAgICAgLy8g
b3ZlcnJpZGUgbXRsOjpFcnJvckhhbmRsZXIKICAgICB2b2lkIGhhbmRsZUVycm9yKEdMZW51bSBl
cnJvciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBsaW5lKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3Ig
Kl9OdWxsYWJsZSBlcnJvciwKKyAgICB2b2lkIGhhbmRsZUVycm9yKE5TRXJyb3IgKmVycm9yLAog
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IGxpbmUpIG92ZXJyaWRlOwpAQCAtMjcyLDEyICsyOTIsMTIgQEAgY2xhc3MgQ29udGV4dE10
bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10bDo6Q29udGV4dAogICAgIHZvaWQgb25E
cmF3RnJhbWVCdWZmZXJDaGFuZ2VkU3RhdGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWJ1ZmZlck10bCAqZnJh
bWVidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJl
bmRlclBhc3NDaGFuZ2VkKTsKLSAgICB2b2lkIG9uQmFja2J1ZmZlclJlc2l6ZWQoY29uc3QgZ2w6
OkNvbnRleHQgKmNvbnRleHQsIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIpOworICAgIHZv
aWQgb25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFj
ZU10bFByb3RvY29sICpiYWNrYnVmZmVyKTsKIAogICAgIC8vIEludm9rZSBieSBRdWVyeU10bAot
ICAgIGFuZ2xlOjpSZXN1bHQgb25PY2NsdXNpb25RdWVyeUJlZ2luKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOwotICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeUVu
ZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKLSAgICB2b2lk
IG9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVy
eU10bCAqcXVlcnkpOworICAgIGFuZ2xlOjpSZXN1bHQgb25PY2NsdXNpb25RdWVyeUJlZ2FuKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpOworICAgIHZvaWQgb25P
Y2NsdXNpb25RdWVyeUVuZGVkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAq
cXVlcnkpOworICAgIHZvaWQgb25PY2NsdXNpb25RdWVyeURlc3Ryb3llZChjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KTsKIAogICAgIC8vIFVzZWZ1bCBmb3IgdGVt
cG9yYXJpbHkgcGF1c2UgdGhlbiByZXN0YXJ0IG9jY2x1c2lvbiBxdWVyeSBkdXJpbmcgY2xlYXIv
YmxpdCB3aXRoIGRyYXcuCiAgICAgYm9vbCBoYXNBY3RpdmVPY2NsdXNpb25RdWVyeSgpIGNvbnN0
IHsgcmV0dXJuIG1PY2NsdXNpb25RdWVyeTsgfQpAQCAtMzY3LDcgKzM4Nyw3IEBAIGNsYXNzIENv
bnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBtdGw6OkNvbnRleHQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlQ291bnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgaW5kZXhUeXBlT3JOb25lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCB4ZmJQYXNzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdyk7CiAKICAgICBhbmdsZTo6UmVzdWx0
IGRyYXdUcmlGYW5BcnJheXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0LApAQCAtNDE3LDYgKzQzNywxOCBA
QCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250
ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGlj
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VD
b3VudCk7CiAKKyAgICB2b2lkIGV4ZWNEcmF3SW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJp
bWl0aXZlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZlcnRleFN0
YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4Q291bnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbnN0YW5jZXMpOworCisgICAgdm9p
ZCBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4Q291bnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMSW5kZXhUeXBlIGluZGV4VHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdGw6OkJ1ZmZlclJl
ZiAmaW5kZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBpbnN0YW5jZXMpOworCiAgICAgdm9pZCB1cGRhdGVFeHRlbmRlZFN0YXRlKGNvbnN0IGdsOjpT
dGF0ZSAmZ2xTdGF0ZSk7CiAKICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KEZyYW1lYnVmZmVyTXRs
ICpmcmFtZWJ1ZmZlck10bCwKQEAgLTQ0Miw2ICs0NzQsNyBAQCBjbGFzcyBDb250ZXh0TXRsIDog
cHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAgICAgYW5nbGU6OlJlc3Vs
dCBmaWxsRHJpdmVyWEZCVW5pZm9ybXMoR0xpbnQgZHJhd0NhbGxGaXJzdFZlcnRleCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0aWNlc1Blcklu
c3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHNraXBwZWRJbnN0YW5jZXMpOworICAgIGFuZ2xlOjpSZXN1bHQgaGFuZGxlRGlydHlHcmFwaGlj
c1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc0VtdWxhdGlvbihjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCBoYW5kbGVEaXJ0eURlcHRoU3RlbmNpbFN0YXRlKGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKICAgICBhbmdsZTo6UmVzdWx0IGhhbmRsZURpcnR5
RGVwdGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKICAgICBhbmdsZTo6UmVzdWx0
IGhhbmRsZURpcnR5UmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CkBAIC00
NzAsNiArNTAzLDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVi
bGljIG10bDo6Q29udGV4dAogICAgICAgICBESVJUWV9CSVRfUkVOREVSX1BJUEVMSU5FLAogICAg
ICAgICBESVJUWV9CSVRfVU5JRk9STV9CVUZGRVJTX0JJTkRJTkcsCiAgICAgICAgIERJUlRZX0JJ
VF9SQVNURVJJWkVSX0RJU0NBUkQsCisgICAgICAgIERJUlRZX0JJVF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSUywKICAgICAgICAgRElSVFlfQklUX01BWCwKICAgICB9OwogCkBAIC00ODgsNyAr
NTIyLDcgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVibGljIG10
bDo6Q29udGV4dAogICAgICAgICB1aW50MzJfdCB4ZmJBY3RpdmVVbnBhdXNlZDsKICAgICAgICAg
dWludDMyX3QgeGZiVmVydGljZXNQZXJEcmF3OwogICAgICAgICAvLyBOT1RFOiBFeHBsaWNpdCBw
YWRkaW5nLiBGaWxsIGluIHdpdGggdXNlZnVsIGRhdGEgd2hlbiBuZWVkZWQgaW4gdGhlIGZ1dHVy
ZS4KLSAgICAgICAgaW50MzJfdCBwYWRkaW5nWzNdOworICAgICAgICBpbnQzMl90IHBhZGRpbmdf
MFszXTsKIAogICAgICAgICBpbnQzMl90IHhmYkJ1ZmZlck9mZnNldHNbNF07CiAgICAgICAgIHVp
bnQzMl90IGFjYkJ1ZmZlck9mZnNldHNbNF07CkBAIC01MDgsMTIgKzU0MiwxNSBAQCBjbGFzcyBD
b250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250ZXh0CiAKICAg
ICAgICAgdWludDMyX3QgY292ZXJhZ2VNYXNrOwogCi0gICAgICAgIGZsb2F0IHBhZGRpbmcyWzNd
OworICAgICAgICBpbnQzMl90IGVtdWxhdGVkSW5zdGFuY2VJRDsKKworICAgICAgICAvLyBOT1RF
OiBFeHBsaWNpdCBwYWRkaW5nLiBGaWxsIGluIHdpdGggdXNlZnVsIGRhdGEgd2hlbiBuZWVkZWQg
aW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgaW50MzJfdCBwYWRkaW5nXzFbMl07CiAgICAgfTsKIAog
ICAgIHN0cnVjdCBEZWZhdWx0QXR0cmlidXRlCiAgICAgewotICAgICAgICB1aW50OF90IHZhbHVl
c1tzaXplb2YoZmxvYXQpICogNF07CisgICAgICAgIGZsb2F0IHZhbHVlc1s0XTsKICAgICB9Owog
CiAgICAgbXRsOjpPY2NsdXNpb25RdWVyeVBvb2wgbU9jY2x1c2lvblF1ZXJ5UG9vbDsKQEAgLTUy
Miw2ICs1NTksMTMgQEAgY2xhc3MgQ29udGV4dE10bCA6IHB1YmxpYyBDb250ZXh0SW1wbCwgcHVi
bGljIG10bDo6Q29udGV4dAogICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgbVJlbmRlckVu
Y29kZXI7CiAgICAgbXRsOjpCbGl0Q29tbWFuZEVuY29kZXIgbUJsaXRFbmNvZGVyOwogICAgIG10
bDo6Q29tcHV0ZUNvbW1hbmRFbmNvZGVyIG1Db21wdXRlRW5jb2RlcjsKKyAgICAvLyBUT0RPKGpj
dW5uaW5naGFtKToKKyAgICAvLyBDYWNoZSB0aGUgY3VycmVudCBkcmF3IGNhbGwncyBmaXJzdFZl
cnRleCB0byBiZSBwYXNzZWQgdG8KKyAgICAvLyBUcmFuc2Zvcm1GZWVkYmFja010bDo6Z2V0QnVm
ZmVyT2Zmc2V0cy4gIFdlIHNob3VsZCBzd2l0Y2gKKyAgICAvLyB0byB1c2luZyBnbF9CYXNlVmVy
dGV4IC0+IGJhc2VfdmVydGV4IGluIE1TTAorICAgIEdMaW50IG1YZmJCYXNlVmVydGV4OworICAg
IC8vIENhY2hlIHRoZSBjdXJyZW50IGRyYXcgY2FsbCdzIHZlcnRleCBjb3VudCBhcyB3ZWxsIHRv
IHN1cHBvcnQgaW5zdGFuY2VkIGRyYXcgY2FsbHMKKyAgICBHTHVpbnQgbVhmYlZlcnRleENvdW50
UGVySW5zdGFuY2U7CiAKICAgICAvLyBDYWNoZWQgYmFjay1lbmQgb2JqZWN0cwogICAgIEZyYW1l
YnVmZmVyTXRsICptRHJhd0ZyYW1lYnVmZmVyID0gbnVsbHB0cjsKQEAgLTU1NCw2ICs1OTgsOCBA
QCBjbGFzcyBDb250ZXh0TXRsIDogcHVibGljIENvbnRleHRJbXBsLCBwdWJsaWMgbXRsOjpDb250
ZXh0CiAgICAgbXRsOjpCdWZmZXJQb29sIG1UcmlGYW5JbmRleEJ1ZmZlcjsKICAgICAvLyBvbmUg
YnVmZmVyIGNhbiBiZSByZXVzZWQgZm9yIGFueSBzdGFydGluZyB2ZXJ0ZXggaW4gRHJhd0FycmF5
cygpCiAgICAgbXRsOjpCdWZmZXJSZWYgbVRyaUZhbkFycmF5c0luZGV4QnVmZmVyOworICAgIC8v
CisgICAgbXRsOjpCdWZmZXJQb29sIG1QcmltaXRpdmVSZXN0YXJ0QnVmZmVyOwogCiAgICAgLy8g
RHVtbXkgdGV4dHVyZSB0byBiZSB1c2VkIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2sgb25seSBwYXNz
LgogICAgIG10bDo6VGV4dHVyZVJlZiBtRHVtbXlYRkJSZW5kZXJUZXh0dXJlOwpAQCAtNTYyLDYg
KzYwOCw5IEBAIGNsYXNzIENvbnRleHRNdGwgOiBwdWJsaWMgQ29udGV4dEltcGwsIHB1YmxpYyBt
dGw6OkNvbnRleHQKIAogICAgIERlZmF1bHRBdHRyaWJ1dGUgbURlZmF1bHRBdHRyaWJ1dGVzW210
bDo6a01heFZlcnRleEF0dHJpYnNdOwogCisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGJ1ZmZl
cnMuCisgICAgc3RkOjp1bm9yZGVyZWRfc2V0PGNvbnN0IEJ1ZmZlck10bCAqPiBtQ3VycmVudFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyczsKKwogICAgIEluY29tcGxldGVUZXh0dXJlU2V0IG1JbmNv
bXBsZXRlVGV4dHVyZXM7CiAgICAgYm9vbCBtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQg
PSBmYWxzZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
QU5HTEUvcmVuZGVyZXIvbWV0YWwvQ29udGV4dE10bC5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tCmluZGV4IDI3ZTY5
Nzg3MDIxZjc4ZDdiZGI3ZWQwYzgwMGVlYTVjNDEwMWE0NmYuLjMyODUwYzk4N2JkODk0MmIxNjM4
MzA5OWQ4YmRiOTdmOGY5ZjQ3ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1tCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9Db250ZXh0TXRsLm1t
CkBAIC00NCwyNSArNDQsNiBAQCBjb25zdGV4cHIgdWludDMyX3Qga01heFRyaUZhbkxpbmVMb29w
QnVmZmVyc1BlckZyYW1lID0gMDsKIGNvbnN0ZXhwciB1aW50MzJfdCBrTWF4VHJpRmFuTGluZUxv
b3BCdWZmZXJzUGVyRnJhbWUgPSAxMDsKICNlbmRpZgogCi0jZGVmaW5lIEFOR0xFX01UTF9YRkJf
RFJBVyhEUkFXX1BST0MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBpZiAoIW1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
VW5wYXVzZWQoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qIE5vcm1hbCBkcmF3
IGNhbGwgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgRFJBV19QUk9DKGZhbHNlKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAvKiBGaXJzdCBwYXNzOiB3cml0ZSB0byBYRkIgYnVmZmVycyBpbiB2ZXJ0ZXggc2hhZGVy
LCBmcmFnbWVudCBzaGFkZXIgaW5hY3RpdmUgKi8gICBcCi0gICAgICAgIERSQVdfUFJPQyh0cnVl
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVu
YWJsZWQoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAvKiBTZWNvbmQg
cGFzczogZnVsbCByYXN0ZXJpemF0aW9uOiB2ZXJ0ZXggc2hhZGVyICsgZnJhZ21lbnQgc2hhZGVy
IGFyZSBhY3RpdmUuIFwKLSAgICAgICAgICAgICAgIFZlcnRleCBzaGFkZXIgd3JpdGVzIHRvIHN0
YWdlIG91dHB1dCBidXQgd29uJ3Qgd3JpdGUgdG8gWEZCIGJ1ZmZlcnMgKi8gICAgICAgXAotICAg
ICAgICAgICAgaW52YWxpZGF0ZVJlbmRlclBpcGVsaW5lKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBEUkFXX1BST0Mo
ZmFsc2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IH0KLQogYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRyaWFuZ2xlRmFuQnVmZmVyRnJvbVBvb2woQ29u
dGV4dE10bCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgdmVydGV4Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCkBAIC04NCwxMSAr
NjUsMTEgQEAgYW5nbGU6OlJlc3VsdCBBbGxvY2F0ZVRyaWFuZ2xlRmFuQnVmZmVyRnJvbVBvb2wo
Q29udGV4dE10bCAqY29udGV4dCwKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7
CiB9CiAKLWFuZ2xlOjpSZXN1bHQgQWxsb2NhdGVMaW5lTG9vcEJ1ZmZlckZyb21Qb29sKENvbnRl
eHRNdGwgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTHNpemVpIGluZGljZXNUb1Jlc2VydmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OkJ1ZmZlclJlZiAqYnVmZmVyT3V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
Km9mZnNldE91dCkKK2FuZ2xlOjpSZXN1bHQgQWxsb2NhdGVCdWZmZXJGcm9tUG9vbChDb250ZXh0
TXRsICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6
ZWkgaW5kaWNlc1RvUmVzZXJ2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtdGw6OkJ1ZmZlclBvb2wgKnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXRsOjpCdWZmZXJSZWYgKmJ1ZmZlck91dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCAqb2Zmc2V0T3V0KQogewogICAgIHNpemVfdCBvZmZzZXQ7
CiAgICAgcG9vbC0+cmVsZWFzZUluRmxpZ2h0QnVmZmVycyhjb250ZXh0KTsKQEAgLTEwNSwxMiAr
ODYsNyBAQCBib29sIE5lZWRUb0ludmVydERlcHRoUmFuZ2UoZmxvYXQgbmVhciwgZmxvYXQgZmFy
KQogICAgIHJldHVybiBuZWFyID4gZmFyOwogfQogCi1ib29sIElzVHJhbnNmb3JtRmVlZGJhY2tP
bmx5KGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSkKLXsKLSAgICByZXR1cm4gZ2xTdGF0ZS5pc1Ry
YW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSAmJiBnbFN0YXRlLmlzUmFzdGVyaXplckRp
c2NhcmRFbmFibGVkKCk7Ci19Ci0KLXN0ZDo6c3RyaW5nIENvbnZlcnRNYXJrZXJUb1N0cmluZyhH
THNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFya2VyKQorc3RkOjpzdHJpbmcgQ29udmVydE1h
cmtlclRvQ3BwKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBjaGFyICptYXJrZXIpCiB7CiAgICAgc3Rk
OjpzdHJpbmcgY3BwU3RyaW5nOwogICAgIGlmIChsZW5ndGggPT0gMCkKQEAgLTE3Myw3ICsxNDks
NyBAQCBjbGFzcyBMaW5lTG9vcExhc3RTZWdtZW50SGVscGVyCiAgICAgICAgICAgICAgICAgICAg
IHtpbmRleFR5cGVPck5vbmUsIHZlcnRleE9ySW5kZXhDb3VudCwgaW5kaWNlcywgbUxpbmVMb29w
SW5kZXhCdWZmZXIsIDB9KSk7CiAgICAgICAgIH0KIAotICAgICAgICBBTkdMRV9UUlkoaW5kZXhC
dWZmZXJQb29sLT5jb21taXQobUNvbnRleHRNdGwpKTsKKyAgICAgICAgQU5HTEVfVFJZKGluZGV4
QnVmZmVyUG9vbC0+Y29tbWl0KG1Db250ZXh0TXRsLCBmYWxzZSkpOwogCiAgICAgICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAgICB9CkBAIC0xOTEsNyArMTY3LDggQEAgQ29u
dGV4dE10bDo6Q29udGV4dE10bChjb25zdCBnbDo6U3RhdGUgJnN0YXRlLCBnbDo6RXJyb3JTZXQg
KmVycm9yU2V0LCBEaXNwbGF5TXQKICAgICAgIG1DbWRCdWZmZXIoJmRpc3BsYXktPmNtZFF1ZXVl
KCkpLAogICAgICAgbVJlbmRlckVuY29kZXIoJm1DbWRCdWZmZXIsIG1PY2NsdXNpb25RdWVyeVBv
b2wpLAogICAgICAgbUJsaXRFbmNvZGVyKCZtQ21kQnVmZmVyKSwKLSAgICAgIG1Db21wdXRlRW5j
b2RlcigmbUNtZEJ1ZmZlcikKKyAgICAgIG1Db21wdXRlRW5jb2RlcigmbUNtZEJ1ZmZlciksCisg
ICAgICBtWGZiVmVydGV4Q291bnRQZXJJbnN0YW5jZSgwKQoge30KIAogQ29udGV4dE10bDo6fkNv
bnRleHRNdGwoKSB7fQpAQCAtMjA4LDYgKzE4NSw4IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10
bDo6aW5pdGlhbGl6ZSgpCiAgICAgbUxpbmVMb29wTGFzdFNlZ21lbnRJbmRleEJ1ZmZlci5pbml0
aWFsaXplKHRoaXMsIDIgKiBzaXplb2YodWludDMyX3QpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OmtJbmRleEJ1ZmZlck9mZnNldEFsaWdubWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heFRy
aUZhbkxpbmVMb29wQnVmZmVyc1BlckZyYW1lKTsKKyAgICBtUHJpbWl0aXZlUmVzdGFydEJ1ZmZl
ci5pbml0aWFsaXplKHRoaXMsIDAsIG10bDo6a0luZGV4QnVmZmVyT2Zmc2V0QWxpZ25tZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga01heFRyaUZhbkxpbmVMb29w
QnVmZmVyc1BlckZyYW1lKTsKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsK
IH0KQEAgLTIyNywyMyArMjA2LDIwIEBAIHZvaWQgQ29udGV4dE10bDo6b25EZXN0cm95KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250ZXh0KQogCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmVuc3Vy
ZUluY29tcGxldGVUZXh0dXJlc0NyZWF0ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7
Ci0gICAgaWYgKEFOR0xFX0xJS0VMWShtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwotICAgIH0KLSAg
ICBjb25zdGV4cHIgZ2w6OlRleHR1cmVUeXBlIHN1cHBvcnRlZFRleHR1cmVUeXBlc1tdID0ge2ds
OjpUZXh0dXJlVHlwZTo6XzJELCBnbDo6VGV4dHVyZVR5cGU6Ol8zRCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlVHlw
ZTo6XzJEQXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZVR5cGU6OkN1YmVNYXB9OwotICAgIGZvciAoZ2w6OlRl
eHR1cmVUeXBlIHRleFR5cGUgOiBzdXBwb3J0ZWRUZXh0dXJlVHlwZXMpCisgICAgaWYgKEFOR0xF
X1VOTElLRUxZKCFtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQpKQogICAgIHsKLSAgICAg
ICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Ci0gICAgICAgIEFOR0xFX1RSWShtSW5jb21wbGV0ZVRl
eHR1cmVzLmdldEluY29tcGxldGVUZXh0dXJlKGNvbnRleHQsIHRleFR5cGUsIG51bGxwdHIsICZ0
ZXh0dXJlKSk7Ci0KLSAgICAgICAgVGV4dHVyZU10bCAqdGV4dHVyZU10bCAgICAgICAgICAgICAg
ICAgICAgICA9IG10bDo6R2V0SW1wbCh0ZXh0dXJlKTsKLSAgICAgICAgdGV4dHVyZU10bC0+Z2V0
TmF0aXZlVGV4dHVyZSgpLT5nZXQoKS5sYWJlbCA9IEAiSW5jb21wbGV0ZVRleHR1cmUiOworICAg
ICAgICBjb25zdGV4cHIgZ2w6OlRleHR1cmVUeXBlIHN1cHBvcnRlZFRleHR1cmVUeXBlc1tdID0g
eworICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlOjpfMkQsIGdsOjpUZXh0dXJlVHlwZTo6XzJE
QXJyYXksIGdsOjpUZXh0dXJlVHlwZTo6XzNELAorICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBl
OjpDdWJlTWFwfTsKKyAgICAgICAgZm9yIChhdXRvIHRleFR5cGUgOiBzdXBwb3J0ZWRUZXh0dXJl
VHlwZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAg
ICAgICAgICAgQU5HTEVfVU5VU0VEX1ZBUklBQkxFKHRleHR1cmUpOworICAgICAgICAgICAgQU5H
TEVfVFJZKAorICAgICAgICAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXMuZ2V0SW5jb21wbGV0
ZVRleHR1cmUoY29udGV4dCwgdGV4VHlwZSwgbnVsbHB0ciwgJnRleHR1cmUpKTsKKyAgICAgICAg
fQorICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0K
LSAgICBtSW5jb21wbGV0ZVRleHR1cmVzSW5pdGlhbGl6ZWQgPSB0cnVlOwotCiAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCkBAIC0yODIsNyArMjU4LDE3IEBAIGFuZ2xl
OjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c1dpdGhCYXNlVmVydGV4KGNvbnN0
IGdsOjpDb250ZXh0ICpjb250CiAgICAgICAgICAgICB0aGlzLCB7MCwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGNvdW50KSwgbVRyaUZhbkFycmF5c0luZGV4QnVmZmVyLCAwfSkpOwogICAgIH0KIAot
ICAgIEFTU0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQo
KSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkK
KyAgICB7CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2
ZU1vZGU6OlRyaWFuZ2xlRmFuLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cnVlKSk7CisgICAgICAgIC8vIERyYXcgd2l0aCB0aGUgemVybyBzdGFydGluZyBpbmRleCBi
dWZmZXIsIHNoaWZ0IHRoZSB2ZXJ0ZXggaW5kZXggdXNpbmcgYmFzZVZlcnRleAorICAgICAgICAv
LyBpbnN0YW5jZWQgZHJhdzoKKyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0
YW5jZWRCYXNlVmVydGV4KE1UTFByaW1pdGl2ZVR5cGVUcmlhbmdsZSwgZ2VuSW5kaWNlc0NvdW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TVRMSW5kZXhUeXBlVUludDMyLCBtVHJpRmFuQXJyYXlzSW5kZXhCdWZmZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBpbnN0YW5jZXMs
IGZpcnN0KTsKKyAgICB9CiAKICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQ
cmltaXRpdmVNb2RlOjpUcmlhbmdsZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCAqPigwKSwKQEAgLTMxMSwxNiArMjk3LDIzIEBAIGFu
Z2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1RyaUZhbkFycmF5c0xlZ2FjeShjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgdGhpcywge3N0YXRpY19jYXN0PHVpbnQzMl90Pihm
aXJzdCksIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb3VudCksIGdlbklkeEJ1ZmZlciwKICAgICAg
ICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0pKTsKIAotICAgIEFOR0xFX1RSWShtVHJpRmFu
SW5kZXhCdWZmZXIuY29tbWl0KHRoaXMpKTsKKyAgICBBTkdMRV9UUlkobVRyaUZhbkluZGV4QnVm
ZmVyLmNvbW1pdCh0aGlzLCBmYWxzZSkpOwogCi0gICAgQVNTRVJUKCFnZXRTdGF0ZSgpLmlzVHJh
bnNmb3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKTsKKyAgICBpZiAobVN0YXRlLmlzVHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorICAgIHsKKyAgICAgICAgQU5HTEVfVFJZKHNl
dHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5nbGVGYW4sIGZpcnN0LCBj
b3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxl
bWVudHNUeXBlOjpJbnZhbGlkRW51bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkICo+KDAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpKTsKIAorICAgICAgICBleGVjRHJh
d0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291
bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworICAgIH0KICAg
ICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2RlOjpUcmlhbmds
ZUZhbiwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dm9pZCAqPigwKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSk7CiAKLSAgICBtUmVu
ZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChNVExQcmltaXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGlj
ZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0KTsKKyAgICBleGVjRHJhd0luZGV4
ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsIE1U
TEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVm
ZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGluc3RhbmNlcyk7CiAKICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6Q29udGludWU7CiB9CkBAIC0zNjgsMjIgKzM2MSwyNyBAQCBhbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OmRyYXdMaW5lTG9vcEFycmF5cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKICAgICB1aW50MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CiAgICAgdWludDMyX3QgZ2VuSW5k
aWNlc0NvdW50ID0gY291bnQgKyAxOwogCi0gICAgQU5HTEVfVFJZKEFsbG9jYXRlTGluZUxvb3BC
dWZmZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291bnQsICZtTGluZUxvb3BJbmRleEJ1ZmZl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnZW5JZHhC
dWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsKKyAgICBBTkdMRV9UUlkoQWxsb2NhdGVCdWZm
ZXJGcm9tUG9vbCh0aGlzLCBnZW5JbmRpY2VzQ291bnQsICZtTGluZUxvb3BJbmRleEJ1ZmZlciwg
JmdlbklkeEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2Vu
SWR4QnVmZmVyT2Zmc2V0KSk7CiAgICAgQU5HTEVfVFJZKGdldERpc3BsYXkoKS0+Z2V0VXRpbHMo
KS5nZW5lcmF0ZUxpbmVMb29wQnVmZmVyRnJvbUFycmF5cygKICAgICAgICAgdGhpcywge3N0YXRp
Y19jYXN0PHVpbnQzMl90PihmaXJzdCksIHN0YXRpY19jYXN0PHVpbnQzMl90Pihjb3VudCksIGdl
bklkeEJ1ZmZlciwKICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlck9mZnNldH0pKTsKIAotICAg
IEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21taXQodGhpcykpOworICAgIEFOR0xF
X1RSWShtTGluZUxvb3BJbmRleEJ1ZmZlci5jb21taXQodGhpcywgZmFsc2UpKTsKIAotICAgIEFT
U0VSVCghZ2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSk7Cisg
ICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7
CisgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6
OkxpbmVMb29wLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sIG51bGxwdHIsIHRydWUp
KTsKIAorICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZUxp
bmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwg
aW5zdGFuY2VzKTsKKyAgICB9CiAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6
UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGU6OkludmFsaWRFbnVtLCBudWxs
cHRyLCBmYWxzZSkpOwogCi0gICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWQo
TVRMUHJpbWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVm
ZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zdGFuY2VzKTsKKyAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJp
bWl0aXZlVHlwZUxpbmVTdHJpcCwgZ2VuSW5kaWNlc0NvdW50LCBNVExJbmRleFR5cGVVSW50MzIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwgZ2VuSWR4QnVmZmVy
T2Zmc2V0LCBpbnN0YW5jZXMpOwogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVl
OwogfQpAQCAtNDEzLDIxICs0MTEsMzMgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3
QXJyYXlzSW1wbChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKIAogICAgIE1UTFByaW1pdGl2
ZVR5cGUgbXRsVHlwZSA9IG10bDo6R2V0UHJpbWl0aXZlVHlwZShtb2RlKTsKIAotI2RlZmluZSBE
UkFXX0dFTkVSSUNfQVJSQVkoeGZiUGFzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFOR0xFX1RSWShzZXR1cERy
YXcoY29udGV4dCwgbW9kZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMsIGdsOjpEcmF3RWxlbWVu
dHNUeXBlOjpJbnZhbGlkRW51bSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwg
eGZiUGFzcykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIGlmIChpbnN0YW5jZXMgPT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAvKiBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgZnJvbSBub3JtYWwgZHJhd0FycmF5cygpICovICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3KG10bFR5cGUs
IGZpcnN0LCBjb3VudCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3
SW5zdGFuY2VkKG10bFR5cGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VDb3VudCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2
ZVVucGF1c2VkKCkpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQs
IG1vZGUsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlOjpJbnZhbGlkRW51bSwgbnVsbHB0ciwgdHJ1ZSkpOwor
CisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
VGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gbm9ybWFsIGRyYXdBcnJheXMoKQorICAgICAgICAg
ICAgbVJlbmRlckVuY29kZXIuZHJhdyhtdGxUeXBlLCBmaXJzdCwgY291bnQpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXhlY0RyYXdJbnN0YW5jZWQo
bXRsVHlwZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKyAgICAgICAgfQogICAgIH0K
KyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIGZpcnN0LCBjb3VudCwgaW5z
dGFuY2VzLCBnbDo6RHJhd0VsZW1lbnRzVHlwZTo6SW52YWxpZEVudW0sCisgICAgICAgICAgICAg
ICAgICAgICAgICBudWxscHRyLCBmYWxzZSkpOwogCi0gICAgQU5HTEVfTVRMX1hGQl9EUkFXKERS
QVdfR0VORVJJQ19BUlJBWSkKKyAgICBpZiAoaW5zdGFuY2VzID09IDApCisgICAgeworICAgICAg
ICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBub3JtYWwgZHJhd0FycmF5cygpCisgICAg
ICAgIG1SZW5kZXJFbmNvZGVyLmRyYXcobXRsVHlwZSwgZmlyc3QsIGNvdW50KTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZXhlY0RyYXdJbnN0YW5jZWQobXRsVHlwZSwgZmlyc3Qs
IGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKyAgICB9CiAKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6Q29udGludWU7CiB9CkBAIC00ODAsMTYgKzQ5MCwyNSBAQCBhbmdsZTo6UmVzdWx0IENvbnRl
eHRNdGw6OmRyYXdUcmlGYW5FbGVtZW50cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2VuSWR4
QnVmZmVyT2Zmc2V0LCAmZ2VuSW5kaWNlc0NvdW50KSk7CiAKICAgICAgICAgQU5HTEVfVFJZKGdl
dERpc3BsYXkoKS0+Z2V0VXRpbHMoKS5nZW5lcmF0ZVRyaUZhbkJ1ZmZlckZyb21FbGVtZW50c0Fy
cmF5KAotICAgICAgICAgICAgdGhpcywge3R5cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZm
ZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgcHJpbWl0aXZlUmVzdGFydH0pKTsKKyAgICAgICAgICAg
IHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJP
ZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9LAorICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkp
OworCisgICAgICAgIEFOR0xFX1RSWShtVHJpRmFuSW5kZXhCdWZmZXIuY29tbWl0KHRoaXMsIGZh
bHNlKSk7CisKKyAgICAgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5w
YXVzZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250
ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6VHJpYW5nbGVGYW4sIDAsIGNvdW50LCBpbnN0YW5jZXMs
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMsIHRydWUpKTsK
IAotICAgICAgICBBTkdMRV9UUlkobVRyaUZhbkluZGV4QnVmZmVyLmNvbW1pdCh0aGlzKSk7Cisg
ICAgICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZVRyaWFu
Z2xlLCBnZW5JbmRpY2VzQ291bnQsIE1UTEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwg
aW5zdGFuY2VzKTsKKyAgICAgICAgfQogCiAgICAgICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29u
dGV4dCwgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlRmFuLCAwLCBjb3VudCwgaW5zdGFuY2Vz
LCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljZXMsIGZhbHNlKSk7CiAK
LSAgICAgICAgbVJlbmRlckVuY29kZXIuZHJhd0luZGV4ZWRJbnN0YW5jZWQoTVRMUHJpbWl0aXZl
VHlwZVRyaWFuZ2xlLCBnZW5JbmRpY2VzQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwgZ2VuSWR4QnVmZmVyLCBnZW5J
ZHhCdWZmZXJPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc3RhbmNlcyk7CisgICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChNVExQcmlt
aXRpdmVUeXBlVHJpYW5nbGUsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZm
ZXJPZmZzZXQsIGluc3RhbmNlcyk7CiAKICAgICAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogICAgIH0gIC8vIGlmIChjb3VudCA+IDMpCkBAIC01MzIsMjcgKzU1MSw4NyBAQCBh
bmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdMaW5lTG9vcEVsZW1lbnRzKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAogICAgICAgICB1aW50MzJfdCBnZW5JZHhCdWZmZXJPZmZzZXQ7CiAg
ICAgICAgIHVpbnQzMl90IHJlc2VydmVkSW5kaWNlcyA9IGNvdW50ICogMjsKICAgICAgICAgdWlu
dDMyX3QgZ2VuSW5kaWNlc0NvdW50OwotICAgICAgICBBTkdMRV9UUlkoQWxsb2NhdGVMaW5lTG9v
cEJ1ZmZlckZyb21Qb29sKHRoaXMsIHJlc2VydmVkSW5kaWNlcywgJm1MaW5lTG9vcEluZGV4QnVm
ZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZn
ZW5JZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsKKyAgICAgICAgQU5HTEVfVFJZKEFs
bG9jYXRlQnVmZmVyRnJvbVBvb2wodGhpcywgcmVzZXJ2ZWRJbmRpY2VzLCAmbUxpbmVMb29wSW5k
ZXhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnZW5J
ZHhCdWZmZXIsICZnZW5JZHhCdWZmZXJPZmZzZXQpKTsKIAogICAgICAgICBBTkdMRV9UUlkoZ2V0
RGlzcGxheSgpLT5nZXRVdGlscygpLmdlbmVyYXRlTGluZUxvb3BCdWZmZXJGcm9tRWxlbWVudHNB
cnJheSgKICAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVm
ZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHByaW1pdGl2ZVJlc3RhcnR9LAogICAgICAgICAgICAg
JmdlbkluZGljZXNDb3VudCkpOwogCi0gICAgICAgIEFOR0xFX1RSWShtTGluZUxvb3BJbmRleEJ1
ZmZlci5jb21taXQodGhpcykpOworICAgICAgICBBTkdMRV9UUlkobUxpbmVMb29wSW5kZXhCdWZm
ZXIuY29tbWl0KHRoaXMsIGZhbHNlKSk7CisKKyAgICAgICAgaWYgKG1TdGF0ZS5pc1RyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgQU5HTEVf
VFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIDAsIGNv
dW50LCBpbnN0YW5jZXMsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGljZXMsIHRydWUpKTsKKworICAgICAgICAgICAgZXhlY0RyYXdJbmRleGVkSW5zdGFuY2VkKE1U
TFByaW1pdGl2ZVR5cGVMaW5lU3RyaXAsIGdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUlu
dDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklkeEJ1ZmZlciwg
Z2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworICAgICAgICB9CiAKICAgICAgICAgQU5H
TEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBnbDo6UHJpbWl0aXZlTW9kZTo6TGluZUxvb3AsIDAs
IGNvdW50LCBpbnN0YW5jZXMsIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
aWNlcywgZmFsc2UpKTsKIAotICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3Rh
bmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1UTEluZGV4VHlwZVVJbnQzMiwg
Z2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyk7CisgICAgICAgIGV4ZWNEcmF3SW5kZXhl
ZEluc3RhbmNlZChNVExQcmltaXRpdmVUeXBlTGluZVN0cmlwLCBnZW5JbmRpY2VzQ291bnQsIE1U
TEluZGV4VHlwZVVJbnQzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbklk
eEJ1ZmZlciwgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOwogCiAgICAgICAgIHJldHVy
biBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKICAgICB9ICAvLyBpZiAoY291bnQgPj0gMikKICAg
ICByZXR1cm4gZHJhd0VsZW1lbnRzSW5zdGFuY2VkKGNvbnRleHQsIGdsOjpQcmltaXRpdmVNb2Rl
OjpMaW5lcywgY291bnQsIHR5cGUsIGluZGljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnN0YW5jZXMpOwogfQorYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxl
bWVudHNTaW1wbGVUeXBlc1ByaW1pdGl2ZVJlc3RhcnQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6UHJpbWl0aXZlTW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBj
b3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMpCit7CisKKyAgICBt
dGw6OkJ1ZmZlclJlZiBnZW5JZHhCdWZmZXI7CisgICAgdWludDMyX3QgZ2VuSWR4QnVmZmVyT2Zm
c2V0OworICAgIHVpbnQzMl90IHJlc2VydmVkSW5kaWNlcyA9IGNvdW50OworICAgIHNpemVfdCBn
ZW5JbmRpY2VzQ291bnQ7CisgICAgQU5HTEVfVFJZKEFsbG9jYXRlQnVmZmVyRnJvbVBvb2wodGhp
cywgcmVzZXJ2ZWRJbmRpY2VzLCAmbVByaW1pdGl2ZVJlc3RhcnRCdWZmZXIsICZnZW5JZHhCdWZm
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdlbklkeEJ1ZmZlck9m
ZnNldCkpOworICAgIHN3aXRjaCAobW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgZ2w6OlByaW1p
dGl2ZU1vZGU6OlBvaW50czoKKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdl
dFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVSZXN0YXJ0UG9pbnRzQnVmZmVyKAorICAgICAgICAg
ICAgICAgIHRoaXMsIHt0eXBlLCBjb3VudCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhC
dWZmZXJPZmZzZXQsIHRydWV9LAorICAgICAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGdsOjpQcmltaXRpdmVNb2RlOjpMaW5l
czoKKyAgICAgICAgICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJh
dGVQcmltaXRpdmVSZXN0YXJ0TGluZXNCdWZmZXIoCisgICAgICAgICAgICAgICAgdGhpcywge3R5
cGUsIGNvdW50LCBpbmRpY2VzLCBnZW5JZHhCdWZmZXIsIGdlbklkeEJ1ZmZlck9mZnNldCwgdHJ1
ZX0sCisgICAgICAgICAgICAgICAgJmdlbkluZGljZXNDb3VudCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgZ2w6OlByaW1pdGl2ZU1vZGU6OlRyaWFuZ2xlczoKKyAgICAgICAg
ICAgIEFOR0xFX1RSWShnZXREaXNwbGF5KCktPmdldFV0aWxzKCkuZ2VuZXJhdGVQcmltaXRpdmVS
ZXN0YXJ0VHJpYW5nbGVzQnVmZmVyKAorICAgICAgICAgICAgICAgIHRoaXMsIHt0eXBlLCBjb3Vu
dCwgaW5kaWNlcywgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIHRydWV9LAorICAg
ICAgICAgICAgICAgICZnZW5JbmRpY2VzQ291bnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOworICAgIH0KKyAgICBBTkdMRV9UUlkobVByaW1pdGl2
ZVJlc3RhcnRCdWZmZXIuY29tbWl0KHRoaXMpKTsKKyAgICBNVExQcmltaXRpdmVUeXBlIG10bFR5
cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CisgICAgaWYgKG1TdGF0ZS5pc1RyYW5z
Zm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAgIEFOR0xFX1RSWShz
ZXR1cERyYXcoY29udGV4dCwgbW9kZSwgMCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IHZvaWQgKj4oMCks
IHRydWUpKTsKKworICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQobXRsVHlwZSwgKHVp
bnQzMl90KWdlbkluZGljZXNDb3VudCwgTVRMSW5kZXhUeXBlVUludDMyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2VuSWR4QnVmZmVyLCBnZW5JZHhCdWZmZXJPZmZzZXQsIGlu
c3RhbmNlcyk7CisgICAgfQorICAgIEFOR0xFX1RSWShzZXR1cERyYXcoY29udGV4dCwgbW9kZSwg
MCwgY291bnQsIGluc3RhbmNlcywgdHlwZSwgaW5kaWNlcywgZmFsc2UpKTsKKworICAgIGV4ZWNE
cmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCAodWludDMyX3QpZ2VuSW5kaWNlc0NvdW50LCBN
VExJbmRleFR5cGVVSW50MzIsIGdlbklkeEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuSWR4QnVmZmVyT2Zmc2V0LCBpbnN0YW5jZXMpOworCisgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworfQogCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdF
bGVtZW50c0ltcGwoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKQEAgLTU2
Myw3ICs2NDIsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0ltcGwo
Y29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiB7CiAgICAgLy8gUmVhbCBpbnN0YW5jZXMgY291
bnQuIFplcm8gbWVhbnMgdGhpcyBpcyBub3QgaW5zdGFuY2VkIGRyYXcuCiAgICAgR0xzaXplaSBp
bnN0YW5jZUNvdW50ID0gaW5zdGFuY2VzID8gaW5zdGFuY2VzIDogMTsKLQogICAgIGlmIChtQ3Vs
bEFsbFBvbHlnb25zICYmIGdsOjpJc1BvbHlnb25Nb2RlKG1vZGUpKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwpAQCAtNTc3LDE4ICs2NTUsMzkgQEAgYW5n
bGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3RWxlbWVudHNJbXBsKGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0LAogICAgIHsKICAgICAgICAgcmV0dXJuIGRyYXdMaW5lTG9vcEVsZW1lbnRzKGNv
bnRleHQsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCBpbnN0YW5jZUNvdW50KTsKICAgICB9Ci0KICAg
ICBtdGw6OkJ1ZmZlclJlZiBpZHhCdWZmZXI7CiAgICAgc2l6ZV90IGNvbnZlcnRlZE9mZnNldCAg
ICAgICAgICAgICA9IDA7CiAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUgY29udmVydGVkVHlwZSA9
IHR5cGU7CisgICAgc2l6ZV90IGNvbnZlcnRlZENvdW50ICAgICAgICAgICAgICA9IChzaXplX3Qp
Y291bnQ7CiAKLSAgICBBTkdMRV9UUlkobVZlcnRleEFycmF5LT5nZXRJbmRleEJ1ZmZlcihjb250
ZXh0LCB0eXBlLCBjb3VudCwgaW5kaWNlcywgJmlkeEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udmVydGVkT2Zmc2V0LCAmY29udmVydGVkVHlw
ZSkpOworICAgIEFOR0xFX1RSWShtVmVydGV4QXJyYXktPmdldEluZGV4QnVmZmVyKGNvbnRleHQs
IHR5cGUsIG1vZGUsIGNvdW50LCBpbmRpY2VzLCAmaWR4QnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJ0ZWRPZmZzZXQsICZjb252ZXJ0ZWRU
eXBlLCAmY29udmVydGVkQ291bnQpKTsKIAogICAgIEFTU0VSVChpZHhCdWZmZXIpOwogICAgIEFT
U0VSVCgoY29udmVydGVkT2Zmc2V0ICUgbXRsOjprSW5kZXhCdWZmZXJPZmZzZXRBbGlnbm1lbnQp
ID09IDApOworICAgIHVpbnQzMl90IGNvbnZlcnRlZENvdW50aTMyID0gKHVpbnQzMl90KWNvbnZl
cnRlZENvdW50OworICAgIGlmIChtU3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZVVucGF1
c2VkKCkpCisgICAgeworICAgICAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUs
IDAsIGNvbnZlcnRlZENvdW50aTMyLCBpbnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIHRydWUpKTsK
KyAgICAgICAgTVRMUHJpbWl0aXZlVHlwZSBtdGxUeXBlID0gbXRsOjpHZXRQcmltaXRpdmVUeXBl
KG1vZGUpOwogCi0gICAgQU5HTEVfVFJZKHNldHVwRHJhdyhjb250ZXh0LCBtb2RlLCAwLCBjb3Vu
dCwgaW5zdGFuY2VzLCB0eXBlLCBpbmRpY2VzLCBmYWxzZSkpOworICAgICAgICBNVExJbmRleFR5
cGUgbXRsSWR4VHlwZSA9IG10bDo6R2V0SW5kZXhUeXBlKGNvbnZlcnRlZFR5cGUpOworCisgICAg
ICAgIGlmIChpbnN0YW5jZXMgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTm9ybWFs
IGRyYXcKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXdJbmRleGVkKG10bFR5cGUsIGNv
bnZlcnRlZENvdW50aTMyLCBtdGxJZHhUeXBlLCBpZHhCdWZmZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRPZmZzZXQpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSW5zdGFuY2VkIGRyYXcKKyAgICAg
ICAgICAgIGV4ZWNEcmF3SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBjb252ZXJ0ZWRDb3VudGkz
MiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnZlcnRlZE9mZnNldCwgaW5zdGFuY2VDb3VudCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBBTkdMRV9UUlkoc2V0dXBEcmF3KGNvbnRleHQsIG1vZGUsIDAsIGNvbnZlcnRlZENv
dW50aTMyLCBpbnN0YW5jZXMsIHR5cGUsIGluZGljZXMsIGZhbHNlKSk7CiAKICAgICBNVExQcmlt
aXRpdmVUeXBlIG10bFR5cGUgPSBtdGw6OkdldFByaW1pdGl2ZVR5cGUobW9kZSk7CiAKQEAgLTU5
NywxMyArNjk2LDE0IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzSW1w
bChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICBpZiAoaW5zdGFuY2VzID09IDApCiAg
ICAgewogICAgICAgICAvLyBOb3JtYWwgZHJhdwotICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3
SW5kZXhlZChtdGxUeXBlLCBjb3VudCwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLCBjb252ZXJ0ZWRP
ZmZzZXQpOworICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZChtdGxUeXBlLCBjb252
ZXJ0ZWRDb3VudGkzMiwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb252ZXJ0ZWRPZmZzZXQpOwogICAgIH0KICAgICBlbHNlCiAgICAg
ewogICAgICAgICAvLyBJbnN0YW5jZWQgZHJhdwotICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3
SW5kZXhlZEluc3RhbmNlZChtdGxUeXBlLCBjb3VudCwgbXRsSWR4VHlwZSwgaWR4QnVmZmVyLCBj
b252ZXJ0ZWRPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluc3RhbmNlQ291bnQpOworICAgICAgICBleGVjRHJhd0luZGV4ZWRJbnN0YW5jZWQobXRs
VHlwZSwgY29udmVydGVkQ291bnRpMzIsIG10bElkeFR5cGUsIGlkeEJ1ZmZlciwgY29udmVydGVk
T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VDb3VudCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwpAQCAtNjI1LDcg
KzcyNSw2IEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzQmFzZVZlcnRl
eChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJhc2VWZXJ0ZXgpCiB7
Ci0gICAgLy8gTk9URShocWxlKTogRVMgMy4yCiAgICAgVU5JTVBMRU1FTlRFRCgpOwogICAgIHJl
dHVybiBhbmdsZTo6UmVzdWx0OjpTdG9wOwogfQpAQCAtNjQ5LDEwICs3NDgsOSBAQCBhbmdsZTo6
UmVzdWx0IENvbnRleHRNdGw6OmRyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c1R5cGUg
dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBiYXNlVmVydGV4KQogewotICAgIC8vIE5PVEUoaHFs
ZSk6IEVTIDMuMgogICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6U3RvcDsKIH0KQEAgLTY2OSw3ICs3NjcsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
OmRyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXhCYXNlSW5zdGFuY2UoY29uc3QgZ2w6Ogog
ICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6U3RvcDsKIH0K
LQogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpkcmF3UmFuZ2VFbGVtZW50cyhjb25zdCBnbDo6
Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlByaW1pdGl2ZU1vZGUgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0x1aW50IHN0YXJ0LApAQCAtNjkwLDcgKzc4Nyw2IEBAIGFuZ2xl
OjpSZXN1bHQgQ29udGV4dE10bDo6ZHJhd1JhbmdlRWxlbWVudHNCYXNlVmVydGV4KGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbmRpY2VzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYmFzZVZlcnRleCkKIHsK
LSAgICAvLyBOT1RFKGhxbGUpOiBFUyAzLjIKICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgcmV0
dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CiB9CkBAIC03MTMsNiArODA5LDY0IEBAIGFuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6ZHJhd0VsZW1lbnRzSW5kaXJlY3QoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OlN0b3A7CiB9CiAKK3ZvaWQgQ29u
dGV4dE10bDo6ZXhlY0RyYXdJbnN0YW5jZWQoTVRMUHJpbWl0aXZlVHlwZSBwcmltaXRpdmVUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhTdGFy
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmVydGV4Q291
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNl
cykKK3sKKyAgICBpZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJ
bnN0YW5jZWREcmF3LmVuYWJsZWQpCisgICAgeworICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3
SW5zdGFuY2VkKHByaW1pdGl2ZVR5cGUsIHZlcnRleFN0YXJ0LCB2ZXJ0ZXhDb3VudCwgaW5zdGFu
Y2VzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVJlbmRlckVuY29kZXIuZHJh
dyhwcmltaXRpdmVUeXBlLCB2ZXJ0ZXhTdGFydCwgdmVydGV4Q291bnQpOworICAgICAgICBmb3Ig
KHVpbnQzMl90IGluc3QgPSAxOyBpbnN0IDwgaW5zdGFuY2VzOyArK2luc3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy5lbXVsYXRlZEluc3RhbmNlSUQgPSBpbnN0Owor
CisgICAgICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3Jt
cywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5kZXgpOworCisgICAgICAgICAgICBtVmVy
dGV4QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZtUmVuZGVyRW5jb2RlciwgaW5zdCk7
CisKKyAgICAgICAgICAgIG1SZW5kZXJFbmNvZGVyLmRyYXcocHJpbWl0aXZlVHlwZSwgdmVydGV4
U3RhcnQsIHZlcnRleENvdW50KTsKKyAgICAgICAgfQorICAgICAgICAvLyBSZXNldCBpbnN0YW5j
ZSBJRCB0byB6ZXJvCisgICAgICAgIG1WZXJ0ZXhBcnJheS0+ZW11bGF0ZUluc3RhbmNlRHJhd1N0
ZXAoJm1SZW5kZXJFbmNvZGVyLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dE10bDo6ZXhl
Y0RyYXdJbmRleGVkSW5zdGFuY2VkKE1UTFByaW1pdGl2ZVR5cGUgcHJpbWl0aXZlVHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluZGV4Q291
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVExJbmRleFR5
cGUgaW5kZXhUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbXRsOjpCdWZmZXJSZWYgJmluZGV4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJ1ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGluc3RhbmNlcykKK3sKKyAgICBp
ZiAoZ2V0RGlzcGxheSgpLT5nZXRGZWF0dXJlcygpLmhhc0Jhc2VWZXJ0ZXhJbnN0YW5jZWREcmF3
LmVuYWJsZWQpCisgICAgeworICAgICAgICBtUmVuZGVyRW5jb2Rlci5kcmF3SW5kZXhlZEluc3Rh
bmNlZChwcmltaXRpdmVUeXBlLCBpbmRleENvdW50LCBpbmRleFR5cGUsIGluZGV4QnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJPZmZzZXQs
IGluc3RhbmNlcyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1SZW5kZXJFbmNv
ZGVyLmRyYXdJbmRleGVkKHByaW1pdGl2ZVR5cGUsIGluZGV4Q291bnQsIGluZGV4VHlwZSwgaW5k
ZXhCdWZmZXIsIGJ1ZmZlck9mZnNldCk7CisgICAgICAgIGZvciAodWludDMyX3QgaW5zdCA9IDE7
IGluc3QgPCBpbnN0YW5jZXM7ICsraW5zdCkKKyAgICAgICAgeworICAgICAgICAgICAgbURyaXZl
clVuaWZvcm1zLmVtdWxhdGVkSW5zdGFuY2VJRCA9IGluc3Q7CisKKyAgICAgICAgICAgIG1SZW5k
ZXJFbmNvZGVyLnNldFZlcnRleERhdGEobURyaXZlclVuaWZvcm1zLCBtdGw6OmtEcml2ZXJVbmlm
b3Jtc0JpbmRpbmdJbmRleCk7CisKKyAgICAgICAgICAgIG1WZXJ0ZXhBcnJheS0+ZW11bGF0ZUlu
c3RhbmNlRHJhd1N0ZXAoJm1SZW5kZXJFbmNvZGVyLCBpbnN0KTsKKworICAgICAgICAgICAgbVJl
bmRlckVuY29kZXIuZHJhd0luZGV4ZWQocHJpbWl0aXZlVHlwZSwgaW5kZXhDb3VudCwgaW5kZXhU
eXBlLCBpbmRleEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1ZmZlck9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVzZXQgaW5zdGFuY2UgSUQg
dG8gemVybworICAgICAgICBtVmVydGV4QXJyYXktPmVtdWxhdGVJbnN0YW5jZURyYXdTdGVwKCZt
UmVuZGVyRW5jb2RlciwgMCk7CisgICAgfQorfQorCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6
Om11bHRpRHJhd0FycmF5cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcmltaXRpdmVNb2RlIG1vZGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHTGludCAqZmly
c3RzLApAQCAtODAyLDE1ICs5NTYsMTUgQEAgc3RkOjpzdHJpbmcgQ29udGV4dE10bDo6Z2V0UmVu
ZGVyZXJEZXNjcmlwdGlvbigpIGNvbnN0CiAvLyBFWFRfZGVidWdfbWFya2VyCiBhbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6Omluc2VydEV2ZW50TWFya2VyKEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBj
aGFyICptYXJrZXIpCiB7CisgICAgbUNtZEJ1ZmZlci5pbnNlcnREZWJ1Z1NpZ24oQ29udmVydE1h
cmtlclRvQ3BwKGxlbmd0aCwgbWFya2VyKSk7CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNv
bnRpbnVlOwogfQogCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnB1c2hHcm91cE1hcmtlcihH
THNpemVpIGxlbmd0aCwgY29uc3QgY2hhciAqbWFya2VyKQogewotICAgIG1DbWRCdWZmZXIucHVz
aERlYnVnR3JvdXAoQ29udmVydE1hcmtlclRvU3RyaW5nKGxlbmd0aCwgbWFya2VyKSk7CisgICAg
bUNtZEJ1ZmZlci5wdXNoRGVidWdHcm91cChDb252ZXJ0TWFya2VyVG9DcHAobGVuZ3RoLCBtYXJr
ZXIpKTsKICAgICByZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7CiB9Ci0KIGFuZ2xlOjpS
ZXN1bHQgQ29udGV4dE10bDo6cG9wR3JvdXBNYXJrZXIoKQogewogICAgIG1DbWRCdWZmZXIucG9w
RGVidWdHcm91cCgpOwpAQCAtMTE1NSwxMCArMTMwOSwxMiBAQCBRdWVyeUltcGwgKkNvbnRleHRN
dGw6OmNyZWF0ZVF1ZXJ5KGdsOjpRdWVyeVR5cGUgdHlwZSkKIHsKICAgICByZXR1cm4gbmV3IFF1
ZXJ5TXRsKHR5cGUpOwogfQorCiBGZW5jZU5WSW1wbCAqQ29udGV4dE10bDo6Y3JlYXRlRmVuY2VO
VigpCiB7CiAgICAgcmV0dXJuIG5ldyBGZW5jZU5WTXRsKCk7CiB9CisKIFN5bmNJbXBsICpDb250
ZXh0TXRsOjpjcmVhdGVTeW5jKCkKIHsKICAgICByZXR1cm4gbmV3IFN5bmNNdGwoKTsKQEAgLTEy
MDUsNiArMTM2MSw2OSBAQCBPdmVybGF5SW1wbCAqQ29udGV4dE10bDo6Y3JlYXRlT3ZlcmxheShj
b25zdCBnbDo6T3ZlcmxheVN0YXRlICZzdGF0ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAor
dm9pZCBDb250ZXh0TXRsOjppbnZhbGlkYXRlQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
cygpCit7CisgICAgaWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVyZXMoKS5lbXVsYXRlVHJhbnNm
b3JtRmVlZGJhY2suZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1EaXJ0eUJpdHMuc2V0KERJUlRZ
X0JJVF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUyk7CisgICAgfQorfQorCit2b2lkIENvbnRl
eHRNdGw6Om9uVHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKQoreworICAgIGlmIChnZXRE
aXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQp
CisgICAgeworICAgICAgICBpbnZhbGlkYXRlRHJpdmVyVW5pZm9ybXMoKTsKKyAgICB9Cit9CisK
K2FuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6b25CZWdpblRyYW5zZm9ybUZlZWRiYWNrKAorICAg
IHNpemVfdCBidWZmZXJDb3VudCwKKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzQXJyYXk8QnVmZmVyTXRsICo+ICZidWZmZXJzKQoreworICAgIG9uVHJhbnNmb3JtRmVlZGJh
Y2tTdGF0ZUNoYW5nZWQoKTsKKworICAgIGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVm
ZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKKyAgICB7CisgICAgICAgIGlm
IChtQ3VycmVudFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycy5jb3VudChidWZmZXJzW2J1ZmZlcklu
ZGV4XSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZW5kRW5jb2RpbmcobVJlbmRlckVu
Y29kZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwb3B1
bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyU2V0KGJ1ZmZlckNvdW50LCBidWZmZXJzKTsKKwor
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKwordm9pZCBDb250ZXh0TXRs
Ojpwb3B1bGF0ZVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyU2V0KAorICAgIHNpemVfdCBidWZmZXJD
b3VudCwKKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8QnVmZmVy
TXRsICo+ICZidWZmZXJzKQoreworICAgIGZvciAoc2l6ZV90IGJ1ZmZlckluZGV4ID0gMDsgYnVm
ZmVySW5kZXggPCBidWZmZXJDb3VudDsgKytidWZmZXJJbmRleCkKKyAgICB7CisgICAgICAgIG1D
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzLmluc2VydChidWZmZXJzW2J1ZmZlckluZGV4
XSk7CisgICAgfQorfQorCit2b2lkIENvbnRleHRNdGw6Om9uRW5kVHJhbnNmb3JtRmVlZGJhY2so
KQoreworICAgIGlmIChnZXREaXNwbGF5KCktPmdldEZlYXR1cmVzKCkuZW11bGF0ZVRyYW5zZm9y
bUZlZWRiYWNrLmVuYWJsZWQpCisgICAgeworICAgICAgICBvblRyYW5zZm9ybUZlZWRiYWNrU3Rh
dGVDaGFuZ2VkKCk7CisgICAgfQorfQorCithbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6Om9uUGF1
c2VUcmFuc2Zvcm1GZWVkYmFjaygpCit7CisgICAgaWYgKGdldERpc3BsYXkoKS0+Z2V0RmVhdHVy
ZXMoKS5lbXVsYXRlVHJhbnNmb3JtRmVlZGJhY2suZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG9u
VHJhbnNmb3JtRmVlZGJhY2tTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOworfQorCiBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmRpc3Bh
dGNoQ29tcHV0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBudW1Hcm91cHNYLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IG51bUdyb3Vwc1ksCkBAIC0xMzMx
LDYgKzE1NTAsMTEgQEAgY29uc3QgbXRsOjpGb3JtYXQgJkNvbnRleHRNdGw6OmdldFBpeGVsRm9y
bWF0KGFuZ2xlOjpGb3JtYXRJRCBhbmdsZUZvcm1hdElkKSBjb24KICAgICByZXR1cm4gZ2V0RGlz
cGxheSgpLT5nZXRQaXhlbEZvcm1hdChhbmdsZUZvcm1hdElkKTsKIH0KIAorY29uc3QgbXRsOjpG
b3JtYXRDYXBzICZDb250ZXh0TXRsOjpnZXROYXRpdmVGb3JtYXRDYXBzKE1UTFBpeGVsRm9ybWF0
IG10bEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0RGlzcGxheSgpLT5nZXROYXRpdmVG
b3JtYXRDYXBzKG10bEZvcm1hdCk7Cit9CisKIC8vIFNlZSBtdGw6OkZvcm1hdFRhYmxlOjpnZXRW
ZXJ0ZXhGb3JtYXQoKQogY29uc3QgbXRsOjpWZXJ0ZXhGb3JtYXQgJkNvbnRleHRNdGw6OmdldFZl
cnRleEZvcm1hdChhbmdsZTo6Rm9ybWF0SUQgYW5nbGVGb3JtYXRJZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB0aWdodGx5UGFja2Vk
KSBjb25zdApAQCAtMTMzOCwxMSArMTU2Miw2IEBAIGNvbnN0IG10bDo6VmVydGV4Rm9ybWF0ICZD
b250ZXh0TXRsOjpnZXRWZXJ0ZXhGb3JtYXQoYW5nbGU6OkZvcm1hdElEIGFuZ2xlRm9ybWF0CiAg
ICAgcmV0dXJuIGdldERpc3BsYXkoKS0+Z2V0VmVydGV4Rm9ybWF0KGFuZ2xlRm9ybWF0SWQsIHRp
Z2h0bHlQYWNrZWQpOwogfQogCi1jb25zdCBtdGw6OkZvcm1hdENhcHMgJkNvbnRleHRNdGw6Omdl
dE5hdGl2ZUZvcm1hdENhcHMoTVRMUGl4ZWxGb3JtYXQgbXRsRm9ybWF0KSBjb25zdAotewotICAg
IHJldHVybiBnZXREaXNwbGF5KCktPmdldE5hdGl2ZUZvcm1hdENhcHMobXRsRm9ybWF0KTsKLX0K
LQogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpnZXRJbmNvbXBsZXRlVGV4dHVyZShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmVUeXBlIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlICoqdGV4dHVyZU91dCkKQEAgLTEz
NjIsNiArMTU4MSwyMiBAQCB2b2lkIENvbnRleHRNdGw6OmVuZFJlbmRlckVuY29kaW5nKG10bDo6
UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIpCiAKICAgICAvLyBSZXNvbHZlIHZpc2liaWxp
dHkgcmVzdWx0cwogICAgIG1PY2NsdXNpb25RdWVyeVBvb2wucmVzb2x2ZVZpc2liaWxpdHlSZXN1
bHRzKHRoaXMpOworCisgICAgbUN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMuY2xlYXIo
KTsKKworICAgIC8vIFJlc2V0IHNlcmlhbHMgZm9yIFhGQiBpZiBhY3RpdmUuCisgICAgaWYgKG1T
dGF0ZS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKKyAgICB7CisgICAgICAg
IGNvbnN0IGdsOjpQcm9ncmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IG1TdGF0ZS5nZXRQcm9n
cmFtRXhlY3V0YWJsZSgpOworICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZSk7CisgICAgICAgIHNp
emVfdCB4ZmJCdWZmZXJDb3VudCA9IGV4ZWN1dGFibGUtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyQ291bnQoKTsKKworICAgICAgICBUcmFuc2Zvcm1GZWVkYmFja010bCAqdHJhbnNmb3JtRmVl
ZGJhY2tNdGwgPQorICAgICAgICAgICAgbXRsOjpHZXRJbXBsKG1TdGF0ZS5nZXRDdXJyZW50VHJh
bnNmb3JtRmVlZGJhY2soKSk7CisKKyAgICAgICAgcG9wdWxhdGVUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlclNldCh4ZmJCdWZmZXJDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja010bC0+Z2V0QnVmZmVySGFuZGxlcygpKTsKKyAg
ICB9CiB9CiAKIHZvaWQgQ29udGV4dE10bDo6ZW5kRW5jb2RpbmcoYm9vbCBmb3JjZVNhdmVSZW5k
ZXJQYXNzQ29udGVudCkKQEAgLTEzOTAsNyArMTYyNSw3IEBAIHZvaWQgQ29udGV4dE10bDo6ZW5k
RW5jb2RpbmcoYm9vbCBmb3JjZVNhdmVSZW5kZXJQYXNzQ29udGVudCkKIAogdm9pZCBDb250ZXh0
TXRsOjpmbHVzaENvbW1hbmRCdWZlcigpCiB7Ci0gICAgaWYgKCFtQ21kQnVmZmVyLnJlYWR5KCkp
CisgICAgaWYgKCFtQ21kQnVmZmVyLnZhbGlkKCkpCiAgICAgewogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTQ1NCw2ICsxNjg5LDI3IEBAIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKkNv
bnRleHRNdGw6OmdldFJlbmRlclBhc3NDb21tYW5kRW5jb2Rlcihjb25zdCBtdGw6OlJlCiAgICAg
Ly8gTmVlZCB0byByZS1hcHBseSBldmVyeXRoaW5nIG9uIG5leHQgZHJhdyBjYWxsLgogICAgIG1E
aXJ0eUJpdHMuc2V0KCk7CiAKKyAgICBpZDxNVExEZXZpY2U+IG1ldGFsRGV2aWNlID0gZ2V0RGlz
cGxheSgpLT5nZXRNZXRhbERldmljZSgpOworICAgIGlmIChtdGw6OkRldmljZUhhc01heGltdW1S
ZW5kZXJUYXJnZXRTaXplKG1ldGFsRGV2aWNlKSkKKyAgICB7CisgICAgICAgIE1UTFJlbmRlclBh
c3NEZXNjcmlwdG9yICpvYmpDRGVzYyA9IFtNVExSZW5kZXJQYXNzRGVzY3JpcHRvciByZW5kZXJQ
YXNzRGVzY3JpcHRvcl07CisgICAgICAgIGRlc2MuY29udmVydFRvTWV0YWxEZXNjKG9iakNEZXNj
KTsKKyAgICAgICAgTlNVSW50ZWdlciBtYXhTaXplID0gbXRsOjpHZXRNYXhSZW5kZXJUYXJnZXRT
aXplRm9yRGV2aWNlSW5CeXRlcyhtZXRhbERldmljZSk7CisgICAgICAgIE5TVUludGVnZXIgcmVu
ZGVyVGFyZ2V0U2l6ZSA9CisgICAgICAgICAgICBDb21wdXRlVG90YWxTaXplVXNlZEZvck1UTFJl
bmRlclBhc3NEZXNjcmlwdG9yKG9iakNEZXNjLCB0aGlzLCBtZXRhbERldmljZSk7CisgICAgICAg
IGlmIChyZW5kZXJUYXJnZXRTaXplID4gbWF4U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
TlNTdHJpbmcgKmVycm9yU3RyaW5nID0KKyAgICAgICAgICAgICAgICBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIlRoaXMgc2V0IG9mIHJlbmRlciB0YXJnZXRzIHJlcXVpcmVzICVsdSBieXRl
cyBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQCJwaXhl
bCBzdG9yYWdlLiBUaGlzIGRldmljZSBzdXBwb3J0cyAlbHUgYnl0ZXMuIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylyZW5kZXJUYXJn
ZXRTaXplLCAodW5zaWduZWQgbG9uZyltYXhTaXplXTsKKyAgICAgICAgICAgIE5TRXJyb3IgKmVy
ciA9IFtOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIk1UTFZhbGlkYXRpb25FcnJvciIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTotMQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJJbmZvOkB7TlNMb2NhbGl6
ZWREZXNjcmlwdGlvbktleSA6IGVycm9yU3RyaW5nfV07CisgICAgICAgICAgICB0aGlzLT5oYW5k
bGVFcnJvcihlcnIsIF9fRklMRV9fLCBBTkdMRV9GVU5DVElPTiwgX19MSU5FX18pOworICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gJm1SZW5kZXJF
bmNvZGVyLnJlc3RhcnQoZGVzYyk7CiB9CiAKQEAgLTE0NjcsMTEgKzE3MjMsMTIgQEAgbXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2RlciAqQ29udGV4dE10bDo6Z2V0VGV4dHVyZVJlbmRlckNvbW1hbmRF
bmNvZGVyKAogCiAgICAgbXRsOjpSZW5kZXJQYXNzRGVzYyBycERlc2M7CiAKLSAgICBycERlc2Mu
Y29sb3JBdHRhY2htZW50c1swXS50ZXh0dXJlICAgICAgPSB0ZXh0dXJlVGFyZ2V0OwotICAgIHJw
RGVzYy5jb2xvckF0dGFjaG1lbnRzWzBdLmxldmVsICAgICAgICA9IGluZGV4LmdldE5hdGl2ZUxl
dmVsKCk7Ci0gICAgcnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0uc2xpY2VPckRlcHRoID0gaW5k
ZXguaGFzTGF5ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7Ci0gICAgcnBEZXNjLm51
bUNvbG9yQXR0YWNobWVudHMgICAgICAgICAgICAgID0gMTsKLSAgICBycERlc2Muc2FtcGxlQ291
bnQgICAgICAgICAgICAgICAgICAgICAgPSB0ZXh0dXJlVGFyZ2V0LT5zYW1wbGVzKCk7CisgICAg
cnBEZXNjLmNvbG9yQXR0YWNobWVudHNbMF0ucmVuZGVyVGFyZ2V0LT50ZXh0dXJlID0gdGV4dHVy
ZVRhcmdldDsKKyAgICBycERlc2MuY29sb3JBdHRhY2htZW50c1swXS5yZW5kZXJUYXJnZXQtPmxl
dmVsICAgPSBpbmRleC5nZXROYXRpdmVMZXZlbCgpOworICAgIHJwRGVzYy5jb2xvckF0dGFjaG1l
bnRzWzBdLnJlbmRlclRhcmdldC0+c2xpY2VPckRlcHRoID0KKyAgICAgICAgaW5kZXguaGFzTGF5
ZXIoKSA/IGluZGV4LmdldExheWVySW5kZXgoKSA6IDA7CisgICAgcnBEZXNjLm51bUNvbG9yQXR0
YWNobWVudHMgPSAxOworICAgIHJwRGVzYy5zYW1wbGVDb3VudCAgICAgICAgID0gdGV4dHVyZVRh
cmdldC0+c2FtcGxlcygpOwogCiAgICAgcmV0dXJuIGdldFJlbmRlclBhc3NDb21tYW5kRW5jb2Rl
cihycERlc2MpOwogfQpAQCAtMTUzNiwxMiArMTc5MywxMiBAQCBtdGw6OkNvbXB1dGVDb21tYW5k
RW5jb2RlciAqQ29udGV4dE10bDo6Z2V0Q29tcHV0ZUNvbW1hbmRFbmNvZGVyKCkKIAogdm9pZCBD
b250ZXh0TXRsOjplbnN1cmVDb21tYW5kQnVmZmVyUmVhZHkoKQogewotICAgIGlmICghbUNtZEJ1
ZmZlci5yZWFkeSgpKQorICAgIGlmICghbUNtZEJ1ZmZlci52YWxpZCgpKQogICAgIHsKICAgICAg
ICAgbUNtZEJ1ZmZlci5yZXN0YXJ0KCk7CiAgICAgfQogCi0gICAgQVNTRVJUKG1DbWRCdWZmZXIu
cmVhZHkoKSk7CisgICAgQVNTRVJUKG1DbWRCdWZmZXIudmFsaWQoKSk7CiB9CiAKIHZvaWQgQ29u
dGV4dE10bDo6dXBkYXRlVmlld3BvcnQoRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyTXRsLApA
QCAtMTY3Nyw3ICsxOTM0LDcgQEAgdm9pZCBDb250ZXh0TXRsOjpvbkRyYXdGcmFtZUJ1ZmZlckNo
YW5nZWRTdGF0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICB9CiB9CiAKLXZvaWQg
Q29udGV4dE10bDo6b25CYWNrYnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgV2luZG93U3VyZmFjZU10bCAqYmFja2J1ZmZlcikKK3ZvaWQgQ29udGV4dE10bDo6b25CYWNr
YnVmZmVyUmVzaXplZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgU3VyZmFjZU10bFByb3Rv
Y29sICpiYWNrYnVmZmVyKQogewogICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgICA9IGdl
dFN0YXRlKCk7CiAgICAgRnJhbWVidWZmZXJNdGwgKmZyYW1lYnVmZmVyID0gbXRsOjpHZXRJbXBs
KGdsU3RhdGUuZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOwpAQCAtMTY4NiwxMCArMTk0MywxMyBAQCB2
b2lkIENvbnRleHRNdGw6Om9uQmFja2J1ZmZlclJlc2l6ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNv
bnRleHQsIFdpbmRvd1N1cmZhY2VNdAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgdXBk
YXRlVmlld3BvcnQoZnJhbWVidWZmZXIsIGdsU3RhdGUuZ2V0Vmlld3BvcnQoKSwgZ2xTdGF0ZS5n
ZXROZWFyUGxhbmUoKSwKKyAgICAgICAgICAgICAgICAgICBnbFN0YXRlLmdldEZhclBsYW5lKCkp
OworICAgIHVwZGF0ZVNjaXNzb3IoZ2xTdGF0ZSk7CiAgICAgb25EcmF3RnJhbWVCdWZmZXJDaGFu
Z2VkU3RhdGUoY29udGV4dCwgZnJhbWVidWZmZXIsIHRydWUpOwogfQogCi1hbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlCZWdpbihjb25zdCBnbDo6Q29udGV4dCAqY29u
dGV4dCwgUXVlcnlNdGwgKnF1ZXJ5KQorYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpvbk9jY2x1
c2lvblF1ZXJ5QmVnYW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVy
eSkKIHsKICAgICBBU1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IG51bGxwdHIpOwogICAgIG1PY2Ns
dXNpb25RdWVyeSA9IHF1ZXJ5OwpAQCAtMTcwNiw3ICsxOTY2LDcgQEAgYW5nbGU6OlJlc3VsdCBD
b250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5QmVnaW4oY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsIFF1ZXIKIAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KLXZvaWQg
Q29udGV4dE10bDo6b25PY2NsdXNpb25RdWVyeUVuZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwgUXVlcnlNdGwgKnF1ZXJ5KQordm9pZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5RW5k
ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRsICpxdWVyeSkKIHsKICAgICBB
U1NFUlQobU9jY2x1c2lvblF1ZXJ5ID09IHF1ZXJ5KTsKIApAQCAtMTcxOCw3ICsxOTc4LDcgQEAg
dm9pZCBDb250ZXh0TXRsOjpvbk9jY2x1c2lvblF1ZXJ5RW5kKGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0LCBRdWVyeU10bCAqcXVlcnkKIAogICAgIG1PY2NsdXNpb25RdWVyeSA9IG51bGxwdHI7
CiB9Ci12b2lkIENvbnRleHRNdGw6Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LCBRdWVyeU10bCAqcXVlcnkpCit2b2lkIENvbnRleHRNdGw6Om9uT2Nj
bHVzaW9uUXVlcnlEZXN0cm95ZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFF1ZXJ5TXRs
ICpxdWVyeSkKIHsKICAgICBpZiAocXVlcnktPmdldEFsbG9jYXRlZFZpc2liaWxpdHlPZmZzZXRz
KCkuZW1wdHkoKSkKICAgICB7CkBAIC0xNzI2LDcgKzE5ODYsNyBAQCB2b2lkIENvbnRleHRNdGw6
Om9uT2NjbHVzaW9uUXVlcnlEZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBRdWVy
eU10bCAqcQogICAgIH0KICAgICBpZiAobU9jY2x1c2lvblF1ZXJ5ID09IHF1ZXJ5KQogICAgIHsK
LSAgICAgICAgb25PY2NsdXNpb25RdWVyeUVuZChjb250ZXh0LCBxdWVyeSk7CisgICAgICAgIG9u
T2NjbHVzaW9uUXVlcnlFbmRlZChjb250ZXh0LCBxdWVyeSk7CiAgICAgfQogICAgIG1PY2NsdXNp
b25RdWVyeVBvb2wuZGVhbGxvY2F0ZVF1ZXJ5T2Zmc2V0KHRoaXMsIHF1ZXJ5KTsKIH0KQEAgLTE3
NzAsMjAgKzIwMzAsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnN0YXJ0T2NjbHVzaW9u
UXVlcnlJblJlbmRlclBhc3MoUXVlcnlNdGwgKnF1ZXJ5LCBib29sCiAgICAgcmV0dXJuIGFuZ2xl
OjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCi12b2lkIENvbnRleHRNdGw6Om9uVHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRyYW5zZm9ybUZlZWRiYWNr
TXRsICp4ZmIpCi17Ci0gICAgLy8gTk9URShocWxlKTogV2UgaGF2ZSB0byBlbmQgY3VycmVudCBy
ZW5kZXIgcGFzcyB0byBlbmFibGUgc3luY2hyb25pemF0aW9uIGJlZm9yZSBYRkIKLSAgICAvLyBi
dWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25zaWRlciBhIGJldHRlciBh
cHByb2FjaC4KLSAgICBlbmRFbmNvZGluZyh0cnVlKTsKLX0KLQotdm9pZCBDb250ZXh0TXRsOjpv
blRyYW5zZm9ybUZlZWRiYWNrSW5hY3RpdmUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsIFRy
YW5zZm9ybUZlZWRiYWNrTXRsICp4ZmIpCi17Ci0gICAgLy8gTk9URShocWxlKTogV2UgaGF2ZSB0
byBlbmQgY3VycmVudCByZW5kZXIgcGFzcyB0byBlbmFibGUgc3luY2hyb25pemF0aW9uIGJlZm9y
ZSBYRkIKLSAgICAvLyBidWZmZXJzIGNvdWxkIGJlIHVzZWQgYXMgdmVydGV4IGlucHV0LiBDb25z
aWRlciBhIGJldHRlciBhcHByb2FjaC4KLSAgICBlbmRFbmNvZGluZyh0cnVlKTsKLX0KLQogdm9p
ZCBDb250ZXh0TXRsOjpxdWV1ZUV2ZW50U2lnbmFsKGNvbnN0IG10bDo6U2hhcmVkRXZlbnRSZWYg
JmV2ZW50LCB1aW50NjRfdCB2YWx1ZSkKIHsKICAgICBlbnN1cmVDb21tYW5kQnVmZmVyUmVhZHko
KTsKQEAgLTE4NDIsMTAgKzIwODgsMTkgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1
cERyYXcoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpEcmF3RWxlbWVudHNUeXBlIGluZGV4VHlwZU9yTm9uZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmluZGljZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrRHJhdykKIHsK
ICAgICBBU1NFUlQobVByb2dyYW0pOwogCisgICAgLy8gVXBkYXRlIHRyYW5zZm9ybSBmZWVkYmFj
ayBvZmZzZXRzIG9uIGV2ZXJ5IGRyYXcgY2FsbC4KKyAgICBpZiAobVN0YXRlLmlzVHJhbnNmb3Jt
RmVlZGJhY2tBY3RpdmVVbnBhdXNlZCgpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZpcnN0VmVy
dGV4ICE9IC0xKTsKKyAgICAgICAgbVhmYkJhc2VWZXJ0ZXggICAgICAgICAgICAgPSBmaXJzdFZl
cnRleDsKKyAgICAgICAgbVhmYlZlcnRleENvdW50UGVySW5zdGFuY2UgPSB2ZXJ0ZXhPckluZGV4
Q291bnQ7CisgICAgICAgIGludmFsaWRhdGVEcml2ZXJVbmlmb3JtcygpOworICAgIH0KKwogICAg
IC8vIGluc3RhbmNlcz0wIG1lYW5zIG5vIGluc3RhbmNlZCBkcmF3LgogICAgIEdMc2l6ZWkgaW5z
dGFuY2VDb3VudCA9IGluc3RhbmNlcyA/IGluc3RhbmNlcyA6IDE7CiAKQEAgLTE4NjIsMjAgKzIx
MTcsNiBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29u
dGV4dCAqY29udGV4dCwKICAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURpcnR5QWN0aXZlVGV4dHVy
ZXMoY29udGV4dCkpOwogICAgIH0KIAotICAgIGlmIChtRGlydHlCaXRzLnRlc3QoRElSVFlfQklU
X1JBU1RFUklaRVJfRElTQ0FSRCkpCi0gICAgewotICAgICAgICBpZiAoZ2V0U3RhdGUoKS5pc1Ry
YW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gSWYgWEZCIGlzIGFjdGl2ZSB3ZSBuZWVkIHRvIHJlc2V0IHJlbmRlciBwYXNzIHNpbmNlIHdl
IGNvdWxkIHVzZSBhIGR1bW15IHJlbmRlcgotICAgICAgICAgICAgLy8gdGFyZ2V0IGlmIG9ubHkg
WEZCIGlzIG5lZWRlZC4KLSAgICAgICAgICAgIGludmFsaWRhdGVTdGF0ZShjb250ZXh0KTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludmFsaWRhdGVS
ZW5kZXJQaXBlbGluZSgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgaWYgKCFtUmVuZGVyRW5j
b2Rlci52YWxpZCgpKQogICAgIHsKICAgICAgICAgLy8gcmUtYXBwbHkgZXZlcnl0aGluZwpAQCAt
MTg4NCw3ICsyMTI1LDExIEBAIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6c2V0dXBEcmF3KGNv
bnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogCiAgICAgaWYgKG1EaXJ0eUJpdHMudGVzdChESVJU
WV9CSVRfRFJBV19GUkFNRUJVRkZFUikpCiAgICAgewotICAgICAgICBBTkdMRV9UUlkoaGFuZGxl
RGlydHlSZW5kZXJQYXNzKGNvbnRleHQpKTsKKyAgICAgICAgLy8gU3RhcnQgbmV3IHJlbmRlciBj
b21tYW5kIGVuY29kZXIKKyAgICAgICAgQU5HTEVfTVRMX1RSWSh0aGlzLCBtRHJhd0ZyYW1lYnVm
ZmVyLT5lbnN1cmVSZW5kZXJQYXNzU3RhcnRlZChjb250ZXh0KSk7CisKKyAgICAgICAgLy8gcmUt
YXBwbHkgZXZlcnl0aGluZworICAgICAgICBpbnZhbGlkYXRlU3RhdGUoY29udGV4dCk7CiAgICAg
fQogCiAgICAgaWYgKG1PY2NsdXNpb25RdWVyeSAmJiBtT2NjbHVzaW9uUXVlcnlQb29sLmdldE51
bVJlbmRlclBhc3NBbGxvY2F0ZWRRdWVyaWVzKCkgPT0gMCkKQEAgLTE4OTQsMTcgKzIxMzksMTEg
QEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERyYXcoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgICAgIEFOR0xFX1RSWShzdGFydE9jY2x1c2lvblF1ZXJ5SW5SZW5kZXJQ
YXNzKG1PY2NsdXNpb25RdWVyeSwgZmFsc2UpKTsKICAgICB9CiAKLSAgICBib29sIGlzUGlwZWxp
bmVEZXNjQ2hhbmdlZDsKLSAgICBBTkdMRV9UUlkoY2hlY2tJZlBpcGVsaW5lQ2hhbmdlZChjb250
ZXh0LCBtb2RlLCB4ZmJQYXNzLCAmaXNQaXBlbGluZURlc2NDaGFuZ2VkKSk7CisgICAgYm9vbCBj
aGFuZ2VkUGlwZWxpbmU7CisgICAgQU5HTEVfVFJZKGNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29u
dGV4dCwgbW9kZSwgbVN0YXRlLmlzVHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhbmdlZFBpcGVsaW5lKSk7CiAKICAgICBi
b29sIHVuaWZvcm1CdWZmZXJzRGlydHkgPSBmYWxzZTsKLQotICAgIGlmIChJc1RyYW5zZm9ybUZl
ZWRiYWNrT25seShnZXRTdGF0ZSgpKSkKLSAgICB7Ci0gICAgICAgIC8vIEZpbHRlciBvdXQgdW5u
ZWVkZWQgZGlydHkgYml0cwotICAgICAgICBmaWx0ZXJPdXRYRkJPbmx5RGlydHlCaXRzKGNvbnRl
eHQpOwotICAgIH0KLQogICAgIGZvciAoc2l6ZV90IGJpdCA6IG1EaXJ0eUJpdHMpCiAgICAgewog
ICAgICAgICBzd2l0Y2ggKGJpdCkKQEAgLTE5NTMsOCArMjE5MiwxMCBAQCBhbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OnNldHVwRHJhdyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAg
ICAgICAgIGNhc2UgRElSVFlfQklUX1VOSUZPUk1fQlVGRkVSU19CSU5ESU5HOgogICAgICAgICAg
ICAgICAgIHVuaWZvcm1CdWZmZXJzRGlydHkgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBESVJUWV9CSVRfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM6
CisgICAgICAgICAgICAgICAgQU5HTEVfVFJZKGhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNFbXVsYXRpb24oY29udGV4dCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBESVJUWV9CSVRfUkFTVEVSSVpFUl9ESVNDQVJEOgotICAgICAg
ICAgICAgICAgIC8vIEFscmVhZHkgaGFuZGxlZC4KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKQEAgLTE5
NjIsODIgKzIyMDMsMzEgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpzZXR1cERyYXcoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoeGZi
UGFzcyAmJiAhbURpcnR5Qml0cy50ZXN0KERJUlRZX0JJVF9EUklWRVJfVU5JRk9STVMpKQotICAg
IHsKLSAgICAgICAgLy8gSWYgaGFuZGxlRGlydHlEcml2ZXJVbmlmb3JtcygpIHdhcyBub3QgY2Fs
bGVkIGFuZCB0aGlzIGlzIFhGQiBwYXNzLCB3ZSBzdGlsbCBuZWVkIHRvCi0gICAgICAgIC8vIHVw
ZGF0ZSBYRkIgcmVsYXRlZCB1bmlmb3JtcwotICAgICAgICBBTkdMRV9UUlkoCi0gICAgICAgICAg
ICBmaWxsRHJpdmVyWEZCVW5pZm9ybXMoZmlyc3RWZXJ0ZXgsIHZlcnRleE9ySW5kZXhDb3VudCwg
LyoqIHNraXBwZWRJbnN0YW5jZXMgKi8gMCkpOwotICAgICAgICBtUmVuZGVyRW5jb2Rlci5zZXRW
ZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5kaW5nSW5k
ZXgpOwotICAgIH0KLQogICAgIG1EaXJ0eUJpdHMucmVzZXQoKTsKIAotICAgIEFOR0xFX1RSWSht
UHJvZ3JhbS0+c2V0dXBEcmF3KGNvbnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVs
aW5lRGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BpcGVsaW5lRGVz
Y0NoYW5nZWQsIHRleHR1cmVDaGFuZ2VkLCB1bmlmb3JtQnVmZmVyc0RpcnR5KSk7Ci0KLSAgICBy
ZXR1cm4gYW5nbGU6OlJlc3VsdDo6Q29udGludWU7Ci19Ci0KLXZvaWQgQ29udGV4dE10bDo6Zmls
dGVyT3V0WEZCT25seURpcnR5Qml0cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAg
ICBBU1NFUlQoSXNUcmFuc2Zvcm1GZWVkYmFja09ubHkoZ2V0U3RhdGUoKSkpOwotCi0gICAgQVNT
RVJUKG1SZW5kZXJFbmNvZGVyLnJlbmRlclBhc3NEZXNjKCkuY29sb3JBdHRhY2htZW50c1swXS50
ZXh0dXJlID09IG1EdW1teVhGQlJlbmRlclRleHR1cmUpOwotCi0gICAgLy8gSW4gdHJhbnNmb3Jt
IGZlZWRiYWNrIG9ubHkgcGFzcywgb25seSB2ZXJ0ZXggc2hhZGVyJ3MgcmVsYXRlZCBzdGF0ZXMg
YXJlIG5lZWRlZC4KLSAgICBjb25zdGV4cHIgc2l6ZV90IGtVbm5lZWRlZEJpdHMgPQotICAgICAg
ICBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0RFUFRIX1NURU5DSUxfREVTQykgfAotICAg
ICAgICBhbmdsZTo6Qml0PHNpemVfdD4oRElSVFlfQklUX0RFUFRIX0JJQVMpIHwgYW5nbGU6OkJp
dDxzaXplX3Q+KERJUlRZX0JJVF9TVEVOQ0lMX1JFRikgfAotICAgICAgICBhbmdsZTo6Qml0PHNp
emVfdD4oRElSVFlfQklUX0JMRU5EX0NPTE9SKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9C
SVRfVklFV1BPUlQpIHwKLSAgICAgICAgYW5nbGU6OkJpdDxzaXplX3Q+KERJUlRZX0JJVF9TQ0lT
U09SKSB8IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfQ1VMTF9NT0RFKSB8Ci0gICAgICAg
IGFuZ2xlOjpCaXQ8c2l6ZV90PihESVJUWV9CSVRfV0lORElORyk7Ci0KLSAgICBtRGlydHlCaXRz
ICY9IH5rVW5uZWVkZWRCaXRzOwotfQotCi1hbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRs
ZURpcnR5UmVuZGVyUGFzcyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKLXsKLSAgICBpZiAo
IUlzVHJhbnNmb3JtRmVlZGJhY2tPbmx5KG1TdGF0ZSkpCisgICAgaWYgKHRyYW5zZm9ybUZlZWRi
YWNrRHJhdykKICAgICB7Ci0gICAgICAgIC8vIFN0YXJ0IG5ldyByZW5kZXIgY29tbWFuZCBlbmNv
ZGVyCi0gICAgICAgIEFOR0xFX01UTF9UUlkodGhpcywgbURyYXdGcmFtZWJ1ZmZlci0+ZW5zdXJl
UmVuZGVyUGFzc1N0YXJ0ZWQoY29udGV4dCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICAvLyBYRkIgaXMgYWN0aXZlIGFuZCByYXN0ZXJpemF0aW9uIGlzIGRpc2FibGVkLiBVc2Ug
ZHVtbXkgcmVuZGVyIHRhcmdldC4KLSAgICAgICAgLy8gV2UgY3VycmVudGx5IG5lZWQgdG8gZW5k
IHRoZSByZW5kZXIgcGFzcyB3aGVuIFhGQiBpcyBhY3RpdmF0ZWQvZGVhY3RpdmF0ZWQgc28gdXNp
bmcKLSAgICAgICAgLy8gYSBzbWFsbCBkdW1teSByZW5kZXIgdGFyZ2V0IHdvdWxkIG1ha2UgdGhl
IHJlbmRlciBwYXNzIGVuZGluZyB2ZXJ5IGNoZWFwLgotICAgICAgICBpZiAoIW1EdW1teVhGQlJl
bmRlclRleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFOR0xFX1RSWShtdGw6OlRleHR1
cmU6Ok1ha2UyRFRleHR1cmUodGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0UGl4ZWxGb3JtYXQoYW5nbGU6OkZvcm1hdElEOjpSOEc4QjhB
OF9VTk9STSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEsIDEsIDEsIHRydWUsIGZhbHNlLCAmbUR1bW15WEZCUmVuZGVyVGV4dHVyZSkpOwotICAg
ICAgICB9Ci0gICAgICAgIG10bDo6UmVuZGVyQ29tbWFuZEVuY29kZXIgKmVuY29kZXIgPSBnZXRU
ZXh0dXJlUmVuZGVyQ29tbWFuZEVuY29kZXIoCi0gICAgICAgICAgICBtRHVtbXlYRkJSZW5kZXJU
ZXh0dXJlLAotICAgICAgICAgICAgbXRsOjpJbWFnZU5hdGl2ZUluZGV4OjpGcm9tQmFzZVplcm9H
TEluZGV4KGdsOjpJbWFnZUluZGV4OjpNYWtlMkQoMCkpKTsKLSAgICAgICAgZW5jb2Rlci0+c2V0
Q29sb3JMb2FkQWN0aW9uKE1UTExvYWRBY3Rpb25Eb250Q2FyZSwgTVRMQ2xlYXJDb2xvcigpLCAw
KTsKLSAgICAgICAgZW5jb2Rlci0+c2V0Q29sb3JTdG9yZUFjdGlvbihNVExTdG9yZUFjdGlvbkRv
bnRDYXJlKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgZW5jb2Rlci0+c2V0TGFiZWwoQCJU
cmFuc2Zvcm1GZWVkYmFja09ubHlQYXNzIik7Ci0jZW5kaWYKKyAgICAgICAgbXRsOjpSZW5kZXJV
dGlscyAmdXRpbHMgPSBnZXREaXNwbGF5KCktPmdldFV0aWxzKCk7CisgICAgICAgIGFuZ2xlOjpS
ZXN1bHQgcmVzdWx0ID0KKyAgICAgICAgICAgIHV0aWxzLmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNr
UFNPKGNvbnRleHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYyk7CisgICAg
ICAgIEFOR0xFX1VOVVNFRF9WQVJJQUJMRShyZXN1bHQpOworICAgICAgICBhc3NlcnQocmVzdWx0
ID09IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlKTsKKyAgICAgICAgY2hhbmdlZFBpcGVsaW5lID0g
dHJ1ZTsKICAgICB9CiAKLSAgICAvLyByZS1hcHBseSBldmVyeXRoaW5nCi0gICAgaW52YWxpZGF0
ZVN0YXRlKGNvbnRleHQpOworICAgIEFOR0xFX1RSWShtUHJvZ3JhbS0+c2V0dXBEcmF3KGNvbnRl
eHQsICZtUmVuZGVyRW5jb2RlciwgbVJlbmRlclBpcGVsaW5lRGVzYywgY2hhbmdlZFBpcGVsaW5l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVDaGFuZ2VkLCB1bmlm
b3JtQnVmZmVyc0RpcnR5LCB0cmFuc2Zvcm1GZWVkYmFja0RyYXcpKTsKIAogICAgIHJldHVybiBh
bmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAogYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpo
YW5kbGVEaXJ0eUFjdGl2ZVRleHR1cmVzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogewot
ICAgIGNvbnN0IGdsOjpTdGF0ZSAmZ2xTdGF0ZSAgID0gbVN0YXRlOwotICAgIGNvbnN0IGdsOjpQ
cm9ncmFtICpwcm9ncmFtID0gZ2xTdGF0ZS5nZXRQcm9ncmFtKCk7CisgICAgY29uc3QgZ2w6OlN0
YXRlICZnbFN0YXRlICAgICAgICAgICAgICAgID0gbVN0YXRlOworICAgIGNvbnN0IGdsOjpQcm9n
cmFtRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGNvbnRleHQtPmdldFN0YXRlKCkuZ2V0UHJvZ3Jh
bUV4ZWN1dGFibGUoKTsKIAogICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0dXJlc0NhY2hlICZ0ZXh0
dXJlcyAgICAgPSBnbFN0YXRlLmdldEFjdGl2ZVRleHR1cmVzQ2FjaGUoKTsKLSAgICBjb25zdCBn
bDo6QWN0aXZlVGV4dHVyZU1hc2sgJmFjdGl2ZVRleHR1cmVzID0gcHJvZ3JhbS0+Z2V0RXhlY3V0
YWJsZSgpLmdldEFjdGl2ZVNhbXBsZXJzTWFzaygpOworICAgIGNvbnN0IGdsOjpBY3RpdmVUZXh0
dXJlTWFzayAmYWN0aXZlVGV4dHVyZXMgPSBleGVjdXRhYmxlLT5nZXRBY3RpdmVTYW1wbGVyc01h
c2soKTsKIAogICAgIGZvciAoc2l6ZV90IHRleHR1cmVVbml0IDogYWN0aXZlVGV4dHVyZXMpCiAg
ICAgewpAQCAtMjA2Nyw2ICsyMjU3LDcgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5k
bGVEaXJ0eURlZmF1bHRBdHRyaWJzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgIH0K
IAogICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKKyAgICBtUmVuZGVyRW5jb2Rl
ci5zZXRGcmFnbWVudERhdGEobURlZmF1bHRBdHRyaWJ1dGVzLCBtdGw6OmtEZWZhdWx0QXR0cmli
c0JpbmRpbmdJbmRleCk7CiAgICAgbVJlbmRlckVuY29kZXIuc2V0VmVydGV4RGF0YShtRGVmYXVs
dEF0dHJpYnV0ZXMsIG10bDo6a0RlZmF1bHRBdHRyaWJzQmluZGluZ0luZGV4KTsKIAogICAgIG1E
aXJ0eURlZmF1bHRBdHRyaWJzTWFzay5yZXNldCgpOwpAQCAtMjEyMCw5ICsyMzExLDYgQEAgYW5n
bGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0eURyaXZlclVuaWZvcm1zKGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LAogICAgIH0KICAgICBtRHJpdmVyVW5pZm9ybXMuY292ZXJhZ2VN
YXNrID0gY292ZXJhZ2VNYXNrOwogCi0gICAgQU5HTEVfVFJZKAotICAgICAgICBmaWxsRHJpdmVy
WEZCVW5pZm9ybXMoZHJhd0NhbGxGaXJzdFZlcnRleCwgdmVydGljZXNQZXJJbnN0YW5jZSwgLyoq
IHNraXBwZWRJbnN0YW5jZXMgKi8gMCkpOwotCiAgICAgQVNTRVJUKG1SZW5kZXJFbmNvZGVyLnZh
bGlkKCkpOwogICAgIG1SZW5kZXJFbmNvZGVyLnNldEZyYWdtZW50RGF0YShtRHJpdmVyVW5pZm9y
bXMsIG10bDo6a0RyaXZlclVuaWZvcm1zQmluZGluZ0luZGV4KTsKICAgICBtUmVuZGVyRW5jb2Rl
ci5zZXRWZXJ0ZXhEYXRhKG1Ecml2ZXJVbmlmb3JtcywgbXRsOjprRHJpdmVyVW5pZm9ybXNCaW5k
aW5nSW5kZXgpOwpAQCAtMjEzMCwyNSArMjMxOCwzMyBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRN
dGw6OmhhbmRsZURpcnR5RHJpdmVyVW5pZm9ybXMoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogfQogCi1hbmdsZTo6UmVzdWx0
IENvbnRleHRNdGw6OmZpbGxEcml2ZXJYRkJVbmlmb3JtcyhHTGludCBkcmF3Q2FsbEZpcnN0VmVy
dGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3QgdmVydGljZXNQZXJJbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNraXBwZWRJbnN0YW5jZXMpCithbmdsZTo6UmVz
dWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5R3JhcGhpY3NUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
cnNFbXVsYXRpb24oCisgICAgY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQpCiB7Ci0gICAgZ2w6
OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGdldFN0YXRlKCkuZ2V0Q3Vy
cmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgY29uc3QgZ2w6OlByb2dyYW1FeGVjdXRhYmxl
ICpleGVjdXRhYmxlID0gbVN0YXRlLmdldFByb2dyYW1FeGVjdXRhYmxlKCk7CisgICAgQVNTRVJU
KGV4ZWN1dGFibGUpOwogCi0gICAgbURyaXZlclVuaWZvcm1zLnhmYkFjdGl2ZVVucGF1c2VkID0g
Z2V0U3RhdGUoKS5pc1RyYW5zZm9ybUZlZWRiYWNrQWN0aXZlVW5wYXVzZWQoKTsKLSAgICBpZiAo
IXRyYW5zZm9ybUZlZWRiYWNrIHx8ICFtRHJpdmVyVW5pZm9ybXMueGZiQWN0aXZlVW5wYXVzZWQp
CisgICAgaWYgKCFleGVjdXRhYmxlLT5oYXNUcmFuc2Zvcm1GZWVkYmFja091dHB1dCgpIHx8ICFt
U3RhdGUuaXNUcmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KIAotICAgIG1Ecml2ZXJVbmlmb3Jtcy54
ZmJWZXJ0aWNlc1BlckRyYXcgPSB2ZXJ0aWNlc1Blckluc3RhbmNlOworICAgIFRyYW5zZm9ybUZl
ZWRiYWNrTXRsICp0cmFuc2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1wbChtU3RhdGUuZ2V0
Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkpOworICAgIHNpemVfdCBidWZmZXJDb3VudCAgICAg
ICAgICAgICAgICAgICAgICAgICA9IGV4ZWN1dGFibGUtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyQ291bnQoKTsKKyAgICBjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzQXJyYXk8
QnVmZmVyTXRsICo+ICZidWZmZXJIYW5kbGVzID0KKyAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2tN
dGwtPmdldEJ1ZmZlckhhbmRsZXMoKTsKIAotICAgIFRyYW5zZm9ybUZlZWRiYWNrTXRsICp0cmFu
c2Zvcm1GZWVkYmFja010bCA9IG10bDo6R2V0SW1wbCh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAg
Zm9yIChzaXplX3QgYnVmZmVySW5kZXggPSAwOyBidWZmZXJJbmRleCA8IGJ1ZmZlckNvdW50OyAr
K2J1ZmZlckluZGV4KQorICAgIHsKKyAgICAgICAgQnVmZmVyTXRsICpidWZmZXJIYW5kbGUgPSBi
dWZmZXJIYW5kbGVzW2J1ZmZlckluZGV4XTsKKyAgICAgICAgQVNTRVJUKGJ1ZmZlckhhbmRsZSk7
CisgICAgICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52YWxpZCgpKTsKKyAgICAgICAgbVJlbmRl
ckVuY29kZXIuc2V0QnVmZmVyRm9yV3JpdGUoCisgICAgICAgICAgICBnbDo6U2hhZGVyVHlwZTo6
VmVydGV4LCBidWZmZXJIYW5kbGUtPmdldEN1cnJlbnRCdWZmZXIoKSwgMCwKKyAgICAgICAgICAg
IG10bDo6a1RyYW5zZm9ybUZlZWRiYWNrQmluZGluZ0luZGV4ICsgKHVpbnQzMl90KWJ1ZmZlcklu
ZGV4KTsKKyAgICB9CiAKLSAgICByZXR1cm4gdHJhbnNmb3JtRmVlZGJhY2tNdGwtPmdldEJ1ZmZl
ck9mZnNldHModGhpcywgZHJhd0NhbGxGaXJzdFZlcnRleCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNQZXJJbnN0YW5jZSAqIHNraXBw
ZWRJbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Ecml2ZXJVbmlmb3Jtcy54ZmJCdWZmZXJPZmZzZXRzKTsKKyAgICByZXR1cm4gYW5n
bGU6OlJlc3VsdDo6Q29udGludWU7CiB9CiAKIGFuZ2xlOjpSZXN1bHQgQ29udGV4dE10bDo6aGFu
ZGxlRGlydHlEZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKQEAg
LTIxNTksMTMgKzIzNTUsMTMgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpoYW5kbGVEaXJ0
eURlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXgKICAgICBtdGw6OkRl
cHRoU3RlbmNpbERlc2MgZHNEZXNjICAgICAgICAgICAgICA9IG1EZXB0aFN0ZW5jaWxEZXNjOwog
ICAgIGNvbnN0IG10bDo6UmVuZGVyUGFzc0Rlc2MgJnJlbmRlclBhc3NEZXNjID0gbVJlbmRlckVu
Y29kZXIucmVuZGVyUGFzc0Rlc2MoKTsKIAotICAgIGlmICghcmVuZGVyUGFzc0Rlc2MuZGVwdGhB
dHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5kZXB0aEF0dGFjaG1l
bnQudGV4dHVyZSgpKQogICAgIHsKICAgICAgICAgZHNEZXNjLmRlcHRoV3JpdGVFbmFibGVkICAg
ID0gZmFsc2U7CiAgICAgICAgIGRzRGVzYy5kZXB0aENvbXBhcmVGdW5jdGlvbiA9IE1UTENvbXBh
cmVGdW5jdGlvbkFsd2F5czsKICAgICB9CiAKLSAgICBpZiAoIXJlbmRlclBhc3NEZXNjLnN0ZW5j
aWxBdHRhY2htZW50LnRleHR1cmUpCisgICAgaWYgKCFyZW5kZXJQYXNzRGVzYy5zdGVuY2lsQXR0
YWNobWVudC50ZXh0dXJlKCkpCiAgICAgewogICAgICAgICBkc0Rlc2MuZnJvbnRGYWNlU3RlbmNp
bC5yZXNldCgpOwogICAgICAgICBkc0Rlc2MuYmFja0ZhY2VTdGVuY2lsLnJlc2V0KCk7CkBAIC0y
MTk2LDggKzIzOTIsOCBAQCBhbmdsZTo6UmVzdWx0IENvbnRleHRNdGw6OmhhbmRsZURpcnR5RGVw
dGhCaWFzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogCiBhbmdsZTo6UmVzdWx0IENvbnRl
eHRNdGw6OmNoZWNrSWZQaXBlbGluZUNoYW5nZWQoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlBy
aW1pdGl2ZU1vZGUgcHJpbWl0aXZlTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHhmYlBhc3MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqaXNQaXBlbGluZURlc2NDaGFuZ2VkKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgeGJm
UGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sICpwaXBlbGluZURlc2NDaGFuZ2VkKQogewogICAgIEFTU0VSVChtUmVuZGVyRW5jb2Rlci52
YWxpZCgpKTsKICAgICBtdGw6OlByaW1pdGl2ZVRvcG9sb2d5Q2xhc3MgdG9wb2xvZ3lDbGFzcyA9
IG10bDo6R2V0UHJpbWl0aXZlVG9wb2xvZ3lDbGFzcyhwcmltaXRpdmVNb2RlKTsKQEAgLTIyMTYs
MjQgKzI0MTIsMTAgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRsOjpjaGVja0lmUGlwZWxpbmVD
aGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICByZW5kZXJQYXNzRGVz
Yy5wb3B1bGF0ZVJlbmRlclBpcGVsaW5lT3V0cHV0RGVzYyhtQmxlbmREZXNjLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbVJlbmRlclBp
cGVsaW5lRGVzYy5vdXRwdXREZXNjcmlwdG9yKTsKIAotICAgICAgICBpZiAoeGZiUGFzcykKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gSW4gWEZCIHBhc3MsIHdlIGRpc2FibGUgZnJhZ21lbnQg
c2hhZGVyLgotICAgICAgICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlw
ZSA9IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpEaXNhYmxlZDsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIGlmIChtU3RhdGUuaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gSWYgWEZCIGlzIG5vdCBhY3RpdmUgYW5kIHJhc3Rl
cml6ZXIgZGlzY2FyZCBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIGVtdWxhdGUgdGhlCi0gICAgICAg
ICAgICAvLyBkaXNjYXJkLiBCZWNhdXNlIGluIHRoaXMgY2FzZSwgdmVydGV4IHNoYWRlciBtaWdo
dCB3cml0ZSB0byBzdGFnZSBvdXRwdXQgdmFsdWVzIGFuZAotICAgICAgICAgICAgLy8gTWV0YWwg
ZG9lc24ndCBhbGxvdyByYXN0ZXJpemF0aW9uIHRvIGJlIGRpc2FibGVkLgotICAgICAgICAgICAg
bVJlbmRlclBpcGVsaW5lRGVzYy5yYXN0ZXJpemF0aW9uVHlwZSA9Ci0gICAgICAgICAgICAgICAg
bXRsOjpSZW5kZXJQaXBlbGluZVJhc3Rlcml6YXRpb246OkVtdWxhdGVkRGlzY2FyZDsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJQaXBlbGlu
ZURlc2MucmFzdGVyaXphdGlvblR5cGUgPSBtdGw6OlJlbmRlclBpcGVsaW5lUmFzdGVyaXphdGlv
bjo6RW5hYmxlZDsKLSAgICAgICAgfQogICAgICAgICBtUmVuZGVyUGlwZWxpbmVEZXNjLmlucHV0
UHJpbWl0aXZlVG9wb2xvZ3kgPSB0b3BvbG9neUNsYXNzOworICAgICAgICBtUmVuZGVyUGlwZWxp
bmVEZXNjLnJhc3Rlcml6YXRpb25UeXBlID0KKyAgICAgICAgICAgIChtU3RhdGUuaXNSYXN0ZXJp
emVyRGlzY2FyZEVuYWJsZWQoKSA/IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpF
bXVsYXRlZERpc2NhcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IG10bDo6UmVuZGVyUGlwZWxpbmVSYXN0ZXJpemF0aW9uOjpFbmFibGVkKTsKICAg
ICAgICAgbVJlbmRlclBpcGVsaW5lRGVzYy5hbHBoYVRvQ292ZXJhZ2VFbmFibGVkID0gbVN0YXRl
LmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpOwogICAgICAgICBtUmVuZGVyUGlwZWxp
bmVEZXNjLmVtdWxhdGVDb3ZlcmFnZU1hc2sgICAgPSBtU3RhdGUuaXNTYW1wbGVDb3ZlcmFnZUVu
YWJsZWQoKTsKIApAQCAtMjI0MSw3ICsyNDIzLDcgQEAgYW5nbGU6OlJlc3VsdCBDb250ZXh0TXRs
OjpjaGVja0lmUGlwZWxpbmVDaGFuZ2VkKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAg
ICAgICAgICAgbURyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RhdGUoKS5nZXRFbmFibGVkRHJhd0J1ZmZl
cnMoKSk7CiAgICAgfQogCi0gICAgKmlzUGlwZWxpbmVEZXNjQ2hhbmdlZCA9IHJwcENoYW5nZTsK
KyAgICAqcGlwZWxpbmVEZXNjQ2hhbmdlZCA9IHJwcENoYW5nZTsKIAogICAgIHJldHVybiBhbmds
ZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRGlzcGxheU10bC5oCmlu
ZGV4IGIwMGRlMWIyZDljODczNTdhZWFlNWFmYjAxYTY3MzQyNTI0MDY2YjQuLjI0MTcxMjIwYzVh
NjUwYWVhMzhjOTI0ZTRhZmQyNGFkYWFmMzk2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLmgKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3Bs
YXlNdGwuaApAQCAtNTIsNiArNTIsMTAgQEAgY2xhc3MgRGlzcGxheU10bCA6IHB1YmxpYyBEaXNw
bGF5SW1wbAogCiAgICAgZWdsOjpFcnJvciB3YWl0Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpj
b250ZXh0KSBvdmVycmlkZTsKICAgICBlZ2w6OkVycm9yIHdhaXROYXRpdmUoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsIEVHTGludCBlbmdpbmUpIG92ZXJyaWRlOworICAgIGVnbDo6RXJyb3Ig
dmFsaWRhdGVDbGllbnRCdWZmZXIoY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZ3VyYXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xlbnVtIGJ1ZnR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWdsOjpBdHRy
aWJ1dGVNYXAgJmF0dHJpYnMpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgU3VyZmFjZUltcGwgKmNy
ZWF0ZVdpbmRvd1N1cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTE5hdGl2ZVdpbmRvd1R5cGUgd2luZG93
LApAQCAtOTYsMTEgKzEwMCw2IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxheUlt
cGwKIAogICAgIGJvb2wgaXNWYWxpZE5hdGl2ZVdpbmRvdyhFR0xOYXRpdmVXaW5kb3dUeXBlIHdp
bmRvdykgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBlZ2w6OkVycm9yIHZhbGlkYXRlQ2xpZW50QnVm
ZmVyKGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1ZmZlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJz
KSBjb25zdCBvdmVycmlkZTsKLQogICAgIGVnbDo6Q29uZmlnU2V0IGdlbmVyYXRlQ29uZmlncygp
IG92ZXJyaWRlOwogCiAgICAgc3RkOjpzdHJpbmcgZ2V0UmVuZGVyZXJEZXNjcmlwdGlvbigpIGNv
bnN0OwpAQCAtMTY1LDYgKzE2NCw4IEBAIGNsYXNzIERpc3BsYXlNdGwgOiBwdWJsaWMgRGlzcGxh
eUltcGwKICAgICB2b2lkIGluaXRpYWxpemVFeHRlbnNpb25zKCkgY29uc3Q7CiAgICAgdm9pZCBp
bml0aWFsaXplVGV4dHVyZUNhcHMoKSBjb25zdDsKICAgICB2b2lkIGluaXRpYWxpemVGZWF0dXJl
cygpOworICAgIHZvaWQgaW5pdGlhbGl6ZUxpbWl0YXRpb25zKCk7CisKICAgICBhbmdsZTo6UmVz
dWx0IGluaXRpYWxpemVTaGFkZXJMaWJyYXJ5KCk7CiAKICAgICBtdGw6OkF1dG9PYmpDUHRyPGlk
PE1UTERldmljZT4+IG1NZXRhbERldmljZSA9IG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9EaXNwbGF5TXRsLm1tIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3Bs
YXlNdGwubW0KaW5kZXggMjQ3ZDc2YTgwOTI1NDk4N2NlYzU0YTI2ODcwMDQ5OWU1NjdiZGQzZC4u
MWQxMWNkNjRjZTgwMWM1ZDNiODc3ODIzY2UzOTFmZjRlMjRlMmU5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlN
dGwubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVy
L21ldGFsL0Rpc3BsYXlNdGwubW0KQEAgLTgsMTIgKzgsMTQgQEAKIAogI2luY2x1ZGUgImxpYkFO
R0xFL3JlbmRlcmVyL21ldGFsL0Rpc3BsYXlNdGwuaCIKIAorI2luY2x1ZGUgImNvbW1vbi9zeXN0
ZW1fdXRpbHMuaCIKICNpbmNsdWRlICJncHVfaW5mb191dGlsL1N5c3RlbUluZm8uaCIKICNpbmNs
dWRlICJsaWJBTkdMRS9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliQU5HTEUvRGlzcGxheS5oIgog
I2luY2x1ZGUgImxpYkFOR0xFL1N1cmZhY2UuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJl
ci9nbHNsYW5nX3dyYXBwZXJfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9Db250ZXh0TXRsLmgiCisjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvSU9T
dXJmYWNlU3VyZmFjZU10bC5oIgogI2luY2x1ZGUgImxpYkFOR0xFL3JlbmRlcmVyL21ldGFsL1N1
cmZhY2VNdGwuaCIKICNpbmNsdWRlICJsaWJBTkdMRS9yZW5kZXJlci9tZXRhbC9TeW5jTXRsLmgi
CiAjaW5jbHVkZSAibGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2NvbW1vbi5oIgpAQCAtMjIs
OSArMjQsNjIgQEAKIAogI2luY2x1ZGUgIkVHTC9lZ2xleHQuaCIKIAorI2lmIGRlZmluZWQoQU5H
TEVfUExBVEZPUk1fTUFDT1MpIHx8IGRlZmluZWQoQU5HTEVfUExBVEZPUk1fTUFDQ0FUQUxZU1Qp
Citjb25zdGV4cHIgY2hhciBrQU5HTEVQcmVmZXJyZWREZXZpY2VFbnZbXSA9ICJBTkdMRV9QUkVG
RVJSRURfREVWSUNFIjsKKyNlbmRpZgorY29uc3RleHByIGNoYXIga0FOR0xFVHJhbnNmb3JtRmVl
ZGJhY2tFbnZbXSA9ICJBTkdMRV9NRVRBTF9YRkJfRU5BQkxFIjsKKwogbmFtZXNwYWNlIHJ4CiB7
CiAKK3N0YXRpYyBFR0xpbnQgR2V0RGVwdGhTaXplKEdMaW50IGludGVybmFsZm9ybWF0KQorewor
ICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgICBjYXNlIEdMX1NURU5D
SUxfSU5ERVg4OgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UMTY6CisgICAgICAgICAgICByZXR1cm4gMTY7CisgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMjQ6CisgICAgICAgICAgICByZXR1cm4gMjQ7CisgICAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMzJfT0VTOgorICAgICAgICAgICAgcmV0dXJuIDMyOworICAgICAgICBj
YXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyRjoKKyAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICAg
ICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4OgorICAgICAgICAgICAgcmV0dXJuIDI0OworICAg
ICAgICBjYXNlIEdMX0RFUFRIMzJGX1NURU5DSUw4OgorICAgICAgICAgICAgcmV0dXJuIDMyOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gICAgVU5SRUFDSEFCTEUoaW50ZXJuYWxm
b3JtYXQpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgRUdMaW50
IEdldFN0ZW5jaWxTaXplKEdMaW50IGludGVybmFsZm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50
ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgorICAg
ICAgICAgICAgcmV0dXJuIDg7CisgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQyNDoK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMy
X09FUzoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDMyRjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDg6CisgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgY2FzZSBHTF9ERVBUSDMy
Rl9TVEVOQ0lMODoKKyAgICAgICAgICAgIHJldHVybiA4OworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgLy8gICAgVU5SRUFDSEFCTEUoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCiBib29sIElzTWV0YWxEaXNwbGF5QXZhaWxhYmxlKCkKIHsK
ICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgbWFjb3MgMTAuMTMrIGFuZCAxMSBmb3Igbm93LiBTaW5j
ZSB0aGV5IGFyZSByZXF1aXJlbWVudHMgZm9yIE1ldGFsIDIuMC4KQEAgLTU3LDcgKzExMiw3IEBA
IHN0cnVjdCBEZWZhdWx0U2hhZGVyQXN5bmNJbmZvTXRsCiB9OwogCiBEaXNwbGF5TXRsOjpEaXNw
bGF5TXRsKGNvbnN0IGVnbDo6RGlzcGxheVN0YXRlICZzdGF0ZSkKLSAgICA6IERpc3BsYXlJbXBs
KHN0YXRlKSwgbVV0aWxzKHRoaXMpLCBtR2xzbGFuZ0luaXRpYWxpemVkKGZhbHNlKQorICAgIDog
RGlzcGxheUltcGwoc3RhdGUpLCBtU3RhdGVDYWNoZShtRmVhdHVyZXMpLCBtVXRpbHModGhpcykK
IHt9CiAKIERpc3BsYXlNdGw6On5EaXNwbGF5TXRsKCkge30KQEAgLTc4LDEwICsxMzMsMjcgQEAg
YW5nbGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXplSW1wbChlZ2w6OkRpc3BsYXkgKmRp
c3BsYXkpCiB7CiAgICAgQU5HTEVfTVRMX09CSkNfU0NPUEUKICAgICB7Ci0gICAgICAgIG1NZXRh
bERldmljZSA9IFtNVExDcmVhdGVTeXN0ZW1EZWZhdWx0RGV2aWNlKCkgQU5HTEVfTVRMX0FVVE9S
RUxFQVNFXTsKKyNpZiBkZWZpbmVkKEFOR0xFX1BMQVRGT1JNX01BQ09TKSB8fCBkZWZpbmVkKEFO
R0xFX1BMQVRGT1JNX01BQ0NBVEFMWVNUKQorICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBhbmds
ZVByZWZlcnJlZERldmljZSA9IGFuZ2xlOjpHZXRFbnZpcm9ubWVudFZhcihrQU5HTEVQcmVmZXJy
ZWREZXZpY2VFbnYpOworICAgICAgICBpZiAoYW5nbGVQcmVmZXJyZWREZXZpY2UgIT0gIiIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIE5TQXJyYXk8aWQ8TVRMRGV2aWNlPj4gKmRldmljZXMgPSBb
TVRMQ29weUFsbERldmljZXMoKSBBTkdMRV9NVExfQVVUT1JFTEVBU0VdOworICAgICAgICAgICAg
Zm9yIChpZDxNVExEZXZpY2U+IGRldmljZSBpbiBkZXZpY2VzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChbZGV2aWNlLm5hbWUubG93ZXJjYXNlU3RyaW5nCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250YWluc1N0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aFVURjhTdHJp
bmc6YW5nbGVQcmVmZXJyZWREZXZpY2UuY19zdHIoKV0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAubG93ZXJjYXNlU3RyaW5nXSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIE5TTG9nKEAiVXNpbmcgTWV0YWwgRGV2aWNlOiAlQCIsIFtk
ZXZpY2UgbmFtZV0pOworICAgICAgICAgICAgICAgICAgICBtTWV0YWxEZXZpY2UgPSBbZGV2aWNl
IEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAg
IGlmICghbU1ldGFsRGV2aWNlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYW5nbGU6
OlJlc3VsdDo6U3RvcDsKKyAgICAgICAgICAgIG1NZXRhbERldmljZSA9IFtNVExDcmVhdGVTeXN0
ZW1EZWZhdWx0RGV2aWNlKCkgQU5HTEVfTVRMX0FVVE9SRUxFQVNFXTsKICAgICAgICAgfQogCiAg
ICAgICAgIG1NZXRhbERldmljZVZlbmRvcklkID0gbXRsOjpHZXREZXZpY2VWZW5kb3JJZChtTWV0
YWxEZXZpY2UpOwpAQCAtODksMTIgKzE2MSwxMyBAQCBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6
OmluaXRpYWxpemVJbXBsKGVnbDo6RGlzcGxheSAqZGlzcGxheSkKICAgICAgICAgbUNtZFF1ZXVl
LnNldChbW21NZXRhbERldmljZS5nZXQoKSBuZXdDb21tYW5kUXVldWVdIEFOR0xFX01UTF9BVVRP
UkVMRUFTRV0pOwogCiAgICAgICAgIG1DYXBzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQorI2lmIEFO
R0xFX0VOQUJMRV9NRVRBTF9TUElSVgogICAgICAgICBpZiAoIW1HbHNsYW5nSW5pdGlhbGl6ZWQp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEdsc2xhbmdJbml0aWFsaXplKCk7CiAgICAgICAgICAg
ICBtR2xzbGFuZ0luaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgfQorI2VuZGlmCiAKICAgICAg
ICAgaWYgKCFtU3RhdGUuZmVhdHVyZXNBbGxEaXNhYmxlZCkKICAgICAgICAgewpAQCAtMTIwLDEy
ICsxOTMsMTMgQEAgdm9pZCBEaXNwbGF5TXRsOjp0ZXJtaW5hdGUoKQogICAgIG1DYXBzSW5pdGlh
bGl6ZWQgPSBmYWxzZTsKIAogICAgIG1NZXRhbERldmljZVZlbmRvcklkID0gMDsKLQorI2lmIEFO
R0xFX0VOQUJMRV9NRVRBTF9TUElSVgogICAgIGlmIChtR2xzbGFuZ0luaXRpYWxpemVkKQogICAg
IHsKICAgICAgICAgR2xzbGFuZ1JlbGVhc2UoKTsKICAgICAgICAgbUdsc2xhbmdJbml0aWFsaXpl
ZCA9IGZhbHNlOwogICAgIH0KKyNlbmRpZgogfQogCiBib29sIERpc3BsYXlNdGw6OnRlc3REZXZp
Y2VMb3N0KCkKQEAgLTE3MSw2ICsyNDUsMTUgQEAgZWdsOjpFcnJvciBEaXNwbGF5TXRsOjp3YWl0
Q2xpZW50KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KQogICAgIHJldHVybiBlZ2w6Ok5vRXJy
b3IoKTsKIH0KIAorZWdsOjpFcnJvciBEaXNwbGF5TXRsOjp2YWxpZGF0ZUNsaWVudEJ1ZmZlcihj
b25zdCBlZ2w6OkNvbmZpZyAqY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRUdMZW51bSBidWZ0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xDbGllbnRCdWZmZXIgY2xpZW50QnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZ2w6OkF0
dHJpYnV0ZU1hcCAmYXR0cmlicykgY29uc3QKK3sKKyAgICAvLyBUT0RPOiBGaWxsIG91dCBwcm9w
ZXJseQorICAgIHJldHVybiBlZ2w6Ok5vRXJyb3IoKTsKK30KKwogZWdsOjpFcnJvciBEaXNwbGF5
TXRsOjp3YWl0TmF0aXZlKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LCBFR0xpbnQgZW5naW5l
KQogewogICAgIFVOSU1QTEVNRU5URUQoKTsKQEAgLTE4Nyw3ICsyNzAsOCBAQCBTdXJmYWNlSW1w
bCAqRGlzcGxheU10bDo6Y3JlYXRlV2luZG93U3VyZmFjZShjb25zdCBlZ2w6OlN1cmZhY2VTdGF0
ZSAmc3RhdGUsCiBTdXJmYWNlSW1wbCAqRGlzcGxheU10bDo6Y3JlYXRlUGJ1ZmZlclN1cmZhY2Uo
Y29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRyaWJzKQog
ewotICAgIHJldHVybiBuZXcgUEJ1ZmZlclN1cmZhY2VNdGwodGhpcywgc3RhdGUsIGF0dHJpYnMp
OworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3VyZmFjZUlt
cGwgKj4oMCk7CiB9CiAKIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJv
bUNsaWVudEJ1ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmc3RhdGUsCkBAIC0xOTUsMTUg
KzI3OSw3IEBAIFN1cmZhY2VJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVQYnVmZmVyRnJvbUNsaWVu
dEJ1ZmZlcihjb25zdCBlZ2w6OlN1cmZhY2VTdGF0ZSAmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUdMQ2xpZW50QnVmZmVyIGNsaWVudEJ1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykKIHsKLSAgICBzd2l0Y2ggKGJ1
ZnR5cGUpCi0gICAgewotICAgICAgICBjYXNlIEVHTF9JT1NVUkZBQ0VfQU5HTEU6Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IElPU3VyZmFjZVN1cmZhY2VNdGwodGhpcywgc3RhdGUsIGNsaWVudEJ1
ZmZlciwgYXR0cmlicyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBuZXcgSU9TdXJmYWNlU3VyZmFjZU10bCh0aGlzLCBzdGF0ZSwgY2xpZW50QnVmZmVy
LCBhdHRyaWJzKTsKIH0KIAogU3VyZmFjZUltcGwgKkRpc3BsYXlNdGw6OmNyZWF0ZVBpeG1hcFN1
cmZhY2UoY29uc3QgZWdsOjpTdXJmYWNlU3RhdGUgJnN0YXRlLApAQCAtMjQwLDE3ICszMTYsMTIg
QEAgU3RyZWFtUHJvZHVjZXJJbXBsICpEaXNwbGF5TXRsOjpjcmVhdGVTdHJlYW1Qcm9kdWNlckQz
RFRleHR1cmUoCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVNoYXJlR3JvdXBJbXBsICpEaXNw
bGF5TXRsOjpjcmVhdGVTaGFyZUdyb3VwKCkKLXsKLSAgICByZXR1cm4gbmV3IFNoYXJlR3JvdXBN
dGwoKTsKLX0KLQogZ2w6OlZlcnNpb24gRGlzcGxheU10bDo6Z2V0TWF4U3VwcG9ydGVkRVNWZXJz
aW9uKCkgY29uc3QKIHsKICAgICAvLyBOT1RFKGhxbGUpOiBTdXBwb3J0cyBHTEVTIDMuMCBvbiBp
T1MgR1BVIGZhbWlseSA0KyBmb3Igbm93LgogICAgIGlmIChzdXBwb3J0c0VpdGhlckdQVUZhbWls
eSg0LCAxKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtdGw6OmtNYXhTdXBwb3J0ZWRHTFZlcnNp
b247CisgICAgICAgIHJldHVybiBnbDo6VmVyc2lvbigzLCAwKTsKICAgICB9CiAgICAgcmV0dXJu
IGdsOjpWZXJzaW9uKDIsIDApOwogfQpAQCAtMjY1LDYgKzMzNiwxMSBAQCBFR0xTeW5jSW1wbCAq
RGlzcGxheU10bDo6Y3JlYXRlU3luYyhjb25zdCBlZ2w6OkF0dHJpYnV0ZU1hcCAmYXR0cmlicykK
ICAgICByZXR1cm4gbmV3IEVHTFN5bmNNdGwoYXR0cmlicyk7CiB9CiAKK1NoYXJlR3JvdXBJbXBs
ICpEaXNwbGF5TXRsOjpjcmVhdGVTaGFyZUdyb3VwKCkKK3sKKyAgICByZXR1cm4gbmV3IFNoYXJl
R3JvdXBJbXBsKCk7Cit9CisKIGVnbDo6RXJyb3IgRGlzcGxheU10bDo6bWFrZUN1cnJlbnQoZWds
OjpEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
Z2w6OlN1cmZhY2UgKmRyYXdTdXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlZ2w6OlN1cmZhY2UgKnJlYWRTdXJmYWNlLApAQCAtMzI2LDcgKzQwMiw3IEBAIGVnbDo6
Q29uZmlnU2V0IERpc3BsYXlNdGw6OmdlbmVyYXRlQ29uZmlncygpCiAgICAgY29uZmlnLnRyYW5z
cGFyZW50VHlwZSA9IEVHTF9OT05FOwogCiAgICAgLy8gUGJ1ZmZlcgotICAgIGNvbmZpZy5iaW5k
VG9UZXh0dXJlVGFyZ2V0ID0gRUdMX1RFWFRVUkVfMkQ7CisgICAgY29uZmlnLmJpbmRUb1RleHR1
cmVUYXJnZXQgPSBFR0xfVEVYVFVSRV9SRUNUQU5HTEVfQU5HTEU7CiAgICAgY29uZmlnLm1heFBC
dWZmZXJXaWR0aCAgICAgPSA0MDk2OwogICAgIGNvbmZpZy5tYXhQQnVmZmVySGVpZ2h0ICAgID0g
NDA5NjsKICAgICBjb25maWcubWF4UEJ1ZmZlclBpeGVscyAgICA9IDQwOTYgKiA0MDk2OwpAQCAt
MzYxLDQxICs0MzcsMTggQEAgZWdsOjpDb25maWdTZXQgRGlzcGxheU10bDo6Z2VuZXJhdGVDb25m
aWdzKCkKIAogICAgIGNvbmZpZy5jb2xvckNvbXBvbmVudFR5cGUgPSBFR0xfQ09MT1JfQ09NUE9O
RU5UX1RZUEVfRklYRURfRVhUOwogCi0gICAgY29uc3RleHByIGludCBzYW1wbGVzU3VwcG9ydGVk
W10gPSB7MCwgNH07CisgICAgLy8gQnVmZmVyIHNpemVzCisgICAgY29uZmlnLnJlZFNpemUgICAg
PSA4OworICAgIGNvbmZpZy5ncmVlblNpemUgID0gODsKKyAgICBjb25maWcuYmx1ZVNpemUgICA9
IDg7CisgICAgY29uZmlnLmFscGhhU2l6ZSAgPSA4OworICAgIGNvbmZpZy5idWZmZXJTaXplID0g
Y29uZmlnLnJlZFNpemUgKyBjb25maWcuZ3JlZW5TaXplICsgY29uZmlnLmJsdWVTaXplICsgY29u
ZmlnLmFscGhhU2l6ZTsKIAotICAgIGZvciAoaW50IHNhbXBsZXMgOiBzYW1wbGVzU3VwcG9ydGVk
KQotICAgIHsKLSAgICAgICAgY29uZmlnLnNhbXBsZXMgICAgICAgPSBzYW1wbGVzOwotICAgICAg
ICBjb25maWcuc2FtcGxlQnVmZmVycyA9IChzYW1wbGVzID09IDApID8gMCA6IDE7Ci0KLSAgICAg
ICAgLy8gQnVmZmVyIHNpemVzCi0gICAgICAgIGNvbmZpZy5yZWRTaXplICAgID0gODsKLSAgICAg
ICAgY29uZmlnLmdyZWVuU2l6ZSAgPSA4OwotICAgICAgICBjb25maWcuYmx1ZVNpemUgICA9IDg7
Ci0gICAgICAgIGNvbmZpZy5hbHBoYVNpemUgID0gODsKLSAgICAgICAgY29uZmlnLmJ1ZmZlclNp
emUgPSBjb25maWcucmVkU2l6ZSArIGNvbmZpZy5ncmVlblNpemUgKyBjb25maWcuYmx1ZVNpemUg
KyBjb25maWcuYWxwaGFTaXplOwotCi0gICAgICAgIC8vIFdpdGggRFMKLSAgICAgICAgY29uZmln
LmRlcHRoU2l6ZSAgID0gMjQ7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDg7Ci0KLSAg
ICAgICAgY29uZmlncy5hZGQoY29uZmlnKTsKLQotICAgICAgICAvLyBXaXRoIEQKLSAgICAgICAg
Y29uZmlnLmRlcHRoU2l6ZSAgID0gMjQ7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9IDA7
Ci0gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAgICAgLy8gV2l0aCBTCi0gICAg
ICAgIGNvbmZpZy5kZXB0aFNpemUgICA9IDA7Ci0gICAgICAgIGNvbmZpZy5zdGVuY2lsU2l6ZSA9
IDg7Ci0gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZyk7Ci0KLSAgICAgICAgLy8gTm8gRFMKLSAg
ICAgICAgY29uZmlnLmRlcHRoU2l6ZSAgID0gMDsKLSAgICAgICAgY29uZmlnLnN0ZW5jaWxTaXpl
ID0gMDsKLSAgICAgICAgY29uZmlncy5hZGQoY29uZmlnKTsKLSAgICB9CisgICAgLy8gVGVzdHMg
bGlrZSBkRVFQLUdMRVMyLmZ1bmN0aW9uYWwuZGVwdGhfcmFuZ2UuKiBhc3N1bWUgRUdMX0RFUFRI
X1NJWkUgaXMgcHJvcGVybHkgc2V0IGV2ZW4gaWYKKyAgICAvLyByZW5kZXJDb25maWcgYXR0cmli
dXRlcyBhcmUgc2V0IHRvIGdsdTo6UmVuZGVyQ29uZmlnOjpET05UX0NBUkUKKyAgICBjb25maWcu
ZGVwdGhTaXplICAgPSBHZXREZXB0aFNpemUoY29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCk7Cisg
ICAgY29uZmlnLnN0ZW5jaWxTaXplID0gR2V0U3RlbmNpbFNpemUoY29uZmlnLmRlcHRoU3RlbmNp
bEZvcm1hdCk7CisgICAgY29uZmlncy5hZGQoY29uZmlnKTsKIAogICAgIHJldHVybiBjb25maWdz
OwogfQpAQCAtNDA5LDI2ICs0NjIsNiBAQCBib29sIERpc3BsYXlNdGw6OmlzVmFsaWROYXRpdmVX
aW5kb3coRUdMTmF0aXZlV2luZG93VHlwZSB3aW5kb3cpIGNvbnN0CiAgICAgfQogfQogCi1lZ2w6
OkVycm9yIERpc3BsYXlNdGw6OnZhbGlkYXRlQ2xpZW50QnVmZmVyKGNvbnN0IGVnbDo6Q29uZmln
ICpjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFR0xlbnVtIGJ1ZnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVHTENsaWVudEJ1ZmZlciBjbGllbnRCdWZmZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVnbDo6QXR0cmlidXRlTWFwICZhdHRy
aWJzKSBjb25zdAotewotICAgIHN3aXRjaCAoYnVmdHlwZSkKLSAgICB7Ci0gICAgICAgIGNhc2Ug
RUdMX0lPU1VSRkFDRV9BTkdMRToKLSAgICAgICAgICAgIGlmICghSU9TdXJmYWNlU3VyZmFjZU10
bDo6VmFsaWRhdGVBdHRyaWJ1dGVzKGNsaWVudEJ1ZmZlciwgYXR0cmlicykpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVnbDo6RWdsQmFkQXR0cmlidXRlKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICByZXR1cm4gZWdsOjpFZ2xCYWRBdHRyaWJ1
dGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbDo6Tm9FcnJvcigpOwotfQotCiBzdGQ6OnN0cmlu
ZyBEaXNwbGF5TXRsOjpnZXRSZW5kZXJlckRlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICBBTkdM
RV9NVExfT0JKQ19TQ09QRQpAQCAtNTEyLDEwICs1NDUsMTYgQEAgdm9pZCBEaXNwbGF5TXRsOjpl
bnN1cmVDYXBzSW5pdGlhbGl6ZWQoKSBjb25zdAogICAgIG1OYXRpdmVDYXBzLm1heFJlbmRlcmJ1
ZmZlclNpemUgICA9IG1OYXRpdmVDYXBzLm1heDJEVGV4dHVyZVNpemU7CiAgICAgbU5hdGl2ZUNh
cHMubWluQWxpYXNlZFBvaW50U2l6ZSAgID0gMTsKICAgICAvLyBOT1RFKGhxbGUpOiBNZXRhbCBo
YXMgc29tZSBwcm9ibGVtcyBkcmF3aW5nIGJpZyBwb2ludCBzaXplIGV2ZW4gdGhvdWdoCi0gICAg
Ly8gTWV0YWwtRmVhdHVyZS1TZXQtVGFibGVzLnBkZiBzYXlzIHRoYXQgbWF4IHN1cHBvcnRlZCBw
b2ludCBzaXplIGlzIDUxMS4gV2UgbGltaXQgaXQgdG8gNjQgZm9yCi0gICAgLy8gbm93LgotICAg
IC8vIGh0dHA6Ly9hbmdsZWJ1Zy5jb20vNDgxNgotICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRQ
b2ludFNpemUgPSA2NDsKKyAgICAvLyBNZXRhbC1GZWF0dXJlLVNldC1UYWJsZXMucGRmIHNheXMg
dGhhdCBtYXggc3VwcG9ydGVkIHBvaW50IHNpemUgaXMgNTExLiBXZSBsaW1pdCBpdCB0byAyNTUK
KyAgICAvLyBvbiBJbnRlbCBhbmQgNjQgb24gQU1EIGZvciBub3cuCisgICAgaWYgKFttTWV0YWxE
ZXZpY2UuZ2V0KCkubmFtZSByYW5nZU9mU3RyaW5nOkAiSW50ZWwiXS5sb2NhdGlvbiAhPSBOU05v
dEZvdW5kKQorICAgIHsKKyAgICAgICAgbU5hdGl2ZUNhcHMubWF4QWxpYXNlZFBvaW50U2l6ZSA9
IDI1NTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU5hdGl2ZUNhcHMubWF4QWxp
YXNlZFBvaW50U2l6ZSA9IDY0OworICAgIH0KIAogICAgIG1OYXRpdmVDYXBzLm1pbkFsaWFzZWRM
aW5lV2lkdGggPSAxLjBmOwogICAgIG1OYXRpdmVDYXBzLm1heEFsaWFzZWRMaW5lV2lkdGggPSAx
LjBmOwpAQCAtNjE1LDYgKzY1NCw5IEBAIHZvaWQgRGlzcGxheU10bDo6ZW5zdXJlQ2Fwc0luaXRp
YWxpemVkKCkgY29uc3QKICAgICBtTmF0aXZlQ2Fwcy5tYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFy
YXRlQ29tcG9uZW50cyA9CiAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JN
X0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM7CiAKKyAgICAvLyBHTF9PRVNfZ2V0X3Byb2dy
YW1fYmluYXJ5CisgICAgbU5hdGl2ZUNhcHMucHJvZ3JhbUJpbmFyeUZvcm1hdHMucHVzaF9iYWNr
KEdMX1BST0dSQU1fQklOQVJZX0FOR0xFKTsKKwogICAgIC8vIEdMX0FQUExFX2NsaXBfZGlzdGFu
Y2UKICAgICBtTmF0aXZlQ2Fwcy5tYXhDbGlwRGlzdGFuY2VzID0gODsKIApAQCAtNjQ3LDYgKzY4
OSwxNSBAQCB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVFeHRlbnNpb25zKCkgY29uc3QKICAg
ICBtTmF0aXZlRXh0ZW5zaW9ucy50ZXh0dXJlQm9yZGVyQ2xhbXBPRVMgID0gZmFsc2U7ICAvLyBu
b3QgaW1wbGVtZW50ZWQgeWV0CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMudHJhbnNsYXRlZFNoYWRl
clNvdXJjZSA9IHRydWU7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZGlzY2FyZEZyYW1lYnVmZmVy
ICAgICA9IHRydWU7CisgICAgLy8gTm90IGltcGxlbWVudGVkIGJ1dCBleHBvc2UKKyAgICBtTmF0
aXZlRXh0ZW5zaW9ucy50ZXh0dXJlUmVjdGFuZ2xlID0gdHJ1ZTsKKworICAgIC8vIEVYVF9tdWx0
aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKKyAgICBpZiAobUZlYXR1cmVzLmFsbG93TXVsdGlz
YW1wbGVTdG9yZUFuZFJlc29sdmUuZW5hYmxlZCAmJgorICAgICAgICBtRmVhdHVyZXMuaGFzRGVw
dGhBdXRvUmVzb2x2ZS5lbmFibGVkICYmIG1GZWF0dXJlcy5oYXNTdGVuY2lsQXV0b1Jlc29sdmUu
ZW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1OYXRpdmVFeHRlbnNpb25zLm11bHRpc2FtcGxlZFJl
bmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAgfQogCiAgICAgLy8gRW5hYmxlIEVYVF9ibGVuZF9t
aW5tYXgKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5ibGVuZE1pbk1heCA9IHRydWU7CkBAIC02NjIs
OCArNzEzLDggQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0
CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuc2VtYXBob3JlICAgPSBmYWxzZTsKICAgICBtTmF0aXZl
RXh0ZW5zaW9ucy5zZW1hcGhvcmVGZCA9IGZhbHNlOwogCi0gICAgbU5hdGl2ZUV4dGVuc2lvbnMu
aW5zdGFuY2VkQXJyYXlzQU5HTEUgPSBtRmVhdHVyZXMuaGFzQmFzZVZlcnRleEluc3RhbmNlZERy
YXcuZW5hYmxlZDsKLSAgICBtTmF0aXZlRXh0ZW5zaW9ucy5pbnN0YW5jZWRBcnJheXNFWFQgICA9
IG1OYXRpdmVFeHRlbnNpb25zLmluc3RhbmNlZEFycmF5c0FOR0xFOworICAgIG1OYXRpdmVFeHRl
bnNpb25zLmluc3RhbmNlZEFycmF5c0FOR0xFID0gdHJ1ZTsKKyAgICBtTmF0aXZlRXh0ZW5zaW9u
cy5pbnN0YW5jZWRBcnJheXNFWFQgICA9IHRydWU7CiAKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5y
b2J1c3RCdWZmZXJBY2Nlc3NCZWhhdmlvciA9IGZhbHNlOwogCkBAIC02ODYsNiArNzM3LDkgQEAg
dm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXplRXh0ZW5zaW9ucygpIGNvbnN0CiAKICAgICBtTmF0
aXZlRXh0ZW5zaW9ucy5lbGVtZW50SW5kZXhVaW50T0VTID0gdHJ1ZTsKIAorICAgIC8vIEdMX09F
U19nZXRfcHJvZ3JhbV9iaW5hcnkKKyAgICBtTmF0aXZlRXh0ZW5zaW9ucy5nZXRQcm9ncmFtQmlu
YXJ5T0VTID0gdHJ1ZTsKKwogICAgIC8vIEdMX0FQUExFX2NsaXBfZGlzdGFuY2UKICAgICBtTmF0
aXZlRXh0ZW5zaW9ucy5jbGlwRGlzdGFuY2VBUFBMRSA9IHRydWU7CiAKQEAgLTcxMywxMSArNzY3
LDE3IEBAIHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZVRleHR1cmVDYXBzKCkgY29uc3QKIAog
ICAgIC8vIFJlLXZlcmlmeSB0ZXh0dXJlIGV4dGVuc2lvbnMuCiAgICAgbU5hdGl2ZUV4dGVuc2lv
bnMuc2V0VGV4dHVyZUV4dGVuc2lvblN1cHBvcnQobU5hdGl2ZVRleHR1cmVDYXBzKTsKLQorICAg
IC8vIE1vZGlmeSBleHRlbnNpb25zIGJhc2VkIG9mZiBvZiBzdXBwb3J0CiAgICAgLy8gRGlzYWJs
ZSBhbGwgZGVwdGggYnVmZmVyIGFuZCBzdGVuY2lsIGJ1ZmZlciByZWFkYmFjayBleHRlbnNpb25z
IHVudGlsIHdlIG5lZWQgdGhlbQogICAgIG1OYXRpdmVFeHRlbnNpb25zLnJlYWREZXB0aE5WICAg
ICAgICAgPSBmYWxzZTsKICAgICBtTmF0aXZlRXh0ZW5zaW9ucy5yZWFkU3RlbmNpbE5WICAgICAg
ID0gZmFsc2U7CiAgICAgbU5hdGl2ZUV4dGVuc2lvbnMuZGVwdGhCdWZmZXJGbG9hdDJOViA9IGZh
bHNlOworICAgIG1OYXRpdmVFeHRlbnNpb25zLnRleHR1cmVDb21wcmVzc2lvbkFTVENMRFJLSFIg
Jj0gc3VwcG9ydHNJT1NHUFVGYW1pbHkoMik7Cit9CisKK3ZvaWQgRGlzcGxheU10bDo6aW5pdGlh
bGl6ZUxpbWl0YXRpb25zKCkKK3sKKyAgICBtTmF0aXZlTGltaXRhdGlvbnMubm9WZXJ0ZXhBdHRy
aWJ1dGVBbGlhc2luZyA9IHRydWU7CiB9CiAKIHZvaWQgRGlzcGxheU10bDo6aW5pdGlhbGl6ZUZl
YXR1cmVzKCkKQEAgLTc3OSw2ICs4MzksOSBAQCB2b2lkIERpc3BsYXlNdGw6OmluaXRpYWxpemVG
ZWF0dXJlcygpCiAgICAgQU5HTEVfRkVBVFVSRV9DT05ESVRJT04oKCZtRmVhdHVyZXMpLCBhbGxv
d1NlcGFyYXRlZERlcHRoU3RlbmNpbEJ1ZmZlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIWlzT1NYICYmICFpc0NhdGFseXN0ICYmICFpc1NpbXVsYXRvcik7CiAKKyAgICBtRmVhdHVy
ZXMuZW11bGF0ZVRyYW5zZm9ybUZlZWRiYWNrLmVuYWJsZWQgPQorICAgICAgICBhbmdsZTo6R2V0
RW52aXJvbm1lbnRWYXIoa0FOR0xFVHJhbnNmb3JtRmVlZGJhY2tFbnYpWzBdID09ICcxJzsKKwog
ICAgIGFuZ2xlOjpQbGF0Zm9ybU1ldGhvZHMgKnBsYXRmb3JtID0gQU5HTEVQbGF0Zm9ybUN1cnJl
bnQoKTsKICAgICBwbGF0Zm9ybS0+b3ZlcnJpZGVGZWF0dXJlc010bChwbGF0Zm9ybSwgJm1GZWF0
dXJlcyk7CiAKQEAgLTc4Nyw2ICs4NTAsMjcgQEAgdm9pZCBEaXNwbGF5TXRsOjppbml0aWFsaXpl
RmVhdHVyZXMoKQogCiBhbmdsZTo6UmVzdWx0IERpc3BsYXlNdGw6OmluaXRpYWxpemVTaGFkZXJM
aWJyYXJ5KCkKIHsKKyAgICAjaWZkZWYgQU5HTEVfTUVUQUxfWENPREVfQlVJTERTX1NIQURFUlMK
KyAgICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVy
QXN5bmNJbmZvTXRsKTsKKyAgICAgICAgCisgICAgCisgICAgICAgIE5TU3RyaW5nICpwYXRoID0g
W05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdLmJ1bmRs
ZVBhdGg7CisgICAgICAgIE5TRXJyb3IgKiBlcnJvciA9IG51bGxwdHI7CisgICAgICAgIG1EZWZh
dWx0U2hhZGVyc0FzeW5jSW5mby0+ZGVmYXVsdFNoYWRlcnMgPSBbZ2V0TWV0YWxEZXZpY2UoKSBu
ZXdEZWZhdWx0TGlicmFyeVdpdGhCdW5kbGU6W05TQnVuZGxlIGJ1bmRsZVdpdGhQYXRoOnBhdGhd
IGVycm9yOiZlcnJvcl07CisKKyAgICAgICAgaWYgKGVycm9yICYmICFtRGVmYXVsdFNoYWRlcnNB
c3luY0luZm8tPmRlZmF1bHRTaGFkZXJzKQorICAgICAgICB7CisgICAgICAgICAgICBBTkdMRV9N
VExfT0JKQ19TQ09QRQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigpIDw8ICJJ
bnRlcm5hbCBlcnJvcjogbmV3RGVmYXVsdExpYnJhcnlXaXRoQnVuZGxlIGZhaWxlZC4gIiA8PCBl
cnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbi5VVEY4U3RyaW5nOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLT5kZWZhdWx0U2hhZGVyc0NvbXBpbGVF
cnJvciA9IHN0ZDo6bW92ZShlcnJvcik7CisgICAgICAgICAgICByZXR1cm4gYW5nbGU6OlJlc3Vs
dDo6U3RvcDsKKyAgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgbURlZmF1bHRT
aGFkZXJzQXN5bmNJbmZvLT5jb21waWxlZCA9IHRydWU7CisgICAgICAgIAorICAgICNlbHNlCiAg
ICAgbURlZmF1bHRTaGFkZXJzQXN5bmNJbmZvLnJlc2V0KG5ldyBEZWZhdWx0U2hhZGVyQXN5bmNJ
bmZvTXRsKTsKIAogICAgIC8vIENyZWF0ZSByZWZlcmVuY2VzIHRvIGFzeW5jIGluZm8gc3RydWN0
IHNpbmNlIGl0IG1pZ2h0IGJlIHJlbGVhc2VkIGluIHRlcm1pbmF0ZSgpLCBidXQgdGhlCkBAIC04
MTUsNyArODk5LDcgQEAgYW5nbGU6OlJlc3VsdCBEaXNwbGF5TXRsOjppbml0aWFsaXplU2hhZGVy
TGlicmFyeSgpCiAKICAgICAgICAgW25zU291cmNlIEFOR0xFX01UTF9BVVRPUkVMRUFTRV07CiAg
ICAgfQotCisgICAgI2VuZGlmCiAgICAgcmV0dXJuIGFuZ2xlOjpSZXN1bHQ6OkNvbnRpbnVlOwog
fQogCkBAIC04NDcsMTQ0ICs5MzEsMTIgQEAgaWQ8TVRMTGlicmFyeT4gRGlzcGxheU10bDo6Z2V0
RGVmYXVsdFNoYWRlcnNMaWIoKQogCiBib29sIERpc3BsYXlNdGw6OnN1cHBvcnRzSU9TR1BVRmFt
aWx5KHVpbnQ4X3QgaU9TRmFtaWx5KSBjb25zdAogewotI2lmICghVEFSR0VUX09TX0lPUyAmJiAh
VEFSR0VUX09TX1RWKSB8fCBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZWxzZQotIyAgICBpZiAoX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMzAw
MDApIHx8IChfX1RWX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTMwMDAwKQotICAgIC8vIElm
IGRldmljZSBzdXBwb3J0cyBbTVRMRGV2aWNlIHN1cHBvcnRzRmFtaWx5Ol0sIHRoZW4gdXNlIGl0
LgotICAgIGlmIChBTkdMRV9BUFBMRV9BVkFJTEFCTEVfSSgxMy4wKSkKLSAgICB7Ci0gICAgICAg
IE1UTEdQVUZhbWlseSBmYW1pbHk7Ci0gICAgICAgIHN3aXRjaCAoaU9TRmFtaWx5KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BV
RmFtaWx5QXBwbGUxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAy
OgotICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlMjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICBmYW1p
bHkgPSBNVExHUFVGYW1pbHlBcHBsZTM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5QXBwbGU0
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAg
ICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWlseUFwcGxlNTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSMgICAgICAgIGlmIFRBUkdFVF9PU19JT1MKLSAgICAgICAgICAgIGNhc2UgNjoKLSAgICAg
ICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlBcHBsZTY7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0jICAgICAgICBlbmRpZgotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFtnZXRNZXRhbERl
dmljZSgpIHN1cHBvcnRzRmFtaWx5OmZhbWlseV07Ci0gICAgfSAgLy8gTWV0YWwgMi4yCi0jICAg
IGVuZGlmICAvLyBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VECi0KLSAgICAvLyBJZiBk
ZXZpY2UgZG9lc24ndCBzdXBwb3J0IFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1
c2UKLSAgICAvLyBbTVRMRGV2aWNlIHN1cHBvcnRzRmVhdHVyZVNldDpdLgotICAgIE1UTEZlYXR1
cmVTZXQgZmVhdHVyZVNldDsKLSAgICBzd2l0Y2ggKGlPU0ZhbWlseSkKLSAgICB7Ci0jICAgIGlm
IFRBUkdFVF9PU19JT1MKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgZmVhdHVyZVNldCA9
IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTFfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9T
X0dQVUZhbWlseTJfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAg
ICAgICAgICAgZmVhdHVyZVNldCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTNfdjE7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgZmVhdHVyZVNl
dCA9IE1UTEZlYXR1cmVTZXRfaU9TX0dQVUZhbWlseTRfdjE7Ci0gICAgICAgICAgICBicmVhazsK
LSMgICAgICAgIGlmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTIwMDAwCi0g
ICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X2lP
U19HUFVGYW1pbHk1X3YxOwotICAgICAgICAgICAgYnJlYWs7Ci0jICAgICAgICBlbmRpZiAgLy8g
X19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRAotIyAgICBlbGlmIFRBUkdFVF9PU19UVgot
ICAgICAgICBjYXNlIDE6Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGZlYXR1cmVTZXQg
PSBNVExGZWF0dXJlU2V0X3R2T1NfR1BVRmFtaWx5MV92MTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBmZWF0dXJlU2V0ID0gTVRMRmVhdHVyZVNldF90
dk9TX0dQVUZhbWlseTJfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSMgICAgZW5kaWYgIC8vIFRB
UkdFVF9PU19JT1MKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gW2dldE1ldGFsRGV2aWNlKCkgc3VwcG9ydHNGZWF0dXJlU2V0
OmZlYXR1cmVTZXRdOwotI2VuZGlmICAgICAgLy8gVEFSR0VUX09TX0lPUyB8fCBUQVJHRVRfT1Nf
VFYKKyAgICByZXR1cm4gbXRsOjpTdXBwb3J0c0lPU0dQVUZhbWlseShnZXRNZXRhbERldmljZSgp
LCBpT1NGYW1pbHkpOwogfQogCiBib29sIERpc3BsYXlNdGw6OnN1cHBvcnRzTWFjR1BVRmFtaWx5
KHVpbnQ4X3QgbWFjRmFtaWx5KSBjb25zdAogewotI2lmIFRBUkdFVF9PU19PU1ggfHwgVEFSR0VU
X09TX01BQ0NBVEFMWVNUCi0jICAgIGlmIGRlZmluZWQoX19NQUNfMTBfMTUpCi0gICAgLy8gSWYg
ZGV2aWNlIHN1cHBvcnRzIFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1c2UgaXQu
Ci0gICAgaWYgKEFOR0xFX0FQUExFX0FWQUlMQUJMRV9YQygxMC4xNSwgMTMuMCkpCi0gICAgewot
ICAgICAgICBNVExHUFVGYW1pbHkgZmFtaWx5OwotCi0gICAgICAgIHN3aXRjaCAobWFjRmFtaWx5
KQotICAgICAgICB7Ci0jICAgICAgICBpZiBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKLSAgICAgICAg
ICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBNVExHUFVGYW1pbHlNYWNDYXRh
bHlzdDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAg
ICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjQ2F0YWx5c3QyOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotIyAgICAgICAgZWxzZSAgIC8vIFRBUkdFVF9PU19NQUNDQVRBTFlTVAot
ICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIGZhbWlseSA9IE1UTEdQVUZhbWls
eU1hYzE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAg
ICAgICAgICAgICAgZmFtaWx5ID0gTVRMR1BVRmFtaWx5TWFjMjsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSMgICAgICAgIGVuZGlmICAvLyBUQVJHRVRfT1NfTUFDQ0FUQUxZU1QKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIFtnZXRNZXRhbERldmljZSgpIHN1cHBvcnRzRmFtaWx5OmZhbWlseV07
Ci0gICAgfSAgLy8gTWV0YWwgMi4yCi0jICAgIGVuZGlmCi0KLSAgICAvLyBJZiBkZXZpY2UgZG9l
c24ndCBzdXBwb3J0IFtNVExEZXZpY2Ugc3VwcG9ydHNGYW1pbHk6XSwgdGhlbiB1c2UKLSAgICAv
LyBbTVRMRGV2aWNlIHN1cHBvcnRzRmVhdHVyZVNldDpdLgotIyAgICBpZiBUQVJHRVRfT1NfTUFD
Q0FUQUxZU1QKLSAgICBVTlJFQUNIQUJMRSgpOwotICAgIHJldHVybiBmYWxzZTsKLSMgICAgZWxz
ZQotICAgIE1UTEZlYXR1cmVTZXQgZmVhdHVyZVNldDsKLSAgICBzd2l0Y2ggKG1hY0ZhbWlseSkK
LSAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGZlYXR1cmVTZXQgPSBNVExGZWF0
dXJlU2V0X21hY09TX0dQVUZhbWlseTFfdjE7Ci0gICAgICAgICAgICBicmVhazsKLSMgICAgICAg
IGlmIGRlZmluZWQoX19NQUNfMTBfMTQpCi0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGZl
YXR1cmVTZXQgPSBNVExGZWF0dXJlU2V0X21hY09TX0dQVUZhbWlseTJfdjE7Ci0gICAgICAgICAg
ICBicmVhazsKLSMgICAgICAgIGVuZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBbZ2V0TWV0YWxEZXZpY2UoKSBzdXBwb3J0
c0ZlYXR1cmVTZXQ6ZmVhdHVyZVNldF07Ci0jICAgIGVuZGlmICAvLyBUQVJHRVRfT1NfTUFDQ0FU
QUxZU1QKLSNlbHNlICAgICAgIC8vICNpZiBUQVJHRVRfT1NfT1NYIHx8IFRBUkdFVF9PU19NQUND
QVRBTFlTVAotCi0gICAgcmV0dXJuIGZhbHNlOwotCi0jZW5kaWYKKyAgICByZXR1cm4gbXRsOjpT
dXBwb3J0c01hY0dQVUZhbWlseShnZXRNZXRhbERldmljZSgpLCBtYWNGYW1pbHkpOwogfQogCiBi
b29sIERpc3BsYXlNdGw6OnN1cHBvcnRzRWl0aGVyR1BVRmFtaWx5KHVpbnQ4X3QgaU9TRmFtaWx5
LCB1aW50OF90IG1hY0ZhbWlseSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZlck10bC5oIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVm
ZmVyTXRsLmgKaW5kZXggYjQ1OGJkOTFiYmVmYWY2ZGRiMjIyNjRiNzgxZTNlODZjN2MzZjdlNi4u
NWU1Y2NlOWM1MWNmOGZiMmJmYmFkZmYxNTczMzVlYTczYTI0OThhMCAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVm
ZmVyTXRsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLmgKQEAgLTIzLDEyICsyMywxNCBAQCBuYW1lc3BhY2Ug
bXRsCiBjbGFzcyBSZW5kZXJDb21tYW5kRW5jb2RlcjsKIH0gIC8vIG5hbWVzcGFjZSBtdGwKIGNs
YXNzIENvbnRleHRNdGw7Ci1jbGFzcyBXaW5kb3dTdXJmYWNlTXRsOworY2xhc3MgU3VyZmFjZU10
bDsKIAogY2xhc3MgRnJhbWVidWZmZXJNdGwgOiBwdWJsaWMgRnJhbWVidWZmZXJJbXBsCiB7CiAg
IHB1YmxpYzoKLSAgICBGcmFtZWJ1ZmZlck10bChjb25zdCBnbDo6RnJhbWVidWZmZXJTdGF0ZSAm
c3RhdGUsIGJvb2wgZmxpcFksIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIpOworICAgIGV4
cGxpY2l0IEZyYW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqYmFja2J1ZmZlcik7CiAgICAgfkZyYW1l
YnVmZmVyTXRsKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkZXN0cm95KGNvbnN0IGdsOjpDb250ZXh0
ICpjb250ZXh0KSBvdmVycmlkZTsKIApAQCAtOTcsNyArOTksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZl
ck10bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKIAogICAgIGdsOjpSZWN0YW5nbGUgZ2V0Q29t
cGxldGVSZW5kZXJBcmVhKCkgY29uc3Q7CiAgICAgaW50IGdldFNhbXBsZXMoKSBjb25zdDsKLSAg
ICBXaW5kb3dTdXJmYWNlTXRsICpnZXRBdHRhY2hlZEJhY2tidWZmZXIoKSBjb25zdCB7IHJldHVy
biBtQmFja2J1ZmZlcjsgfQorICAgIFN1cmZhY2VNdGxQcm90b2NvbCAqZ2V0QXR0YWNoZWRCYWNr
YnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUJhY2tidWZmZXI7IH0KIAogICAgIGJvb2wgcmVuZGVy
UGFzc0hhc1N0YXJ0ZWQoQ29udGV4dE10bCAqY29udGV4dE10bCkgY29uc3Q7CiAgICAgbXRsOjpS
ZW5kZXJDb21tYW5kRW5jb2RlciAqZW5zdXJlUmVuZGVyUGFzc1N0YXJ0ZWQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQpOwpAQCAtMTYyLDYgKzE2NCwxMCBAQCBjbGFzcyBGcmFtZWJ1ZmZlck10
bCA6IHB1YmxpYyBGcmFtZWJ1ZmZlckltcGwKICAgICBtdGw6OlJlbmRlckNvbW1hbmRFbmNvZGVy
ICplbnN1cmVSZW5kZXJQYXNzU3RhcnRlZChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBtdGw6OlJlbmRlclBhc3NEZXNjICZkZXNjKTsKIAorICAgIHZvaWQgb3ZlcnJpZGVDbGVhckNv
bG9yKGNvbnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNVExDbGVhckNvbG9yIGNsZWFyQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTVRMQ2xlYXJDb2xvciAqY29sb3JPdXQpOworCiAgICAgYW5nbGU6OlJlc3VsdCB1cGRh
dGVDb2xvclJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwgc2l6ZV90IGNv
bG9ySW5kZXhHTCk7CiAgICAgYW5nbGU6OlJlc3VsdCB1cGRhdGVEZXB0aFJlbmRlclRhcmdldChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCk7CiAgICAgYW5nbGU6OlJlc3VsdCB1cGRhdGVTdGVu
Y2lsUmVuZGVyVGFyZ2V0KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0KTsKQEAgLTE2OSwxMSAr
MTc1LDM3IEBAIGNsYXNzIEZyYW1lYnVmZmVyTXRsIDogcHVibGljIEZyYW1lYnVmZmVySW1wbAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnQgKmF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0TXRsICoqY2FjaGVkUmVuZGVyVGFyZ2V0KTsK
IAorICAgIC8vIFRoaXMgZnVuY3Rpb24gZWl0aGVyIHJldHVybnMgdGhlIHJlbmRlciB0YXJnZXQn
cyB0ZXh0dXJlIGl0c2VsZiBpZiB0aGUgdGV4dHVyZSBpcyByZWFkYWJsZQorICAgIC8vIG9yIGNy
ZWF0ZSBhIGNvcHkgb2YgdGhhdCB0ZXh0dXJlIHRoYXQgaXMgcmVhZGFibGUgaWYgbm90LiBUaGlz
IGZ1bmN0aW9uIGlzIHR5cGljYWxseSB1c2VkCisgICAgLy8gZm9yIHBhY2tlZCBkZXB0aCBzdGVu
Y2lsIHdoZXJlIHJlYWRpbmcgc3RlbmNpbCByZXF1aXJlcyBhIHN0ZW5jaWwgdmlldy4gSG93ZXZl
ciBpZiBhIHRleHR1cmUKKyAgICAvLyBoYXMgYm90aCByZW5kZXIgdGFyZ2V0LCBwaXhlbCBmb3Jt
YXQgdmlldyAmIHNoYWRlciByZWFkYWJsZSB1c2FnZSBmbGFncywgdGhlcmUgd2lsbCBiZQorICAg
IC8vIHNvbWUgZ2xpdGNoZXMgaGFwcGVuIGluIE1ldGFsIGZyYW1ld29yay4KKyAgICAvLyBTbyB0
aGUgc29sdXRpb24gaXMgY3JlYXRpbmcgYSBkZXB0aCBzdGVuY2lsIHRleHR1cmUgd2l0aG91dCBw
aXhlbCBmb3JtYXQgdmlldyBmbGFnIGJ1dCBoYXMKKyAgICAvLyByZW5kZXIgdGFyZ2V0IGZsYWcs
IHRoZW4gZHVyaW5nIGJsaXR0aW5nIHByb2Nlc3MsIHRoaXMgdGV4dHVyZSBpcyBjb3BpZWQgdG8g
YW5vdGhlcgorICAgIC8vIGludGVybWlkaWF0ZSB0ZXh0dXJlIGhhdmluZyBwaXhlbCBmb3JtYXQg
dmlldyBmbGFnLCBidXQgbm90IHJlbmRlciB0YXJnZXQgZmxhZy4KKyAgICBhbmdsZTo6UmVzdWx0
IGdldFJlYWRhYmxlVmlld0ZvclJlbmRlclRhcmdldChjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBSZW5kZXJUYXJnZXRNdGwgJnJ0dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkQXJlYSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGw6OlRleHR1cmVSZWYg
KnJlYWRhYmxlRGVwdGhWaWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG10bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVTdGVuY2lsVmlldywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcmVh
ZGFibGVWaWV3TGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgKnJlYWRhYmxlVmlld0xheWVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgKnJlYWRhYmxlVmll
d0FyZWEpOworCiAgICAgYW5nbGU6OlJlc3VsdCByZWFkUGl4ZWxzVG9QQk8oY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmYXJlYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYWNrUGl4ZWxzUGFyYW1zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclRhcmdldE10bCAqcmVuZGVyVGFyZ2V0KSBj
b25zdDsKIAorICAgIGFuZ2xlOjpSZXN1bHQgcmVhZFBpeGVsc1RvQnVmZmVyKGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUmVuZGVyVGFyZ2V0TXRsICpyZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXZlcnNlUm93T3JkZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5nbGU6OkZvcm1hdCAmZHN0QW5nbGVG
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZHN0
QnVmZmVyT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGRzdEJ1ZmZlclJvd1BpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG10bDo6QnVmZmVyUmVmICpkc3RCdWZmZXIpIGNvbnN0OworCiAgICAgLy8gTk9U
RTogd2UgY2Fubm90IHVzZSBSZW5kZXJUYXJnZXRDYWNoZSBoZXJlIGJlY2F1c2UgaXQgZG9lc24n
dCBzdXBwb3J0IHNlcGFyYXRlCiAgICAgLy8gZGVwdGggJiBzdGVuY2lsIGF0dGFjaG1lbnRzIGFz
IG9mIG5vdy4gU2VwYXJhdGUgZGVwdGggJiBzdGVuY2lsIGNvdWxkIGJlIHVzZWZ1bCB0bwogICAg
IC8vIHNhdmUgc3BhY2VzIG9uIGlPUyBkZXZpY2VzLiBTZWUgZG9jL1BhY2tlZERlcHRoU3RlbmNp
bFN1cHBvcnQubWQuCkBAIC0xODksOCArMjIxLDEwIEBAIGNsYXNzIEZyYW1lYnVmZmVyTXRsIDog
cHVibGljIEZyYW1lYnVmZmVySW1wbAogICAgIC8vIGFzIGJ5IGEgY29tcHV0ZSBwYXNzLgogICAg
IGJvb2wgbVJlbmRlclBhc3NDbGVhblN0YXJ0ID0gZmFsc2U7CiAKLSAgICBXaW5kb3dTdXJmYWNl
TXRsICptQmFja2J1ZmZlciA9IG51bGxwdHI7Ci0gICAgY29uc3QgYm9vbCBtRmxpcFkgICAgICAg
ICAgICAgPSBmYWxzZTsKKyAgICBTdXJmYWNlTXRsUHJvdG9jb2wgKm1CYWNrYnVmZmVyID0gbnVs
bHB0cjsKKyAgICBjb25zdCBib29sIG1GbGlwWSAgICAgICAgICAgICAgID0gZmFsc2U7CisKKyAg
ICBtdGw6OkJ1ZmZlclJlZiBtUmVhZFBpeGVsQnVmZmVyOwogfTsKIH0gIC8vIG5hbWVzcGFjZSBy
eAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVu
ZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvRnJhbWVCdWZmZXJNdGwubW0KaW5kZXggODRlNDIy
NzBhNzE1MzA3NzVhNzA4NmQ3MjcyNGRiZjkxOWM4NGFkNy4uZDcxZGU3MmQyZGQyNTFiMjhiYTZj
YzlmZmZjMTE1MzNjMDFkMDJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL0ZyYW1lQnVmZmVyTXRsLm1tCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9GcmFtZUJ1ZmZl
ck10bC5tbQpAQCAtMzMsMTIgKzMzLDMwIEBAIHZvaWQgT3ZlcnJpZGVNVExDbGVhckNvbG9yKGNv
bnN0IG10bDo6VGV4dHVyZVJlZiAmdGV4dHVyZSwKICAgICAqY29sb3JPdXQgPQogICAgICAgICBt
dGw6OkVtdWxhdGVkQWxwaGFDbGVhckNvbG9yKGNsZWFyQ29sb3IudG9NVExDbGVhckNvbG9yKCks
IHRleHR1cmUtPmdldENvbG9yV3JpdGFibGVNYXNrKCkpOwogfQorCitjb25zdCBnbDo6SW50ZXJu
YWxGb3JtYXQgJkdldFJlYWRBdHRhY2htZW50SW5mbyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRl
clRhcmdldE10bCAqcmVuZGVyVGFyZ2V0KQoreworICAgIEdMZW51bSBpbXBsRm9ybWF0OworCisg
ICAgaWYgKHJlbmRlclRhcmdldCAmJiByZW5kZXJUYXJnZXQtPmdldEZvcm1hdCgpKQorICAgIHsK
KyAgICAgICAgaW1wbEZvcm1hdCA9IHJlbmRlclRhcmdldC0+Z2V0Rm9ybWF0KCktPmFjdHVhbEFu
Z2xlRm9ybWF0KCkuZmJvSW1wbGVtZW50YXRpb25JbnRlcm5hbEZvcm1hdDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgaW1wbEZvcm1hdCA9IEdMX05PTkU7CisgICAgfQorCisgICAg
cmV0dXJuIGdsOjpHZXRTaXplZEludGVybmFsRm9ybWF0SW5mbyhpbXBsRm9ybWF0KTsKK30KKwog
fQogCiAvLyBGcmFtZWJ1ZmZlck10bCBpbXBsZW1lbnRhdGlvbgogRnJhbWVidWZmZXJNdGw6OkZy
YW1lYnVmZmVyTXRsKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlclN0YXRlICZzdGF0ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdpbmRvd1N1cmZhY2VNdGwgKmJhY2tidWZmZXIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3VyZmFjZU10bFByb3RvY29sICpiYWNrYnVmZmVyKQogICAgIDogRnJh
bWVidWZmZXJJbXBsKHN0YXRlKSwgbUJhY2tidWZmZXIoYmFja2J1ZmZlciksIG1GbGlwWShmbGlw
WSkKIHsKICAgICByZXNldCgpOwpAQCAtNTUsNiArNzMsOCBAQCB2b2lkIEZyYW1lYnVmZmVyTXRs
OjpyZXNldCgpCiAgICAgbURlcHRoUmVuZGVyVGFyZ2V0ID0gbVN0ZW5jaWxSZW5kZXJUYXJnZXQg
PSBudWxscHRyOwogCiAgICAgbVJlbmRlclBhc3NGaXJzdENvbG9yQXR0YWNobWVudEZvcm1hdCA9
IG51bGxwdHI7CisKKyAgICBtUmVhZFBpeGVsQnVmZmVyID0gbnVsbHB0cjsKIH0KIAogdm9pZCBG
cmFtZWJ1ZmZlck10bDo6ZGVzdHJveShjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKQEAgLTEy
Miw3ICsxNDIsNiBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhckJ1ZmZlcmZ2
KGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpCiB7CiAgICAgbXRsOjpDbGVh
clJlY3RQYXJhbXMgY2xlYXJPcHRzOwotCiAgICAgZ2w6OkRyYXdCdWZmZXJNYXNrIGNsZWFyQ29s
b3JCdWZmZXJzOwogICAgIGlmIChidWZmZXIgPT0gR0xfREVQVEgpCiAgICAgewpAQCAtMTMzLDcg
KzE1Miw2IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZnYoY29u
c3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgIGNsZWFyQ29sb3JCdWZmZXJzLnNldChk
cmF3YnVmZmVyKTsKICAgICAgICAgY2xlYXJPcHRzLmNsZWFyQ29sb3IgPSBtdGw6OkNsZWFyQ29s
b3JWYWx1ZSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pOwogICAg
IH0KLQogICAgIHJldHVybiBjbGVhckltcGwoY29udGV4dCwgY2xlYXJDb2xvckJ1ZmZlcnMsICZj
bGVhck9wdHMpOwogfQogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJ1
aXYoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCkBAIC0xNDUsOCArMTYzLDcgQEAgYW5nbGU6
OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJ1aXYoY29uc3QgZ2w6OkNvbnRleHQg
KmNvbnRleHQsCiAgICAgY2xlYXJDb2xvckJ1ZmZlcnMuc2V0KGRyYXdidWZmZXIpOwogCiAgICAg
bXRsOjpDbGVhclJlY3RQYXJhbXMgY2xlYXJPcHRzOwotICAgIGNsZWFyT3B0cy5jbGVhckNvbG9y
ID0gbXRsOjpDbGVhckNvbG9yVmFsdWUodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwg
dmFsdWVzWzNdKTsKLQorICAgIGNsZWFyT3B0cy5jbGVhckNvbG9yID0gIG10bDo6Q2xlYXJDb2xv
clZhbHVlKHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIHZhbHVlc1szXSk7CiAgICAg
cmV0dXJuIGNsZWFySW1wbChjb250ZXh0LCBjbGVhckNvbG9yQnVmZmVycywgJmNsZWFyT3B0cyk7
CiB9CiBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpjbGVhckJ1ZmZlcml2KGNvbnN0IGds
OjpDb250ZXh0ICpjb250ZXh0LApAQCAtMTU5LDcgKzE3Niw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJh
bWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyaXYoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRleHQsCiAg
ICAgZ2w6OkRyYXdCdWZmZXJNYXNrIGNsZWFyQ29sb3JCdWZmZXJzOwogICAgIGlmIChidWZmZXIg
PT0gR0xfU1RFTkNJTCkKICAgICB7Ci0gICAgICAgIGNsZWFyT3B0cy5jbGVhclN0ZW5jaWwgPSB2
YWx1ZXNbMF0gJiBtdGw6OmtTdGVuY2lsTWFza0FsbDsKKyAgICAgICAgY2xlYXJPcHRzLmNsZWFy
U3RlbmNpbCA9IGdsOjpjbGFtcCh2YWx1ZXNbMF0sIDAsIHN0YXRpY19jYXN0PEdMaW50PihtdGw6
OmtTdGVuY2lsTWFza0FsbCkpOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTc3LDcgKzE5
NCw3IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6OmNsZWFyQnVmZmVyZmkoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiB7CiAgICAgbXRsOjpDbGVhclJlY3RQYXJhbXMgY2xlYXJP
cHRzOwogICAgIGNsZWFyT3B0cy5jbGVhckRlcHRoICAgPSBkZXB0aDsKLSAgICBjbGVhck9wdHMu
Y2xlYXJTdGVuY2lsID0gc3RlbmNpbCAmIG10bDo6a1N0ZW5jaWxNYXNrQWxsOworICAgIGNsZWFy
T3B0cy5jbGVhclN0ZW5jaWwgPSBnbDo6Y2xhbXAoc3RlbmNpbCwgMCwgc3RhdGljX2Nhc3Q8R0xp
bnQ+KG10bDo6a1N0ZW5jaWxNYXNrQWxsKSk7CiAKICAgICByZXR1cm4gY2xlYXJJbXBsKGNvbnRl
eHQsIGdsOjpEcmF3QnVmZmVyTWFzaygpLCAmY2xlYXJPcHRzKTsKIH0KQEAgLTE4NSwxMiArMjAy
LDcgQEAgYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Y2xlYXJCdWZmZXJmaShjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCwKIGNvbnN0IGdsOjpJbnRlcm5hbEZvcm1hdCAmRnJhbWVidWZm
ZXJNdGw6OmdldEltcGxlbWVudGF0aW9uQ29sb3JSZWFkRm9ybWF0KAogICAgIGNvbnN0IGdsOjpD
b250ZXh0ICpjb250ZXh0KSBjb25zdAogewotICAgIENvbnRleHRNdGwgKmNvbnRleHRNdGwgICA9
IG10bDo6R2V0SW1wbChjb250ZXh0KTsKLSAgICBHTGVudW0gc2l6ZWRGb3JtYXQgICAgICAgPSBt
U3RhdGUuZ2V0UmVhZEF0dGFjaG1lbnQoKS0+Z2V0Rm9ybWF0KCkuaW5mby0+c2l6ZWRJbnRlcm5h
bEZvcm1hdDsKLSAgICBhbmdsZTo6Rm9ybWF0SUQgZm9ybWF0SUQgPSBhbmdsZTo6Rm9ybWF0OjpJ
bnRlcm5hbEZvcm1hdFRvSUQoc2l6ZWRGb3JtYXQpOwotICAgIGNvbnN0IG10bDo6Rm9ybWF0ICZt
dGxGb3JtYXQgPSBjb250ZXh0TXRsLT5nZXREaXNwbGF5KCktPmdldFBpeGVsRm9ybWF0KGZvcm1h
dElEKTsKLSAgICBHTGVudW0gaW1wbEZvcm1hdCAgICAgICAgICAgID0gbXRsRm9ybWF0LmFjdHVh
bEFuZ2xlRm9ybWF0KCkuZmJvSW1wbGVtZW50YXRpb25JbnRlcm5hbEZvcm1hdDsKLSAgICByZXR1
cm4gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXRJbmZvKGltcGxGb3JtYXQpOworICAgIHJldHVy
biBHZXRSZWFkQXR0YWNobWVudEluZm8oY29udGV4dCwgZ2V0Q29sb3JSZWFkUmVuZGVyVGFyZ2V0
KGNvbnRleHQpKTsKIH0KIAogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cmVhZFBpeGVs
cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKQEAgLTU5MCw2ICs2MDIsOSBAQCBhbmdsZTo6
UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpzeW5jU3RhdGUoY29uc3QgZ2w6OkNvbnRleHQgKmNvbnRl
eHQsCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRleHRNdGwtPm9uRHJhd0ZyYW1lQnVmZmVy
Q2hhbmdlZFN0YXRlKGNvbnRleHQsIHRoaXMsIHJlbmRlclBhc3NDaGFuZ2VkKTsKICAgICAgICAg
fQorCisgICAgICAgIC8vIFJlY3JlYXRlIHBpeGVsIHJlYWRpbmcgYnVmZmVyIGlmIG5lZWRlZCBp
biBmdXR1cmUuCisgICAgICAgIG1SZWFkUGl4ZWxCdWZmZXIgPSBudWxscHRyOwogICAgIH0KIAog
ICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKQEAgLTc0OCw3ICs3NjMsNyBAQCB2
b2lkIEZyYW1lYnVmZmVyTXRsOjpvblN0YXJ0ZWREcmF3aW5nVG9GcmFtZUJ1ZmZlcihjb25zdCBn
bDo6Q29udGV4dCAqY29udGV4dCkKIAogdm9pZCBGcmFtZWJ1ZmZlck10bDo6b25GcmFtZUVuZChj
b25zdCBnbDo6Q29udGV4dCAqY29udGV4dCkKIHsKLSAgICBpZiAoIW1CYWNrYnVmZmVyKQorICAg
IGlmICghbUJhY2tidWZmZXIgfHwgbUJhY2tidWZmZXItPnByZXNlcnZlQnVmZmVyKCkpCiAgICAg
ewogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODEyLDYgKzgyNyw5MiBAQCBhbmdsZTo6UmVz
dWx0IEZyYW1lYnVmZmVyTXRsOjp1cGRhdGVDYWNoZWRSZW5kZXJUYXJnZXQoY29uc3QgZ2w6OkNv
bnRleHQgKmNvbnRleAogICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKIH0KIAor
YW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6Z2V0UmVhZGFibGVWaWV3Rm9yUmVuZGVyVGFy
Z2V0KAorICAgIGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAorICAgIGNvbnN0IFJlbmRlclRh
cmdldE10bCAmcnR0LAorICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRBcmVhLAorICAgIG10
bDo6VGV4dHVyZVJlZiAqcmVhZGFibGVEZXB0aFZpZXdPdXQsCisgICAgbXRsOjpUZXh0dXJlUmVm
ICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0LAorICAgIHVpbnQzMl90ICpyZWFkYWJsZVZpZXdMZXZl
bCwKKyAgICB1aW50MzJfdCAqcmVhZGFibGVWaWV3TGF5ZXIsCisgICAgZ2w6OlJlY3RhbmdsZSAq
cmVhZGFibGVWaWV3QXJlYSkKK3sKKyAgICBDb250ZXh0TXRsICpjb250ZXh0TXRsICAgICA9IG10
bDo6R2V0SW1wbChjb250ZXh0KTsKKyAgICBtdGw6OlRleHR1cmVSZWYgc3JjVGV4dHVyZSA9IHJ0
dC5nZXRUZXh0dXJlKCk7CisgICAgdWludDMyX3QgbGV2ZWwgICAgICAgICAgICAgPSBydHQuZ2V0
TGV2ZWxJbmRleCgpLmdldCgpOworICAgIHVpbnQzMl90IHNsaWNlICAgICAgICAgICAgID0gcnR0
LmdldExheWVySW5kZXgoKTsKKworICAgIC8vIE5PVEUoaHFsZSk6IHNsaWNlIGlzIG5vdCB1c2Vk
IGF0bS4KKyAgICBBU1NFUlQoc2xpY2UgPT0gMCk7CisKKyAgICBib29sIHJlYWRTdGVuY2lsID0g
cmVhZGFibGVTdGVuY2lsVmlld091dDsKKworICAgIGlmICghc3JjVGV4dHVyZSkKKyAgICB7Cisg
ICAgICAgIGlmIChyZWFkYWJsZURlcHRoVmlld091dCkKKyAgICAgICAgeworICAgICAgICAgICAg
KnJlYWRhYmxlRGVwdGhWaWV3T3V0ID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
cmVhZGFibGVTdGVuY2lsVmlld091dCkKKyAgICAgICAgeworICAgICAgICAgICAgKnJlYWRhYmxl
U3RlbmNpbFZpZXdPdXQgPSBudWxscHRyOworICAgICAgICB9CisgICAgICAgICpyZWFkYWJsZVZp
ZXdBcmVhID0gcmVhZEFyZWE7CisgICAgICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51
ZTsKKyAgICB9CisKKyAgICBib29sIHNraXBDb3B5ID0gc3JjVGV4dHVyZS0+aXNTaGFkZXJSZWFk
YWJsZSgpOworICAgIGlmIChydHQuZ2V0Rm9ybWF0KCktPmhhc0RlcHRoQW5kU3RlbmNpbEJpdHMo
KSAmJiByZWFkU3RlbmNpbCkKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSB0ZXh0dXJlIGlzIHBh
Y2tlZCBkZXB0aCBzdGVuY2lsLCBhbmQgd2UgbmVlZCBzdGVuY2lsIHZpZXcsCisgICAgICAgIC8v
IHRoZW4gaXQgbXVzdCBzdXBwb3J0IGNyZWF0aW5nIGRpZmZlcmVudCBmb3JtYXQgdmlldy4KKyAg
ICAgICAgc2tpcENvcHkgPSBza2lwQ29weSAmJiBzcmNUZXh0dXJlLT5zdXBwb3J0Rm9ybWF0Vmll
dygpOworICAgIH0KKworICAgIGlmIChza2lwQ29weSkKKyAgICB7CisgICAgICAgIC8vIFRleHR1
cmUgc3VwcG9ydHMgc3RlbmNpbCB2aWV3LCBqdXN0IHVzZSBpdCBkaXJlY3RseQorICAgICAgICBp
ZiAocmVhZGFibGVEZXB0aFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJs
ZURlcHRoVmlld091dCA9IHNyY1RleHR1cmU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlYWRh
YmxlU3RlbmNpbFZpZXdPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5j
aWxWaWV3T3V0ID0gc3JjVGV4dHVyZTsKKyAgICAgICAgfQorICAgICAgICAqcmVhZGFibGVWaWV3
TGV2ZWwgPSBsZXZlbDsKKyAgICAgICAgKnJlYWRhYmxlVmlld0xheWVyID0gc2xpY2U7CisgICAg
ICAgICpyZWFkYWJsZVZpZXdBcmVhICA9IHJlYWRBcmVhOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBBU1NFUlQoc3JjVGV4dHVyZS0+dGV4dHVyZVR5cGUoKSAhPSBNVExUZXh0dXJl
VHlwZTNEKTsKKworICAgICAgICAvLyBUZXh0dXJlIGRvZXNuJ3Qgc3VwcG9ydCBzdGVuY2lsIHZp
ZXcgb3Igbm90IHNoYWRlciByZWFkYWJsZSwgY29weSB0byBhbiBpbnRlcm1pbmF0ZQorICAgICAg
ICAvLyB0ZXh0dXJlIHRoYXQgc3VwcG9ydHMgc3RlbmNpbCB2aWV3IGFuZCBzaGFkZXIgcmVhZC4K
KyAgICAgICAgbXRsOjpUZXh0dXJlUmVmIGZvcm1hdGFibGVWaWV3ID0gc3JjVGV4dHVyZS0+Z2V0
UmVhZGFibGVDb3B5KAorICAgICAgICAgICAgY29udGV4dE10bCwgY29udGV4dE10bC0+Z2V0Qmxp
dENvbW1hbmRFbmNvZGVyKCksIGxldmVsLCBzbGljZSwKKyAgICAgICAgICAgIE1UTFJlZ2lvbk1h
a2UyRChyZWFkQXJlYS54LCByZWFkQXJlYS55LCByZWFkQXJlYS53aWR0aCwgcmVhZEFyZWEuaGVp
Z2h0KSk7CisKKyAgICAgICAgQU5HTEVfQ0hFQ0tfR0xfQUxMT0MoY29udGV4dE10bCwgZm9ybWF0
YWJsZVZpZXcpOworCisgICAgICAgIGlmIChyZWFkYWJsZURlcHRoVmlld091dCkKKyAgICAgICAg
eworICAgICAgICAgICAgKnJlYWRhYmxlRGVwdGhWaWV3T3V0ID0gZm9ybWF0YWJsZVZpZXc7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHJlYWRhYmxlU3RlbmNpbFZpZXdPdXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgICpyZWFkYWJsZVN0ZW5jaWxWaWV3T3V0ID0gZm9ybWF0YWJsZVZpZXctPmdl
dFN0ZW5jaWxWaWV3KCk7CisgICAgICAgIH0KKworICAgICAgICAqcmVhZGFibGVWaWV3TGV2ZWwg
PSAwOworICAgICAgICAqcmVhZGFibGVWaWV3TGF5ZXIgPSAwOworICAgICAgICAqcmVhZGFibGVW
aWV3QXJlYSAgPSBnbDo6UmVjdGFuZ2xlKDAsIDAsIHJlYWRBcmVhLndpZHRoLCByZWFkQXJlYS5o
ZWlnaHQpOworICAgIH0KKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30K
KwogYW5nbGU6OlJlc3VsdCBGcmFtZWJ1ZmZlck10bDo6cHJlcGFyZVJlbmRlclBhc3MoY29uc3Qg
Z2w6OkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtdGw6OlJlbmRlclBhc3NEZXNjICpwRGVzY091dCkKIHsKQEAgLTgzMiw5
ICs5MzMsOSBAQCBhbmdsZTo6UmVzdWx0IEZyYW1lYnVmZmVyTXRsOjpwcmVwYXJlUmVuZGVyUGFz
cyhjb25zdCBnbDo6Q29udGV4dCAqY29udGV4dCwKICAgICAgICAgaWYgKGNvbG9yUmVuZGVyVGFy
Z2V0KQogICAgICAgICB7CiAgICAgICAgICAgICBjb2xvclJlbmRlclRhcmdldC0+dG9SZW5kZXJQ
YXNzQXR0YWNobWVudERlc2MoJmNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICBkZXNjLnNh
bXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1wbGVDb3VudCwgY29sb3JSZW5kZXJUYXJnZXQt
PmdldFJlbmRlclNhbXBsZXMoKSk7CiAKICAgICAgICAgICAgIGRlc2MubnVtQ29sb3JBdHRhY2ht
ZW50cyA9IHN0ZDo6bWF4KGRlc2MubnVtQ29sb3JBdHRhY2htZW50cywgY29sb3JJbmRleEdMICsg
MSk7Ci0gICAgICAgICAgICBkZXNjLnNhbXBsZUNvdW50ID0gc3RkOjptYXgoZGVzYy5zYW1wbGVD
b3VudCwgY29sb3JSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNhbXBsZXMoKSk7CiAKICAgICAgICAg
ICAgIGlmICghbVJlbmRlclBhc3NGaXJzdENvbG9yQXR0YWNobWVudEZvcm1hdCkKICAgICAgICAg
ICAgIHsKQEAgLTg2MiwyMiArOTYzLDI5IEBAIGFuZ2xlOjpSZXN1bHQgRnJhbWVidWZmZXJNdGw6
OnByZXBhcmVSZW5kZXJQYXNzKGNvbnN0IGdsOjpDb250ZXh0ICpjb250ZXh0LAogICAgICAgICBt
RGVwdGhSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCZkZXNjLmRlcHRo
QXR0YWNobWVudCk7CiAgICAgICAgIGRlc2Muc2FtcGxlQ291bnQgPSBzdGQ6Om1heChkZXNjLnNh
bXBsZUNvdW50LCBtRGVwdGhSZW5kZXJUYXJnZXQtPmdldFJlbmRlclNhbXBsZXMoKSk7CiAgICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGRlc2MuZGVwdGhBdHRhY2htZW50LnJlc2V0KCk7
Ci0gICAgfQogCiAgICAgaWYgKG1TdGVuY2lsUmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAg
bVN0ZW5jaWxSZW5kZXJUYXJnZXQtPnRvUmVuZGVyUGFzc0F0dGFjaG1lbnREZXNjKCZkZXNjLnN0
ZW5jaWxBdHRhY2htZW50KTsKICAgICAgICAgZGVzYy5zYW1wbGVDb3VudCA9IHN0ZDo6bWF4KGRl
c2Muc2FtcGxlQ291bnQsIG1TdGVuY2lsUmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJTYW1wbGVzKCkp
OwogICAgIH0KKworICAgIHJldHVybiBhbmdsZTo6UmVzdWx0OjpDb250aW51ZTsKK30KKworLy8g
T3ZlcnJpZGUgY2xlYXIgY29sb3IgYmFzZWQgb24gdGV4dHVyZSdzIHdyaXRlIG1hc2sKK3ZvaWQg
RnJhbWVidWZmZXJNdGw6Om92ZXJyaWRlQ2xlYXJDb2xvcihjb25zdCBtdGw6OlRleHR1cmVSZWYg
JnRleHR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVRMQ2xl
YXJDb2xvciBjbGVhckNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE1UTENsZWFyQ29sb3IgKmNvbG9yT3V0KQoreworICAgIGlmICh0ZXh0dXJlKQorICAgIHsK
KyAgICAgICAgKmNvbG9yT3V0ID0gbXRsOjpFbXVsYXRlZEFscGhhQ2xlYXJDb2xvcihjbGVhckNv
bG9yLCB0ZXh0dXJlLT5nZXRDb2xvcldyaXRhYmxlTWFzaygpKTsKKyAgICB9CiAgICAgZWxzZQog
ICAgIHsKLSAgICAgICAgZGVzYy5zdGVuY2lsQXR0YWNobWVudC5yZXNldCgpOworICAgICAgICAq
Y29sb3JPdXQgPSBjbGVhckNvbG9yOwogICAgIH0KLQotICA